From 48d2aa3bcbbc6568c46b797af8f42bc3a7d2aeb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 29 Jan 2024 23:06:21 +0800 Subject: [PATCH] fix(compiler-vapor): handle no template --- packages/compiler-vapor/src/generate.ts | 17 ++++++++++------- packages/compiler-vapor/src/ir.ts | 2 +- packages/compiler-vapor/src/transform.ts | 6 ++++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/compiler-vapor/src/generate.ts b/packages/compiler-vapor/src/generate.ts index b673e0585..e62913861 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 f79c87841..a9c9d8f7c 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 61f0f6e89..49c52fc2a 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,