From: 三咲智子 Kevin Deng Date: Mon, 29 Jan 2024 15:06:21 +0000 (+0800) Subject: fix(compiler-vapor): handle no template X-Git-Tag: v3.6.0-alpha.1~16^2~638 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48d2aa3bcbbc6568c46b797af8f42bc3a7d2aeb6;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-vapor): handle no template --- diff --git a/packages/compiler-vapor/src/generate.ts b/packages/compiler-vapor/src/generate.ts index b673e0585a..e629138617 100644 --- a/packages/compiler-vapor/src/generate.ts +++ b/packages/compiler-vapor/src/generate.ts @@ -10,7 +10,7 @@ import { import { type BlockFunctionIRNode, DynamicFlag, - type IRDynamicChildren, + type IRDynamicInfo, IRNodeTypes, type OperationNode, type RootIRNode, @@ -313,20 +313,23 @@ export function generate( } } -function genChildren(children: IRDynamicChildren) { +function genChildren(children: IRDynamicInfo[]) { let code = '' let offset = 0 - for (const [index, child] of Object.entries(children)) { - const childrenLength = Object.keys(child.children).length + + for (const [index, child] of children.entries()) { if (child.dynamicFlags & DynamicFlag.NON_TEMPLATE) { offset-- - continue } const idx = Number(index) + offset const id = - child.dynamicFlags & DynamicFlag.INSERT ? child.placeholder : child.id - const childrenString = childrenLength && genChildren(child.children) + child.dynamicFlags & DynamicFlag.REFERENCED + ? child.dynamicFlags & DynamicFlag.INSERT + ? child.anchor + : child.id + : null + const childrenString = genChildren(child.children) if (id !== null || childrenString) { code += ` ${idx}: [` diff --git a/packages/compiler-vapor/src/ir.ts b/packages/compiler-vapor/src/ir.ts index f79c878418..a9c9d8f7cf 100644 --- a/packages/compiler-vapor/src/ir.ts +++ b/packages/compiler-vapor/src/ir.ts @@ -199,7 +199,7 @@ export enum DynamicFlag { export interface IRDynamicInfo { id: number | null dynamicFlags: DynamicFlag - placeholder: number | null + anchor: number | null children: IRDynamicInfo[] } diff --git a/packages/compiler-vapor/src/transform.ts b/packages/compiler-vapor/src/transform.ts index 61f0f6e893..49c52fc2a0 100644 --- a/packages/compiler-vapor/src/transform.ts +++ b/packages/compiler-vapor/src/transform.ts @@ -102,7 +102,7 @@ const defaultOptions = { export const genDefaultDynamic = (): IRDynamicInfo => ({ id: null, dynamicFlags: 0, - placeholder: null, + anchor: null, children: [], }) @@ -335,7 +335,9 @@ function processDynamicChildren(ctx: TransformContext) { if (prevChildren.length) { if (hasStatic) { ctx.childrenTemplate[index - prevChildren.length] = `` - const anchor = (prevChildren[0].placeholder = ctx.increaseId()) + + prevChildren[0].dynamicFlags -= DynamicFlag.NON_TEMPLATE + const anchor = (prevChildren[0].anchor = ctx.increaseId()) ctx.registerOperation({ type: IRNodeTypes.INSERT_NODE,