@vobs/compiler 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/compile.cjs +349 -254
- package/dist/compile.cjs.map +1 -1
- package/dist/compile.js +90 -23
- package/dist/compile.js.map +1 -1
- package/dist/i18n-extractor.cjs +45 -16
- package/dist/i18n-extractor.cjs.map +1 -1
- package/dist/i18n-extractor.js +6 -5
- package/dist/i18n-extractor.js.map +1 -1
- package/dist/index.cjs +361 -260
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +99 -28
- package/dist/index.js.map +1 -1
- package/dist/plugin.cjs +18 -2
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +6 -0
- package/dist/plugin.d.ts +6 -0
- package/dist/plugin.js +0 -2
- package/dist/plugin.js.map +1 -1
- package/package.json +2 -2
- package/src/compile.test.ts +74 -0
- package/src/compile.ts +113 -17
- package/src/plugin.ts +6 -0
package/dist/compile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/compile.ts"],"names":["initializer"],"mappings":"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","file":"compile.js","sourcesContent":["import ts from 'typescript'\nimport { VobsError } from '@vobs/runtime/error'\nimport type {\n CompilerContext,\n CompilerOptions,\n CompilerPlugin,\n CompileOptions,\n CompileResult,\n CompilerDiagnostic,\n VobsCompiler\n} from './plugin'\n\n/**\n * 单次编译的全部可变状态。\n *\n * 此前这些字段是模块级变量,编译器因此不可重入:嵌套调用 compile()\n * (如插件内部再次编译片段)会互相污染状态。现在每次 compile 调用\n * 创建独立的 CompileState 并显式穿参,编译器对并发与嵌套完全安全。\n */\ninterface CompileState {\n /** 临时标识符计数器(_el0、_el1…)。 */\n generatedId: number\n filename: string\n /** 最初解析出的源文件。插件 program 变换后的树节点无法回溯原始位置时,用它兜底取行列。 */\n sourceFile: ts.SourceFile\n /** 生成语句 → 原始源码位置,用于 source map 生成。 */\n statementSources: WeakMap<ts.Statement, SourcePosition>\n /** 源文件中已声明的绑定名(含嵌套作用域):注入运行时 import 与生成临时变量时避开命名冲突。 */\n takenNames: Set<string>\n /** 运行时 helper 的规范名 → 产物中的引用名(无冲突时与规范名相同)。 */\n helperAliases: Map<string, string>\n /** 静态模板声明:HTML → 模块级模板变量,按内容去重,输出在 import 之后。 */\n templates: Map<string, ts.Identifier>\n /** 是否为组件调用生成源码位置(生产构建传 false 剔除,减小产物体积)。 */\n sourceLocation: boolean\n /** 从 @vobs/reactivity / @vobs/vobs 导入的 `state` 别名(含 as 别名),用于 debugName 自动推断。 */\n stateAliases: ReadonlySet<string>\n /** 非 import 的本地声明绑定名:`state` 被本地声明遮蔽时禁用 debugName 推断。 */\n localBindings: ReadonlySet<string>\n /** 编译器自身产出的诊断(如不支持的 JSX 形态),与 TypeScript 解析诊断合并返回。 */\n diagnostics: CompilerDiagnostic[]\n}\n\ninterface SourcePosition {\n readonly line: number\n readonly column: number\n}\n\nexport function createCompiler(options: CompilerOptions = {}): VobsCompiler {\n const basePlugins = options.plugins ?? []\n\n return {\n compile(code: string, overrides: CompileOptions = {}): string {\n return compile(code, {\n ...overrides,\n plugins: [...basePlugins, ...(overrides.plugins ?? [])]\n })\n },\n compileWithSourceMap(code: string, overrides: CompileOptions = {}): CompileResult {\n return compileWithSourceMap(code, {\n ...overrides,\n plugins: [...basePlugins, ...(overrides.plugins ?? [])]\n })\n }\n }\n}\n\nexport function compile(code: string, options: CompileOptions = {}): string {\n const result = compileWithSourceMap(code, options)\n const firstError = result.diagnostics.find(diagnostic => diagnostic.severity === 'error')\n if (firstError) {\n throw new VobsError({\n code: firstError.code,\n layer: 'compiler',\n message: firstError.message,\n location: firstError.location,\n codeFrame: firstError.codeFrame,\n fix: firstError.fix\n })\n }\n return result.code\n}\n\nexport function compileWithSourceMap(code: string, options: CompileOptions = {}): CompileResult {\n const filename = options.filename ?? 'component.tsx'\n let sourceFile = ts.createSourceFile(\n filename,\n code,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TSX\n )\n const state: CompileState = {\n generatedId: 0,\n filename,\n sourceFile,\n statementSources: new WeakMap(),\n takenNames: collectDeclaredNames(sourceFile),\n helperAliases: new Map(),\n templates: new Map(),\n sourceLocation: options.sourceLocation ?? true,\n stateAliases: collectStateAliases(sourceFile),\n localBindings: collectLocallyDeclaredNames(sourceFile),\n diagnostics: []\n }\n const cleanFilename = filename.split(/[?#]/u, 1)[0] || filename\n const diagnostics = ts.transpileModule(code, {\n // Vite appends query strings (for example `?direct`) to module IDs;\n // strip them so TypeScript still recognizes TSX syntax for diagnostics.\n fileName: cleanFilename,\n reportDiagnostics: true,\n compilerOptions: { jsx: ts.JsxEmit.Preserve, target: ts.ScriptTarget.Latest }\n }).diagnostics?.map(diagnostic => toCompilerDiagnostic(diagnostic, sourceFile, cleanFilename)) ?? []\n const plugins = options.plugins ?? []\n validatePlugins(plugins)\n\n const context: CompilerContext = {\n filename,\n factory: ts.factory,\n addRuntimeImport(name: string): void {\n resolveHelperName(state, name)\n },\n helperRef: (name: string) => helperRef(state, name)\n }\n\n for (const plugin of plugins) plugin.analyze?.(sourceFile, context)\n for (const plugin of plugins) {\n sourceFile = plugin.transform?.program?.(sourceFile, context) ?? sourceFile\n }\n for (const plugin of plugins) sourceFile = transformPluginNodes(sourceFile, plugin, context)\n\n const statements = sourceFile.statements.map(statement =>\n ts.isImportDeclaration(statement) ? rebuildImport(state, statement) : transformStatement(state, statement)\n )\n // 模板声明必须先于 runtime import 生成:声明里的 createTemplate 依赖\n // helperRef 注册别名,import 需要在别名全部就绪后再构建。\n const templateDeclarations = createTemplateDeclarations(state)\n const resultFile = ts.factory.updateSourceFile(sourceFile, [\n ...createRuntimeImports(state),\n ...templateDeclarations,\n ...statements\n ])\n\n const generated = ts.createPrinter().printFile(resultFile)\n return {\n code: generated,\n map: buildSourceMap(state, filename, code, generated, resultFile),\n diagnostics: [...diagnostics, ...state.diagnostics]\n }\n}\n\nfunction toCompilerDiagnostic(\n diagnostic: ts.Diagnostic,\n sourceFile: ts.SourceFile,\n filename: string\n): CompilerDiagnostic {\n const start = diagnostic.start ?? 0\n const length = diagnostic.length ?? 1\n const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n')\n const { line, column, codeFrame } = buildCodeFrame(sourceFile, start, length)\n return {\n code: `VOBS_C${String(diagnostic.code).padStart(3, '0')}`,\n severity: diagnostic.category === ts.DiagnosticCategory.Warning ? 'warning' : 'error',\n message,\n location: { file: filename, line, column },\n codeFrame\n }\n}\n\nfunction buildCodeFrame(\n sourceFile: ts.SourceFile,\n start: number,\n length: number\n): { line: number; column: number; codeFrame: string } {\n const position = sourceFile.getLineAndCharacterOfPosition(start)\n const lineText = sourceFile.text.split(/\\r?\\n/u)[position.line] ?? ''\n const markerLength = Math.max(1, Math.min(length, Math.max(1, lineText.length - position.character)))\n return {\n line: position.line + 1,\n column: position.character + 1,\n codeFrame: `${position.line + 1} | ${lineText}\\n${' '.repeat(String(position.line + 1).length + 3 + position.character)}${'^'.repeat(markerLength)}`\n }\n}\n\n/**\n * 不支持的 JSX 标签形态(成员表达式 `<Foo.Bar>`、命名空间 `<svg:rect>` 等)。\n * 诊断以 error 级返回,compile() 与 Vite 插件会直接失败,不再静默产出无效 DOM 标签。\n */\nfunction reportUnsupportedTag(state: CompileState, tagName: ts.JsxTagNameExpression): void {\n const sourceFile = tagName.getSourceFile() ?? state.sourceFile\n if (!sourceFile) return\n const label = tagName.getText()\n const kindNote = tagName.kind === ts.SyntaxKind.JsxNamespacedName ? '(JSX 命名空间标签)' : ''\n const { line, column, codeFrame } = buildCodeFrame(sourceFile, tagName.getStart(sourceFile), tagName.getWidth(sourceFile))\n state.diagnostics.push({\n code: 'VOBS_C101',\n severity: 'error',\n message: `不支持的 JSX 标签形态:<${label}>${kindNote}。组件必须是大写开头的标识符,DOM 元素必须是小写标签名。`,\n location: { file: state.filename, line, column },\n codeFrame,\n fix: `把 <${label}> 改为 <Component /> 形式的组件或小写 DOM 标签;Fragment 请使用 <Fragment> 或 <>...</>。`\n })\n}\n\ninterface MappingSegment {\n readonly genLine: number\n readonly genCol: number\n readonly srcLine: number\n readonly srcCol: number\n}\n\n/**\n * Build a real statement-level source map. The generated file is re-parsed and\n * paired structurally with the compiled tree (statements map 1:1 inside every\n * block), so each emitted statement points back to the JSX or original\n * statement it was produced from.\n */\nfunction buildSourceMap(\n state: CompileState,\n filename: string,\n source: string,\n generated: string,\n resultFile: ts.SourceFile\n): import('./plugin').VobsSourceMap {\n const reparsed = ts.createSourceFile(filename, generated, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX)\n const segments: MappingSegment[] = []\n walkPairedTrees(state, resultFile, reparsed, reparsed, segments)\n segments.sort((a, b) => a.genLine - b.genLine || a.genCol - b.genCol)\n return {\n version: 3,\n file: filename,\n sources: [filename],\n sourcesContent: [source],\n names: [],\n mappings: encodeMappings(segments, generated.split('\\n').length)\n }\n}\n\n/** Statements only nest inside these container kinds. */\nfunction statementLists(node: ts.Node): readonly ts.Statement[] | null {\n if (ts.isSourceFile(node) || ts.isBlock(node) || ts.isModuleBlock(node)) return node.statements\n if (ts.isCaseClause(node) || ts.isDefaultClause(node)) return node.statements\n return null\n}\n\n/**\n * Pair the compiled tree with the re-parsed generated tree node by node.\n * Both trees were printed from the same AST, so their shapes are identical;\n * any divergence (length mismatch) simply abandons that subtree.\n */\nfunction walkPairedTrees(\n state: CompileState,\n original: ts.Node,\n generated: ts.Node,\n reparsed: ts.SourceFile,\n segments: MappingSegment[]\n): void {\n const originalStatements = statementLists(original)\n const generatedStatements = statementLists(generated)\n if (originalStatements && generatedStatements) {\n if (originalStatements.length !== generatedStatements.length) return\n for (let index = 0; index < originalStatements.length; index++) {\n const originalStatement = originalStatements[index]\n const generatedStatement = generatedStatements[index]\n recordSegment(state, originalStatement, generatedStatement, reparsed, segments)\n walkPairedTrees(state, originalStatement, generatedStatement, reparsed, segments)\n }\n return\n }\n\n const originalChildren: ts.Node[] = []\n const generatedChildren: ts.Node[] = []\n ts.forEachChild(original, node => { originalChildren.push(node) })\n ts.forEachChild(generated, node => { generatedChildren.push(node) })\n if (originalChildren.length !== generatedChildren.length) return\n for (let index = 0; index < originalChildren.length; index++) {\n walkPairedTrees(state, originalChildren[index], generatedChildren[index], reparsed, segments)\n }\n}\n\nfunction recordSegment(\n state: CompileState,\n originalStatement: ts.Statement,\n generatedStatement: ts.Statement,\n reparsed: ts.SourceFile,\n segments: MappingSegment[]\n): void {\n const source = state.statementSources.get(originalStatement) ?? positionOfOriginalStatement(state, originalStatement)\n if (!source) return\n const position = reparsed.getLineAndCharacterOfPosition(generatedStatement.getStart(reparsed))\n segments.push({\n genLine: position.line,\n genCol: position.character,\n srcLine: source.line,\n srcCol: source.column\n })\n}\n\nfunction positionOfOriginalStatement(state: CompileState, statement: ts.Statement): SourcePosition | null {\n if (statement.pos < 0 || !state.sourceFile) return null\n const { line, character } = state.sourceFile.getLineAndCharacterOfPosition(\n statement.getStart(state.sourceFile)\n )\n return { line, column: character }\n}\n\nfunction encodeMappings(segments: readonly MappingSegment[], lineCount: number): string {\n const lines: string[][] = Array.from({ length: lineCount }, () => [])\n let prevGenLine = -1\n let prevGenCol = 0\n let prevSrcLine = 0\n let prevSrcCol = 0\n for (const segment of segments) {\n if (segment.genLine !== prevGenLine) {\n prevGenCol = 0\n prevGenLine = segment.genLine\n }\n const values = [\n segment.genCol - prevGenCol,\n 0,\n segment.srcLine - prevSrcLine,\n segment.srcCol - prevSrcCol\n ]\n lines[segment.genLine].push(values.map(encodeVlq).join(''))\n prevGenCol = segment.genCol\n prevSrcLine = segment.srcLine\n prevSrcCol = segment.srcCol\n }\n return lines.map(line => line.join(',')).join(';')\n}\n\nconst base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\nfunction encodeVlq(value: number): string {\n let encoded = value < 0 ? ((-value) << 1) | 1 : value << 1\n let result = ''\n do {\n let digit = encoded & 31\n encoded >>>= 5\n if (encoded > 0) digit |= 32\n result += base64Chars[digit]\n } while (encoded > 0)\n return result\n}\n\nfunction validatePlugins(plugins: readonly CompilerPlugin[]): void {\n const names = new Set<string>()\n for (const plugin of plugins) {\n if (!plugin.name) throw new VobsError({ code: 'VOBS_C007', layer: 'compiler', message: '编译器插件必须提供 name', fix: '为插件添加稳定且唯一的 name。' })\n if (names.has(plugin.name)) throw new VobsError({ code: 'VOBS_C007', layer: 'compiler', message: `检测到重复插件: ${plugin.name}`, fix: '为每个编译器插件使用唯一的 name。' })\n names.add(plugin.name)\n }\n}\n\nfunction transformPluginNodes(\n sourceFile: ts.SourceFile,\n plugin: CompilerPlugin,\n context: CompilerContext\n): ts.SourceFile {\n const transformNode = plugin.transform?.node ?? plugin.transformNode\n if (!transformNode) return sourceFile\n\n const transformer: ts.TransformerFactory<ts.SourceFile> = transformContext => root => {\n const visit: ts.Visitor = node => {\n const replacement = transformNode(node, context)\n if (replacement === null) return undefined\n return ts.visitEachChild(replacement ?? node, visit, transformContext)\n }\n return ts.visitNode(root, visit) as ts.SourceFile\n }\n\n const result = ts.transform(sourceFile, [transformer])\n try {\n return result.transformed[0]\n } finally {\n result.dispose()\n }\n}\n\n/**\n * Collect every binding name declared anywhere in the source (imports, variables,\n * functions, parameters, ... including nested scopes). If a helper name is bound\n * in ANY scope, the injected runtime import must switch to an alias: generated\n * references uniformly use the alias, so user code is never captured or duplicated.\n */\nfunction collectDeclaredNames(sourceFile: ts.SourceFile): Set<string> {\n const names = new Set<string>()\n const visit = (node: ts.Node): void => {\n if (ts.isIdentifier(node) && isBindingName(node)) names.add(node.text)\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return names\n}\n\n/** 收集从 @vobs/reactivity / @vobs/vobs 导入的 `state` 绑定名(含 `as` 别名)。 */\nfunction collectStateAliases(sourceFile: ts.SourceFile): Set<string> {\n const aliases = new Set<string>()\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier)) continue\n const module = statement.moduleSpecifier.text\n if (module !== '@vobs/reactivity' && module !== '@vobs/vobs') continue\n const clause = statement.importClause\n if (!clause?.namedBindings || !ts.isNamedImports(clause.namedBindings)) continue\n for (const element of clause.namedBindings.elements) {\n if (element.propertyName ? element.propertyName.text === 'state' : element.name.text === 'state') {\n aliases.add(element.name.text)\n }\n }\n }\n return aliases\n}\n\n/** 与 collectDeclaredNames 相同,但跳过 import 声明:用于判断 helper 名是否被本地声明遮蔽。 */\nfunction collectLocallyDeclaredNames(sourceFile: ts.SourceFile): Set<string> {\n const names = new Set<string>()\n const visit = (node: ts.Node): void => {\n if (ts.isImportDeclaration(node)) return\n if (ts.isIdentifier(node) && isBindingName(node)) names.add(node.text)\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return names\n}\n\n/** 标识符是否为某个声明的绑定名(import、变量、函数、参数、类成员等)。 */\nfunction isBindingName(node: ts.Identifier): boolean {\n const parent = node.parent\n if (!parent) return false\n // 属性访问(document.createElement)与 JSX 属性名不是绑定名\n if (ts.isPropertyAccessExpression(parent) && parent.name === node) return false\n if (ts.isQualifiedName(parent) && parent.right === node) return false\n if (ts.isJsxAttribute(parent)) return false\n return (parent as { name?: ts.Node }).name === node\n}\n\n/**\n * Resolve the reference name for a runtime helper. The plain name is kept when\n * the source never binds it; otherwise a collision-free alias is allocated and\n * the injected import uses the same alias (`import { createElement as _vobs_createElement }`).\n */\nfunction resolveHelperName(state: CompileState, name: string): string {\n const existing = state.helperAliases.get(name)\n if (existing) return existing\n let alias = name\n if (state.takenNames.has(alias)) {\n alias = `_vobs_${name}`\n let suffix = 1\n while (state.takenNames.has(alias)) alias = `_vobs_${name}_${suffix++}`\n }\n state.helperAliases.set(name, alias)\n return alias\n}\n\n/** Create a reference to a runtime helper in generated code, matching the injected import. */\nfunction helperRef(state: CompileState, name: string): ts.Identifier {\n return ts.factory.createIdentifier(resolveHelperName(state, name))\n}\n\nfunction createRuntimeImports(state: CompileState): ts.ImportDeclaration[] {\n const modules = new Map<string, ts.ImportSpecifier[]>()\n for (const [name, alias] of state.helperAliases) {\n const module = name === 'insertResourceBoundary' ? '@vobs/resource' : '@vobs/vobs'\n const imported = modules.get(module) ?? []\n imported.push(ts.factory.createImportSpecifier(\n false,\n alias === name ? undefined : ts.factory.createIdentifier(name),\n ts.factory.createIdentifier(alias)\n ))\n modules.set(module, imported)\n }\n return [...modules.entries()].map(([module, imported]) => ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(imported)\n ),\n ts.factory.createStringLiteral(module)\n ))\n}\n\nfunction rebuildImport(state: CompileState, node: ts.ImportDeclaration): ts.ImportDeclaration {\n if (!ts.isStringLiteral(node.moduleSpecifier)) return node\n return tagStatement(state, ts.factory.createImportDeclaration(\n node.modifiers,\n node.importClause,\n ts.factory.createStringLiteral(node.moduleSpecifier.text),\n node.attributes\n ), node)\n}\n\nfunction transformStatement(state: CompileState, node: ts.Statement): ts.Statement {\n if (ts.isFunctionDeclaration(node) && node.body) {\n return tagStatement(state, ts.factory.updateFunctionDeclaration(\n node,\n node.modifiers,\n node.asteriskToken,\n node.name,\n node.typeParameters,\n node.parameters,\n node.type,\n transformBlock(state, node.body)\n ), node)\n }\n\n if (ts.isVariableStatement(node)) return transformVariableStatement(state, node)\n if (ts.isExportAssignment(node) && containsJsx(node.expression)) {\n return tagStatement(state, ts.factory.updateExportAssignment(node, node.modifiers, transformEmbeddedExpression(state, node.expression)), node)\n }\n if (ts.isExpressionStatement(node) && containsJsx(node.expression)) {\n return tagStatement(state, ts.factory.updateExpressionStatement(node, transformEmbeddedExpression(state, node.expression)), node)\n }\n if (ts.isReturnStatement(node) && node.expression && containsJsx(node.expression)) {\n return tagStatement(state, ts.factory.updateReturnStatement(node, transformEmbeddedExpression(state, node.expression)), node)\n }\n return node\n}\n\nfunction transformVariableStatement(state: CompileState, node: ts.VariableStatement): ts.VariableStatement {\n let changed = false\n const declarations = node.declarationList.declarations.map(declaration => {\n const initializer = declaration.initializer\n if (!initializer) return declaration\n\n let nextInitializer = inferStateDebugName(state, declaration, initializer) ?? initializer\n if (containsJsx(nextInitializer)) {\n nextInitializer = transformEmbeddedExpression(state, nextInitializer)\n }\n if (nextInitializer === initializer) return declaration\n\n changed = true\n return ts.factory.updateVariableDeclaration(\n declaration,\n declaration.name,\n declaration.exclamationToken,\n declaration.type,\n nextInitializer\n )\n })\n\n if (!changed) return node\n\n return tagStatement(state, ts.factory.updateVariableStatement(\n node,\n node.modifiers,\n ts.factory.updateVariableDeclarationList(node.declarationList, declarations)\n ), node)\n}\n\n/**\n * `const name = state(initial)` 在未显式传入 debugName 时从变量名推断:\n * `const username = state('')` → `state('', 'username')`,使 DevTools 信号名称与源码命名一致。\n * 仅当 `state` 确认来自 @vobs/reactivity / @vobs/vobs、未被本地声明遮蔽、\n * 且调用只带一个参数时启用;其余形态保持原样。\n */\nfunction inferStateDebugName(\n state: CompileState,\n declaration: ts.VariableDeclaration,\n initializer: ts.Expression\n): ts.Expression | undefined {\n if (state.stateAliases.size === 0) return undefined\n if (!ts.isIdentifier(declaration.name)) return undefined\n\n let call = initializer\n while (ts.isParenthesizedExpression(call) || ts.isAsExpression(call) || ts.isTypeAssertionExpression(call) || ts.isSatisfiesExpression(call)) {\n call = call.expression\n }\n if (!ts.isCallExpression(call)) return undefined\n const callee = call.expression\n if (!ts.isIdentifier(callee) || !state.stateAliases.has(callee.text)) return undefined\n if (state.localBindings.has(callee.text)) return undefined\n if (call.arguments.length !== 1) return undefined\n\n return ts.factory.createCallExpression(callee, call.typeArguments, [\n ...call.arguments,\n ts.factory.createStringLiteral(declaration.name.text)\n ])\n}\n\nfunction containsJsx(expression: ts.Expression): boolean {\n let found = false\n const visit = (node: ts.Node): void => {\n if (isJsxExpression(node as ts.Expression)) {\n found = true\n return\n }\n ts.forEachChild(node, visit)\n }\n visit(expression)\n return found\n}\n\nfunction transformBlock(state: CompileState, block: ts.Block): ts.Block {\n const statements = block.statements.map(statement => {\n if (!ts.isReturnStatement(statement) || !statement.expression) return transformStatement(state, statement)\n const expression = ts.isParenthesizedExpression(statement.expression)\n ? statement.expression.expression\n : statement.expression\n return isJsxExpression(expression)\n ? tagStatement(state, ts.factory.updateReturnStatement(statement, transformJsxExpression(state, expression)), statement)\n : statement\n })\n return ts.factory.updateBlock(block, statements)\n}\n\nfunction isJsxExpression(node: ts.Expression): node is ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment {\n return ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)\n}\n\nfunction transformJsxExpression(state: CompileState, node: ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment): ts.Expression {\n if (ts.isJsxFragment(node)) return transformFragment(state, node.children)\n if (ts.isJsxElement(node)) {\n return transformElement(state, node, node.openingElement.tagName, node.openingElement.attributes, node.children)\n }\n return transformElement(state, node, node.tagName, node.attributes, [])\n}\n\nfunction transformElement(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n tagName: ts.JsxTagNameExpression,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n if (isFragmentTag(tagName)) return transformFragment(state, children)\n if (!ts.isIdentifier(tagName)) {\n // <Foo.Bar>、<svg:rect> 等形态此前会静默编译成无效 DOM 标签(createElement(\"Foo.Bar\"))。\n // 报结构化诊断后按原路径继续,保证产物结构稳定;compile()/Vite 插件会因 error 诊断直接失败。\n reportUnsupportedTag(state, tagName)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'ResourceBoundary') {\n return transformResourceBoundary(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'AsyncBoundary') {\n return transformAsyncBoundary(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'ErrorBoundary') {\n return transformErrorBoundary(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'Profiler') {\n return transformProfiler(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && /^[A-Z]/.test(tagName.text)) {\n const args: ts.Expression[] = [\n ts.factory.createCallExpression(helperRef(state, 'resolveComponent'), undefined, [\n tagName,\n ts.factory.createStringLiteral(state.filename),\n ts.factory.createStringLiteral(tagName.text)\n ]),\n createComponentProps(state, attributes, children)\n ]\n // 源码位置仅用于错误定位与 DevTools;生产构建可整体剔除(错误仍带组件名,定位走 source map)。\n if (state.sourceLocation) args.push(createSourceLocation(tagName))\n return ts.factory.createCallExpression(helperRef(state, 'createComponent'), undefined, args)\n }\n\n // 静态模板提升:完全静态的 DOM 子树(无事件/动态绑定/spread/property 属性)序列化为\n // 模块级模板,运行时一次 cloneNode 替代 createElement + setStaticProps + 逐子插入。\n if (isStaticElement(tagName, attributes, children)) {\n return ts.factory.createCallExpression(\n helperRef(state, 'cloneTemplate'),\n undefined,\n [registerTemplate(state, serializeStaticHtml(node))]\n )\n }\n\n const elementName = tagName.getText()\n const elementId = nextIdentifier(state, '_el')\n const statements: ts.Statement[] = [\n createConstStatement(\n state,\n elementId,\n ts.factory.createCallExpression(\n helperRef(state, 'createElement'),\n undefined,\n [ts.factory.createStringLiteral(elementName)]\n ),\n node\n )\n ]\n\n appendAttributes(state, statements, elementId, attributes)\n appendChildren(state, statements, elementId, children)\n statements.push(tagStatement(state, ts.factory.createReturnStatement(elementId), node))\n\n return ts.factory.createCallExpression(\n ts.factory.createArrowFunction(\n undefined,\n undefined,\n [],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n ts.factory.createBlock(statements, true)\n ),\n undefined,\n []\n )\n}\n\nfunction isFragmentTag(tagName: ts.JsxTagNameExpression): boolean {\n return tagName.getText() === 'Fragment' || tagName.getText() === 'Vobs.Fragment'\n}\n\nfunction transformFragment(state: CompileState, children: readonly ts.JsxChild[]): ts.Expression {\n const parent = nextIdentifier(state, '_fragmentParent')\n const anchor = nextIdentifier(state, '_fragmentAnchor')\n const statements: ts.Statement[] = []\n appendChildren(state, statements, parent, children, anchor)\n return ts.factory.createCallExpression(\n helperRef(state, 'createFragment'),\n undefined,\n [ts.factory.createArrowFunction(\n undefined,\n undefined,\n [\n ts.factory.createParameterDeclaration(undefined, undefined, parent),\n ts.factory.createParameterDeclaration(undefined, undefined, anchor)\n ],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n ts.factory.createBlock(statements, true)\n )]\n )\n}\n\nfunction transformResourceBoundary(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const resource = getAttributeExpression(attributes, 'resource')\n if (!resource) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'ResourceBoundary 必须提供 resource 属性', fix: '为 ResourceBoundary 添加 resource={resource}。' })\n const options: ts.ObjectLiteralElementLike[] = [\n ts.factory.createPropertyAssignment('resource', transformEmbeddedExpression(state, resource)),\n ts.factory.createPropertyAssignment('children', createBoundaryFactory(state, children))\n ]\n appendBoundaryOptionalProperty(state, options, attributes, 'loading')\n appendBoundaryOptionalProperty(state, options, attributes, 'empty')\n appendBoundaryOptionalProperty(state, options, attributes, 'fallback')\n return createBoundaryFragment(state, node, 'insertResourceBoundary', options)\n}\n\nfunction transformErrorBoundary(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const fallback = getAttributeExpression(attributes, 'fallback')\n if (!fallback) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'ErrorBoundary 必须提供 fallback 属性', fix: '为 ErrorBoundary 添加 fallback={(error, retry) => ...}。' })\n return createBoundaryFragment(state, node, 'insertErrorBoundary', [\n ts.factory.createPropertyAssignment('children', createBoundaryFactory(state, children)),\n ts.factory.createPropertyAssignment('fallback', transformEmbeddedExpression(state, fallback))\n ])\n}\n\nfunction transformAsyncBoundary(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const promise = getAttributeExpression(attributes, 'promise')\n if (!promise) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'AsyncBoundary 必须提供 promise 属性', fix: '为 AsyncBoundary 添加 promise={promise}。' })\n const options: ts.ObjectLiteralElementLike[] = [\n ts.factory.createPropertyAssignment('promise', transformEmbeddedExpression(state, promise)),\n ts.factory.createPropertyAssignment('children', createAsyncFactory(state, children))\n ]\n appendBoundaryOptionalProperty(state, options, attributes, 'loading')\n appendBoundaryOptionalProperty(state, options, attributes, 'fallback')\n const resetKey = getAttributeExpression(attributes, 'resetKey')\n if (resetKey) options.push(ts.factory.createPropertyAssignment('resetKey', createGetter(resetKey)))\n return createBoundaryFragment(state, node, 'insertAsyncBoundary', options)\n}\n\nfunction transformProfiler(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const idAttribute = attributes.properties.find(attribute => ts.isJsxAttribute(attribute) && attribute.name.getText() === 'id')\n const id = idAttribute && ts.isJsxAttribute(idAttribute) && idAttribute.initializer && ts.isStringLiteral(idAttribute.initializer)\n ? ts.factory.createStringLiteral(idAttribute.initializer.text)\n : idAttribute && ts.isJsxAttribute(idAttribute) && idAttribute.initializer && ts.isJsxExpression(idAttribute.initializer)\n ? idAttribute.initializer.expression\n : null\n if (!id) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'Profiler 必须提供 id 属性', fix: '为 Profiler 添加 id=\"ComponentName\"。' })\n const options: ts.ObjectLiteralElementLike[] = [\n ts.factory.createPropertyAssignment('id', transformEmbeddedExpression(state, id)),\n ts.factory.createPropertyAssignment('children', createBoundaryFactory(state, children))\n ]\n appendBoundaryOptionalProperty(state, options, attributes, 'onRender')\n return createBoundaryFragment(state, node, 'insertProfiler', options)\n}\n\nfunction createBoundaryFragment(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n helper: 'insertResourceBoundary' | 'insertErrorBoundary' | 'insertAsyncBoundary' | 'insertProfiler',\n options: readonly ts.ObjectLiteralElementLike[]\n): ts.Expression {\n const parent = nextIdentifier(state, '_boundaryParent')\n const anchor = nextIdentifier(state, '_boundaryAnchor')\n return ts.factory.createCallExpression(\n helperRef(state, 'createFragment'),\n undefined,\n [ts.factory.createArrowFunction(\n undefined,\n undefined,\n [\n ts.factory.createParameterDeclaration(undefined, undefined, parent),\n ts.factory.createParameterDeclaration(undefined, undefined, anchor)\n ],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n ts.factory.createBlock([callStatement(state, helper, [\n parent,\n anchor,\n ts.factory.createObjectLiteralExpression(options, true)\n ], node)], true)\n )]\n )\n}\n\nfunction createBoundaryFactory(state: CompileState, children: readonly ts.JsxChild[]): ts.ArrowFunction {\n const content = transformFragment(state, children)\n return ts.factory.createArrowFunction(\n undefined,\n undefined,\n [],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n content\n )\n}\n\nfunction createAsyncFactory(state: CompileState, children: readonly ts.JsxChild[]): ts.ArrowFunction {\n const value = ts.factory.createIdentifier('value')\n const expressionChild = children.length === 1 && children[0].kind === ts.SyntaxKind.JsxExpression\n ? (children[0] as ts.JsxExpression).expression\n : undefined\n if (expressionChild && ts.isArrowFunction(expressionChild)) {\n const transformed = transformEmbeddedExpression(state, expressionChild)\n return transformed as ts.ArrowFunction\n }\n const content = transformFragment(state, children)\n return ts.factory.createArrowFunction(undefined, undefined, [\n ts.factory.createParameterDeclaration(undefined, undefined, value)\n ], undefined, ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), content)\n}\n\nfunction appendBoundaryOptionalProperty(\n state: CompileState,\n properties: ts.ObjectLiteralElementLike[],\n attributes: ts.JsxAttributes,\n name: string\n): void {\n const expression = getAttributeExpression(attributes, name)\n if (expression) {\n const transformed = transformEmbeddedExpression(state, expression)\n const value = isJsxExpression(unwrapExpression(expression))\n ? createGetter(transformed)\n : transformed\n properties.push(ts.factory.createPropertyAssignment(name, value))\n }\n}\n\nfunction getAttributeExpression(attributes: ts.JsxAttributes, name: string): ts.Expression | null {\n for (const attribute of attributes.properties) {\n if (!ts.isJsxAttribute(attribute) || attribute.name.getText() !== name) continue\n if (attribute.initializer && ts.isJsxExpression(attribute.initializer)) {\n return attribute.initializer.expression ?? null\n }\n }\n return null\n}\n\nfunction transformEmbeddedExpression(state: CompileState, expression: ts.Expression): ts.Expression {\n const result = ts.transform(expression, [context => root => {\n const visit: ts.Visitor = node => {\n if (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) {\n return transformJsxExpression(state, node)\n }\n return ts.visitEachChild(node, visit, context)\n }\n return ts.visitNode(root, visit) as ts.Expression\n }])\n try {\n return result.transformed[0]\n } finally {\n result.dispose()\n }\n}\n\n/**\n * 静态元素判定:DOM 标签 + 全部属性为字符串字面量或无值 + 全部子节点为文本或递归静态元素。\n * 保守排除项(语义或序列化等价性无把握,走原路径):\n * - property 属性(value/checked/disabled 等):HTML attribute 与 setProperty 初始语义存在差异;\n * - 事件(on*)、ref、spread、key:本身是动态行为;\n * - 嵌套组件/Fragment/Boundary:不是纯 DOM 子树。\n */\nfunction isStaticElement(\n tagName: ts.JsxTagNameExpression,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): boolean {\n if (!ts.isIdentifier(tagName) || !/^[a-z]/.test(tagName.text)) return false\n for (const attribute of attributes.properties) {\n if (ts.isJsxSpreadAttribute(attribute)) return false\n if (!ts.isJsxAttribute(attribute)) return false\n const name = attribute.name.getText()\n if (name === 'key' || name === 'ref' || name.startsWith('on')) return false\n if (isPropertyAttribute(name)) return false\n const initializer = attribute.initializer\n if (initializer && !ts.isStringLiteral(initializer)) return false\n }\n for (const child of children) {\n if (ts.isJsxText(child)) continue\n if (ts.isJsxElement(child) || ts.isJsxSelfClosingElement(child)) {\n const nested = ts.isJsxElement(child)\n ? { tagName: child.openingElement.tagName, attributes: child.openingElement.attributes, children: child.children }\n : { tagName: child.tagName, attributes: child.attributes, children: [] as readonly ts.JsxChild[] }\n if (!isStaticElement(nested.tagName, nested.attributes, nested.children)) return false\n continue\n }\n return false\n }\n return true\n}\n\n/** Serialize a fully-static JSX element to HTML, preserving the compiler's text normalization. */\nfunction serializeStaticHtml(node: ts.JsxElement | ts.JsxSelfClosingElement): string {\n const { tagName, attributes, children } = ts.isJsxElement(node)\n ? { tagName: node.openingElement.tagName, attributes: node.openingElement.attributes, children: node.children }\n : { tagName: node.tagName, attributes: node.attributes, children: [] as readonly ts.JsxChild[] }\n return serializeStaticElement(tagName, attributes, children)\n}\n\nfunction serializeStaticElement(\n tagName: ts.JsxTagNameExpression,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): string {\n const name = tagName.getText()\n let html = `<${name}`\n for (const attribute of attributes.properties) {\n if (!ts.isJsxAttribute(attribute)) continue\n const attributeName = attribute.name.getText() === 'className' ? 'class' : attribute.name.getText()\n const initializer = attribute.initializer\n if (!initializer) {\n html += ` ${attributeName}=\"\"`\n continue\n }\n if (ts.isStringLiteral(initializer)) {\n html += ` ${attributeName}=\"${escapeHtmlAttribute(initializer.text)}\"`\n }\n }\n html += '>'\n\n for (const child of children) {\n if (ts.isJsxText(child)) {\n // 与 appendChildren 的文本规范化保持一致,保证提升前后 DOM 文本逐字相同。\n const text = child.text.replace(/\\s+/g, ' ').trimStart()\n if (text.trim()) html += escapeHtmlText(text)\n continue\n }\n if (ts.isJsxElement(child)) {\n html += serializeStaticElement(\n child.openingElement.tagName,\n child.openingElement.attributes,\n child.children\n )\n continue\n }\n if (ts.isJsxSelfClosingElement(child)) {\n html += serializeStaticElement(child.tagName, child.attributes, [])\n }\n }\n html += `</${name}>`\n return html\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return value.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<')\n}\n\nfunction escapeHtmlText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\n}\n\n/** Register a hoisted template declaration; identical HTML shares one declaration. */\nfunction registerTemplate(state: CompileState, html: string): ts.Expression {\n const existing = state.templates.get(html)\n if (existing) return existing\n const identifier = nextIdentifier(state, '_tpl')\n state.templates.set(html, identifier)\n return identifier\n}\n\nfunction createTemplateDeclarations(state: CompileState): ts.Statement[] {\n return [...state.templates.entries()].map(([html, identifier]) =>\n ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([\n ts.factory.createVariableDeclaration(identifier, undefined, undefined, ts.factory.createCallExpression(\n helperRef(state, 'createTemplate'),\n undefined,\n [ts.factory.createStringLiteral(html)]\n ))\n ], ts.NodeFlags.Const))\n )\n}\n\nfunction appendAttributes(\n state: CompileState,\n statements: ts.Statement[],\n element: ts.Identifier,\n attributes: ts.JsxAttributes\n): void {\n const staticProps: ts.ObjectLiteralElementLike[] = []\n const hasSpread = attributes.properties.some(attribute => ts.isJsxSpreadAttribute(attribute))\n for (const attribute of attributes.properties) {\n if (ts.isJsxSpreadAttribute(attribute)) {\n statements.push(callStatement(state, 'spreadProps', [element, transformEmbeddedExpression(state, attribute.expression)], attribute))\n continue\n }\n if (!ts.isJsxAttribute(attribute)) continue\n const name = attribute.name.getText()\n if (name === 'key') continue\n if (name === 'ref') {\n const initializer = attribute.initializer\n if (initializer && ts.isJsxExpression(initializer) && initializer.expression) {\n statements.push(callStatement(state, 'setRef', [element, transformEmbeddedExpression(state, initializer.expression)], attribute))\n }\n continue\n }\n const initializer = attribute.initializer\n\n if (name.startsWith('on') && initializer && ts.isJsxExpression(initializer) && initializer.expression) {\n statements.push(callStatement(state, 'addEventListener', [\n element,\n ts.factory.createStringLiteral(name.slice(2).toLowerCase()),\n initializer.expression\n ], attribute))\n continue\n }\n\n if (!initializer) {\n if (hasSpread) {\n statements.push(callStatement(state, isPropertyAttribute(name) ? 'setProperty' : 'setAttribute', [element, ts.factory.createStringLiteral(isPropertyAttribute(name) ? name : name === 'className' ? 'class' : name), isPropertyAttribute(name) ? ts.factory.createTrue() : ts.factory.createStringLiteral('')], attribute))\n continue\n }\n if (isPropertyAttribute(name)) staticProps.push(createStaticProperty(name, ts.factory.createTrue()))\n else staticProps.push(createStaticProperty(name === 'className' ? 'class' : name, ts.factory.createStringLiteral('')))\n continue\n }\n if (ts.isStringLiteral(initializer)) {\n if (hasSpread) {\n statements.push(callStatement(state, isPropertyAttribute(name) ? 'setProperty' : 'setAttribute', [element, ts.factory.createStringLiteral(isPropertyAttribute(name) ? name : name === 'className' ? 'class' : name), ts.factory.createStringLiteral(initializer.text)], attribute))\n continue\n }\n staticProps.push(createStaticProperty(isPropertyAttribute(name) ? name : name === 'className' ? 'class' : name,\n ts.factory.createStringLiteral(initializer.text)))\n continue\n }\n\n const attributeName = name === 'className' ? 'class' : name\n const propertyAttribute = isPropertyAttribute(name)\n if (ts.isJsxExpression(initializer) && initializer.expression) {\n statements.push(callStatement(state, propertyAttribute ? 'bindProperty' : 'bindAttribute', [\n element,\n ts.factory.createStringLiteral(propertyAttribute ? name : attributeName),\n createGetter(initializer.expression)\n ], attribute))\n }\n }\n if (staticProps.length) statements.splice(1, 0, callStatement(state, 'setStaticProps', [\n element,\n ts.factory.createObjectLiteralExpression(staticProps, true)\n ], attributes))\n}\n\nfunction createStaticProperty(name: string, value: ts.Expression): ts.PropertyAssignment {\n return ts.factory.createPropertyAssignment(ts.factory.createStringLiteral(name), value)\n}\n\nfunction isPropertyAttribute(name: string): boolean {\n return name === 'value' || name === 'checked' || name === 'selected' || name === 'disabled'\n || name === 'multiple' || name === 'readOnly' || name === 'required'\n || name === 'autofocus' || name === 'hidden' || name === 'tabIndex'\n}\n\nfunction appendChildren(\n state: CompileState,\n statements: ts.Statement[],\n element: ts.Identifier,\n children: readonly ts.JsxChild[],\n anchor: ts.Expression = ts.factory.createNull()\n): void {\n for (const child of children) {\n if (ts.isJsxText(child)) {\n const text = child.text.replace(/\\s+/g, ' ').trimStart()\n if (text.trim()) {\n statements.push(callStatement(state, 'insertBefore', [\n element,\n ts.factory.createCallExpression(helperRef(state, 'createText'), undefined, [\n ts.factory.createStringLiteral(text)\n ]),\n anchor\n ], child))\n }\n continue\n }\n\n if (ts.isJsxElement(child) || ts.isJsxSelfClosingElement(child) || ts.isJsxFragment(child)) {\n statements.push(callStatement(state, 'insertBefore', [\n element,\n transformJsxExpression(state, child),\n anchor\n ], child))\n continue\n }\n\n if (child.kind === ts.SyntaxKind.JsxExpression) {\n const expression = (child as ts.JsxExpression).expression\n if (!expression) continue\n const list = transformListExpression(state, element, expression, anchor)\n if (list) {\n statements.push(callStatement(state, 'insertList', list, child))\n continue\n }\n const dynamic = transformDynamicExpression(state, expression)\n if (dynamic) {\n statements.push(callStatement(state, 'insertDynamic', [element, anchor, dynamic], child))\n continue\n }\n if (!containsJsx(expression) && !ts.isIdentifier(expression)) {\n const textId = nextIdentifier(state, '_text')\n statements.push(createConstStatement(state, textId, ts.factory.createCallExpression(helperRef(state, 'createText'), undefined, [ts.factory.createStringLiteral('')]), child))\n statements.push(callStatement(state, 'insertBefore', [element, textId, anchor], child))\n statements.push(callStatement(state, 'bindText', [textId, createGetter(expression)], child))\n continue\n }\n const value = transformEmbeddedExpression(state, expression)\n statements.push(callStatement(state, 'insertDynamicValue', [element, anchor, createGetter(value)], child))\n }\n }\n}\n\nfunction createComponentProps(\n state: CompileState,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.ObjectLiteralExpression {\n const properties: ts.ObjectLiteralElementLike[] = []\n\n for (const attribute of attributes.properties) {\n if (ts.isJsxSpreadAttribute(attribute)) {\n properties.push(ts.factory.createSpreadAssignment(attribute.expression))\n continue\n }\n\n const name = propertyName(attribute.name.getText())\n if (attribute.name.getText() === 'key') continue\n const initializer = attribute.initializer\n if (!initializer) {\n properties.push(ts.factory.createPropertyAssignment(name, ts.factory.createTrue()))\n } else if (ts.isStringLiteral(initializer)) {\n properties.push(ts.factory.createPropertyAssignment(name, ts.factory.createStringLiteral(initializer.text)))\n } else if (ts.isJsxExpression(initializer) && initializer.expression) {\n properties.push(createGetterProperty(name, transformEmbeddedExpression(state, initializer.expression)))\n }\n }\n\n const childExpressions = children.flatMap(child => childToComponentExpression(state, child))\n if (childExpressions.length === 1) {\n properties.push(createGetterProperty('children', childExpressions[0]))\n } else if (childExpressions.length > 1) {\n properties.push(createGetterProperty('children', ts.factory.createArrayLiteralExpression(childExpressions)))\n }\n\n return ts.factory.createObjectLiteralExpression(properties, true)\n}\n\nfunction createSourceLocation(node: ts.Node): ts.ObjectLiteralExpression {\n const sourceFile = node.getSourceFile()\n const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))\n return ts.factory.createObjectLiteralExpression([\n ts.factory.createPropertyAssignment('file', ts.factory.createStringLiteral(sourceFile.fileName)),\n ts.factory.createPropertyAssignment('line', ts.factory.createNumericLiteral(position.line + 1)),\n ts.factory.createPropertyAssignment('column', ts.factory.createNumericLiteral(position.character + 1))\n ], true)\n}\n\nfunction transformDynamicExpression(state: CompileState, expression: ts.Expression): ts.ArrowFunction | null {\n if (ts.isBinaryExpression(expression) && expression.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken) {\n const right = unwrapExpression(expression.right)\n if (!isJsxExpression(right)) return null\n return createGetter(ts.factory.createConditionalExpression(\n expression.left,\n ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n transformJsxExpression(state, right),\n ts.factory.createToken(ts.SyntaxKind.ColonToken),\n ts.factory.createNull()\n ))\n }\n\n if (ts.isConditionalExpression(expression)) {\n const whenTrue = transformDynamicBranch(state, expression.whenTrue)\n const whenFalse = transformDynamicBranch(state, expression.whenFalse)\n if (!whenTrue && !whenFalse) return null\n return createGetter(ts.factory.createConditionalExpression(\n expression.condition,\n ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n whenTrue ?? ts.factory.createNull(),\n ts.factory.createToken(ts.SyntaxKind.ColonToken),\n whenFalse ?? ts.factory.createNull()\n ))\n }\n\n return null\n}\n\nfunction transformDynamicBranch(state: CompileState, expression: ts.Expression): ts.Expression | null {\n const branch = unwrapExpression(expression)\n if (isJsxExpression(branch)) return transformJsxExpression(state, branch)\n if (branch.kind === ts.SyntaxKind.NullKeyword || branch.kind === ts.SyntaxKind.FalseKeyword) return branch\n return null\n}\n\nfunction transformListExpression(\n state: CompileState,\n parent: ts.Identifier,\n expression: ts.Expression,\n anchor: ts.Expression\n): ts.Expression[] | null {\n if (!ts.isCallExpression(expression) || expression.arguments.length !== 1) return null\n if (!ts.isPropertyAccessExpression(expression.expression) || expression.expression.name.text !== 'map') return null\n\n const callback = expression.arguments[0]\n if (!ts.isArrowFunction(callback) && !ts.isFunctionExpression(callback)) return null\n const body = unwrapExpression(callback.body)\n if (!isJsxExpression(body) || ts.isJsxFragment(body)) return null\n\n const key = findKeyExpression(body)\n const renderItem = transformListCallback(callback, transformJsxExpression(state, body))\n const args: ts.Expression[] = [\n parent,\n anchor,\n createGetter(expression.expression.expression),\n renderItem\n ]\n if (key) args.push(createKeyCallback(callback, key))\n return args\n}\n\nfunction transformListCallback(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n body: ts.Expression\n): ts.Expression {\n if (ts.isArrowFunction(callback)) {\n return ts.factory.updateArrowFunction(\n callback,\n callback.modifiers,\n callback.typeParameters,\n callback.parameters,\n callback.type,\n callback.equalsGreaterThanToken,\n body\n )\n }\n\n return ts.factory.updateFunctionExpression(\n callback,\n callback.modifiers,\n callback.asteriskToken,\n callback.name,\n callback.typeParameters,\n callback.parameters,\n callback.type,\n ts.factory.createBlock([ts.factory.createReturnStatement(body)], true)\n )\n}\n\nfunction createKeyCallback(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n key: ts.Expression\n): ts.ArrowFunction {\n return ts.factory.createArrowFunction(\n undefined,\n undefined,\n callback.parameters,\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n key\n )\n}\n\nfunction findKeyExpression(node: ts.JsxElement | ts.JsxSelfClosingElement): ts.Expression | null {\n const attributes = ts.isJsxElement(node) ? node.openingElement.attributes : node.attributes\n for (const attribute of attributes.properties) {\n if (!ts.isJsxAttribute(attribute) || attribute.name.getText() !== 'key') continue\n if (attribute.initializer && ts.isJsxExpression(attribute.initializer)) {\n return attribute.initializer.expression ?? null\n }\n }\n return null\n}\n\nfunction unwrapExpression(node: ts.Expression | ts.ConciseBody): ts.Expression {\n return ts.isParenthesizedExpression(node) ? node.expression : node as ts.Expression\n}\n\nfunction childToComponentExpression(state: CompileState, child: ts.JsxChild): ts.Expression[] {\n if (ts.isJsxText(child)) {\n const text = child.text.replace(/\\s+/g, ' ').trim()\n return text ? [ts.factory.createStringLiteral(text)] : []\n }\n if (ts.isJsxElement(child) || ts.isJsxSelfClosingElement(child) || ts.isJsxFragment(child)) {\n return [transformJsxExpression(state, child)]\n }\n if (child.kind === ts.SyntaxKind.JsxExpression) {\n const expression = (child as ts.JsxExpression).expression\n return expression ? [transformEmbeddedExpression(state, expression)] : []\n }\n return []\n}\n\nfunction propertyName(name: string): ts.PropertyName {\n return /^[$A-Z_a-z][$\\w]*$/u.test(name)\n ? ts.factory.createIdentifier(name)\n : ts.factory.createStringLiteral(name)\n}\n\nfunction createGetter(expression: ts.Expression): ts.ArrowFunction {\n return ts.factory.createArrowFunction(\n undefined,\n undefined,\n [],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n expression\n )\n}\n\nfunction createGetterProperty(name: string | ts.PropertyName, expression: ts.Expression): ts.GetAccessorDeclaration {\n return ts.factory.createGetAccessorDeclaration(\n undefined,\n typeof name === 'string' ? propertyName(name) : name,\n [],\n undefined,\n ts.factory.createBlock([ts.factory.createReturnStatement(expression)], true)\n )\n}\n\nfunction callStatement(state: CompileState, name: string, args: ts.Expression[], source?: ts.Node): ts.ExpressionStatement {\n const statement = ts.factory.createExpressionStatement(\n ts.factory.createCallExpression(helperRef(state, name), undefined, args)\n )\n return source ? tagStatement(state, statement, source) : statement\n}\n\nfunction createConstStatement(state: CompileState, name: ts.Identifier, initializer: ts.Expression, source?: ts.Node): ts.VariableStatement {\n const statement = ts.factory.createVariableStatement(\n undefined,\n ts.factory.createVariableDeclarationList([\n ts.factory.createVariableDeclaration(name, undefined, undefined, initializer)\n ], ts.NodeFlags.Const)\n )\n return source ? tagStatement(state, statement, source) : statement\n}\n\n/** Record where an emitted statement originated from, for source map generation. */\nfunction tagStatement<T extends ts.Statement>(state: CompileState, statement: T, source: ts.Node): T {\n const position = positionOfNode(state, source)\n if (position) state.statementSources.set(statement, position)\n return statement\n}\n\nfunction positionOfNode(state: CompileState, node: ts.Node): SourcePosition | null {\n // ts.transform 产生的节点副本可能丢失 sourceFile 引用,回退到当前编译的源文件。\n const sourceFile = node.getSourceFile() ?? state.sourceFile\n if (!sourceFile || node.pos < 0) return null\n const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))\n return { line, column: character }\n}\n\nfunction nextIdentifier(state: CompileState, prefix: string): ts.Identifier {\n let name: string\n do {\n name = `${prefix}${state.generatedId++}`\n } while (state.takenNames.has(name))\n return ts.factory.createIdentifier(name)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/compile.ts"],"sourcesContent":["import ts from 'typescript'\nimport { VobsError } from '@vobs/runtime/error'\nimport type {\n CompilerContext,\n CompilerOptions,\n CompilerPlugin,\n CompileOptions,\n CompileResult,\n CompilerDiagnostic,\n VobsCompiler\n} from './plugin'\n\n/**\n * 单次编译的全部可变状态。\n *\n * 此前这些字段是模块级变量,编译器因此不可重入:嵌套调用 compile()\n * (如插件内部再次编译片段)会互相污染状态。现在每次 compile 调用\n * 创建独立的 CompileState 并显式穿参,编译器对并发与嵌套完全安全。\n */\ninterface CompileState {\n /** 临时标识符计数器(_el0、_el1…)。 */\n generatedId: number\n filename: string\n /** 最初解析出的源文件。插件 program 变换后的树节点无法回溯原始位置时,用它兜底取行列。 */\n sourceFile: ts.SourceFile\n /** 生成语句 → 原始源码位置,用于 source map 生成。 */\n statementSources: WeakMap<ts.Statement, SourcePosition>\n /** 源文件中已声明的绑定名(含嵌套作用域):注入运行时 import 与生成临时变量时避开命名冲突。 */\n takenNames: Set<string>\n /** 运行时 helper 的规范名 → 产物中的引用名(无冲突时与规范名相同)。 */\n helperAliases: Map<string, string>\n /** 静态模板声明:HTML → 模块级模板变量,按内容去重,输出在 import 之后。 */\n templates: Map<string, ts.Identifier>\n /** 是否为组件调用生成源码位置(生产构建传 false 剔除,减小产物体积)。 */\n sourceLocation: boolean\n /** 从 @vobs/reactivity / @vobs/vobs 导入的 `state` 别名(含 as 别名),用于 debugName 自动推断。 */\n stateAliases: ReadonlySet<string>\n /** 非 import 的本地声明绑定名:`state` 被本地声明遮蔽时禁用 debugName 推断。 */\n localBindings: ReadonlySet<string>\n /** 编译器自身产出的诊断(如不支持的 JSX 形态),与 TypeScript 解析诊断合并返回。 */\n diagnostics: CompilerDiagnostic[]\n /** HMR 模块标识:提供后模块顶层 state() 声明包装为 hmrStateRef,跨热更新保活信号。 */\n hmrModuleId: string | null\n}\n\ninterface SourcePosition {\n readonly line: number\n readonly column: number\n}\n\nexport function createCompiler(options: CompilerOptions = {}): VobsCompiler {\n const basePlugins = options.plugins ?? []\n\n return {\n compile(code: string, overrides: CompileOptions = {}): string {\n return compile(code, {\n ...overrides,\n plugins: [...basePlugins, ...(overrides.plugins ?? [])]\n })\n },\n compileWithSourceMap(code: string, overrides: CompileOptions = {}): CompileResult {\n return compileWithSourceMap(code, {\n ...overrides,\n plugins: [...basePlugins, ...(overrides.plugins ?? [])]\n })\n }\n }\n}\n\nexport function compile(code: string, options: CompileOptions = {}): string {\n const result = compileWithSourceMap(code, options)\n const firstError = result.diagnostics.find(diagnostic => diagnostic.severity === 'error')\n if (firstError) {\n throw new VobsError({\n code: firstError.code,\n layer: 'compiler',\n message: firstError.message,\n location: firstError.location,\n codeFrame: firstError.codeFrame,\n fix: firstError.fix\n })\n }\n return result.code\n}\n\nexport function compileWithSourceMap(code: string, options: CompileOptions = {}): CompileResult {\n const filename = options.filename ?? 'component.tsx'\n let sourceFile = ts.createSourceFile(\n filename,\n code,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TSX\n )\n const state: CompileState = {\n generatedId: 0,\n filename,\n sourceFile,\n statementSources: new WeakMap(),\n takenNames: collectDeclaredNames(sourceFile),\n helperAliases: new Map(),\n templates: new Map(),\n sourceLocation: options.sourceLocation ?? true,\n stateAliases: collectStateAliases(sourceFile),\n localBindings: collectLocallyDeclaredNames(sourceFile),\n diagnostics: [],\n hmrModuleId: options.hmrModuleId ?? null\n }\n const cleanFilename = filename.split(/[?#]/u, 1)[0] || filename\n const diagnostics = ts.transpileModule(code, {\n // Vite appends query strings (for example `?direct`) to module IDs;\n // strip them so TypeScript still recognizes TSX syntax for diagnostics.\n fileName: cleanFilename,\n reportDiagnostics: true,\n compilerOptions: { jsx: ts.JsxEmit.Preserve, target: ts.ScriptTarget.Latest }\n }).diagnostics?.map(diagnostic => toCompilerDiagnostic(diagnostic, sourceFile, cleanFilename)) ?? []\n const plugins = options.plugins ?? []\n validatePlugins(plugins)\n\n const context: CompilerContext = {\n filename,\n factory: ts.factory,\n addRuntimeImport(name: string): void {\n resolveHelperName(state, name)\n },\n helperRef: (name: string) => helperRef(state, name)\n }\n\n for (const plugin of plugins) plugin.analyze?.(sourceFile, context)\n for (const plugin of plugins) {\n sourceFile = plugin.transform?.program?.(sourceFile, context) ?? sourceFile\n }\n for (const plugin of plugins) sourceFile = transformPluginNodes(sourceFile, plugin, context)\n\n const statements = sourceFile.statements.map(statement =>\n ts.isImportDeclaration(statement) ? rebuildImport(state, statement) : transformStatement(state, statement, true)\n )\n // 模板声明必须先于 runtime import 生成:声明里的 createTemplate 依赖\n // helperRef 注册别名,import 需要在别名全部就绪后再构建。\n const templateDeclarations = createTemplateDeclarations(state)\n let resultFile = ts.factory.updateSourceFile(sourceFile, [\n ...createRuntimeImports(state),\n ...templateDeclarations,\n ...statements\n ])\n resultFile = transformResidualJsx(state, resultFile)\n\n const generated = ts.createPrinter().printFile(resultFile)\n return {\n code: generated,\n map: buildSourceMap(state, filename, code, generated, resultFile),\n diagnostics: [...diagnostics, ...state.diagnostics]\n }\n}\n\nfunction toCompilerDiagnostic(\n diagnostic: ts.Diagnostic,\n sourceFile: ts.SourceFile,\n filename: string\n): CompilerDiagnostic {\n const start = diagnostic.start ?? 0\n const length = diagnostic.length ?? 1\n const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n')\n const { line, column, codeFrame } = buildCodeFrame(sourceFile, start, length)\n return {\n code: `VOBS_C${String(diagnostic.code).padStart(3, '0')}`,\n severity: diagnostic.category === ts.DiagnosticCategory.Warning ? 'warning' : 'error',\n message,\n location: { file: filename, line, column },\n codeFrame\n }\n}\n\nfunction buildCodeFrame(\n sourceFile: ts.SourceFile,\n start: number,\n length: number\n): { line: number; column: number; codeFrame: string } {\n const position = sourceFile.getLineAndCharacterOfPosition(start)\n const lineText = sourceFile.text.split(/\\r?\\n/u)[position.line] ?? ''\n const markerLength = Math.max(1, Math.min(length, Math.max(1, lineText.length - position.character)))\n return {\n line: position.line + 1,\n column: position.character + 1,\n codeFrame: `${position.line + 1} | ${lineText}\\n${' '.repeat(String(position.line + 1).length + 3 + position.character)}${'^'.repeat(markerLength)}`\n }\n}\n\n/**\n * 不支持的 JSX 标签形态(成员表达式 `<Foo.Bar>`、命名空间 `<svg:rect>` 等)。\n * 诊断以 error 级返回,compile() 与 Vite 插件会直接失败,不再静默产出无效 DOM 标签。\n */\nfunction reportUnsupportedTag(state: CompileState, tagName: ts.JsxTagNameExpression): void {\n const sourceFile = tagName.getSourceFile() ?? state.sourceFile\n if (!sourceFile) return\n const label = tagName.getText()\n const kindNote = tagName.kind === ts.SyntaxKind.JsxNamespacedName ? '(JSX 命名空间标签)' : ''\n const { line, column, codeFrame } = buildCodeFrame(sourceFile, tagName.getStart(sourceFile), tagName.getWidth(sourceFile))\n state.diagnostics.push({\n code: 'VOBS_C101',\n severity: 'error',\n message: `不支持的 JSX 标签形态:<${label}>${kindNote}。组件必须是大写开头的标识符,DOM 元素必须是小写标签名。`,\n location: { file: state.filename, line, column },\n codeFrame,\n fix: `把 <${label}> 改为 <Component /> 形式的组件或小写 DOM 标签;Fragment 请使用 <Fragment> 或 <>...</>。`\n })\n}\n\ninterface MappingSegment {\n readonly genLine: number\n readonly genCol: number\n readonly srcLine: number\n readonly srcCol: number\n}\n\n/**\n * Build a real statement-level source map. The generated file is re-parsed and\n * paired structurally with the compiled tree (statements map 1:1 inside every\n * block), so each emitted statement points back to the JSX or original\n * statement it was produced from.\n */\nfunction buildSourceMap(\n state: CompileState,\n filename: string,\n source: string,\n generated: string,\n resultFile: ts.SourceFile\n): import('./plugin').VobsSourceMap {\n const reparsed = ts.createSourceFile(filename, generated, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX)\n const segments: MappingSegment[] = []\n walkPairedTrees(state, resultFile, reparsed, reparsed, segments)\n segments.sort((a, b) => a.genLine - b.genLine || a.genCol - b.genCol)\n return {\n version: 3,\n file: filename,\n sources: [filename],\n sourcesContent: [source],\n names: [],\n mappings: encodeMappings(segments, generated.split('\\n').length)\n }\n}\n\n/** Statements only nest inside these container kinds. */\nfunction statementLists(node: ts.Node): readonly ts.Statement[] | null {\n if (ts.isSourceFile(node) || ts.isBlock(node) || ts.isModuleBlock(node)) return node.statements\n if (ts.isCaseClause(node) || ts.isDefaultClause(node)) return node.statements\n return null\n}\n\n/**\n * Pair the compiled tree with the re-parsed generated tree node by node.\n * Both trees were printed from the same AST, so their shapes are identical;\n * any divergence (length mismatch) simply abandons that subtree.\n */\nfunction walkPairedTrees(\n state: CompileState,\n original: ts.Node,\n generated: ts.Node,\n reparsed: ts.SourceFile,\n segments: MappingSegment[]\n): void {\n const originalStatements = statementLists(original)\n const generatedStatements = statementLists(generated)\n if (originalStatements && generatedStatements) {\n if (originalStatements.length !== generatedStatements.length) return\n for (let index = 0; index < originalStatements.length; index++) {\n const originalStatement = originalStatements[index]\n const generatedStatement = generatedStatements[index]\n recordSegment(state, originalStatement, generatedStatement, reparsed, segments)\n walkPairedTrees(state, originalStatement, generatedStatement, reparsed, segments)\n }\n return\n }\n\n const originalChildren: ts.Node[] = []\n const generatedChildren: ts.Node[] = []\n ts.forEachChild(original, node => { originalChildren.push(node) })\n ts.forEachChild(generated, node => { generatedChildren.push(node) })\n if (originalChildren.length !== generatedChildren.length) return\n for (let index = 0; index < originalChildren.length; index++) {\n walkPairedTrees(state, originalChildren[index], generatedChildren[index], reparsed, segments)\n }\n}\n\nfunction recordSegment(\n state: CompileState,\n originalStatement: ts.Statement,\n generatedStatement: ts.Statement,\n reparsed: ts.SourceFile,\n segments: MappingSegment[]\n): void {\n const source = state.statementSources.get(originalStatement) ?? positionOfOriginalStatement(state, originalStatement)\n if (!source) return\n const position = reparsed.getLineAndCharacterOfPosition(generatedStatement.getStart(reparsed))\n segments.push({\n genLine: position.line,\n genCol: position.character,\n srcLine: source.line,\n srcCol: source.column\n })\n}\n\nfunction positionOfOriginalStatement(state: CompileState, statement: ts.Statement): SourcePosition | null {\n if (statement.pos < 0 || !state.sourceFile) return null\n const { line, character } = state.sourceFile.getLineAndCharacterOfPosition(\n statement.getStart(state.sourceFile)\n )\n return { line, column: character }\n}\n\nfunction encodeMappings(segments: readonly MappingSegment[], lineCount: number): string {\n const lines: string[][] = Array.from({ length: lineCount }, () => [])\n let prevGenLine = -1\n let prevGenCol = 0\n let prevSrcLine = 0\n let prevSrcCol = 0\n for (const segment of segments) {\n if (segment.genLine !== prevGenLine) {\n prevGenCol = 0\n prevGenLine = segment.genLine\n }\n const values = [\n segment.genCol - prevGenCol,\n 0,\n segment.srcLine - prevSrcLine,\n segment.srcCol - prevSrcCol\n ]\n lines[segment.genLine].push(values.map(encodeVlq).join(''))\n prevGenCol = segment.genCol\n prevSrcLine = segment.srcLine\n prevSrcCol = segment.srcCol\n }\n return lines.map(line => line.join(',')).join(';')\n}\n\nconst base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\nfunction encodeVlq(value: number): string {\n let encoded = value < 0 ? ((-value) << 1) | 1 : value << 1\n let result = ''\n do {\n let digit = encoded & 31\n encoded >>>= 5\n if (encoded > 0) digit |= 32\n result += base64Chars[digit]\n } while (encoded > 0)\n return result\n}\n\nfunction validatePlugins(plugins: readonly CompilerPlugin[]): void {\n const names = new Set<string>()\n for (const plugin of plugins) {\n if (!plugin.name) throw new VobsError({ code: 'VOBS_C007', layer: 'compiler', message: '编译器插件必须提供 name', fix: '为插件添加稳定且唯一的 name。' })\n if (names.has(plugin.name)) throw new VobsError({ code: 'VOBS_C007', layer: 'compiler', message: `检测到重复插件: ${plugin.name}`, fix: '为每个编译器插件使用唯一的 name。' })\n names.add(plugin.name)\n }\n}\n\nfunction transformPluginNodes(\n sourceFile: ts.SourceFile,\n plugin: CompilerPlugin,\n context: CompilerContext\n): ts.SourceFile {\n const transformNode = plugin.transform?.node ?? plugin.transformNode\n if (!transformNode) return sourceFile\n\n const transformer: ts.TransformerFactory<ts.SourceFile> = transformContext => root => {\n const visit: ts.Visitor = node => {\n const replacement = transformNode(node, context)\n if (replacement === null) return undefined\n return ts.visitEachChild(replacement ?? node, visit, transformContext)\n }\n return ts.visitNode(root, visit) as ts.SourceFile\n }\n\n const result = ts.transform(sourceFile, [transformer])\n try {\n return result.transformed[0]\n } finally {\n result.dispose()\n }\n}\n\n/**\n * Collect every binding name declared anywhere in the source (imports, variables,\n * functions, parameters, ... including nested scopes). If a helper name is bound\n * in ANY scope, the injected runtime import must switch to an alias: generated\n * references uniformly use the alias, so user code is never captured or duplicated.\n */\nfunction collectDeclaredNames(sourceFile: ts.SourceFile): Set<string> {\n const names = new Set<string>()\n const visit = (node: ts.Node): void => {\n if (ts.isIdentifier(node) && isBindingName(node)) names.add(node.text)\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return names\n}\n\n/** 收集从 @vobs/reactivity / @vobs/vobs 导入的 `state` 绑定名(含 `as` 别名)。 */\nfunction collectStateAliases(sourceFile: ts.SourceFile): Set<string> {\n const aliases = new Set<string>()\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier)) continue\n const module = statement.moduleSpecifier.text\n if (module !== '@vobs/reactivity' && module !== '@vobs/vobs') continue\n const clause = statement.importClause\n if (!clause?.namedBindings || !ts.isNamedImports(clause.namedBindings)) continue\n for (const element of clause.namedBindings.elements) {\n if (element.propertyName ? element.propertyName.text === 'state' : element.name.text === 'state') {\n aliases.add(element.name.text)\n }\n }\n }\n return aliases\n}\n\n/** 与 collectDeclaredNames 相同,但跳过 import 声明:用于判断 helper 名是否被本地声明遮蔽。 */\nfunction collectLocallyDeclaredNames(sourceFile: ts.SourceFile): Set<string> {\n const names = new Set<string>()\n const visit = (node: ts.Node): void => {\n if (ts.isImportDeclaration(node)) return\n if (ts.isIdentifier(node) && isBindingName(node)) names.add(node.text)\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return names\n}\n\n/** 标识符是否为某个声明的绑定名(import、变量、函数、参数、类成员等)。 */\nfunction isBindingName(node: ts.Identifier): boolean {\n const parent = node.parent\n if (!parent) return false\n // 属性访问(document.createElement)与 JSX 属性名不是绑定名\n if (ts.isPropertyAccessExpression(parent) && parent.name === node) return false\n if (ts.isQualifiedName(parent) && parent.right === node) return false\n if (ts.isJsxAttribute(parent)) return false\n return (parent as { name?: ts.Node }).name === node\n}\n\n/**\n * Resolve the reference name for a runtime helper. The plain name is kept when\n * the source never binds it; otherwise a collision-free alias is allocated and\n * the injected import uses the same alias (`import { createElement as _vobs_createElement }`).\n */\nfunction resolveHelperName(state: CompileState, name: string): string {\n const existing = state.helperAliases.get(name)\n if (existing) return existing\n let alias = name\n if (state.takenNames.has(alias)) {\n alias = `_vobs_${name}`\n let suffix = 1\n while (state.takenNames.has(alias)) alias = `_vobs_${name}_${suffix++}`\n }\n state.helperAliases.set(name, alias)\n return alias\n}\n\n/** Create a reference to a runtime helper in generated code, matching the injected import. */\nfunction helperRef(state: CompileState, name: string): ts.Identifier {\n return ts.factory.createIdentifier(resolveHelperName(state, name))\n}\n\nfunction createRuntimeImports(state: CompileState): ts.ImportDeclaration[] {\n const modules = new Map<string, ts.ImportSpecifier[]>()\n for (const [name, alias] of state.helperAliases) {\n const module = name === 'insertResourceBoundary' ? '@vobs/resource' : '@vobs/vobs'\n const imported = modules.get(module) ?? []\n imported.push(ts.factory.createImportSpecifier(\n false,\n alias === name ? undefined : ts.factory.createIdentifier(name),\n ts.factory.createIdentifier(alias)\n ))\n modules.set(module, imported)\n }\n return [...modules.entries()].map(([module, imported]) => ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(imported)\n ),\n ts.factory.createStringLiteral(module)\n ))\n}\n\nfunction rebuildImport(state: CompileState, node: ts.ImportDeclaration): ts.ImportDeclaration {\n if (!ts.isStringLiteral(node.moduleSpecifier)) return node\n return tagStatement(state, ts.factory.createImportDeclaration(\n node.modifiers,\n node.importClause,\n ts.factory.createStringLiteral(node.moduleSpecifier.text),\n node.attributes\n ), node)\n}\n\nfunction transformStatement(state: CompileState, node: ts.Statement, moduleScope = false): ts.Statement {\n if (ts.isFunctionDeclaration(node) && node.body) {\n return tagStatement(state, ts.factory.updateFunctionDeclaration(\n node,\n node.modifiers,\n node.asteriskToken,\n node.name,\n node.typeParameters,\n node.parameters,\n node.type,\n transformBlock(state, node.body)\n ), node)\n }\n\n if (ts.isVariableStatement(node)) return transformVariableStatement(state, node, moduleScope)\n if (ts.isExportAssignment(node) && containsJsx(node.expression)) {\n return tagStatement(state, ts.factory.updateExportAssignment(node, node.modifiers, transformEmbeddedExpression(state, node.expression)), node)\n }\n if (ts.isExpressionStatement(node) && containsJsx(node.expression)) {\n return tagStatement(state, ts.factory.updateExpressionStatement(node, transformEmbeddedExpression(state, node.expression)), node)\n }\n if (ts.isReturnStatement(node) && node.expression && containsJsx(node.expression)) {\n return tagStatement(state, ts.factory.updateReturnStatement(node, transformEmbeddedExpression(state, node.expression)), node)\n }\n return node\n}\n\nfunction transformVariableStatement(state: CompileState, node: ts.VariableStatement, moduleScope = false): ts.VariableStatement {\n let changed = false\n const declarations = node.declarationList.declarations.map(declaration => {\n const initializer = declaration.initializer\n if (!initializer) return declaration\n\n let nextInitializer = inferStateDebugName(state, declaration, initializer) ?? initializer\n if (containsJsx(nextInitializer)) {\n nextInitializer = transformEmbeddedExpression(state, nextInitializer)\n } else if (moduleScope && state.hmrModuleId !== null) {\n // HMR 状态保鲜仅限模块顶层:函数内局部 state 每次调用都应创建新信号\n nextInitializer = wrapStateWithHmrRef(state, declaration, nextInitializer) ?? nextInitializer\n }\n if (nextInitializer === initializer) return declaration\n\n changed = true\n return ts.factory.updateVariableDeclaration(\n declaration,\n declaration.name,\n declaration.exclamationToken,\n declaration.type,\n nextInitializer\n )\n })\n\n if (!changed) return node\n\n return tagStatement(state, ts.factory.updateVariableStatement(\n node,\n node.modifiers,\n ts.factory.updateVariableDeclarationList(node.declarationList, declarations)\n ), node)\n}\n\n/**\n * `const name = state(initial)` 在未显式传入 debugName 时从变量名推断:\n * `const username = state('')` → `state('', 'username')`,使 DevTools 信号名称与源码命名一致。\n * 仅当 `state` 确认来自 @vobs/reactivity / @vobs/vobs、未被本地声明遮蔽、\n * 且调用只带一个参数时启用;其余形态保持原样。\n */\nfunction inferStateDebugName(\n state: CompileState,\n declaration: ts.VariableDeclaration,\n initializer: ts.Expression\n): ts.Expression | undefined {\n if (state.stateAliases.size === 0) return undefined\n if (!ts.isIdentifier(declaration.name)) return undefined\n\n let call = initializer\n while (ts.isParenthesizedExpression(call) || ts.isAsExpression(call) || ts.isTypeAssertionExpression(call) || ts.isSatisfiesExpression(call)) {\n call = call.expression\n }\n if (!ts.isCallExpression(call)) return undefined\n const callee = call.expression\n if (!ts.isIdentifier(callee) || !state.stateAliases.has(callee.text)) return undefined\n if (state.localBindings.has(callee.text)) return undefined\n if (call.arguments.length !== 1) return undefined\n\n return ts.factory.createCallExpression(callee, call.typeArguments, [\n ...call.arguments,\n ts.factory.createStringLiteral(declaration.name.text)\n ])\n}\n\n/**\n * HMR 状态保鲜:模块热更新重执行时,模块级 state() 会创建全新信号实例,与未重执行的\n * 导入方持有旧实例并存,形成\"两份状态\"(症状:编辑不生效、页面半边失灵,全量刷新也无法\n * 消除)。开启 hmrModuleId 后,模块顶层的 state 声明改经运行时注册表取值:\n * `const x = state(init)` → `const x = hmrStateRef(moduleId, 'x', () => state(init, 'x'))`。\n * 首次执行照常创建;模块重执行时直接复用既有信号,模块逻辑(副作用、导出绑定)照常重跑。\n */\nfunction wrapStateWithHmrRef(\n state: CompileState,\n declaration: ts.VariableDeclaration,\n initializer: ts.Expression\n): ts.Expression | undefined {\n let call = initializer\n while (ts.isParenthesizedExpression(call) || ts.isAsExpression(call) || ts.isTypeAssertionExpression(call) || ts.isSatisfiesExpression(call)) {\n call = call.expression\n }\n if (!ts.isCallExpression(call)) return undefined\n const callee = call.expression\n if (!ts.isIdentifier(callee) || !state.stateAliases.has(callee.text)) return undefined\n if (state.localBindings.has(callee.text)) return undefined\n if (!ts.isIdentifier(declaration.name)) return undefined\n return ts.factory.createCallExpression(helperRef(state, 'hmrStateRef'), undefined, [\n ts.factory.createStringLiteral(`${state.hmrModuleId}#${declaration.name.text}`),\n ts.factory.createArrowFunction(\n undefined,\n undefined,\n [],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n initializer\n )\n ])\n}\n\nfunction containsJsx(expression: ts.Expression | ts.SourceFile): boolean {\n let found = false\n const visit = (node: ts.Node): void => {\n if (isJsxExpression(node as ts.Expression)) {\n found = true\n return\n }\n ts.forEachChild(node, visit)\n }\n visit(expression)\n return found\n}\n\nfunction transformBlock(state: CompileState, block: ts.Block): ts.Block {\n const statements = block.statements.map(statement => {\n if (!ts.isReturnStatement(statement) || !statement.expression) return transformStatement(state, statement)\n const expression = ts.isParenthesizedExpression(statement.expression)\n ? statement.expression.expression\n : statement.expression\n return isJsxExpression(expression)\n ? tagStatement(state, ts.factory.updateReturnStatement(statement, transformJsxExpression(state, expression)), statement)\n : statement\n })\n return ts.factory.updateBlock(block, statements)\n}\n\nfunction isJsxExpression(node: ts.Expression): node is ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment {\n return ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)\n}\n\nfunction transformJsxExpression(state: CompileState, node: ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment): ts.Expression {\n if (ts.isJsxFragment(node)) return transformFragment(state, node.children)\n if (ts.isJsxElement(node)) {\n return transformElement(state, node, node.openingElement.tagName, node.openingElement.attributes, node.children)\n }\n return transformElement(state, node, node.tagName, node.attributes, [])\n}\n\nfunction transformElement(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n tagName: ts.JsxTagNameExpression,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n if (isFragmentTag(tagName)) return transformFragment(state, children)\n if (!ts.isIdentifier(tagName)) {\n // <Foo.Bar>、<svg:rect> 等形态此前会静默编译成无效 DOM 标签(createElement(\"Foo.Bar\"))。\n // 报结构化诊断后按原路径继续,保证产物结构稳定;compile()/Vite 插件会因 error 诊断直接失败。\n reportUnsupportedTag(state, tagName)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'ResourceBoundary') {\n return transformResourceBoundary(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'AsyncBoundary') {\n return transformAsyncBoundary(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'ErrorBoundary') {\n return transformErrorBoundary(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && tagName.text === 'Profiler') {\n return transformProfiler(state, node, attributes, children)\n }\n if (ts.isIdentifier(tagName) && /^[A-Z]/.test(tagName.text)) {\n const args: ts.Expression[] = [\n ts.factory.createCallExpression(helperRef(state, 'resolveComponent'), undefined, [\n tagName,\n ts.factory.createStringLiteral(state.filename),\n ts.factory.createStringLiteral(tagName.text)\n ]),\n createComponentProps(state, attributes, children)\n ]\n // 源码位置仅用于错误定位与 DevTools;生产构建可整体剔除(错误仍带组件名,定位走 source map)。\n if (state.sourceLocation) args.push(createSourceLocation(tagName))\n return ts.factory.createCallExpression(helperRef(state, 'createComponent'), undefined, args)\n }\n\n // 静态模板提升:完全静态的 DOM 子树(无事件/动态绑定/spread/property 属性)序列化为\n // 模块级模板,运行时一次 cloneNode 替代 createElement + setStaticProps + 逐子插入。\n if (isStaticElement(tagName, attributes, children)) {\n return ts.factory.createCallExpression(\n helperRef(state, 'cloneTemplate'),\n undefined,\n [registerTemplate(state, serializeStaticHtml(node))]\n )\n }\n\n const elementName = tagName.getText()\n const elementId = nextIdentifier(state, '_el')\n const statements: ts.Statement[] = [\n createConstStatement(\n state,\n elementId,\n ts.factory.createCallExpression(\n helperRef(state, 'createElement'),\n undefined,\n [ts.factory.createStringLiteral(elementName)]\n ),\n node\n )\n ]\n\n appendAttributes(state, statements, elementId, attributes)\n appendChildren(state, statements, elementId, children)\n statements.push(tagStatement(state, ts.factory.createReturnStatement(elementId), node))\n\n return ts.factory.createCallExpression(\n ts.factory.createArrowFunction(\n undefined,\n undefined,\n [],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n ts.factory.createBlock(statements, true)\n ),\n undefined,\n []\n )\n}\n\nfunction isFragmentTag(tagName: ts.JsxTagNameExpression): boolean {\n return tagName.getText() === 'Fragment' || tagName.getText() === 'Vobs.Fragment'\n}\n\nfunction transformFragment(state: CompileState, children: readonly ts.JsxChild[]): ts.Expression {\n const parent = nextIdentifier(state, '_fragmentParent')\n const anchor = nextIdentifier(state, '_fragmentAnchor')\n const statements: ts.Statement[] = []\n appendChildren(state, statements, parent, children, anchor)\n return ts.factory.createCallExpression(\n helperRef(state, 'createFragment'),\n undefined,\n [ts.factory.createArrowFunction(\n undefined,\n undefined,\n [\n ts.factory.createParameterDeclaration(undefined, undefined, parent),\n ts.factory.createParameterDeclaration(undefined, undefined, anchor)\n ],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n ts.factory.createBlock(statements, true)\n )]\n )\n}\n\nfunction transformResourceBoundary(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const resource = getAttributeExpression(attributes, 'resource')\n if (!resource) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'ResourceBoundary 必须提供 resource 属性', fix: '为 ResourceBoundary 添加 resource={resource}。' })\n const options: ts.ObjectLiteralElementLike[] = [\n ts.factory.createPropertyAssignment('resource', transformEmbeddedExpression(state, resource)),\n ts.factory.createPropertyAssignment('children', createBoundaryFactory(state, children))\n ]\n appendBoundaryOptionalProperty(state, options, attributes, 'loading')\n appendBoundaryOptionalProperty(state, options, attributes, 'empty')\n appendBoundaryOptionalProperty(state, options, attributes, 'fallback')\n return createBoundaryFragment(state, node, 'insertResourceBoundary', options)\n}\n\nfunction transformErrorBoundary(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const fallback = getAttributeExpression(attributes, 'fallback')\n if (!fallback) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'ErrorBoundary 必须提供 fallback 属性', fix: '为 ErrorBoundary 添加 fallback={(error, retry) => ...}。' })\n return createBoundaryFragment(state, node, 'insertErrorBoundary', [\n ts.factory.createPropertyAssignment('children', createBoundaryFactory(state, children)),\n ts.factory.createPropertyAssignment('fallback', transformEmbeddedExpression(state, fallback))\n ])\n}\n\nfunction transformAsyncBoundary(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const promise = getAttributeExpression(attributes, 'promise')\n if (!promise) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'AsyncBoundary 必须提供 promise 属性', fix: '为 AsyncBoundary 添加 promise={promise}。' })\n const options: ts.ObjectLiteralElementLike[] = [\n ts.factory.createPropertyAssignment('promise', transformEmbeddedExpression(state, promise)),\n ts.factory.createPropertyAssignment('children', createAsyncFactory(state, children))\n ]\n appendBoundaryOptionalProperty(state, options, attributes, 'loading')\n appendBoundaryOptionalProperty(state, options, attributes, 'fallback')\n const resetKey = getAttributeExpression(attributes, 'resetKey')\n if (resetKey) options.push(ts.factory.createPropertyAssignment('resetKey', createGetter(resetKey)))\n return createBoundaryFragment(state, node, 'insertAsyncBoundary', options)\n}\n\nfunction transformProfiler(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.Expression {\n const idAttribute = attributes.properties.find(attribute => ts.isJsxAttribute(attribute) && attribute.name.getText() === 'id')\n const id = idAttribute && ts.isJsxAttribute(idAttribute) && idAttribute.initializer && ts.isStringLiteral(idAttribute.initializer)\n ? ts.factory.createStringLiteral(idAttribute.initializer.text)\n : idAttribute && ts.isJsxAttribute(idAttribute) && idAttribute.initializer && ts.isJsxExpression(idAttribute.initializer)\n ? idAttribute.initializer.expression\n : null\n if (!id) throw new VobsError({ code: 'VOBS_C002', layer: 'compiler', message: 'Profiler 必须提供 id 属性', fix: '为 Profiler 添加 id=\"ComponentName\"。' })\n const options: ts.ObjectLiteralElementLike[] = [\n ts.factory.createPropertyAssignment('id', transformEmbeddedExpression(state, id)),\n ts.factory.createPropertyAssignment('children', createBoundaryFactory(state, children))\n ]\n appendBoundaryOptionalProperty(state, options, attributes, 'onRender')\n return createBoundaryFragment(state, node, 'insertProfiler', options)\n}\n\nfunction createBoundaryFragment(\n state: CompileState,\n node: ts.JsxElement | ts.JsxSelfClosingElement,\n helper: 'insertResourceBoundary' | 'insertErrorBoundary' | 'insertAsyncBoundary' | 'insertProfiler',\n options: readonly ts.ObjectLiteralElementLike[]\n): ts.Expression {\n const parent = nextIdentifier(state, '_boundaryParent')\n const anchor = nextIdentifier(state, '_boundaryAnchor')\n return ts.factory.createCallExpression(\n helperRef(state, 'createFragment'),\n undefined,\n [ts.factory.createArrowFunction(\n undefined,\n undefined,\n [\n ts.factory.createParameterDeclaration(undefined, undefined, parent),\n ts.factory.createParameterDeclaration(undefined, undefined, anchor)\n ],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n ts.factory.createBlock([callStatement(state, helper, [\n parent,\n anchor,\n ts.factory.createObjectLiteralExpression(options, true)\n ], node)], true)\n )]\n )\n}\n\nfunction createBoundaryFactory(state: CompileState, children: readonly ts.JsxChild[]): ts.ArrowFunction {\n const content = transformFragment(state, children)\n return ts.factory.createArrowFunction(\n undefined,\n undefined,\n [],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n content\n )\n}\n\nfunction createAsyncFactory(state: CompileState, children: readonly ts.JsxChild[]): ts.ArrowFunction {\n const value = ts.factory.createIdentifier('value')\n const expressionChild = children.length === 1 && children[0].kind === ts.SyntaxKind.JsxExpression\n ? (children[0] as ts.JsxExpression).expression\n : undefined\n if (expressionChild && ts.isArrowFunction(expressionChild)) {\n const transformed = transformEmbeddedExpression(state, expressionChild)\n return transformed as ts.ArrowFunction\n }\n const content = transformFragment(state, children)\n return ts.factory.createArrowFunction(undefined, undefined, [\n ts.factory.createParameterDeclaration(undefined, undefined, value)\n ], undefined, ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), content)\n}\n\nfunction appendBoundaryOptionalProperty(\n state: CompileState,\n properties: ts.ObjectLiteralElementLike[],\n attributes: ts.JsxAttributes,\n name: string\n): void {\n const expression = getAttributeExpression(attributes, name)\n if (expression) {\n const transformed = transformEmbeddedExpression(state, expression)\n const value = isJsxExpression(unwrapExpression(expression))\n ? createGetter(transformed)\n : transformed\n properties.push(ts.factory.createPropertyAssignment(name, value))\n }\n}\n\nfunction getAttributeExpression(attributes: ts.JsxAttributes, name: string): ts.Expression | null {\n for (const attribute of attributes.properties) {\n if (!ts.isJsxAttribute(attribute) || attribute.name.getText() !== name) continue\n if (attribute.initializer && ts.isJsxExpression(attribute.initializer)) {\n return attribute.initializer.expression ?? null\n }\n }\n return null\n}\n\nfunction transformEmbeddedExpression(state: CompileState, expression: ts.Expression): ts.Expression {\n const result = ts.transform(expression, [context => root => {\n const visit: ts.Visitor = node => {\n if (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) {\n return transformJsxExpression(state, node)\n }\n return ts.visitEachChild(node, visit, context)\n }\n return ts.visitNode(root, visit) as ts.Expression\n }])\n try {\n return result.transformed[0]\n } finally {\n result.dispose()\n }\n}\n\n\nfunction transformResidualJsx(state: CompileState, sourceFile: ts.SourceFile): ts.SourceFile {\n if (!containsJsx(sourceFile)) return sourceFile\n const result = ts.transform(sourceFile, [context => root => {\n const visit: ts.Visitor = node => {\n if (ts.isReturnStatement(node) && node.expression && containsJsx(node.expression)) {\n return ts.factory.updateReturnStatement(node, transformEmbeddedExpression(state, node.expression))\n }\n if (isJsxExpression(node as ts.Expression)) {\n return transformJsxExpression(state, node as ts.JsxElement | ts.JsxSelfClosingElement | ts.JsxFragment)\n }\n return ts.visitEachChild(node, visit, context)\n }\n return ts.visitNode(root, visit) as ts.SourceFile\n }])\n try {\n return result.transformed[0]\n } finally {\n result.dispose()\n }\n}\n\n/**\n * 静态元素判定:DOM 标签 + 全部属性为字符串字面量或无值 + 全部子节点为文本或递归静态元素。\n * 保守排除项(语义或序列化等价性无把握,走原路径):\n * - property 属性(value/checked/disabled 等):HTML attribute 与 setProperty 初始语义存在差异;\n * - 事件(on*)、ref、spread、key:本身是动态行为;\n * - 嵌套组件/Fragment/Boundary:不是纯 DOM 子树。\n */\nfunction isStaticElement(\n tagName: ts.JsxTagNameExpression,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): boolean {\n if (!ts.isIdentifier(tagName) || !/^[a-z]/.test(tagName.text)) return false\n for (const attribute of attributes.properties) {\n if (ts.isJsxSpreadAttribute(attribute)) return false\n if (!ts.isJsxAttribute(attribute)) return false\n const name = attribute.name.getText()\n if (name === 'key' || name === 'ref' || name.startsWith('on')) return false\n if (isPropertyAttribute(name)) return false\n const initializer = attribute.initializer\n if (initializer && !ts.isStringLiteral(initializer)) return false\n }\n for (const child of children) {\n if (ts.isJsxText(child)) continue\n if (ts.isJsxElement(child) || ts.isJsxSelfClosingElement(child)) {\n const nested = ts.isJsxElement(child)\n ? { tagName: child.openingElement.tagName, attributes: child.openingElement.attributes, children: child.children }\n : { tagName: child.tagName, attributes: child.attributes, children: [] as readonly ts.JsxChild[] }\n if (!isStaticElement(nested.tagName, nested.attributes, nested.children)) return false\n continue\n }\n return false\n }\n return true\n}\n\n/** Serialize a fully-static JSX element to HTML, preserving the compiler's text normalization. */\nfunction serializeStaticHtml(node: ts.JsxElement | ts.JsxSelfClosingElement): string {\n const { tagName, attributes, children } = ts.isJsxElement(node)\n ? { tagName: node.openingElement.tagName, attributes: node.openingElement.attributes, children: node.children }\n : { tagName: node.tagName, attributes: node.attributes, children: [] as readonly ts.JsxChild[] }\n return serializeStaticElement(tagName, attributes, children)\n}\n\nfunction serializeStaticElement(\n tagName: ts.JsxTagNameExpression,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): string {\n const name = tagName.getText()\n let html = `<${name}`\n for (const attribute of attributes.properties) {\n if (!ts.isJsxAttribute(attribute)) continue\n const attributeName = attribute.name.getText() === 'className' ? 'class' : attribute.name.getText()\n const initializer = attribute.initializer\n if (!initializer) {\n html += ` ${attributeName}=\"\"`\n continue\n }\n if (ts.isStringLiteral(initializer)) {\n html += ` ${attributeName}=\"${escapeHtmlAttribute(initializer.text)}\"`\n }\n }\n html += '>'\n\n for (const child of children) {\n if (ts.isJsxText(child)) {\n // 与 appendChildren 的文本规范化保持一致,保证提升前后 DOM 文本逐字相同。\n const text = child.text.replace(/\\s+/g, ' ').trimStart()\n if (text.trim()) html += escapeHtmlText(text)\n continue\n }\n if (ts.isJsxElement(child)) {\n html += serializeStaticElement(\n child.openingElement.tagName,\n child.openingElement.attributes,\n child.children\n )\n continue\n }\n if (ts.isJsxSelfClosingElement(child)) {\n html += serializeStaticElement(child.tagName, child.attributes, [])\n }\n }\n html += `</${name}>`\n return html\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return value.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<')\n}\n\nfunction escapeHtmlText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\n}\n\n/** Register a hoisted template declaration; identical HTML shares one declaration. */\nfunction registerTemplate(state: CompileState, html: string): ts.Expression {\n const existing = state.templates.get(html)\n if (existing) return existing\n const identifier = nextIdentifier(state, '_tpl')\n state.templates.set(html, identifier)\n return identifier\n}\n\nfunction createTemplateDeclarations(state: CompileState): ts.Statement[] {\n return [...state.templates.entries()].map(([html, identifier]) =>\n ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([\n ts.factory.createVariableDeclaration(identifier, undefined, undefined, ts.factory.createCallExpression(\n helperRef(state, 'createTemplate'),\n undefined,\n [ts.factory.createStringLiteral(html)]\n ))\n ], ts.NodeFlags.Const))\n )\n}\n\nfunction appendAttributes(\n state: CompileState,\n statements: ts.Statement[],\n element: ts.Identifier,\n attributes: ts.JsxAttributes\n): void {\n const staticProps: ts.ObjectLiteralElementLike[] = []\n const hasSpread = attributes.properties.some(attribute => ts.isJsxSpreadAttribute(attribute))\n for (const attribute of attributes.properties) {\n if (ts.isJsxSpreadAttribute(attribute)) {\n statements.push(callStatement(state, 'spreadProps', [element, transformEmbeddedExpression(state, attribute.expression)], attribute))\n continue\n }\n if (!ts.isJsxAttribute(attribute)) continue\n const name = attribute.name.getText()\n if (name === 'key') continue\n if (name === 'ref') {\n const initializer = attribute.initializer\n if (initializer && ts.isJsxExpression(initializer) && initializer.expression) {\n statements.push(callStatement(state, 'setRef', [element, transformEmbeddedExpression(state, initializer.expression)], attribute))\n }\n continue\n }\n const initializer = attribute.initializer\n\n if (name.startsWith('on') && initializer && ts.isJsxExpression(initializer) && initializer.expression) {\n statements.push(callStatement(state, 'addEventListener', [\n element,\n ts.factory.createStringLiteral(name.slice(2).toLowerCase()),\n initializer.expression\n ], attribute))\n continue\n }\n\n if (!initializer) {\n if (hasSpread) {\n statements.push(callStatement(state, isPropertyAttribute(name) ? 'setProperty' : 'setAttribute', [element, ts.factory.createStringLiteral(isPropertyAttribute(name) ? name : name === 'className' ? 'class' : name), isPropertyAttribute(name) ? ts.factory.createTrue() : ts.factory.createStringLiteral('')], attribute))\n continue\n }\n if (isPropertyAttribute(name)) staticProps.push(createStaticProperty(name, ts.factory.createTrue()))\n else staticProps.push(createStaticProperty(name === 'className' ? 'class' : name, ts.factory.createStringLiteral('')))\n continue\n }\n if (ts.isStringLiteral(initializer)) {\n if (hasSpread) {\n statements.push(callStatement(state, isPropertyAttribute(name) ? 'setProperty' : 'setAttribute', [element, ts.factory.createStringLiteral(isPropertyAttribute(name) ? name : name === 'className' ? 'class' : name), ts.factory.createStringLiteral(initializer.text)], attribute))\n continue\n }\n staticProps.push(createStaticProperty(isPropertyAttribute(name) ? name : name === 'className' ? 'class' : name,\n ts.factory.createStringLiteral(initializer.text)))\n continue\n }\n\n const attributeName = name === 'className' ? 'class' : name\n const propertyAttribute = isPropertyAttribute(name)\n if (ts.isJsxExpression(initializer) && initializer.expression) {\n statements.push(callStatement(state, propertyAttribute ? 'bindProperty' : 'bindAttribute', [\n element,\n ts.factory.createStringLiteral(propertyAttribute ? name : attributeName),\n createGetter(initializer.expression)\n ], attribute))\n }\n }\n if (staticProps.length) statements.splice(1, 0, callStatement(state, 'setStaticProps', [\n element,\n ts.factory.createObjectLiteralExpression(staticProps, true)\n ], attributes))\n}\n\nfunction createStaticProperty(name: string, value: ts.Expression): ts.PropertyAssignment {\n return ts.factory.createPropertyAssignment(ts.factory.createStringLiteral(name), value)\n}\n\nfunction isPropertyAttribute(name: string): boolean {\n return name === 'value' || name === 'checked' || name === 'selected' || name === 'disabled'\n || name === 'multiple' || name === 'readOnly' || name === 'required'\n || name === 'autofocus' || name === 'hidden' || name === 'tabIndex'\n}\n\nfunction appendChildren(\n state: CompileState,\n statements: ts.Statement[],\n element: ts.Identifier,\n children: readonly ts.JsxChild[],\n anchor: ts.Expression = ts.factory.createNull()\n): void {\n for (const child of children) {\n if (ts.isJsxText(child)) {\n const text = child.text.replace(/\\s+/g, ' ').trimStart()\n if (text.trim()) {\n statements.push(callStatement(state, 'insertBefore', [\n element,\n ts.factory.createCallExpression(helperRef(state, 'createText'), undefined, [\n ts.factory.createStringLiteral(text)\n ]),\n anchor\n ], child))\n }\n continue\n }\n\n if (ts.isJsxElement(child) || ts.isJsxSelfClosingElement(child) || ts.isJsxFragment(child)) {\n statements.push(callStatement(state, 'insertBefore', [\n element,\n transformJsxExpression(state, child),\n anchor\n ], child))\n continue\n }\n\n if (child.kind === ts.SyntaxKind.JsxExpression) {\n const expression = (child as ts.JsxExpression).expression\n if (!expression) continue\n const list = transformListExpression(state, element, expression, anchor)\n if (list) {\n statements.push(callStatement(state, 'insertList', list, child))\n continue\n }\n const dynamic = transformDynamicExpression(state, expression)\n if (dynamic) {\n statements.push(callStatement(state, 'insertDynamic', [element, anchor, dynamic], child))\n continue\n }\n if (!containsJsx(expression) && !ts.isIdentifier(expression)) {\n const textId = nextIdentifier(state, '_text')\n statements.push(createConstStatement(state, textId, ts.factory.createCallExpression(helperRef(state, 'createText'), undefined, [ts.factory.createStringLiteral('')]), child))\n statements.push(callStatement(state, 'insertBefore', [element, textId, anchor], child))\n statements.push(callStatement(state, 'bindText', [textId, createGetter(expression)], child))\n continue\n }\n const value = transformEmbeddedExpression(state, expression)\n statements.push(callStatement(state, 'insertDynamicValue', [element, anchor, createGetter(value)], child))\n }\n }\n}\n\nfunction createComponentProps(\n state: CompileState,\n attributes: ts.JsxAttributes,\n children: readonly ts.JsxChild[]\n): ts.ObjectLiteralExpression {\n const properties: ts.ObjectLiteralElementLike[] = []\n\n for (const attribute of attributes.properties) {\n if (ts.isJsxSpreadAttribute(attribute)) {\n properties.push(ts.factory.createSpreadAssignment(attribute.expression))\n continue\n }\n\n const name = propertyName(attribute.name.getText())\n if (attribute.name.getText() === 'key') continue\n const initializer = attribute.initializer\n if (!initializer) {\n properties.push(ts.factory.createPropertyAssignment(name, ts.factory.createTrue()))\n } else if (ts.isStringLiteral(initializer)) {\n properties.push(ts.factory.createPropertyAssignment(name, ts.factory.createStringLiteral(initializer.text)))\n } else if (ts.isJsxExpression(initializer) && initializer.expression) {\n properties.push(createGetterProperty(name, transformEmbeddedExpression(state, initializer.expression)))\n }\n }\n\n const childExpressions = children.flatMap(child => childToComponentExpression(state, child))\n if (childExpressions.length === 1) {\n properties.push(createGetterProperty('children', childExpressions[0]))\n } else if (childExpressions.length > 1) {\n properties.push(createGetterProperty('children', ts.factory.createArrayLiteralExpression(childExpressions)))\n }\n\n return ts.factory.createObjectLiteralExpression(properties, true)\n}\n\nfunction createSourceLocation(node: ts.Node): ts.ObjectLiteralExpression {\n const sourceFile = node.getSourceFile()\n const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))\n return ts.factory.createObjectLiteralExpression([\n ts.factory.createPropertyAssignment('file', ts.factory.createStringLiteral(sourceFile.fileName)),\n ts.factory.createPropertyAssignment('line', ts.factory.createNumericLiteral(position.line + 1)),\n ts.factory.createPropertyAssignment('column', ts.factory.createNumericLiteral(position.character + 1))\n ], true)\n}\n\nfunction transformDynamicExpression(state: CompileState, expression: ts.Expression): ts.ArrowFunction | null {\n const converted = convertDynamicNodeExpression(state, expression)\n return converted ? createGetter(converted) : null\n}\n\n/**\n * 把产出节点的动态表达式(`cond ? <A/> : <B/>`、`cond && <A/>`,含任意嵌套组合)\n * 转换为条件表达式树;各分支中的 JSX 递归编译为节点工厂,由 insertDynamic 挂载/卸载。\n * 返回 null 表示没有任何分支产出节点(纯文本/数值场景走 insertDynamicValue 文本绑定)。\n */\nfunction convertDynamicNodeExpression(state: CompileState, expression: ts.Expression): ts.ConditionalExpression | null {\n if (ts.isBinaryExpression(expression) && expression.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken) {\n const right = unwrapExpression(expression.right)\n if (isJsxExpression(right)) {\n return createNodeConditional(expression.left, transformJsxExpression(state, right), null)\n }\n // 右侧是嵌套的动态节点表达式(如 cond && (sub ? <A/> : <B/>))时递归转换,\n // 转换失败(纯文本分支)则整体回落为动态值绑定,保持语义可静态判定。\n const convertedRight = convertDynamicNodeExpression(state, right)\n if (convertedRight) return createNodeConditional(expression.left, convertedRight, null)\n return null\n }\n\n if (ts.isConditionalExpression(expression)) {\n const whenTrue = transformDynamicBranch(state, expression.whenTrue)\n const whenFalse = transformDynamicBranch(state, expression.whenFalse)\n if (!whenTrue && !whenFalse) return null\n return ts.factory.createConditionalExpression(\n expression.condition,\n ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n whenTrue ?? ts.factory.createNull(),\n ts.factory.createToken(ts.SyntaxKind.ColonToken),\n whenFalse ?? ts.factory.createNull()\n )\n }\n\n return null\n}\n\nfunction createNodeConditional(\n condition: ts.Expression,\n whenTrue: ts.Expression,\n whenFalse: ts.Expression | null\n): ts.ConditionalExpression {\n return ts.factory.createConditionalExpression(\n condition,\n ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n whenTrue,\n ts.factory.createToken(ts.SyntaxKind.ColonToken),\n whenFalse ?? ts.factory.createNull()\n )\n}\n\n/**\n * 转换单个分支:JSX → 节点工厂;null/false 原样保留;嵌套的三元与 `&&`\n * 动态节点表达式递归转换(此前嵌套三元只编译第一个分支,其余分支被静默丢弃)。\n * 其余表达式(字符串、数值等)返回 null,由调用方回落为 null 分支。\n */\nfunction transformDynamicBranch(state: CompileState, expression: ts.Expression): ts.Expression | null {\n const branch = unwrapExpression(expression)\n if (isJsxExpression(branch)) return transformJsxExpression(state, branch)\n if (branch.kind === ts.SyntaxKind.NullKeyword || branch.kind === ts.SyntaxKind.FalseKeyword) return branch\n if (ts.isConditionalExpression(branch)\n || (ts.isBinaryExpression(branch) && branch.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken)) {\n return convertDynamicNodeExpression(state, branch)\n }\n return null\n}\n\nfunction transformListExpression(\n state: CompileState,\n parent: ts.Identifier,\n expression: ts.Expression,\n anchor: ts.Expression\n): ts.Expression[] | null {\n if (!ts.isCallExpression(expression) || expression.arguments.length !== 1) return null\n if (!ts.isPropertyAccessExpression(expression.expression) || expression.expression.name.text !== 'map') return null\n\n const callback = expression.arguments[0]\n if (!ts.isArrowFunction(callback) && !ts.isFunctionExpression(callback)) return null\n const body = unwrapExpression(callback.body)\n if (!isJsxExpression(body) || ts.isJsxFragment(body)) return null\n\n const key = findKeyExpression(body)\n const renderItem = transformListCallback(callback, transformJsxExpression(state, body))\n const args: ts.Expression[] = [\n parent,\n anchor,\n createGetter(expression.expression.expression),\n renderItem\n ]\n if (key) args.push(createKeyCallback(callback, key))\n return args\n}\n\nfunction transformListCallback(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n body: ts.Expression\n): ts.Expression {\n if (ts.isArrowFunction(callback)) {\n return ts.factory.updateArrowFunction(\n callback,\n callback.modifiers,\n callback.typeParameters,\n callback.parameters,\n callback.type,\n callback.equalsGreaterThanToken,\n body\n )\n }\n\n return ts.factory.updateFunctionExpression(\n callback,\n callback.modifiers,\n callback.asteriskToken,\n callback.name,\n callback.typeParameters,\n callback.parameters,\n callback.type,\n ts.factory.createBlock([ts.factory.createReturnStatement(body)], true)\n )\n}\n\nfunction createKeyCallback(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n key: ts.Expression\n): ts.ArrowFunction {\n return ts.factory.createArrowFunction(\n undefined,\n undefined,\n callback.parameters,\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n key\n )\n}\n\nfunction findKeyExpression(node: ts.JsxElement | ts.JsxSelfClosingElement): ts.Expression | null {\n const attributes = ts.isJsxElement(node) ? node.openingElement.attributes : node.attributes\n for (const attribute of attributes.properties) {\n if (!ts.isJsxAttribute(attribute) || attribute.name.getText() !== 'key') continue\n if (attribute.initializer && ts.isJsxExpression(attribute.initializer)) {\n return attribute.initializer.expression ?? null\n }\n }\n return null\n}\n\nfunction unwrapExpression(node: ts.Expression | ts.ConciseBody): ts.Expression {\n return ts.isParenthesizedExpression(node) ? node.expression : node as ts.Expression\n}\n\nfunction childToComponentExpression(state: CompileState, child: ts.JsxChild): ts.Expression[] {\n if (ts.isJsxText(child)) {\n const text = child.text.replace(/\\s+/g, ' ').trim()\n return text ? [ts.factory.createStringLiteral(text)] : []\n }\n if (ts.isJsxElement(child) || ts.isJsxSelfClosingElement(child) || ts.isJsxFragment(child)) {\n return [transformJsxExpression(state, child)]\n }\n if (child.kind === ts.SyntaxKind.JsxExpression) {\n const expression = (child as ts.JsxExpression).expression\n return expression ? [transformEmbeddedExpression(state, expression)] : []\n }\n return []\n}\n\nfunction propertyName(name: string): ts.PropertyName {\n return /^[$A-Z_a-z][$\\w]*$/u.test(name)\n ? ts.factory.createIdentifier(name)\n : ts.factory.createStringLiteral(name)\n}\n\nfunction createGetter(expression: ts.Expression): ts.ArrowFunction {\n return ts.factory.createArrowFunction(\n undefined,\n undefined,\n [],\n undefined,\n ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n expression\n )\n}\n\nfunction createGetterProperty(name: string | ts.PropertyName, expression: ts.Expression): ts.GetAccessorDeclaration {\n return ts.factory.createGetAccessorDeclaration(\n undefined,\n typeof name === 'string' ? propertyName(name) : name,\n [],\n undefined,\n ts.factory.createBlock([ts.factory.createReturnStatement(expression)], true)\n )\n}\n\nfunction callStatement(state: CompileState, name: string, args: ts.Expression[], source?: ts.Node): ts.ExpressionStatement {\n const statement = ts.factory.createExpressionStatement(\n ts.factory.createCallExpression(helperRef(state, name), undefined, args)\n )\n return source ? tagStatement(state, statement, source) : statement\n}\n\nfunction createConstStatement(state: CompileState, name: ts.Identifier, initializer: ts.Expression, source?: ts.Node): ts.VariableStatement {\n const statement = ts.factory.createVariableStatement(\n undefined,\n ts.factory.createVariableDeclarationList([\n ts.factory.createVariableDeclaration(name, undefined, undefined, initializer)\n ], ts.NodeFlags.Const)\n )\n return source ? tagStatement(state, statement, source) : statement\n}\n\n/** Record where an emitted statement originated from, for source map generation. */\nfunction tagStatement<T extends ts.Statement>(state: CompileState, statement: T, source: ts.Node): T {\n const position = positionOfNode(state, source)\n if (position) state.statementSources.set(statement, position)\n return statement\n}\n\nfunction positionOfNode(state: CompileState, node: ts.Node): SourcePosition | null {\n // ts.transform 产生的节点副本可能丢失 sourceFile 引用,回退到当前编译的源文件。\n const sourceFile = node.getSourceFile() ?? state.sourceFile\n if (!sourceFile || node.pos < 0) return null\n const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))\n return { line, column: character }\n}\n\nfunction nextIdentifier(state: CompileState, prefix: string): ts.Identifier {\n let name: string\n do {\n name = `${prefix}${state.generatedId++}`\n } while (state.takenNames.has(name))\n return ts.factory.createIdentifier(name)\n}\n"],"mappings":"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","names":["initializer"]}
|
package/dist/i18n-extractor.cjs
CHANGED
|
@@ -1,13 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
-
|
|
7
|
-
var ts__default = /*#__PURE__*/_interopDefault(ts);
|
|
8
|
-
|
|
1
|
+
var __VOBS_CJS_FILE_URL = require("url").pathToFileURL(__filename).href;
|
|
2
|
+
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
9
4
|
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
9
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
+
|
|
32
|
+
// packages/compiler/src/i18n-extractor.ts
|
|
33
|
+
var i18n_extractor_exports = {};
|
|
34
|
+
__export(i18n_extractor_exports, {
|
|
35
|
+
createI18nExtractor: () => createI18nExtractor
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(i18n_extractor_exports);
|
|
38
|
+
var import_typescript = __toESM(require("typescript"), 1);
|
|
11
39
|
function createI18nExtractor(options = {}) {
|
|
12
40
|
const names = new Set(options.functions ?? ["t"]);
|
|
13
41
|
const keys = /* @__PURE__ */ new Set();
|
|
@@ -15,14 +43,14 @@ function createI18nExtractor(options = {}) {
|
|
|
15
43
|
name: "i18n-extractor",
|
|
16
44
|
analyze(program, context) {
|
|
17
45
|
const visit = /* @__PURE__ */ __name((node) => {
|
|
18
|
-
if (
|
|
46
|
+
if (import_typescript.default.isCallExpression(node) && isTranslationCall(node.expression, names)) {
|
|
19
47
|
const key = readStaticKey(node.arguments[0]);
|
|
20
48
|
if (key) {
|
|
21
49
|
keys.add(key);
|
|
22
50
|
options.onKey?.(key, context.filename);
|
|
23
51
|
}
|
|
24
52
|
}
|
|
25
|
-
|
|
53
|
+
import_typescript.default.forEachChild(node, visit);
|
|
26
54
|
}, "visit");
|
|
27
55
|
visit(program);
|
|
28
56
|
}
|
|
@@ -35,17 +63,18 @@ function createI18nExtractor(options = {}) {
|
|
|
35
63
|
}
|
|
36
64
|
__name(createI18nExtractor, "createI18nExtractor");
|
|
37
65
|
function isTranslationCall(expression, names) {
|
|
38
|
-
if (
|
|
39
|
-
return
|
|
66
|
+
if (import_typescript.default.isIdentifier(expression)) return names.has(expression.text);
|
|
67
|
+
return import_typescript.default.isPropertyAccessExpression(expression) && names.has(expression.name.text);
|
|
40
68
|
}
|
|
41
69
|
__name(isTranslationCall, "isTranslationCall");
|
|
42
70
|
function readStaticKey(argument) {
|
|
43
71
|
if (!argument) return void 0;
|
|
44
|
-
if (
|
|
72
|
+
if (import_typescript.default.isStringLiteral(argument) || import_typescript.default.isNoSubstitutionTemplateLiteral(argument)) return argument.text;
|
|
45
73
|
return void 0;
|
|
46
74
|
}
|
|
47
75
|
__name(readStaticKey, "readStaticKey");
|
|
48
|
-
|
|
49
|
-
exports
|
|
50
|
-
|
|
76
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
77
|
+
0 && (module.exports = {
|
|
78
|
+
createI18nExtractor
|
|
79
|
+
});
|
|
51
80
|
//# sourceMappingURL=i18n-extractor.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n-extractor.ts"],"
|
|
1
|
+
{"version":3,"sources":["../src/i18n-extractor.ts"],"sourcesContent":["import ts from 'typescript'\nimport type { CompilerPlugin } from './plugin'\n\nexport interface I18nExtractorOptions {\n readonly functions?: readonly string[]\n readonly onKey?: (key: string, filename: string) => void\n}\n\nexport interface I18nExtractor {\n readonly plugin: CompilerPlugin\n getKeys(): readonly string[]\n reset(): void\n}\n\n/** Collects statically addressable translation keys without changing emitted code. */\nexport function createI18nExtractor(options: I18nExtractorOptions = {}): I18nExtractor {\n const names = new Set(options.functions ?? ['t'])\n const keys = new Set<string>()\n const plugin: CompilerPlugin = {\n name: 'i18n-extractor',\n analyze(program, context) {\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node) && isTranslationCall(node.expression, names)) {\n const key = readStaticKey(node.arguments[0])\n if (key) {\n keys.add(key)\n options.onKey?.(key, context.filename)\n }\n }\n ts.forEachChild(node, visit)\n }\n visit(program)\n }\n }\n return {\n plugin,\n getKeys: () => [...keys].sort(),\n reset: () => keys.clear()\n }\n}\n\nfunction isTranslationCall(expression: ts.LeftHandSideExpression, names: Set<string>): boolean {\n if (ts.isIdentifier(expression)) return names.has(expression.text)\n return ts.isPropertyAccessExpression(expression) && names.has(expression.name.text)\n}\n\nfunction readStaticKey(argument: ts.Expression | undefined): string | undefined {\n if (!argument) return undefined\n if (ts.isStringLiteral(argument) || ts.isNoSubstitutionTemplateLiteral(argument)) return argument.text\n return undefined\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAe;AAeR,SAAS,oBAAoB,UAAgC,CAAC,GAAkB;AACrF,QAAM,QAAQ,IAAI,IAAI,QAAQ,aAAa,CAAC,GAAG,CAAC;AAChD,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,SAAyB;AAAA,IAC7B,MAAM;AAAA,IACN,QAAQ,SAAS,SAAS;AACxB,YAAM,QAAQ,wBAAC,SAAwB;AACrC,YAAI,kBAAAA,QAAG,iBAAiB,IAAI,KAAK,kBAAkB,KAAK,YAAY,KAAK,GAAG;AAC1E,gBAAM,MAAM,cAAc,KAAK,UAAU,CAAC,CAAC;AAC3C,cAAI,KAAK;AACP,iBAAK,IAAI,GAAG;AACZ,oBAAQ,QAAQ,KAAK,QAAQ,QAAQ;AAAA,UACvC;AAAA,QACF;AACA,0BAAAA,QAAG,aAAa,MAAM,KAAK;AAAA,MAC7B,GATc;AAUd,YAAM,OAAO;AAAA,IACf;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,6BAAM,CAAC,GAAG,IAAI,EAAE,KAAK,GAArB;AAAA,IACT,OAAO,6BAAM,KAAK,MAAM,GAAjB;AAAA,EACT;AACF;AAxBgB;AA0BhB,SAAS,kBAAkB,YAAuC,OAA6B;AAC7F,MAAI,kBAAAA,QAAG,aAAa,UAAU,EAAG,QAAO,MAAM,IAAI,WAAW,IAAI;AACjE,SAAO,kBAAAA,QAAG,2BAA2B,UAAU,KAAK,MAAM,IAAI,WAAW,KAAK,IAAI;AACpF;AAHS;AAKT,SAAS,cAAc,UAAyD;AAC9E,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,kBAAAA,QAAG,gBAAgB,QAAQ,KAAK,kBAAAA,QAAG,gCAAgC,QAAQ,EAAG,QAAO,SAAS;AAClG,SAAO;AACT;AAJS;","names":["ts"]}
|