wip: inline-template compat

This commit is contained in:
Evan You 2021-04-17 23:19:40 -04:00
parent 1390ece04f
commit 3ea68691e2
4 changed files with 70 additions and 25 deletions

View File

@ -20,7 +20,9 @@ export const enum CompilerDeprecationTypes {
COMPILER_V_BIND_OBJECT_ORDER = 'COMPILER_V_BIND_OBJECT_ORDER', COMPILER_V_BIND_OBJECT_ORDER = 'COMPILER_V_BIND_OBJECT_ORDER',
COMPILER_V_ON_NATIVE = 'COMPILER_V_ON_NATIVE', COMPILER_V_ON_NATIVE = 'COMPILER_V_ON_NATIVE',
COMPILER_V_IF_V_FOR_PRECEDENCE = 'COMPILER_V_IF_V_FOR_PRECEDENCE', COMPILER_V_IF_V_FOR_PRECEDENCE = 'COMPILER_V_IF_V_FOR_PRECEDENCE',
COMPILER_NATIVE_TEMPLATE = 'COMPILER_NATIVE_TEMPLATE' COMPILER_NATIVE_TEMPLATE = 'COMPILER_NATIVE_TEMPLATE',
COMPILER_INLINE_TEMPLATE = 'COMPILER_INLINE_TEMPLATE',
COMPILER_FILTER = 'COMPILER_FILTER'
} }
type DeprecationData = { type DeprecationData = {
@ -80,6 +82,16 @@ const deprecationData: Record<CompilerDeprecationTypes, DeprecationData> = {
message: message:
`<template> with no special directives will render as a native template ` + `<template> with no special directives will render as a native template ` +
`element instead of its inner content in Vue 3.` `element instead of its inner content in Vue 3.`
},
[CompilerDeprecationTypes.COMPILER_INLINE_TEMPLATE]: {
message: `"inline-template" has been removed in Vue 3.`,
link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`
},
[CompilerDeprecationTypes.COMPILER_FILTER]: {
message: `filters have been removed in Vue 3.`,
link: `https://v3.vuejs.org/guide/migration/filters.html`
} }
} }

View File

@ -406,6 +406,27 @@ function parseElement(
const children = parseChildren(context, mode, ancestors) const children = parseChildren(context, mode, ancestors)
ancestors.pop() ancestors.pop()
// 2.x inline-template compat
if (__COMPAT__) {
const inlineTemplateProp = element.props.find(
p => p.type === NodeTypes.ATTRIBUTE && p.name === 'inline-template'
) as AttributeNode
if (
inlineTemplateProp &&
checkCompatEnabled(
CompilerDeprecationTypes.COMPILER_INLINE_TEMPLATE,
context,
inlineTemplateProp.loc
)
) {
inlineTemplateProp.value!.content = getSelection(
context,
element.loc.end
).source
console.log(inlineTemplateProp)
}
}
element.children = children element.children = children
// End tag. // End tag.
@ -516,7 +537,7 @@ function parseTag(
return return
} }
// warn v-if/v-for usage on the same element // 2.x deprecation checks
if (__COMPAT__ && __DEV__ && !__TEST__) { if (__COMPAT__ && __DEV__ && !__TEST__) {
let hasIf = false let hasIf = false
let hasFor = false let hasFor = false

View File

@ -712,24 +712,31 @@ export function finishComponentSetup(
NOOP) as InternalRenderFunction NOOP) as InternalRenderFunction
} else if (!instance.render) { } else if (!instance.render) {
// could be set from setup() // could be set from setup()
if (compile && Component.template && !Component.render) { if (compile && !Component.render) {
if (__DEV__) { const template =
startMeasure(instance, `compile`) (__COMPAT__ &&
} instance.vnode.props &&
const compilerOptions: CompilerOptions = { instance.vnode.props['inline-template']) ||
isCustomElement: instance.appContext.config.isCustomElement, Component.template
delimiters: Component.delimiters if (template) {
} if (__DEV__) {
if (__COMPAT__) { startMeasure(instance, `compile`)
// pass runtime compat config into the compiler }
compilerOptions.compatConfig = Object.create(globalCompatConfig) const compilerOptions: CompilerOptions = {
if (Component.compatConfig) { isCustomElement: instance.appContext.config.isCustomElement,
extend(compilerOptions.compatConfig, Component.compatConfig) delimiters: Component.delimiters
}
if (__COMPAT__) {
// pass runtime compat config into the compiler
compilerOptions.compatConfig = Object.create(globalCompatConfig)
if (Component.compatConfig) {
extend(compilerOptions.compatConfig, Component.compatConfig)
}
}
Component.render = compile(template, compilerOptions)
if (__DEV__) {
endMeasure(instance, `compile`)
} }
}
Component.render = compile(Component.template, compilerOptions)
if (__DEV__) {
endMeasure(instance, `compile`)
} }
} }

View File

@ -297,12 +297,17 @@ function setFullProps(
continue continue
} }
if (__COMPAT__ && key.startsWith('onHook:')) { if (__COMPAT__) {
softAssertCompatEnabled( if (key.startsWith('onHook:')) {
DeprecationTypes.INSTANCE_EVENT_HOOKS, softAssertCompatEnabled(
instance, DeprecationTypes.INSTANCE_EVENT_HOOKS,
key.slice(2).toLowerCase() instance,
) key.slice(2).toLowerCase()
)
}
if (key === 'inline-template') {
continue
}
} }
const value = rawProps[key] const value = rawProps[key]