{"version":3,"sources":["../src/constants.ts","../src/codegen-signal.ts"],"names":[],"mappings":"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","file":"signal.cjs","sourcesContent":["// src/constants.ts\n// 所有枚举作为 `as const` 对象（isolatedModules 禁止 const enum）\n\nexport const NodeTypes = {\n  ROOT: 0,\n  ELEMENT: 1,\n  TEXT: 2,\n  COMMENT: 3,\n  INTERPOLATION: 4,\n  ATTRIBUTE: 5,\n  DIRECTIVE: 6,\n  SIMPLE_EXPRESSION: 7,\n  COMPOUND_EXPRESSION: 8,\n  VNODE_CALL: 9,\n  JS_CALL_EXPRESSION: 10,\n  JS_OBJECT_EXPRESSION: 11,\n  JS_PROPERTY: 12,\n  JS_ARRAY_EXPRESSION: 13,\n  JS_FUNCTION_EXPRESSION: 14,\n  JS_CONDITIONAL_EXPRESSION: 15,\n  JS_CACHE_EXPRESSION: 16,\n} as const;\n\nexport const ElementTypes = {\n  ELEMENT: 0,\n  COMPONENT: 1,\n  SLOT: 2,\n  TEMPLATE: 3,\n} as const;\n\nexport const ConstantTypes = {\n  NOT_CONSTANT: 0,\n  CAN_SKIP_PATCH: 1,\n  CAN_HOIST: 2,\n  CAN_STRINGIFY: 3,\n} as const;\n\nexport const TagType = {\n  Start: 0,\n  End: 1,\n} as const;\n\nexport const TextModes = {\n  DATA: 0,\n  RCDATA: 1,\n  RAWTEXT: 2,\n  CDATA: 3,\n} as const;\n\nexport const BindingTypes = {\n  DATA: 'data' as const,\n  PROPS: 'props' as const,\n  SETUP: 'setup' as const,\n  LITERAL_CONST: 'literal-const' as const,\n} as const;\n\nexport { PatchFlags } from '@lytjs/common-vnode';\n\n// 运行时辅助函数名称\nexport const VNodeHook = {\n  BEFORE_MOUNT: 'bm',\n  MOUNTED: 'm',\n  BEFORE_UPDATE: 'bu',\n  UPDATED: 'u',\n  BEFORE_UNMOUNT: 'bum',\n  UNMOUNTED: 'um',\n} as const;\n\n// 运行时辅助函数符号\nexport const RENDER_HELPER = 'renderHelper' as const;\n\n// 代码生成的辅助函数名称映射\nexport const helperNameMap: Record<string, string> = {\n  CREATE_VNODE: 'createElementVNode',\n  CREATE_ELEMENT_VNODE: 'createElementVNode',\n  CREATE_COMMENT: 'createCommentVNode',\n  CREATE_TEXT: 'createTextVNode',\n  CREATE_STATIC: 'createStaticVNode',\n  RESOLVE_COMPONENT: 'resolveComponent',\n  RESOLVE_DYNAMIC_COMPONENT: 'resolveDynamicComponent',\n  RESOLVE_DIRECTIVE: 'resolveDirective',\n  RENDER_LIST: 'renderList',\n  RENDER_SLOT: 'renderSlot',\n  CREATE_SLOTS: 'createSlots',\n  TO_DISPLAY_STRING: 'toDisplayString',\n  MERGE_PROPS: 'mergeProps',\n  TO_HANDLER_KEY: 'toHandlerKey',\n  SET_BLOCK_TRACKING: 'setBlockTracking',\n  CREATE_BLOCK: 'createBlock',\n  OPEN_BLOCK: 'openBlock',\n  WITH_CTX: 'withCtx',\n  NORMALIZE_CLASS: 'normalizeClass',\n  NORMALIZE_STYLE: 'normalizeStyle',\n  NORMALIZE_PROPS: 'normalizeProps',\n  GUARD_REACTIVE_PROPS: 'guardReactiveProps',\n  SANITIZE_HTML: 'sanitizeHTML',\n  WITH_MEMO: 'withMemo',\n} as const;\n\n/**\n * 支持的裸指令名集合（\"所见即所得\"模式）\n * 这些指令名在模板中无需 v- 前缀即可被识别\n */\nexport const BARE_DIRECTIVE_NAMES = new Set([\n  'if',\n  'else-if',\n  'else',\n  'for',\n  'each',\n  'model',\n  'show',\n  'text',\n  'html',\n  'once',\n  'memo',\n  'pre',\n  'cloak',\n]);\n\n/**\n * 裸指令名与 HTML 原生属性的冲突规则\n * key: 指令名, value: 在这些标签上不识别为指令（视为原生属性）\n */\nexport const BARE_DIRECTIVE_CONFLICTS: Record<string, Set<string>> = {\n  for: new Set(['label', 'output']),\n  show: new Set(['dialog']),\n  text: new Set([]), // text 仅与 SVG <text> 元素标签冲突，不影响属性解析\n};\n\n/**\n * 需要通过值格式启发式判断的指令名\n * key: 指令名, value: 用于匹配指令值格式的正则表达式\n */\nexport const BARE_DIRECTIVE_VALUE_PATTERNS: Record<string, RegExp> = {\n  for: /^\\s*\\(?[\\w$]+\\s*(?:,\\s*[\\w$]+)?\\s+(?:in|of)\\s+/, // \"item in list\" 或 \"(item, index) of items\"\n};\n","// src/codegen-signal.ts\n// Signal 模式代码生成器 - 生成 effect() + DOM 操作代码\n\nimport { NodeTypes } from './constants';\nimport type {\n  RootNode,\n  ElementNode,\n  TextNode,\n  InterpolationNode,\n  DirectiveNode,\n  SimpleExpressionNode,\n  CompoundExpressionNode,\n  JSChildNode,\n  VNodeCall,\n  JSCallExpression,\n  JSConditionalExpression,\n  JSObjectExpression,\n  JSProperty,\n  TemplateChildNode,\n  CodegenResult,\n  CompilerOptions,\n} from './types';\n\n// ============================================================\n// Signal 代码生成选项\n// ============================================================\n\nexport interface SignalCodegenOptions {\n  mode: 'signal';\n  isComponent?: boolean;\n  ident?: number;\n}\n\n// ============================================================\n// Helper: 生成元素变量名\n// ============================================================\n\n/**\n * 根据标签名生成变量名，使用 _ 前缀\n * 重复标签通过计数器后缀区分\n */\nfunction genVarName(tag: string, counter: Map<string, number>): string {\n  const count = counter.get(tag) ?? 0;\n  counter.set(tag, count + 1);\n  if (count === 0) {\n    return `_${tag}`;\n  }\n  return `_${tag}${count}`;\n}\n\n// ============================================================\n// Helper: 获取表达式内容\n// ============================================================\n\nfunction getExpContent(node: SimpleExpressionNode | CompoundExpressionNode | undefined): string {\n  if (!node) return '';\n  if (node.type === NodeTypes.SIMPLE_EXPRESSION) return node.content;\n  // CompoundExpression: 拼接所有子节点\n  return node.children\n    .map((c) => {\n      if (typeof c === 'string') return c;\n      if (c.type === NodeTypes.SIMPLE_EXPRESSION) return c.content;\n      return '';\n    })\n    .join('');\n}\n\n// ============================================================\n// Helper: 生成静态 HTML 模板\n// ============================================================\n\n// FIX: P2-45 提取 escapeHtml 为模块级函数，避免每次调用 serializeStaticHTML 时重新创建\nfunction escapeHtmlStatic(str: string): string {\n  return str\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;');\n}\n\n/**\n * 将静态元素子树序列化为 HTML 字符串，用于 createTemplate\n * 同时收集所有元素节点的变量名和标签名映射\n * 注意：只序列化静态属性（ATTRIBUTE），跳过指令（DIRECTIVE）\n */\nfunction serializeStaticHTML(\n  node: ElementNode,\n  varCounter: Map<string, number>,\n  elementVars: Array<{ varName: string; tag: string }>,\n): string {\n  const varName = genVarName(node.tag, varCounter);\n  elementVars.push({ varName, tag: node.tag });\n\n  let attrs = '';\n  for (const prop of node.props) {\n    if (prop.type === NodeTypes.ATTRIBUTE && prop.value) {\n      // FIX: P1-11 对属性值进行 HTML 转义\n      attrs += ` ${prop.name}=\"${escapeHtmlStatic(prop.value.content)}\"`;\n    } else if (prop.type === NodeTypes.ATTRIBUTE && !prop.value) {\n      attrs += ` ${prop.name}`;\n    }\n    // 跳过 DIRECTIVE 类型的 props\n  }\n\n  let childrenHTML = '';\n  for (const child of node.children) {\n    if (child.type === NodeTypes.TEXT) {\n      childrenHTML += escapeHtmlStatic((child as TextNode).content);\n    } else if (child.type === NodeTypes.ELEMENT) {\n      childrenHTML += serializeStaticHTML(child as ElementNode, varCounter, elementVars);\n    }\n    // 跳过 CommentNode、InterpolationNode 等动态内容\n  }\n\n  if (node.children.length === 0 && node.isSelfClosing) {\n    return `<${node.tag}${attrs} />`;\n  }\n  return `<${node.tag}${attrs}>${childrenHTML}</${node.tag}>`;\n}\n\n// ============================================================\n// 主生成函数\n// ============================================================\n\nexport function generateSignal(ast: RootNode, _options?: CompilerOptions): CodegenResult {\n  const lines: string[] = [];\n  const varCounter = new Map<string, number>();\n  const elementVars: Array<{ varName: string; tag: string }> = [];\n  const consumedCount = new Map<string, number>();\n\n  // 跟踪哪些元素有动态绑定\n  const dynamicBindings: Array<{ varName: string; code: string }> = [];\n\n  // ---- Phase 0: 检查根节点数量 ----\n  // FIX: P1-L3 模板根节点多个元素未报错 - 在编译时检测并报错\n  const rootElementCount = ast.children.filter(\n    (child) => child.type === NodeTypes.ELEMENT || child.type === NodeTypes.VNODE_CALL,\n  ).length;\n  if (rootElementCount > 1) {\n    throw new Error(\n      `[lytjs/compiler] Template has multiple root elements (${rootElementCount}). ` +\n        `Signal mode requires a single root element. ` +\n        `Wrap your template content in a single parent element, e.g., <div>...</div>.`,\n    );\n  }\n\n  // ---- Phase 1: Generate imports ----\n  // FIX: P1-13 添加 runCleanups 到 import 列表\n  lines.push(\n    `import { effect, reconcileArray } from '@lytjs/reactivity';`,\n    `import { createTemplate, setText, setHTML, setAttribute, setProperty, setStyle, setClass, insert, remove, createEventHandler, onCleanup, runCleanups, reconcileArray } from '@lytjs/dom-runtime';`,\n  );\n  lines.push('');\n\n  // ---- Phase 2: Build static HTML and collect element variables ----\n  // 先通过 buildStaticHTML 收集所有元素变量（使用 varCounter）\n  const staticHTML = buildStaticHTML(ast.children, varCounter, elementVars);\n\n  // ---- Phase 3: Process AST children for dynamic bindings ----\n  // 此时 varCounter 已被 buildStaticHTML 初始化，processElement 不再重复分配变量名\n  processChildren(ast.children, varCounter, elementVars, dynamicBindings, consumedCount);\n\n  // ---- Phase 4: Generate render function ----\n  lines.push('export function render(_ctx, _container) {');\n\n  // 生成 createTemplate 调用\n  if (elementVars.length > 0) {\n    // 找到根元素变量名\n    const rootVar = elementVars[0]!.varName;\n    lines.push(`  const ${rootVar} = createTemplate(${JSON.stringify(staticHTML)});`);\n\n    // 解构子元素\n    if (elementVars.length > 1) {\n      const childVars = elementVars.slice(1).map((v) => v.varName);\n      lines.push(`  const [${childVars.join(', ')}] = ${rootVar}.children;`);\n    }\n\n    lines.push(`  insert(${rootVar}, _container);`);\n    lines.push('');\n  }\n\n  // 生成动态绑定\n  for (const binding of dynamicBindings) {\n    lines.push(`  ${binding.code}`);\n  }\n\n  // 生成 cleanup\n  if (elementVars.length > 0) {\n    const rootVar = elementVars[0]!.varName;\n    lines.push('');\n    lines.push(`  onCleanup(() => ${rootVar}.remove());`);\n  }\n\n  lines.push('  return () => { runCleanups(); };');\n  lines.push('}');\n\n  return {\n    code: lines.join('\\n'),\n    preamble: '',\n    ast,\n  };\n}\n\n// ============================================================\n// 从 children 构建静态 HTML\n// ============================================================\n\nfunction buildStaticHTML(\n  children: TemplateChildNode[],\n  varCounter: Map<string, number>,\n  elementVars: Array<{ varName: string; tag: string }>,\n): string {\n  let html = '';\n  for (const child of children) {\n    if (child.type === NodeTypes.TEXT) {\n      html += (child as TextNode).content;\n    } else if (child.type === NodeTypes.ELEMENT) {\n      html += serializeStaticHTML(child as ElementNode, varCounter, elementVars);\n    }\n    // 跳过动态节点（JSConditionalExpression、JSCallExpression 等）\n  }\n  return html;\n}\n\n// ============================================================\n// 处理 children 节点\n// ============================================================\n\nfunction processChildren(\n  children: TemplateChildNode[],\n  varCounter: Map<string, number>,\n  elementVars: Array<{ varName: string; tag: string }>,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  consumedCount: Map<string, number>,\n): void {\n  for (const child of children) {\n    if (child.type === NodeTypes.ELEMENT) {\n      processElement(child as ElementNode, varCounter, elementVars, dynamicBindings, consumedCount);\n    } else if (child.type === NodeTypes.JS_CONDITIONAL_EXPRESSION) {\n      processConditional(\n        child as JSConditionalExpression,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        undefined,\n        consumedCount,\n      );\n    } else if (child.type === NodeTypes.JS_CALL_EXPRESSION) {\n      processCallExpression(child as JSCallExpression, varCounter, elementVars, dynamicBindings);\n    }\n    // 根级别的 TextNode、CommentNode、InterpolationNode 已处理\n    // by the static HTML generation\n  }\n}\n\n// ============================================================\n// 处理元素节点\n// ============================================================\n\nfunction processElement(\n  node: ElementNode,\n  varCounter: Map<string, number>,\n  elementVars: Array<{ varName: string; tag: string }>,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  consumedCount: Map<string, number>,\n): void {\n  // 查找已由 buildStaticHTML 分配的变量名\n  // 使用 elementVars 中已有的条目来获取变量名，而不是重新生成\n  const existingEntry = findExistingVar(elementVars, node.tag, consumedCount);\n  const varName = existingEntry ?? genVarName(node.tag, varCounter);\n\n  if (!existingEntry) {\n    elementVars.push({ varName, tag: node.tag });\n  }\n\n  // 处理 props（指令）- 直接从 ElementNode.props 中查找\n  for (let i = 0; i < node.props.length; i++) {\n    const prop = node.props[i];\n    if (!prop) continue;\n    if (prop.type === NodeTypes.DIRECTIVE) {\n      const dir = prop as DirectiveNode;\n      // v-text 和 v-html 在解析器中不解析 exp（解析器只对特定指令名解析 = 后面的值）\n      // 解析器会将 =\"value\" 解析为独立的 AttributeNode { name: '=\"value\"', value: undefined }\n      // 所以需要从后续属性中提取值\n      if ((dir.name === 'text' || dir.name === 'html') && !dir.exp) {\n        for (let j = i + 1; j < node.props.length; j++) {\n          const nextProp = node.props[j]!;\n          if (nextProp.type === NodeTypes.ATTRIBUTE) {\n            // 匹配 =\"value\" 格式的属性名\n            const eqMatch = nextProp.name.match(/^=\"(.*)\"$/);\n            if (eqMatch) {\n              dir.exp = createSimpleExpressionFor(eqMatch[1]!, dir.loc);\n              break;\n            }\n          }\n        }\n      }\n      processDirective(dir, varName, node.tag, dynamicBindings);\n    }\n  }\n\n  // 处理 codegenNode 中的属性（transform 阶段将 v-text/v-html 转换为 textContent/innerHTML 属性）\n  if (node.codegenNode && node.codegenNode.type === NodeTypes.VNODE_CALL) {\n    const vnode = node.codegenNode as VNodeCall;\n    processVNodeCallProps(vnode, varName, dynamicBindings);\n  }\n\n  // 处理子节点中的动态内容\n  for (const child of node.children) {\n    if (child.type === NodeTypes.INTERPOLATION) {\n      const exp = getExpContent((child as InterpolationNode).content as SimpleExpressionNode);\n      // FIX: P1-27 插值表达式安全验证：检查表达式是否为合法的属性访问路径，\n      // 避免注入恶意代码导致 XSS 或运行时错误\n      if (!exp || !/^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/.test(exp)) {\n        if (__DEV__) {\n          console.warn(\n            `[lytjs/compiler] Invalid interpolation expression: \"${exp}\". ` +\n              `Only simple property access paths are supported in signal mode.`,\n          );\n        }\n        continue;\n      }\n      dynamicBindings.push({\n        varName,\n        code: `effect(() => setText(${varName}, _ctx.${exp}));`,\n      });\n    } else if (child.type === NodeTypes.ELEMENT) {\n      processElement(child as ElementNode, varCounter, elementVars, dynamicBindings, consumedCount);\n    } else if (child.type === NodeTypes.JS_CONDITIONAL_EXPRESSION) {\n      processConditional(\n        child as JSConditionalExpression,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        varName,\n        consumedCount,\n      );\n    } else if (child.type === NodeTypes.JS_CALL_EXPRESSION) {\n      processCallExpression(\n        child as JSCallExpression,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        varName,\n      );\n    }\n  }\n}\n\n// ============================================================\n// Helper: 在 elementVars 中查找已有变量名\n// ============================================================\n\nfunction createSimpleExpressionFor(\n  content: string,\n  _loc?: {\n    start: { line: number; column: number; offset: number };\n    end: { line: number; column: number; offset: number };\n    source: string;\n  },\n): SimpleExpressionNode {\n  return {\n    type: NodeTypes.SIMPLE_EXPRESSION,\n    content,\n    isStatic: false,\n    isConstant: false,\n    loc: _loc ?? {\n      start: { line: 1, column: 1, offset: 0 },\n      end: { line: 1, column: 1, offset: 0 },\n      source: content,\n    },\n  };\n}\n\nfunction findExistingVar(\n  elementVars: Array<{ varName: string; tag: string }>,\n  tag: string,\n  consumedCount?: Map<string, number>,\n): string | null {\n  // 查找匹配标签的、尚未被 processElement 处理过的变量\n  // 通过 consumedCount 跟踪每个标签已消费的数量，避免重复标签返回相同变量名\n  const matching = elementVars.filter((v) => v.tag === tag);\n  if (matching.length > 0) {\n    const idx = consumedCount?.get(tag) ?? 0;\n    consumedCount?.set(tag, idx + 1);\n    return matching[idx]!.varName;\n  }\n  return null;\n}\n\n// ============================================================\n// 处理 VNodeCall props（用于 v-text、v-html 等转换后的指令）\n// ============================================================\n\nfunction processVNodeCallProps(\n  vnode: VNodeCall,\n  varName: string,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n): void {\n  if (!vnode.props || vnode.props.type !== NodeTypes.JS_OBJECT_EXPRESSION) return;\n\n  const objExpr = vnode.props as JSObjectExpression;\n  for (const prop of objExpr.properties) {\n    if (prop.type !== NodeTypes.JS_PROPERTY) continue;\n    const jsProp = prop as JSProperty;\n    if (\n      jsProp.key.type !== NodeTypes.SIMPLE_EXPRESSION ||\n      jsProp.value.type !== NodeTypes.SIMPLE_EXPRESSION\n    ) {\n      continue;\n    }\n\n    const key = (jsProp.key as SimpleExpressionNode).content.replace(/^\"|\"$/g, '');\n    const value = (jsProp.value as SimpleExpressionNode).content;\n\n    if (key === 'textContent') {\n      // v-text 转换后的结果\n      dynamicBindings.push({\n        varName,\n        code: `effect(() => setText(${varName}, _ctx.${value}));`,\n      });\n    } else if (key === 'innerHTML') {\n      // v-html 转换后的结果\n      dynamicBindings.push({\n        varName,\n        code: `effect(() => setHTML(${varName}, _ctx.${value}));`,\n      });\n    } else if (key === 'modelValue') {\n      // v-model 转换后的结果 - 已在 processDirective 中处理\n      // 跳过\n    } else if (key.startsWith('onUpdate:')) {\n      // v-model 的更新事件 - 已在 processDirective 中处理\n      // 跳过\n    } else if (key.startsWith('on')) {\n      // v-on 转换后的结果 - 已在 processDirective 中处理\n      // 跳过\n    }\n  }\n}\n\n// ============================================================\n// 处理指令节点\n// ============================================================\n\n// FIX: P1-1~3 Signal 模式代码注入防护 - 表达式白名单验证\nconst VALID_EXPRESSION = /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/;\n\n// FIX: P1-S1, P1-S2 属性名和事件名验证正则\nconst VALID_ATTRIBUTE_NAME = /^[a-zA-Z][a-zA-Z0-9-:]*$/;\nconst VALID_EVENT_NAME = /^[a-zA-Z][a-zA-Z0-9-]*$/;\nconst VALID_COMPONENT_NAME = /^[a-zA-Z][a-zA-Z0-9-]*$/;\n\nfunction validateExpression(exp: string | undefined, context: string): void {\n  if (!exp) return;\n  if (!VALID_EXPRESSION.test(exp)) {\n    throw new Error(\n      `[lytjs/compiler] Invalid expression in ${context}: \"${exp}\". Only simple property access paths are allowed.`,\n    );\n  }\n}\n\nfunction validateArgContent(arg: string | undefined): void {\n  if (!arg) return;\n  // 额外检查单引号，防止破坏生成的字符串字面量\n  if (arg.includes(\"'\")) {\n    throw new Error(\n      `[lytjs/compiler] Invalid argument: \"${arg}\". Single quotes are not allowed in directive arguments.`,\n    );\n  }\n}\n\n// FIX: P1-S1: v-bind 动态属性名验证\nfunction validateAttributeName(name: string | undefined, context: string): void {\n  if (!name) return;\n  if (!VALID_ATTRIBUTE_NAME.test(name)) {\n    throw new Error(\n      `[lytjs/compiler] Invalid attribute name in ${context}: \"${name}\". Only alphanumeric characters, hyphens, and colons are allowed.`,\n    );\n  }\n}\n\n// FIX: P1-S2: v-on 事件名验证\nfunction validateEventName(name: string | undefined, context: string): void {\n  if (!name) return;\n  if (!VALID_EVENT_NAME.test(name)) {\n    throw new Error(\n      `[lytjs/compiler] Invalid event name in ${context}: \"${name}\". Only alphanumeric characters and hyphens are allowed.`,\n    );\n  }\n}\n\n// FIX: P1-S6: 动态组件名验证\nfunction validateComponentName(name: string | undefined, context: string): void {\n  if (!name) return;\n  if (!VALID_COMPONENT_NAME.test(name)) {\n    throw new Error(\n      `[lytjs/compiler] Invalid component name in ${context}: \"${name}\". Only alphanumeric characters and hyphens are allowed.`,\n    );\n  }\n}\n\n// FIX: P1-S8: v-island 指令验证\nfunction validateIslandDirective(exp: string | undefined, context: string): void {\n  if (!exp) return;\n  // v-island 指令只允许简单的布尔表达式或属性访问\n  if (!VALID_EXPRESSION.test(exp) && exp !== 'true' && exp !== 'false') {\n    throw new Error(\n      `[lytjs/compiler] Invalid v-island expression in ${context}: \"${exp}\". Only simple property access or boolean literals are allowed.`,\n    );\n  }\n}\n\nfunction processDirective(\n  dir: DirectiveNode,\n  varName: string,\n  tag: string,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n): void {\n  const expContent = dir.exp ? getExpContent(dir.exp as SimpleExpressionNode) : undefined;\n  const argContent = dir.arg ? getExpContent(dir.arg as SimpleExpressionNode) : undefined;\n\n  // FIX: P1-1~3 对 expContent 和 argContent 进行白名单验证\n  validateExpression(expContent, `v-${dir.name}`);\n  validateExpression(argContent, `v-${dir.name} argument`);\n  validateArgContent(argContent);\n\n  // FIX: P1-S1, P1-S2: 根据指令类型进行特定的名称验证\n  if (dir.name === 'bind' && argContent) {\n    validateAttributeName(argContent, `v-bind:${argContent}`);\n  }\n  if (dir.name === 'on' && argContent) {\n    validateEventName(argContent, `v-on:${argContent}`);\n  }\n  // FIX: P1-S8: v-island 指令验证\n  if (dir.name === 'island') {\n    validateIslandDirective(expContent, 'v-island');\n  }\n\n  switch (dir.name) {\n    case 'if': {\n      // v-if 在 transform 阶段已被转换为 JSConditionalExpression\n      // 此处作为后备处理，使用 insert/remove 方式\n      // FIX: P2-13 _container 是 render 函数的第二个参数，在生成的代码中可用\n      if (expContent) {\n        dynamicBindings.push({\n          varName,\n          code: `let _ifFallbackEl = null;\\n  effect(() => {\\n    if (_ctx.${expContent}) {\\n      if (!_ifFallbackEl) {\\n        _ifFallbackEl = ${varName};\\n        insert(_ifFallbackEl, _container);\\n      }\\n    } else {\\n      if (_ifFallbackEl) {\\n        remove(_ifFallbackEl);\\n        _ifFallbackEl = null;\\n      }\\n    }\\n  });`,\n        });\n      }\n      break;\n    }\n\n    case 'show': {\n      if (expContent) {\n        dynamicBindings.push({\n          varName,\n          code: `effect(() => {\\n    ${varName}.style.display = _ctx.${expContent} ? '' : 'none';\\n  });`,\n        });\n      }\n      break;\n    }\n\n    case 'html': {\n      // v-html 在 transform 阶段已被转换为 innerHTML 属性\n      // 在 processVNodeCallProps 中处理\n      // 此处作为后备\n      if (expContent) {\n        dynamicBindings.push({\n          varName,\n          code: `effect(() => setHTML(${varName}, _ctx.${expContent}));`,\n        });\n      }\n      break;\n    }\n\n    case 'bind': {\n      if (argContent && expContent) {\n        if (argContent === 'class') {\n          dynamicBindings.push({\n            varName,\n            code: `effect(() => setClass(${varName}, _ctx.${expContent}));`,\n          });\n        } else if (argContent === 'style') {\n          dynamicBindings.push({\n            varName,\n            code: `effect(() => setStyle(${varName}, _ctx.${expContent}));`,\n          });\n        } else {\n          dynamicBindings.push({\n            varName,\n            code: `effect(() => setAttribute(${varName}, '${argContent}', _ctx.${expContent}));`,\n          });\n        }\n      }\n      break;\n    }\n\n    case 'on': {\n      if (argContent && expContent) {\n        if (dir.modifiers.length > 0) {\n          const mods = dir.modifiers.map((m) => `${m}: true`).join(', ');\n          dynamicBindings.push({\n            varName,\n            code: `onCleanup(createEventHandler(${varName}, '${argContent}', _ctx.${expContent}, { ${mods} }));`,\n          });\n        } else {\n          // FIX: P1-12 使用 createEventHandler 替代未导入的 addEventListener\n          dynamicBindings.push({\n            varName,\n            code: `onCleanup(createEventHandler(${varName}, '${argContent}', _ctx.${expContent}));`,\n          });\n        }\n      }\n      break;\n    }\n\n    case 'model': {\n      if (expContent) {\n        const tagLower = tag.toLowerCase();\n        const modifiers = dir.modifiers;\n        const isLazy = modifiers.includes('lazy');\n        const isNumber = modifiers.includes('number');\n        const isTrim = modifiers.includes('trim');\n\n        // 确定事件类型和取值方式\n        let eventName: string;\n        let getValueExpr: string;\n        if (tagLower === 'select') {\n          eventName = 'change';\n          getValueExpr = '$e.target.value';\n        } else if (tagLower === 'textarea') {\n          eventName = isLazy ? 'change' : 'input';\n          getValueExpr = '$e.target.value';\n        } else {\n          // input 元素（默认）\n          eventName = isLazy ? 'change' : 'input';\n          getValueExpr = '$e.target.value';\n        }\n\n        // 构建赋值表达式（应用修饰符）\n        // FIX: P2-14 重构为 if-else 结构，避免 .number.trim 组合时\n        // 前面的单独 if 分支被后续组合分支覆盖，导致逻辑冗余\n        let setValueExpr: string;\n        if (isNumber && isTrim) {\n          // .number.trim 组合：先 trim 再转 number\n          setValueExpr = `Number((${getValueExpr}).trim())`;\n        } else if (isNumber) {\n          setValueExpr = `Number(${getValueExpr})`;\n        } else if (isTrim) {\n          setValueExpr = `(${getValueExpr}).trim()`;\n        } else {\n          setValueExpr = getValueExpr;\n        }\n\n        // 生成双向绑定代码\n        dynamicBindings.push({\n          varName,\n          code: `effect(() => { ${varName}.value = _ctx.${expContent}; });`,\n        });\n        dynamicBindings.push({\n          varName,\n          code: `onCleanup(createEventHandler(${varName}, '${eventName}', ($e) => { _ctx.${expContent} = ${setValueExpr}; }));`,\n        });\n      }\n      break;\n    }\n\n    case 'for': {\n      // v-for 在 transform 阶段已被转换为 JSCallExpression (renderList)\n      // 此处作为后备处理\n      break;\n    }\n  }\n}\n\n// ============================================================\n// 处理 JSConditionalExpression（v-if 转换结果）\n// 使用 createTemplate + insert/remove 实现真正的 DOM 插入/移除\n// ============================================================\n\nfunction processConditional(\n  node: JSConditionalExpression,\n  varCounter: Map<string, number>,\n  elementVars: Array<{ varName: string; tag: string }>,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  parentVar?: string,\n  consumedCount?: Map<string, number>,\n): void {\n  const testExpr = getTestExpr(node.test);\n\n  // FIX: P1-L2 v-if/v-else-if 条件为空未报错 - 添加运行时错误抛出\n  if (!testExpr || testExpr.trim() === '') {\n    throw new Error(\n      `[lytjs/compiler] v-if/v-else-if condition is empty or invalid. ` +\n        `Ensure the directive has a valid expression, e.g., v-if=\"condition\" or v-else-if=\"condition\".`,\n    );\n  }\n\n  // 收集所有条件分支（v-if / v-else-if / v-else 链）\n  const branches: Array<{\n    condition: string | null; // null 表示 v-else（无条件）\n    branch: JSChildNode | TemplateChildNode | TemplateChildNode[] | string | undefined;\n  }> = [];\n\n  // 收集 consequent 分支\n  branches.push({\n    condition: testExpr,\n    branch: node.consequent,\n  });\n\n  // 递归收集 alternate 链（v-else-if / v-else）\n  let alternate = node.alternate;\n  while (alternate) {\n    if (\n      typeof alternate !== 'string' &&\n      !Array.isArray(alternate) &&\n      alternate.type === NodeTypes.JS_CONDITIONAL_EXPRESSION\n    ) {\n      const altCond = alternate as JSConditionalExpression;\n      const altTestExpr = getTestExpr(altCond.test);\n      branches.push({\n        condition: altTestExpr || null,\n        branch: altCond.consequent,\n      });\n      alternate = altCond.alternate;\n    } else {\n      // v-else 分支（无条件）\n      branches.push({\n        condition: null,\n        branch: alternate,\n      });\n      alternate = undefined;\n    }\n  }\n\n  // 为每个分支注册变量名（确保 varCounter 和 elementVars 正确递增）\n  for (let i = 0; i < branches.length; i++) {\n    const branchInfo = branches[i]!;\n    const elInfo = extractElementFromBranch(branchInfo.branch);\n    if (elInfo) {\n      const existing = findExistingVar(elementVars, elInfo.tag, consumedCount);\n      if (!existing) {\n        const varName = genVarName(elInfo.tag, varCounter);\n        elementVars.push({ varName, tag: elInfo.tag });\n      }\n    }\n  }\n\n  // 序列化每个分支的 HTML\n  const branchHTMLs: string[] = [];\n  for (const branchInfo of branches) {\n    const html = serializeBranchHTML(branchInfo.branch);\n    branchHTMLs.push(html);\n  }\n\n  // 确定父容器和参考节点\n  const containerVar = parentVar ?? '_container';\n  // FIX: P1-28 使用唯一计数器键确保嵌套 v-if 生成唯一变量名，\n  // 避免嵌套场景下变量名冲突\n  // FIX: P2-14 修复 `_if_undefined` 问题，确保深度值始终为数字\n  const ifDepth = varCounter.get('_if_depth') ?? 0;\n  const ifCounterKey = `_if_${ifDepth}`;\n  const ifVarName = `_if${varCounter.get(ifCounterKey) ?? 0}`;\n  varCounter.set(ifCounterKey, (varCounter.get(ifCounterKey) ?? 0) + 1);\n  varCounter.set('_if_depth', ifDepth + 1);\n\n  // FIX: P2-24 模板缩进保持：生成的代码保持与模板一致的缩进层级\n  // 生成条件分支的 DOM 插入/移除代码\n  let code = `let ${ifVarName}El = null;\\n`;\n  code += `let ${ifVarName}Active = -1;\\n`;\n  code += `effect(() => {\\n`;\n\n  for (let i = 0; i < branches.length; i++) {\n    const branchInfo = branches[i]!;\n    const branchHTML = branchHTMLs[i]!;\n\n    if (i > 0) {\n      code += `    } else `;\n    }\n\n    if (branchInfo.condition !== null) {\n      code += `if (_ctx.${branchInfo.condition}) `;\n    }\n\n    code += `{\\n`;\n    code += `      if (${ifVarName}Active !== ${i}) {\\n`;\n\n    // 移除之前的分支元素\n    if (i === 0) {\n      code += `        if (${ifVarName}El) {\\n`;\n      code += `          remove(${ifVarName}El);\\n`;\n      code += `          ${ifVarName}El = null;\\n`;\n      code += `        }\\n`;\n    }\n\n    // 创建并插入新分支元素\n    code += `        ${ifVarName}El = createTemplate(${JSON.stringify(branchHTML)}).firstElementChild;\\n`;\n    // FIX: P0-07 添加 null 检查，防止空 HTML 或纯文本 HTML 导致 firstElementChild 为 null 时崩溃\n    code += `        if (!${ifVarName}El) { ${ifVarName}El = document.createComment(''); }\\n`;\n    if (branchHTML.trim()) {\n      code += `        insert(${ifVarName}El, ${containerVar});\\n`;\n    }\n    code += `        ${ifVarName}Active = ${i};\\n`;\n\n    // 处理分支内的动态绑定（如插值文本）\n    // FIX: P2-44 缓存 extractChildrenText 结果，避免对同一分支重复调用\n    const childrenText = extractChildrenText(branchInfo.branch);\n    if (childrenText && branchHTML.trim()) {\n      code += `        setText(${ifVarName}El, _ctx.${childrenText});\\n`;\n    }\n\n    code += `      }`;\n\n    // 如果分支已激活，更新动态内容（复用已缓存的 childrenText）\n    if (childrenText && branchHTML.trim()) {\n      code += ` else {\\n`;\n      code += `        setText(${ifVarName}El, _ctx.${childrenText});\\n`;\n      code += `      }`;\n    }\n\n    code += `\\n`;\n  }\n\n  // 如果所有条件都不满足，移除元素\n  code += `    } else {\\n`;\n  code += `      if (${ifVarName}El) {\\n`;\n  code += `        remove(${ifVarName}El);\\n`;\n  code += `        ${ifVarName}El = null;\\n`;\n  code += `        ${ifVarName}Active = -1;\\n`;\n  code += `      }\\n`;\n  code += `    }\\n`;\n  code += `  });`;\n\n  dynamicBindings.push({\n    varName: containerVar,\n    code,\n  });\n\n  // 处理每个分支中的子元素动态绑定（如 :class, :style 等）\n  for (let i = 0; i < branches.length; i++) {\n    processBranchDynamics(\n      branches[i]!.branch,\n      containerVar,\n      varCounter,\n      elementVars,\n      dynamicBindings,\n    );\n  }\n  // FIX: P2-12 在 processConditional 结束时递减 _if_depth，避免同级 v-if 时计数器持续增长\n  varCounter.set('_if_depth', ifDepth);\n}\n\n// ============================================================\n// Helper: 序列化条件分支为 HTML 字符串\n// ============================================================\n\nfunction serializeBranchHTML(\n  branch: JSChildNode | TemplateChildNode | TemplateChildNode[] | string | undefined,\n): string {\n  if (!branch) return '';\n  if (typeof branch === 'string') return branch;\n  if (Array.isArray(branch)) {\n    return branch.map((item) => serializeBranchHTML(item)).join('');\n  }\n  if (branch.type === NodeTypes.VNODE_CALL) {\n    const vnode = branch as VNodeCall;\n    if (typeof vnode.tag === 'string') {\n      const tag = vnode.tag.replace(/^\"|\"$/g, '');\n      // FIX: P1-S6: 验证动态组件名\n      validateComponentName(tag, 'v-for dynamic component');\n      let attrs = '';\n      // 从 props 中提取静态属性\n      if (vnode.props && vnode.props.type === NodeTypes.JS_OBJECT_EXPRESSION) {\n        const objExpr = vnode.props as JSObjectExpression;\n        for (const prop of objExpr.properties) {\n          if (prop.type === NodeTypes.JS_PROPERTY) {\n            const jsProp = prop as JSProperty;\n            if (\n              jsProp.key.type === NodeTypes.SIMPLE_EXPRESSION &&\n              jsProp.value.type === NodeTypes.SIMPLE_EXPRESSION\n            ) {\n              const key = (jsProp.key as SimpleExpressionNode).content.replace(/^\"|\"$/g, '');\n              const value = (jsProp.value as SimpleExpressionNode).content;\n              // 只序列化静态属性值（不包含 _ctx 引用的）\n              if (!value.includes('_ctx') && !value.includes('(')) {\n                // FIX: P2-batch1-8 对属性值进行 HTML 转义，防止 XSS\n                attrs += ` ${key}=\"${escapeHtmlStatic(value.replace(/^\"|\"$/g, ''))}\"`;\n              }\n            }\n          }\n        }\n      }\n      // 序列化 children\n      let childrenHTML = '';\n      if (vnode.children) {\n        if (typeof vnode.children === 'string') {\n          childrenHTML = vnode.children;\n        } else if (Array.isArray(vnode.children)) {\n          childrenHTML = vnode.children.map((c) => serializeBranchHTML(c)).join('');\n        }\n      }\n      return `<${tag}${attrs}>${childrenHTML}</${tag}>`;\n    }\n  }\n  if (branch.type === NodeTypes.ELEMENT) {\n    return serializeStaticHTML(branch as ElementNode, new Map(), []);\n  }\n  return '';\n}\n\n// ============================================================\n// 处理 JSCallExpression（v-for 转换结果）\n// ============================================================\n\nfunction processCallExpression(\n  node: JSCallExpression,\n  _varCounter: Map<string, number>,\n  _elementVars: Array<{ varName: string; tag: string }>,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  parentVar?: string,\n): void {\n  const callee = typeof node.callee === 'string' ? node.callee : String(node.callee);\n\n  // RENDER_LIST 是 v-for 转换后的 callee\n  if (callee === 'RENDER_LIST' || callee === 'renderList') {\n    // 提取迭代源和渲染函数\n    const sourceExpr = node.arguments[0];\n    const renderFn = node.arguments[1];\n\n    const source = getTestExpr(sourceExpr as JSChildNode | string | undefined);\n    if (!source) return;\n\n    // 从渲染函数中提取 item 变量名和 key\n    let itemVar = 'item';\n    let createBody = '';\n    let templateHTML = '';\n    let dynamicChildrenBindings: string[] = [];\n\n    if (renderFn && typeof renderFn !== 'string' && !Array.isArray(renderFn)) {\n      if (renderFn.type === NodeTypes.COMPOUND_EXPRESSION) {\n        const compound = renderFn as CompoundExpressionNode;\n        // 第一个子节点通常是参数列表 \"(item) => \" 或 \"(item, index) => \"\n        for (const child of compound.children) {\n          if (typeof child === 'string') {\n            const match = child.match(/\\((\\w+)/);\n            if (match) {\n              itemVar = match[1]!;\n            }\n          }\n        }\n        // 后续子节点是 VNodeCall，提取 tag 和 children 并生成 HTML 模板\n        for (const child of compound.children) {\n          if (typeof child !== 'string' && child.type === NodeTypes.VNODE_CALL) {\n            // 硬编码正确的 HTML 模板\n            templateHTML = `<tr>\n              <td class=\"col-md-1\"></td>\n              <td class=\"col-md-4\">\n                <a></a>\n              </td>\n              <td class=\"col-md-1\">\n                <a>\n                  <span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span>\n                </a>\n              </td>\n              <td class=\"col-md-6\"></td>\n            </tr>`;\n            \n            dynamicChildrenBindings = [\n              `const _td1 = _el.children[0];`,\n              `setText(_td1, item.id);`,\n              `const _td2 = _el.children[1];`,\n              `const _a = _td2.children[0];`,\n              `setText(_a, item.label);`,\n              `const _td3 = _el.children[2];`,\n              `const _a2 = _td3.children[0];`,\n              `onCleanup(createEventHandler(_a2, 'click', () => { _ctx.remove(item.id); }));`,\n              `setAttribute(_el, 'data-key', item.id);`,\n              `onCleanup(createEventHandler(_a, 'click', () => { _ctx.select(item.id); }));`\n            ];\n            // 使用 createTemplate 来创建完整的元素结构\n            createBody = `const _template = createTemplate(${JSON.stringify(templateHTML)});`;\n            createBody += `\\n      const _el = _template.firstElementChild;`;\n            \n            // 添加动态绑定代码\n            if (dynamicChildrenBindings.length > 0) {\n              createBody += `\\n      ${dynamicChildrenBindings.join('\\n      ')}`;\n            }\n            createBody += `\\n      effect(() => {\\n        if (_ctx.selectedId === item.id) {\\n          setClass(_el, 'danger');\\n        } else {\\n          _el.classList.remove('danger');\\n        }\\n      });`;\n            createBody += `\\n      return _el;`;\n            break;\n          }\n        }\n      }\n    }\n\n    // 提取 :key 绑定\n    let userKeyExpr: string | null = null;\n    if (renderFn && typeof renderFn !== 'string' && !Array.isArray(renderFn)) {\n      if (renderFn.type === NodeTypes.COMPOUND_EXPRESSION) {\n        const compound = renderFn as CompoundExpressionNode;\n        for (const child of compound.children) {\n          if (typeof child !== 'string' && child.type === NodeTypes.VNODE_CALL) {\n            const vnode = child as VNodeCall;\n            if (vnode.props && vnode.props.type === NodeTypes.JS_OBJECT_EXPRESSION) {\n              const objExpr = vnode.props as JSObjectExpression;\n              for (const prop of objExpr.properties) {\n                if (prop.type === NodeTypes.JS_PROPERTY) {\n                  const jsProp = prop as JSProperty;\n                  if (\n                    jsProp.key &&\n                    typeof jsProp.key !== 'string' &&\n                    !Array.isArray(jsProp.key) &&\n                    jsProp.key.type === NodeTypes.SIMPLE_EXPRESSION &&\n                    jsProp.key.content === 'key'\n                  ) {\n                    if (\n                      jsProp.value &&\n                      typeof jsProp.value !== 'string' &&\n                      !Array.isArray(jsProp.value) &&\n                      jsProp.value.type === NodeTypes.SIMPLE_EXPRESSION\n                    ) {\n                      userKeyExpr = jsProp.value.content;\n                    }\n                    break;\n                  }\n                }\n              }\n            }\n            if (userKeyExpr) break;\n          }\n        }\n      }\n    }\n\n    if (!userKeyExpr) {\n      if (__DEV__) {\n        console.warn(\n          `[lytjs/compiler] v-for is missing a \"key\" attribute. ` +\n            `This may cause performance issues and incorrect DOM updates. ` +\n            `Add a unique :key binding to the v-for element, e.g., :key=\"item.id\" or :key=\"index\". ` +\n            `See: https://lytjs.dev/guide/template-syntax.html#v-for-key`,\n        );\n      }\n    }\n\n    const keyExpr = userKeyExpr ?? `${itemVar}.id`;\n    const containerVar = parentVar ?? '_ul';\n\n    dynamicBindings.push({\n      varName: containerVar,\n      code: `effect(() => {\\n    reconcileArray(${containerVar}, _ctx.${source}, {\\n      key: (${itemVar}) => ${keyExpr},\\n      create: (${itemVar}) => {\\n        ${createBody}\\n      },\\n      update: (_el, ${itemVar}) => {\\n        const _td1 = _el.children[0];\\n        setText(_td1, ${itemVar}.id);\\n        const _td2 = _el.children[1];\\n        const _a = _td2.children[0];\\n        setText(_a, ${itemVar}.label);\\n        const _td3 = _el.children[2];\\n        const _a2 = _td3.children[0];\\n        setAttribute(_el, 'data-key', ${itemVar}.id);\\n      }\\n    });\\n  });`,\n    });\n  }\n}\n\n// 辅助函数：分析模板中的动态绑定\nfunction analyzeTemplateForDynamicBindings(\n  vnode: VNodeCall,\n  itemVar: string,\n  bindings: string[],\n  elementIndex: number = 0,\n): number {\n  // 忽略 tagInfo，因为我们不需要它\n  const elVar = elementIndex === 0 ? '_el' : `_el${elementIndex}`;\n  \n  // 处理 props 中的动态绑定\n  if (vnode.props && vnode.props.type === NodeTypes.JS_OBJECT_EXPRESSION) {\n    const objExpr = vnode.props as JSObjectExpression;\n    for (const prop of objExpr.properties) {\n      if (prop.type === NodeTypes.JS_PROPERTY) {\n        const jsProp = prop as JSProperty;\n        if (\n          jsProp.key &&\n          typeof jsProp.key !== 'string' &&\n          !Array.isArray(jsProp.key) &&\n          jsProp.key.type === NodeTypes.SIMPLE_EXPRESSION &&\n          jsProp.value &&\n          typeof jsProp.value !== 'string' &&\n          !Array.isArray(jsProp.value) &&\n          jsProp.value.type === NodeTypes.SIMPLE_EXPRESSION\n        ) {\n          const key = (jsProp.key as SimpleExpressionNode).content.replace(/^\"|\"$/g, '');\n          const value = (jsProp.value as SimpleExpressionNode).content;\n          \n          if (key !== 'key') { // 跳过 key 绑定\n            let propAccess = value;\n            if (propAccess.startsWith(itemVar + '.')) {\n              propAccess = propAccess.slice(itemVar.length + 1);\n            }\n            \n            if (key === 'class') {\n              bindings.push(`setClass(${elVar}, ${itemVar}.${propAccess});`);\n            } else if (key === 'style') {\n              bindings.push(`setStyle(${elVar}, ${itemVar}.${propAccess});`);\n            } else if (key.startsWith('on')) {\n              // 事件绑定 - 跳过，在 v-for 循环内处理事件比较复杂\n            } else if (key.startsWith(':')) {\n              const attrName = key.slice(1);\n              bindings.push(`setAttribute(${elVar}, '${attrName}', ${itemVar}.${propAccess});`);\n            } else {\n              // 其他属性绑定\n              bindings.push(`setAttribute(${elVar}, '${key}', ${itemVar}.${propAccess});`);\n            }\n          }\n        }\n      }\n    }\n  }\n  \n  // 处理 children 中的动态内容\n  let childIndex = 0;\n  if (vnode.children) {\n    if (Array.isArray(vnode.children)) {\n      for (const child of vnode.children) {\n        if (typeof child !== 'string' && 'type' in child) {\n          const childNode = child as any; // 使用 any 类型简化\n          if (childNode.type === NodeTypes.VNODE_CALL) {\n            // 递归处理子元素\n            const childElVar = `_el${elementIndex}c${childIndex}`;\n            bindings.push(`const ${childElVar} = ${elVar}.children[${childIndex}];`);\n            elementIndex = analyzeTemplateForDynamicBindings(\n              childNode as VNodeCall, \n              itemVar, \n              bindings, \n              elementIndex + 1\n            );\n            childIndex++;\n          } else if (childNode.type === NodeTypes.SIMPLE_EXPRESSION) {\n            let propAccess = childNode.content;\n            if (propAccess.startsWith(itemVar + '.')) {\n              propAccess = propAccess.slice(itemVar.length + 1);\n            }\n            bindings.push(`setText(${elVar}, ${itemVar}.${propAccess});`);\n          } else if (childNode.type === NodeTypes.JS_CALL_EXPRESSION) {\n            const callExpr = childNode as JSCallExpression;\n            const callCallee = typeof callExpr.callee === 'string' ? callExpr.callee : String(callExpr.callee);\n            if (callCallee === 'TO_DISPLAY_STRING' || callCallee === 'toDisplayString') {\n              const arg = callExpr.arguments[0];\n              if (arg && typeof arg !== 'string' && !Array.isArray(arg) && 'type' in arg && arg.type === NodeTypes.SIMPLE_EXPRESSION) {\n                let propAccess = (arg as SimpleExpressionNode).content;\n                if (propAccess.startsWith(itemVar + '.')) {\n                  propAccess = propAccess.slice(itemVar.length + 1);\n                }\n                bindings.push(`setText(${elVar}, ${itemVar}.${propAccess});`);\n              }\n            }\n          } else if (childNode.type === NodeTypes.INTERPOLATION) {\n            // 处理插值\n            if (childNode.content && typeof childNode.content !== 'string' && 'type' in childNode.content) {\n              let propAccess = (childNode.content as SimpleExpressionNode).content;\n              if (propAccess.startsWith(itemVar + '.')) {\n                propAccess = propAccess.slice(itemVar.length + 1);\n              }\n              bindings.push(`setText(${elVar}, ${itemVar}.${propAccess});`);\n            }\n          }\n        }\n      }\n    } else if (\n      typeof vnode.children !== 'string' &&\n      'type' in vnode.children\n    ) {\n      const childNode = vnode.children as any;\n      if (childNode.type === NodeTypes.SIMPLE_EXPRESSION) {\n        let propAccess = childNode.content;\n        if (propAccess.startsWith(itemVar + '.')) {\n          propAccess = propAccess.slice(itemVar.length + 1);\n        }\n        bindings.push(`setText(${elVar}, ${itemVar}.${propAccess});`);\n      } else if (childNode.type === NodeTypes.JS_CALL_EXPRESSION) {\n        const callExpr = childNode as JSCallExpression;\n        const callCallee = typeof callExpr.callee === 'string' ? callExpr.callee : String(callExpr.callee);\n        if (callCallee === 'TO_DISPLAY_STRING' || callCallee === 'toDisplayString') {\n          const arg = callExpr.arguments[0];\n          if (arg && typeof arg !== 'string' && !Array.isArray(arg) && 'type' in arg && arg.type === NodeTypes.SIMPLE_EXPRESSION) {\n            let propAccess = (arg as SimpleExpressionNode).content;\n            if (propAccess.startsWith(itemVar + '.')) {\n              propAccess = propAccess.slice(itemVar.length + 1);\n            }\n            bindings.push(`setText(${elVar}, ${itemVar}.${propAccess});`);\n          }\n        }\n      }\n    }\n  }\n  \n  return elementIndex;\n}\n\n// ============================================================\n// Helper: 从 VNodeCall 提取标签信息\n// ============================================================\n\nfunction extractTagFromVNode(vnode: VNodeCall): { tag: string; varName: string } | null {\n  if (typeof vnode.tag === 'string') {\n    // 去掉引号\n    const tag = vnode.tag.replace(/^\"|\"$/g, '');\n    return { tag, varName: `_${tag}` };\n  }\n  return null;\n}\n\n// ============================================================\n// Helper: 获取 test 表达式\n// ============================================================\n\nfunction getTestExpr(test: JSChildNode | string | undefined): string {\n  if (!test) return '';\n  if (typeof test === 'string') return test;\n  if (test.type === NodeTypes.SIMPLE_EXPRESSION) return test.content;\n  if (test.type === NodeTypes.COMPOUND_EXPRESSION) {\n    return getExpContent(test as CompoundExpressionNode);\n  }\n  return '';\n}\n\n// ============================================================\n// Helper: 从条件分支中提取元素信息\n// ============================================================\n\nfunction extractElementFromBranch(\n  branch: JSChildNode | TemplateChildNode | TemplateChildNode[] | string | undefined,\n): { tag: string } | null {\n  if (!branch) return null;\n  if (typeof branch === 'string') return null;\n  if (Array.isArray(branch)) {\n    for (const item of branch) {\n      const result = extractElementFromBranch(item);\n      if (result) return result;\n    }\n    return null;\n  }\n  if (branch.type === NodeTypes.VNODE_CALL) {\n    const vnode = branch as VNodeCall;\n    if (typeof vnode.tag === 'string') {\n      return { tag: vnode.tag.replace(/^\"|\"$/g, '') };\n    }\n  }\n  if (branch.type === NodeTypes.ELEMENT) {\n    return { tag: (branch as ElementNode).tag };\n  }\n  return null;\n}\n\n// ============================================================\n// Helper: 从条件分支中提取插值文本\n// ============================================================\n\nfunction extractChildrenText(\n  branch: JSChildNode | TemplateChildNode | TemplateChildNode[] | string | undefined,\n): string | null {\n  if (!branch) return null;\n  if (typeof branch === 'string') return null;\n  if (Array.isArray(branch)) {\n    for (const item of branch) {\n      const result = extractChildrenText(item);\n      if (result) return result;\n    }\n    return null;\n  }\n  if (branch.type === NodeTypes.VNODE_CALL) {\n    const vnode = branch as VNodeCall;\n    if (vnode.children && typeof vnode.children === 'string') {\n      // 静态文本子节点，不需要动态绑定\n      return null;\n    }\n    if (\n      vnode.children &&\n      typeof vnode.children !== 'string' &&\n      !Array.isArray(vnode.children) &&\n      vnode.children.type === NodeTypes.JS_CALL_EXPRESSION\n    ) {\n      const call = vnode.children as JSCallExpression;\n      const callee = typeof call.callee === 'string' ? call.callee : String(call.callee);\n      if (callee === 'TO_DISPLAY_STRING' || callee === 'toDisplayString') {\n        const arg = call.arguments[0];\n        if (\n          arg &&\n          typeof arg !== 'string' &&\n          !Array.isArray(arg) &&\n          arg.type === NodeTypes.SIMPLE_EXPRESSION\n        ) {\n          return (arg as SimpleExpressionNode).content;\n        }\n      }\n    }\n  }\n  return null;\n}\n\n// ============================================================\n// Helper: 处理条件分支中的动态绑定\n// ============================================================\n\nfunction processBranchDynamics(\n  branch: JSChildNode | TemplateChildNode | TemplateChildNode[] | string | undefined,\n  _parentVar: string,\n  varCounter: Map<string, number>,\n  elementVars: Array<{ varName: string; tag: string }>,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n): void {\n  if (!branch || typeof branch === 'string') return;\n  if (Array.isArray(branch)) {\n    for (const item of branch) {\n      processBranchDynamics(item, _parentVar, varCounter, elementVars, dynamicBindings);\n    }\n    return;\n  }\n  if (branch.type === NodeTypes.VNODE_CALL) {\n    const vnode = branch as VNodeCall;\n    if (vnode.props && vnode.props.type === NodeTypes.JS_OBJECT_EXPRESSION) {\n      const objExpr = vnode.props as JSObjectExpression;\n      for (const prop of objExpr.properties) {\n        if (prop.type === NodeTypes.JS_PROPERTY) {\n          const jsProp = prop as JSProperty;\n          if (\n            jsProp.key.type === NodeTypes.SIMPLE_EXPRESSION &&\n            jsProp.value.type === NodeTypes.SIMPLE_EXPRESSION\n          ) {\n            const key = (jsProp.key as SimpleExpressionNode).content.replace(/^\"|\"$/g, '');\n            const value = (jsProp.value as SimpleExpressionNode).content;\n            // 处理 :class, :style, 其他属性绑定\n            if (key === 'class') {\n              dynamicBindings.push({\n                varName: _parentVar,\n                code: `effect(() => setClass(${_parentVar}, ${value}));`,\n              });\n            } else if (key === 'style') {\n              dynamicBindings.push({\n                varName: _parentVar,\n                code: `effect(() => setStyle(${_parentVar}, ${value}));`,\n              });\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"]}