{"version":3,"sources":["../src/constants.ts","../src/codegen-ssr.ts"],"names":[],"mappings":"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","file":"ssr.mjs","sourcesContent":["// src/constants.ts\n// 所有枚举作为 `as const` 对象（isolatedModules 禁止 const enum）\n\nexport const NodeTypes = {\n  ROOT: 0,\n  ELEMENT: 1,\n  TEXT: 2,\n  COMMENT: 3,\n  INTERPOLATION: 4,\n  ATTRIBUTE: 5,\n  DIRECTIVE: 6,\n  SIMPLE_EXPRESSION: 7,\n  COMPOUND_EXPRESSION: 8,\n  VNODE_CALL: 9,\n  JS_CALL_EXPRESSION: 10,\n  JS_OBJECT_EXPRESSION: 11,\n  JS_PROPERTY: 12,\n  JS_ARRAY_EXPRESSION: 13,\n  JS_FUNCTION_EXPRESSION: 14,\n  JS_CONDITIONAL_EXPRESSION: 15,\n  JS_CACHE_EXPRESSION: 16,\n} as const;\n\nexport const ElementTypes = {\n  ELEMENT: 0,\n  COMPONENT: 1,\n  SLOT: 2,\n  TEMPLATE: 3,\n} as const;\n\nexport const ConstantTypes = {\n  NOT_CONSTANT: 0,\n  CAN_SKIP_PATCH: 1,\n  CAN_HOIST: 2,\n  CAN_STRINGIFY: 3,\n} as const;\n\nexport const TagType = {\n  Start: 0,\n  End: 1,\n} as const;\n\nexport const TextModes = {\n  DATA: 0,\n  RCDATA: 1,\n  RAWTEXT: 2,\n  CDATA: 3,\n} as const;\n\nexport const BindingTypes = {\n  DATA: 'data' as const,\n  PROPS: 'props' as const,\n  SETUP: 'setup' as const,\n  LITERAL_CONST: 'literal-const' as const,\n} as const;\n\nexport { PatchFlags } from '@lytjs/common-vnode';\n\n// 运行时辅助函数名称\nexport const VNodeHook = {\n  BEFORE_MOUNT: 'bm',\n  MOUNTED: 'm',\n  BEFORE_UPDATE: 'bu',\n  UPDATED: 'u',\n  BEFORE_UNMOUNT: 'bum',\n  UNMOUNTED: 'um',\n} as const;\n\n// 运行时辅助函数符号\nexport const RENDER_HELPER = 'renderHelper' as const;\n\n// 代码生成的辅助函数名称映射\nexport const helperNameMap: Record<string, string> = {\n  CREATE_VNODE: 'createElementVNode',\n  CREATE_ELEMENT_VNODE: 'createElementVNode',\n  CREATE_COMMENT: 'createCommentVNode',\n  CREATE_TEXT: 'createTextVNode',\n  CREATE_STATIC: 'createStaticVNode',\n  RESOLVE_COMPONENT: 'resolveComponent',\n  RESOLVE_DYNAMIC_COMPONENT: 'resolveDynamicComponent',\n  RESOLVE_DIRECTIVE: 'resolveDirective',\n  RENDER_LIST: 'renderList',\n  RENDER_SLOT: 'renderSlot',\n  CREATE_SLOTS: 'createSlots',\n  TO_DISPLAY_STRING: 'toDisplayString',\n  MERGE_PROPS: 'mergeProps',\n  TO_HANDLER_KEY: 'toHandlerKey',\n  SET_BLOCK_TRACKING: 'setBlockTracking',\n  CREATE_BLOCK: 'createBlock',\n  OPEN_BLOCK: 'openBlock',\n  WITH_CTX: 'withCtx',\n  NORMALIZE_CLASS: 'normalizeClass',\n  NORMALIZE_STYLE: 'normalizeStyle',\n  NORMALIZE_PROPS: 'normalizeProps',\n  GUARD_REACTIVE_PROPS: 'guardReactiveProps',\n  SANITIZE_HTML: 'sanitizeHTML',\n  WITH_MEMO: 'withMemo',\n} as const;\n\n/**\n * 支持的裸指令名集合（\"所见即所得\"模式）\n * 这些指令名在模板中无需 v- 前缀即可被识别\n */\nexport const BARE_DIRECTIVE_NAMES = new Set([\n  'if',\n  'else-if',\n  'else',\n  'for',\n  'each',\n  'model',\n  'show',\n  'text',\n  'html',\n  'once',\n  'memo',\n  'pre',\n  'cloak',\n]);\n\n/**\n * 裸指令名与 HTML 原生属性的冲突规则\n * key: 指令名, value: 在这些标签上不识别为指令（视为原生属性）\n */\nexport const BARE_DIRECTIVE_CONFLICTS: Record<string, Set<string>> = {\n  for: new Set(['label', 'output']),\n  show: new Set(['dialog']),\n  text: new Set([]), // text 仅与 SVG <text> 元素标签冲突，不影响属性解析\n};\n\n/**\n * 需要通过值格式启发式判断的指令名\n * key: 指令名, value: 用于匹配指令值格式的正则表达式\n */\nexport const BARE_DIRECTIVE_VALUE_PATTERNS: Record<string, RegExp> = {\n  for: /^\\s*\\(?[\\w$]+\\s*(?:,\\s*[\\w$]+)?\\s+(?:in|of)\\s+/, // \"item in list\" 或 \"(item, index) of items\"\n};\n","// src/codegen-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"]}