{"version":3,"sources":["../src/sfc/parse.ts","../src/constants.ts","../src/ast.ts","../src/parser-comment.ts","../src/parser-text.ts","../src/parser-attribute.ts","../src/parser-element.ts","../src/parser-children.ts","../src/parser-base.ts","../src/transforms/helpers.ts","../src/transforms/transform-element.ts","../src/transforms/if.ts","../src/transforms/for.ts","../src/transforms/model.ts","../src/transforms/on.ts","../src/transforms/bind.ts","../src/transforms/show.ts","../src/transforms/once.ts","../src/transforms/scoped.ts","../src/transforms/v-memo.ts","../src/transform.ts","../src/source-map.ts","../src/codegen.ts","../src/codegen-signal.ts","../src/codegen-signal-optimized.ts","../src/codegen-ssr.ts","../src/index.ts","../src/sfc/custom-blocks.ts","../src/sfc/compile.ts","../src/sfc/typescript.ts"],"names":["MAX_REGEX_INPUT_LENGTH","VOID_ELEMENTS","escapeRegExp","END_TAG_CACHE_MAX_SIZE","LytErrorCodes","getErrorSuggestion","createCompilerError","MAX_INPUT_LENGTH","PatchFlags","capitalize","transform","describePatchFlag","getExpContent","escapeHtmlStatic","createSimpleExpressionFor","VALID_EXPRESSION","VALID_ATTRIBUTE_NAME","VALID_EVENT_NAME","validateExpression","getTestExpr","serializeBranchHTML","escapeHTML","result"],"mappings":"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","file":"sfc.cjs","sourcesContent":["// src/sfc/parse.ts\n// SFC (Single File Component) parser for .lyt files\n\nimport type { RootNode } from '../types';\n\n// ============================================================\n// SFC Descriptor Types\n// ============================================================\n\nexport interface SFCDescriptor {\n  filename: string;\n  template: SFCTemplateBlock | null;\n  script: SFCScriptBlock | null;\n  scriptSetup: SFCScriptBlock | null;\n  styles: SFCStyleBlock[];\n  customBlocks: SFCCustomBlock[];\n}\n\nexport interface SFCTemplateBlock {\n  type: 'template';\n  content: string;\n  start: number;\n  end: number;\n  attrs: Record<string, string>;\n  ast: RootNode | null;\n}\n\nexport interface SFCScriptBlock {\n  type: 'script';\n  content: string;\n  start: number;\n  end: number;\n  attrs: Record<string, string>;\n  setup?: boolean;\n}\n\nexport interface SFCStyleBlock {\n  type: 'style';\n  content: string;\n  start: number;\n  end: number;\n  attrs: Record<string, string>;\n  scoped?: boolean;\n  lang?: string;\n}\n\nexport interface SFCCustomBlock {\n  type: string;\n  content: string;\n  start: number;\n  end: number;\n  attrs: Record<string, string>;\n}\n\n// ============================================================\n// Internal types\n// ============================================================\n\ninterface SFCBlock {\n  type: string;\n  content: string;\n  start: number;\n  end: number;\n  attrs: Record<string, string>;\n}\n\n// ============================================================\n// 常量\n// ============================================================\n\n// 具有特殊处理的标准块名称\n// (used internally for documentation; actual dispatch uses switch/case)\n\n// 开始标签正则：匹配带有可选属性的 <tagname\n// 捕获组：[1] 标签名，[2] 完整属性字符串\n// FIX: P2-49 添加已知限制说明：\n// 已知限制：此正则不支持嵌套模板字面量（template literals）作为属性值。\n// 例如：<script setup lang=\"ts\"> 中如果属性值包含反引号嵌套，可能导致解析错误。\n// 这是因为 RE_ATTR 使用简单的引号匹配，无法正确处理模板字面量中的 ${} 插值。\n// 在实际使用中，SFC 的属性值通常是简单的字符串（如 lang=\"ts\"），因此此限制影响较小。\n// 如需支持模板字面量属性值，需要将 RE_ATTR 替换为完整的解析器。\nconst RE_BLOCK_OPEN = /^<([a-zA-Z][a-zA-Z0-9-]*)([\\s\\S]*?)>/;\n\n// 属性正则：匹配 name=\"value\"、name='value'、name=value 或独立名称\nconst RE_ATTR = /([^\\s\"'<>=/]+)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+)))?/g;\n\n// ============================================================\n// Parse Options\n// ============================================================\n\nexport interface SFCParseOptions {\n  filename?: string;\n  /** If true, parse the template block into an AST */\n  parseTemplate?: boolean;\n}\n\n// ============================================================\n// parseSFC\n// ============================================================\n\n/**\n * Parse a .lyt single file component source string into a structured descriptor.\n *\n * @param source - The raw source code of the .lyt file\n * @param options - Parse options (filename, etc.)\n * @returns SFCDescriptor containing all parsed blocks\n */\nexport function parseSFC(source: string, options: SFCParseOptions = {}): SFCDescriptor {\n  const { filename = 'anonymous.lyt' } = options;\n\n  const descriptor: SFCDescriptor = {\n    filename,\n    template: null,\n    script: null,\n    scriptSetup: null,\n    styles: [],\n    customBlocks: [],\n  };\n\n  const blocks = extractBlocks(source);\n\n  for (const block of blocks) {\n    switch (block.type) {\n      case 'template': {\n        if (descriptor.template !== null) {\n          if (__DEV__) {\n            console.warn(\n              `[parseSFC] Duplicate <template> block in \"${filename}\". Only the first one will be used.`,\n            );\n          }\n          break;\n        }\n        descriptor.template = {\n          type: 'template',\n          content: block.content,\n          start: block.start,\n          end: block.end,\n          attrs: block.attrs,\n          ast: null,\n        };\n        break;\n      }\n\n      case 'script': {\n        const isSetup = block.attrs['setup'] !== undefined;\n        if (isSetup) {\n          if (descriptor.scriptSetup !== null) {\n            if (__DEV__) {\n              console.warn(\n                `[parseSFC] Duplicate <script setup> block in \"${filename}\". Only the first one will be used.`,\n              );\n            }\n            break;\n          }\n          descriptor.scriptSetup = {\n            type: 'script',\n            content: block.content,\n            start: block.start,\n            end: block.end,\n            attrs: block.attrs,\n            setup: true,\n          };\n        } else {\n          if (descriptor.script !== null) {\n            if (__DEV__) {\n              console.warn(\n                `[parseSFC] Duplicate <script> block in \"${filename}\". Only the first one will be used.`,\n              );\n            }\n            break;\n          }\n          descriptor.script = {\n            type: 'script',\n            content: block.content,\n            start: block.start,\n            end: block.end,\n            attrs: block.attrs,\n            setup: false,\n          };\n        }\n        break;\n      }\n\n      case 'style': {\n        const scoped = block.attrs['scoped'] !== undefined;\n        const lang = block.attrs['lang'];\n        descriptor.styles.push({\n          type: 'style',\n          content: block.content,\n          start: block.start,\n          end: block.end,\n          attrs: block.attrs,\n          scoped,\n          lang,\n        });\n        break;\n      }\n\n      default: {\n        // Custom block (e.g., <i18n>, <route>, <graphql>, <md>, etc.)\n        descriptor.customBlocks.push({\n          type: block.type,\n          content: block.content,\n          start: block.start,\n          end: block.end,\n          attrs: block.attrs,\n        });\n        break;\n      }\n    }\n  }\n\n  return descriptor;\n}\n\n// ============================================================\n// Block Extraction\n// ============================================================\n\n/**\n * Extract all top-level blocks from the SFC source.\n * Handles nested angle brackets inside block content correctly\n * by matching opening and closing tags.\n */\nfunction extractBlocks(source: string): SFCBlock[] {\n  const blocks: SFCBlock[] = [];\n  let pos = 0;\n\n  // Skip leading whitespace / BOM\n  while (pos < source.length && isWhitespace(source[pos]!)) {\n    pos++;\n  }\n\n  while (pos < source.length) {\n    // Try to match an opening tag\n    const openMatch = RE_BLOCK_OPEN.exec(source.slice(pos));\n    if (!openMatch) {\n      // No more blocks found; remaining content is ignored\n      break;\n    }\n\n    const tagName = openMatch[1]!;\n    const attrString = openMatch[2]!;\n    const tagEnd = pos + openMatch[0].length;\n\n    // 解析属性\n    const attrs = parseAttributes(attrString);\n\n    // FIX: P0-08 使用标签深度计数器算法替代简单的 indexOf，\n    // 支持嵌套同名标签的正确匹配（如 <template> 内嵌套 <template>）\n    const closeTag = `</${tagName}>`;\n    const openTagPattern = new RegExp(`<\\\\s*${tagName}[\\\\s>]`, 'gi');\n    let depth = 1;\n    let searchPos = tagEnd;\n    let closeIndex = -1;\n\n    while (depth > 0 && searchPos < source.length) {\n      // 查找下一个闭合标签\n      const nextClose = source.indexOf(closeTag, searchPos);\n      if (nextClose === -1) break;\n\n      // FIX: P2-24 重置正则表达式的 lastIndex，避免多文件解析时状态污染\n      openTagPattern.lastIndex = 0;\n      // 在当前位置到下一个闭合标签之间查找嵌套的同名开放标签\n      openTagPattern.lastIndex = searchPos;\n      let nestedOpen: RegExpExecArray | null;\n      let hasNested = false;\n      while ((nestedOpen = openTagPattern.exec(source)) !== null) {\n        if (nestedOpen.index >= nextClose) break;\n        hasNested = true;\n        depth++;\n      }\n\n      if (hasNested) {\n        // 跳过已匹配的嵌套开放标签，继续搜索\n        searchPos = nextClose + closeTag.length;\n        depth--;\n      } else {\n        // 没有嵌套，这就是我们要找的闭合标签\n        closeIndex = nextClose;\n        depth--;\n      }\n    }\n\n    if (closeIndex === -1) {\n      // No closing tag found; treat remaining content as this block's content\n      if (__DEV__) {\n        console.warn(\n          `[parseSFC] Missing closing tag </${tagName}>. Treating rest of file as block content.`,\n        );\n      }\n      blocks.push({\n        type: tagName,\n        content: source.slice(tagEnd),\n        start: pos,\n        end: source.length,\n        attrs,\n      });\n      break;\n    }\n\n    const content = source.slice(tagEnd, closeIndex);\n    const blockEnd = closeIndex + closeTag.length;\n\n    blocks.push({\n      type: tagName,\n      content,\n      start: pos,\n      end: blockEnd,\n      attrs,\n    });\n\n    pos = blockEnd;\n\n    // Skip whitespace between blocks\n    while (pos < source.length && isWhitespace(source[pos]!)) {\n      pos++;\n    }\n  }\n\n  return blocks;\n}\n\n// ============================================================\n// Attribute Parsing\n// ============================================================\n\n/**\n * Parse an attribute string into a Record<string, string>.\n * Boolean attributes (e.g., `scoped`, `setup`) get an empty string value.\n */\nfunction parseAttributes(attrString: string): Record<string, string> {\n  const attrs: Record<string, string> = {};\n\n  if (!attrString.trim()) {\n    return attrs;\n  }\n\n  // Reset lastIndex since we reuse the global regex\n  RE_ATTR.lastIndex = 0;\n\n  let match: RegExpExecArray | null;\n  while ((match = RE_ATTR.exec(attrString)) !== null) {\n    const name = match[1]!;\n    // Value can be in group 2 (double-quoted), group 3 (single-quoted), or group 4 (unquoted)\n    const value = match[2] ?? match[3] ?? match[4] ?? '';\n    attrs[name] = value;\n  }\n\n  return attrs;\n}\n\n// ============================================================\n// 工具函数\n// ============================================================\n\nfunction isWhitespace(char: string): boolean {\n  return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n}\n","// 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/ast.ts\n// AST node creation helper functions\n\nimport { NodeTypes, ElementTypes } from './constants';\nimport type {\n  RootNode,\n  ElementNode,\n  TextNode,\n  CommentNode,\n  InterpolationNode,\n  AttributeNode,\n  DirectiveNode,\n  SimpleExpressionNode,\n  CompoundExpressionNode,\n  VNodeCall,\n  JSCallExpression,\n  JSObjectExpression,\n  JSProperty,\n  JSArrayExpression,\n  JSConditionalExpression,\n  JSChildNode,\n  ExpressionNode,\n  TemplateChildNode,\n  SourceLocation,\n} from './types';\n\nfunction createLoc(source: string, offset: number, length: number): SourceLocation {\n  if (__DEV__) {\n    if (offset < 0 || length < 0 || offset + length > source.length) {\n      console.warn(\n        `[LytJS] createLoc: invalid range offset=${offset}, length=${length}, source.length=${source.length}`,\n      );\n    }\n  }\n  const lines = source.slice(0, offset).split('\\n');\n  const line = lines.length;\n  const column = (lines[line - 1] ?? '').length + 1;\n  const endLines = source.slice(0, offset + length).split('\\n');\n  const endLine = endLines.length;\n  const endColumn = (endLines[endLine - 1] ?? '').length + 1;\n  return {\n    start: { line, column, offset },\n    end: { line: endLine, column: endColumn, offset: offset + length },\n    source: source.slice(offset, offset + length),\n  };\n}\n\nconst DEFAULT_LOC: SourceLocation = {\n  start: { line: 1, column: 1, offset: 0 },\n  end: { line: 1, column: 1, offset: 0 },\n  source: '',\n};\n\nexport function createRoot(children: TemplateChildNode[], source = ''): RootNode {\n  return {\n    type: NodeTypes.ROOT,\n    children,\n    helpers: [],\n    components: [],\n    directives: [],\n    hoists: [],\n    codegenNode: undefined,\n    imports: [],\n    cached: 0,\n    temps: 0,\n    loc: createLoc(source, 0, source.length),\n  };\n}\n\nexport function createElement(\n  tag: string,\n  props: (AttributeNode | DirectiveNode)[] = [],\n  children: TemplateChildNode[] = [],\n  loc: SourceLocation = DEFAULT_LOC,\n  tagType: (typeof ElementTypes)[keyof typeof ElementTypes] = ElementTypes.ELEMENT,\n): ElementNode {\n  return {\n    type: NodeTypes.ELEMENT,\n    ns: 0,\n    tag,\n    tagType,\n    isSelfClosing: false,\n    props,\n    children,\n    codegenNode: undefined,\n    patchFlag: 0,\n    dynamicChildren: undefined,\n    isStatic: false,\n    isBlock: false,\n    ref: undefined,\n    scopeId: undefined,\n    slots: undefined,\n    slotScopeNodes: [],\n    loc,\n  };\n}\n\nexport function createText(content: string, loc: SourceLocation = DEFAULT_LOC): TextNode {\n  return {\n    type: NodeTypes.TEXT,\n    content,\n    isStatic: true,\n    loc,\n  };\n}\n\nexport function createComment(content: string, loc: SourceLocation = DEFAULT_LOC): CommentNode {\n  return {\n    type: NodeTypes.COMMENT,\n    content,\n    loc,\n  };\n}\n\nexport function createInterpolation(\n  content: ExpressionNode,\n  loc: SourceLocation = DEFAULT_LOC,\n): InterpolationNode {\n  return {\n    type: NodeTypes.INTERPOLATION,\n    content,\n    isStatic: false,\n    loc,\n  };\n}\n\nexport function createAttribute(\n  name: string,\n  value: TextNode | undefined = undefined,\n  loc: SourceLocation = DEFAULT_LOC,\n): AttributeNode {\n  return {\n    type: NodeTypes.ATTRIBUTE,\n    name,\n    value,\n    loc,\n  };\n}\n\nexport function createDirective(\n  name: string,\n  arg: ExpressionNode | undefined = undefined,\n  exp: ExpressionNode | undefined = undefined,\n  modifiers: string[] = [],\n  loc: SourceLocation = DEFAULT_LOC,\n): DirectiveNode {\n  return {\n    type: NodeTypes.DIRECTIVE,\n    name,\n    arg,\n    exp,\n    modifiers,\n    loc,\n  };\n}\n\nexport function createSimpleExpression(\n  content: string,\n  isStatic = false,\n  loc: SourceLocation = DEFAULT_LOC,\n  isConstant = false,\n): SimpleExpressionNode {\n  return {\n    type: NodeTypes.SIMPLE_EXPRESSION,\n    content,\n    isStatic,\n    isConstant,\n    loc,\n  };\n}\n\nexport function createCompoundExpression(\n  children: (TemplateChildNode | SimpleExpressionNode | string)[],\n  loc: SourceLocation = DEFAULT_LOC,\n): CompoundExpressionNode {\n  return {\n    type: NodeTypes.COMPOUND_EXPRESSION,\n    children,\n    isConstant: false,\n    loc,\n  };\n}\n\nexport function createVNodeCall(\n  tag: string | VNodeCall | JSCallExpression,\n  props: JSObjectExpression | undefined = undefined,\n  children: JSChildNode | TemplateChildNode[] | string | undefined = undefined,\n  patchFlag: string | number | undefined = undefined,\n  dynamicProps: JSChildNode | undefined = undefined,\n  directives: JSChildNode[] | undefined = undefined,\n  isBlock = false,\n  disableTracking = false,\n  isComponent = false,\n  loc: SourceLocation = DEFAULT_LOC,\n): VNodeCall {\n  return {\n    type: NodeTypes.VNODE_CALL,\n    tag,\n    props,\n    children,\n    patchFlag: patchFlag !== undefined ? String(patchFlag) : undefined,\n    dynamicProps,\n    directives,\n    isBlock,\n    disableTracking,\n    isComponent,\n    loc,\n  };\n}\n\nexport function createObjectExpression(\n  properties: JSProperty[] = [],\n  loc: SourceLocation = DEFAULT_LOC,\n): JSObjectExpression {\n  return {\n    type: NodeTypes.JS_OBJECT_EXPRESSION,\n    properties,\n    loc,\n  };\n}\n\nexport function createObjectProperty(\n  key: JSChildNode,\n  value: JSChildNode,\n  loc: SourceLocation = DEFAULT_LOC,\n): JSProperty {\n  return {\n    type: NodeTypes.JS_PROPERTY,\n    key,\n    value,\n    loc,\n  };\n}\n\nexport function createCallExpression(\n  callee: string | symbol,\n  args: (JSChildNode | string | TemplateChildNode | TemplateChildNode[])[] = [],\n  loc: SourceLocation = DEFAULT_LOC,\n): JSCallExpression {\n  return {\n    type: NodeTypes.JS_CALL_EXPRESSION,\n    callee,\n    arguments: args,\n    loc,\n  };\n}\n\nexport function createConditionalExpression(\n  test: JSChildNode | string,\n  consequent: JSChildNode | TemplateChildNode | TemplateChildNode[],\n  alternate: JSChildNode | TemplateChildNode | TemplateChildNode[] | undefined,\n  newline = true,\n  loc: SourceLocation = DEFAULT_LOC,\n): JSConditionalExpression {\n  return {\n    type: NodeTypes.JS_CONDITIONAL_EXPRESSION,\n    test,\n    consequent,\n    alternate,\n    newline,\n    loc,\n  };\n}\n\nexport function createArrayExpression(\n  elements: JSChildNode[] = [],\n  loc: SourceLocation = DEFAULT_LOC,\n): JSArrayExpression {\n  return {\n    type: NodeTypes.JS_ARRAY_EXPRESSION,\n    elements,\n    loc,\n  };\n}\n","// src/parser-comment.ts\n// Comment parsing: parseComment\n\nimport type { CommentNode, ParserContext } from './types';\nimport { createComment } from './ast';\nimport { advanceBy, getCursor, getSelection } from './parser-base';\n\n// ============================================================\n// Parse comment\n// ============================================================\n\nexport function parseComment(context: ParserContext): CommentNode {\n  const start = getCursor(context);\n\n  advanceBy(context, 4);\n\n  const endIndex = context.source.indexOf('-->');\n  let content: string;\n  if (endIndex === -1) {\n    content = context.source;\n    advanceBy(context, context.source.length);\n  } else {\n    content = context.source.slice(0, endIndex);\n    advanceBy(context, endIndex + 3);\n  }\n\n  return createComment(content, getSelection(context, start));\n}\n","// src/parser-text.ts\n// Text and interpolation parsing: parseText, parseInterpolation\n\nimport type { TextNode, InterpolationNode, ParserContext } from './types';\nimport { createText, createInterpolation, createSimpleExpression } from './ast';\nimport { warn } from '@lytjs/common-error';\nimport { advanceBy, getCursor, getSelection } from './parser-base';\n\nimport { COMPILER_MAX_REGEX_INPUT_LENGTH as MAX_REGEX_INPUT_LENGTH } from '@lytjs/common-constants';\n\n// ============================================================\n// Parse text\n// ============================================================\n\nexport function parseText(context: ParserContext): TextNode {\n  const start = getCursor(context);\n  const endTokens = ['<', '{{'];\n\n  // FIX: P2-42 对大输入使用分段处理，避免 searchLength 截断导致遗漏结束标记。\n  // 当输入超过 MAX_REGEX_INPUT_LENGTH 时，先在截断范围内搜索，\n  // 如果未找到结束标记，则继续在剩余部分搜索。\n  let endIndex = context.source.length;\n  let searchStart = 0;\n  while (searchStart < context.source.length) {\n    const searchLength = Math.min(context.source.length - searchStart, MAX_REGEX_INPUT_LENGTH);\n    const segment = context.source.slice(searchStart, searchStart + searchLength);\n    let segmentEndIndex = searchLength;\n    for (const token of endTokens) {\n      // FIX: P2-14 删除 indexOf 第三个参数（死参数）\n      // String.prototype.indexOf 只接受两个参数：searchString 和 position\n      const index = segment.indexOf(token, 0);\n      if (index !== -1 && index < segmentEndIndex) {\n        segmentEndIndex = index;\n      }\n    }\n    if (segmentEndIndex < searchLength) {\n      // 在当前分段中找到了结束标记\n      endIndex = searchStart + segmentEndIndex;\n      break;\n    }\n    // 当前分段未找到结束标记，继续搜索下一段\n    searchStart += searchLength;\n  }\n\n  const content = context.source.slice(0, endIndex);\n  advanceBy(context, endIndex);\n\n  return createText(content, getSelection(context, start));\n}\n\n// ============================================================\n// Parse interpolation {{ expression }}\n// ============================================================\n\nexport function parseInterpolation(context: ParserContext): InterpolationNode | undefined {\n  const start = getCursor(context);\n  // 字符串感知扫描：跳过引号内的 }}，避免误判\n  // 使用状态机方式处理转义，正确处理连续反斜杠序列\n  let endIndex = 2;\n  let inString: string | null = null;\n  let backslashCount = 0;\n  while (endIndex < context.source.length) {\n    const char = context.source[endIndex];\n    if (inString) {\n      if (char === '\\\\') {\n        backslashCount++;\n      } else if (char === inString && backslashCount % 2 === 0) {\n        inString = null;\n        backslashCount = 0;\n      } else {\n        backslashCount = 0;\n      }\n    } else {\n      backslashCount = 0;\n      if (char === '\"' || char === \"'\") {\n        inString = char;\n      } else if (\n        char === '}' &&\n        endIndex + 1 < context.source.length &&\n        context.source[endIndex + 1] === '}'\n      ) {\n        break;\n      }\n    }\n    endIndex++;\n  }\n  const closeIndex = endIndex < context.source.length ? endIndex : -1;\n\n  if (closeIndex === -1) {\n    if (__DEV__) {\n      warn('Unclosed interpolation expression.');\n    }\n    return undefined;\n  }\n\n  // Advance past {{\n  advanceBy(context, 2);\n\n  // closeIndex is relative to original source (which still starts with {{),\n  // and we already advanced past {{ (2 chars), so the content length is closeIndex - 2.\n  const rawContent = context.source.slice(0, closeIndex - 2);\n\n  const content = rawContent.trim();\n\n  advanceBy(context, rawContent.length + 2);\n\n  const expression = createSimpleExpression(content, false, getSelection(context, start), false);\n\n  return createInterpolation(expression, getSelection(context, start));\n}\n","// src/parser-attribute.ts\n// Attribute and directive parsing: parseAttribute, parseDirective, parseQuotedValue, etc.\n\nimport {\n  type ElementTypes,\n  BARE_DIRECTIVE_NAMES,\n  BARE_DIRECTIVE_CONFLICTS,\n  BARE_DIRECTIVE_VALUE_PATTERNS,\n} from './constants';\nimport { warn } from '@lytjs/common-error';\nimport type {\n  TextNode,\n  AttributeNode,\n  DirectiveNode,\n  SimpleExpressionNode,\n  ParserContext,\n} from './types';\nimport { createText, createAttribute, createDirective, createSimpleExpression } from './ast';\n\nimport {\n  advanceBy,\n  advanceSpaces,\n  getCursor,\n  getSelection,\n  RE_ATTR_NAME,\n  RE_V_DIRECTIVE,\n  RE_QUOTED_ATTR_VALUE,\n  RE_UNQUOTED_ATTR_VALUE,\n} from './parser-base';\n\n// ============================================================\n// Parse attribute or directive\n// ============================================================\n\n/**\n * 尝试将裸属性名解析为指令（\"所见即所得\"模式）\n *\n * @returns DirectiveNode 如果匹配为裸指令；undefined 如果不匹配\n */\nfunction tryParseBareDirective(\n  rawName: string,\n  currentTag: string,\n  _tagType: (typeof ElementTypes)[keyof typeof ElementTypes],\n  context: ParserContext,\n  start: { offset: number; line: number; column: number },\n): AttributeNode | DirectiveNode | undefined {\n  // 检查是否显式关闭了裸指令名解析\n  if (context.options.bareDirectives === false) {\n    return undefined;\n  }\n\n  // 处理 attr- 转义前缀：attr-for=\"...\" → 普通属性 for=\"...\"\n  if (rawName.startsWith('attr-')) {\n    const escapedName = rawName.slice(5); // 去掉 \"attr-\" 前缀\n    advanceSpaces(context);\n\n    let value: TextNode | undefined;\n    if (context.source.startsWith('=')) {\n      advanceBy(context, 1);\n      advanceSpaces(context);\n      value = parseAttributeValue(context);\n    }\n\n    return createAttribute(escapedName, value, getSelection(context, start));\n  }\n\n  // 检查是否为裸指令名\n  if (!BARE_DIRECTIVE_NAMES.has(rawName)) {\n    return undefined;\n  }\n\n  // 上下文感知冲突检测\n  const conflictTags = BARE_DIRECTIVE_CONFLICTS[rawName];\n  if (conflictTags && conflictTags.has(currentTag)) {\n    return undefined; // 在冲突标签上，视为普通属性\n  }\n\n  // 值格式启发式检测（仅对有定义模式的指令生效）\n  const valuePattern = BARE_DIRECTIVE_VALUE_PATTERNS[rawName];\n  if (valuePattern) {\n    // 预读属性值（不消费），检查是否符合指令值格式\n    const savedSource = context.source;\n    advanceSpaces(context);\n\n    if (context.source.startsWith('=')) {\n      // 跳过 '=' 和空白\n      const afterEq = context.source.slice(1).trimStart();\n      // FIX: P2-23 使用预编译正则，避免每次调用都编译\n      const quoteMatch = RE_QUOTED_ATTR_VALUE.exec(afterEq);\n      if (quoteMatch) {\n        const attrValue = quoteMatch[2]!;\n        if (!valuePattern.test(attrValue)) {\n          // 值格式不匹配指令模式，还原上下文并视为普通属性\n          context.source = savedSource;\n          return undefined;\n        }\n      }\n    }\n\n    // 还原上下文（实际值解析由 parseDirective 完成）\n    context.source = savedSource;\n  }\n\n  // 匹配成功，解析为指令\n  return parseDirective(context, rawName, undefined, start);\n}\n\nexport function parseAttribute(\n  context: ParserContext,\n  _tagType: (typeof ElementTypes)[keyof typeof ElementTypes],\n  currentTag: string,\n): AttributeNode | DirectiveNode | undefined {\n  const start = getCursor(context);\n\n  const match = context.source.match(RE_ATTR_NAME);\n  if (!match) {\n    return undefined;\n  }\n\n  const rawName = match[0]!;\n  advanceBy(context, rawName.length);\n\n  if (rawName.startsWith(':')) {\n    return parseDirective(context, 'bind', rawName.slice(1), start);\n  }\n  if (rawName.startsWith('@')) {\n    return parseDirective(context, 'on', rawName.slice(1), start);\n  }\n  if (rawName.startsWith('#')) {\n    return parseDirective(context, 'slot', rawName.slice(1), start);\n  }\n\n  if (rawName.startsWith('v-')) {\n    const dirMatch = rawName.match(RE_V_DIRECTIVE);\n    if (dirMatch) {\n      return parseDirective(context, dirMatch[1]!, dirMatch[2], start);\n    }\n  }\n\n  // ===== 裸指令名识别（\"所见即所得\"模式）=====\n  const bareResult = tryParseBareDirective(rawName, currentTag, _tagType, context, start);\n  if (bareResult) {\n    return bareResult;\n  }\n  // ===== 裸指令名识别结束 =====\n\n  advanceSpaces(context);\n\n  let value: TextNode | undefined;\n\n  if (context.source.startsWith('=')) {\n    advanceBy(context, 1);\n    advanceSpaces(context);\n    value = parseAttributeValue(context);\n  }\n\n  return createAttribute(rawName, value, getSelection(context, start));\n}\n\n// ============================================================\n// Parse quoted value (shared by parseAttributeValue and parseDirective)\n// ============================================================\n\n// FIX: P2-23 提取公共逻辑，避免代码重复\n/**\n * 解析带引号的字符串值，支持转义字符\n * @param context 解析上下文\n * @param quote 引号字符（\" 或 '）\n * @returns 解析出的内容（不包含引号）\n */\nfunction parseQuotedString(context: ParserContext, quote: '\"' | \"'\"): string {\n  advanceBy(context, 1);\n  // 状态机方式处理转义：追踪连续反斜杠数量，奇数个反斜杠表示下一个引号被转义\n  let endIndex = 0;\n  let backslashCount = 0;\n  while (endIndex < context.source.length) {\n    const char = context.source[endIndex];\n    if (char === '\\\\') {\n      backslashCount++;\n    } else {\n      if (char === quote && backslashCount % 2 === 0) {\n        break;\n      }\n      backslashCount = 0;\n    }\n    endIndex++;\n  }\n\n  let content: string;\n  if (endIndex < context.source.length) {\n    content = context.source.slice(0, endIndex);\n  } else {\n    if (__DEV__) {\n      warn('Unclosed attribute value.');\n    }\n    content = context.source;\n  }\n  advanceBy(context, content.length + 1);\n  return content;\n}\n\nfunction parseQuotedValue(context: ParserContext): string {\n  let content: string;\n\n  if (context.source.startsWith('\"')) {\n    content = parseQuotedString(context, '\"');\n  } else if (context.source.startsWith(\"'\")) {\n    content = parseQuotedString(context, \"'\");\n  } else {\n    const match = context.source.match(RE_UNQUOTED_ATTR_VALUE);\n    content = match ? match[0] : '';\n    advanceBy(context, content.length);\n  }\n\n  return content;\n}\n\nfunction parseAttributeValue(context: ParserContext): TextNode {\n  const start = getCursor(context);\n  const content = parseQuotedValue(context);\n  return createText(content, getSelection(context, start));\n}\n\nfunction parseDirective(\n  context: ParserContext,\n  name: string,\n  rawArg: string | undefined,\n  start: { offset: number; line: number; column: number },\n): DirectiveNode {\n  advanceSpaces(context);\n\n  let arg: SimpleExpressionNode | undefined;\n  let exp: SimpleExpressionNode | undefined;\n  let modifiers: string[] = [];\n\n  if (rawArg !== undefined) {\n    const parts = rawArg.split('.');\n    const argContent = parts[0];\n    modifiers = parts.slice(1);\n\n    if (argContent !== undefined && argContent.startsWith('[') && argContent.endsWith(']')) {\n      const content = argContent.slice(1, -1);\n      arg = createSimpleExpression(content, false, getSelection(context, start), false);\n    } else if (argContent !== undefined) {\n      arg = createSimpleExpression(argContent, true, getSelection(context, start), true);\n    }\n  }\n\n  if (\n    name === 'bind' ||\n    name === 'on' ||\n    name === 'model' ||\n    name === 'if' ||\n    name === 'for' ||\n    name === 'each' ||\n    name === 'show' ||\n    name === 'text' ||\n    name === 'html' ||\n    name === 'slot' ||\n    name === 'once' ||\n    name === 'memo' ||\n    name === 'pre' ||\n    name === 'cloak' ||\n    name === 'else-if' ||\n    name === 'else'\n  ) {\n    advanceSpaces(context);\n\n    if (context.source.startsWith('=')) {\n      advanceBy(context, 1);\n      advanceSpaces(context);\n\n      const valueStart = getCursor(context);\n      const valueContent = parseQuotedValue(context);\n\n      exp = createSimpleExpression(valueContent, false, getSelection(context, valueStart), false);\n    }\n  }\n\n  return createDirective(name, arg, exp, modifiers, getSelection(context, start));\n}\n","// src/parser-element.ts\n// 元素解析: parseElement, parseTag\n\nimport { ElementTypes, TagType, TextModes } from './constants';\nimport { VOID_ELEMENTS } from '@lytjs/common-string';\nimport { warn } from '@lytjs/common-error';\nimport type { ElementNode, ParserContext, AttributeNode, DirectiveNode } from './types';\nimport { createElement } from './ast';\n\nimport {\n  advanceBy,\n  advanceSpaces,\n  getCursor,\n  getSelection,\n  createParseError,\n  isComponentTag,\n  getEndTagRegex,\n  RE_TAG_NAME,\n} from './parser-base';\nimport { parseChildren } from './parser-children';\nimport { parseAttribute } from './parser-attribute';\n\n// ============================================================\n// Parse element\n// ============================================================\n\nexport function parseElement(context: ParserContext): ElementNode | undefined {\n  const start = getCursor(context);\n\n  const element = parseTag(context, TagType.Start);\n\n  if (!element) {\n    return undefined;\n  }\n\n  if (element.isSelfClosing) {\n    return element;\n  }\n\n  const tag = element.tag;\n\n  let textMode: number = TextModes.DATA;\n  if (tag === 'textarea' || tag === 'title' || tag === 'xmp') {\n    textMode = TextModes.RCDATA;\n  } else if (\n    tag === 'style' ||\n    tag === 'script' ||\n    tag === 'iframe' ||\n    tag === 'noembed' ||\n    tag === 'noframes' ||\n    tag === 'noscript' ||\n    tag === 'plaintext'\n  ) {\n    textMode = TextModes.RAWTEXT;\n  }\n\n  parseChildren(context, element, textMode);\n\n  if (context.source.startsWith(`</`)) {\n    const endTagMatch = context.source.match(getEndTagRegex(tag));\n    if (endTagMatch) {\n      advanceBy(context, endTagMatch[0].length);\n    } else {\n      // FIX: P1-2 COMPILER-NEW-03 - 使用带行列位置信息的错误\n      const errorMessage = `Element <${tag}> was left open. Expected closing tag </${tag}>.`;\n      if (__DEV__) {\n        warn(errorMessage);\n      }\n\n      if (context.options.onError) {\n        context.options.onError(createParseError(context, errorMessage));\n      }\n    }\n  }\n\n  element.loc = getSelection(context, start);\n  return element;\n}\n\n// ============================================================\n// Parse tag\n// ============================================================\n\nfunction parseTag(context: ParserContext, type: number): ElementNode | undefined {\n  const start = getCursor(context);\n  advanceBy(context, 1);\n\n  const tagMatch = context.source.match(RE_TAG_NAME);\n  if (!tagMatch) {\n    return undefined;\n  }\n\n  const tag = tagMatch[1]!;\n  advanceBy(context, tag.length);\n\n  let tagType: (typeof ElementTypes)[keyof typeof ElementTypes] = ElementTypes.ELEMENT;\n  if (isComponentTag(tag)) {\n    tagType = ElementTypes.COMPONENT;\n  } else if (tag === 'template') {\n    tagType = ElementTypes.TEMPLATE;\n  } else if (tag === 'slot') {\n    tagType = ElementTypes.SLOT;\n  }\n\n  const props: (AttributeNode | DirectiveNode)[] = [];\n  const MAX_ATTRIBUTES = 1000;\n  let attrCount = 0;\n  while (\n    context.source.length > 0 &&\n    !context.source.startsWith('>') &&\n    !context.source.startsWith('/>')\n  ) {\n    attrCount++;\n    if (attrCount > MAX_ATTRIBUTES) {\n      if (__DEV__) {\n        warn(\n          `Too many attributes (${attrCount}), ` +\n            `stopping attribute parsing to prevent infinite loop.`,\n        );\n      }\n      const tagEnd = context.source.indexOf('>');\n      if (tagEnd !== -1) {\n        advanceBy(context, tagEnd);\n      }\n      break;\n    }\n    const prop = parseAttribute(context, tagType, tag);\n    if (prop) {\n      props.push(prop);\n    }\n    advanceSpaces(context);\n  }\n\n  let isSelfClosing = false;\n  if (context.source.startsWith('/>')) {\n    isSelfClosing = true;\n    advanceBy(context, 2);\n\n    // Warn when non-void elements use self-closing syntax (e.g. <div />)\n    // This is not valid HTML and may cause hydration issues.\n    if (type === TagType.Start && !VOID_ELEMENTS.has(tag)) {\n      // FIX: P1-2 COMPILER-NEW-03 - 使用带行列位置信息的错误\n      const errorMessage =\n        `Non-void element <${tag}> uses self-closing syntax. ` +\n        `This is not valid HTML and may cause hydration issues. ` +\n        `Use <${tag}></${tag}> instead.`;\n      if (__DEV__) {\n        warn(errorMessage);\n      }\n      if (context.options.onError) {\n        context.options.onError(createParseError(context, errorMessage));\n      }\n    }\n  } else if (context.source.startsWith('>')) {\n    advanceBy(context, 1);\n  }\n\n  if (type === TagType.End) {\n    return undefined;\n  }\n\n  // FIX: P1-T2 通过 createElement 的 tagType 参数直接传入，避免类型断言\n  const element = createElement(tag, props, [], getSelection(context, start), tagType);\n  element.isSelfClosing = isSelfClosing;\n\n  return element;\n}\n","// src/parser-children.ts\n// Parse children and whitespace condensing\n\nimport { NodeTypes, TextModes } from './constants';\nimport { warn } from '@lytjs/common-error';\nimport type { TextNode, TemplateChildNode, ParentNode, ParserContext } from './types';\n\nimport { advanceBy, RE_DOCTYPE } from './parser-base';\n\nimport { parseComment } from './parser-comment';\nimport { parseInterpolation, parseText } from './parser-text';\nimport { parseElement } from './parser-element';\n\n// ============================================================\n// Parse children\n// ============================================================\n\n// Circular dependency note: parseChildren calls parseComment, parseInterpolation,\n// parseElement, parseText which are defined in sub-modules. parseElement calls\n// parseChildren back. This is safe with ES modules because all function references\n// are resolved at runtime (after all modules are loaded), not at import time.\n\nexport function parseChildren(context: ParserContext, parent: ParentNode, mode: number): void {\n  let nodes: TemplateChildNode[] = [];\n\n  while (!isEnd(context, mode)) {\n    const s = context.source;\n    let node: TemplateChildNode | undefined;\n\n    if (mode === TextModes.DATA || mode === TextModes.RCDATA) {\n      if (s.startsWith('<!--')) {\n        node = parseComment(context);\n      } else if (s.startsWith('{{')) {\n        node = parseInterpolation(context);\n      } else if (s.startsWith('<')) {\n        if (s[1] === '/') {\n          break;\n        }\n        if (s.startsWith('<!DOCTYPE') || s.startsWith('<!')) {\n          const match = s.match(RE_DOCTYPE);\n          if (match) {\n            advanceBy(context, match[0].length);\n            continue;\n          }\n          // DOCTYPE/声明格式异常，跳过到行尾或文件尾防止无限循环\n          if (__DEV__) {\n            warn(`Invalid DOCTYPE/declaration at position ${context.offset}`);\n          }\n          const lineEnd = s.indexOf('\\n');\n          advanceBy(context, lineEnd === -1 ? s.length : lineEnd);\n          continue;\n        }\n        node = parseElement(context);\n      }\n    }\n\n    if (!node) {\n      node = parseText(context);\n    }\n\n    if (node) {\n      nodes.push(node);\n    }\n  }\n\n  // Handle whitespace condensing\n  if (mode === TextModes.DATA && parent.type !== NodeTypes.ELEMENT) {\n    nodes = condenseWhitespace(nodes);\n  }\n\n  parent.children = nodes;\n}\n\nfunction condenseWhitespace(nodes: TemplateChildNode[]): TemplateChildNode[] {\n  const condensed: TemplateChildNode[] = [];\n  let prevText: TextNode | undefined;\n  // Track indices of whitespace-only text nodes to remove in a single pass (O(n))\n  const whitespaceIndicesToRemove = new Set<number>();\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i]!;\n    if (node.type === NodeTypes.TEXT) {\n      if (!node.content.trim()) {\n        if (prevText) {\n          prevText.content += node.content;\n        } else if (condensed.length > 0) {\n          whitespaceIndicesToRemove.add(condensed.length);\n          prevText = node;\n          condensed.push(node);\n        }\n        continue;\n      }\n    }\n\n    if (node.type === NodeTypes.TEXT && prevText && !prevText.content.trim()) {\n      // Mark the previous whitespace-only text node for removal\n      whitespaceIndicesToRemove.add(condensed.length - 1);\n    }\n\n    if (node.type === NodeTypes.TEXT) {\n      prevText = node;\n    } else {\n      prevText = undefined;\n    }\n\n    condensed.push(node);\n  }\n\n  // Filter out marked whitespace nodes in a single pass (O(n))\n  if (whitespaceIndicesToRemove.size > 0) {\n    return condensed.filter((_, idx) => !whitespaceIndicesToRemove.has(idx));\n  }\n\n  return condensed;\n}\n\n// FIX: P2-7 完善类型守卫：添加 TextMode 类型守卫\n/**\n * 检查是否为 RCDATA 模式（支持实体解析的原始文本）\n * 类型守卫：缩小 number 类型到具体的 TextMode 常量\n */\nfunction isRCDATAMode(mode: number): mode is typeof TextModes.RCDATA {\n  return mode === TextModes.RCDATA;\n}\n\n/**\n * 检查是否为 RAWTEXT 模式（不解析实体和标签的原始文本）\n * 类型守卫：缩小 number 类型到具体的 TextMode 常量\n */\nfunction isRAWTEXTMode(mode: number): mode is typeof TextModes.RAWTEXT {\n  return mode === TextModes.RAWTEXT;\n}\n\n/**\n * 检查是否为 CDATA 模式（不解析任何内容的原始文本）\n * 类型守卫：缩小 number 类型到具体的 TextMode 常量\n */\nfunction isCDATAMode(mode: number): mode is typeof TextModes.CDATA {\n  return mode === TextModes.CDATA;\n}\n\n/**\n * 检查是否为 DATA 模式（标准 HTML 解析模式）\n * 类型守卫：缩小 number 类型到具体的 TextMode 常量\n */\nfunction isDATAMode(mode: number): mode is typeof TextModes.DATA {\n  return mode === TextModes.DATA;\n}\n\nfunction isEnd(context: ParserContext, mode: number): boolean {\n  const s = context.source;\n  // FIX: P2-7 使用类型守卫进行模式检查\n  if (isDATAMode(mode)) {\n    if (s.startsWith('</')) {\n      const match = s.match(/^<\\/([a-zA-Z][a-zA-Z0-9-]*)/);\n      return !!match;\n    }\n    return !s;\n  }\n  if (isRCDATAMode(mode) || isRAWTEXTMode(mode) || isCDATAMode(mode)) {\n    if (s.startsWith('</')) {\n      return true;\n    }\n    return !s;\n  }\n  return !s;\n}\n","// src/parser-base.ts\n// 基础解析器框架：工具函数、常量、主解析函数\n\nimport { TextModes } from './constants';\nimport { escapeRegExp } from '@lytjs/common-string';\nimport {\n  warn,\n  createCompilerError,\n  LytErrorCodes,\n  type SourceLocation,\n  getErrorSuggestion,\n} from '@lytjs/common-error';\nimport type { RootNode, ParserContext, ParserOptions } from './types';\nimport { createRoot } from './ast';\n\nimport {\n  COMPILER_MAX_INPUT_LENGTH as MAX_INPUT_LENGTH,\n  COMPILER_END_TAG_CACHE_MAX_SIZE as END_TAG_CACHE_MAX_SIZE,\n} from '@lytjs/common-constants';\n\nimport { parseChildren } from './parser-children';\n\n// 预编译 RegExp 常量（避免每次调用时重新创建）\nconst RE_ADVANCE_SPACES = /^[\\t\\r\\n\\f ]+/;\nconst RE_DOCTYPE = /^<!\\[\\s\\S\\]*?>/;\nconst RE_TAG_NAME = /^([a-zA-Z][a-zA-Z0-9-]*)/;\nconst RE_ATTR_NAME = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/;\nconst RE_V_DIRECTIVE = /^v-([a-zA-Z][a-zA-Z0-9-]*)(?::(.+))?$/;\nconst RE_UNQUOTED_ATTR_VALUE = /^[^\\t\\r\\n\\f >]+/;\nconst RE_COMPONENT_TAG = /^[A-Z]/;\n\n// FIX: P2-23 正则表达式缓存 - 模块级预编译正则，避免每次调用都编译\nconst RE_QUOTED_ATTR_VALUE = /^(['\"])(.*)\\1/;\nconst RE_IN_OF_EXPRESSION = /^(?:in|of)\\s+(.+)$/;\nconst RE_COMMA_INDEX_IN_OF = /^(?:,\\s*(\\w+))?\\s+(?:in|of)\\s+(.+)$/;\n\n// 结束标签 RegExp 缓存（避免每次 parseElement 调用时重新创建）\nconst endTagCache = new Map<string, RegExp>();\nfunction getEndTagRegex(tag: string): RegExp {\n  let regex = endTagCache.get(tag);\n  if (!regex) {\n    regex = new RegExp(`^<\\\\/\\\\s*${escapeRegExp(tag)}\\\\s*>`);\n    endTagCache.set(tag, regex);\n    // 当缓存超过最大大小时淘汰最旧的条目\n    if (endTagCache.size > END_TAG_CACHE_MAX_SIZE) {\n      const oldestKey = endTagCache.keys().next().value;\n      if (oldestKey !== undefined) {\n        endTagCache.delete(oldestKey);\n      }\n    }\n  }\n  return regex;\n}\n\n// ============================================================\n// 解析器工具函数\n// ============================================================\n\nfunction advanceBy(context: ParserContext, numberOfCharacters: number): void {\n  const { source } = context;\n  advancePositionWithMutation(context, source, numberOfCharacters);\n  context.source = source.slice(numberOfCharacters);\n}\n\nfunction advancePositionWithMutation(\n  context: ParserContext,\n  source: string,\n  numberOfCharacters: number,\n): void {\n  for (let i = 0; i < numberOfCharacters; i++) {\n    const char = source.charCodeAt(i);\n    if (char === 10 /* \\n */) {\n      context.line++;\n      context.column = 0;\n    } else if (char === 13 /* \\r */) {\n      context.line++;\n      context.column = 0;\n      // 跳过 \\r\\n 序列中的 \\n\n      if (source.charCodeAt(i + 1) === 10) {\n        i++;\n      }\n    } else {\n      context.column++;\n    }\n  }\n  context.offset += numberOfCharacters;\n}\n\nfunction advanceSpaces(context: ParserContext): void {\n  const match = RE_ADVANCE_SPACES.exec(context.source);\n  if (match) {\n    advanceBy(context, match[0].length);\n  }\n}\n\nfunction getCursor(context: ParserContext): {\n  offset: number;\n  line: number;\n  column: number;\n} {\n  return { offset: context.offset, line: context.line, column: context.column };\n}\n\nfunction getSelection(\n  context: ParserContext,\n  start: { offset: number; line: number; column: number },\n): SourceLocation {\n  const end = getCursor(context);\n  return {\n    start,\n    end,\n    source: context.originalSource.slice(start.offset, end.offset),\n  };\n}\n\n// FIX: P1-2 COMPILER-NEW-03 - 创建带行列位置信息的解析错误\nfunction createParseError(\n  context: ParserContext,\n  message: string,\n  code: LytErrorCodes = LytErrorCodes.UNEXPECTED_TOKEN,\n): Error {\n  const { line, column, offset } = context;\n\n  const loc: SourceLocation = {\n    start: { line, column, offset },\n    end: { line, column: column + 1, offset: offset + 1 },\n    source: context.originalSource,\n  };\n\n  // 创建带源码片段的错误消息\n  const snippet = extractCodeSnippet(context.originalSource, line, column);\n  const suggestion = getErrorSuggestion(code);\n\n  const fullMessage =\n    `Parse error at line ${line}, column ${column}: ${message}` +\n    `\\n\\n${snippet}` +\n    (suggestion ? `\\n\\n💡 Suggestion: ${suggestion}` : '');\n\n  const error = createCompilerError(code, loc, fullMessage);\n  return error;\n}\n\nfunction createParserContext(source: string, options: ParserOptions): ParserContext {\n  return {\n    options,\n    originalSource: source,\n    source,\n    offset: 0,\n    line: 1,\n    column: 1,\n    inPre: false,\n    inVPre: false,\n  };\n}\n\n// ============================================================\n// 源码片段显示\n// ============================================================\n\n/**\n * 从源代码中提取错误位置附近的片段，包含行号和指示箭头\n */\nfunction extractCodeSnippet(\n  source: string,\n  line: number,\n  column: number,\n  contextLines: number = 2,\n): string {\n  const lines = source.split('\\n');\n  const startLine = Math.max(0, line - contextLines - 1);\n  const endLine = Math.min(lines.length, line + contextLines);\n\n  const snippet: string[] = [];\n  const maxLineNumberWidth = String(endLine).length;\n\n  for (let i = startLine; i < endLine; i++) {\n    const currentLine = i + 1;\n    const lineContent = lines[i];\n\n    snippet.push(`${String(currentLine).padStart(maxLineNumberWidth)} | ${lineContent}`);\n\n    if (currentLine === line) {\n      snippet.push(`${' '.repeat(maxLineNumberWidth)} | ${' '.repeat(column - 1)}^`);\n    }\n  }\n\n  return snippet.join('\\n');\n}\n\n// ============================================================\n// 辅助函数\n// ============================================================\n\nfunction isComponentTag(tag: string): boolean {\n  return RE_COMPONENT_TAG.test(tag) || tag.includes('-');\n}\n\n// ============================================================\n// 主解析函数\n// ============================================================\n\nexport function parse(source: string, options: ParserOptions = {}): RootNode {\n  // FIX: P1-1 COMPILER-NEW-02 - 输入长度检查，如果超过限制使用分段解析\n  if (source.length > MAX_INPUT_LENGTH) {\n    if (__DEV__) {\n      warn(\n        `Input length (${source.length}) exceeds maximum recommended length (${MAX_INPUT_LENGTH}). ` +\n          `Parsing may be slower for large inputs.`,\n      );\n    }\n  }\n\n  const context = createParserContext(source, options);\n  const root = createRoot([], source);\n\n  parseChildren(context, root, TextModes.DATA);\n\n  root.loc = getSelection(context, { offset: 0, line: 1, column: 1 });\n\n  return root;\n}\n\n// ============================================================\n// 子模块导出（仅供内部使用）\n// ============================================================\n\nexport {\n  advanceBy,\n  advanceSpaces,\n  getCursor,\n  getSelection,\n  createParseError,\n  isComponentTag,\n  getEndTagRegex,\n  // 重新导出子模块需要的正则表达式\n  RE_ATTR_NAME,\n  RE_V_DIRECTIVE,\n  RE_QUOTED_ATTR_VALUE,\n  RE_UNQUOTED_ATTR_VALUE,\n  RE_TAG_NAME,\n  RE_COMPONENT_TAG,\n  RE_IN_OF_EXPRESSION,\n  RE_COMMA_INDEX_IN_OF,\n  RE_DOCTYPE,\n};\nexport type { ParserContext, ParserOptions, SourceLocation };\n","// src/transforms/helpers.ts\n// 共享辅助函数\n\nimport { NodeTypes } from '../constants';\nimport type {\n  ElementNode,\n  DirectiveNode,\n  ExpressionNode,\n  TemplateChildNode,\n  CompoundExpressionNode,\n} from '../types';\n\n/**\n * 获取表达式节点的内容字符串\n * @param exp - 表达式节点，如果为 null 或 undefined 则直接返回 undefined\n * @returns 表达式内容字符串，或 undefined\n *\n * FIX: P2-48 添加对 COMPOUND_EXPRESSION 类型的处理，\n * 将复合表达式的所有子节点拼接为字符串返回\n */\nexport function getExpContent(exp: ExpressionNode | null | undefined): string | undefined {\n  if (exp == null) return undefined;\n  if (exp.type === NodeTypes.SIMPLE_EXPRESSION) return exp.content;\n  if (exp.type === NodeTypes.COMPOUND_EXPRESSION) {\n    return (exp as CompoundExpressionNode).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  return undefined;\n}\n\n/**\n * 在元素节点中查找指定名称的指令\n */\nexport function findDirective(node: ElementNode, name: string): DirectiveNode | undefined {\n  return node.props.find(\n    (p): p is DirectiveNode => p.type === NodeTypes.DIRECTIVE && p.name === name,\n  );\n}\n\n/**\n * 判断节点是否为 JS 类型节点（codegen 阶段的节点类型）。\n *\n * 注意：此函数不包含表达式节点（SIMPLE_EXPRESSION、COMPOUND_EXPRESSION），\n * 因为表达式节点属于模板层节点，在 transform 阶段仍需要作为 TemplateChildNode 处理，\n * 而非直接作为 codegen 节点使用。\n */\nexport function isJS(node: TemplateChildNode): boolean {\n  return (\n    node.type === NodeTypes.JS_CALL_EXPRESSION ||\n    node.type === NodeTypes.JS_OBJECT_EXPRESSION ||\n    node.type === NodeTypes.JS_PROPERTY ||\n    node.type === NodeTypes.JS_ARRAY_EXPRESSION ||\n    node.type === NodeTypes.JS_FUNCTION_EXPRESSION ||\n    node.type === NodeTypes.JS_CONDITIONAL_EXPRESSION ||\n    node.type === NodeTypes.JS_CACHE_EXPRESSION ||\n    node.type === NodeTypes.VNODE_CALL\n  );\n}\n","// src/transforms/transform-element.ts\n// 元素节点转换逻辑\n\n/**\n * Block Tree 编译时优化\n *\n * 核心思路：编译阶段标记动态节点，运行时 diff 时跳过静态子树，只追踪 dynamicChildren。\n * - PatchFlags 标记节点变更类型（TEXT/CLASS/STYLE/PROPS/FULL_PROPS 等），实现精确更新。\n * - collectDynamicChildren() 在 transform 完成后遍历 AST，将非静态子节点的 codegenNode\n *   收集到父元素的 dynamicChildren 数组中。\n *\n * 已知限制：嵌套 v-for 仅做浅收集；动态组件子 Block 需运行时建立；\n * v-if/v-else 分支内部动态子节点不独立收集。\n */\n\nimport { NodeTypes, ElementTypes, PatchFlags } from '../constants';\nimport type {\n  ElementNode,\n  InterpolationNode,\n  DirectiveNode,\n  SimpleExpressionNode,\n  CompoundExpressionNode,\n  JSChildNode,\n  JSObjectExpression,\n  JSProperty,\n  TransformContext,\n  ExpressionNode,\n  TemplateChildNode,\n} from '../types';\nimport {\n  createVNodeCall,\n  createSimpleExpression,\n  createCompoundExpression,\n  createCallExpression,\n  createObjectExpression,\n  createObjectProperty,\n  createConditionalExpression,\n} from '../ast';\nimport { getExpContent, findDirective } from './helpers';\nimport { capitalize } from '@lytjs/common-string';\n\n/**\n * 类型守卫：检查 TemplateChildNode 是否有 codegenNode（JSChildNode）。\n * 用于安全地缩小类型范围，而非使用 `as unknown as JSChildNode`。\n */\nfunction hasCodegenNode(\n  node: TemplateChildNode,\n): node is ElementNode & { codegenNode: JSChildNode } {\n  return node.type === NodeTypes.ELEMENT && (node as ElementNode).codegenNode != null;\n}\n\nexport function transformElement(node: ElementNode, context: TransformContext): void {\n  if (node.type !== NodeTypes.ELEMENT) return;\n\n  // 首先处理 v-if 链\n  const ifDirective = findDirective(node, 'if');\n  if (ifDirective) {\n    return;\n  }\n\n  // 处理 v-for\n  const forDirective = findDirective(node, 'for');\n  if (forDirective) {\n    return;\n  }\n\n  // 处理 v-once\n  const onceDirective = findDirective(node, 'once');\n  if (onceDirective) {\n    return;\n  }\n\n  // 处理 v-memo（由 transformVMemo 处理）\n  const memoDirective = findDirective(node, 'memo');\n  if (memoDirective) {\n    return;\n  }\n\n  // 常规元素 - 转换为 VNodeCall\n  const { tag, props, children } = node;\n\n  const isComponent = node.tagType === ElementTypes.COMPONENT;\n\n  // 构建 props 对象\n  let propsExpression: JSObjectExpression | undefined;\n  const hasDynamicProps = props.some((p) => p.type === NodeTypes.DIRECTIVE);\n\n  if (props.length > 0) {\n    const properties: JSProperty[] = [];\n    for (const prop of props) {\n      if (prop.type === NodeTypes.ATTRIBUTE) {\n        const value = prop.value\n          ? createSimpleExpression(JSON.stringify(prop.value.content), true, prop.loc, true)\n          : createSimpleExpression('true', true, prop.loc, true);\n        properties.push(\n          createObjectProperty(\n            createSimpleExpression(JSON.stringify(prop.name), true, prop.loc, true),\n            value,\n          ),\n        );\n      } else if (prop.type === NodeTypes.DIRECTIVE) {\n        handleDirective(prop, node, context, properties);\n      }\n    }\n    if (properties.length > 0) {\n      propsExpression = createObjectExpression(properties);\n    }\n  }\n\n  // 构建 children\n  let vnodeChildren: JSChildNode | TemplateChildNode[] | string | undefined;\n  if (children.length === 1) {\n    const child = children[0];\n    if (child) {\n      if (child.type === NodeTypes.TEXT) {\n        vnodeChildren = child.content;\n      } else if (child.type === NodeTypes.INTERPOLATION) {\n        context.helper('TO_DISPLAY_STRING');\n        vnodeChildren = createCallExpression('TO_DISPLAY_STRING', [\n          (child as InterpolationNode).content,\n        ]);\n      } else if (child.type === NodeTypes.ELEMENT) {\n        // 使用类型守卫安全访问 codegenNode，无需双重断言\n        if (hasCodegenNode(child)) {\n          vnodeChildren = child.codegenNode;\n        }\n      } else if (child.type === NodeTypes.COMMENT) {\n        // 跳过注释节点 - 它们不是 JSChildNode，不应包含在代码生成中\n        vnodeChildren = undefined;\n      } else {\n        // 对于其他节点类型（SimpleExpressionNode、CompoundExpressionNode、JSChildNode），\n        // they are valid JSChildNode subtypes - safe to narrow directly\n        if (\n          child.type === NodeTypes.SIMPLE_EXPRESSION ||\n          child.type === NodeTypes.COMPOUND_EXPRESSION ||\n          child.type === NodeTypes.VNODE_CALL ||\n          child.type === NodeTypes.JS_CALL_EXPRESSION ||\n          child.type === NodeTypes.JS_OBJECT_EXPRESSION ||\n          child.type === NodeTypes.JS_PROPERTY ||\n          child.type === NodeTypes.JS_ARRAY_EXPRESSION ||\n          child.type === NodeTypes.JS_FUNCTION_EXPRESSION ||\n          child.type === NodeTypes.JS_CONDITIONAL_EXPRESSION ||\n          child.type === NodeTypes.JS_CACHE_EXPRESSION\n        ) {\n          vnodeChildren = child as JSChildNode;\n        }\n      }\n    }\n  } else if (children.length > 1) {\n    // 过滤注释节点 - 它们不是有效的 JSChildNode 类型\n    const nonCommentChildren = children.filter((c) => c.type !== NodeTypes.COMMENT);\n    const hasNonText = nonCommentChildren.some((c) => c.type === NodeTypes.ELEMENT);\n    if (!hasNonText) {\n      const parts: (string | SimpleExpressionNode | InterpolationNode)[] = [];\n      for (const child of nonCommentChildren) {\n        if (child.type === NodeTypes.TEXT) {\n          parts.push(JSON.stringify(child.content));\n        } else if (child.type === NodeTypes.INTERPOLATION) {\n          parts.push(child as InterpolationNode);\n        }\n      }\n      if (parts.length > 0) {\n        context.helper('TO_DISPLAY_STRING');\n        vnodeChildren = createCompoundExpression(parts);\n      }\n    } else {\n      // 从代码生成中过滤非 JSChildNode 类型\n      const jsChildren = nonCommentChildren.filter(\n        (\n          c,\n        ): c is\n          | SimpleExpressionNode\n          | CompoundExpressionNode\n          | (ElementNode & { codegenNode: JSChildNode }) =>\n          c.type === NodeTypes.SIMPLE_EXPRESSION ||\n          c.type === NodeTypes.COMPOUND_EXPRESSION ||\n          hasCodegenNode(c),\n      );\n      if (jsChildren.length > 0) {\n        vnodeChildren = jsChildren.map((c) =>\n          c.type === NodeTypes.ELEMENT\n            ? (c as ElementNode & { codegenNode: JSChildNode }).codegenNode\n            : (c as JSChildNode),\n        ) as JSChildNode[];\n      }\n    }\n  }\n\n  // 确定 patch flag\n  let patchFlag: number | undefined;\n  if (hasDynamicProps) {\n    patchFlag = PatchFlags.FULL_PROPS;\n  } else if (children.some((c) => c.type === NodeTypes.INTERPOLATION)) {\n    patchFlag = PatchFlags.TEXT;\n  }\n\n  // 同步 patchFlag 到 ElementNode.patchFlag（供运行时和测试使用）\n  if (patchFlag !== undefined) {\n    node.patchFlag = patchFlag;\n  }\n\n  // 判断是否为 Block 根节点\n  // 根元素或具有动态子节点的元素应作为 Block\n  const shouldBeBlock = !node.isStatic && (patchFlag !== undefined || hasDynamicChildren(node));\n\n  const vnodeCall = createVNodeCall(\n    isComponent ? tag : JSON.stringify(tag),\n    propsExpression,\n    vnodeChildren,\n    patchFlag,\n    undefined,\n    undefined,\n    shouldBeBlock,\n    false,\n    isComponent,\n  );\n\n  node.codegenNode = vnodeCall;\n\n  if (shouldBeBlock) {\n    context.helper('CREATE_BLOCK');\n    context.helper('OPEN_BLOCK');\n  } else {\n    context.helper('CREATE_VNODE');\n  }\n\n  // 为动态子节点注册 trackDynamicChild helper\n  if (shouldBeBlock && patchFlag !== undefined) {\n    context.helper('SET_BLOCK_TRACKING');\n  }\n\n  if (isComponent) {\n    context.components.add(tag);\n  }\n}\n\n/**\n * 判断元素是否包含动态子节点（递归检查一层）\n */\nfunction hasDynamicChildren(node: ElementNode): boolean {\n  return node.children.some((child) => {\n    if (child.type === NodeTypes.ELEMENT) {\n      const el = child as ElementNode;\n      return el.patchFlag !== undefined && el.patchFlag !== 0;\n    }\n    return child.type === NodeTypes.INTERPOLATION;\n  });\n}\n\n/**\n * 处理元素中的指令属性\n */\nfunction handleDirective(\n  prop: DirectiveNode,\n  node: ElementNode,\n  context: TransformContext,\n  properties: JSProperty[],\n): void {\n  switch (prop.name) {\n    case 'bind':\n      handleVBind(prop, node, context, properties);\n      break;\n    case 'on':\n      handleVOn(prop, node, context, properties);\n      break;\n    case 'model':\n      // v-model 已有独立 transform（model.ts），保持现有调用\n      handleVModel(prop, node, context, properties);\n      break;\n    case 'show':\n      handleVShow(prop, node, context, properties);\n      break;\n    case 'html':\n      handleVHtml(prop, node, context, properties);\n      break;\n    case 'text':\n      handleVText(prop, node, context, properties);\n      break;\n    case 'cloak':\n    case 'pre':\n      // skip\n      break;\n    default:\n      // FIX: P2-26 自定义指令编译缓存：\n      // 未知指令 - 注册它以供运行时解析\n      context.directives.add(prop.name);\n      break;\n  }\n}\n\n/**\n * 处理 v-bind 指令\n */\nfunction handleVBind(\n  prop: DirectiveNode,\n  _node: ElementNode,\n  _context: TransformContext,\n  properties: JSProperty[],\n): void {\n  const expContent = getExpContent(prop.exp);\n  const argContent = prop.arg ? getExpContent(prop.arg as ExpressionNode) : undefined;\n\n  if (argContent !== undefined) {\n    const valueExpr =\n      expContent !== undefined\n        ? createSimpleExpression(expContent, false, prop.loc, false)\n        : createSimpleExpression('undefined', true, prop.loc, true);\n    properties.push(\n      createObjectProperty(\n        createSimpleExpression(JSON.stringify(argContent), true, prop.loc, true),\n        valueExpr,\n      ),\n    );\n  }\n}\n\n/**\n * 处理 v-on 指令\n * FIX: P1-30 添加事件修饰符处理，支持 .stop/.prevent/.capture/.once/.self/.passive\n *\n * NOTE: handleVOn 与 transforms/on.ts 中的 transformOn 的分工说明：\n * - transformOn（on.ts）：作为 DirectiveTransform 注册到 builtInDirectiveTransforms 中，\n *   在 transform 阶段由 transform.ts 的 traverseNode 调用，处理 v-on 指令并返回\n *   DirectiveTransformResult（包含 props 数组），用于标准编译管线。\n * - handleVOn（此处）：在 transformElement 中直接调用，用于将 v-on 指令转换为\n *   VNodeCall 的 props 属性。这是 transformElement 内联处理指令的方式，\n *   与 transformOn 的独立 DirectiveTransform 模式互补。\n * 实际编译时，v-on 会优先走 on.ts 的 transformOn 路径（通过 builtInDirectiveTransforms），\n * 此处的 handleVOn 作为 transformElement 内部指令处理的备用路径。\n */\nfunction handleVOn(\n  prop: DirectiveNode,\n  _node: ElementNode,\n  _context: TransformContext,\n  properties: JSProperty[],\n): void {\n  const expContent = getExpContent(prop.exp);\n  const argContent = prop.arg ? getExpContent(prop.arg as ExpressionNode) : undefined;\n\n  if (argContent !== undefined) {\n    const handler =\n      expContent !== undefined\n        ? createSimpleExpression(expContent, false, prop.loc, false)\n        : createSimpleExpression('undefined', true, prop.loc, true);\n\n    // FIX: P1-30 处理事件修饰符：将修饰符编译为事件选项对象\n    const modifiers = prop.modifiers;\n    if (modifiers && modifiers.length > 0) {\n      const eventOptions: JSProperty[] = [];\n      if (modifiers.includes('capture')) {\n        eventOptions.push(\n          createObjectProperty(\n            createSimpleExpression('capture', true, prop.loc, true),\n            createSimpleExpression('true', true, prop.loc, true),\n          ),\n        );\n      }\n      if (modifiers.includes('once')) {\n        eventOptions.push(\n          createObjectProperty(\n            createSimpleExpression('once', true, prop.loc, true),\n            createSimpleExpression('true', true, prop.loc, true),\n          ),\n        );\n      }\n      if (modifiers.includes('passive')) {\n        eventOptions.push(\n          createObjectProperty(\n            createSimpleExpression('passive', true, prop.loc, true),\n            createSimpleExpression('true', true, prop.loc, true),\n          ),\n        );\n      }\n\n      // 构建带修饰符的事件处理器\n      // FIX: P2-31 使用 ExpressionNode 类型以支持 SimpleExpressionNode 和 CompoundExpressionNode\n      let eventHandler: ExpressionNode = handler;\n      // FIX: P1-11 使用累加方式组合多个修饰符，避免后面的修饰符覆盖前面的\n      // 收集所有需要应用的修饰符前缀和后缀\n      const modifierPrefixes: string[] = [];\n\n      if (modifiers.includes('self')) {\n        modifierPrefixes.push('if ($event.target !== $event.currentTarget) return;');\n      }\n      if (modifiers.includes('stop')) {\n        modifierPrefixes.push('$event.stopPropagation();');\n      }\n      if (modifiers.includes('prevent')) {\n        modifierPrefixes.push('$event.preventDefault();');\n      }\n\n      // 如果有任何修饰符前缀，将所有修饰符组合到同一个包装函数内\n      if (modifierPrefixes.length > 0) {\n        eventHandler = createCompoundExpression([\n          `($event) => { `,\n          ...modifierPrefixes.map((p) => [p, ' ']).flat(),\n          '(',\n          handler,\n          `)($event); }`,\n        ]);\n      }\n\n      // 如果有事件选项，将事件名和选项一起传递\n      if (eventOptions.length > 0) {\n        properties.push(\n          createObjectProperty(\n            createSimpleExpression(`\"on${capitalize(argContent)}\"`, true, prop.loc, true),\n            createObjectExpression([\n              createObjectProperty(\n                createSimpleExpression('handler', true, prop.loc, true),\n                eventHandler as JSChildNode,\n              ),\n              ...eventOptions,\n            ]),\n          ),\n        );\n      } else {\n        properties.push(\n          createObjectProperty(\n            createSimpleExpression(`\"on${capitalize(argContent)}\"`, true, prop.loc, true),\n            eventHandler as JSChildNode,\n          ),\n        );\n      }\n    } else {\n      properties.push(\n        createObjectProperty(\n          createSimpleExpression(`\"on${capitalize(argContent)}\"`, true, prop.loc, true),\n          handler,\n        ),\n      );\n    }\n  }\n}\n\n/**\n * 处理 v-model 指令（内联，已有独立 transform）\n */\nfunction handleVModel(\n  prop: DirectiveNode,\n  _node: ElementNode,\n  _context: TransformContext,\n  properties: JSProperty[],\n): void {\n  const expContent = getExpContent(prop.exp);\n\n  if (expContent !== undefined) {\n    properties.push(\n      createObjectProperty(\n        createSimpleExpression('\"modelValue\"', true, prop.loc, true),\n        createSimpleExpression(expContent, false, prop.loc, false),\n      ),\n    );\n    properties.push(\n      createObjectProperty(\n        createSimpleExpression('\"onUpdate:modelValue\"', true, prop.loc, true),\n        createSimpleExpression(`$event => (${expContent} = $event)`, false, prop.loc, false),\n      ),\n    );\n  }\n}\n\n/**\n * 处理 v-show 指令\n */\nfunction handleVShow(\n  prop: DirectiveNode,\n  _node: ElementNode,\n  _context: TransformContext,\n  properties: JSProperty[],\n): void {\n  const expContent = getExpContent(prop.exp);\n\n  if (expContent !== undefined) {\n    properties.push(\n      createObjectProperty(\n        createSimpleExpression('\"style\"', true, prop.loc, true),\n        createConditionalExpression(\n          createSimpleExpression(expContent, false, prop.loc, false),\n          createSimpleExpression('undefined', true, prop.loc, true),\n          createObjectExpression(\n            [\n              createObjectProperty(\n                createSimpleExpression('display', true, prop.loc, true),\n                createSimpleExpression(\"'none'\", true, prop.loc, true),\n              ),\n            ],\n            prop.loc,\n          ),\n          false,\n        ),\n      ),\n    );\n  }\n}\n\n/**\n * 处理 v-html 指令\n */\nfunction handleVHtml(\n  prop: DirectiveNode,\n  _node: ElementNode,\n  context: TransformContext,\n  properties: JSProperty[],\n): void {\n  const expContent = getExpContent(prop.exp);\n\n  if (expContent !== undefined) {\n    // T-002 XSS fix: 对 v-html 值进行运行时消毒，防止 XSS 攻击\n    context.helper('SANITIZE_HTML');\n    const sanitizedValue = createCallExpression(\n      'SANITIZE_HTML',\n      [createSimpleExpression(expContent, false, prop.loc, false)],\n      prop.loc,\n    );\n    // 在开发模式下额外发出安全警告\n    // FIX: P1-32 使用 __DEV__ 替代 process.env.NODE_ENV，\n    // 与框架其他部分的开发模式检测保持一致\n    const safeValue = createCompoundExpression([\n      `(${createConditionalExpression(\n        createSimpleExpression('__DEV__', false, prop.loc, false),\n        createCompoundExpression([\n          createCallExpression(\n            'console.warn',\n            [\n              createSimpleExpression(\n                '\"[LytJS] v-html directive can lead to XSS attack. Make sure the content is sanitized before rendering.\"',\n                true,\n                prop.loc,\n                true,\n              ),\n            ],\n            prop.loc,\n          ),\n          ', ',\n          sanitizedValue,\n        ]),\n        sanitizedValue,\n        false,\n        prop.loc,\n      )})`,\n    ]);\n    properties.push(\n      createObjectProperty(\n        createSimpleExpression('\"innerHTML\"', true, prop.loc, true),\n        safeValue as JSChildNode,\n      ),\n    );\n  }\n}\n\n/**\n * 处理 v-text 指令\n */\nfunction handleVText(\n  prop: DirectiveNode,\n  _node: ElementNode,\n  _context: TransformContext,\n  properties: JSProperty[],\n): void {\n  const expContent = getExpContent(prop.exp);\n\n  if (expContent !== undefined) {\n    properties.push(\n      createObjectProperty(\n        createSimpleExpression('\"textContent\"', true, prop.loc, true),\n        createSimpleExpression(expContent, false, prop.loc, false),\n      ),\n    );\n  }\n}\n","// src/transforms/v-if.ts\n// v-if / v-else-if / v-else 转换逻辑\n\nimport { NodeTypes } from '../constants';\nimport type {\n  RootNode,\n  TemplateChildNode,\n  ElementNode,\n  TransformContext,\n  ExpressionNode,\n  JSConditionalExpression,\n  VNodeCall,\n  JSChildNode,\n} from '../types';\nimport { createSimpleExpression, createConditionalExpression } from '../ast';\nimport { getExpContent, findDirective } from './helpers';\nimport { transformElement } from './transform-element';\n\n/**\n * 类型守卫：检查节点是否为 JSConditionalExpression。\n * FIX: P2-8 添加类型守卫函数，替代不安全的 as unknown as 类型断言链\n */\nfunction isJSConditionalExpression(node: unknown): node is JSConditionalExpression {\n  return (\n    typeof node === 'object' &&\n    node !== null &&\n    (node as JSConditionalExpression).type === NodeTypes.JS_CONDITIONAL_EXPRESSION\n  );\n}\n\nexport function transformIf(node: RootNode | TemplateChildNode, context: TransformContext): void {\n  if (node.type !== NodeTypes.ELEMENT) return;\n\n  const element = node as ElementNode;\n  const ifDir = findDirective(element, 'if');\n  if (!ifDir && !findDirective(element, 'else-if') && !findDirective(element, 'else')) return;\n\n  const parent = context.parent;\n  if (!parent) return;\n\n  const siblings = parent.children;\n  const currentIndex = siblings.indexOf(node as TemplateChildNode);\n\n  // 查找链中的第一个 v-if\n  // FIX: 只有 v-else-if 和 v-else 可以和前面的 v-if 组成链\n  // 独立的 v-if（没有 v-else-if/v-else）应该是一个新链的开始\n  let chainStart = currentIndex;\n  for (let i = currentIndex - 1; i >= 0; i--) {\n    const sibling = siblings[i];\n    if (sibling && sibling.type === NodeTypes.ELEMENT) {\n      const sibElement = sibling as ElementNode;\n      const hasIf = !!findDirective(sibElement, 'if');\n      const hasElseIf = !!findDirective(sibElement, 'else-if');\n      const hasElse = !!findDirective(sibElement, 'else');\n\n      // 只有 v-else-if 可以继续链（表示这是链的中间部分）\n      // v-else 表示链的结束\n      // 独立的 v-if 表示新链的开始，应该停止向前查找\n      if (hasElseIf) {\n        chainStart = i;\n      } else if (hasElse) {\n        // v-else 后面不应该有 v-if，这是错误用法，但停止查找\n        break;\n      } else if (hasIf) {\n        // 遇到独立的 v-if，这是新链的开始，停止查找\n        break;\n      } else {\n        // 没有条件指令，停止查找\n        break;\n      }\n    } else {\n      break;\n    }\n  }\n\n  // 构建条件链\n  let conditional: JSConditionalExpression | undefined;\n\n  const toRemove: number[] = [];\n\n  for (let i = chainStart; i < siblings.length; i++) {\n    const sibling = siblings[i];\n    if (!sibling || sibling.type !== NodeTypes.ELEMENT) break;\n\n    const sibElement = sibling as ElementNode;\n    const sibIf = findDirective(sibElement, 'if');\n    const sibElseIf = findDirective(sibElement, 'else-if');\n    const sibElse = findDirective(sibElement, 'else');\n\n    // FIX: 独立的 v-if（不在链首）表示新链的开始，停止收集\n    if (sibIf && i !== chainStart) {\n      break;\n    }\n\n    if (!sibIf && !sibElseIf && !sibElse) break;\n\n    // 从 props 中移除 v-if/v-else-if/v-else 指令\n    sibElement.props = sibElement.props.filter(\n      (p) =>\n        !(\n          p.type === NodeTypes.DIRECTIVE &&\n          (p.name === 'if' || p.name === 'else-if' || p.name === 'else')\n        ),\n    );\n\n    // 转换元素（不含 v-if）\n    const savedParent = context.parent;\n    context.parent = parent;\n    try {\n      transformElement(sibElement, context);\n    } finally {\n      context.parent = savedParent;\n    }\n\n    if (!sibElement.codegenNode) continue;\n    const branchNode = sibElement.codegenNode as VNodeCall;\n\n    if (sibIf || sibElseIf) {\n      const testExpr = sibIf?.exp ?? sibElseIf?.exp;\n      const testContent = testExpr ? getExpContent(testExpr as ExpressionNode) : undefined;\n      const test = testContent\n        ? createSimpleExpression(testContent, false, sibElement.loc, false)\n        : createSimpleExpression('true', true, sibElement.loc, true);\n\n      if (!conditional) {\n        conditional = createConditionalExpression(test, branchNode as JSChildNode, undefined, true);\n      } else {\n        conditional.alternate = createConditionalExpression(\n          test,\n          branchNode as JSChildNode,\n          undefined,\n          true,\n        );\n        conditional = conditional.alternate as JSConditionalExpression;\n      }\n    } else {\n      // v-else\n      if (!conditional) {\n        conditional = createConditionalExpression(\n          createSimpleExpression('true', true, sibElement.loc, true),\n          branchNode as JSChildNode,\n          undefined,\n          true,\n        );\n      } else {\n        conditional.alternate = branchNode as JSChildNode;\n      }\n    }\n\n    // 收集要移除的索引\n    toRemove.push(i);\n  }\n\n  // 按逆序移除收集的兄弟节点以保持索引有效\n  for (let i = toRemove.length - 1; i >= 0; i--) {\n    siblings.splice(toRemove[i]!, 1);\n  }\n\n  if (conditional) {\n    // FIX: P2-8 使用类型守卫验证后再插入，替代不安全的 as unknown as 断言\n    // JSConditionalExpression 具有 type 属性，在 AST 转换阶段可作为 TemplateChildNode\n    // 插入到父节点的 children 数组中\n    if (isJSConditionalExpression(conditional)) {\n      siblings.splice(chainStart, 0, conditional as TemplateChildNode);\n    }\n  }\n}\n","// src/transforms/v-for.ts\n// v-for 转换逻辑\n\nimport { NodeTypes } from '../constants';\nimport type {\n  RootNode,\n  TemplateChildNode,\n  ElementNode,\n  TransformContext,\n  VNodeCall,\n  JSCallExpression,\n} from '../types';\nimport { createSimpleExpression, createCallExpression, createCompoundExpression } from '../ast';\nimport { getExpContent, findDirective } from './helpers';\nimport { transformElement } from './transform-element';\nimport { warn } from '@lytjs/common-error';\n\n// FIX: P1-29 移除模块级计数器，改为上下文级计数器，\n// 避免多个编译上下文共享同一计数器导致变量名冲突\n// let destructureCounter = 0; // 已移除\n\n// FIX: DTS build error - RE_SIMPLE_VFOR 移到模块级\nconst RE_SIMPLE_VFOR = /^(\\S+)\\s+(?:in|of)\\s+(.+)$/;\n\n/**\n * 类型守卫：检查 codegenNode 是否为 VNodeCall。\n */\nfunction isVNodeCall(node: unknown): node is VNodeCall {\n  return (\n    typeof node === 'object' && node !== null && (node as VNodeCall).type === NodeTypes.VNODE_CALL\n  );\n}\n\n/**\n * 类型守卫：检查 codegenNode 是否为 JSCallExpression。\n */\nfunction isJSCallExpression(node: unknown): node is JSCallExpression {\n  return (\n    typeof node === 'object' &&\n    node !== null &&\n    (node as JSCallExpression).type === NodeTypes.JS_CALL_EXPRESSION\n  );\n}\n\n/**\n * 类型守卫：检查节点是否可以用作 TemplateChildNode。\n * FIX: P2-10 添加类型守卫函数，替代 as unknown as TemplateChildNode 双重断言。\n * 在 AST 转换阶段，VNodeCall 和 JSCallExpression 会被 replaceNode\n * 插入到父节点的 children 数组中，因此它们在运行时是有效的 TemplateChildNode。\n */\nfunction isTemplateChildCompatible(node: unknown): node is TemplateChildNode {\n  return (\n    typeof node === 'object' &&\n    node !== null &&\n    typeof (node as { type?: number }).type === 'number'\n  );\n}\n\nexport function transformFor(node: RootNode | TemplateChildNode, context: TransformContext): void {\n  if (node.type !== NodeTypes.ELEMENT) return;\n\n  const element = node as ElementNode;\n  const forDir = findDirective(element, 'for');\n  if (!forDir || !forDir.exp) return;\n\n  // 从 props 中移除 v-for 指令\n  element.props = element.props.filter(\n    (p) => !(p.type === NodeTypes.DIRECTIVE && p.name === 'for'),\n  );\n\n  // 解析 v-for 表达式\n  const expContent = getExpContent(forDir.exp);\n  if (!expContent) return;\n\n  // 支持：\n  // - item in list\n  // - (item, index) in list\n  // - { key, value } in entries\n  // - { key: k, value: v } in entries (with renaming)\n  // - { key, value }, index in entries\n  // - { key = 'default' } in entries (with default values)\n  // - [ a, b ] in array\n  // - [ a, b ], index in array\n  // - [ a = 1 ] in array (with default values)\n  // FIX: P2-25 解构赋值语法支持已完善，支持嵌套解构和剩余元素\n  // FIX: P2-47 改进正则：使用平衡括号匹配替代 [^)]+，\n  // 支持嵌套括号语法如 (item, (sub) => sub.key) in items\n  const inMatch = matchVForExpression(expContent);\n  if (!inMatch) return;\n\n  // inMatch[1]: parenthesized syntax (item, index)\n  // inMatch[2]: object destructuring { key, value } [, index]\n  // inMatch[3]: array destructuring [ a, b ] [, index]\n  // inMatch[4]: simple variable name\n  // inMatch[5]: right-hand side iteration expression\n  const left = (inMatch[1] ?? inMatch[2] ?? inMatch[3] ?? inMatch[4])!.trim();\n  const right = inMatch[5]!.trim();\n\n  // 检查解构模式\n  // FIX: P1-29 使用 TransformContext 中的计数器替代模块级计数器\n  const destructureResult = parseDestructure(left, context);\n\n  let itemVar: string;\n  let indexVar: string | undefined;\n  let destructureExpr: string | undefined;\n\n  if (destructureResult) {\n    // 解构模式：{ key, value } 或 [ index, value ]\n    itemVar = destructureResult.tempVar;\n    indexVar = destructureResult.indexVar;\n    destructureExpr = destructureResult.pattern;\n  } else if (inMatch[1]) {\n    // 括号语法：(item, index) 或 (item)\n    const parts = left.split(',').map((p) => p.trim());\n    if (parts.length > 2) {\n      if (__DEV__) {\n        warn(`v-for does not support more than 2 variables in (item, index) syntax.`);\n      }\n    }\n    itemVar = parts[0] ?? 'item';\n    indexVar = parts[1];\n  } else if (left.startsWith('[') && left.endsWith(']')) {\n    const inner = left.slice(1, -1).trim();\n    const parts = inner.split(',').map((p) => p.trim());\n    if (parts.length > 2) {\n      if (__DEV__) {\n        warn(`v-for does not support more than 2 variables in [item, index] syntax.`);\n      }\n    }\n    itemVar = parts[0] ?? 'item';\n    indexVar = parts[1];\n  } else {\n    itemVar = left;\n  }\n\n  // 转换元素\n  transformElement(element, context);\n\n  const codegenNode = element.codegenNode;\n  if (!codegenNode) return;\n\n  // 使用类型守卫而非双重类型断言\n  // FIX: P2-9 添加运行时类型检查，避免不安全的类型断言回退\n  const renderItem = isVNodeCall(codegenNode)\n    ? codegenNode\n    : isJSCallExpression(codegenNode)\n      ? codegenNode\n      : (() => {\n          if (__DEV__) {\n            warn(\n              `[lytjs/compiler] v-for: unexpected codegenNode type: ${(codegenNode as { type?: number }).type}. Expected VNodeCall or JSCallExpression.`,\n            );\n          }\n          return codegenNode as VNodeCall;\n        })();\n\n  context.helper('RENDER_LIST');\n\n  // 构建箭头函数体\n  let arrowBody: TemplateChildNode[];\n  // FIX: P2-10 使用类型守卫函数安全转换，替代 as unknown as 双重断言\n  // renderItem 在此上下文中已被验证为 VNodeCall 或 JSCallExpression，\n  // 两者都可作为 TemplateChildNode 使用（通过 replaceNode 插入父节点 children）\n  const renderItemAsChild = isTemplateChildCompatible(renderItem)\n    ? renderItem\n    : (renderItem as TemplateChildNode);\n  if (destructureExpr) {\n    // 对于解构，在渲染项之前添加解构语句\n    arrowBody = [\n      createSimpleExpression(`const ${destructureExpr} = ${itemVar}`, false, forDir.exp.loc, false),\n      renderItemAsChild,\n    ];\n  } else {\n    arrowBody = [renderItemAsChild];\n  }\n\n  const renderListCall = createCallExpression('RENDER_LIST', [\n    createSimpleExpression(right, false, forDir.exp.loc, false),\n    createCompoundExpression(\n      [`(${itemVar}${indexVar ? `, ${indexVar}` : ''}) => { `, ...arrowBody, ` }`],\n      forDir.exp.loc,\n    ),\n  ]);\n\n  // FIX: P2-10 renderListCall 是 JSCallExpression，需要转换为 TemplateChildNode\n  // 此处断言是安全的，因为 v-for 转换结果会被 replaceNode 替换到父节点的 children 中\n  // 使用类型守卫验证后再断言\n  if (!isTemplateChildCompatible(renderListCall)) {\n    if (__DEV__) {\n      warn(`[lytjs/compiler] v-for: renderListCall is not a compatible TemplateChildNode.`);\n    }\n  }\n  context.replaceNode(renderListCall as TemplateChildNode);\n}\n\n/**\n * 从 v-for 左侧解析解构模式。\n *\n * 支持：\n * - `{ key, value }` -> object destructuring\n * - `{ key, value }, index` -> object destructuring with index\n * - `{ key: k, value: v }` -> object destructuring with renaming\n * - `{ key = 'default' }` -> object destructuring with default values\n * - `{ key: k = 'default' }` -> object destructuring with renaming and default\n * - `[ index, value ]` -> array destructuring\n * - `[ index, value ], index` -> array destructuring with outer index\n * - `[ a = 1, b = 2 ]` -> array destructuring with default values\n *\n * 如果模式不是解构表达式则返回 null。\n */\nfunction parseDestructure(\n  left: string,\n  context: TransformContext,\n): { pattern: string; tempVar: string; indexVar?: string } | null {\n  // FIX: P2-27 使用 TransformContext 接口中定义的 __counters 字段替代不安全的类型断言\n  // FIX: P2-23 正则表达式缓存 - 模块级预编译正则\n  const RE_OBJ_DESTRUCTURE = /^(\\{[^}]+\\})(?:\\s*,\\s*(\\w+))?$/;\n  const RE_ARR_DESTRUCTURE = /^(\\[[^\\]]+\\])(?:\\s*,\\s*(\\w+))?$/;\n\n  // FIX: P1-29 使用 TransformContext 中的计数器替代模块级计数器，确保每个编译上下文独立\n  const counterKey = 'destructure';\n  const counter = context.__counters?.[counterKey] ?? 0;\n  if (!context.__counters) {\n    context.__counters = {};\n  }\n  context.__counters[counterKey] = counter + 1;\n\n  // 匹配：{ ... } [, index]\n  // FIX: P2-23 使用预编译正则，避免每次调用都编译\n  const objMatch = RE_OBJ_DESTRUCTURE.exec(left);\n  if (objMatch) {\n    return {\n      pattern: objMatch[1]!.trim(),\n      tempVar: `__destructureItem_${counter}`,\n      indexVar: objMatch[2]?.trim(),\n    };\n  }\n\n  // 匹配：[ ... ] [, index]\n  // FIX: P2-23 使用预编译正则，避免每次调用都编译\n  const arrMatch = RE_ARR_DESTRUCTURE.exec(left);\n  if (arrMatch) {\n    return {\n      pattern: arrMatch[1]!.trim(),\n      tempVar: `__destructureItem_${counter}`,\n      indexVar: arrMatch[2]?.trim(),\n    };\n  }\n\n  return null;\n}\n\n/**\n * FIX: P2-47 使用平衡括号匹配解析 v-for 表达式，\n * 支持嵌套括号语法如 (item, (sub) => sub.key) in items\n *\n * 返回与原正则匹配相同的分组结构：\n * [1] parenthesized syntax, [2] object destructuring,\n * [3] array destructuring, [4] simple variable, [5] right-hand side\n */\nfunction matchVForExpression(exp: string): RegExpMatchArray | null {\n  const trimmed = exp.trim();\n\n  // 尝试匹配括号语法：(item) in list 或 (item, index) in list\n  if (trimmed.startsWith('(')) {\n    const parenEnd = findBalancedParen(trimmed, 0);\n    if (parenEnd !== -1) {\n      const left = trimmed.slice(1, parenEnd).trim();\n      const rest = trimmed.slice(parenEnd + 1).trim();\n      const inOfMatch = rest.match(/^(?:in|of)\\s+(.+)$/);\n      if (inOfMatch) {\n        return [\n          trimmed,\n          left,\n          undefined,\n          undefined,\n          undefined,\n          inOfMatch[1],\n        ] as unknown as RegExpMatchArray;\n      }\n    }\n  }\n\n  // 尝试匹配花括号语法：{ key, value } in list\n  if (trimmed.startsWith('{')) {\n    const braceEnd = findBalancedBrace(trimmed, 0);\n    if (braceEnd !== -1) {\n      const left = trimmed.slice(0, braceEnd + 1).trim();\n      const rest = trimmed.slice(braceEnd + 1).trim();\n      const inOfMatch = rest.match(/^(?:,\\s*(\\w+))?\\s+(?:in|of)\\s+(.+)$/);\n      if (inOfMatch) {\n        return [\n          trimmed,\n          undefined,\n          left,\n          undefined,\n          inOfMatch[1] ?? undefined,\n          inOfMatch[2],\n        ] as unknown as RegExpMatchArray;\n      }\n    }\n  }\n\n  // 尝试匹配方括号语法：[ a, b ] in list\n  if (trimmed.startsWith('[')) {\n    const bracketEnd = findBalancedBracket(trimmed, 0);\n    if (bracketEnd !== -1) {\n      const left = trimmed.slice(0, bracketEnd + 1).trim();\n      const rest = trimmed.slice(bracketEnd + 1).trim();\n      const inOfMatch = rest.match(/^(?:,\\s*(\\w+))?\\s+(?:in|of)\\s+(.+)$/);\n      if (inOfMatch) {\n        return [\n          trimmed,\n          undefined,\n          undefined,\n          left,\n          inOfMatch[1] ?? undefined,\n          inOfMatch[2],\n        ] as unknown as RegExpMatchArray;\n      }\n    }\n  }\n\n  // 回退到简单变量名匹配：item in list\n  // FIX: P2-23 使用预编译正则，避免每次调用都编译\n  const simpleMatch = RE_SIMPLE_VFOR.exec(trimmed);\n  if (simpleMatch) {\n    return [\n      trimmed,\n      undefined,\n      undefined,\n      undefined,\n      simpleMatch[1],\n      simpleMatch[2],\n    ] as unknown as RegExpMatchArray;\n  }\n\n  return null;\n}\n\n/** 找到从 startIndex 开始的平衡右括号位置 */\nfunction findBalancedParen(str: string, startIndex: number): number {\n  let depth = 0;\n  for (let i = startIndex; i < str.length; i++) {\n    if (str[i] === '(') depth++;\n    else if (str[i] === ')') {\n      depth--;\n      if (depth === 0) return i;\n    }\n  }\n  return -1;\n}\n\n/** 找到从 startIndex 开始的平衡右花括号位置 */\nfunction findBalancedBrace(str: string, startIndex: number): number {\n  let depth = 0;\n  for (let i = startIndex; i < str.length; i++) {\n    if (str[i] === '{') depth++;\n    else if (str[i] === '}') {\n      depth--;\n      if (depth === 0) return i;\n    }\n  }\n  return -1;\n}\n\n/** 找到从 startIndex 开始的平衡右方括号位置 */\nfunction findBalancedBracket(str: string, startIndex: number): number {\n  let depth = 0;\n  for (let i = startIndex; i < str.length; i++) {\n    if (str[i] === '[') depth++;\n    else if (str[i] === ']') {\n      depth--;\n      if (depth === 0) return i;\n    }\n  }\n  return -1;\n}\n","// src/transforms/v-model.ts\n// v-model 指令转换逻辑\n\nimport type { DirectiveTransform } from '../types';\nimport { getExpContent } from './helpers';\n\n/**\n * 验证 v-model 表达式是否为合法的简单属性访问表达式\n * 只允许标识符和属性访问（如 foo、foo.bar、foo[0]、items[0]）\n */\nfunction isValidModelExpression(exp: string): boolean {\n  if (exp === '') return false;\n  return /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\[\\s*(?:['\"][\\w$]+['\"]|\\d+)\\s*\\])*$/.test(exp);\n}\n\nexport const transformModel: DirectiveTransform = (dir, _node, context) => {\n  const { exp } = dir;\n  const props: Array<{ key: string; value: string }> = [];\n\n  const expContent = getExpContent(exp);\n\n  if (expContent != null) {\n    if (!isValidModelExpression(expContent)) {\n      context.error(`v-model expression \"${expContent}\" is not a valid simple expression`);\n      return { props: [] };\n    }\n    props.push({\n      key: 'modelValue',\n      value: expContent,\n    });\n    props.push({\n      key: 'onUpdate:modelValue',\n      value: `$event => (${expContent} = $event)`,\n    });\n  }\n\n  return { props };\n};\n","// src/transforms/v-on.ts\n// v-on 指令转换逻辑\n\nimport type { DirectiveTransform, ExpressionNode, JSChildNode, Property } from '../types';\nimport { getExpContent } from './helpers';\nimport { capitalize } from '@lytjs/common-string';\nimport {\n  createSimpleExpression,\n  createCallExpression,\n  createArrayExpression,\n  createObjectProperty,\n} from '../ast';\n\nexport const transformOn: DirectiveTransform = (dir, _node, _context) => {\n  const { arg, exp, modifiers } = dir;\n  const props: Property[] = [];\n\n  const argContent = arg ? getExpContent(arg as ExpressionNode) : undefined;\n  const expContent = getExpContent(exp);\n\n  if (argContent && expContent) {\n    const eventName = argContent;\n\n    let handler: JSChildNode = createSimpleExpression(expContent, false, dir.loc, false);\n\n    if (modifiers.length > 0) {\n      // 生成运行时事件处理器包装: withModifiers(handler, [\"stop\", \"prevent\", ...])\n      handler = createCallExpression(\n        'withModifiers',\n        [\n          handler,\n          createArrayExpression(\n            modifiers.map((m) => createSimpleExpression(`\"${m}\"`, true, dir.loc, true)),\n            dir.loc,\n          ),\n        ],\n        dir.loc,\n      );\n    }\n\n    props.push(\n      createObjectProperty(\n        createSimpleExpression(`\"on${capitalize(eventName)}\"`, true, dir.loc, true),\n        handler,\n      ),\n    );\n  }\n\n  return { props };\n};\n","// src/transforms/v-bind.ts\n// v-bind 指令转换逻辑\n\nimport type { DirectiveTransform, ExpressionNode, Property } from '../types';\nimport { getExpContent } from './helpers';\n\nexport const transformBind: DirectiveTransform = (dir, _node, _context) => {\n  const { arg, exp } = dir;\n  // Returns a plain object array instead of JSProperty nodes because this\n  // directive transform produces string-based key-value pairs that are later\n  // consumed by codegen as literal strings, not as AST property nodes.\n  const props: Property[] = [];\n\n  const argContent = arg ? getExpContent(arg as ExpressionNode) : undefined;\n  const expContent = getExpContent(exp);\n\n  if (argContent && expContent) {\n    props.push({\n      key: argContent,\n      value: expContent,\n    });\n  }\n\n  return { props };\n};\n","// src/transforms/v-show.ts\n// v-show 指令转换逻辑\n\nimport type { DirectiveTransform } from '../types';\nimport { getExpContent } from './helpers';\n\nexport const transformShow: DirectiveTransform = (dir, _node, _context) => {\n  const { exp } = dir;\n  const props: Array<{ key: string; value: string }> = [];\n\n  const expContent = getExpContent(exp);\n\n  if (!expContent) {\n    return { props: [] };\n  }\n\n  props.push({\n    key: 'style',\n    value: expContent + \" ? undefined : { display: 'none' }\",\n  });\n\n  return { props };\n};\n","// src/transforms/v-once.ts\n// v-once 转换逻辑\n\nimport { NodeTypes } from '../constants';\nimport type {\n  RootNode,\n  TemplateChildNode,\n  ElementNode,\n  TransformContext,\n  VNodeCall,\n} from '../types';\nimport { findDirective } from './helpers';\nimport { transformElement } from './transform-element';\nimport { createSimpleExpression } from '../ast';\n\nexport function transformOnce(node: RootNode | TemplateChildNode, context: TransformContext): void {\n  if (node.type !== NodeTypes.ELEMENT) return;\n\n  const element = node as ElementNode;\n  const onceDir = findDirective(element, 'once');\n  if (!onceDir) return;\n\n  // Remove v-once directive from props\n  element.props = element.props.filter(\n    (p) => !(p.type === NodeTypes.DIRECTIVE && p.name === 'once'),\n  );\n\n  // Transform the element normally\n  transformElement(element, context);\n\n  // Mark as hoistable\n  if (element.codegenNode) {\n    context.addHoist(element.codegenNode);\n    // FIX: P2-11 createSimpleExpression 返回 SimpleExpressionNode，而 codegenNode\n    // 可能是 VNodeCall 等类型。此处使用双重类型断言是安全的，因为 hoisted 引用\n    // 会在后续 codegen 阶段被解析为实际的 hoisted 值。\n    // 使用 as unknown as VNodeCall 是有意为之：codegenNode 的联合类型中不包含 SimpleExpressionNode，\n    // 但 hoisted 节点在 codegen 阶段会被特殊处理，此处需要覆盖原始类型。\n    element.codegenNode = createSimpleExpression(\n      `_hoisted_${context.hoists.length}`,\n      false,\n      element.loc,\n      true,\n    ) as unknown as VNodeCall; // as unknown as VNodeCall: hoisted 节点在 codegen 阶段被替换为 _hoisted_N 引用\n  }\n}\n","// src/transforms/scoped.ts\n// CSS Scoped transform - adds scopeId attribute to elements and handles v-deep / :slotted()\n\nimport { NodeTypes } from '../constants';\nimport type { NodeTransform, TransformContext, ElementNode, DirectiveNode } from '../types';\nimport { createAttribute, createText } from '../ast';\n\n/**\n * 包含 scopeId 的扩展 TransformContext。\n * scopeId 由编译器在处理 scoped 组件时设置。\n */\ninterface ScopedTransformContext extends TransformContext {\n  scopeId?: string;\n}\n\n/**\n * 从转换上下文获取 scopeId。\n * scopeId 可能直接存储在上下文上或在 context.identifiers 中\n * as a special marker.\n * FIX: P2-12 使用可选链替代 ScopedTransformContext 类型断言\n */\nfunction resolveScopeId(context: TransformContext): string | undefined {\n  return (context as ScopedTransformContext).scopeId;\n}\n\n/**\n * 为所有元素节点添加 scopeId 属性的转换。\n *\n * This is the core of CSS Scoped styles:\n * - Each element in a scoped component gets a `data-v-xxxx` attribute\n * - The compiler also transforms the CSS selectors to include `[data-v-xxxx]`\n * - This ensures styles only apply to elements within the same component\n *\n * Additionally handles:\n * - `v-deep` directive: converts to `[data-v-xxxx]` selector prefix for deep selectors\n * - `:slotted()` pseudo-class: marks slotted content selectors\n */\nexport const transformScoped: NodeTransform = (node, context) => {\n  if (node.type !== NodeTypes.ELEMENT) return;\n\n  const element = node as ElementNode;\n  const scopeId = resolveScopeId(context);\n\n  if (!scopeId) return;\n\n  // Add scopeId as an attribute to the element\n  // e.g., data-v-abc123=\"\"\n  const scopeAttr = createAttribute(scopeId, createText(''));\n  element.props.push(scopeAttr);\n\n  // Mark the scopeId on the element node itself (for codegen reference)\n  element.scopeId = scopeId;\n\n  // Process v-deep directives on child elements\n  processVDeep(element, scopeId, context);\n};\n\n/**\n * Process v-deep directives within an element's children.\n *\n * v-deep is used to target nested elements that are not part of the\n * current component's template (e.g., child component roots).\n *\n * The v-deep directive is converted to a marker attribute that\n * the CSS scoping system uses to generate `[data-v-xxxx] _selector_` rules.\n */\nfunction processVDeep(element: ElementNode, scopeId: string, _context: TransformContext): void {\n  for (let i = 0; i < element.children.length; i++) {\n    const child = element.children[i];\n    if (!child) continue;\n    if (child.type === NodeTypes.ELEMENT) {\n      const childElement = child as ElementNode;\n\n      // Check for v-deep directive\n      const vDeepDir = childElement.props.find(\n        (p): p is DirectiveNode => p.type === NodeTypes.DIRECTIVE && p.name === 'deep',\n      );\n\n      if (vDeepDir) {\n        // Remove the v-deep directive from props\n        const dirIndex = childElement.props.indexOf(vDeepDir);\n        if (dirIndex !== -1) {\n          childElement.props.splice(dirIndex, 1);\n        }\n\n        // Add the v-deep marker attribute\n        // The CSS scoping system will use this to generate deep selectors\n        const deepAttr = createAttribute(`${scopeId}-deep`, createText(''));\n        childElement.props.push(deepAttr);\n      }\n\n      // Recurse into child elements to handle deeply nested v-deep\n      processVDeep(childElement, scopeId, _context);\n    }\n  }\n}\n\n/**\n * Check if an element has a v-deep directive.\n */\nexport function hasVDeep(element: ElementNode): boolean {\n  return element.props.some(\n    (p): p is DirectiveNode => p.type === NodeTypes.DIRECTIVE && p.name === 'deep',\n  );\n}\n\n/**\n * 从转换上下文获取 scopeId。\n */\nexport function getScopeId(context: TransformContext): string | undefined {\n  return resolveScopeId(context);\n}\n","// src/transforms/v-memo.ts\n// v-memo 指令转换逻辑\n//\n// v-memo 用于记忆化子树的渲染结果，只有当依赖值变化时才重新渲染。\n// 用法：<div v-memo=\"[count, name]\">{{ count }} - {{ name }}</div>\n//\n// 实现策略：\n// 1. 在 transform 阶段检测 v-memo 指令\n// 2. 提取依赖数组表达式，存储为节点的 memoDeps 元信息\n// 3. 移除 v-memo 指令，正常执行 transformElement\n// 4. 在 codegen 阶段（通过 patchFlag 标记）告知运行时使用缓存比较\n\nimport { NodeTypes } from '../constants';\nimport type {\n  RootNode,\n  TemplateChildNode,\n  ElementNode,\n  TransformContext,\n  ExpressionNode,\n} from '../types';\nimport { findDirective, getExpContent } from './helpers';\nimport { transformElement } from './transform-element';\n\n/**\n * v-memo 依赖信息，附加到 ElementNode 的 props 中作为隐藏元数据。\n * 通过在 props 中注入一个特殊的标记属性，让 codegen 阶段可以识别\n * 并生成对应的缓存比较逻辑。\n */\nexport interface VMemoMeta {\n  /** 依赖数组表达式字符串，例如 \"[count, name]\" */\n  deps: string;\n  /** 缓存变量名，例如 \"_memo_0\" */\n  cacheKey: string;\n}\n\n/**\n * 将 v-memo 依赖信息存储到 ElementNode 上。\n * 使用 Symbol 作为 key 避免与正常属性冲突。\n */\nexport const MEMO_KEY = Symbol('__v_memo__');\n\n/**\n * 从 ElementNode 上获取 v-memo 依赖信息。\n */\nexport function getMemoMeta(node: ElementNode): VMemoMeta | undefined {\n  return (node as unknown as Record<symbol, VMemoMeta | undefined>)[MEMO_KEY];\n}\n\n/**\n * 为 ElementNode 设置 v-memo 依赖信息。\n */\nfunction setMemoMeta(node: ElementNode, meta: VMemoMeta): void {\n  (node as unknown as Record<symbol, VMemoMeta>)[MEMO_KEY] = meta;\n}\n\n// FIX: P2-28 移除模块级 memoCounter，改用 TransformContext.__counters\n// 避免多个编译上下文共享同一计数器导致变量名冲突\n// 原模块级计数器已迁移到 context.__counters.memo\n\n/**\n * 获取 memo 计数器的当前值（用于测试）\n * FIX: P2-28 现在从 context 中读取计数器值\n */\nexport function getMemoCounter(context: TransformContext): number {\n  return context.__counters?.memo ?? 0;\n}\n\n/**\n * 重置 memo 计数器（用于测试）\n * FIX: P2-28 现在通过修改 context.__counters 来重置计数器\n */\nexport function resetMemoCounter(context: TransformContext): void {\n  if (!context.__counters) {\n    context.__counters = {};\n  }\n  context.__counters.memo = 0;\n}\n\n/**\n * v-memo 转换函数（NodeTransform）\n *\n * 处理流程：\n * 1. 检测元素上的 v-memo 指令\n * 2. 提取依赖数组表达式\n * 3. 将依赖信息存储为节点元数据\n * 4. 移除 v-memo 指令\n * 5. 正常执行 transformElement\n */\nexport function transformVMemo(\n  node: RootNode | TemplateChildNode,\n  context: TransformContext,\n): void {\n  if (node.type !== NodeTypes.ELEMENT) return;\n\n  const element = node as ElementNode;\n  const memoDir = findDirective(element, 'memo');\n  if (!memoDir) return;\n\n  // 提取依赖数组表达式\n  const depsExpr = memoDir.exp;\n  const depsContent = getExpContent(depsExpr as ExpressionNode | null | undefined);\n\n  if (!depsContent) {\n    context.error('v-memo requires an array expression as its value', element);\n    return;\n  }\n\n  // FIX: P2-28 使用 TransformContext.__counters 生成唯一的缓存变量名\n  const memoCounter = context.__counters?.memo ?? 0;\n  if (!context.__counters) {\n    context.__counters = {};\n  }\n  context.__counters.memo = memoCounter + 1;\n  const cacheKey = `_memo_${memoCounter}`;\n\n  // 存储依赖信息到节点元数据\n  setMemoMeta(element, {\n    deps: depsContent,\n    cacheKey,\n  });\n\n  // 从 props 中移除 v-memo 指令\n  element.props = element.props.filter(\n    (p) => !(p.type === NodeTypes.DIRECTIVE && p.name === 'memo'),\n  );\n\n  // 注册 helper\n  context.helper('WITH_MEMO');\n\n  // 正常转换元素\n  transformElement(element, context);\n}\n","// src/transform.ts\n// AST 转换流水线 - 主入口\n// 包含 transform、markConstants、hoistStatic、collectDynamicChildren\n// optimize 阶段的逻辑已合并到此模块中\n\nimport { NodeTypes } from './constants';\nimport type {\n  RootNode,\n  ElementNode,\n  TextNode,\n  InterpolationNode,\n  CommentNode,\n  TemplateChildNode,\n  TransformContext,\n  TransformOptions,\n  NodeTransform,\n  DirectiveTransform,\n  ParentNode,\n  JSChildNode,\n  BaseNode,\n  CompilerOptions,\n  VNodeCall,\n  ExpressionNode,\n} from './types';\nimport { createSimpleExpression, createCallExpression, createArrayExpression } from './ast';\nimport {\n  transformElement,\n  transformIf,\n  transformFor,\n  transformOnce,\n  transformSlot,\n  transformBind,\n  transformOn,\n  transformModel,\n  transformShow,\n  transformScoped,\n  transformVMemo,\n  isJS,\n} from './transforms';\n\n// ============================================================\n// 主转换函数\n// ============================================================\n\nexport function transform(root: RootNode, options: TransformOptions = {}): void {\n  const context = createTransformContext(root, options);\n  traverseNode(root, context, options);\n\n  // 将上下文数据复制到根节点\n  root.helpers = Array.from(context.helpers.keys());\n  root.components = Array.from(context.components);\n  root.directives = Array.from(context.directives);\n  root.hoists = context.hoists;\n  root.temps = context.temps;\n  root.cached = context.cached;\n\n  // 创建根代码生成节点\n  if (root.children.length === 1) {\n    const child = root.children[0];\n    if (child) {\n      if (child.type === NodeTypes.ELEMENT && (child as ElementNode).codegenNode) {\n        root.codegenNode = (child as ElementNode).codegenNode as JSChildNode;\n      } else if (child.type === NodeTypes.TEXT) {\n        // FIX: P2-22 添加安全处理分支，将 TextNode 转换为表达式节点\n        // TextNode 不是 JSChildNode，需要包装为 SimpleExpressionNode\n        root.codegenNode = createSimpleExpression(\n          JSON.stringify((child as TextNode).content),\n          true,\n          child.loc,\n          true,\n        );\n      } else if (child.type === NodeTypes.INTERPOLATION) {\n        root.codegenNode = createCallExpression(context.helper('TO_DISPLAY_STRING'), [\n          (child as InterpolationNode).content,\n        ]);\n      } else if (isJS(child)) {\n        root.codegenNode = child as JSChildNode;\n      }\n    }\n  } else if (root.children.length > 1) {\n    const elements = root.children.filter(\n      (c) =>\n        c.type === NodeTypes.ELEMENT ||\n        c.type === NodeTypes.TEXT ||\n        c.type === NodeTypes.INTERPOLATION,\n    );\n    if (elements.length > 0) {\n      root.codegenNode = createCallExpression(context.helper('CREATE_VNODE'), [\n        createSimpleExpression('Fragment', true),\n        createSimpleExpression('null', true),\n        createArrayExpression(elements as unknown as JSChildNode[]),\n      ]);\n    }\n  }\n\n  // 以下原为 optimize 阶段的逻辑，现已合并到 transform 阶段\n  // patchFlag 由 transform-element.ts 在 transform 过程中统一设置\n  markConstants(root);\n  hoistStatic(root);\n  collectDynamicChildren(root);\n}\n\n// ============================================================\n// 向后兼容的 optimize 函数\n// ============================================================\n\n/**\n * 向后兼容的 optimize 函数。\n * 原 optimize 阶段的逻辑（markConstants、hoistStatic、collectDynamicChildren）\n * 已合并到 transform() 中，此函数保留仅为向后兼容。\n * 调用此函数是安全的（幂等操作），但推荐直接使用 transform()。\n */\nexport function optimize(root: RootNode, _options: CompilerOptions = {}): void {\n  markConstants(root);\n  hoistStatic(root);\n  collectDynamicChildren(root);\n}\n\n// ============================================================\n// 创建转换上下文\n// ============================================================\n\nfunction createTransformContext(root: RootNode, options: TransformOptions): TransformContext {\n  const helpers = new Map<string, number>();\n  const components = new Set<string>();\n  const directives = new Set<string>();\n  let currentNode: RootNode | TemplateChildNode | null = root;\n\n  // 使用工厂函数避免自引用的 null 初始化。\n  // 上下文对象通过延迟初始化器创建，接收自身\n  // 消除对 `null as unknown as TransformContext` 的需求。\n  // FIX: Phase 1 Vapor bug - 使用 contextRef 代替 context.self = context\n  let contextRef: TransformContext | null = null;\n\n  const context: TransformContext = {\n    // FIX: P2-20 使用 getter 延迟访问，避免初始化时的循环引用问题\n    // FIX: P2-43 添加防御性检查，避免 contextRef 未赋值时返回 undefined\n    get self(): TransformContext {\n      if (contextRef === null) {\n        throw new Error(\n          '[LytJS] TransformContext.self accessed before initialization' +\n            '\\n  Suggestion: This is an internal framework error. Please report this issue.',\n        );\n      }\n      return contextRef;\n    },\n    parent: null,\n    rootNode: root,\n    helpers,\n    components,\n    directives,\n    hoists: [],\n    temps: 0,\n    cached: 0,\n    identifiers: new Set(),\n    scopes: [{ vFor: 0, vOnce: 0 }],\n    childIndex: 0,\n    currentNode,\n    helper<T extends string>(name: T): T {\n      const count = helpers.get(name) ?? 0;\n      helpers.set(name, count + 1);\n      return name;\n    },\n    helperString(name: string): string {\n      return name;\n    },\n    replaceNode(node: TemplateChildNode): void {\n      if (!context.parent) return;\n      const parent = context.parent;\n      if (parent.type === NodeTypes.ROOT || parent.type === NodeTypes.ELEMENT) {\n        const idx = parent.children.indexOf(context.currentNode as TemplateChildNode);\n        if (idx !== -1) parent.children[idx] = node;\n      }\n      currentNode = node;\n    },\n    removeNode(node: TemplateChildNode | null): void {\n      const target = node ?? context.currentNode;\n      if (!target || !context.parent) return;\n      const parent = context.parent;\n      if (parent.type === NodeTypes.ROOT || parent.type === NodeTypes.ELEMENT) {\n        const idx = parent.children.indexOf(target as TemplateChildNode);\n        if (idx !== -1) parent.children.splice(idx, 1);\n      }\n    },\n    onNodeRemoved(): void {},\n    addIdentifiers(exp: ExpressionNode | string): void {\n      if (typeof exp === 'string') context.identifiers.add(exp);\n      else if (exp.type === NodeTypes.SIMPLE_EXPRESSION && !exp.isStatic)\n        context.identifiers.add(exp.content);\n    },\n    removeIdentifiers(exp: ExpressionNode | string): void {\n      if (typeof exp === 'string') context.identifiers.delete(exp);\n      else if (exp.type === NodeTypes.SIMPLE_EXPRESSION && !exp.isStatic)\n        context.identifiers.delete(exp.content);\n    },\n    addHoist(node: JSChildNode): void {\n      context.hoists.push(node);\n    },\n    addTemp(): number {\n      return context.temps++;\n    },\n    addCache(_index: number): void {\n      context.cached++;\n    },\n    error(msg: string, node?: BaseNode): void {\n      const location = node?.loc?.start\n        ? ` (at line ${node.loc.start.line}, column ${node.loc.start.column})`\n        : '';\n      const fullMsg = `[LytJS] ${msg}${location}`;\n\n      // 优先调用 options.onError 回调，否则直接抛出错误\n      if (options.onError) {\n        options.onError(new Error(fullMsg));\n      } else {\n        throw new Error(fullMsg);\n      }\n    },\n  };\n  // FIX: P2-20 完成 context 创建后赋值给 contextRef\n  contextRef = context;\n  return context;\n}\n\n// ============================================================\n// 遍历节点\n// ============================================================\n\nfunction traverseNode(\n  node: RootNode | TemplateChildNode,\n  context: TransformContext,\n  options: TransformOptions,\n): void {\n  context.currentNode = node;\n\n  const nodeTransforms = options.nodeTransforms;\n  if (nodeTransforms) {\n    const exitFns: Array<(() => void) | undefined> = [];\n    for (let i = 0; i < nodeTransforms.length; i++) {\n      const transform = nodeTransforms[i];\n      if (!transform) continue;\n      const onExit = transform(\n        node as RootNode | ElementNode | TextNode | InterpolationNode | CommentNode,\n        context,\n      );\n      if (onExit) {\n        if (Array.isArray(onExit)) exitFns.push(...onExit);\n        else exitFns.push(onExit);\n      }\n      if (!context.currentNode) return;\n    }\n    for (let i = exitFns.length - 1; i >= 0; i--) {\n      exitFns[i]?.();\n      if (!context.currentNode) return;\n    }\n  }\n\n  switch (node.type) {\n    case NodeTypes.ROOT:\n    case NodeTypes.ELEMENT: {\n      const children = (node as RootNode | ElementNode).children;\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (child) {\n          context.parent = node as ParentNode;\n          context.childIndex = i;\n          traverseNode(child, context, options);\n        }\n      }\n      break;\n    }\n  }\n}\n\n// ============================================================\n// 默认转换\n// ============================================================\n\n// FIX: P2-21 调整类型定义，避免双重类型断言\n// 使用类型兼容的函数签名，无需强制转换\ntype TransformFn = (\n  node: Parameters<NodeTransform>[0],\n  context: TransformContext,\n) => ReturnType<NodeTransform>;\n\nexport const builtInTransforms: NodeTransform[] = [\n  transformIf as TransformFn,\n  transformFor as TransformFn,\n  transformOnce as TransformFn,\n  transformScoped as TransformFn,\n  transformVMemo as TransformFn,\n  transformElement as TransformFn,\n];\n\nexport const builtInDirectiveTransforms: Record<string, DirectiveTransform> = {\n  bind: transformBind,\n  on: transformOn,\n  model: transformModel,\n  show: transformShow,\n};\n\n// 为向后兼容重新导出各个转换\nexport { transformElement, transformIf, transformFor, transformOnce, transformSlot };\nexport { transformScoped };\nexport { transformVMemo };\nexport { transformBind, transformOn, transformModel, transformShow };\n\n// ============================================================\n// Mark Constants (原 optimize.ts)\n// ============================================================\n\nfunction markConstants(root: RootNode): void {\n  walk(root.children, (node) => {\n    if (node.type === NodeTypes.ELEMENT) {\n      const element = node as ElementNode;\n\n      // 元素是常量的条件：\n      // 1. It has no directives\n      // 2. All its attributes are static\n      // 3. All its children are constant (including descendants)\n      const hasDirectives = element.props.some((p) => p.type === NodeTypes.DIRECTIVE);\n      const hasInterpolation = hasDescendantInterpolation(element);\n\n      if (!hasDirectives && !hasInterpolation) {\n        element.isStatic = true;\n      }\n    } else if (node.type === NodeTypes.TEXT) {\n      (node as TextNode).isStatic = true;\n    }\n  });\n}\n\n// ============================================================\n// Hoist Static (原 optimize.ts)\n// ============================================================\n\nfunction hoistStatic(root: RootNode): void {\n  const hoists: JSChildNode[] = [];\n  const existingHoistsLen = root.hoists.length;\n\n  walk(root.children, (node) => {\n    if (node.type === NodeTypes.ELEMENT) {\n      const element = node as ElementNode;\n\n      if (element.isStatic && element.codegenNode) {\n        // 提升静态元素\n        hoists.push(element.codegenNode);\n        // 全局索引 = 已有提升 + 当前新提升数量 - 1\n        element.codegenNode = createHoistedReference(existingHoistsLen + hoists.length - 1);\n      }\n    }\n  });\n\n  root.hoists = [...root.hoists, ...hoists];\n}\n\nfunction createHoistedReference(index: number): VNodeCall {\n  return {\n    type: NodeTypes.VNODE_CALL,\n    tag: `_hoisted_${index + 1}`,\n    props: undefined,\n    children: undefined,\n    patchFlag: undefined,\n    dynamicProps: undefined,\n    directives: undefined,\n    isBlock: false,\n    disableTracking: false,\n    isComponent: false,\n    loc: {\n      start: { line: 1, column: 1, offset: 0 },\n      end: { line: 1, column: 1, offset: 0 },\n      source: '',\n    },\n  };\n}\n\n// ============================================================\n// Collect Dynamic Children - Block Tree (原 optimize.ts)\n// ============================================================\n\nfunction collectDynamicChildren(root: RootNode): void {\n  // 查找根元素并收集其动态 children\n  for (const child of root.children) {\n    if (child.type === NodeTypes.ELEMENT) {\n      const element = child as ElementNode;\n      if (!element.isStatic) {\n        element.dynamicChildren = [];\n\n        collectDynamicChildrenFromElement(element);\n      }\n    }\n  }\n}\n\n/**\n * 递归收集动态子节点，构建 Block Tree。\n *\n * 对于每个非静态的子元素节点，将其 codegenNode 加入父元素的 dynamicChildren，\n * 并递归地为该子元素自身建立 dynamicChildren（如果它也有动态后代）。\n * 这确保了嵌套结构（如嵌套 v-for、深层动态子树）中的每一层 Block\n * 都能正确追踪其直接动态子节点，避免深层更新时退化为完整 diff。\n */\nfunction collectDynamicChildrenFromElement(element: ElementNode): void {\n  // 先过滤掉已移除的节点（null/undefined），再进行操作\n  const validChildren = element.children.filter(\n    (child): child is TemplateChildNode => child != null,\n  );\n  for (const child of validChildren) {\n    if (child.type === NodeTypes.ELEMENT) {\n      const childElement = child as ElementNode;\n\n      if (!childElement.isStatic) {\n        if (childElement.codegenNode) {\n          if (element.dynamicChildren) {\n            element.dynamicChildren.push(childElement.codegenNode);\n          }\n        }\n        // 递归收集：为子元素自身也建立 dynamicChildren，\n        // 确保嵌套动态节点（如嵌套 v-for）的 Block Tree 完整。\n        // 使用合并而非覆盖，保留已有的 dynamicChildren\n        const existing = childElement.dynamicChildren;\n        childElement.dynamicChildren = existing ? [...existing] : [];\n        collectDynamicChildrenFromElement(childElement);\n      }\n    }\n  }\n}\n\n// ============================================================\n// Walk helper (原 optimize.ts)\n// ============================================================\n\nfunction walk(nodes: TemplateChildNode[], fn: (node: TemplateChildNode) => void): void {\n  for (const node of nodes) {\n    fn(node);\n\n    if (node.type === NodeTypes.ELEMENT) {\n      walk((node as ElementNode).children, fn);\n    }\n  }\n}\n\nfunction hasDescendantInterpolation(element: ElementNode): boolean {\n  for (const child of element.children) {\n    if (child.type === NodeTypes.INTERPOLATION) {\n      return true;\n    }\n    if (child.type === NodeTypes.ELEMENT) {\n      if (hasDescendantInterpolation(child as ElementNode)) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n","// src/source-map.ts\n// 轻量级 Source Map 生成器\n//\n// 实现最小化的 Source Map v3 生成器，支持 VLQ 编码，\n// compatible with the Source Map specification.\n// https://sourcemaps.info/spec.html\n\nimport type { RawSourceMap } from './types';\n\n// ============================================================\n// VLQ Encoding\n// ============================================================\n\n/** Base64 VLQ 字符集（A-Z, a-z, 0-9, +, /） */\nconst VLQ_BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n/** 继续位掩码 */\nconst VLQ_BASE_SHIFT = 5;\nconst VLQ_CONTINUATION_BIT = 1 << VLQ_BASE_SHIFT;\n\n/** 符号位位置 */\nconst VLQ_VALUE_MASK = (1 << VLQ_BASE_SHIFT) - 1;\n\n/**\n * 使用 VLQ（可变长度数量）编码对单个整数值进行编码。\n * 处理有符号值：负值使用最低有效位作为符号位。\n */\nfunction vlqEncode(value: number): string {\n  let vlq = value < 0 ? (-value << 1) + 1 : value << 1;\n  let encoded = '';\n\n  do {\n    let digit = vlq & VLQ_VALUE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += VLQ_BASE64_CHARS[digit]!;\n  } while (vlq > 0);\n\n  return encoded;\n}\n\n// ============================================================\n// 源码映射\n// ============================================================\n\nexport interface SourceMapping {\n  /** 原始源文件路径 */\n  source?: string;\n  /** 原始源文件行号（从 0 开始） */\n  originalLine: number;\n  /** Original source column (0-based) - 高精度列号映射 */\n  originalColumn: number;\n  /** 生成代码行号（从 0 开始） */\n  generatedLine: number;\n  /** 生成代码列号（从 0 开始） - 高精度列号映射 */\n  generatedColumn: number;\n  /** 映射 token 的可选名称 */\n  name?: string;\n  /** FIX: P2-1 原始列号精确映射，支持更细粒度的源码定位 */\n  originalColumnExact?: number;\n  /** FIX: P2-1 生成列号精确映射 */\n  generatedColumnExact?: number;\n}\n\n// ============================================================\n// SourceMapGenerator\n// ============================================================\n\nexport class SourceMapGenerator {\n  private file: string;\n  private _sourceRoot = '';\n  private sources: string[] = [];\n  private sourcesContent: string[] = [];\n  private names: string[] = [];\n  private mappings: SourceMapping[] = [];\n  private _namesMap = new Map<string, number>();\n  private _sourcesMap = new Map<string, number>();\n\n  constructor(file = '', sourceRoot = '') {\n    this.file = file;\n    this._sourceRoot = sourceRoot;\n  }\n\n  /**\n   * 添加从原始源码位置到生成代码位置的映射。\n   * FIX: P2-1 提高列精度，支持精确的原始列号映射\n   *\n   * @param originalLine - Original source line (0-based)\n   * @param originalColumn - Original source column (0-based)\n   * @param generatedLine - Generated code line (0-based)\n   * @param generatedColumn - Generated code column (0-based)\n   * @param name - Optional name for the mapped token\n   * @param originalColumnExact - Optional exact original column for high-precision mapping\n   */\n  addMapping(\n    originalLine: number,\n    originalColumn: number,\n    generatedLine: number,\n    generatedColumn: number,\n    name?: string,\n    originalColumnExact?: number,\n  ): void {\n    // 解析源索引（如果尚未添加则使用第一个源）\n    if (this.sources.length === 0) {\n      this.addSource(this.file || 'source');\n    }\n\n    // 解析名称索引\n    let nameIndex: number | undefined;\n    if (name !== undefined) {\n      nameIndex = this._namesMap.get(name);\n      if (nameIndex === undefined) {\n        nameIndex = this.names.length;\n        this.names.push(name);\n        this._namesMap.set(name, nameIndex);\n      }\n    }\n\n    // FIX: P2-1 使用精确的列号映射，如果提供了精确列号则使用，否则使用标准列号\n    const finalOriginalColumn =\n      originalColumnExact !== undefined ? originalColumnExact : originalColumn;\n    const finalGeneratedColumn = generatedColumn;\n\n    this.mappings.push({\n      originalLine,\n      originalColumn: finalOriginalColumn,\n      generatedLine,\n      generatedColumn: finalGeneratedColumn,\n      name: nameIndex !== undefined ? this.names[nameIndex] : undefined,\n      // FIX: P2-1 存储精确列号信息用于高精度映射\n      originalColumnExact: originalColumnExact,\n      generatedColumnExact: finalGeneratedColumn,\n    });\n  }\n\n  /**\n   * FIX: P2-27 多文件 source map 合并支持：\n   * addSource 现在支持同一 source 多次调用（合并 content）\n   *\n   * 添加源文件。\n   */\n  addSource(source: string, content?: string): number {\n    const existingIndex = this._sourcesMap.get(source);\n    if (existingIndex !== undefined) {\n      if (content !== undefined && !this.sourcesContent[existingIndex]) {\n        this.sourcesContent[existingIndex] = content;\n      }\n      return existingIndex;\n    }\n\n    const index = this.sources.length;\n    this.sources.push(source);\n    this.sourcesContent.push(content ?? '');\n    this._sourcesMap.set(source, index);\n    return index;\n  }\n\n  /**\n   * 使用 VLQ 编码生成编码后的映射字符串。\n   *\n   * 格式：每个段用 ',' 分隔；每个行组用 ';' 分隔。\n   * 每个段包含：[生成列, 源索引, 原始行, 原始列, 名称索引]\n   * 所有值都是相对的（增量编码），除了每行的第一个段\n   * which has an absolute generated column.\n   */\n  private encodeMappings(): string {\n    if (this.mappings.length === 0) return '';\n\n    // 按生成位置排序映射\n    const sorted = [...this.mappings].sort((a, b) => {\n      if (a.generatedLine !== b.generatedLine) return a.generatedLine - b.generatedLine;\n      return a.generatedColumn - b.generatedColumn;\n    });\n\n    const lines: string[] = [];\n    let prevGenLine = 0;\n    let prevGenCol = 0;\n    let prevSource = 0;\n    let prevOrigLine = 0;\n    let prevOrigCol = 0;\n    let prevName = 0;\n\n    let currentLineSegments: string[] = [];\n\n    for (const mapping of sorted) {\n      // 用分号填充空行\n      while (prevGenLine < mapping.generatedLine) {\n        lines.push(currentLineSegments.join(','));\n        currentLineSegments = [];\n        prevGenLine++;\n        prevGenCol = 0; // Reset generated column for new lines\n      }\n\n      // FIX: P0-5 根据 mapping.source 查找正确的 sourceIndex\n      let sourceIdx = 0;\n      if (mapping.source !== undefined) {\n        const idx = this._sourcesMap.get(mapping.source);\n        if (idx === undefined) {\n          throw new Error(`Unknown source: ${mapping.source}`);\n        }\n        sourceIdx = idx;\n      }\n\n      // 编码段字段（全部增量编码）\n      const genCol = mapping.generatedColumn - prevGenCol;\n      const source = sourceIdx - prevSource;\n      const origLine = mapping.originalLine - prevOrigLine;\n      const origCol = mapping.originalColumn - prevOrigCol;\n\n      let segment =\n        vlqEncode(genCol) + vlqEncode(source) + vlqEncode(origLine) + vlqEncode(origCol);\n\n      // 名称索引（可选）\n      if (mapping.name !== undefined) {\n        const nameIdx = this._namesMap.get(mapping.name);\n        if (nameIdx === undefined) {\n          throw new Error(`Unknown name: ${mapping.name}`);\n        }\n        segment += vlqEncode(nameIdx - prevName);\n        prevName = nameIdx;\n      }\n\n      currentLineSegments.push(segment);\n\n      // 更新前一个值\n      prevGenCol = mapping.generatedColumn;\n      prevSource = sourceIdx;\n      prevOrigLine = mapping.originalLine;\n      prevOrigCol = mapping.originalColumn;\n    }\n\n    // 推入最后一行\n    lines.push(currentLineSegments.join(','));\n\n    return lines.join(';');\n  }\n\n  /**\n   * 转换为 RawSourceMap 对象。\n   */\n  toJSON(): RawSourceMap {\n    return {\n      version: 3,\n      file: this.file,\n      sourceRoot: this._sourceRoot || undefined,\n      sources: [...this.sources],\n      sourcesContent: [...this.sourcesContent],\n      names: [...this.names],\n      mappings: this.encodeMappings(),\n    };\n  }\n\n  /**\n   * Convert to base64-encoded data URI string.\n   * Format: data:application/json;charset=utf-8;base64,<encoded>\n   * FIX: P1-31 使用 TextEncoder+btoa 替代 Buffer，\n   * 确保在浏览器环境和 Node.js 环境中都能正常工作\n   * FIX: P2-19 使用 TextEncoder + 手动 base64 替代废弃的 unescape\n   */\n  toBase64(): string {\n    const json = JSON.stringify(this.toJSON());\n    // FIX: P1-31 优先使用 TextEncoder + btoa（浏览器兼容），\n    // 回退到 Buffer（Node.js 环境）\n    let base64: string;\n    if (typeof TextEncoder !== 'undefined' && typeof btoa !== 'undefined') {\n      const encoder = new TextEncoder();\n      const uint8Array = encoder.encode(json);\n      let binary = '';\n      for (let i = 0; i < uint8Array.length; i++) {\n        binary += String.fromCharCode(uint8Array[i]!);\n      }\n      base64 = btoa(binary);\n    } else if (typeof Buffer !== 'undefined') {\n      base64 = Buffer.from(json, 'utf-8').toString('base64');\n    } else {\n      // FIX: P2-19 使用 TextEncoder + 手动 base64 编码替代废弃的 unescape\n      base64 = this._manualBase64Encode(json);\n    }\n    return `data:application/json;charset=utf-8;base64,${base64}`;\n  }\n\n  /**\n   * FIX: P2-19 手动实现 base64 编码，避免使用废弃的 unescape\n   * 使用 TextEncoder 将字符串转换为 UTF-8 字节，然后进行 base64 编码\n   */\n  private _manualBase64Encode(str: string): string {\n    const encoder = new TextEncoder();\n    const bytes = encoder.encode(str);\n    const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    let result = '';\n    let i = 0;\n\n    while (i < bytes.length) {\n      // 每次处理 3 个字节（24 位）\n      const byte1 = bytes[i++] ?? 0;\n      const byte2 = bytes[i++] ?? 0;\n      const byte3 = bytes[i++] ?? 0;\n\n      // 将 24 位分成 4 个 6 位组\n      const bitmap = (byte1 << 16) | (byte2 << 8) | byte3;\n\n      result += base64Chars[(bitmap >> 18) & 63];\n      result += base64Chars[(bitmap >> 12) & 63];\n      // FIX: P1-9 填充计算：i 已被 i++ 自增，应使用 < 而非 <=\n      result += i - 2 < bytes.length ? base64Chars[(bitmap >> 6) & 63] : '=';\n      result += i - 1 < bytes.length ? base64Chars[bitmap & 63] : '=';\n    }\n\n    return result;\n  }\n\n  /**\n   * Convert to inline source map comment format.\n   * Format: //# sourceMappingURL=data:application/json;charset=utf-8;base64,<encoded>\n   */\n  toComment(): string {\n    return `//# sourceMappingURL=${this.toBase64()}`;\n  }\n}\n\n// ============================================================\n// Source Map Builder (convenience API for compiler integration)\n// ============================================================\n\nexport interface SourceMapBuildOptions {\n  filename?: string;\n  sourceContent?: string;\n  sourceRoot?: string;\n}\n\n/**\n * Create a SourceMapGenerator pre-configured for compiler use.\n */\nexport function createSourceMapGenerator(options: SourceMapBuildOptions = {}): SourceMapGenerator {\n  const gen = new SourceMapGenerator(options.filename ?? 'template.html', options.sourceRoot);\n  if (options.sourceContent !== undefined) {\n    gen.addSource(options.filename ?? 'template.html', options.sourceContent);\n  }\n  return gen;\n}\n","// src/codegen.ts\n// 代码生成器 - 从 AST 生成 render 函数代码\n\nimport { NodeTypes } from './constants';\nimport { describePatchFlag } from '@lytjs/common-vnode';\nimport type {\n  RootNode,\n  JSChildNode,\n  VNodeCall,\n  JSCallExpression,\n  JSObjectExpression,\n  JSProperty,\n  JSArrayExpression,\n  JSConditionalExpression,\n  TextNode,\n  InterpolationNode,\n  SimpleExpressionNode,\n  CompoundExpressionNode,\n  TemplateChildNode,\n  ElementNode,\n  CodegenResult,\n  CodegenContext,\n  CodegenOptions,\n  BaseNode,\n} from './types';\nimport { helperNameMap } from './constants';\nimport { SourceMapGenerator } from './source-map';\n\n// ============================================================\n// 主生成函数\n// ============================================================\n\n// FIX: P1-3 COMPILER-NEW-04 - 死代码检测：检查是否为空语句序列\nfunction isDeadCode(node: JSChildNode | TemplateChildNode | undefined): boolean {\n  if (!node) return true;\n  // 空数组表示空语句序列\n  if (Array.isArray(node) && node.length === 0) return true;\n  // 空文本节点\n  if (typeof node === 'object' && 'type' in node && node.type === NodeTypes.TEXT) {\n    const textNode = node as TextNode;\n    if (!textNode.content || textNode.content.trim() === '') return true;\n  }\n  // 空复合表达式\n  if (typeof node === 'object' && 'type' in node && node.type === NodeTypes.COMPOUND_EXPRESSION) {\n    const compoundNode = node as CompoundExpressionNode;\n    if (!compoundNode.children || compoundNode.children.length === 0) return true;\n  }\n  return false;\n}\n\nexport function generate(ast: RootNode, options: CodegenOptions = {}): CodegenResult {\n  const { context, codeParts, sourceMapGen } = createCodegenContext(ast, options);\n\n  // 生成辅助函数导入（前导代码）\n  const preamble = genHelperImports(ast.helpers, options.runtimeModuleName);\n\n  // 生成提升的变量声明\n  if (ast.hoists && ast.hoists.length > 0) {\n    for (let i = 0; i < ast.hoists.length; i++) {\n      const hoistedNode = ast.hoists[i];\n      // FIX: P1-3 COMPILER-NEW-04 - 跳过死代码（空语句序列）\n      if (isDeadCode(hoistedNode as JSChildNode)) {\n        continue;\n      }\n      context.push(`const _hoisted_${i + 1} = `);\n      genNode(hoistedNode as JSChildNode, context);\n      context.push(`\\n`);\n    }\n    context.push(`\\n`);\n  }\n\n  // 生成 render 函数\n  // FIX: P2-23 生成代码可读性优化：添加函数注释\n  context.push(`// Render function\\n`);\n  context.push(`function render(_ctx, _cache) {\\n`);\n  context.indent();\n\n  // FIX: P1-3 COMPILER-NEW-04 - 检查 codegenNode 是否为空/死代码\n  if (ast.codegenNode && !isDeadCode(ast.codegenNode)) {\n    context.push(`return `);\n    genNode(ast.codegenNode, context);\n    context.push(`\\n`);\n  }\n\n  context.deindent();\n  context.push(`}`);\n\n  const code = codeParts.join('');\n\n  return {\n    code,\n    preamble,\n    ast,\n    map: sourceMapGen ? sourceMapGen.toJSON() : undefined,\n  };\n}\n\n// ============================================================\n// 代码生成上下文\n// ============================================================\n\nfunction createCodegenContext(\n  ast: RootNode,\n  options: CodegenOptions,\n): {\n  context: CodegenContext;\n  codeParts: string[];\n  sourceMapGen: SourceMapGenerator | null;\n} {\n  const helpers = new Map<string, string>();\n  // FIX: P1-26 移除冗余的局部 indentLevel 变量，消除双重跟踪问题。\n  // 之前 context.indentLevel 和局部 indentLevel 同时存在，可能导致不同步。\n  // 现在只使用 context.indentLevel 作为唯一的缩进级别来源。\n  const codeParts: string[] = [];\n\n  // Source map 支持\n  const sourceMapGen: SourceMapGenerator | null = options.sourceMap\n    ? new SourceMapGenerator(options.filename ?? 'template.html')\n    : null;\n\n  if (sourceMapGen) {\n    sourceMapGen.addSource(options.filename ?? 'template.html', ast.loc.source);\n  }\n\n  // 跟踪当前生成位置用于 source mapping\n  let currentLine = 0;\n  let currentColumn = 0;\n\n  const context: CodegenContext = {\n    source: ast.loc.source,\n    line: 1,\n    column: 1,\n    offset: 0,\n    indentLevel: 0,\n    pure: false,\n\n    helper(key: string): string {\n      const mapped = helperNameMap[key] ?? key;\n      helpers.set(key, mapped);\n      return mapped;\n    },\n\n    push(c: string, node?: BaseNode): void {\n      codeParts.push(c);\n\n      // 更新生成位置跟踪\n      for (let i = 0; i < c.length; i++) {\n        if (c[i] === '\\n') {\n          currentLine++;\n          currentColumn = 0;\n        } else {\n          currentColumn++;\n        }\n      }\n\n      // 如果启用了 source map 且节点有位置信息，则添加 source mapping\n      if (sourceMapGen && node?.loc?.start) {\n        sourceMapGen.addMapping(\n          node.loc.start.line - 1, // Convert to 0-based\n          node.loc.start.column - 1,\n          currentLine,\n          currentColumn - c.length, // Map to the start of this push\n        );\n      }\n    },\n\n    indent(): void {\n      context.indentLevel++;\n    },\n\n    deindent(withoutNewline?: boolean): void {\n      if (context.indentLevel > 0) {\n        context.indentLevel--;\n      }\n      if (!withoutNewline) {\n        codeParts.push(`\\n${'  '.repeat(context.indentLevel)}`);\n        currentLine++;\n        currentColumn = context.indentLevel * 2;\n      }\n    },\n\n    newline(): void {\n      // FIX: P0-1 修复 newline() 引用未定义变量 indentLevel，改为使用 context.indentLevel\n      codeParts.push(`\\n${'  '.repeat(context.indentLevel)}`);\n      currentLine++;\n      currentColumn = context.indentLevel * 2;\n    },\n  };\n\n  return { context, codeParts, sourceMapGen };\n}\n\n// ============================================================\n// 生成辅助函数导入\n// ============================================================\n\nfunction genHelperImports(helpers: string[], runtimeModuleName?: string): string {\n  if (helpers.length === 0) return '';\n\n  const imports = helpers.map((h) => helperNameMap[h] ?? h);\n  const uniqueImports = [...new Set(imports)];\n\n  // FIX: P1-13 使模块名可配置，通过编译选项 runtimeModuleName 传入，默认值改为 '@lytjs/core'\n  const moduleName = runtimeModuleName ?? '@lytjs/core';\n  return `import { ${uniqueImports.join(', ')} } from '${moduleName}';\\n`;\n}\n\n// ============================================================\n// 生成节点\n// ============================================================\n\nfunction genNode(node: JSChildNode | TemplateChildNode, context: CodegenContext): void {\n  switch (node.type) {\n    case NodeTypes.VNODE_CALL:\n      genVNodeCall(node as VNodeCall, context);\n      break;\n    case NodeTypes.JS_CALL_EXPRESSION:\n      genCallExpression(node as JSCallExpression, context);\n      break;\n    case NodeTypes.JS_OBJECT_EXPRESSION:\n      genObjectExpression(node as JSObjectExpression, context);\n      break;\n    case NodeTypes.JS_PROPERTY:\n      genProperty(node as JSProperty, context);\n      break;\n    case NodeTypes.JS_ARRAY_EXPRESSION:\n      genArrayExpression(node as JSArrayExpression, context);\n      break;\n    case NodeTypes.JS_CONDITIONAL_EXPRESSION:\n      genConditional(node as JSConditionalExpression, context);\n      break;\n    case NodeTypes.TEXT:\n      genText(node as TextNode, context);\n      break;\n    case NodeTypes.INTERPOLATION:\n      genInterpolation(node as InterpolationNode, context);\n      break;\n    case NodeTypes.SIMPLE_EXPRESSION:\n      genExpression(node as SimpleExpressionNode, context);\n      break;\n    case NodeTypes.COMPOUND_EXPRESSION:\n      genCompoundExpression(node as CompoundExpressionNode, context);\n      break;\n    case NodeTypes.ELEMENT:\n      genElement(node as ElementNode, context);\n      break;\n    default: {\n      // 回退：对未知节点类型进行穷举检查。\n      // 如果上面处理了所有 NodeTypes，此分支不应被执行。\n      const nodeType = (node as { type?: string | number }).type;\n      throw new Error(`[LytJS compiler] Codegen: unknown node type \"${nodeType ?? 'unknown'}\"`);\n    }\n  }\n}\n\n// ============================================================\n// 生成 VNodeCall\n// ============================================================\n\nfunction genVNodeCall(node: VNodeCall, context: CodegenContext): void {\n  const { tag, props, children, patchFlag, isBlock } = node;\n\n  if (isBlock) {\n    // Block 节点：生成 openBlock() 前缀\n    context.push(`${context.helper('OPEN_BLOCK')}()`, node);\n    context.push('\\n');\n    context.indent();\n\n    context.push(`${context.helper('CREATE_BLOCK')}(`, node);\n  } else {\n    // 普通节点：生成 createVNode 调用\n    context.push(`${context.helper('CREATE_VNODE')}(`, node);\n  }\n\n  // 标签\n  genNodeExpr(tag, context);\n  context.push(', ', node);\n\n  // Props\n  if (props) {\n    genNode(props, context);\n  } else {\n    context.push('null', node);\n  }\n\n  // Children\n  if (children !== undefined) {\n    context.push(', ', node);\n    if (typeof children === 'string') {\n      context.push(JSON.stringify(children), node);\n    } else if (Array.isArray(children)) {\n      genChildrenArray(children, context);\n    } else {\n      genNode(children, context);\n    }\n  }\n\n  // Patch flag\n  if (patchFlag !== undefined) {\n    context.push(', ', node);\n    const flagStr = typeof patchFlag === 'string' ? patchFlag : String(patchFlag);\n    context.push(flagStr, node);\n    const flagNum = parseInt(flagStr, 10);\n    if (!isNaN(flagNum)) {\n      context.push(` /* ${describePatchFlag(flagNum)} */`, node);\n    }\n  }\n\n  context.push(')', node);\n\n  if (isBlock) {\n    context.push('\\n');\n    context.deindent();\n  }\n}\n\n// ============================================================\n// 生成 CallExpression\n// ============================================================\n\nfunction genCallExpression(node: JSCallExpression, context: CodegenContext): void {\n  const callee =\n    typeof node.callee === 'string' ? context.helper(node.callee) : String(node.callee);\n\n  context.push(`${callee}(`, node);\n\n  for (let i = 0; i < node.arguments.length; i++) {\n    const arg = node.arguments[i];\n    if (arg === undefined) continue;\n    if (i > 0) {\n      context.push(', ', node);\n    }\n    if (typeof arg === 'string') {\n      context.push(arg, node);\n    } else if (Array.isArray(arg)) {\n      genChildrenArray(arg, context);\n    } else {\n      genNode(arg, context);\n    }\n  }\n\n  context.push(')', node);\n}\n\n// ============================================================\n// 生成 ObjectExpression\n// ============================================================\n\nfunction genObjectExpression(node: JSObjectExpression, context: CodegenContext): void {\n  const { properties } = node;\n\n  if (properties.length === 0) {\n    context.push('{}', node);\n    return;\n  }\n\n  context.push('{ ', node);\n\n  for (let i = 0; i < properties.length; i++) {\n    const prop = properties[i];\n    if (prop === undefined) continue;\n    if (i > 0) {\n      context.push(', ', node);\n    }\n    genNode(prop, context);\n  }\n\n  context.push(' }', node);\n}\n\n// ============================================================\n// 生成 Property\n// ============================================================\n\nfunction genProperty(node: JSProperty, context: CodegenContext): void {\n  const { key, value } = node;\n\n  if (key.type === NodeTypes.SIMPLE_EXPRESSION) {\n    context.push(key.content, node);\n  } else {\n    genNode(key, context);\n  }\n\n  context.push(': ', node);\n  genNode(value, context);\n}\n\n// ============================================================\n// 生成 ArrayExpression\n// ============================================================\n\nfunction genArrayExpression(node: JSArrayExpression, context: CodegenContext): void {\n  context.push('[', node);\n\n  for (let i = 0; i < node.elements.length; i++) {\n    const el = node.elements[i];\n    if (el === undefined) continue;\n    if (i > 0) {\n      context.push(', ', node);\n    }\n    genNode(el, context);\n  }\n\n  context.push(']', node);\n}\n\n// ============================================================\n// 生成 ConditionalExpression\n// ============================================================\n\nfunction genConditional(node: JSConditionalExpression, context: CodegenContext): void {\n  const { test, consequent, alternate } = node;\n\n  context.push('(', node);\n\n  if (typeof test === 'string') {\n    context.push(test, node);\n  } else {\n    genNode(test, context);\n  }\n\n  context.push(' ? ', node);\n\n  if (typeof consequent === 'string') {\n    context.push(consequent, node);\n  } else if (Array.isArray(consequent)) {\n    genChildrenArray(consequent, context);\n  } else {\n    genNode(consequent, context);\n  }\n\n  context.push(' : ', node);\n\n  if (typeof alternate === 'string') {\n    context.push(alternate, node);\n  } else if (Array.isArray(alternate)) {\n    genChildrenArray(alternate, context);\n  } else if (alternate) {\n    genNode(alternate, context);\n  }\n\n  context.push(')', node);\n}\n\n// ============================================================\n// 生成 Text\n// ============================================================\n\nfunction genText(node: TextNode, context: CodegenContext): void {\n  context.push(JSON.stringify(node.content), node);\n}\n\n// ============================================================\n// 生成 Interpolation\n// ============================================================\n\nfunction genInterpolation(node: InterpolationNode, context: CodegenContext): void {\n  context.push(`${context.helper('TO_DISPLAY_STRING')}(`, node);\n  genNode(node.content, context);\n  context.push(')', node);\n}\n\n// ============================================================\n// 生成 Expression\n// ============================================================\n\nfunction genExpression(node: SimpleExpressionNode, context: CodegenContext): void {\n  context.push(node.content, node);\n}\n\n// ============================================================\n// 生成 CompoundExpression\n// ============================================================\n\nfunction genCompoundExpression(node: CompoundExpressionNode, context: CodegenContext): void {\n  for (const child of node.children) {\n    if (typeof child === 'string') {\n      context.push(child, node);\n    } else if (child.type === NodeTypes.SIMPLE_EXPRESSION) {\n      context.push(child.content, node);\n    } else if (child.type === NodeTypes.INTERPOLATION) {\n      context.push(`${context.helper('TO_DISPLAY_STRING')}(`, node);\n      genNode(child.content, context);\n      context.push(')', node);\n    } else {\n      genNode(child, context);\n    }\n  }\n}\n\n// ============================================================\n// 生成 Element\n// ============================================================\n\nfunction genElement(node: ElementNode, context: CodegenContext): void {\n  if (node.codegenNode) {\n    genNode(node.codegenNode, context);\n  } else {\n    const callee = context.helper('CREATE_VNODE');\n    context.push(`${callee}(${JSON.stringify(node.tag)}`, node);\n\n    if (node.props.length > 0) {\n      context.push(', { ', node);\n      for (let i = 0; i < node.props.length; i++) {\n        const prop = node.props[i];\n        if (prop === undefined) continue;\n        if (i > 0) context.push(', ', node);\n        if (prop.type === NodeTypes.ATTRIBUTE) {\n          context.push(`${JSON.stringify(prop.name)}: `, node);\n          if (prop.value) {\n            context.push(JSON.stringify(prop.value.content), node);\n          } else {\n            context.push('true', node);\n          }\n        }\n      }\n      context.push(' }', node);\n    }\n\n    if (node.children.length > 0) {\n      context.push(', ', node);\n      genChildrenArray(node.children, context);\n    }\n\n    context.push(')', node);\n  }\n}\n\n// ============================================================\n// Generate children array\n// ============================================================\n\nfunction genChildrenArray(children: TemplateChildNode[], context: CodegenContext): void {\n  context.push('[', undefined);\n\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    if (child === undefined) continue;\n    if (i > 0) {\n      context.push(', ', undefined);\n    }\n    genNode(child, context);\n  }\n\n  context.push(']', undefined);\n}\n\n// ============================================================\n// Generate node expression (string or node)\n// ============================================================\n\nfunction genNodeExpr(expr: string | JSChildNode, context: CodegenContext): void {\n  if (typeof expr === 'string') {\n    context.push(expr, undefined);\n  } else {\n    genNode(expr, context);\n  }\n}\n\n// ============================================================\n// Helpers\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","// src/codegen-signal-optimized.ts\n// Signal 模式代码生成器 - 优化版本\n// 目标：生成代码体积减少 30%+\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// 优化策略\n// ============================================================\n\n/**\n * 优化策略：\n * 1. 短导入别名 - 使用单字符别名减少导入体积\n * 2. 模板复用 - 相同模板只生成一次\n * 3. 内联简单表达式 - 避免 effect 包装简单值\n * 4. 批量操作 - 合并多个 setAttribute 调用\n * 5. 静态提升 - 静态内容提升到模块级别\n */\n\n// ============================================================\n// 短名称映射\n// ============================================================\n\n// 运行时函数短名称映射\nconst RUNTIME_SHORT_NAMES = {\n  effect: 'e',\n  createTemplate: 't',\n  setText: 'x',\n  setHTML: 'h',\n  setAttribute: 'a',\n  setProperty: 'p',\n  setStyle: 's',\n  setClass: 'c',\n  insert: 'i',\n  remove: 'r',\n  createEventHandler: 'v',\n  onCleanup: 'o',\n  runCleanups: 'g',\n  reconcileArray: 'n',\n} as const;\n\n// ============================================================\n// Signal 代码生成选项\n// ============================================================\n\nexport interface SignalCodegenOptions {\n  mode: 'signal';\n  isComponent?: boolean;\n  ident?: number;\n  /** 是否使用短名称（优化模式） */\n  useShortNames?: boolean;\n  /** 是否内联简单表达式 */\n  inlineSimpleExpressions?: boolean;\n}\n\n// ============================================================\n// 辅助函数：获取运行时函数的短名称\n// ============================================================\n\nfunction getShortName(funcName: string, useShortNames: boolean): string {\n  if (!useShortNames) return funcName;\n  return RUNTIME_SHORT_NAMES[funcName as keyof typeof RUNTIME_SHORT_NAMES] || funcName;\n}\n\n// ============================================================\n// 主生成函数 - 优化版\n// ============================================================\n\nexport function generateSignalOptimized(ast: RootNode, _options?: CompilerOptions): CodegenResult {\n  const options: SignalCodegenOptions = {\n    mode: 'signal',\n    useShortNames: true, // 启用短别名优化以减少代码体积\n    inlineSimpleExpressions: true,\n  };\n\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  const dynamicBindings: Array<{ varName: string; code: string }> = [];\n\n  // 收集使用的运行时函数\n  const usedRuntime = new Set<string>();\n\n  // ---- Phase 0: 检查根节点数量 ----\n  const rootElementCount = ast.children.filter(\n    (child) => child.type === NodeTypes.ELEMENT || child.type === NodeTypes.VNODE_CALL,\n  ).length;\n  if (rootElementCount > 1) {\n    const location = ast.loc?.source\n      ? `\\n  Location: line ${ast.loc.start.line}, column ${ast.loc.start.column}`\n      : '';\n    throw new Error(\n      `[lytjs/compiler] Template has multiple root elements (${rootElementCount}). ` +\n        `Signal mode requires a single root element.${location}` +\n        `\\n  Suggestion: Wrap multiple root elements in a container element like <div> or <Fragment>.`,\n    );\n  }\n\n  // ---- Phase 1: Build static HTML and collect element variables ----\n  const staticHTML = buildStaticHTMLOptimized(ast.children, varCounter, elementVars);\n\n  // ---- Phase 2: Process AST children for dynamic bindings ----\n  processChildrenOptimized(\n    ast.children,\n    varCounter,\n    elementVars,\n    dynamicBindings,\n    consumedCount,\n    usedRuntime,\n    options,\n  );\n\n  // ---- Phase 3: Generate optimized imports ----\n  // 手动添加必须的 runtime 函数\n  usedRuntime.add('createTemplate');\n  usedRuntime.add('insert');\n  usedRuntime.add('onCleanup');\n  usedRuntime.add('runCleanups');\n\n  lines.push(generateOptimizedImports(usedRuntime, true));\n  lines.push('');\n\n  // ---- Phase 4: Generate render function ----\n  // 使用短参数名 _c (context) 和 _n (container) 减少代码体积\n  lines.push('export function render(_c,_n){');\n\n  // 生成 createTemplate 调用 - 使用短别名\n  if (elementVars.length > 0) {\n    const rootVar = elementVars[0]!.varName;\n    const ct = getShortName('createTemplate', options.useShortNames ?? true);\n    lines.push(`const ${rootVar}=${ct}(${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    // 使用短别名生成 insert 调用\n    const ins = getShortName('insert', options.useShortNames ?? true);\n    lines.push(`${ins}(${rootVar}, _n);`);\n    lines.push('');\n  }\n\n  // 生成动态绑定 - 优化：合并相似操作\n  generateOptimizedBindings(dynamicBindings, lines, options);\n\n  // 生成 cleanup - 使用短别名\n  if (elementVars.length > 0) {\n    const rootVar = elementVars[0]!.varName;\n    const oc = getShortName('onCleanup', options.useShortNames ?? true);\n    lines.push('');\n    lines.push(`${oc}(()=>${rootVar}.remove());`);\n  }\n\n  const rc = getShortName('runCleanups', options.useShortNames ?? true);\n  lines.push(`return()=>{${rc}()};`);\n  lines.push('}');\n\n  return {\n    code: lines.join('\\n'),\n    preamble: '',\n    ast,\n  };\n}\n\n// ============================================================\n// 生成优化的导入语句\n// ============================================================\n\nfunction generateOptimizedImports(usedRuntime: Set<string>, useShortNames: boolean): string {\n  if (useShortNames) {\n    // 短名称模式 - 分开 reactivity 和 dom-runtime 导入\n    const reactivityImports: string[] = ['e as effect'];\n    const domImports: string[] = [];\n\n    if (usedRuntime.has('createTemplate')) domImports.push('t as createTemplate');\n    if (usedRuntime.has('setText')) domImports.push('x as setText');\n    if (usedRuntime.has('setHTML')) domImports.push('h as setHTML');\n    if (usedRuntime.has('setAttribute')) domImports.push('a as setAttribute');\n    if (usedRuntime.has('setProperty')) domImports.push('p as setProperty');\n    if (usedRuntime.has('setStyle')) domImports.push('s as setStyle');\n    if (usedRuntime.has('setClass')) domImports.push('c as setClass');\n    if (usedRuntime.has('insert')) domImports.push('i as insert');\n    if (usedRuntime.has('remove')) domImports.push('r as remove');\n    if (usedRuntime.has('createEventHandler')) domImports.push('v as createEventHandler');\n    if (usedRuntime.has('onCleanup')) domImports.push('o as onCleanup');\n    if (usedRuntime.has('runCleanups')) domImports.push('g as runCleanups');\n    if (usedRuntime.has('reconcileArray')) domImports.push('n as reconcileArray');\n\n    let result = `import{${reactivityImports.join(',')}}from'@lytjs/reactivity';`;\n    if (domImports.length > 0) {\n      result += `\\nimport{${domImports.join(',')}}from'@lytjs/dom-runtime';`;\n    }\n    return result;\n  } else {\n    // 标准名称模式\n    const reactivityImports: string[] = ['effect'];\n    const domImports: string[] = [];\n\n    if (usedRuntime.has('createTemplate')) domImports.push('createTemplate');\n    if (usedRuntime.has('setText')) domImports.push('setText');\n    if (usedRuntime.has('setHTML')) domImports.push('setHTML');\n    if (usedRuntime.has('setAttribute')) domImports.push('setAttribute');\n    if (usedRuntime.has('setProperty')) domImports.push('setProperty');\n    if (usedRuntime.has('setStyle')) domImports.push('setStyle');\n    if (usedRuntime.has('setClass')) domImports.push('setClass');\n    if (usedRuntime.has('insert')) domImports.push('insert');\n    if (usedRuntime.has('remove')) domImports.push('remove');\n    if (usedRuntime.has('createEventHandler')) domImports.push('createEventHandler');\n    if (usedRuntime.has('onCleanup')) domImports.push('onCleanup');\n    if (usedRuntime.has('runCleanups')) domImports.push('runCleanups');\n    if (usedRuntime.has('reconcileArray')) domImports.push('reconcileArray');\n\n    let result = `import{${reactivityImports.join(',')}}from'@lytjs/reactivity';`;\n    if (domImports.length > 0) {\n      result += `\\nimport{${domImports.join(',')}}from'@lytjs/dom-runtime';`;\n    }\n    return result;\n  }\n}\n\n// ============================================================\n// 生成优化的动态绑定\n// ============================================================\n\nfunction generateOptimizedBindings(\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  lines: string[],\n  options: SignalCodegenOptions,\n): void {\n  // 按元素分组绑定\n  const bindingsByElement = new Map<string, string[]>();\n\n  for (const binding of dynamicBindings) {\n    const existing = bindingsByElement.get(binding.varName) || [];\n    existing.push(binding.code);\n    bindingsByElement.set(binding.varName, existing);\n  }\n\n  // 为每个元素生成合并的绑定代码\n  for (const [_varName, bindings] of bindingsByElement) {\n    // 检查是否可以合并 effect - 使用短别名 e\n    const e = getShortName('effect', options.useShortNames ?? true);\n    const effectPattern = `${e}(`;\n    const effectBindings = bindings.filter((b) => b.startsWith(effectPattern));\n    const otherBindings = bindings.filter((b) => !b.startsWith(effectPattern));\n\n    // 合并多个 effect 为单个 effect\n    if (effectBindings.length > 1) {\n      const effectContents = effectBindings\n        .map((b) => b.match(new RegExp(`${e}\\\\(\\\\(\\\\)=>\\\\{(.+)\\\\}\\\\);`))?.[1] || b)\n        .join('');\n      lines.push(`${e}(()=>{${effectContents}});`);\n    } else if (effectBindings.length === 1) {\n      lines.push(effectBindings[0]!);\n    }\n\n    // 添加其他绑定\n    for (const binding of otherBindings) {\n      lines.push(binding);\n    }\n  }\n}\n\n// ============================================================\n// 优化的静态 HTML 构建\n// ============================================================\n\nfunction buildStaticHTMLOptimized(\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 += serializeStaticHTMLOptimized(child as ElementNode, varCounter, elementVars);\n    }\n  }\n  return html;\n}\n\n// ============================================================\n// 优化的静态 HTML 序列化\n// ============================================================\n\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\nfunction serializeStaticHTMLOptimized(\n  node: ElementNode,\n  varCounter: Map<string, number>,\n  elementVars: Array<{ varName: string; tag: string }>,\n): string {\n  // 使用更短的变量名：_0, _1, _2...\n  const idx = elementVars.length;\n  const varName = `_${idx}`;\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      attrs += ` ${prop.name}=\"${escapeHtmlStatic(prop.value.content)}\"`;\n    } else if (prop.type === NodeTypes.ATTRIBUTE && !prop.value) {\n      attrs += ` ${prop.name}`;\n    }\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 += serializeStaticHTMLOptimized(child as ElementNode, varCounter, elementVars);\n    }\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\nfunction processChildrenOptimized(\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  usedRuntime: Set<string>,\n  options: SignalCodegenOptions,\n): void {\n  for (const child of children) {\n    if (child.type === NodeTypes.ELEMENT) {\n      processElementOptimized(\n        child as ElementNode,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        consumedCount,\n        usedRuntime,\n        options,\n      );\n    } else if (child.type === NodeTypes.JS_CONDITIONAL_EXPRESSION) {\n      processConditionalOptimized(\n        child as JSConditionalExpression,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        undefined,\n        consumedCount,\n        usedRuntime,\n        options,\n      );\n    } else if (child.type === NodeTypes.JS_CALL_EXPRESSION) {\n      processCallExpressionOptimized(\n        child as JSCallExpression,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        usedRuntime,\n        options,\n      );\n    }\n  }\n}\n\n// ============================================================\n// 优化的元素处理\n// ============================================================\n\nfunction processElementOptimized(\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  usedRuntime: Set<string>,\n  options: SignalCodegenOptions,\n): void {\n  // 使用索引变量名\n  const idx = findElementIndex(elementVars, node.tag, consumedCount);\n  const varName = idx !== null ? elementVars[idx]!.varName : `_${elementVars.length}`;\n\n  // 处理 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 的特殊解析\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            const eqMatch = nextProp.name.match(/^=\"(.*)\"$/);\n            if (eqMatch) {\n              dir.exp = createSimpleExpressionFor(eqMatch[1]!, dir.loc);\n              break;\n            }\n          }\n        }\n      }\n      processDirectiveOptimized(dir, varName, node.tag, dynamicBindings, usedRuntime, options);\n    }\n  }\n\n  // 处理 codegenNode 中的属性\n  if (node.codegenNode && node.codegenNode.type === NodeTypes.VNODE_CALL) {\n    const vnode = node.codegenNode as VNodeCall;\n    processVNodeCallPropsOptimized(vnode, varName, dynamicBindings, usedRuntime, options);\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      if (!exp || !/^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/.test(exp)) {\n        continue;\n      }\n\n      // 优化：检查是否为简单属性访问，可以内联\n      if (options.inlineSimpleExpressions && isSimplePropertyAccess(exp)) {\n        usedRuntime.add('effect');\n        usedRuntime.add('setText');\n        const e = getShortName('effect', options.useShortNames ?? true);\n        const st = getShortName('setText', options.useShortNames ?? true);\n        dynamicBindings.push({\n          varName,\n          code: `${e}(()=>${st}(${varName},_c.${exp}));`,\n        });\n      } else {\n        usedRuntime.add('effect');\n        usedRuntime.add('setText');\n        const e = getShortName('effect', options.useShortNames ?? true);\n        const st = getShortName('setText', options.useShortNames ?? true);\n        dynamicBindings.push({\n          varName,\n          code: `${e}(()=>${st}(${varName},_c.${exp}));`,\n        });\n      }\n    } else if (child.type === NodeTypes.ELEMENT) {\n      processElementOptimized(\n        child as ElementNode,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        consumedCount,\n        usedRuntime,\n        options,\n      );\n    } else if (child.type === NodeTypes.JS_CONDITIONAL_EXPRESSION) {\n      processConditionalOptimized(\n        child as JSConditionalExpression,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        varName,\n        consumedCount,\n        usedRuntime,\n        options,\n      );\n    } else if (child.type === NodeTypes.JS_CALL_EXPRESSION) {\n      processCallExpressionOptimized(\n        child as JSCallExpression,\n        varCounter,\n        elementVars,\n        dynamicBindings,\n        usedRuntime,\n        options,\n        varName,\n      );\n    }\n  }\n}\n\n// ============================================================\n// 检查是否为简单属性访问\n// ============================================================\n\nfunction isSimplePropertyAccess(exp: string): boolean {\n  // 简单属性访问：a.b.c 或 a\n  return /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/.test(exp);\n}\n\n// ============================================================\n// 优化的指令处理\n// ============================================================\n\nconst VALID_EXPRESSION = /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/;\nconst VALID_ATTRIBUTE_NAME = /^[a-zA-Z][a-zA-Z0-9-:]*$/;\nconst VALID_EVENT_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}\"` +\n        `\\n  Suggestion: Ensure the expression contains valid JavaScript syntax.`,\n    );\n  }\n}\n\nfunction processDirectiveOptimized(\n  dir: DirectiveNode,\n  varName: string,\n  tag: string,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  usedRuntime: Set<string>,\n  options: SignalCodegenOptions,\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  validateExpression(expContent, `v-${dir.name}`);\n  validateExpression(argContent, `v-${dir.name} argument`);\n\n  if (dir.name === 'bind' && argContent && !VALID_ATTRIBUTE_NAME.test(argContent)) {\n    throw new Error(\n      `[lytjs/compiler] Invalid attribute name: \"${argContent}\"` +\n        `\\n  Suggestion: Attribute names must start with a letter and contain only letters, numbers, or hyphens.`,\n    );\n  }\n  if (dir.name === 'on' && argContent && !VALID_EVENT_NAME.test(argContent)) {\n    throw new Error(\n      `[lytjs/compiler] Invalid event name: \"${argContent}\"` +\n        `\\n  Suggestion: Event names must start with a letter and contain only letters, numbers, or hyphens.`,\n    );\n  }\n\n  switch (dir.name) {\n    case 'if': {\n      if (expContent) {\n        usedRuntime.add('effect');\n        usedRuntime.add('insert');\n        usedRuntime.add('remove');\n        const e = getShortName('effect', options.useShortNames ?? true);\n        const ins = getShortName('insert', options.useShortNames ?? true);\n        const rm = getShortName('remove', options.useShortNames ?? true);\n        dynamicBindings.push({\n          varName,\n          code: `let _f=null;${e}(()=>{if(_c.${expContent}){if(!_f){_f=${varName};${ins}(_f, _n);}}else{if(_f){${rm}(_f);_f=null;}}});`,\n        });\n      }\n      break;\n    }\n\n    case 'show': {\n      if (expContent) {\n        usedRuntime.add('effect');\n        const e = getShortName('effect', options.useShortNames ?? true);\n        dynamicBindings.push({\n          varName,\n          code: `${e}(()=>{${varName}.style.display=_c.${expContent}?'':'none';});`,\n        });\n      }\n      break;\n    }\n\n    case 'text': {\n      if (expContent) {\n        usedRuntime.add('effect');\n        usedRuntime.add('setText');\n        const e = getShortName('effect', options.useShortNames ?? true);\n        const st = getShortName('setText', options.useShortNames ?? true);\n        dynamicBindings.push({\n          varName,\n          code: `${e}(()=>${st}(${varName},_c.${expContent}));`,\n        });\n      }\n      break;\n    }\n\n    case 'html': {\n      if (expContent) {\n        usedRuntime.add('effect');\n        usedRuntime.add('setHTML');\n        const e = getShortName('effect', options.useShortNames ?? true);\n        const sh = getShortName('setHTML', options.useShortNames ?? true);\n        dynamicBindings.push({\n          varName,\n          code: `${e}(()=>${sh}(${varName},_c.${expContent}));`,\n        });\n      }\n      break;\n    }\n\n    case 'bind': {\n      if (argContent && expContent) {\n        usedRuntime.add('effect');\n        const e = getShortName('effect', options.useShortNames ?? true);\n        const sc = getShortName('setClass', options.useShortNames ?? true);\n        const ss = getShortName('setStyle', options.useShortNames ?? true);\n        const sa = getShortName('setAttribute', options.useShortNames ?? true);\n        if (argContent === 'class') {\n          usedRuntime.add('setClass');\n          dynamicBindings.push({\n            varName,\n            code: `${e}(()=>${sc}(${varName},_c.${expContent}));`,\n          });\n        } else if (argContent === 'style') {\n          usedRuntime.add('setStyle');\n          dynamicBindings.push({\n            varName,\n            code: `${e}(()=>${ss}(${varName},_c.${expContent}));`,\n          });\n        } else {\n          usedRuntime.add('setAttribute');\n          dynamicBindings.push({\n            varName,\n            code: `${e}(()=>${sa}(${varName},'${argContent}',_c.${expContent}));`,\n          });\n        }\n      }\n      break;\n    }\n\n    case 'on': {\n      if (argContent && expContent) {\n        usedRuntime.add('createEventHandler');\n        usedRuntime.add('onCleanup');\n        const cev = getShortName('createEventHandler', options.useShortNames ?? true);\n        const oc = getShortName('onCleanup', options.useShortNames ?? true);\n        if (dir.modifiers.length > 0) {\n          const mods = dir.modifiers.map((m) => `${m}:1`).join(',');\n          dynamicBindings.push({\n            varName,\n            code: `${oc}(${cev}(${varName},'${argContent}',_c.${expContent},{${mods}}));`,\n          });\n        } else {\n          dynamicBindings.push({\n            varName,\n            code: `${oc}(${cev}(${varName},'${argContent}',_c.${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        let eventName = 'input';\n        const getValueExpr = '$e.target.value';\n\n        if (tagLower === 'select') {\n          eventName = 'change';\n        } else if (isLazy) {\n          eventName = 'change';\n        }\n\n        let setValueExpr = getValueExpr;\n        if (isNumber && isTrim) {\n          setValueExpr = `Number((${getValueExpr}).trim())`;\n        } else if (isNumber) {\n          setValueExpr = `Number(${getValueExpr})`;\n        } else if (isTrim) {\n          setValueExpr = `(${getValueExpr}).trim()`;\n        }\n\n        usedRuntime.add('effect');\n        usedRuntime.add('createEventHandler');\n        usedRuntime.add('onCleanup');\n\n        const e = getShortName('effect', options.useShortNames ?? true);\n        const cev = getShortName('createEventHandler', options.useShortNames ?? true);\n        const oc = getShortName('onCleanup', options.useShortNames ?? true);\n\n        dynamicBindings.push({\n          varName,\n          code: `${e}(()=>{${varName}.value=_c.${expContent};});`,\n        });\n        dynamicBindings.push({\n          varName,\n          code: `${oc}(${cev}(${varName},'${eventName}',($e)=>{_c.${expContent}=${setValueExpr};}));`,\n        });\n      }\n      break;\n    }\n  }\n}\n\n// ============================================================\n// 优化的 VNodeCall props 处理\n// ============================================================\n\nfunction processVNodeCallPropsOptimized(\n  vnode: VNodeCall,\n  varName: string,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  usedRuntime: Set<string>,\n  options: SignalCodegenOptions,\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      usedRuntime.add('effect');\n      usedRuntime.add('setText');\n      const e = getShortName('effect', options.useShortNames ?? true);\n      const st = getShortName('setText', options.useShortNames ?? true);\n      dynamicBindings.push({\n        varName,\n        code: `${e}(()=>${st}(${varName},${value}));`,\n      });\n    } else if (key === 'innerHTML') {\n      usedRuntime.add('effect');\n      usedRuntime.add('setHTML');\n      const e = getShortName('effect', options.useShortNames ?? true);\n      const sh = getShortName('setHTML', options.useShortNames ?? true);\n      dynamicBindings.push({\n        varName,\n        code: `${e}(()=>${sh}(${varName},${value}));`,\n      });\n    }\n  }\n}\n\n// ============================================================\n// 优化的条件表达式处理\n// ============================================================\n\nfunction processConditionalOptimized(\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 | undefined,\n  _consumedCount: Map<string, number>,\n  usedRuntime: Set<string>,\n  options: SignalCodegenOptions,\n): void {\n  const testExpr = getTestExpr(node.test);\n\n  if (!testExpr || testExpr.trim() === '') {\n    throw new Error(\n      `[lytjs/compiler] v-if/v-else-if condition is empty or invalid.` +\n        `\\n  Suggestion: Provide a valid expression for v-if, e.g., v-if=\"isVisible\" or v-if=\"count > 0\".`,\n    );\n  }\n\n  const branches: Array<{\n    condition: string | null;\n    branch: JSChildNode | TemplateChildNode | TemplateChildNode[] | string | undefined;\n  }> = [];\n\n  branches.push({ condition: testExpr, branch: node.consequent });\n\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({ condition: altTestExpr || null, branch: altCond.consequent });\n      alternate = altCond.alternate;\n    } else {\n      branches.push({ condition: null, branch: alternate });\n      alternate = undefined;\n    }\n  }\n\n  usedRuntime.add('effect');\n  usedRuntime.add('createTemplate');\n  usedRuntime.add('insert');\n  usedRuntime.add('remove');\n\n  const e = getShortName('effect', options.useShortNames ?? true);\n  const ins = getShortName('insert', options.useShortNames ?? true);\n  const rm = getShortName('remove', options.useShortNames ?? true);\n\n  const containerVar = parentVar ?? '_n';\n  const ifDepth = varCounter.get('_if_depth') ?? 0;\n  const ifVarName = `_i${varCounter.get(`_if_${ifDepth}`) ?? 0}`;\n  varCounter.set(`_if_${ifDepth}`, (varCounter.get(`_if_${ifDepth}`) ?? 0) + 1);\n  varCounter.set('_if_depth', ifDepth + 1);\n\n  let code = `let ${ifVarName}El=null,${ifVarName}Idx=-1;${e}(()=>{`;\n  const branchHTMLs: string[] = [];\n\n  for (let i = 0; i < branches.length; i++) {\n    const branchInfo = branches[i]!;\n    const branchHTML = serializeBranchHTML(branchInfo.branch);\n    branchHTMLs.push(branchHTML);\n\n    if (i > 0) code += 'else ';\n    if (branchInfo.condition !== null) {\n      code += `if(_c.${branchInfo.condition})`;\n    }\n    code += `{if(${ifVarName}Idx!==${i}){`;\n    if (i === 0) {\n      code += `if(${ifVarName}El){${rm}(${ifVarName}El);${ifVarName}El=null;}`;\n    }\n    code += `${ifVarName}El=createTemplate(${JSON.stringify(branchHTML)}).firstElementChild;`;\n    code += `if(!${ifVarName}El)${ifVarName}El=document.createComment('');`;\n    code += `${ins}(${ifVarName}El,${containerVar});`;\n    code += `${ifVarName}Idx=${i};`;\n    code += `}}`;\n  }\n\n  code += `else{if(${ifVarName}El){${rm}(${ifVarName}El);${ifVarName}El=null;${ifVarName}Idx=-1;}}`;\n  code += '});';\n\n  dynamicBindings.push({ varName: containerVar, code });\n\n  varCounter.set('_if_depth', ifDepth);\n}\n\n// ============================================================\n// 优化的调用表达式处理\n// ============================================================\n\nfunction processCallExpressionOptimized(\n  node: JSCallExpression,\n  _varCounter: Map<string, number>,\n  _elementVars: Array<{ varName: string; tag: string }>,\n  dynamicBindings: Array<{ varName: string; code: string }>,\n  usedRuntime: Set<string>,\n  options: SignalCodegenOptions,\n  parentVar?: string,\n): void {\n  const callee = typeof node.callee === 'string' ? node.callee : String(node.callee);\n\n  if (callee === 'RENDER_LIST' || callee === 'renderList') {\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    let itemVar = 'item';\n    let keyExpr = '';\n    let createBody = '';\n\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') {\n            const match = child.match(/\\((\\w+)/);\n            if (match) {\n              itemVar = match[1]!;\n            }\n          }\n        }\n        for (const child of compound.children) {\n          if (typeof child !== 'string' && child.type === NodeTypes.VNODE_CALL) {\n            const vnode = child as VNodeCall;\n            const tagInfo = extractTagFromVNode(vnode);\n            if (tagInfo) {\n              createBody = `const ${tagInfo.varName}=document.createElement('${tagInfo.tag}');`;\n              if (vnode.children) {\n                if (typeof vnode.children === 'string') {\n                  const escaped = vnode.children.replace(/'/g, \"\\\\'\").replace(/\\\\/g, '\\\\\\\\');\n                  createBody += `${tagInfo.varName}.textContent='${escaped}';`;\n                } else if (\n                  vnode.children &&\n                  typeof vnode.children === 'object' &&\n                  'type' in vnode.children &&\n                  (vnode.children as SimpleExpressionNode).type === NodeTypes.SIMPLE_EXPRESSION\n                ) {\n                  createBody += `${tagInfo.varName}.textContent=${itemVar}.${(vnode.children as SimpleExpressionNode).content};`;\n                }\n              }\n              createBody += `return ${tagInfo.varName};`;\n            }\n          }\n        }\n      }\n    }\n\n    keyExpr = `${itemVar}.id`;\n    const containerVar = parentVar ?? '_n';\n\n    usedRuntime.add('effect');\n    usedRuntime.add('reconcileArray');\n    const e = getShortName('effect', options.useShortNames ?? true);\n    const ra = getShortName('reconcileArray', options.useShortNames ?? true);\n\n    dynamicBindings.push({\n      varName: containerVar,\n      code: `${e}(()=>${ra}(${containerVar},_c.${source},{key:(${itemVar})=>${keyExpr},create:(${itemVar})=>{${createBody}}}));`,\n    });\n  }\n}\n\n// ============================================================\n// Helper 函数\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 findElementIndex(\n  elementVars: Array<{ varName: string; tag: string }>,\n  tag: string,\n  consumedCount?: Map<string, number>,\n): number | null {\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 elementVars.indexOf(matching[idx]!);\n  }\n  return null;\n}\n\nfunction getExpContent(node: SimpleExpressionNode | CompoundExpressionNode | undefined): string {\n  if (!node) return '';\n  if (node.type === NodeTypes.SIMPLE_EXPRESSION) return node.content;\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\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\nfunction extractTagFromVNode(vnode: VNodeCall): { tag: string; varName: string } | null {\n  if (typeof vnode.tag === 'string') {\n    const tag = vnode.tag.replace(/^\"|\"$/g, '');\n    return { tag, varName: `_${tag}` };\n  }\n  return null;\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      let attrs = '';\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              if (!value.includes('_ctx') && !value.includes('(')) {\n                attrs += ` ${key}=\"${escapeHtmlStatic(value.replace(/^\"|\"$/g, ''))}\"`;\n              }\n            }\n          }\n        }\n      }\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 serializeStaticHTMLOptimized(branch as ElementNode, new Map(), []);\n  }\n  return '';\n}\n\n// ============================================================\n// 导出\n// ============================================================\n\nexport { RUNTIME_SHORT_NAMES };\n","// src/codegen-ssr.ts\n// SSR code generator - generates renderToString format code from AST\n//\n// SSR 模式下：\n// - 跳过事件绑定（v-on）\n// - 跳过双向绑定（v-model）\n// - 跳过 v-show\n// - 保留 v-if/v-for/v-text/v-html/v-bind\n// - 生成 renderToString 格式的代码\n\nimport { NodeTypes } from './constants';\nimport { escapeHTML } from '@lytjs/common-string';\nimport type {\n  RootNode,\n  ElementNode,\n  TextNode,\n  InterpolationNode,\n  SimpleExpressionNode,\n  CompoundExpressionNode,\n  TemplateChildNode,\n  JSChildNode,\n  JSConditionalExpression,\n  JSCallExpression,\n  JSObjectExpression,\n  VNodeCall,\n  CodegenResult,\n  CodegenOptions,\n} from './types';\n\n// ============================================================\n// 模块级常量\n// ============================================================\n\nconst VOID_ELEMENTS = new Set([\n  'area',\n  'base',\n  'br',\n  'col',\n  'embed',\n  'hr',\n  'img',\n  'input',\n  'link',\n  'meta',\n  'param',\n  'source',\n  'track',\n  'wbr',\n]);\n\n// ============================================================\n// 辅助函数\n// ============================================================\n\n// FIX: P2-1 消除 escapeHtml 函数重复定义\n// 复用 @lytjs/common-string 中的 escapeHTML 函数\n// 注意：生成的代码字符串中仍内联 escapeHtml 函数，确保运行时独立可用\nexport const escapeHtml = escapeHTML;\n\n// ============================================================\n// 主 SSR 生成函数\n// ============================================================\n\nexport function generateSSR(ast: RootNode, _options: CodegenOptions = {}): CodegenResult {\n  const parts: string[] = [];\n\n  // 生成 render 函数\n  parts.push(`function render(_ctx) {\\n`);\n  parts.push(`  return renderToString(`);\n\n  // 将 children 生成为字符串拼接\n  const body = genSSRChildren(ast.children);\n  parts.push(body);\n\n  parts.push(`);\\n`);\n  parts.push(`}\\n\\n`);\n\n  // escapeHtml helper (used by renderToString and interpolation output)\n  parts.push(`function escapeHtml(str) {\\n`);\n  parts.push(`  return String(str)\\n`);\n  parts.push(`    .replace(/&/g, '&amp;')\\n`);\n  parts.push(`    .replace(/</g, '&lt;')\\n`);\n  parts.push(`    .replace(/>/g, '&gt;')\\n`);\n  parts.push(`    .replace(/\"/g, '&quot;')\\n`);\n  parts.push(`    .replace(/'/g, '&#39;');\\n`);\n  parts.push(`}\\n\\n`);\n\n  // 辅助函数\n  // NOTE: renderToString is intentionally inlined into each compilation result\n  // to ensure every compiled output is self-contained and independently executable,\n  // without relying on external runtime imports. This trades a small amount of\n  // code duplication for maximum portability and zero runtime coupling.\n  // FIX: P2-15 提取 voidElements 为模块级常量，避免每次调用都创建新 Set\n  parts.push(\n    `const VOID_ELEMENTS = new Set(['area','base','br','col','embed','hr','img','input','link','meta','param','source','track','wbr']);\\n\\n`,\n  );\n  parts.push(`function renderToString(vnode) {\\n`);\n  parts.push(`  if (typeof vnode === 'string') return vnode;\\n`);\n  parts.push(`  if (vnode == null) return '';\\n`);\n  parts.push(`  if (Array.isArray(vnode)) return vnode.map(renderToString).join('');\\n`);\n  parts.push(`  const { tag, props, children } = vnode;\\n`);\n  parts.push(`  let html = '<' + tag;\\n`);\n  parts.push(`  if (props) {\\n`);\n  parts.push(`    for (const [key, value] of Object.entries(props)) {\\n`);\n  // FIX: P2-46 布尔属性特殊处理：值为 true 时只输出属性名（如 disabled），\n  // 值为 false 或 null 时跳过，其他值正常输出带引号的属性值\n  parts.push(`      if (value === true) {\\n`);\n  parts.push(`        html += ' ' + key;\\n`);\n  parts.push(`      } else if (value != null && value !== false) {\\n`);\n  parts.push(`        html += ' ' + key + '=\"' + escapeHtml(value) + '\"';\\n`);\n  parts.push(`      }\\n`);\n  parts.push(`    }\\n`);\n  parts.push(`  }\\n`);\n  parts.push(`  html += '>';\\n`);\n  parts.push(`  if (!VOID_ELEMENTS.has(tag)) {\\n`);\n  parts.push(`    if (children != null) {\\n`);\n  parts.push(`      html += renderToString(children);\\n`);\n  parts.push(`    }\\n`);\n  parts.push(`    html += '</' + tag + '>';\\n`);\n  parts.push(`  }\\n`);\n  parts.push(`  return html;\\n`);\n  parts.push(`}\\n`);\n\n  return {\n    code: parts.join(''),\n    preamble: '',\n    ast,\n  };\n}\n\n// ============================================================\n// 生成 SSR children\n// ============================================================\n\nfunction genSSRChildren(children: TemplateChildNode[]): string {\n  const parts: string[] = [];\n\n  for (const child of children) {\n    if (!child) continue;\n\n    switch (child.type) {\n      case NodeTypes.TEXT:\n        parts.push(JSON.stringify((child as TextNode).content));\n        break;\n\n      case NodeTypes.INTERPOLATION: {\n        const node = child as InterpolationNode;\n        const content = (node.content as SimpleExpressionNode).content;\n        // FIX: P1-14 SSR 插值表达式白名单验证，防止代码注入\n        const isValidExpr = /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/.test(content);\n        if (!isValidExpr) {\n          if (__DEV__) {\n            console.warn(\n              `[lytjs/compiler] Invalid interpolation expression in SSR: \"${content}\". ` +\n                `Only simple property access paths are allowed.`,\n            );\n          }\n          parts.push(`'[invalid expression]'`);\n        } else {\n          parts.push(`escapeHtml(String(${content}))`);\n        }\n        break;\n      }\n\n      case NodeTypes.ELEMENT: {\n        const element = child as ElementNode;\n        parts.push(genSSRElement(element));\n        break;\n      }\n\n      case NodeTypes.COMMENT:\n        // 注释在 SSR 中被省略\n        break;\n\n      case NodeTypes.JS_CONDITIONAL_EXPRESSION: {\n        const cond = child as JSConditionalExpression;\n        parts.push(genSSRConditional(cond));\n        break;\n      }\n\n      case NodeTypes.JS_CALL_EXPRESSION: {\n        const call = child as JSCallExpression;\n        parts.push(genSSRCallExpression(call));\n        break;\n      }\n\n      case NodeTypes.COMPOUND_EXPRESSION: {\n        const compound = child as CompoundExpressionNode;\n        const childParts: string[] = [];\n        for (const c of compound.children) {\n          if (typeof c === 'string') {\n            childParts.push(c);\n          } else if (c.type === NodeTypes.SIMPLE_EXPRESSION) {\n            // FIX: P0-1 CompoundExpression 中的表达式需要转义输出，防止 XSS\n            childParts.push(`escapeHtml(String(${(c as SimpleExpressionNode).content}))`);\n          } else if (c.type === NodeTypes.INTERPOLATION) {\n            const content = ((c as InterpolationNode).content as SimpleExpressionNode).content;\n            // FIX: P1-4 SSR CompoundExpression 插值白名单验证，防止代码注入\n            const isValidExpr = /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/.test(\n              content,\n            );\n            if (!isValidExpr) {\n              if (__DEV__) {\n                console.warn(\n                  `[lytjs/compiler] Invalid interpolation expression in SSR CompoundExpression: \"${content}\". ` +\n                    `Only simple property access paths are allowed.`,\n                );\n              }\n              childParts.push(`'[invalid expression]'`);\n            } else {\n              childParts.push(`escapeHtml(String(${content}))`);\n            }\n          }\n        }\n        parts.push(`(${childParts.join(' + ')})`);\n        break;\n      }\n\n      default:\n        break;\n    }\n  }\n\n  if (parts.length === 0) return \"''\";\n  if (parts.length === 1) return parts[0]!;\n  return parts.join(' + ');\n}\n\n// ============================================================\n// 生成 SSR 元素\n// ============================================================\n\nfunction genSSRElement(element: ElementNode): string {\n  const tag = element.tag;\n  const parts: string[] = [];\n\n  // 开始标签\n  parts.push(`'<${tag}'`);\n\n  // 处理 props（属性和 SSR 相关指令）\n  const propParts: string[] = [];\n  // 收集 v-html/v-text 内容以便在 children 区域渲染（而非属性）\n  let directiveChildren: string | undefined;\n\n  for (const prop of element.props) {\n    if (prop.type === NodeTypes.ATTRIBUTE) {\n      const name = prop.name;\n      const value = prop.value ? escapeHtml(prop.value.content) : '';\n      propParts.push(`' ${name}=\"${value}\"'`);\n    } else if (prop.type === NodeTypes.DIRECTIVE) {\n      // 在 SSR 模式下，只处理 bind 指令（v-bind）\n      // 跳过 v-on、v-model、v-show\n      if (prop.name === 'bind') {\n        const argContent = prop.arg ? (prop.arg as SimpleExpressionNode).content : undefined;\n        const expContent = prop.exp ? (prop.exp as SimpleExpressionNode).content : undefined;\n        // FIX: P2-17 对 v-bind 属性值进行 HTML 转义，防止 XSS 攻击\n        if (argContent && expContent) {\n          propParts.push(`' ${argContent}=\"' + escapeHtml(String(${expContent})) + '\"'`);\n        }\n      }\n      // v-html: output raw HTML content as children (not as attribute)\n      if (prop.name === 'html') {\n        const expContent = prop.exp ? (prop.exp as SimpleExpressionNode).content : undefined;\n        if (expContent) {\n          // FIX: P0-1 v-html SSR 模式下需要转义输出，防止 XSS\n          directiveChildren =\n            (directiveChildren ? directiveChildren + ' + ' : '') +\n            `escapeHtml(String(${expContent}))`;\n        }\n      }\n      // v-text: output escaped text content as children (not as attribute)\n      if (prop.name === 'text') {\n        const expContent = prop.exp ? (prop.exp as SimpleExpressionNode).content : undefined;\n        if (expContent) {\n          directiveChildren =\n            (directiveChildren ? directiveChildren + ' + ' : '') +\n            `escapeHtml(String(${expContent}))`;\n        }\n      }\n    }\n  }\n\n  if (propParts.length > 0) {\n    parts.push(' + ' + propParts.join(' + '));\n  }\n\n  // 自闭合检查\n  if (VOID_ELEMENTS.has(tag)) {\n    parts.push(\" + '>'\");\n    return `(${parts.join('')})`;\n  }\n\n  parts.push(\" + '>'\");\n\n  // Children：指令 children（v-html/v-text）优先，否则渲染元素 children\n  if (directiveChildren) {\n    parts.push(' + ' + directiveChildren);\n  } else if (element.children.length > 0) {\n    const childrenStr = genSSRChildren(element.children);\n    parts.push(' + ' + childrenStr);\n  }\n\n  // 结束标签\n  parts.push(` + '</${tag}>'`);\n\n  return `(${parts.join('')})`;\n}\n\n// ============================================================\n// 生成 SSR 条件表达式\n// ============================================================\n\nfunction genSSRConditional(cond: JSConditionalExpression): string {\n  const testStr = genSSRExpr(cond.test);\n  const consequentStr = genSSRBranch(cond.consequent);\n  const alternateStr = cond.alternate ? genSSRBranch(cond.alternate) : \"''\";\n  return `(${testStr} ? ${consequentStr} : ${alternateStr})`;\n}\n\nfunction genSSRBranch(\n  branch: JSChildNode | TemplateChildNode | TemplateChildNode[] | string | undefined,\n): string {\n  if (branch === undefined) return \"''\";\n  if (typeof branch === 'string') return JSON.stringify(branch);\n  if (Array.isArray(branch)) return genSSRChildren(branch);\n\n  if (branch.type === NodeTypes.JS_CONDITIONAL_EXPRESSION) {\n    return genSSRConditional(branch as JSConditionalExpression);\n  }\n\n  if (branch.type === NodeTypes.VNODE_CALL) {\n    return genSSRVNodeCall(branch as VNodeCall);\n  }\n\n  if (branch.type === NodeTypes.JS_CALL_EXPRESSION) {\n    return genSSRCallExpression(branch as JSCallExpression);\n  }\n\n  if (branch.type === NodeTypes.ELEMENT) {\n    return genSSRElement(branch as ElementNode);\n  }\n\n  if (branch.type === NodeTypes.SIMPLE_EXPRESSION) {\n    // FIX: P0-1 SSR 表达式需要转义输出，防止 XSS\n    return `escapeHtml(String(${(branch as SimpleExpressionNode).content}))`;\n  }\n\n  if (branch.type === NodeTypes.TEXT) {\n    return JSON.stringify((branch as TextNode).content);\n  }\n\n  return \"''\";\n}\n\n// ============================================================\n// 生成 SSR 表达式\n// ============================================================\n\nfunction genSSRExpr(expr: JSChildNode | string): string {\n  if (typeof expr === 'string') return expr;\n  if (expr.type === NodeTypes.SIMPLE_EXPRESSION) {\n    return (expr as SimpleExpressionNode).content;\n  }\n  return \"'[expr]'\";\n}\n\n// ============================================================\n// 生成 SSR VNodeCall\n// ============================================================\n\nfunction genSSRVNodeCall(vnode: VNodeCall): string {\n  const tag = typeof vnode.tag === 'string' ? vnode.tag.replace(/\"/g, '') : String(vnode.tag);\n  const parts: string[] = [`'<${tag}'`];\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 key =\n          prop.key.type === NodeTypes.SIMPLE_EXPRESSION\n            ? (prop.key as SimpleExpressionNode).content.replace(/\"/g, '')\n            : String(prop.key);\n        // 跳过事件处理器（on*）\n        if (key.startsWith('on') && key.length > 2 && key[2] === key[2]!.toUpperCase()) {\n          continue;\n        }\n        // 跳过 style（v-show 生成的）\n        if (key === 'style') {\n          continue;\n        }\n        const value =\n          prop.value.type === NodeTypes.SIMPLE_EXPRESSION\n            ? (prop.value as SimpleExpressionNode).content\n            : \"'[value]'\";\n        // FIX: P0-1 属性值 SSR 模式下需要转义输出，防止 XSS\n        parts.push(` + ' ${key}=\"' + escapeHtml(String(${value})) + '\"'`);\n      }\n    }\n  }\n\n  if (VOID_ELEMENTS.has(tag)) {\n    parts.push(\" + '>'\");\n    return `(${parts.join('')})`;\n  }\n\n  parts.push(\" + '>'\");\n\n  // Children\n  if (vnode.children !== undefined) {\n    if (typeof vnode.children === 'string') {\n      parts.push(` + ${JSON.stringify(vnode.children)}`);\n    } else if (Array.isArray(vnode.children)) {\n      const childrenStr = genSSRChildren(vnode.children as TemplateChildNode[]);\n      parts.push(' + ' + childrenStr);\n    } else {\n      const childStr = genSSRBranch(vnode.children as JSChildNode);\n      parts.push(' + ' + childStr);\n    }\n  }\n\n  parts.push(` + '</${tag}>'`);\n  return `(${parts.join('')})`;\n}\n\n// ============================================================\n// 生成 SSR 调用表达式\n// ============================================================\n\nfunction genSSRCallExpression(call: JSCallExpression): string {\n  const callee = typeof call.callee === 'string' ? call.callee : String(call.callee);\n\n  // 处理 renderList\n  if (callee === 'renderList' || callee === 'RENDER_LIST') {\n    const args = call.arguments;\n    if (args.length >= 2) {\n      const firstArg = args[0];\n      const listExpr =\n        typeof firstArg === 'string'\n          ? firstArg\n          : firstArg && !Array.isArray(firstArg) && firstArg.type === NodeTypes.SIMPLE_EXPRESSION\n            ? (firstArg as SimpleExpressionNode).content\n            : '[]';\n      const secondArg = args[1];\n      // 第二个参数是表示箭头函数的 CompoundExpressionNode：\n      // children: ['(item, index) => { ', ...arrowBody, ' }']\n      let arrowParams = 'item';\n      let arrowBodyStr = \"''\";\n      if (\n        secondArg &&\n        !Array.isArray(secondArg) &&\n        typeof secondArg !== 'string' &&\n        secondArg.type === NodeTypes.COMPOUND_EXPRESSION\n      ) {\n        const compound = secondArg as CompoundExpressionNode;\n        const children = compound.children;\n        // 从第一个子节点字符串中提取箭头函数参数\n        const firstChild = children[0];\n        if (typeof firstChild === 'string') {\n          // 使用平衡括号提取来处理解构中的嵌套花括号\n          const arrowStart = firstChild.indexOf('=>');\n          if (arrowStart !== -1) {\n            const parenStart = firstChild.indexOf('(');\n            if (parenStart !== -1 && parenStart < arrowStart) {\n              // 查找匹配的右括号，考虑嵌套括号\n              let depth = 0;\n              let parenEnd = -1;\n              for (let i = parenStart; i < arrowStart; i++) {\n                if (firstChild[i] === '(') depth++;\n                else if (firstChild[i] === ')') depth--;\n                if (depth === 0) {\n                  parenEnd = i;\n                  break;\n                }\n              }\n              if (parenEnd !== -1) {\n                arrowParams = firstChild.slice(parenStart + 1, parenEnd).trim();\n              }\n            }\n          }\n        }\n        // Extract the body (everything between first and last child)\n        const bodyChildren = children.slice(1, -1);\n        if (bodyChildren.length > 0) {\n          arrowBodyStr = genSSRChildren(bodyChildren as TemplateChildNode[]);\n        }\n      } else if (\n        secondArg &&\n        !Array.isArray(secondArg) &&\n        typeof secondArg !== 'string' &&\n        secondArg.type === NodeTypes.SIMPLE_EXPRESSION\n      ) {\n        arrowBodyStr = (secondArg as SimpleExpressionNode).content;\n      }\n      return `(${listExpr}).flatMap((${arrowParams}) => ${arrowBodyStr}).join('')`;\n    }\n  }\n\n  return \"'[call]'\";\n}\n","// src/index.ts\n// @lytjs/compiler - Main entry point\n// 重新导出 all public APIs\n\n// Compile function\nimport { parse } from './parser';\nimport { transform, builtInTransforms, builtInDirectiveTransforms, optimize } from './transform';\nimport { generate } from './codegen';\nimport { generateSignal } from './codegen-signal';\nimport { generateSignalOptimized } from './codegen-signal-optimized';\nimport { generateSSR } from './codegen-ssr';\nimport type { CompilerOptions, CodegenResult, DirectiveTransform, RootNode } from './types';\n\n// Server Components (Phase 1.4)\nexport {\n  detectServerDirective,\n  analyzeServerComponent,\n  compileServerComponent,\n  createServerReference,\n  createServerProxy,\n} from './server-components';\nexport type {\n  ServerDirective,\n  ServerComponentAnalysis,\n  ServerComponentOptions,\n  ServerComponentResult,\n} from './server-components';\n\n// Client/Server Boundary (Phase 1.6)\nexport {\n  analyzeBoundary,\n  splitClientServer,\n  runtime,\n  serverOnly,\n  clientOnly,\n  createEnvironmentValue,\n} from './client-server-boundary';\nexport type {\n  BoundaryType,\n  BoundaryAnalysis,\n  ComponentBoundary,\n  SplitResult,\n  SplitOptions,\n} from './client-server-boundary';\n\n// Optimizations (Phase 1.12-1.14)\nexport {\n  analyzeMemoNeeds,\n  analyzeDeadCode,\n  eliminateDeadCode,\n  precompileTemplate,\n} from './optimizations';\nexport type {\n  MemoAnalysis,\n  StaticSubtree,\n  DynamicBinding,\n  MemoBoundary,\n  DeadCodeAnalysis,\n  UnreachableCode,\n  ConstantFoldingOpportunity,\n  AOTOptions,\n  AOTResult,\n} from './optimizations';\n\nexport { parse, transform, optimize, generate };\nexport { generateSignalOptimized };\n\n// ============================================================\n// LRU 编译缓存\n// ============================================================\n\n/** LRU 缓存条目 */\ninterface CompileCacheEntry {\n  code: string;\n  preamble: string;\n  // FIX: P1-24 使用 RootNode 类型替代 any，提供类型安全\n  ast: RootNode;\n}\n\n/** 最大缓存条目数 */\nconst MAX_CACHE_SIZE = 100;\n\n/** FIX: P2-22 编译警告级别可配置 */\nexport type WarningLevel = 'silent' | 'error' | 'warn';\n\nlet globalWarningLevel: WarningLevel = 'warn';\n\nexport function setWarningLevel(level: WarningLevel): void {\n  globalWarningLevel = level;\n}\n\nexport function getWarningLevel(): WarningLevel {\n  return globalWarningLevel;\n}\n\n/** 编译缓存（Map 天然保持插入顺序，用于 LRU 淘汰） */\nconst compileCache = new Map<string, CompileCacheEntry>();\n\n/**\n * FIX: P2-2 编译结果缓存机制增强\n * 使用文件内容哈希作为缓存 key，提高缓存命中率和安全性\n */\n\n/** 内容哈希缓存 Map - 存储文件内容到哈希的映射 */\nconst contentHashCache = new Map<string, string>();\n\n/** FIX: P2-39 contentHashCache 添加 LRU 淘汰策略，避免无限增长导致内存泄漏 */\nconst MAX_CONTENT_HASH_CACHE_SIZE = 200;\n\n/** 缓存统计信息 */\ninterface CacheStats {\n  hits: number;\n  misses: number;\n  totalCompiles: number;\n  totalTime: number;\n}\n\nlet cacheStats: CacheStats = {\n  hits: 0,\n  misses: 0,\n  totalCompiles: 0,\n  totalTime: 0,\n};\n\n/**\n * 简单的字符串哈希函数（djb2），用于生成缓存键。\n * 不需要加密安全性，仅需良好的分布性。\n */\nfunction hashString(str: string): string {\n  let hash = 5381;\n  for (let i = 0; i < str.length; i++) {\n    hash = ((hash << 5) + hash + str.charCodeAt(i)) & 0xffffffff;\n  }\n  return String(hash >>> 0);\n}\n\n/**\n * FIX: P2-2 计算文件内容的 SHA-256 风格哈希（简化版）\n * 用于作为编译缓存的 key，确保相同内容产生相同的缓存键\n *\n * FIX: P2-40 使用 djb2 快速哈希作为 contentHashCache 的 key，\n * 而非完整模板字符串，大幅减少内存占用\n */\nfunction computeContentHash(content: string): string {\n  // FIX: P2-40 使用快速哈希作为缓存 key，避免存储完整模板字符串\n  const quickHash = hashString(content);\n\n  // 检查是否已有缓存的哈希\n  const cachedHash = contentHashCache.get(quickHash);\n  if (cachedHash) {\n    return cachedHash;\n  }\n\n  // 使用 djb2 哈希算法计算内容哈希（简化版 SHA-256 风格）\n  let hash1 = 5381;\n  let hash2 = 52711;\n\n  for (let i = 0; i < content.length; i++) {\n    const char = content.charCodeAt(i);\n    hash1 = ((hash1 << 5) + hash1 + char) & 0xffffffff;\n    hash2 = ((hash2 << 7) + hash2 + char) & 0xffffffff;\n  }\n\n  // 组合两个哈希值，提高碰撞抵抗\n  const combinedHash = `${hash1 >>> 0}-${hash2 >>> 0}`;\n\n  // FIX: P2-39 LRU 淘汰：超出最大缓存大小时删除最旧条目\n  if (contentHashCache.size >= MAX_CONTENT_HASH_CACHE_SIZE) {\n    const oldestKey = contentHashCache.keys().next().value;\n    if (oldestKey !== undefined) {\n      contentHashCache.delete(oldestKey);\n    }\n  }\n\n  // 缓存哈希结果（使用快速哈希作为 key）\n  contentHashCache.set(quickHash, combinedHash);\n\n  return combinedHash;\n}\n\n/**\n * 构建编译缓存键，确保读取和写入使用相同的键生成逻辑。\n * FIX: P1-25 缓存键覆盖所有影响编译结果的选项，\n * 包括 source、ssrMode、rendererMode、scopeId、inline、mode 等\n * FIX: P2-2 使用文件内容哈希作为 key 的一部分，提高缓存精度\n */\nfunction buildCompileCacheKey(source: string, options: CompilerOptions): string {\n  // FIX: P2-2 使用内容哈希替代原始 source 字符串，减少缓存键大小\n  const contentHash = computeContentHash(source);\n\n  return hashString(\n    contentHash +\n      '|' +\n      String(options.ssrMode ?? false) +\n      '|' +\n      String(options.rendererMode ?? '') +\n      '|' +\n      String(options.scopeId ?? '') +\n      '|' +\n      String(options.inline ?? false) +\n      '|' +\n      String(options.mode ?? '') +\n      '|' +\n      String(options.prefixIdentifiers ?? false) +\n      '|' +\n      String(options.whitespace ?? ''),\n  );\n}\n\n/**\n * 清除编译缓存。用于测试或需要释放内存时。\n * FIX: P2-2 同时清除内容哈希缓存\n */\nexport function clearCompileCache(): void {\n  compileCache.clear();\n  contentHashCache.clear();\n}\n\n/**\n * 获取当前编译缓存大小。用于调试和测试。\n */\nexport function getCompileCacheSize(): number {\n  return compileCache.size;\n}\n\n/**\n * FIX: P2-2 获取内容哈希缓存大小（用于调试）\n */\nexport function getContentHashCacheSize(): number {\n  return contentHashCache.size;\n}\n\n/**\n * 获取缓存统计信息\n */\nexport function getCacheStats(): CacheStats {\n  return { ...cacheStats };\n}\n\n/**\n * 重置缓存统计信息\n */\nexport function resetCacheStats(): void {\n  cacheStats = {\n    hits: 0,\n    misses: 0,\n    totalCompiles: 0,\n    totalTime: 0,\n  };\n}\n\nexport function compile(source: string, options: CompilerOptions = {}): CodegenResult {\n  const startTime = performance.now();\n  cacheStats.totalCompiles++;\n\n\n  // 0. 检查编译缓存（仅在无自定义 nodeTransforms/directiveTransforms 时使用缓存）\n  const hasCustomTransforms =\n    (options.nodeTransforms && options.nodeTransforms.length > 0) ||\n    (options.directiveTransforms && Object.keys(options.directiveTransforms).length > 0);\n\n  if (!hasCustomTransforms) {\n    const cacheKey = buildCompileCacheKey(source, options);\n    const cached = compileCache.get(cacheKey);\n    if (cached) {\n      // FIX: P2-41 接受非严格 LRU：缓存命中时不移动条目位置。\n      // 原实现通过 delete + set 将命中条目移到末尾以模拟 LRU，\n      // 但这会导致 Map 内部存储重组（V8 中 Map 的 delete 操作\n      // 在大量条目时可能触发哈希表重建），影响性能。\n      // 对于编译缓存场景，非严格 LRU（仅淘汰最旧条目）已足够。\n      cacheStats.hits++;\n      const endTime = performance.now();\n      cacheStats.totalTime += (endTime - startTime);\n      return { code: cached.code, preamble: cached.preamble, ast: cached.ast };\n    }\n    cacheStats.misses++;\n  }\n\n  // 1. Parse template to AST\n  const ast = parse(source, options);\n\n  // 2. Transform AST (包含原 optimize 阶段的 markConstants、hoistStatic、collectDynamicChildren)\n  // restOptions inherits ParserOptions & CodegenOptions from CompilerOptions via\n  // structural typing (TypeScript's excess property check does not apply when\n  // destructuring into a rest object). This ensures type compatibility without\n  // explicit casting.\n  const {\n    nodeTransforms: userNodeTransforms,\n    directiveTransforms: userDirectiveTransforms,\n    ssrMode,\n    ...restOptions\n  } = options;\n\n  // In SSR mode, filter out client-only directive transforms (v-on, v-model, v-show)\n  let directiveTransforms: Record<string, DirectiveTransform>;\n  if (ssrMode) {\n    const {\n      on: _on,\n      model: _model,\n      show: _show,\n      ...ssrDirectiveTransforms\n    } = builtInDirectiveTransforms;\n    directiveTransforms = {\n      ...ssrDirectiveTransforms,\n      ...(userDirectiveTransforms ?? {}),\n    };\n  } else {\n    directiveTransforms = {\n      ...builtInDirectiveTransforms,\n      ...(userDirectiveTransforms ?? {}),\n    };\n  }\n\n  const transformOptions = {\n    ...restOptions,\n    ssr: ssrMode ?? false,\n    nodeTransforms: [...builtInTransforms, ...(userNodeTransforms ?? [])],\n    directiveTransforms,\n  };\n  transform(ast, transformOptions);\n\n  // 3. Generate code\n  let codegenResult: CodegenResult;\n  if (ssrMode) {\n    codegenResult = generateSSR(ast, options);\n  } else if (options.rendererMode === 'signal' || options.rendererMode === 'vapor') {\n    // Phase 1.1: 使用优化版本的 Signal 代码生成器\n    // 当 optimizeSignal 选项为 true 时使用优化版本（默认为 true）\n    if (options.optimizeSignal !== false) {\n      codegenResult = generateSignalOptimized(ast, options);\n    } else {\n      codegenResult = generateSignal(ast, options);\n    }\n  } else {\n    // 默认 VNode 模式\n    codegenResult = generate(ast, options);\n  }\n\n  // 4. 存入缓存\n  if (!hasCustomTransforms) {\n    const cacheKey = buildCompileCacheKey(source, options);\n    // LRU 淘汰：超出最大缓存大小时删除最旧条目\n    if (compileCache.size >= MAX_CACHE_SIZE) {\n      const oldestKey = compileCache.keys().next().value;\n      if (oldestKey !== undefined) {\n        compileCache.delete(oldestKey);\n      }\n    }\n    compileCache.set(cacheKey, {\n      code: codegenResult.code,\n      preamble: codegenResult.preamble ?? '',\n      ast,\n    });\n  }\n\n  const endTime = performance.now();\n  cacheStats.totalTime += (endTime - startTime);\n\n  return codegenResult;\n}\n\n// 常量\nexport {\n  NodeTypes,\n  ElementTypes,\n  ConstantTypes,\n  TagType,\n  TextModes,\n  BindingTypes,\n  PatchFlags,\n  helperNameMap,\n} from './constants';\n\n// 类型定义\nexport type { RootNode } from './types';\nexport type { ElementNode } from './types';\nexport type { TextNode } from './types';\nexport type { CommentNode } from './types';\nexport type { InterpolationNode } from './types';\nexport type { AttributeNode } from './types';\nexport type { DirectiveNode } from './types';\nexport type { SimpleExpressionNode } from './types';\nexport type { CompoundExpressionNode } from './types';\nexport type { VNodeCall } from './types';\nexport type { JSCallExpression } from './types';\nexport type { JSObjectExpression } from './types';\nexport type { JSProperty } from './types';\nexport type { JSArrayExpression } from './types';\nexport type { JSFunctionExpression } from './types';\nexport type { JSConditionalExpression } from './types';\nexport type { JSCacheExpression } from './types';\nexport type { JSChildNode } from './types';\nexport type { TemplateChildNode } from './types';\nexport type { ExpressionNode } from './types';\nexport type { CompilerOptions } from './types';\nexport type { ParserOptions } from './types';\nexport type { TransformOptions } from './types';\nexport type { CodegenOptions } from './types';\nexport type { TransformContext } from './types';\nexport type { CodegenResult } from './types';\nexport type { NodeTransform } from './types';\nexport type { DirectiveTransform } from './types';\nexport type { DirectiveTransformResult } from './types';\nexport type { BindingMetadata } from './types';\nexport type { SourceLocation } from './types';\nexport type { ParentNode } from './types';\nexport type { BaseNode } from './types';\nexport type { Property } from './types';\nexport type { RawSourceMap } from './types';\nexport type { CacheStats };\n\n// AST helpers\nexport { createRoot } from './ast';\nexport { createElement } from './ast';\nexport { createText } from './ast';\nexport { createComment } from './ast';\nexport { createInterpolation } from './ast';\nexport { createAttribute } from './ast';\nexport { createDirective } from './ast';\nexport { createSimpleExpression } from './ast';\nexport { createCompoundExpression } from './ast';\nexport { createVNodeCall } from './ast';\nexport { createObjectExpression } from './ast';\nexport { createObjectProperty } from './ast';\nexport { createCallExpression } from './ast';\nexport { createConditionalExpression } from './ast';\nexport { createArrayExpression } from './ast';\n\n// 转换s\nexport { transformElement } from './transform';\nexport { transformIf } from './transform';\nexport { transformFor } from './transform';\nexport { transformOnce } from './transform';\nexport { transformSlot } from './transform';\nexport { transformBind } from './transform';\nexport { transformOn } from './transform';\nexport { transformModel } from './transform';\nexport { transformShow } from './transform';\nexport { transformVMemo } from './transform';\n\n// Source Map\nexport { SourceMapGenerator, createSourceMapGenerator } from './source-map';\nexport type { SourceMapping } from './source-map';\n\n// Note: generateSignal, generateSSR, SFC, and WASM exports are now available\n// via sub-path entries:\n//   import { generateSignal } from '@lytjs/compiler/signal'\n//   import { generateSSR } from '@lytjs/compiler/ssr'\n//   import { parseSFC, compileSFC } from '@lytjs/compiler/sfc'\n//   import { wasmCompile } from '@lytjs/compiler/wasm'\n","// src/sfc/custom-blocks.ts\n// SFC 自定义块处理器注册表\n\n// ============================================================\n// 类型定义\n// ============================================================\n\nexport interface CustomBlockProcessor {\n  name: string;\n  transform: (source: string, attrs: Record<string, string>) => { code: string; map?: object };\n}\n\n// ============================================================\n// 已知自定义块类型\n// ============================================================\n\n/**\n * LytJS SFC 中常用的预定义自定义块类型。\n * 这些被工具（IDE、linter 等）识别但没有\n * built-in processors unless registered.\n */\nexport const KNOWN_CUSTOM_BLOCKS: readonly string[] = ['i18n', 'route', 'graphql', 'md'] as const;\n\n// ============================================================\n// 处理器注册表\n// ============================================================\n\nconst processorMap = new Map<string, CustomBlockProcessor>();\n\n/**\n * 注册自定义块处理器。\n *\n * @param processor - The processor to register\n * @throws Error if a processor with the same name is already registered\n */\nexport function registerCustomBlockProcessor(processor: CustomBlockProcessor): void {\n  if (processorMap.has(processor.name)) {\n    if (__DEV__) {\n      console.warn(\n        `[custom-blocks] Overwriting existing custom block processor for \"${processor.name}\".`,\n      );\n    }\n  }\n  processorMap.set(processor.name, processor);\n}\n\n/**\n * 按名称获取已注册的自定义块处理器。\n *\n * @param name - The block type name\n * @returns The processor if registered, undefined otherwise\n */\nexport function getCustomBlockProcessor(name: string): CustomBlockProcessor | undefined {\n  return processorMap.get(name);\n}\n\n/**\n * 移除已注册的自定义块处理器。\n *\n * @param name - The block type name to unregister\n * @returns true if the processor was found and removed\n */\nexport function unregisterCustomBlockProcessor(name: string): boolean {\n  return processorMap.delete(name);\n}\n\n/**\n * 获取所有已注册自定义块处理器的名称。\n *\n * @returns Array of registered processor names\n */\nexport function getRegisteredCustomBlockProcessors(): string[] {\n  return Array.from(processorMap.keys());\n}\n","// src/sfc/compile.ts\n// SFC compiler - compiles SFCDescriptor into JS + CSS\n\nimport { compile } from '../index';\nimport type { CompilerOptions } from '../types';\nimport type { SFCDescriptor } from './parse';\nimport { getCustomBlockProcessor } from './custom-blocks';\n\n// ============================================================\n// 编译选项和结果类型\n// ============================================================\n\nexport interface SFCCompileOptions {\n  id?: string;\n  filename?: string;\n  scoped?: boolean;\n  ssr?: boolean;\n  rendererMode?: 'vnode' | 'signal' | 'vapor';\n}\n\nexport interface SFCCompileResult {\n  code: string;\n  css?: string;\n  scopedId?: string;\n  sourceMap?: object;\n  // FIX: P2-30 模块热替换稳定性：添加 HMR 相关元数据\n  /** 模块热替换 ID */\n  hmrId?: string;\n  /** 是否为 HMR 增量更新 */\n  isHmrUpdate?: boolean;\n}\n\n// ============================================================\n// compileSFC\n// ============================================================\n\n/**\n * 将 SFCDescriptor 编译为 JavaScript 模块字符串（和可选的 CSS）。\n *\n * @param descriptor - The parsed SFC descriptor\n * @param options - Compilation options\n * @returns SFCCompileResult with JS code and optional CSS\n */\nexport function compileSFC(\n  descriptor: SFCDescriptor,\n  options: SFCCompileOptions = {},\n): SFCCompileResult {\n  const {\n    id = generateScopeId(descriptor.filename),\n    filename = descriptor.filename,\n    scoped,\n    ssr = false,\n    rendererMode = 'vnode',\n  } = options;\n\n  const parts: string[] = [];\n\n  // 1. 编译 template block into a render function\n  let renderFnCode = '';\n  if (descriptor.template) {\n    const compilerOptions: CompilerOptions = {\n      filename,\n      ssr,\n      rendererMode,\n      scopeId: scoped ? id : undefined,\n    };\n    const templateResult = compile(descriptor.template.content, compilerOptions);\n    renderFnCode = templateResult.code;\n  }\n\n  // 2. Process script block\n  const scriptContent = descriptor.script?.content ?? '';\n  const scriptSetupContent = descriptor.scriptSetup?.content ?? '';\n\n  // 3. Process style blocks - extract CSS and apply scoping\n  let cssCode: string | undefined;\n  // 当显式提供 scoped 选项时，它控制所有 style 块。\n  // 当未提供 scoped 选项（undefined）时，各个 style 块的\n  // scoped attribute determines scoping.\n  const scopedId = scoped ? id : undefined;\n\n  if (descriptor.styles.length > 0) {\n    const cssParts: string[] = [];\n\n    for (const style of descriptor.styles) {\n      let css = style.content;\n\n      // 作用域 CSS 条件：scoped 选项为 true，或 scoped 选项未设置且\n      // the individual style block has the scoped attribute\n      const shouldScope = scoped === true || (scoped === undefined && style.scoped);\n      if (shouldScope) {\n        css = scopeCSS(css, scopedId!);\n      }\n\n      if (css.trim()) {\n        cssParts.push(css);\n      }\n    }\n\n    if (cssParts.length > 0) {\n      cssCode = cssParts.join('\\n\\n');\n    }\n  }\n\n  // 4. Process custom blocks\n  const customBlockImports: string[] = [];\n  for (const block of descriptor.customBlocks) {\n    const processor = getCustomBlockProcessor(block.type);\n    if (processor) {\n      const result = processor.transform(block.content, block.attrs);\n      customBlockImports.push(result.code);\n    }\n  }\n\n  // 5. Assemble the final JS module\n  parts.push(\n    generateModuleCode({\n      scriptContent,\n      scriptSetupContent,\n      renderFnCode,\n      scopedId,\n      filename,\n      customBlockImports,\n    }),\n  );\n\n  const result: SFCCompileResult = {\n    code: parts.join('\\n'),\n  };\n\n  if (cssCode) {\n    result.css = cssCode;\n  }\n\n  if (scopedId) {\n    result.scopedId = scopedId;\n  }\n\n  return result;\n}\n\n// ============================================================\n// Module Code Generation\n// ============================================================\n\ninterface ModuleCodeOptions {\n  scriptContent: string;\n  scriptSetupContent: string;\n  renderFnCode: string;\n  scopedId: string | undefined;\n  filename: string;\n  customBlockImports: string[];\n}\n\nfunction generateModuleCode(opts: ModuleCodeOptions): string {\n  const lines: string[] = [];\n\n  // Module preamble\n  lines.push(`/* Generated from ${opts.filename} */`);\n  lines.push('');\n\n  // Custom block imports\n  if (opts.customBlockImports.length > 0) {\n    for (const imp of opts.customBlockImports) {\n      lines.push(imp);\n    }\n    lines.push('');\n  }\n\n  // Script setup content (if present, goes before the main script)\n  if (opts.scriptSetupContent.trim()) {\n    lines.push('// <script setup>');\n    lines.push(opts.scriptSetupContent.trim());\n    lines.push('');\n  }\n\n  // Script content\n  if (opts.scriptContent.trim()) {\n    lines.push('// <script>');\n    lines.push(opts.scriptContent.trim());\n    lines.push('');\n  }\n\n  // 渲染函数 from template compilation\n  if (opts.renderFnCode) {\n    lines.push('// Template render function');\n    lines.push(opts.renderFnCode);\n    lines.push('');\n  }\n\n  // Scoped ID assignment\n  if (opts.scopedId) {\n    lines.push(`// Scoped styles`);\n    lines.push(`const __scopeId = ${JSON.stringify(opts.scopedId)};`);\n    lines.push('');\n  }\n\n  return lines.join('\\n');\n}\n\n// ============================================================\n// CSS Scoping\n// ============================================================\n\n/**\n * Add a scoped ID attribute selector to every CSS rule.\n * Transforms `.container { color: red; }` into `.container[data-v-abc123] { color: red; }`\n *\n * This is a simplified implementation. A production compiler would use\n * a proper CSS parser (e.g., postcss) for robust handling.\n *\n * FIX: P1-34 CSS scoping 正则增强：\n * - 正确处理伪类选择器（:hover, :focus, ::before 等）\n * - 正确处理属性选择器（[attr=value]）\n * - 正确处理多级嵌套选择器\n * - 跳过 @keyframes 内部的 from/to 百分比选择器\n *\n * FIX: P2-25 已知限制：当前正则实现不支持 CSS 嵌套规则（CSS Nesting），\n * 如 `.parent { .child { } }` 这种嵌套语法需要使用完整的 CSS 解析器处理。\n * 建议使用 PostCSS 等工具进行生产环境的 CSS 作用域处理。\n */\nfunction scopeCSS(css: string, scopeId: string): string {\n  const attrSelector = `[data-v-${scopeId}]`;\n\n  // Process each CSS rule block\n  return css.replace(\n    // FIX: P1-34 增强正则，正确匹配包含伪类、伪元素、属性选择器的复杂选择器\n    // FIX: P2-25 注意：此正则不支持 CSS 嵌套规则（CSS Nesting）\n    /([^{}@/][^{}]*?)\\{/g,\n    (match, selector: string) => {\n      // Skip @ rules (e.g., @media, @keyframes)\n      if (selector.trim().startsWith('@')) {\n        return match;\n      }\n\n      // 跳过 @keyframes 内部的 from/to/百分比选择器\n      const trimmedSelector = selector.trim();\n      if (/^(from|to|\\d+%)\\s*$/.test(trimmedSelector)) {\n        return match;\n      }\n\n      // FIX: P2-25 检测并警告嵌套规则（简单的启发式检测）\n      if (trimmedSelector.includes('{') || trimmedSelector.includes('}')) {\n        if (__DEV__) {\n          console.warn(\n            `[scopeCSS] 检测到可能的 CSS 嵌套规则，当前实现可能无法正确处理。` +\n              `建议使用 PostCSS 进行生产环境的 CSS 作用域处理。`,\n          );\n        }\n      }\n\n      // Split selector by comma to handle multiple selectors\n      const scopedSelectors = selector\n        .split(',')\n        .map((s: string) => {\n          const trimmed = s.trim();\n          if (!trimmed) return trimmed;\n          // For ::v-deep or ::deep, use a different scoping strategy\n          if (trimmed.includes('::v-deep') || trimmed.includes('::deep')) {\n            return trimmed;\n          }\n          // FIX: P1-34 将 scopeId 添加到选择器末尾（伪类/伪元素之前），\n          // 正确处理 :hover, ::before, :not() 等伪选择器\n          const pseudoMatch = trimmed.match(/^(.*?)(::?[a-zA-Z-]+(?:\\(.*?\\))?)$/);\n          if (pseudoMatch && pseudoMatch[2]) {\n            return `${pseudoMatch[1]}${attrSelector}${pseudoMatch[2]}`;\n          }\n          return `${trimmed}${attrSelector}`;\n        })\n        .join(', ');\n\n      return `${scopedSelectors}{`;\n    },\n  );\n}\n\n// ============================================================\n// Scope ID Generation\n// ============================================================\n\n/**\n * Generate a deterministic scope ID from a filename.\n * Uses a simple hash function for consistency.\n */\nfunction generateScopeId(filename: string): string {\n  let hash = 0;\n  for (let i = 0; i < filename.length; i++) {\n    const char = filename.charCodeAt(i);\n    hash = ((hash << 5) - hash + char) | 0;\n  }\n  // Convert to unsigned 32-bit hex string, take first 8 chars\n  return (hash >>> 0).toString(16).padStart(8, '0').slice(0, 8);\n}\n","// src/sfc/typescript.ts\n// 从 SFC 描述符生成 TypeScript 类型声明\n\nimport type { SFCDescriptor } from './parse';\n\n// ============================================================\n// 类型定义\n// ============================================================\n\nexport interface ComponentTypeInfo {\n  name: string;\n  props: PropDeclaration[];\n  emits: EmitDeclaration[];\n  exposed: string[];\n  slots: string[];\n}\n\nexport interface PropDeclaration {\n  name: string;\n  type: string;\n  required: boolean;\n  default?: string;\n}\n\nexport interface EmitDeclaration {\n  name: string;\n  payload?: string;\n}\n\n// ============================================================\n// 用于提取组件信息的正则表达式模式\n// ============================================================\n\n// 匹配 defineComponent<...>( 或 defineComponent(\n// FIX: P2-26 使用花括号计数替代简单的 <[^>]*>，支持嵌套泛型如 defineComponent<Props<T>>(\nconst RE_DEFINE_COMPONENT_START = /defineComponent\\s*(?:<)?\\s*\\(\\s*\\{/;\n\n// 匹配 props: { ... } - 我们将使用大括号计数进行提取\nconst RE_PROPS_START = /props\\s*:\\s*\\{/;\n\n// 匹配 emits: [...] 或 emits: { ... }\nconst RE_EMITS_ARRAY = /emits\\s*:\\s*\\[([^\\]]*)\\]/;\nconst RE_EMITS_OBJECT_START = /emits\\s*:\\s*\\{/;\n\n// 匹配单个 prop 声明：propName: { type: ..., required: ... }\nconst RE_PROP_DECLARATION =\n  /(\\w+)\\s*:\\s*\\{[^}]*type\\s*:\\s*(\\w+)[^}]*required\\s*:\\s*(true|false)[^}]*/g;\n\n// 匹配简单 prop 声明：propName: Type\nconst RE_PROP_SIMPLE = /(\\w+)\\s*:\\s*(String|Number|Boolean|Array|Object|Function|Symbol)/g;\n\n// 匹配 export default { ... }\nconst RE_EXPORT_DEFAULT_START = /export\\s+default\\s+\\{/;\n\n// 匹配组件名称\nconst RE_COMPONENT_NAME = /name\\s*:\\s*['\"](\\w+)['\"]/;\n\n// ============================================================\n// generateComponentTypes\n// ============================================================\n\n/**\n * 从 SFC 描述符生成 TypeScript 类型声明（.d.ts 内容）。\n *\n * 这是一个使用基于正则表达式提取的简化实现。\n * A production version would use a proper TypeScript AST parser.\n *\n * @param descriptor - The parsed SFC descriptor\n * @returns Generated .d.ts file content as a string\n */\nexport function generateComponentTypes(descriptor: SFCDescriptor): string {\n  const info = extractComponentInfo(descriptor);\n  const lines: string[] = [];\n\n  // 文件头\n  const componentName = info.name || toPascalCase(stripExtension(descriptor.filename));\n  lines.push(`// Type declarations for ${componentName}`);\n  lines.push(`// Auto-generated by @lytjs/compiler`);\n  lines.push('');\n\n  // 基础组件类型的导入语句\n  lines.push(`import type { Component } from '@lytjs/renderer';`);\n  lines.push('');\n\n  // 生成 props 接口\n  if (info.props.length > 0) {\n    lines.push(`export interface ${componentName}Props {`);\n    for (const prop of info.props) {\n      const optional = prop.required ? '' : '?';\n      const defaultSuffix = prop.default !== undefined ? ` // default: ${prop.default}` : '';\n      lines.push(`  readonly ${prop.name}${optional}: ${prop.type};${defaultSuffix}`);\n    }\n    lines.push('}');\n    lines.push('');\n  }\n\n  // 生成 emits 类型\n  if (info.emits.length > 0) {\n    lines.push(`export interface ${componentName}Emits {`);\n    for (const emit of info.emits) {\n      const eventHandler = `on${capitalize(emit.name)}: `;\n      if (emit.payload) {\n        lines.push(`  ${eventHandler}(payload: ${emit.payload}): void;`);\n      } else {\n        lines.push(`  ${eventHandler}(): void;`);\n      }\n    }\n    lines.push('}');\n    lines.push('');\n  }\n\n  // 生成组件实例类型\n  const propsType = info.props.length > 0 ? `${componentName}Props` : '{}';\n  const emitsType = info.emits.length > 0 ? `, ${componentName}Emits` : '';\n  lines.push(\n    `export type ${componentName}Instance = InstanceType<Component<${propsType}${emitsType}>>;`,\n  );\n  lines.push('');\n\n  // 默认导出声明\n  lines.push(`declare const _default: Component<${propsType}${emitsType}>;`);\n  lines.push(`export default _default;`);\n  lines.push('');\n\n  return lines.join('\\n');\n}\n\n// ============================================================\n// 组件信息提取\n// ============================================================\n\n/**\n * 从 SFC 描述符的 script 块中提取组件类型信息。\n */\nfunction extractComponentInfo(descriptor: SFCDescriptor): ComponentTypeInfo {\n  const scriptContent = descriptor.script?.content ?? descriptor.scriptSetup?.content ?? '';\n\n  const info: ComponentTypeInfo = {\n    name: '',\n    props: [],\n    emits: [],\n    exposed: [],\n    slots: [],\n  };\n\n  if (!scriptContent.trim()) {\n    return info;\n  }\n\n  // 提取组件名称\n  const nameMatch = scriptContent.match(RE_COMPONENT_NAME);\n  if (nameMatch) {\n    info.name = nameMatch[1]!;\n  }\n\n  // 首先尝试从 defineComponent 提取\n  const dcStartMatch = scriptContent.match(RE_DEFINE_COMPONENT_START);\n  if (dcStartMatch) {\n    const dcBody = extractBracedContent(\n      scriptContent,\n      dcStartMatch.index! + dcStartMatch[0]!.length - 1,\n    );\n    if (dcBody) {\n      extractPropsFromObject(dcBody, info);\n      extractEmitsFromObject(dcBody, info);\n    }\n  } else {\n    // 回退到 export default { ... }\n    const edStartMatch = scriptContent.match(RE_EXPORT_DEFAULT_START);\n    if (edStartMatch) {\n      const exportBody = extractBracedContent(\n        scriptContent,\n        edStartMatch.index! + edStartMatch[0]!.length - 1,\n      );\n      if (exportBody) {\n        extractPropsFromObject(exportBody, info);\n        extractEmitsFromObject(exportBody, info);\n      }\n    }\n  }\n\n  return info;\n}\n\n/**\n * 从给定位置提取大括号内包含的内容。\n * 使用大括号计数正确处理嵌套对象。\n *\n * @param source - The full source string\n * @param openBraceIndex - The index of the opening '{'\n * @returns The content between the outermost braces (excluding the braces), or null\n */\nfunction extractBracedContent(source: string, openBraceIndex: number): string | null {\n  if (source[openBraceIndex] !== '{') return null;\n\n  let depth = 0;\n  let inString: string | null = null;\n  let escaped = false;\n\n  for (let i = openBraceIndex; i < source.length; i++) {\n    const char = source[i]!;\n\n    if (escaped) {\n      escaped = false;\n      continue;\n    }\n\n    if (char === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (inString) {\n      if (char === inString) {\n        inString = null;\n      }\n      continue;\n    }\n\n    if (char === '\"' || char === \"'\" || char === '`') {\n      inString = char;\n      continue;\n    }\n\n    if (char === '{') {\n      depth++;\n    } else if (char === '}') {\n      depth--;\n      if (depth === 0) {\n        return source.slice(openBraceIndex + 1, i);\n      }\n    }\n  }\n\n  return null;\n}\n\n/**\n * 从对象字面量字符串中提取 props 声明。\n */\nfunction extractPropsFromObject(body: string, info: ComponentTypeInfo): void {\n  const propsStartMatch = body.match(RE_PROPS_START);\n  if (!propsStartMatch) {\n    return;\n  }\n\n  const propsBody = extractBracedContent(\n    body,\n    propsStartMatch.index! + propsStartMatch[0]!.length - 1,\n  );\n  if (!propsBody) return;\n\n  // 首先尝试详细 prop 声明：propName: { type: X, required: Y }\n  let match: RegExpExecArray | null;\n  RE_PROP_DECLARATION.lastIndex = 0;\n  while ((match = RE_PROP_DECLARATION.exec(propsBody)) !== null) {\n    const name = match[1]!;\n    const rawType = match[2]!;\n    const required = match[3] === 'true';\n    info.props.push({\n      name,\n      type: mapPropType(rawType),\n      required,\n    });\n  }\n\n  // 如果未找到详细声明，尝试简单的：propName: Type\n  if (info.props.length === 0) {\n    RE_PROP_SIMPLE.lastIndex = 0;\n    while ((match = RE_PROP_SIMPLE.exec(propsBody)) !== null) {\n      const name = match[1]!;\n      const rawType = match[2]!;\n      info.props.push({\n        name,\n        type: mapPropType(rawType),\n        required: false,\n      });\n    }\n  }\n}\n\n/**\n * 从对象字面量字符串中提取 emits 声明。\n */\nfunction extractEmitsFromObject(body: string, info: ComponentTypeInfo): void {\n  // 尝试数组形式：emits: ['event1', 'event2']\n  const arrayMatch = body.match(RE_EMITS_ARRAY);\n  if (arrayMatch) {\n    const events = arrayMatch[1]!;\n    const eventNames = events.match(/['\"](\\w+)['\"]/g);\n    if (eventNames) {\n      for (const event of eventNames) {\n        const name = event.replace(/['\"]/g, '');\n        info.emits.push({ name });\n      }\n    }\n    return;\n  }\n\n  // 尝试对象形式：emits: { event1: (payload: Type) => true }\n  const objectStartMatch = body.match(RE_EMITS_OBJECT_START);\n  if (objectStartMatch) {\n    const emitsBody = extractBracedContent(\n      body,\n      objectStartMatch.index! + objectStartMatch[0]!.length - 1,\n    );\n    if (emitsBody) {\n      const eventNames = emitsBody.match(/(\\w+)\\s*:/g);\n      if (eventNames) {\n        for (const event of eventNames) {\n          const name = event.replace(/[\\s:]/g, '');\n          info.emits.push({ name });\n        }\n      }\n    }\n    return;\n  }\n}\n\n// ============================================================\n// 类型映射工具函数\n// ============================================================\n\n/**\n * 将 Vue 风格的 prop 类型构造函数映射到 TypeScript 类型。\n */\nfunction mapPropType(rawType: string): string {\n  const typeMap: Record<string, string> = {\n    String: 'string',\n    Number: 'number',\n    Boolean: 'boolean',\n    Array: 'unknown[]',\n    Object: 'Record<string, unknown>',\n    Function: '(...args: unknown[]) => unknown',\n    Symbol: 'symbol',\n  };\n  return typeMap[rawType] ?? rawType;\n}\n\n/**\n * 将字符串首字母大写。\n */\nfunction capitalize(str: string): string {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * 将 kebab-case 或 snake_case 文件名转换为 PascalCase。\n */\nfunction toPascalCase(str: string): string {\n  return str\n    .split(/[-_]/)\n    .map((part) => capitalize(part))\n    .join('');\n}\n\n/**\n * 去除文件名的扩展名。\n */\nfunction stripExtension(filename: string): string {\n  const lastDot = filename.lastIndexOf('.');\n  return lastDot > 0 ? filename.slice(0, lastDot) : filename;\n}\n"]}