From: daiwei Date: Tue, 4 Mar 2025 07:12:02 +0000 (+0800) Subject: wip: handle built-in components X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e593c26589c5b8008a90b60ba330a88556c9444;p=thirdparty%2Fvuejs%2Fcore.git wip: handle built-in components --- diff --git a/packages/compiler-vapor/src/generators/component.ts b/packages/compiler-vapor/src/generators/component.ts index b131ad2e94..8b0ab73e78 100644 --- a/packages/compiler-vapor/src/generators/component.ts +++ b/packages/compiler-vapor/src/generators/component.ts @@ -39,6 +39,7 @@ import { genEventHandler } from './event' import { genDirectiveModifiers, genDirectivesForElement } from './directive' import { genBlock } from './block' import { genModelHandler } from './vModel' +import { isBuiltInComponent } from '../transforms/transformElement' export function genCreateComponent( operation: CreateComponentIRNode, @@ -90,6 +91,13 @@ export function genCreateComponent( } else if (operation.asset) { return toValidAssetId(operation.tag, 'component') } else { + const { tag } = operation + const builtInTag = isBuiltInComponent(tag) + if (builtInTag) { + // @ts-expect-error + helper(builtInTag) + return `_${builtInTag}` + } return genExpression( extend(createSimpleExpression(operation.tag, false), { ast: null }), context, diff --git a/packages/compiler-vapor/src/transforms/transformElement.ts b/packages/compiler-vapor/src/transforms/transformElement.ts index f42801ace6..14cdf66c2e 100644 --- a/packages/compiler-vapor/src/transforms/transformElement.ts +++ b/packages/compiler-vapor/src/transforms/transformElement.ts @@ -109,6 +109,12 @@ function transformComponentElement( asset = false } + const builtInTag = isBuiltInComponent(tag) + if (builtInTag) { + tag = builtInTag + asset = false + } + const dotIndex = tag.indexOf('.') if (dotIndex > 0) { const ns = resolveSetupReference(tag.slice(0, dotIndex), context) @@ -435,3 +441,9 @@ function mergePropValues(existing: IRProp, incoming: IRProp) { function isComponentTag(tag: string) { return tag === 'component' || tag === 'Component' } + +export function isBuiltInComponent(tag: string): string | undefined { + if (tag === 'Transition' || tag === 'transition') { + return 'Transition' + } +}