From: daiwei Date: Mon, 27 Jan 2025 01:35:14 +0000 (+0800) Subject: chore: update X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3cb610072457a31637e2142ed797f9192442cff;p=thirdparty%2Fvuejs%2Fcore.git chore: update --- diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index d240233118..3d09dc9691 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -416,7 +416,7 @@ export interface SkipNode extends Node { consequent: IfBranchNode | CallExpression alternate: IfBranchNode newline: boolean - codegenNode?: ConditionalExpression + codegenNode: ConditionalExpression | undefined } export interface ConditionalExpression extends Node { diff --git a/packages/compiler-core/src/transforms/vSkip.ts b/packages/compiler-core/src/transforms/vSkip.ts index 9d0f11763b..d4436a38e1 100644 --- a/packages/compiler-core/src/transforms/vSkip.ts +++ b/packages/compiler-core/src/transforms/vSkip.ts @@ -128,13 +128,18 @@ export function processSkip( processAsSkipNode = true children = node.children } else if (isComponent) { - ;({ processAsSkipNode, children } = resolveDefaultSlot( - node, - context, - processAsSkipNode, - children, - loc, - )) + const { hasDynamicSlots, defaultSlot } = resolveDefaultSlot(node, context) + if (!hasDynamicSlots) { + if (defaultSlot) { + processAsSkipNode = true + // using the cloned node for ssr VNode-based slot + children = context.inSSR ? clone(defaultSlot) : defaultSlot + } else { + context.onError( + createCompilerError(ErrorCodes.X_V_SKIP_UNEXPECTED_SLOT, loc), + ) + } + } } let skipNode: SkipNode | undefined @@ -155,6 +160,7 @@ export function processSkip( consequent, alternate: createBranchNode(node, node.loc, [node]), newline: true, + codegenNode: undefined, } context.replaceNode(skipNode) @@ -163,17 +169,11 @@ export function processSkip( if (processCodegen) return processCodegen(skipNode) } -function resolveDefaultSlot( - node: ComponentNode, - context: TransformContext, - processAsSkipNode: boolean, - children: TemplateChildNode[], - loc: SourceLocation, -) { +function resolveDefaultSlot(node: ComponentNode, context: TransformContext) { + let defaultSlot: TemplateChildNode[] | undefined = undefined const { slots, hasDynamicSlots } = buildSlots(node, context, undefined, true) // find default slot without slot props if not has dynamic slots if (!hasDynamicSlots && slots.type === NodeTypes.JS_OBJECT_EXPRESSION) { - processAsSkipNode = true const prop = slots.properties.find( p => p.type === NodeTypes.JS_PROPERTY && @@ -182,17 +182,10 @@ function resolveDefaultSlot( p.value.params === undefined, ) if (prop) { - const slotNode = prop.value.returns as TemplateChildNode[] - // using the cloned node for ssr VNode-based slot - children = context.inSSR ? clone(slotNode) : slotNode - } else { - context.onError( - createCompilerError(ErrorCodes.X_V_SKIP_UNEXPECTED_SLOT, loc), - ) + defaultSlot = prop.value.returns as TemplateChildNode[] } } - - return { processAsSkipNode, children } + return { hasDynamicSlots, defaultSlot } } function createBranchNode(