{"version":3,"sources":["../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/transform.ts","../src/source-map.ts","../src/codegen.ts","../src/codegen-ssr.ts","../src/wasm/wasm-compiler.ts","../src/wasm/wasm-parser.ts","../src/wasm/wasm-generator.ts"],"names":["MAX_REGEX_INPUT_LENGTH","VOID_ELEMENTS","escapeRegExp","END_TAG_CACHE_MAX_SIZE","LytErrorCodes","getErrorSuggestion","createCompilerError","MAX_INPUT_LENGTH","transform","describePatchFlag","escapeHTML","walk","parseInterpolation"],"mappings":"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","file":"wasm.cjs","sourcesContent":["// src/constants.ts\n// 所有枚举作为 `as const` 对象（isolatedModules 禁止 const enum）\n\nexport const NodeTypes = {\n  ROOT: 0,\n  ELEMENT: 1,\n  TEXT: 2,\n  COMMENT: 3,\n  INTERPOLATION: 4,\n  ATTRIBUTE: 5,\n  DIRECTIVE: 6,\n  SIMPLE_EXPRESSION: 7,\n  COMPOUND_EXPRESSION: 8,\n  VNODE_CALL: 9,\n  JS_CALL_EXPRESSION: 10,\n  JS_OBJECT_EXPRESSION: 11,\n  JS_PROPERTY: 12,\n  JS_ARRAY_EXPRESSION: 13,\n  JS_FUNCTION_EXPRESSION: 14,\n  JS_CONDITIONAL_EXPRESSION: 15,\n  JS_CACHE_EXPRESSION: 16,\n} as const;\n\nexport const ElementTypes = {\n  ELEMENT: 0,\n  COMPONENT: 1,\n  SLOT: 2,\n  TEMPLATE: 3,\n} as const;\n\nexport const ConstantTypes = {\n  NOT_CONSTANT: 0,\n  CAN_SKIP_PATCH: 1,\n  CAN_HOIST: 2,\n  CAN_STRINGIFY: 3,\n} as const;\n\nexport const TagType = {\n  Start: 0,\n  End: 1,\n} as const;\n\nexport const TextModes = {\n  DATA: 0,\n  RCDATA: 1,\n  RAWTEXT: 2,\n  CDATA: 3,\n} as const;\n\nexport const BindingTypes = {\n  DATA: 'data' as const,\n  PROPS: 'props' as const,\n  SETUP: 'setup' as const,\n  LITERAL_CONST: 'literal-const' as const,\n} as const;\n\nexport { PatchFlags } from '@lytjs/common-vnode';\n\n// 运行时辅助函数名称\nexport const VNodeHook = {\n  BEFORE_MOUNT: 'bm',\n  MOUNTED: 'm',\n  BEFORE_UPDATE: 'bu',\n  UPDATED: 'u',\n  BEFORE_UNMOUNT: 'bum',\n  UNMOUNTED: 'um',\n} as const;\n\n// 运行时辅助函数符号\nexport const RENDER_HELPER = 'renderHelper' as const;\n\n// 代码生成的辅助函数名称映射\nexport const helperNameMap: Record<string, string> = {\n  CREATE_VNODE: 'createElementVNode',\n  CREATE_ELEMENT_VNODE: 'createElementVNode',\n  CREATE_COMMENT: 'createCommentVNode',\n  CREATE_TEXT: 'createTextVNode',\n  CREATE_STATIC: 'createStaticVNode',\n  RESOLVE_COMPONENT: 'resolveComponent',\n  RESOLVE_DYNAMIC_COMPONENT: 'resolveDynamicComponent',\n  RESOLVE_DIRECTIVE: 'resolveDirective',\n  RENDER_LIST: 'renderList',\n  RENDER_SLOT: 'renderSlot',\n  CREATE_SLOTS: 'createSlots',\n  TO_DISPLAY_STRING: 'toDisplayString',\n  MERGE_PROPS: 'mergeProps',\n  TO_HANDLER_KEY: 'toHandlerKey',\n  SET_BLOCK_TRACKING: 'setBlockTracking',\n  CREATE_BLOCK: 'createBlock',\n  OPEN_BLOCK: 'openBlock',\n  WITH_CTX: 'withCtx',\n  NORMALIZE_CLASS: 'normalizeClass',\n  NORMALIZE_STYLE: 'normalizeStyle',\n  NORMALIZE_PROPS: 'normalizeProps',\n  GUARD_REACTIVE_PROPS: 'guardReactiveProps',\n  SANITIZE_HTML: 'sanitizeHTML',\n  WITH_MEMO: 'withMemo',\n} as const;\n\n/**\n * 支持的裸指令名集合（\"所见即所得\"模式）\n * 这些指令名在模板中无需 v- 前缀即可被识别\n */\nexport const BARE_DIRECTIVE_NAMES = new Set([\n  'if',\n  'else-if',\n  'else',\n  'for',\n  'each',\n  'model',\n  'show',\n  'text',\n  'html',\n  'once',\n  'memo',\n  'pre',\n  'cloak',\n]);\n\n/**\n * 裸指令名与 HTML 原生属性的冲突规则\n * key: 指令名, value: 在这些标签上不识别为指令（视为原生属性）\n */\nexport const BARE_DIRECTIVE_CONFLICTS: Record<string, Set<string>> = {\n  for: new Set(['label', 'output']),\n  show: new Set(['dialog']),\n  text: new Set([]), // text 仅与 SVG <text> 元素标签冲突，不影响属性解析\n};\n\n/**\n * 需要通过值格式启发式判断的指令名\n * key: 指令名, value: 用于匹配指令值格式的正则表达式\n */\nexport const BARE_DIRECTIVE_VALUE_PATTERNS: Record<string, RegExp> = {\n  for: /^\\s*\\(?[\\w$]+\\s*(?:,\\s*[\\w$]+)?\\s+(?:in|of)\\s+/, // \"item in list\" 或 \"(item, index) of items\"\n};\n","// src/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/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-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","/**\n * @lytjs/compiler - WASM Compiler Interface\n * WASM-ready 浏览器端编译器接口。\n * 当前使用 JavaScript 模拟实现，接口设计兼容真实 WASM 模块，\n * 便于后续无缝替换。\n */\n\nimport { parse } from '../parser';\nimport { transform } from '../transform';\nimport { generate } from '../codegen';\nimport { generateSSR } from '../codegen-ssr';\nimport { NodeTypes } from '../constants';\nimport type {\n  RootNode,\n  TemplateChildNode,\n  ElementNode,\n  SourceLocation,\n  TextNode,\n  CommentNode,\n  InterpolationNode,\n  SimpleExpressionNode,\n  NodeTransform,\n  TransformOptions,\n} from '../types';\n\n// ============================================================\n// 类型定义\n// ============================================================\n\n/** WASM 编译选项 */\nexport interface WASMCompileOptions {\n  /** 编译模式：'module' 生成 ES module 导出，'function' 生成独立函数 */\n  mode?: 'module' | 'function';\n  /** 是否内联编译（跳过 hoist 优化） */\n  inline?: boolean;\n  /** 是否启用 SSR 模式 */\n  ssr?: boolean;\n  /** 模板文件名，用于错误提示和 source map */\n  filename?: string;\n}\n\n/** WASM 编译结果 */\nexport interface WASMCompileResult {\n  /** 生成的渲染函数代码 */\n  code: string;\n  /** 序列化后的 AST 节点数组 */\n  ast: ASTNode[];\n  /** 编译错误列表 */\n  errors: WASMCompileError[];\n  /** 编译警告列表 */\n  warnings: WASMCompileWarning[];\n  /** 提取的渲染函数名称 */\n  renderFn: string;\n  /** 静态节点数量 */\n  staticCount: number;\n  /** 动态节点数量 */\n  dynamicCount: number;\n  /** 编译耗时（毫秒） */\n  compileTime: number;\n}\n\n/** WASM 编译错误 */\nexport interface WASMCompileError {\n  /** 错误信息 */\n  message: string;\n  /** 错误位置 */\n  loc?: SourceLocation;\n  /** 错误代码标识 */\n  code?: string;\n}\n\n/** WASM 编译警告 */\nexport interface WASMCompileWarning {\n  /** 警告信息 */\n  message: string;\n  /** 警告位置 */\n  loc?: SourceLocation;\n}\n\n/** WASM 转换选项 */\nexport interface WASMTransformOptions {\n  /** 是否标记静态节点 */\n  markStatic?: boolean;\n  /** 自定义节点转换器 */\n  nodeTransforms?: NodeTransform[];\n}\n\n/** WASM 代码生成选项 */\nexport interface WASMGenerateOptions {\n  /** 代码生成模式 */\n  mode?: 'module' | 'function';\n  /** 代码前缀（如 import 语句） */\n  prefix?: string;\n  /** 是否内联生成 */\n  inline?: boolean;\n}\n\n/** 序列化 AST 节点（浏览器可传输的 JSON 友好格式） */\nexport interface ASTNode {\n  /** 节点类型 */\n  type: string;\n  /** 节点标签名（仅元素节点） */\n  tag?: string;\n  /** 子节点 */\n  children?: ASTNode[];\n  /** 属性列表 */\n  props?: Array<{ name: string; value?: string; dynamic?: boolean }>;\n  /** 文本内容（仅文本/插值节点） */\n  content?: string;\n  /** 是否为静态节点 */\n  isStatic?: boolean;\n  /** patch flag（仅元素节点） */\n  patchFlag?: number;\n  /** 源码位置 */\n  loc?: SourceLocation;\n}\n\n/** Token 类型 */\nexport interface Token {\n  type:\n    | 'tag-open'\n    | 'tag-close'\n    | 'tag-name'\n    | 'attr-name'\n    | 'attr-value'\n    | 'text'\n    | 'interpolation'\n    | 'comment';\n  value: string;\n  loc?: SourceLocation;\n}\n\n// ============================================================\n// wasmCompile — 主编译函数\n// ============================================================\n\n/**\n * WASM 编译器入口函数。\n * 执行完整的 parse -> transform -> generate 流程，\n * 返回结构化的编译结果。\n */\nexport function wasmCompile(source: string, options: WASMCompileOptions = {}): WASMCompileResult {\n  const startTime = performance.now();\n  const errors: WASMCompileError[] = [];\n  const warnings: WASMCompileWarning[] = [];\n\n  const { mode = 'module', inline = false, ssr = false, filename = 'template.html' } = options;\n\n  // 1. Parse\n  // FIX: P2-29 错误处理增强：添加更详细的错误上下文信息\n  let root: RootNode;\n  try {\n    root = parse(source, {\n      onError: (error: Error) => {\n        errors.push({ message: error.message, code: 'PARSE_ERROR' });\n      },\n    });\n  } catch (error) {\n    const err = error as Error;\n    return {\n      code: '',\n      ast: [],\n      errors: [{ message: err.message, code: 'PARSE_ERROR' }],\n      warnings,\n      renderFn: 'render',\n      staticCount: 0,\n      dynamicCount: 0,\n      compileTime: performance.now() - startTime,\n    };\n  }\n\n  // 2. Transform\n  try {\n    // FIX: P2-30 直接导入 TransformOptions 类型，避免动态 import 类型断言\n    // FIX: P1-33 定义 WASM 接口类型替代 as any，使用精确的 TransformOptions 类型确保类型安全\n    const transformOptions: TransformOptions = {\n      ssr,\n      inline,\n      onError: (error: Error) => {\n        errors.push({ message: error.message, code: 'TRANSFORM_ERROR' });\n      },\n      onWarn: (warning: string) => {\n        warnings.push({ message: warning });\n      },\n    };\n    transform(root, transformOptions);\n  } catch (error) {\n    const err = error as Error;\n    return {\n      code: '',\n      ast: serializeAST(root),\n      errors: [...errors, { message: err.message, code: 'TRANSFORM_ERROR' }],\n      warnings,\n      renderFn: 'render',\n      staticCount: 0,\n      dynamicCount: 0,\n      compileTime: performance.now() - startTime,\n    };\n  }\n\n  // 3. Generate\n  let code: string;\n  try {\n    if (ssr) {\n      const result = generateSSR(root, { filename, mode });\n      code = result.code;\n    } else {\n      const result = generate(root, { filename, mode, sourceMap: false });\n      code = result.code;\n    }\n  } catch (error) {\n    const err = error as Error;\n    return {\n      code: '',\n      ast: serializeAST(root),\n      errors: [...errors, { message: err.message, code: 'GENERATE_ERROR' }],\n      warnings,\n      renderFn: 'render',\n      staticCount: 0,\n      dynamicCount: 0,\n      compileTime: performance.now() - startTime,\n    };\n  }\n\n  // 4. 序列化 AST 和统计节点\n  const astNodes = serializeAST(root);\n  const { staticCount, dynamicCount } = countNodes(root);\n  const compileTime = performance.now() - startTime;\n\n  return {\n    code,\n    ast: astNodes,\n    errors,\n    warnings,\n    renderFn: 'render',\n    staticCount,\n    dynamicCount,\n    compileTime,\n  };\n}\n\n// ============================================================\n// AST 序列化\n// ============================================================\n\n/**\n * 将编译器内部 AST 序列化为 JSON 友好的 ASTNode[] 格式。\n */\nexport function serializeAST(root: RootNode): ASTNode[] {\n  return root.children.map((child) => serializeNode(child));\n}\n\n// FIX: P2-29 使用正确的类型断言替代 any\nfunction serializeNode(node: TemplateChildNode): ASTNode {\n  switch (node.type) {\n    case NodeTypes.ELEMENT: {\n      const el = node as ElementNode;\n      return {\n        type: 'Element',\n        tag: el.tag,\n        children: el.children.map((c) => serializeNode(c)),\n        props: el.props.map((p) => {\n          if (p.type === NodeTypes.ATTRIBUTE) {\n            return { name: p.name, value: p.value?.content };\n          }\n          // FIX: P2-29 使用类型守卫替代 any\n          const exp = p.exp as SimpleExpressionNode | undefined;\n          return {\n            name: `v-${p.name}`,\n            value: exp?.content,\n            dynamic: true,\n          };\n        }),\n        isStatic: el.isStatic,\n        patchFlag: el.patchFlag,\n        loc: node.loc,\n      };\n    }\n    case NodeTypes.TEXT: {\n      const textNode = node as TextNode;\n      return {\n        type: 'Text',\n        content: textNode.content,\n        isStatic: textNode.isStatic,\n        loc: node.loc,\n      };\n    }\n    case NodeTypes.INTERPOLATION: {\n      const interpNode = node as InterpolationNode;\n      const expContent = interpNode.content as SimpleExpressionNode;\n      return {\n        type: 'Interpolation',\n        content: expContent?.content ?? '',\n        isStatic: false,\n        loc: node.loc,\n      };\n    }\n    case NodeTypes.COMMENT: {\n      const commentNode = node as CommentNode;\n      return {\n        type: 'Comment',\n        content: commentNode.content,\n        loc: node.loc,\n      };\n    }\n    default:\n      return { type: `Unknown(${node.type})`, loc: node.loc };\n  }\n}\n\n// ============================================================\n// 节点统计\n// ============================================================\n\nfunction countNodes(root: RootNode): { staticCount: number; dynamicCount: number } {\n  let staticCount = 0;\n  let dynamicCount = 0;\n\n  function walk(node: TemplateChildNode): void {\n    switch (node.type) {\n      case NodeTypes.ELEMENT: {\n        const el = node as ElementNode;\n        if (el.isStatic) {\n          staticCount++;\n        } else {\n          dynamicCount++;\n        }\n        for (const child of el.children) {\n          walk(child);\n        }\n        break;\n      }\n      case NodeTypes.TEXT:\n      case NodeTypes.COMMENT:\n        staticCount++;\n        break;\n      case NodeTypes.INTERPOLATION:\n        dynamicCount++;\n        break;\n    }\n  }\n\n  for (const child of root.children) {\n    walk(child);\n  }\n\n  return { staticCount, dynamicCount };\n}\n","/**\n * @lytjs/compiler - WASM Parser Interface\n * 封装 Parser 相关的 WASM-ready 接口。\n */\n\nimport { parse } from '../parser';\nimport { NodeTypes } from '../constants';\nimport type {\n  RootNode,\n  TemplateChildNode,\n  ElementNode,\n  TextNode,\n  InterpolationNode,\n  CommentNode,\n  AttributeNode,\n  DirectiveNode,\n  SimpleExpressionNode,\n} from '../types';\nimport type { ASTNode, Token } from './wasm-compiler';\n\n// ============================================================\n// tokenize — 模板分词\n// ============================================================\n\n/**\n * 将模板源码分词为 Token 流。\n */\nexport function tokenize(source: string): Token[] {\n  const tokens: Token[] = [];\n  let i = 0;\n\n  while (i < source.length) {\n    const rest = source.slice(i);\n\n    // 注释\n    if (rest.startsWith('<!--')) {\n      const end = source.indexOf('-->', i);\n      const endIndex = end === -1 ? source.length : end + 3;\n      tokens.push({ type: 'comment', value: source.slice(i, endIndex) });\n      i = endIndex;\n      continue;\n    }\n\n    // 插值\n    if (rest.startsWith('{{')) {\n      const closeIndex = findInterpolationEnd(source, i + 2);\n      if (closeIndex !== -1) {\n        tokens.push({ type: 'interpolation', value: source.slice(i, closeIndex + 2) });\n        i = closeIndex + 2;\n        continue;\n      }\n    }\n\n    // 标签\n    if (rest.startsWith('<')) {\n      // 闭合标签\n      if (rest[1] === '/') {\n        const match = rest.match(/^<\\/([a-zA-Z][a-zA-Z0-9-]*)\\s*>/);\n        if (match) {\n          tokens.push({ type: 'tag-close', value: match[0] });\n          i += match[0].length;\n          continue;\n        }\n      }\n\n      // 开始标签\n      const tagMatch = rest.match(/^<([a-zA-Z][a-zA-Z0-9-]*)/);\n      if (tagMatch) {\n        tokens.push({ type: 'tag-open', value: `<${tagMatch[1]}` });\n        i += tagMatch[0].length;\n\n        // 解析属性\n        while (\n          i < source.length &&\n          !source.slice(i).startsWith('>') &&\n          !source.slice(i).startsWith('/>')\n        ) {\n          const attrMatch = source.slice(i).match(/^\\s+([^\\t\\r\\n\\f />=][^\\t\\r\\n\\f />=:]*)/);\n          if (attrMatch) {\n            tokens.push({ type: 'attr-name', value: attrMatch[1]! });\n            i += attrMatch[0].length;\n\n            if (source[i] === '=') {\n              i++; // skip =\n              const valueMatch = source.slice(i).match(/^(\"[^\"]*\"|'[^']*'|[^\\s>]+)/);\n              if (valueMatch) {\n                tokens.push({ type: 'attr-value', value: valueMatch[1]! });\n                i += valueMatch[0].length;\n              }\n            }\n          } else {\n            i++; // skip whitespace or unexpected char\n          }\n        }\n\n        // 跳过 > 或 />\n        if (source.slice(i).startsWith('/>')) {\n          i += 2;\n        } else if (source[i] === '>') {\n          i++;\n        }\n        continue;\n      }\n    }\n\n    // 文本\n    const nextTag = source.indexOf('<', i);\n    const nextInterp = source.indexOf('{{', i);\n    let textEnd = source.length;\n    if (nextTag !== -1 && nextTag < textEnd) textEnd = nextTag;\n    if (nextInterp !== -1 && nextInterp < textEnd) textEnd = nextInterp;\n    if (textEnd > i) {\n      tokens.push({ type: 'text', value: source.slice(i, textEnd) });\n      i = textEnd;\n    } else {\n      i++;\n    }\n  }\n\n  return tokens;\n}\n\nfunction findInterpolationEnd(source: string, start: number): number {\n  let inString: string | null = null;\n  let backslashCount = 0;\n\n  for (let i = start; i < source.length; i++) {\n    const char = source[i];\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 === \"'\" || char === '`') {\n        inString = char;\n      } else if (char === '}' && source[i + 1] === '}') {\n        return i;\n      }\n    }\n  }\n\n  return -1;\n}\n\n// ============================================================\n// buildAST — 从源码构建 AST\n// ============================================================\n\n/**\n * 将模板源码解析为序列化 AST。\n */\nexport function buildAST(source: string): ASTNode[] {\n  const root = parse(source);\n  return serializeASTSimple(root);\n}\n\nfunction serializeASTSimple(root: RootNode): ASTNode[] {\n  return root.children.map(serializeSimpleNode);\n}\n\nfunction serializeSimpleNode(node: TemplateChildNode): ASTNode {\n  switch (node.type) {\n    case NodeTypes.ELEMENT: {\n      const el = node as ElementNode;\n      return {\n        type: 'Element',\n        tag: el.tag,\n        children: el.children.map(serializeSimpleNode),\n        props: el.props.map((p: AttributeNode | DirectiveNode) => {\n          if (p.type === NodeTypes.ATTRIBUTE) {\n            return { name: p.name, value: p.value?.content };\n          }\n          return {\n            name: `v-${p.name}`,\n            value: (p.exp as { content?: string } | undefined)?.content,\n          };\n        }),\n        isStatic: el.isStatic,\n        patchFlag: el.patchFlag,\n      };\n    }\n    case NodeTypes.TEXT: {\n      const textNode = node as TextNode;\n      return { type: 'Text', content: textNode.content, isStatic: textNode.isStatic };\n    }\n    case NodeTypes.INTERPOLATION: {\n      const interpNode = node as InterpolationNode;\n      const content =\n        interpNode.content.type === NodeTypes.SIMPLE_EXPRESSION\n          ? (interpNode.content as SimpleExpressionNode).content\n          : '';\n      return { type: 'Interpolation', content };\n    }\n    case NodeTypes.COMMENT: {\n      const commentNode = node as CommentNode;\n      return { type: 'Comment', content: commentNode.content };\n    }\n    default:\n      return { type: `Unknown(${node.type})` };\n  }\n}\n\n// ============================================================\n// parseInterpolation — 解析插值表达式\n// ============================================================\n\n/**\n * 解析 {{ expression }} 中的表达式内容。\n */\nexport function parseInterpolation(source: string): string | null {\n  const trimmed = source.trim();\n  if (!trimmed.startsWith('{{') || !trimmed.endsWith('}}')) {\n    return null;\n  }\n\n  const content = trimmed.slice(2, -2).trim();\n  if (!content) {\n    return null;\n  }\n\n  return content;\n}\n","/**\n * @lytjs/compiler - WASM Generator Interface\n * 封装 Generator 相关的 WASM-ready 接口。\n */\n\nimport { parse } from '../parser';\nimport { transform } from '../transform';\nimport { generate } from '../codegen';\nimport { generateSSR } from '../codegen-ssr';\nimport { NodeTypes } from '../constants';\nimport type { ElementNode, TemplateChildNode, RootNode, TransformOptions } from '../types';\nimport type { WASMGenerateOptions } from './wasm-compiler';\n\n// ============================================================\n// generateRenderCode — 生成渲染函数代码\n// ============================================================\n\n/**\n * 从模板源码生成渲染函数代码。\n */\nexport function generateRenderCode(source: string, options: WASMGenerateOptions = {}): string {\n  const { mode = 'module', prefix = '' } = options;\n  const ssr = (options as unknown as { ssr?: boolean }).ssr ?? false;\n\n  const root = parse(source);\n  transform(root, { ssr } as TransformOptions);\n\n  let code: string;\n  if (ssr) {\n    const result = generateSSR(root, { mode });\n    code = result.code;\n  } else {\n    const result = generate(root, { mode, sourceMap: false });\n    code = result.code;\n  }\n\n  return prefix ? `${prefix}\\n${code}` : code;\n}\n\n// ============================================================\n// generateHoistedCode — 生成静态提升代码\n// ============================================================\n\n/**\n * 生成静态提升（hoisted）变量的声明代码。\n */\nexport function generateHoistedCode(source: string): string {\n  const root = parse(source);\n  transform(root, {});\n\n  if (!root.hoists || root.hoists.length === 0) {\n    return '';\n  }\n\n  const lines: string[] = [];\n  for (let i = 0; i < root.hoists.length; i++) {\n    const hoistedNode = root.hoists[i];\n    // 为每个 hoisted 节点创建独立的 RootNode\n    const hoistRoot = {\n      type: NodeTypes.ROOT,\n      children: [],\n      helpers: [],\n      components: [],\n      directives: [],\n      hoists: [],\n      codegenNode: hoistedNode,\n      imports: [],\n      cached: 0,\n      temps: 0,\n      loc: {\n        start: { line: 1, column: 1, offset: 0 },\n        end: { line: 1, column: 1, offset: 0 },\n        source: '',\n      },\n    };\n    const result = generate(hoistRoot as RootNode, { sourceMap: false });\n    lines.push(`const _hoisted_${i + 1} = ${result.code.trim()}`);\n  }\n\n  return lines.join('\\n');\n}\n\n// ============================================================\n// generatePatchFlags — 生成 Patch Flag 映射\n// ============================================================\n\n/**\n * 遍历 AST，收集所有元素的 patch flag。\n */\nexport function generatePatchFlags(source: string): Record<string, number> {\n  const root = parse(source);\n  transform(root, {});\n\n  const flags: Record<string, number> = {};\n\n  // FIX: P2-29 数组遍历优化 - 使用 for 循环替代 forEach\n  function walk(node: TemplateChildNode, path: string): void {\n    if (node.type === NodeTypes.ELEMENT) {\n      const el = node as ElementNode;\n      if (el.patchFlag && el.patchFlag !== 0) {\n        flags[path] = el.patchFlag;\n      }\n      // FIX: P2-29 使用 for 循环替代 forEach\n      for (let i = 0; i < el.children.length; i++) {\n        walk(el.children[i]!, `${el.tag}.${i}`);\n      }\n    }\n  }\n\n  // FIX: P2-29 使用 for 循环替代 forEach\n  for (let i = 0; i < root.children.length; i++) {\n    walk(root.children[i]!, `root.${i}`);\n  }\n\n  return flags;\n}\n"]}