@vobs/vite-plugin 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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../compiler/src/compile.ts","../../compiler/src/i18n-extractor.ts","../src/html-component.ts","../src/index.ts"],"names":["ts","VobsError","initializer","parseFragment","path","readFile"],"mappings":"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","file":"index.cjs","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, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;')\n}\n\nfunction escapeHtmlText(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\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","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","import { parseFragment, type DefaultTreeAdapterMap, type DefaultTreeAdapterTypes } from 'parse5'\n\ntype HtmlNode = DefaultTreeAdapterTypes.Node\ntype HtmlDocumentFragment = DefaultTreeAdapterTypes.DocumentFragment\ntype HtmlElement = DefaultTreeAdapterTypes.Element\n\nconst blockedTags = new Set(['script', 'iframe', 'object', 'embed', 'base', 'meta', 'link', 'style'])\nconst blockedAttributes = /^(?:on[a-z]+|srcdoc|style)$/iu\nconst urlAttributes = new Set(['href', 'src', 'action', 'formaction', 'poster', 'xlink:href'])\nconst safeProtocols = new Set(['http:', 'https:', 'mailto:', 'tel:'])\nconst directivePattern = /^data-vobs-(text|slot|on|bind|prop)(?:-(.+))?$/iu\nconst safePropertyNames = new Set([\n 'value', 'checked', 'selected', 'disabled', 'multiple', 'readonly', 'required',\n 'autofocus', 'hidden', 'tabindex'\n])\n\nexport interface HtmlComponentOptions {\n readonly filename?: string\n}\n\n/** Converts a trusted static HTML fragment to Vobs runtime node creation code. */\nexport function compileHtmlComponent(source: string, options: HtmlComponentOptions = {}): string {\n const fragment = parseFragment(source)\n const body = compileChildren(fragment, options.filename ?? 'component.html')\n const result = body.length === 1 ? body[0] : `createFragment((parent, anchor) => {${body.map(code => `insertBefore(parent, ${code}, anchor);`).join('')}})`\n\n return `import { addEventListener, bindAttribute, bindProperty, bindText, createElement, createFragment, createText, insertBefore, insertDynamic, setAttribute } from '@vobs/vobs';\\nfunction resolveHtmlSlot(value) { const resolved = typeof value === 'function' ? value() : value; if (resolved === undefined || resolved === null || resolved === false) return null; if (typeof resolved === 'string' || typeof resolved === 'number') return createText(String(resolved)); if (Array.isArray(resolved)) return createFragment((parent, anchor) => { for (const item of resolved) { const child = resolveHtmlSlot(item); if (child) insertBefore(parent, child, anchor); } }); return resolved; }\\nfunction sanitizeHtmlAttribute(name, value) { const stringValue = String(value ?? ''); if (!['href', 'src', 'action', 'formaction', 'poster', 'xlink:href'].includes(name.toLowerCase())) return stringValue; const normalized = stringValue.trim().toLowerCase(); if (normalized.startsWith('#') || normalized.startsWith('/') || normalized.startsWith('./') || normalized.startsWith('../')) return stringValue; try { const protocol = new URL(normalized, 'https://vobs.invalid/').protocol; return ['http:', 'https:', 'mailto:', 'tel:'].includes(protocol) ? stringValue : ''; } catch { return ''; } }\\nexport default function HtmlComponent(props = {}) { return ${result ?? \"createFragment(() => {})\"}; }`\n}\n\nfunction compileChildren(parent: HtmlDocumentFragment | HtmlElement, filename: string): string[] {\n return parent.childNodes.flatMap(node => compileNode(node, filename))\n}\n\nfunction compileNode(node: HtmlNode, filename: string): string[] {\n if (node.nodeName === '#text') {\n const value = (node as DefaultTreeAdapterMap['textNode']).value\n return value ? [`createText(${JSON.stringify(value)})`] : []\n }\n\n if (node.nodeName === '#comment') return []\n if (node.nodeName !== '#document-fragment' && !isElement(node)) return []\n\n if (isElement(node)) {\n const tag = node.tagName.toLowerCase()\n if (blockedTags.has(tag)) throw new Error(`Vobs HTML component: 禁止使用 <${tag}> (${filename})`)\n\n const children = compileChildren(node, filename)\n const statements = [`const element = createElement(${JSON.stringify(tag)})`]\n const dynamicText = [] as string[]\n for (const attribute of node.attrs) {\n const name = attribute.name.toLowerCase()\n const value = attribute.value\n const directive = parseDirective(name, value, filename)\n if (directive) {\n if (directive.kind === 'text') {\n dynamicText.push(directive.prop)\n } else if (directive.kind === 'slot') {\n statements.push(`insertDynamic(element, null, () => resolveHtmlSlot(props[${JSON.stringify(directive.prop)}]))`)\n } else if (directive.kind === 'event') {\n statements.push(`addEventListener(element, ${JSON.stringify(directive.name)}, (event) => { const handler = props[${JSON.stringify(directive.prop)}]; if (typeof handler === 'function') handler(event); })`)\n } else if (directive.kind === 'attribute') {\n statements.push(`bindAttribute(element, ${JSON.stringify(directive.name)}, () => sanitizeHtmlAttribute(${JSON.stringify(directive.name)}, props[${JSON.stringify(directive.prop)}] ?? ''))`)\n } else if (directive.kind === 'property') {\n statements.push(`bindProperty(element, ${JSON.stringify(directive.name)}, () => props[${JSON.stringify(directive.prop)}])`)\n }\n continue\n }\n if (blockedAttributes.test(name)) throw new Error(`Vobs HTML component: 禁止使用危险属性 ${attribute.name} (${filename})`)\n if (urlAttributes.has(name) && !isSafeUrl(value)) {\n throw new Error(`Vobs HTML component: 禁止使用危险 URL 属性 ${attribute.name} (${filename})`)\n }\n statements.push(`setAttribute(element, ${JSON.stringify(attribute.name)}, ${JSON.stringify(value)})`)\n }\n if (dynamicText.length > 1) throw new Error(`Vobs HTML component: 一个元素只能使用一个 data-vobs-text 指令 (${filename})`)\n if (dynamicText.length === 1) {\n const text = 'createText(\"\")'\n statements.push(`const text = ${text}`)\n statements.push('insertBefore(element, text, null)')\n statements.push(`bindText(text, () => props[${JSON.stringify(dynamicText[0])}] ?? '')`)\n } else {\n for (const child of children) statements.push(`insertBefore(element, ${child}, null)`)\n }\n statements.push('return element')\n return [`(() => {${statements.join(';')};})()`]\n }\n\n return compileChildren(node as HtmlDocumentFragment, filename)\n}\n\nfunction isElement(node: HtmlNode): node is HtmlElement {\n return !node.nodeName.startsWith('#')\n}\n\nfunction isSafeUrl(value: string): boolean {\n const normalized = value.trim().toLowerCase()\n if (normalized.startsWith('#') || normalized.startsWith('/') || normalized.startsWith('./') || normalized.startsWith('../')) return true\n try {\n return safeProtocols.has(new URL(normalized, 'https://vobs.invalid/').protocol)\n } catch {\n return false\n }\n}\n\ntype HtmlDirective =\n | { readonly kind: 'text' | 'slot'; readonly prop: string }\n | { readonly kind: 'event' | 'attribute' | 'property'; readonly name: string; readonly prop: string }\n\nfunction parseDirective(name: string, value: string, filename: string): HtmlDirective | null {\n const match = directivePattern.exec(name)\n if (!match) return null\n const kind = match[1].toLowerCase()\n const namePart = match[2]\n const prop = value.trim()\n if (!prop || !/^[A-Za-z_$][\\w$]*$/u.test(prop)) {\n throw new Error(`Vobs HTML component: ${name} 必须引用有效的 props 名称 (${filename})`)\n }\n if (kind === 'text' || kind === 'slot') {\n if (namePart) throw new Error(`Vobs HTML component: ${name} 不接受额外名称 (${filename})`)\n return { kind, prop }\n }\n if (!namePart || !/^[a-z][a-z0-9:-]*$/iu.test(namePart)) {\n throw new Error(`Vobs HTML component: ${name} 必须包含有效名称 (${filename})`)\n }\n if (kind === 'on') return { kind: 'event', name: namePart.toLowerCase(), prop }\n if (kind === 'bind') {\n if (namePart.toLowerCase() === 'style') throw new Error(`Vobs HTML component: 不允许动态绑定 style (${filename})`)\n return { kind: 'attribute', name: namePart, prop }\n }\n if (!safePropertyNames.has(namePart.toLowerCase())) {\n throw new Error(`Vobs HTML component: 不允许动态绑定 property ${namePart} (${filename})`)\n }\n return { kind: 'property', name: normalizePropertyName(namePart), prop }\n}\n\nfunction normalizePropertyName(name: string): string {\n return name.toLowerCase() === 'readonly' ? 'readOnly' : name.toLowerCase() === 'tabindex' ? 'tabIndex' : name\n}\n","// Vite 插件:集成 Vobs 编译器\n\nimport { readFile } from 'node:fs/promises'\nimport path from 'node:path'\nimport type { Plugin } from 'vite'\nimport { compileWithSourceMap, createI18nExtractor, type CompileOptions } from '@vobs/compiler'\nimport { VobsError } from '@vobs/runtime/error'\nimport { compileHtmlComponent } from './html-component.ts'\n\nexport interface VobsVitePluginOptions {\n include?: RegExp\n compiler?: CompileOptions\n hmr?: boolean\n extractI18n?: (key: string, filename: string) => void\n html?: boolean | { readonly extensions?: readonly string[] }\n}\n\nexport function vobsPlugin(options: VobsVitePluginOptions = {}): Plugin {\n const include = options.include ?? /\\.tsx(?:$|\\?)/\n const htmlModules = new Set<string>()\n let productionBuild = false\n\n return {\n name: 'vobs',\n\n enforce: 'pre',\n\n configResolved(config) {\n productionBuild = config.command === 'build'\n },\n\n resolveId(source: string, importer: string | undefined) {\n if (!importer || !isHtmlComponent(source, options.html) || !isRelativeModule(source)) return null\n const cleanImporter = importer.split(/[?#]/u, 1)[0]\n const cleanSource = source.split(/[?#]/u, 1)[0]\n const resolved = path.resolve(path.dirname(cleanImporter), cleanSource)\n htmlModules.add(resolved)\n return resolved\n },\n\n async load(id: string) {\n if (!htmlModules.has(id)) return null\n return compileHtmlComponent(await readFile(id, 'utf8'), { filename: id })\n },\n\n transform(code: string, id: string) {\n include.lastIndex = 0\n if (!include.test(id)) return null\n\n const extractor = options.extractI18n\n ? createI18nExtractor({ onKey: options.extractI18n })\n : undefined\n const result = compileWithSourceMap(code, {\n ...options.compiler,\n // 生产构建默认剔除组件源码位置(错误定位走 source map);显式配置优先。\n sourceLocation: options.compiler?.sourceLocation ?? !productionBuild,\n filename: id,\n plugins: [\n ...(options.compiler?.plugins ?? []),\n ...(extractor ? [extractor.plugin] : [])\n ]\n })\n const diagnostic = result.diagnostics.find(item => item.severity === 'error')\n if (diagnostic) {\n throw new VobsError({\n code: diagnostic.code,\n layer: 'compiler',\n message: diagnostic.message,\n location: diagnostic.location,\n codeFrame: diagnostic.codeFrame,\n fix: diagnostic.fix\n })\n }\n const hmr = options.hmr ?? !productionBuild\n const hmrCode = hmr ? createHmrCode(id) : ''\n return {\n code: `${result.code}${hmrCode}`,\n map: result.map\n }\n }\n }\n}\n\nfunction isRelativeModule(source: string): boolean {\n return source.startsWith('./') || source.startsWith('../')\n}\n\nfunction isHtmlComponent(id: string, option: VobsVitePluginOptions['html']): boolean {\n if (option === false) return false\n const extensions = typeof option === 'object' && option.extensions?.length ? option.extensions : ['.html', '.htm']\n const cleanId = id.split(/[?#]/u, 1)[0]\n return extensions.some(extension => cleanId.endsWith(extension))\n}\n\n\nfunction createHmrCode(moduleId: string): string {\n const encodedId = JSON.stringify(moduleId)\n return `\nimport { disposeHmrModule, updateHmrModule } from '@vobs/vobs'\n\nif (import.meta.hot) {\n import.meta.hot.accept((module) => {\n if (module) updateHmrModule(${encodedId}, module)\n })\n import.meta.hot.dispose(() => disposeHmrModule(${encodedId}))\n}\n`\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/html-component.ts"],"sourcesContent":["// Vite 插件:集成 Vobs 编译器\n\nimport { readFile } from 'node:fs/promises'\nimport path from 'node:path'\nimport type { Plugin } from 'vite'\nimport { compileWithSourceMap, createI18nExtractor, type CompileOptions } from '@vobs/compiler'\nimport { VobsError } from '@vobs/runtime/error'\nimport { compileHtmlComponent } from './html-component.ts'\n\nexport interface VobsVitePluginOptions {\n include?: RegExp\n compiler?: CompileOptions\n hmr?: boolean\n /**\n * 模块级状态 HMR 保鲜(默认开启,仅 dev 生效)。开启后:\n * - 模块顶层 state() 声明编译为 hmrStateRef(...),热更新重执行模块时复用既有信号,\n * 消除\"新旧两份模块实例、两份状态\"导致的编辑不生效/页面半边失灵;\n * - 声明了模块级 state 的 .ts 文件(store 类模块)也纳入 HMR 处理。\n */\n hmrState?: boolean\n extractI18n?: (key: string, filename: string) => void\n html?: boolean | { readonly extensions?: readonly string[] }\n}\n\nexport function vobsPlugin(options: VobsVitePluginOptions = {}): Plugin {\n const include = options.include ?? /\\.tsx(?:$|\\?)/\n const htmlModules = new Set<string>()\n let productionBuild = false\n let hmrStateEnabled = (options.hmr ?? true) && (options.hmrState ?? true)\n\n return {\n name: 'vobs',\n\n enforce: 'pre',\n\n configResolved(config) {\n productionBuild = config.command === 'build'\n hmrStateEnabled = (options.hmr ?? true) && !productionBuild && (options.hmrState ?? true)\n },\n\n resolveId(source: string, importer: string | undefined) {\n if (!importer || !isHtmlComponent(source, options.html) || !isRelativeModule(source)) return null\n const cleanImporter = importer.split(/[?#]/u, 1)[0]\n const cleanSource = source.split(/[?#]/u, 1)[0]\n const resolved = path.resolve(path.dirname(cleanImporter), cleanSource)\n htmlModules.add(resolved)\n return resolved\n },\n\n async load(id: string) {\n if (!htmlModules.has(id)) return null\n return compileHtmlComponent(await readFile(id, 'utf8'), { filename: id })\n },\n\n transform(code: string, id: string) {\n const cleanId = id.split(/[?#]/u, 1)[0]\n const isTsx = cleanId.endsWith('.tsx')\n const isStateTs = isStateModulePath(cleanId)\n if (!isTsx && !isStateTs) return null\n if (options.include) {\n include.lastIndex = 0\n if (!include.test(id)) return null\n }\n\n // .ts 状态模块(store 类):声明了模块级 state 才纳入编译与 HMR,\n // 避免对普通 .ts 全量重印。\n if (!isTsx && (!hmrStateEnabled || !isStatefulModule(code))) return null\n\n const extractor = options.extractI18n\n ? createI18nExtractor({ onKey: options.extractI18n })\n : undefined\n const hmr = options.hmr ?? !productionBuild\n const result = compileWithSourceMap(code, {\n ...options.compiler,\n // 生产构建默认剔除组件源码位置(错误定位走 source map);显式配置优先。\n sourceLocation: options.compiler?.sourceLocation ?? !productionBuild,\n filename: id,\n // HMR 模块标识必须跨 ?t= 查询稳定(registry 复用语义依赖它),用干净路径。\n hmrModuleId: hmr ? cleanId : options.compiler?.hmrModuleId,\n plugins: [\n ...(options.compiler?.plugins ?? []),\n ...(extractor ? [extractor.plugin] : [])\n ]\n })\n const diagnostic = result.diagnostics.find(item => item.severity === 'error')\n if (diagnostic) {\n throw new VobsError({\n code: diagnostic.code,\n layer: 'compiler',\n message: diagnostic.message,\n location: diagnostic.location,\n codeFrame: diagnostic.codeFrame,\n fix: diagnostic.fix\n })\n }\n const hmrCode = hmr ? createHmrCode(cleanId) : ''\n return {\n code: `${result.code}${hmrCode}`,\n map: result.map\n }\n }\n }\n}\n\n/** 模块级 state 的 store 类 .ts 模块判定:从 @vobs 导入 state 且实际调用。 */\nfunction isStatefulModule(code: string): boolean {\n return /\\bimport\\s+(?:type\\s+)?\\{[^}]*\\bstate\\b[^}]*\\}\\s*from\\s*['\"]@vobs\\/(?:reactivity|vobs)['\"]/u.test(code)\n && /(?<![\\w$.])state\\s*\\(/u.test(code)\n}\n\nfunction isStateModulePath(cleanId: string): boolean {\n if (!cleanId.endsWith('.ts')) return false\n if (cleanId.endsWith('.d.ts')) return false\n if (cleanId.includes('node_modules')) return false\n return true\n}\n\nfunction isRelativeModule(source: string): boolean {\n return source.startsWith('./') || source.startsWith('../')\n}\n\nfunction isHtmlComponent(id: string, option: VobsVitePluginOptions['html']): boolean {\n if (option === false) return false\n const extensions = typeof option === 'object' && option.extensions?.length ? option.extensions : ['.html', '.htm']\n const cleanId = id.split(/[?#]/u, 1)[0]\n return extensions.some(extension => cleanId.endsWith(extension))\n}\n\n\nfunction createHmrCode(moduleId: string): string {\n const encodedId = JSON.stringify(moduleId)\n return `\nimport { disposeHmrModule, updateHmrModule } from '@vobs/vobs'\n\nif (import.meta.hot) {\n import.meta.hot.accept((module) => {\n if (module) updateHmrModule(${encodedId}, module)\n })\n import.meta.hot.dispose(() => disposeHmrModule(${encodedId}))\n}\n`\n}\n","import { parseFragment, type DefaultTreeAdapterMap, type DefaultTreeAdapterTypes } from 'parse5'\n\ntype HtmlNode = DefaultTreeAdapterTypes.Node\ntype HtmlDocumentFragment = DefaultTreeAdapterTypes.DocumentFragment\ntype HtmlElement = DefaultTreeAdapterTypes.Element\n\nconst blockedTags = new Set(['script', 'iframe', 'object', 'embed', 'base', 'meta', 'link', 'style'])\nconst blockedAttributes = /^(?:on[a-z]+|srcdoc|style)$/iu\nconst urlAttributes = new Set(['href', 'src', 'action', 'formaction', 'poster', 'xlink:href'])\nconst safeProtocols = new Set(['http:', 'https:', 'mailto:', 'tel:'])\nconst directivePattern = /^data-vobs-(text|slot|on|bind|prop)(?:-(.+))?$/iu\nconst safePropertyNames = new Set([\n 'value', 'checked', 'selected', 'disabled', 'multiple', 'readonly', 'required',\n 'autofocus', 'hidden', 'tabindex'\n])\n\nexport interface HtmlComponentOptions {\n readonly filename?: string\n}\n\n/** Converts a trusted static HTML fragment to Vobs runtime node creation code. */\nexport function compileHtmlComponent(source: string, options: HtmlComponentOptions = {}): string {\n const fragment = parseFragment(source)\n const body = compileChildren(fragment, options.filename ?? 'component.html')\n const result = body.length === 1 ? body[0] : `createFragment((parent, anchor) => {${body.map(code => `insertBefore(parent, ${code}, anchor);`).join('')}})`\n\n return `import { addEventListener, bindAttribute, bindProperty, bindText, createElement, createFragment, createText, insertBefore, insertDynamic, setAttribute } from '@vobs/vobs';\\nfunction resolveHtmlSlot(value) { const resolved = typeof value === 'function' ? value() : value; if (resolved === undefined || resolved === null || resolved === false) return null; if (typeof resolved === 'string' || typeof resolved === 'number') return createText(String(resolved)); if (Array.isArray(resolved)) return createFragment((parent, anchor) => { for (const item of resolved) { const child = resolveHtmlSlot(item); if (child) insertBefore(parent, child, anchor); } }); return resolved; }\\nfunction sanitizeHtmlAttribute(name, value) { const stringValue = String(value ?? ''); if (!['href', 'src', 'action', 'formaction', 'poster', 'xlink:href'].includes(name.toLowerCase())) return stringValue; const normalized = stringValue.trim().toLowerCase(); if (normalized.startsWith('#') || normalized.startsWith('/') || normalized.startsWith('./') || normalized.startsWith('../')) return stringValue; try { const protocol = new URL(normalized, 'https://vobs.invalid/').protocol; return ['http:', 'https:', 'mailto:', 'tel:'].includes(protocol) ? stringValue : ''; } catch { return ''; } }\\nexport default function HtmlComponent(props = {}) { return ${result ?? \"createFragment(() => {})\"}; }`\n}\n\nfunction compileChildren(parent: HtmlDocumentFragment | HtmlElement, filename: string): string[] {\n return parent.childNodes.flatMap(node => compileNode(node, filename))\n}\n\nfunction compileNode(node: HtmlNode, filename: string): string[] {\n if (node.nodeName === '#text') {\n const value = (node as DefaultTreeAdapterMap['textNode']).value\n return value ? [`createText(${JSON.stringify(value)})`] : []\n }\n\n if (node.nodeName === '#comment') return []\n if (node.nodeName !== '#document-fragment' && !isElement(node)) return []\n\n if (isElement(node)) {\n const tag = node.tagName.toLowerCase()\n if (blockedTags.has(tag)) throw new Error(`Vobs HTML component: 禁止使用 <${tag}> (${filename})`)\n\n const children = compileChildren(node, filename)\n const statements = [`const element = createElement(${JSON.stringify(tag)})`]\n const dynamicText = [] as string[]\n for (const attribute of node.attrs) {\n const name = attribute.name.toLowerCase()\n const value = attribute.value\n const directive = parseDirective(name, value, filename)\n if (directive) {\n if (directive.kind === 'text') {\n dynamicText.push(directive.prop)\n } else if (directive.kind === 'slot') {\n statements.push(`insertDynamic(element, null, () => resolveHtmlSlot(props[${JSON.stringify(directive.prop)}]))`)\n } else if (directive.kind === 'event') {\n statements.push(`addEventListener(element, ${JSON.stringify(directive.name)}, (event) => { const handler = props[${JSON.stringify(directive.prop)}]; if (typeof handler === 'function') handler(event); })`)\n } else if (directive.kind === 'attribute') {\n statements.push(`bindAttribute(element, ${JSON.stringify(directive.name)}, () => sanitizeHtmlAttribute(${JSON.stringify(directive.name)}, props[${JSON.stringify(directive.prop)}] ?? ''))`)\n } else if (directive.kind === 'property') {\n statements.push(`bindProperty(element, ${JSON.stringify(directive.name)}, () => props[${JSON.stringify(directive.prop)}])`)\n }\n continue\n }\n if (blockedAttributes.test(name)) throw new Error(`Vobs HTML component: 禁止使用危险属性 ${attribute.name} (${filename})`)\n if (urlAttributes.has(name) && !isSafeUrl(value)) {\n throw new Error(`Vobs HTML component: 禁止使用危险 URL 属性 ${attribute.name} (${filename})`)\n }\n statements.push(`setAttribute(element, ${JSON.stringify(attribute.name)}, ${JSON.stringify(value)})`)\n }\n if (dynamicText.length > 1) throw new Error(`Vobs HTML component: 一个元素只能使用一个 data-vobs-text 指令 (${filename})`)\n if (dynamicText.length === 1) {\n const text = 'createText(\"\")'\n statements.push(`const text = ${text}`)\n statements.push('insertBefore(element, text, null)')\n statements.push(`bindText(text, () => props[${JSON.stringify(dynamicText[0])}] ?? '')`)\n } else {\n for (const child of children) statements.push(`insertBefore(element, ${child}, null)`)\n }\n statements.push('return element')\n return [`(() => {${statements.join(';')};})()`]\n }\n\n return compileChildren(node as HtmlDocumentFragment, filename)\n}\n\nfunction isElement(node: HtmlNode): node is HtmlElement {\n return !node.nodeName.startsWith('#')\n}\n\nfunction isSafeUrl(value: string): boolean {\n const normalized = value.trim().toLowerCase()\n if (normalized.startsWith('#') || normalized.startsWith('/') || normalized.startsWith('./') || normalized.startsWith('../')) return true\n try {\n return safeProtocols.has(new URL(normalized, 'https://vobs.invalid/').protocol)\n } catch {\n return false\n }\n}\n\ntype HtmlDirective =\n | { readonly kind: 'text' | 'slot'; readonly prop: string }\n | { readonly kind: 'event' | 'attribute' | 'property'; readonly name: string; readonly prop: string }\n\nfunction parseDirective(name: string, value: string, filename: string): HtmlDirective | null {\n const match = directivePattern.exec(name)\n if (!match) return null\n const kind = match[1].toLowerCase()\n const namePart = match[2]\n const prop = value.trim()\n if (!prop || !/^[A-Za-z_$][\\w$]*$/u.test(prop)) {\n throw new Error(`Vobs HTML component: ${name} 必须引用有效的 props 名称 (${filename})`)\n }\n if (kind === 'text' || kind === 'slot') {\n if (namePart) throw new Error(`Vobs HTML component: ${name} 不接受额外名称 (${filename})`)\n return { kind, prop }\n }\n if (!namePart || !/^[a-z][a-z0-9:-]*$/iu.test(namePart)) {\n throw new Error(`Vobs HTML component: ${name} 必须包含有效名称 (${filename})`)\n }\n if (kind === 'on') return { kind: 'event', name: namePart.toLowerCase(), prop }\n if (kind === 'bind') {\n if (namePart.toLowerCase() === 'style') throw new Error(`Vobs HTML component: 不允许动态绑定 style (${filename})`)\n return { kind: 'attribute', name: namePart, prop }\n }\n if (!safePropertyNames.has(namePart.toLowerCase())) {\n throw new Error(`Vobs HTML component: 不允许动态绑定 property ${namePart} (${filename})`)\n }\n return { kind: 'property', name: normalizePropertyName(namePart), prop }\n}\n\nfunction normalizePropertyName(name: string): string {\n return name.toLowerCase() === 'readonly' ? 'readOnly' : name.toLowerCase() === 'tabindex' ? 'tabIndex' : name\n}\n"],"mappings":"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","names":["path"]}
package/dist/index.d.cts CHANGED
@@ -5,6 +5,13 @@ interface VobsVitePluginOptions {
5
5
  include?: RegExp;
6
6
  compiler?: CompileOptions;
7
7
  hmr?: boolean;
8
+ /**
9
+ * 模块级状态 HMR 保鲜(默认开启,仅 dev 生效)。开启后:
10
+ * - 模块顶层 state() 声明编译为 hmrStateRef(...),热更新重执行模块时复用既有信号,
11
+ * 消除"新旧两份模块实例、两份状态"导致的编辑不生效/页面半边失灵;
12
+ * - 声明了模块级 state 的 .ts 文件(store 类模块)也纳入 HMR 处理。
13
+ */
14
+ hmrState?: boolean;
8
15
  extractI18n?: (key: string, filename: string) => void;
9
16
  html?: boolean | {
10
17
  readonly extensions?: readonly string[];
package/dist/index.d.ts CHANGED
@@ -5,6 +5,13 @@ interface VobsVitePluginOptions {
5
5
  include?: RegExp;
6
6
  compiler?: CompileOptions;
7
7
  hmr?: boolean;
8
+ /**
9
+ * 模块级状态 HMR 保鲜(默认开启,仅 dev 生效)。开启后:
10
+ * - 模块顶层 state() 声明编译为 hmrStateRef(...),热更新重执行模块时复用既有信号,
11
+ * 消除"新旧两份模块实例、两份状态"导致的编辑不生效/页面半边失灵;
12
+ * - 声明了模块级 state 的 .ts 文件(store 类模块)也纳入 HMR 处理。
13
+ */
14
+ hmrState?: boolean;
8
15
  extractI18n?: (key: string, filename: string) => void;
9
16
  html?: boolean | {
10
17
  readonly extensions?: readonly string[];