feat(compiler-sfc): support kebab-case components in <script setup> sfc template

This commit is contained in:
Evan You
2020-11-09 17:22:58 -05:00
parent 8cf0a40d5b
commit 3f99e239e0
3 changed files with 20 additions and 9 deletions

View File

@@ -22,7 +22,8 @@ import {
isArray,
NOOP,
PatchFlags,
PatchFlagNames
PatchFlagNames,
EMPTY_OBJ
} from '@vue/shared'
import { defaultOnError } from './errors'
import {
@@ -122,7 +123,7 @@ export function createTransformContext(
scopeId = null,
ssr = false,
ssrCssVars = ``,
bindingMetadata = {},
bindingMetadata = EMPTY_OBJ,
onError = defaultOnError
}: TransformOptions
): TransformContext {

View File

@@ -26,7 +26,10 @@ import {
isSymbol,
isOn,
isObject,
isReservedProp
isReservedProp,
capitalize,
camelize,
EMPTY_OBJ
} from '@vue/shared'
import { createCompilerError, ErrorCodes } from '../errors'
import {
@@ -246,8 +249,15 @@ export function resolveComponentType(
}
// 3. user component (from setup bindings)
if (context.bindingMetadata[tag] === 'setup') {
return `$setup[${JSON.stringify(tag)}]`
let tagFromSetup = tag
const bindings = context.bindingMetadata
if (
bindings !== EMPTY_OBJ &&
(bindings[tagFromSetup] === 'setup' ||
bindings[(tagFromSetup = camelize(tag))] === 'setup' ||
bindings[(tagFromSetup = capitalize(camelize(tag)))] === 'setup')
) {
return `$setup[${JSON.stringify(tagFromSetup)}]`
}
// 4. user component (resolve)