transone-cli 0.6.3 → 0.10.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.
Files changed (56) hide show
  1. package/README.md +20 -3
  2. package/README.zh-CN.md +31 -0
  3. package/dist/app/analyze.d.ts +2 -1
  4. package/dist/app/components.d.ts +4 -0
  5. package/dist/app/types.d.ts +3 -0
  6. package/dist/{build-mp-vk5ap2cw.js → build-mp-y5pwahsy.js} +824 -271
  7. package/dist/build-mp-y5pwahsy.js.map +24 -0
  8. package/dist/build.d.ts +3 -1
  9. package/dist/bundle-inputs.d.ts +6 -0
  10. package/dist/cli.d.ts +4 -2
  11. package/dist/cli.js +49 -16
  12. package/dist/cli.js.map +3 -3
  13. package/dist/components/discovery.d.ts +5 -0
  14. package/dist/components/index.d.ts +4 -0
  15. package/dist/components/report.d.ts +48 -0
  16. package/dist/components/resolution.d.ts +7 -0
  17. package/dist/components/types.d.ts +56 -0
  18. package/dist/components/web.d.ts +11 -0
  19. package/dist/config-inputs.d.ts +4 -0
  20. package/dist/create.d.ts +4 -4
  21. package/dist/document-styles.d.ts +7 -0
  22. package/dist/index-2g3e5sjt.js +3388 -0
  23. package/dist/index-2g3e5sjt.js.map +32 -0
  24. package/dist/index-d51tp4y9.js +1402 -0
  25. package/dist/index-d51tp4y9.js.map +11 -0
  26. package/dist/index-j4h0wd27.js +489 -0
  27. package/dist/index-j4h0wd27.js.map +14 -0
  28. package/dist/index-xgn9fbc6.js +298 -0
  29. package/dist/index-xgn9fbc6.js.map +13 -0
  30. package/dist/index.d.ts +5 -2
  31. package/dist/index.js +12 -4
  32. package/dist/index.js.map +2 -2
  33. package/dist/mp/inheritance.d.ts +17 -0
  34. package/dist/mp/inline.d.ts +22 -0
  35. package/dist/mp/methods.d.ts +1 -0
  36. package/dist/mp/source.d.ts +11 -0
  37. package/dist/mp/types.d.ts +8 -0
  38. package/dist/output-transaction.d.ts +19 -0
  39. package/dist/{project-ybacfze8.js → project-6tft5e77.js} +38 -6
  40. package/dist/{project-ybacfze8.js.map → project-6tft5e77.js.map} +3 -3
  41. package/dist/project.d.ts +2 -1
  42. package/dist/safe-path.d.ts +1 -0
  43. package/dist/scaffold.d.ts +6 -0
  44. package/dist/target/types.d.ts +7 -6
  45. package/dist/target/web-target.d.ts +1 -0
  46. package/dist/types.d.ts +13 -1
  47. package/dist/web-bundle.d.ts +17 -0
  48. package/dist/web-styles.d.ts +9 -0
  49. package/package.json +2 -2
  50. package/dist/build-mp-vk5ap2cw.js.map +0 -22
  51. package/dist/index-8k9x2k6m.js +0 -2288
  52. package/dist/index-8k9x2k6m.js.map +0 -27
  53. package/dist/index-k1qfvp0y.js +0 -19
  54. package/dist/index-k1qfvp0y.js.map +0 -10
  55. package/dist/index-yb2wsc7f.js +0 -7
  56. package/dist/index-yb2wsc7f.js.map +0 -9
@@ -0,0 +1,24 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/mp/build-mp.ts", "../src/mp/analyze.ts", "../src/mp/inheritance.ts", "../src/mp/source.ts", "../src/mp/errors.ts", "../src/mp/fold.ts", "../src/mp/binding.ts", "../src/mp/types.ts", "../src/mp/wxml.ts", "../src/mp/styles.ts", "../src/mp/state.ts", "../src/mp/inline.ts", "../src/mp/methods.ts", "../src/mp/compile.ts", "../src/mp/jsgen.ts"],
4
+ "sourcesContent": [
5
+ "import { cp, mkdir, readdir, writeFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { basename, dirname, join, relative, resolve } from 'node:path';\nimport type { ResolvedConfig, BuildResult } from '../types';\nimport type { MpDialect } from './dialect';\nimport { loadTypescript } from './ts-loader';\nimport { CompileContext, CompiledUnit } from './types';\nimport { createComponentIndex } from '../components';\nimport { findRootClass } from './analyze';\nimport { compileUnit, finalizeComponentProperties } from './compile';\nimport { generatePageJs, generateComponentJs } from './jsgen';\nimport {\n buildInputPaths,\n buildOutputPath,\n withBuildOutput,\n} from '../output-transaction';\n\nconst GENERATED_COMMENT = (dialectId: string): string =>\n `由 transone build --target ${dialectId} 生成,请勿手动编辑`;\n\n/**\n * 把 TSone 应用编译为小程序原生工程(微信 / 阿里 / 字节,差异见 MpDialect):\n * app.json / app.js / <appStyleFile> / 工程配置 + pages/<route>/<name>.* + components/<tag>/<tag>.*\n */\nexport async function buildMiniProgram(\n config: ResolvedConfig,\n dialect: MpDialect\n): Promise<BuildResult> {\n const mp = config.mp;\n if (!mp) {\n throw new Error('Mini program build requires config.mp');\n }\n\n const ts = await loadTypescript();\n const context: CompileContext = {\n ts,\n index: createComponentIndex({\n root: config.root,\n entrypoints: Object.values(mp.pages),\n platform: config.platform,\n ...config.components,\n }),\n root: config.root,\n files: new Map(),\n components: new Map(),\n compiling: new Set(),\n callSites: new Map(),\n lengthUnit: mp.lengthUnit,\n dialect,\n warnings: [],\n };\n\n const pages: Array<{ route: string; unit: CompiledUnit }> = [];\n for (const [route, entry] of Object.entries(mp.pages)) {\n const rootClass = findRootClass(context, entry);\n const location = pageLocation(route);\n const unit = compileUnit(context, rootClass, {\n kind: 'page',\n name: location.name,\n });\n pages.push({ route, unit });\n }\n finalizeComponentProperties(context);\n for (const warning of context.warnings) {\n console.warn(`[transone mp] ${warning}`);\n }\n\n return withBuildOutput(\n {\n root: config.root,\n outDir: mp.outDir,\n protectedPaths: buildInputPaths(config, Object.values(mp.pages), [\n mp.publicDir,\n ...context.index!.sources.map((source) => source.fileName),\n ...context.files.keys(),\n ]),\n },\n (outDir) => writeMiniProgram(config, dialect, outDir, pages, context)\n );\n}\n\nasync function writeMiniProgram(\n config: ResolvedConfig,\n dialect: MpDialect,\n outDir: string,\n pages: Array<{ route: string; unit: CompiledUnit }>,\n context: CompileContext\n): Promise<BuildResult> {\n const mp = config.mp!;\n const assetsBuilt: string[] = [];\n const write = async (path: string, content: string): Promise<void> => {\n const target = buildOutputPath(outDir, path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, content, 'utf8');\n assetsBuilt.push(target);\n };\n\n // —— 应用级文件 ——\n await write(\n dialect.projectConfigFile,\n `${JSON.stringify(\n dialect.buildProjectConfig(mp, basename(config.root)),\n null,\n 2\n )}\\n`\n );\n\n await write(\n 'app.json',\n `${JSON.stringify(\n {\n pages: pages.map(({ route }) => appPagePath(route)),\n window: {\n ...dialect.windowDefaults(mp.navigationBarTitleText),\n ...mp.window,\n },\n ...(mp.tabBar !== undefined ? { tabBar: mp.tabBar } : {}),\n ...dialect.appJsonExtras(),\n ...mp.appExtra,\n },\n null,\n 2\n )}\\n`\n );\n\n const requestBundle = await Bun.build({\n entrypoints: [fileURLToPath(import.meta.resolve('transone/request'))],\n target: 'browser',\n format: 'cjs',\n minify: false,\n });\n if (!requestBundle.success)\n throw new Error(\n `Mini program request runtime build failed: ${requestBundle.logs.join('\\n')}`\n );\n await write('transone-request.js', await requestBundle.outputs[0].text());\n await write(\n 'app.js',\n `App({__transoneRequest: require('./transone-request.js'), ...${JSON.stringify(\n {\n ...(mp.host !== undefined\n ? { __transoneConfig: { host: mp.host } }\n : {}),\n ...(mp.globalData !== undefined ? { globalData: mp.globalData } : {}),\n }\n )}});\\n`\n );\n if (dialect.sitemap) {\n await write(\n 'sitemap.json',\n `${JSON.stringify(\n {\n desc: GENERATED_COMMENT(dialect.id),\n rules: [{ action: 'allow', page: '*' }],\n },\n null,\n 2\n )}\\n`\n );\n }\n\n const globalStyles = new Set<string>();\n for (const { unit } of pages) {\n if (unit.globalStyle) {\n globalStyles.add(unit.globalStyle);\n }\n }\n await write(dialect.appStyleFile, `${[...globalStyles].join('\\n')}\\n`);\n\n // —— 页面 ——\n for (const { route, unit } of pages) {\n const base = pageFileBase(route);\n await write(`pages/${base}.${dialect.templateExt}`, unit.template);\n await write(`pages/${base}.${dialect.styleExt}`, `${unit.style}\\n`);\n await write(`pages/${base}.js`, generatePageJs(unit, dialect));\n await write(\n `pages/${base}.json`,\n `${JSON.stringify(\n {\n usingComponents: unit.usingComponents,\n ...mp.pageExtra?.[route],\n },\n null,\n 2\n )}\\n`\n );\n }\n\n // —— 自定义组件 ——\n for (const [tag, unit] of context.components) {\n await write(\n `components/${tag}/${tag}.${dialect.templateExt}`,\n unit.template\n );\n await write(\n `components/${tag}/${tag}.${dialect.styleExt}`,\n `${unit.style}\\n`\n );\n await write(\n `components/${tag}/${tag}.js`,\n generateComponentJs(unit, dialect)\n );\n await write(\n `components/${tag}/${tag}.json`,\n `${JSON.stringify(\n dialect.componentJson(unit.usingComponents),\n null,\n 2\n )}\\n`\n );\n }\n\n // —— 静态资源目录(public/ 默认;不存在则跳过)——\n // 上面生成文件已写完,public 仅补产物中不存在的内容:避免覆盖生成文件。\n if (existsSync(mp.publicDir)) {\n for (const file of await listFiles(mp.publicDir)) {\n const target = buildOutputPath(outDir, file);\n if (!existsSync(target)) {\n await cp(join(mp.publicDir, file), target, {\n recursive: true,\n force: true,\n errorOnExist: false,\n });\n }\n }\n }\n\n return {\n root: config.root,\n outDir: resolve(outDir),\n assetsBuilt,\n };\n}\n\nfunction pageLocation(route: string): { directory: string; name: string } {\n const segments = route.replace(/^\\/+/, '').split('/').filter(Boolean);\n if (segments.length === 0) {\n return { directory: '', name: 'index' };\n }\n const name = segments[segments.length - 1];\n const directory = segments.slice(0, -1).join('/');\n return { directory, name };\n}\n\n/** 页面文件基名:route '/' -> 'index/index';'/about' -> 'about/about'。 */\nfunction pageFileBase(route: string): string {\n const location = pageLocation(route);\n const directory =\n location.directory === ''\n ? location.name\n : `${location.directory}/${location.name}`;\n return `${directory}/${location.name}`;\n}\n\nfunction appPagePath(route: string): string {\n return `pages/${pageFileBase(route)}`;\n}\n\n/** 递归列出目录下所有文件(相对根目录的路径)。 */\nasync function listFiles(root: string, dir: string = root): Promise<string[]> {\n const out: string[] = [];\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const abs = join(dir, entry.name);\n if (entry.isDirectory()) {\n out.push(...(await listFiles(root, abs)));\n } else {\n out.push(relative(root, abs));\n }\n }\n return out;\n}\n",
6
+ "import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport type * as tsTypes from 'typescript';\nimport { reference, selected } from './inheritance';\nimport { loadSourceExport } from './source';\nimport { mpError } from './errors';\nimport { ClassSource, CompileContext } from './types';\nimport { unwrapParentheses } from './fold';\n\ninterface ImportBinding {\n specifier: string;\n importedName: string;\n}\n\n/** 读取并缓存源文件。 */\nexport function readSource(\n context: CompileContext,\n filePath: string\n): tsTypes.SourceFile {\n const cached = context.files.get(filePath);\n if (cached) {\n return cached;\n }\n if (!existsSync(filePath)) {\n throw mpError(filePath, '源文件不存在');\n }\n const text = readFileSync(filePath, 'utf8');\n const source = context.ts.createSourceFile(\n filePath,\n text,\n context.ts.ScriptTarget.Latest,\n true,\n context.ts.ScriptKind.TS\n );\n context.files.set(filePath, source);\n return source;\n}\n\n/** 从页面入口定位根组件类:优先 createApp({ root }),其次导出的 Component 子类。 */\nexport function findRootClass(\n context: CompileContext,\n filePath: string\n): ClassSource {\n const { ts } = context;\n const source = readSource(context, filePath);\n const imports = collectImports(context.ts, source);\n const localClasses = collectLocalClasses(context.ts, source);\n\n // 1. createApp({ root: App })\n // 入口通常写作 `export const app = createApp({ root: App })`(VariableStatement\n // 初始化器)或独立表达式语句;两种形态都要识别。\n for (const expression of topLevelExpressions(ts, source)) {\n if (!context.ts.isCallExpression(expression)) {\n continue;\n }\n const calleeName = callName(context.ts, expression.expression);\n const isCreateApp =\n calleeName === 'createApp' ||\n (calleeName !== undefined &&\n imports.get(calleeName)?.importedName === 'createApp');\n if (!isCreateApp) {\n continue;\n }\n const rootExpr = createAppRoot(context.ts, expression);\n if (!rootExpr) {\n continue;\n }\n return resolveClassReference(context, { filePath, source }, rootExpr);\n }\n\n // 2. 导出的 Component 子类\n for (const statement of source.statements) {\n if (!context.ts.isClassDeclaration(statement)) {\n continue;\n }\n const name = statement.name?.text;\n if (!name || !isExported(context.ts, statement)) {\n continue;\n }\n if (\n isComponentSubclass(context, {\n filePath,\n source,\n declaration: statement,\n className: name,\n })\n ) {\n const ref = context.index?.findClass(filePath, name);\n return ref\n ? selected(context, ref)\n : { filePath, source, declaration: statement, className: name };\n }\n }\n\n // 3. 本地(未导出)Component 子类,供 createApp 的 root 回退使用\n for (const [name, declaration] of localClasses) {\n if (\n isComponentSubclass(context, {\n filePath,\n source,\n declaration,\n className: name,\n })\n ) {\n const ref = context.index?.findClass(filePath, name);\n return ref\n ? selected(context, ref)\n : { filePath, source, declaration, className: name };\n }\n }\n\n throw mpError(\n filePath,\n '未找到可编译的页面组件:需要 createApp({ root }) 或导出的 Component 子类'\n );\n}\n\n/** 类解析所需的来源上下文(文件 + 已解析的源)。 */\nexport type ClassResolverContext = Pick<ClassSource, 'filePath' | 'source'>;\n\n/**\n * 解析一个类引用(标识符 / 类表达式)为 ClassSource。\n * 支持同文件类、相对路径导入的类;非相对导入会报错。\n */\nexport function resolveClassReference(\n context: CompileContext,\n from: ClassResolverContext,\n expr: tsTypes.Expression\n): ClassSource {\n const { ts } = context;\n const indexed = context.index?.resolve(expr, from.source);\n if (indexed) return selected(context, indexed);\n expr = unwrapParentheses(ts, expr);\n\n if (ts.isClassExpression(expr) || ts.isClassDeclaration(expr)) {\n const name = expr.name?.text;\n if (!name) {\n throw mpError(from.filePath, '匿名组件类不支持编译到小程序');\n }\n return {\n filePath: from.filePath,\n source: from.source,\n declaration: expr,\n className: name,\n };\n }\n\n if (!ts.isIdentifier(expr)) {\n throw mpError(\n from.filePath,\n `组件引用必须是类名或类表达式: ${expr.getText().slice(0, 60)}`\n );\n }\n const name = expr.text;\n\n // 同文件类声明\n const local = collectLocalClasses(ts, from.source).get(name);\n if (local) {\n return {\n filePath: from.filePath,\n source: from.source,\n declaration: local,\n className: name,\n };\n }\n\n // 导入的类\n const imports = collectImports(ts, from.source);\n const binding = imports.get(name);\n if (binding) {\n return resolveImportedClass(context, from, name, binding);\n }\n\n throw mpError(from.filePath, `无法解析组件标识符 \"${name}\"`);\n}\n\n/** 判断类是否为 Component 子类(extends 一个从 transone 导入或名为 Component 的类)。 */\nexport function isComponentSubclass(\n context: CompileContext,\n classSource: ClassSource\n): boolean {\n const { ts } = context;\n const indexed = reference(context, classSource);\n if (indexed && context.index!.isComponent(indexed)) return true;\n const heritage = classSource.declaration.heritageClauses ?? [];\n const imports = collectImports(ts, classSource.source);\n for (const clause of heritage) {\n if (clause.token !== ts.SyntaxKind.ExtendsKeyword) {\n continue;\n }\n for (const type of clause.types) {\n if (!ts.isExpressionWithTypeArguments(type)) {\n continue;\n }\n const expression = unwrapParentheses(ts, type.expression);\n if (!ts.isIdentifier(expression)) {\n continue;\n }\n const binding = imports.get(expression.text);\n if (binding && binding.specifier.includes('transone')) {\n return true;\n }\n if (expression.text === 'Component') {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction resolveImportedClass(\n context: CompileContext,\n from: ClassResolverContext,\n localName: string,\n binding: ImportBinding\n): ClassSource {\n if (binding.specifier.startsWith('.')) {\n const targetPath = resolveImportPath(from.filePath, binding.specifier);\n if (!targetPath) {\n throw mpError(\n from.filePath,\n `找不到导入文件 \"${binding.specifier}\"(相对 ${from.filePath})`\n );\n }\n const source = readSource(context, targetPath);\n const importedName = binding.importedName;\n const found = findExportedClass(context, source, importedName, new Set());\n if (!found) {\n throw mpError(\n targetPath,\n `找不到导出的组件类 \"${importedName}\"(从 ${localName} 导入)`\n );\n }\n return {\n filePath: found.filePath,\n source: readSource(context, found.filePath),\n declaration: found.declaration,\n className: importedName,\n };\n }\n return resolvePackageClass(context, from, localName, binding);\n}\n\n/**\n * 解析包名导入的组件(如 `import { TuButton } from 'transone-ui'`):\n * 沿目录向上查找 node_modules/<specifier>/package.json,按其 `source` 字段\n * (约定为可编译的 TS 源码入口)定位源码,再沿具名 re-export 找到组件类。\n */\nfunction resolvePackageClass(\n context: CompileContext,\n from: ClassResolverContext,\n localName: string,\n binding: ImportBinding\n): ClassSource {\n const packageInfo = findPackageInfo(from.filePath, binding.specifier);\n if (!packageInfo) {\n throw mpError(\n from.filePath,\n `无法解析组件来源 \"${binding.specifier}\":找不到 node_modules 包(仅支持相对路径或已安装的包)`\n );\n }\n const sourceField = packageInfo.source;\n if (typeof sourceField !== 'string' || sourceField.length === 0) {\n throw mpError(\n from.filePath,\n `包 \"${binding.specifier}\" 缺少 \"source\" 字段:小程序编译需要可分析的 TS 源码入口(在 package.json 声明 \"source\": \"./lib/index.ts\")`\n );\n }\n const targetPath = resolvePackageSource(packageInfo.dir, sourceField);\n if (!targetPath) {\n throw mpError(\n from.filePath,\n `包 \"${binding.specifier}\" 的 \"source\" 指向的文件不存在: ${sourceField}`\n );\n }\n if (context.index)\n return loadSourceExport(context, targetPath, [binding.importedName]);\n const source = readSource(context, targetPath);\n const importedName = binding.importedName;\n const found = findExportedClass(context, source, importedName, new Set());\n if (!found) {\n throw mpError(\n targetPath,\n `找不到导出的组件类 \"${importedName}\"(从 ${localName} 导入,包 \"${binding.specifier}\")`\n );\n }\n return {\n filePath: found.filePath,\n source: readSource(context, found.filePath),\n declaration: found.declaration,\n className: importedName,\n };\n}\n\ninterface PackageInfo {\n dir: string;\n source?: unknown;\n}\n\n/** 沿 fromFile 目录向上查找 node_modules/<specifier>/package.json。 */\nfunction findPackageInfo(\n fromFile: string,\n specifier: string\n): PackageInfo | undefined {\n const segments = specifier.split('/');\n const packageJsonRelative = join('node_modules', ...segments, 'package.json');\n let current = dirname(fromFile);\n for (;;) {\n const candidate = join(current, packageJsonRelative);\n if (existsSync(candidate)) {\n try {\n const json = JSON.parse(readFileSync(candidate, 'utf8')) as Record<\n string,\n unknown\n >;\n return {\n dir: join(current, 'node_modules', ...segments),\n source: json.source,\n };\n } catch {\n return undefined;\n }\n }\n const parent = dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\nfunction resolvePackageSource(\n packageDir: string,\n sourceField: string\n): string | undefined {\n const base = resolve(packageDir, sourceField);\n const candidates = [base, `${base}.ts`, `${base}.tsx`];\n return candidates.find((candidate) => existsSync(candidate));\n}\n\ninterface ExportedClassLocation {\n filePath: string;\n declaration: tsTypes.ClassDeclaration;\n}\n\nfunction findExportedClass(\n context: CompileContext,\n source: tsTypes.SourceFile,\n name: string,\n seen: Set<string>\n): ExportedClassLocation | undefined {\n const { ts } = context;\n if (seen.has(source.fileName)) {\n return undefined;\n }\n seen.add(source.fileName);\n\n for (const statement of source.statements) {\n if (ts.isClassDeclaration(statement) && statement.name?.text === name) {\n if (isExported(ts, statement)) {\n return { filePath: source.fileName, declaration: statement };\n }\n }\n }\n // export { X }(本地类)与 export { X } from './path'(re-export)\n for (const statement of source.statements) {\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n ) {\n for (const element of statement.exportClause.elements) {\n if (element.name.text !== name) {\n continue;\n }\n const local = collectLocalClasses(ts, source).get(name);\n if (local) {\n return { filePath: source.fileName, declaration: local };\n }\n if (!statement.moduleSpecifier) {\n continue;\n }\n const specifier = statement.moduleSpecifier\n .getText()\n .replace(/['\"]/g, '');\n if (!specifier.startsWith('.')) {\n continue;\n }\n const targetPath = resolveImportPath(source.fileName, specifier);\n if (!targetPath) {\n continue;\n }\n const targetSource = readSource(context, targetPath);\n const reExported = findExportedClass(\n context,\n targetSource,\n element.propertyName?.text ?? element.name.text,\n seen\n );\n if (reExported) {\n return reExported;\n }\n }\n }\n }\n return undefined;\n}\n\n/** 顶层可求值表达式:表达式语句 + 变量声明的初始化器(如 export const app = createApp(...))。 */\nfunction topLevelExpressions(\n ts: typeof tsTypes,\n source: tsTypes.SourceFile\n): tsTypes.Expression[] {\n const expressions: tsTypes.Expression[] = [];\n for (const statement of source.statements) {\n if (ts.isExpressionStatement(statement)) {\n expressions.push(statement.expression);\n continue;\n }\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (declaration.initializer) {\n expressions.push(declaration.initializer);\n }\n }\n }\n }\n return expressions;\n}\n\nfunction createAppRoot(\n ts: typeof tsTypes,\n call: tsTypes.CallExpression\n): tsTypes.Expression | undefined {\n for (const argument of call.arguments) {\n const object = unwrapParentheses(ts, argument);\n if (!ts.isObjectLiteralExpression(object)) {\n continue;\n }\n for (const property of object.properties) {\n if (\n ts.isPropertyAssignment(property) &&\n ts.isIdentifier(property.name) &&\n property.name.text === 'root'\n ) {\n return property.initializer;\n }\n }\n }\n return undefined;\n}\n\nfunction collectLocalClasses(\n ts: typeof tsTypes,\n source: tsTypes.SourceFile\n): Map<string, tsTypes.ClassDeclaration> {\n const classes = new Map<string, tsTypes.ClassDeclaration>();\n for (const statement of source.statements) {\n if (ts.isClassDeclaration(statement) && statement.name) {\n classes.set(statement.name.text, statement);\n }\n }\n return classes;\n}\n\nfunction collectImports(\n ts: typeof tsTypes,\n source: tsTypes.SourceFile\n): Map<string, ImportBinding> {\n const imports = new Map<string, ImportBinding>();\n for (const statement of source.statements) {\n if (!ts.isImportDeclaration(statement)) {\n continue;\n }\n const specifier = statement.moduleSpecifier.getText().replace(/['\"]/g, '');\n const bindings = statement.importClause?.namedBindings;\n if (!bindings) {\n continue;\n }\n if (ts.isNamedImports(bindings)) {\n for (const element of bindings.elements) {\n imports.set(element.name.text, {\n specifier,\n importedName: element.propertyName?.text ?? element.name.text,\n });\n }\n } else if (ts.isNamespaceImport(bindings)) {\n imports.set(bindings.name.text, { specifier, importedName: '*' });\n }\n }\n return imports;\n}\n\nfunction resolveImportPath(\n fromFile: string,\n specifier: string\n): string | undefined {\n const base = resolve(dirname(fromFile), specifier);\n const candidates = [\n base,\n `${base}.ts`,\n `${base}.tsx`,\n join(base, 'index.ts'),\n join(base, 'index.tsx'),\n ];\n return candidates.find((candidate) => existsSync(candidate));\n}\n\nfunction isExported(\n ts: typeof tsTypes,\n declaration: tsTypes.ClassDeclaration\n): boolean {\n return (declaration.modifiers ?? []).some(\n (modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword\n );\n}\n\nfunction callName(\n ts: typeof tsTypes,\n expression: tsTypes.Expression\n): string | undefined {\n expression = unwrapParentheses(ts, expression);\n if (ts.isIdentifier(expression)) {\n return expression.text;\n }\n if (ts.isPropertyAccessExpression(expression)) {\n return expression.name.text;\n }\n return undefined;\n}\n",
7
+ "import { createHash } from 'node:crypto';\nimport type ts from 'typescript';\nimport { runtimeOwner, sourceSymbolAt } from './source';\nimport type { ClassReference } from '../components/types';\nimport type { ClassSource, CompileContext } from './types';\n\nexport function reference(\n context: CompileContext,\n source: ClassSource\n): ClassReference | undefined {\n return (\n source.reference ??\n context.index?.findClass(source.filePath, source.className)\n );\n}\nexport function selected(\n context: CompileContext,\n ref: ClassReference\n): ClassSource {\n const implementation = context.index!.select(ref);\n return { ...runtimeOwner(context, implementation), logical: ref };\n}\nexport function ownedMethods(\n context: CompileContext,\n source: ClassSource\n): Array<{ owner: ClassSource; declaration: ts.MethodDeclaration }> {\n const ref = reference(context, source);\n const effectiveOwners = new Set(\n ref && context.index\n ? context.index\n .members(ref)\n .filter((member) =>\n context.ts.isMethodDeclaration(member.declaration)\n )\n .map((member) => member.owner.id)\n : []\n );\n const owners =\n ref && context.index\n ? context.index\n .hierarchy(ref)\n .filter(\n (owner) =>\n !owner.source.isDeclarationFile || effectiveOwners.has(owner.id)\n )\n .map((owner) => runtimeOwner(context, owner))\n : [source];\n const effective = new Map<\n string,\n { owner: ClassSource; declaration: ts.ClassElement }\n >();\n for (const owner of owners) {\n for (const declaration of owner.declaration.members) {\n if (!declaration.name) continue;\n const isStatic =\n context.ts.canHaveModifiers(declaration) &&\n context.ts\n .getModifiers(declaration)\n ?.some((item) => item.kind === context.ts.SyntaxKind.StaticKeyword);\n const name =\n context.ts.isIdentifier(declaration.name) ||\n context.ts.isStringLiteralLike(declaration.name)\n ? declaration.name.text\n : declaration.name.getText(owner.source);\n effective.set(`${isStatic ? 'static:' : ''}${name}`, {\n owner,\n declaration,\n });\n }\n }\n const members = [...effective.values()];\n return members\n .filter(\n (item): item is typeof item & { declaration: ts.MethodDeclaration } =>\n context.ts.isMethodDeclaration(item.declaration) &&\n !item.declaration.modifiers?.some(\n (m) => m.kind === context.ts.SyntaxKind.StaticKeyword\n )\n )\n .map((item) => ({ owner: item.owner, declaration: item.declaration }));\n}\nexport function ownedMethod(\n context: CompileContext,\n source: ClassSource,\n name: string\n) {\n return ownedMethods(context, source).find(\n (item) => item.declaration.name.getText(item.owner.source) === name\n );\n}\nexport function parentSource(\n context: CompileContext,\n source: ClassSource\n): ClassSource | undefined {\n const ref = reference(context, source);\n return ref && context.index?.metadata(ref).parent;\n}\nexport function stableTag(\n context: CompileContext,\n source: ClassSource\n): string {\n const ref = source.logical ?? reference(context, source);\n const name = ref?.className ?? source.className;\n const normalize = (value: string): string =>\n value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^A-Za-z0-9-]/g, '')\n .toLowerCase();\n const tag = normalize(name);\n if (!tag) throw new Error(`无法从类名 \"${name}\" 生成组件标签名`);\n if (!ref || !context.index) return tag;\n const metadata = context.index.metadata(ref);\n const explicitImplementation = metadata.platforms.length > 0;\n const collides = context.index.classes.some((other) => {\n if (other.id === ref.id || !context.index!.isComponent(other)) return false;\n const otherMetadata = context.index!.metadata(other);\n // Implementation names must never alter a logical business component tag.\n // An explicit implementation gets its own suffix when its display name is\n // already owned by a logical family or another explicit implementation.\n if (!explicitImplementation && otherMetadata.platforms.length > 0)\n return false;\n return normalize(other.className) === tag;\n });\n return collides\n ? `${tag}-${createHash('sha256').update(ref.id.replace(context.root, '')).digest('hex').slice(0, 8)}`\n : tag;\n}\n\n/** Static constants retain their declaring module even when imported through aliases. */\nexport function moduleConstants(\n context: CompileContext,\n source: ClassSource\n): Map<string, ts.Expression> {\n const api = context.ts;\n const constants = new Map<string, ts.Expression>();\n const expand = (\n expression: ts.Expression,\n seen = new Set<ts.Declaration>()\n ): ts.Expression => {\n if (!context.index) return expression;\n const result = api.transform(expression, [\n (transformContext) => (root) => {\n const visit = (node: ts.Node): ts.Node => {\n if (api.isShorthandPropertyAssignment(node)) {\n return api.factory.createPropertyAssignment(\n node.name.text,\n visit(node.name) as ts.Expression\n );\n }\n const keyOnly =\n api.isIdentifier(node) &&\n node.parent &&\n ((api.isPropertyAssignment(node.parent) &&\n node.parent.name === node) ||\n (api.isPropertyAccessExpression(node.parent) &&\n node.parent.name === node));\n if (\n !keyOnly &&\n (api.isIdentifier(node) || api.isPropertyAccessExpression(node))\n ) {\n const declaration = sourceSymbolAt(context, node)?.valueDeclaration;\n if (\n declaration &&\n api.isVariableDeclaration(declaration) &&\n declaration.initializer &&\n !seen.has(declaration) &&\n api.isVariableDeclarationList(declaration.parent) &&\n declaration.parent.flags & api.NodeFlags.Const\n ) {\n return expand(\n declaration.initializer,\n new Set([...seen, declaration])\n );\n }\n }\n return api.visitEachChild(node, visit, transformContext);\n };\n return api.visitNode(root, visit) as ts.Expression;\n },\n ]);\n const value = result.transformed[0];\n result.dispose();\n return value;\n };\n for (const statement of source.source.statements) {\n if (\n api.isVariableStatement(statement) &&\n statement.declarationList.flags & api.NodeFlags.Const\n ) {\n for (const declaration of statement.declarationList.declarations) {\n if (api.isIdentifier(declaration.name) && declaration.initializer)\n constants.set(declaration.name.text, expand(declaration.initializer));\n }\n }\n if (context.index && api.isImportDeclaration(statement)) {\n const clause = statement.importClause;\n const bindings = clause?.namedBindings;\n const names = [\n ...(clause?.name ? [clause.name] : []),\n ...(bindings && api.isNamedImports(bindings)\n ? bindings.elements.map((item) => item.name)\n : []),\n ];\n for (const name of names) {\n const declaration = sourceSymbolAt(context, name)?.valueDeclaration;\n if (\n declaration &&\n api.isVariableDeclaration(declaration) &&\n declaration.initializer\n )\n constants.set(name.text, expand(declaration.initializer));\n }\n }\n }\n return constants;\n}\n",
8
+ "import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport type tsTypes from 'typescript';\nimport type { ClassReference } from '../components/types';\nimport type { ClassSource, CompileContext } from './types';\nimport { mpError } from './errors';\n\n/** Declaration identities remain owned by the build index. Their executable MP\n * members come from the installed package's existing `source` contract. */\nexport function runtimeOwner(\n context: CompileContext,\n reference: ClassReference\n): ClassSource {\n if (!reference.source.isDeclarationFile) return { ...reference, reference };\n const cache = (context.packageSources ??= new Map());\n const cached = cache.get(reference.id);\n if (cached) return cached;\n let directory = dirname(reference.filePath);\n let entry: string | undefined;\n for (;;) {\n const manifest = join(directory, 'package.json');\n if (existsSync(manifest)) {\n const pkg = JSON.parse(readFileSync(manifest, 'utf8')) as {\n source?: unknown;\n };\n if (typeof pkg.source !== 'string' || !pkg.source)\n throw mpError(\n reference.filePath,\n '声明组件所在包缺少 source 字段:小程序需要可编译的 TypeScript 源码'\n );\n const base = resolve(directory, pkg.source);\n entry = [base, `${base}.ts`, `${base}.tsx`].find(existsSync);\n if (!entry)\n throw mpError(\n reference.filePath,\n `包 source 指向的文件不存在: ${pkg.source}`\n );\n break;\n }\n const parent = dirname(directory);\n if (parent === directory)\n throw mpError(\n reference.filePath,\n '无法定位声明组件的 package.json/source'\n );\n directory = parent;\n }\n const owner = {\n ...loadSourceExport(\n context,\n entry,\n [reference.exportName, reference.className].filter(\n (name): name is string => !!name\n )\n ),\n reference,\n };\n cache.set(reference.id, owner);\n return owner;\n}\n\n/** The old package.source path can be absent from the shared index entirely. */\nexport function loadSourceExport(\n context: CompileContext,\n entry: string,\n names: readonly string[]\n): ClassSource {\n const program = sourceProgram(context, entry);\n const checker = program.getTypeChecker();\n const source = program.getSourceFile(entry)!;\n const module = checker.getSymbolAtLocation(source);\n const exports = module ? checker.getExportsOfModule(module) : [];\n const exported = names\n .map((name) => exports.find((symbol) => symbol.name === name))\n .find(Boolean);\n const symbol = exported && unalias(context, checker, exported);\n const declaration =\n symbol?.valueDeclaration ??\n symbol?.declarations?.find(context.ts.isClassDeclaration);\n if (!declaration || !context.ts.isClassDeclaration(declaration))\n throw mpError(entry, `source 中找不到组件类 ${names.join(' / ')}`);\n const owner: ClassSource = {\n filePath: declaration.getSourceFile().fileName,\n source: declaration.getSourceFile(),\n declaration,\n className: declaration.name?.text ?? names[0]!,\n };\n (context.packageComponentSources ??= new Set()).add(owner.source);\n return owner;\n}\n\nfunction sourceProgram(\n context: CompileContext,\n entry: string\n): tsTypes.Program {\n const programs = (context.sourcePrograms ??= new Map());\n const cached = programs.get(entry);\n if (cached) return cached;\n const { ts } = context;\n const configPath = ts.findConfigFile(context.root, ts.sys.fileExists);\n const config = configPath && ts.readConfigFile(configPath, ts.sys.readFile);\n const options =\n configPath && config && !config.error\n ? ts.parseJsonConfigFileContent(\n config.config,\n ts.sys,\n dirname(configPath)\n ).options\n : {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n };\n const program = ts.createProgram([entry], { ...options, noEmit: true });\n program.getTypeChecker();\n for (const source of program.getSourceFiles()) {\n if (source.isDeclarationFile) continue;\n programs.set(source.fileName, program);\n context.files.set(source.fileName, source);\n }\n programs.set(entry, program);\n return program;\n}\n\n/** Actual package source owns its checker, including imported helpers and locals.\n * The shared index still handles all normal application/selection references. */\nexport function sourceSymbolAt(\n context: CompileContext,\n node: tsTypes.Node,\n source = node.getSourceFile()\n): tsTypes.Symbol | undefined {\n const indexed = context.index?.symbolAt(node, source);\n if (indexed) return indexed;\n const program = context.sourcePrograms?.get(source.fileName);\n if (!program) return undefined;\n const { ts } = context;\n const checker = program.getTypeChecker();\n const original = ts.getOriginalNode(node);\n let symbol =\n ts.isIdentifier(original) &&\n ts.isShorthandPropertyAssignment(original.parent)\n ? checker.getShorthandAssignmentValueSymbol(original.parent)\n : checker.getSymbolAtLocation(original);\n if (\n !symbol &&\n ts.isElementAccessExpression(original) &&\n (ts.isStringLiteralLike(original.argumentExpression) ||\n ts.isNumericLiteral(original.argumentExpression))\n ) {\n symbol = checker.getPropertyOfType(\n checker.getTypeAtLocation(original.expression),\n original.argumentExpression.text\n );\n }\n return symbol && unalias(context, checker, symbol);\n}\nfunction unalias(\n context: CompileContext,\n checker: tsTypes.TypeChecker,\n symbol: tsTypes.Symbol\n): tsTypes.Symbol {\n const seen = new Set<tsTypes.Symbol>();\n while (symbol.flags & context.ts.SymbolFlags.Alias && !seen.has(symbol)) {\n seen.add(symbol);\n symbol = checker.getAliasedSymbol(symbol);\n }\n return symbol;\n}\n",
9
+ "/** 小程序编译错误:携带出错文件,便于定位不可静态编译的源码。 */\nexport class MpCompileError extends Error {\n public readonly file: string;\n\n constructor(file: string, message: string) {\n super(`${message} (${file})`);\n this.name = 'MpCompileError';\n this.file = file;\n }\n}\n\nexport function mpError(file: string, message: string): MpCompileError {\n return new MpCompileError(file, message);\n}\n",
10
+ "import type * as tsTypes from 'typescript';\n\nexport type FoldedValue =\n | string\n | number\n | boolean\n | null\n | FoldedValue[]\n | { [key: string]: FoldedValue };\n\n/** 收集源文件顶层 const 声明(name -> 初始化表达式)。 */\nexport function collectModuleConsts(\n ts: typeof tsTypes,\n source: tsTypes.SourceFile\n): Map<string, tsTypes.Expression> {\n const consts = new Map<string, tsTypes.Expression>();\n for (const statement of source.statements) {\n if (!ts.isVariableStatement(statement)) {\n continue;\n }\n const isConst = statement.declarationList.flags & ts.NodeFlags.Const;\n if (!isConst) {\n continue;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.initializer) {\n consts.set(declaration.name.text, declaration.initializer);\n }\n }\n }\n return consts;\n}\n\n/**\n * 常量折叠:把可静态求值的表达式折叠为 JSON 值。\n * 无法求值时返回 undefined(调用方决定如何报错)。\n */\nexport function foldExpression(\n ts: typeof tsTypes,\n node: tsTypes.Node,\n consts: Map<string, tsTypes.Expression>,\n seen = new Set<string>()\n): FoldedValue | undefined {\n node = unwrapParentheses(ts, node);\n\n if (ts.isStringLiteral(node)) {\n return node.text;\n }\n if (ts.isNoSubstitutionTemplateLiteral(node)) {\n // 含 {{}} 的模板串依赖运行时 TemplateEngine,不是常量\n if (node.text.includes('{{')) {\n return undefined;\n }\n return node.text;\n }\n if (ts.isNumericLiteral(node)) {\n return Number(node.text);\n }\n if (node.kind === ts.SyntaxKind.TrueKeyword) {\n return true;\n }\n if (node.kind === ts.SyntaxKind.FalseKeyword) {\n return false;\n }\n if (node.kind === ts.SyntaxKind.NullKeyword) {\n return null;\n }\n\n if (ts.isPrefixUnaryExpression(node)) {\n const operand = foldExpression(ts, node.operand, consts, seen);\n if (operand === undefined) {\n return undefined;\n }\n if (node.operator === ts.SyntaxKind.MinusToken) {\n return typeof operand === 'number' ? -operand : undefined;\n }\n if (node.operator === ts.SyntaxKind.PlusToken) {\n return typeof operand === 'number' ? operand : undefined;\n }\n if (node.operator === ts.SyntaxKind.ExclamationToken) {\n return !operand;\n }\n return undefined;\n }\n\n if (ts.isBinaryExpression(node)) {\n const left = foldExpression(ts, node.left, consts, seen);\n const right = foldExpression(ts, node.right, consts, seen);\n if (left === undefined || right === undefined) {\n return undefined;\n }\n return foldBinary(ts, node.operatorToken.kind, left, right);\n }\n\n if (ts.isConditionalExpression(node)) {\n const condition = foldExpression(ts, node.condition, consts, seen);\n if (typeof condition !== 'boolean') {\n return undefined;\n }\n return condition\n ? foldExpression(ts, node.whenTrue, consts, seen)\n : foldExpression(ts, node.whenFalse, consts, seen);\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n const items: FoldedValue[] = [];\n for (const element of node.elements) {\n if (ts.isSpreadElement(element)) {\n const spread = foldExpression(ts, element.expression, consts, seen);\n if (!Array.isArray(spread)) {\n return undefined;\n }\n items.push(...spread);\n continue;\n }\n const value = foldExpression(ts, element, consts, seen);\n if (value === undefined) {\n return undefined;\n }\n items.push(value);\n }\n return items;\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const result: Record<string, FoldedValue> = {};\n for (const property of node.properties) {\n if (ts.isSpreadAssignment(property)) {\n const spread = foldExpression(ts, property.expression, consts, seen);\n if (!spread || typeof spread !== 'object' || Array.isArray(spread))\n return undefined;\n Object.assign(result, spread);\n continue;\n }\n if (ts.isPropertyAssignment(property)) {\n const key = propertyNameText(ts, property.name);\n const value = foldExpression(ts, property.initializer, consts, seen);\n if (key === undefined || value === undefined) {\n return undefined;\n }\n result[key] = value;\n continue;\n }\n if (\n ts.isShorthandPropertyAssignment(property) &&\n ts.isIdentifier(property.name)\n ) {\n const initializer = consts.get(property.name.text);\n if (!initializer) {\n return undefined;\n }\n const value = foldExpression(ts, initializer, consts, seen);\n if (value === undefined) {\n return undefined;\n }\n result[property.name.text] = value;\n continue;\n }\n return undefined;\n }\n return result;\n }\n\n if (ts.isIdentifier(node)) {\n if (seen.has(node.text)) {\n return undefined;\n }\n const initializer = consts.get(node.text);\n if (!initializer) {\n return undefined;\n }\n seen.add(node.text);\n const value = foldExpression(ts, initializer, consts, seen);\n seen.delete(node.text);\n return value;\n }\n\n if (ts.isPropertyAccessExpression(node)) {\n const base = foldExpression(ts, node.expression, consts, seen);\n if (base === undefined) {\n return undefined;\n }\n if (Array.isArray(base)) {\n if (node.name.text === 'length') {\n return base.length;\n }\n return undefined;\n }\n if (typeof base === 'object' && base !== null) {\n return base[node.name.text];\n }\n return undefined;\n }\n\n if (ts.isElementAccessExpression(node)) {\n const base = foldExpression(ts, node.expression, consts, seen);\n const index = foldExpression(ts, node.argumentExpression, consts, seen);\n if (!Array.isArray(base) || typeof index !== 'number') {\n return undefined;\n }\n return base[index];\n }\n\n if (ts.isTemplateExpression(node)) {\n let result = '';\n if (node.head.text !== '') {\n result += node.head.text;\n }\n for (const span of node.templateSpans) {\n const value = foldExpression(ts, span.expression, consts, seen);\n if (value === undefined) {\n return undefined;\n }\n result += String(value);\n result += span.literal.text;\n }\n return result;\n }\n\n return undefined;\n}\n\nfunction foldBinary(\n ts: typeof tsTypes,\n operator: tsTypes.SyntaxKind,\n left: FoldedValue,\n right: FoldedValue\n): FoldedValue | undefined {\n switch (operator) {\n case ts.SyntaxKind.PlusToken:\n return `${left}${right}` as FoldedValue;\n case ts.SyntaxKind.MinusToken:\n return (left as number) - (right as number);\n case ts.SyntaxKind.AsteriskToken:\n return (left as number) * (right as number);\n case ts.SyntaxKind.SlashToken:\n return (left as number) / (right as number);\n case ts.SyntaxKind.PercentToken:\n return (left as number) % (right as number);\n case ts.SyntaxKind.EqualsEqualsEqualsToken:\n return left === right;\n case ts.SyntaxKind.ExclamationEqualsEqualsToken:\n return left !== right;\n case ts.SyntaxKind.LessThanToken:\n return (left as number) < (right as number);\n case ts.SyntaxKind.LessThanEqualsToken:\n return (left as number) <= (right as number);\n case ts.SyntaxKind.GreaterThanToken:\n return (left as number) > (right as number);\n case ts.SyntaxKind.GreaterThanEqualsToken:\n return (left as number) >= (right as number);\n case ts.SyntaxKind.AmpersandAmpersandToken:\n return Boolean(left) && Boolean(right);\n case ts.SyntaxKind.BarBarToken:\n return Boolean(left) || Boolean(right);\n default:\n return undefined;\n }\n}\n\nexport function propertyNameText(\n ts: typeof tsTypes,\n name: tsTypes.PropertyName\n): string | undefined {\n if (\n ts.isIdentifier(name) ||\n ts.isStringLiteral(name) ||\n ts.isNumericLiteral(name)\n ) {\n return name.text;\n }\n return undefined;\n}\n\nexport function unwrapParentheses<T extends tsTypes.Node>(\n ts: typeof tsTypes,\n node: T\n): T {\n let current: tsTypes.Node = node;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current as T;\n}\n\n/** this 表达式判断(TypeScript API 未导出 isThisExpression)。 */\nexport function isThisExpression(\n ts: typeof tsTypes,\n node: tsTypes.Node\n): node is tsTypes.ThisExpression {\n return node.kind === ts.SyntaxKind.ThisKeyword;\n}\n",
11
+ "import type * as tsTypes from 'typescript';\nimport {\n foldExpression,\n FoldedValue,\n isThisExpression,\n unwrapParentheses,\n} from './fold';\nimport { mpError } from './errors';\n\n/** 绑定表达式求值作用域:each 参数名 + render 内局部 const。 */\nexport interface BindingScope {\n params: Set<string>;\n locals: Map<string, tsTypes.Expression>;\n /** 模块级 const(name -> 初始化表达式)。 */\n consts: Map<string, tsTypes.Expression>;\n}\n\nexport interface BindingContext {\n ts: typeof tsTypes;\n scope: BindingScope;\n filePath: string;\n /** 组件模板中访问 this.props.X 时回调,用于收集 properties 声明。 */\n onProp?: (name: string) => void;\n}\n\n/**\n * 把 TypeScript 表达式转换为 WXML 数据绑定表达式({{...}} 内的部分)。\n * 支持:this.state / this.props 路径、字面量、三元、二元、each 参数、\n * render 局部 const、可折叠的模块级 const。\n */\nexport function toBinding(context: BindingContext, node: tsTypes.Node): string {\n const { ts } = context;\n node = unwrapParentheses(ts, node);\n\n if (ts.isPropertyAccessExpression(node)) {\n const statePath = thisStatePath(ts, node);\n if (statePath) {\n return statePath;\n }\n const propsPath = thisPropsPath(ts, node);\n if (propsPath) {\n context.onProp?.(propsPath.split('.')[0]);\n return propsPath;\n }\n\n const folded = foldExpression(ts, node, context.scope.consts);\n if (folded !== undefined) {\n return literalToBinding(folded);\n }\n\n const base = toBinding(context, node.expression);\n if (!isPathLike(base)) {\n throw mpError(\n context.filePath,\n `模板表达式不支持该属性访问: ${node.getText()}`\n );\n }\n return `${base}.${node.name.text}`;\n }\n\n if (ts.isElementAccessExpression(node)) {\n const folded = foldExpression(ts, node, context.scope.consts);\n if (folded !== undefined) {\n return literalToBinding(folded);\n }\n const base = toBinding(context, node.expression);\n const index = toBinding(context, node.argumentExpression);\n if (!isPathLike(base)) {\n throw mpError(\n context.filePath,\n `模板表达式不支持该下标访问: ${node.getText()}`\n );\n }\n return `${base}[${index}]`;\n }\n\n if (ts.isIdentifier(node)) {\n const { params, locals, consts } = context.scope;\n if (params.has(node.text)) {\n return node.text;\n }\n if (locals.has(node.text)) {\n return toBinding(context, locals.get(node.text)!);\n }\n if (consts.has(node.text)) {\n const folded = foldExpression(ts, node, consts);\n if (folded !== undefined) {\n return literalToBinding(folded);\n }\n return toBinding(context, consts.get(node.text)!);\n }\n throw mpError(context.filePath, `无法解析模板标识符 \"${node.text}\"`);\n }\n\n if (ts.isStringLiteral(node)) {\n return singleQuoted(node.text);\n }\n if (ts.isNumericLiteral(node)) {\n return node.text;\n }\n if (node.kind === ts.SyntaxKind.TrueKeyword) {\n return 'true';\n }\n if (node.kind === ts.SyntaxKind.FalseKeyword) {\n return 'false';\n }\n if (node.kind === ts.SyntaxKind.NullKeyword) {\n return 'null';\n }\n\n if (ts.isNoSubstitutionTemplateLiteral(node)) {\n // 含 {{}} 的模板串本身就是 WXML 绑定语法,直接透传\n if (node.text.includes('{{')) {\n return node.text;\n }\n return singleQuoted(node.text);\n }\n\n if (ts.isTemplateExpression(node)) {\n const parts: string[] = [];\n if (node.head.text !== '') {\n parts.push(singleQuoted(node.head.text));\n }\n for (const span of node.templateSpans) {\n parts.push(toBinding(context, span.expression));\n if (span.literal.text !== '') {\n parts.push(singleQuoted(span.literal.text));\n }\n }\n return parts.join(' + ');\n }\n\n if (ts.isBinaryExpression(node)) {\n return `(${toBinding(context, node.left)} ${node.operatorToken.getText()} ${toBinding(context, node.right)})`;\n }\n\n if (ts.isConditionalExpression(node)) {\n return `(${toBinding(context, node.condition)} ? ${toBinding(context, node.whenTrue)} : ${toBinding(context, node.whenFalse)})`;\n }\n\n if (ts.isPrefixUnaryExpression(node)) {\n const operator = ts.tokenToString(node.operator) ?? String(node.operator);\n return `(${operator}${toBinding(context, node.operand)})`;\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n const folded = foldExpression(ts, node, context.scope.consts);\n if (folded !== undefined) {\n return literalToBinding(folded);\n }\n const items = node.elements.map((element) => toBinding(context, element));\n return `[${items.join(', ')}]`;\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const folded = foldExpression(ts, node, context.scope.consts);\n if (folded !== undefined) {\n return literalToBinding(folded);\n }\n throw mpError(\n context.filePath,\n `模板表达式中的对象字面量无法静态求值: ${node.getText()}`\n );\n }\n\n if (ts.isCallExpression(node)) {\n throw mpError(\n context.filePath,\n `模板表达式不支持函数调用(如 ${node.getText()}):WXML 无法执行方法,请在方法/state 中预先计算格式化结果`\n );\n }\n\n throw mpError(\n context.filePath,\n `不支持的模板表达式: ${node.getText() ?? node.kind}`\n );\n}\n\n/** this.state.a.b.c -> \"a.b.c\";非该形态返回 undefined。 */\nfunction thisStatePath(\n ts: typeof tsTypes,\n node: tsTypes.PropertyAccessExpression\n): string | undefined {\n return thisMemberPath(ts, node, 'state');\n}\n\n/** this.props.a.b -> \"a.b\";非该形态返回 undefined。 */\nfunction thisPropsPath(\n ts: typeof tsTypes,\n node: tsTypes.PropertyAccessExpression\n): string | undefined {\n return thisMemberPath(ts, node, 'props');\n}\n\nfunction thisMemberPath(\n ts: typeof tsTypes,\n node: tsTypes.PropertyAccessExpression,\n member: string\n): string | undefined {\n let current: tsTypes.Expression = node;\n const parts: string[] = [];\n while (ts.isPropertyAccessExpression(current)) {\n parts.unshift(current.name.text);\n current = current.expression;\n if (\n ts.isPropertyAccessExpression(current) &&\n isThisExpression(ts, current.expression)\n ) {\n if (current.name.text === member) {\n return parts.join('.');\n }\n return undefined;\n }\n if (ts.isElementAccessExpression(current)) {\n if (\n !ts.isStringLiteral(current.argumentExpression) ||\n !thisMemberBase(ts, current.expression)\n ) {\n return undefined;\n }\n parts.unshift(current.argumentExpression.text);\n current = current.expression;\n if (\n ts.isPropertyAccessExpression(current) &&\n current.name.text === member\n ) {\n return parts.join('.');\n }\n return undefined;\n }\n }\n return undefined;\n}\n\nfunction thisMemberBase(ts: typeof tsTypes, node: tsTypes.Expression): boolean {\n return (\n ts.isPropertyAccessExpression(node) && isThisExpression(ts, node.expression)\n );\n}\n\nfunction isPathLike(value: string): boolean {\n return /^[A-Za-z_$][\\w$]*(\\.[A-Za-z_$][\\w$]*)*$/.test(value);\n}\n\nfunction literalToBinding(value: FoldedValue): string {\n if (typeof value === 'string') {\n return singleQuoted(value);\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n if (value === null) {\n return 'null';\n }\n if (Array.isArray(value)) {\n return `[${value.map(literalToBinding).join(', ')}]`;\n }\n const entries = Object.entries(value).map(\n ([key, item]) => `${key}: ${literalToBinding(item)}`\n );\n return `{${entries.join(', ')}}`;\n}\n\nfunction singleQuoted(value: string): string {\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`;\n}\n",
12
+ "import type * as tsTypes from 'typescript';\nimport type { ComponentIndex, ClassReference } from '../components/types';\nimport type { MpDialect } from './dialect';\n\nexport type UnitKind = 'page' | 'component';\n\n/** 一个 Component 子类的定位信息:文件 + 类声明。 */\nexport interface ClassSource {\n reference?: ClassReference;\n logical?: ClassReference;\n filePath: string;\n source: tsTypes.SourceFile;\n declaration: tsTypes.ClassLikeDeclaration;\n className: string;\n}\n\n/** 编译生成的函数条目(页面/组件方法或生命周期钩子)。 */\nexport interface FunctionEntry {\n key: string;\n fn: string;\n}\n\n/** 组件属性定义:propName -> WeChat 属性类型(String/Number/...)。 */\nexport type PropertyTypes = Record<string, string>;\n\n/** 编译产物单元:一个页面或一个自定义组件。 */\nexport interface CompiledUnit {\n kind: UnitKind;\n /** 页面为路由叶名(如 index),组件为 kebab-case 标签名。 */\n name: string;\n /** WXML 模板源码。 */\n template: string;\n /** 本单元作用域内的 WXSS(class 选择器)。 */\n style: string;\n /** 全局样式(body 选择器,页面单元会合并进 app.wxss)。 */\n globalStyle: string;\n /** data 初始值 JS 源码(对象字面量)。 */\n data: string;\n /** 自定义组件 properties(页面为空对象)。 */\n properties: PropertyTypes;\n /** 页面/组件 methods 条目(不含生命周期钩子)。 */\n methods: FunctionEntry[];\n /** 页面级生命周期(onLoad/onReady/onUnload)或组件 lifetimes。 */\n lifecycle: FunctionEntry[];\n /** 组件通过 triggerEvent 暴露的自定义事件名。 */\n customEvents: string[];\n /** 模板中引用到的 props 名(finalize 时并入 properties)。 */\n propsReferenced: Set<string>;\n /** usingComponents:tag -> 小程序绝对路径。 */\n usingComponents: Record<string, string>;\n /** 内联的相对模块 JS(按依赖顺序,产物顶部拼接)。 */\n inlineModules: string[];\n}\n\n/** 编译过程中的上下文:跨模块共享的文件缓存与产物缓存。 */\nexport interface CompileContext {\n /** Per-build checker/source fallback for installed packages publishing types + source. */\n sourcePrograms?: Map<string, tsTypes.Program>;\n packageSources?: Map<string, ClassSource>;\n packageComponentSources?: Set<tsTypes.SourceFile>;\n index?: ComponentIndex;\n ts: typeof tsTypes;\n root: string;\n /** 已解析的源文件缓存(绝对路径 -> SourceFile)。 */\n files: Map<string, tsTypes.SourceFile>;\n /** 已编译完成的组件(tag -> unit)。 */\n components: Map<string, CompiledUnit>;\n /** 正在编译的组件 tag,用于检测循环引用。 */\n compiling: Set<string>;\n /** 组件调用点收集:tag -> 各调用点传的属性(name -> 类型)。 */\n callSites: Map<string, Array<Record<string, string>>>;\n /** 样式数字长度单位:'px'(默认)或 'rpx'(数值按 1px=2rpx 换算)。 */\n lengthUnit: 'px' | 'rpx';\n /** 跨端差异层:决定模板指令前缀、事件绑定、文件后缀、工程配置等平台差异。 */\n dialect: MpDialect;\n warnings: string[];\n}\n\nexport function warn(context: CompileContext, message: string): void {\n context.warnings.push(message);\n}\n",
13
+ "import type * as tsTypes from 'typescript';\nimport { toBinding, BindingScope } from './binding';\nimport {\n foldExpression,\n FoldedValue,\n isThisExpression,\n unwrapParentheses,\n} from './fold';\nimport { mpError } from './errors';\nimport { ClassSource, CompileContext, warn } from './types';\nimport { moduleConstants, ownedMethod, stableTag } from './inheritance';\nimport { resolveClassReference, isComponentSubclass } from './analyze';\n\n/** 一个组件调用点通过 emitters 绑定的自定义事件。 */\nexport interface EmitterUsage {\n event: string;\n method: string;\n passArgs: boolean;\n /** 页面/组件 JS 中的包装方法名(按出现顺序唯一,避免同名事件冲突)。 */\n key: string;\n}\n\n/** 模板编译期间收集的产物信息。 */\nexport interface TemplateBuilder {\n /** 模板绑定的事件处理方法名。 */\n handlers: Set<string>;\n /** 用到的自定义组件(tag -> 类来源)。 */\n usedComponents: Map<string, ClassSource>;\n /** 本模板中引用到的 props 名(组件需要声明 properties)。 */\n propsReferenced: Set<string>;\n /** 本模板的组件通过 triggerEvent 触发的事件名。 */\n customEvents: Set<string>;\n /** 父级需要生成的 emitters 包装方法。 */\n emitters: EmitterUsage[];\n}\n\ninterface TemplateEnv {\n builder: TemplateBuilder;\n scope: BindingScope;\n indent: number;\n extraAttrs: string[];\n /** 本地名 -> transone 原始导出名(处理 import 别名)。 */\n origins: Map<string, string>;\n /** 存在 hover 样式的选择器集合('.card'),用于生成 hover-class。 */\n hoverSelectors: Set<string>;\n}\n\nexport interface CompiledTemplate {\n template: string;\n builder: TemplateBuilder;\n}\n\n/** TSone 元素快捷方式(含 h/Tag),未从 transone 导入的同名调用也按工厂识别。 */\nconst ELEMENT_FACTORIES = new Set([\n 'h',\n 'Tag',\n 'Div',\n 'Span',\n 'P',\n 'Button',\n 'Input',\n 'Section',\n 'Main',\n 'Header',\n 'Footer',\n 'Nav',\n 'Article',\n 'Aside',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'Strong',\n 'Em',\n 'Small',\n 'Pre',\n 'Code',\n 'Blockquote',\n 'Ul',\n 'Ol',\n 'Li',\n 'A',\n 'Img',\n 'Form',\n 'Label',\n 'Textarea',\n 'Select',\n 'Option',\n 'Table',\n 'Thead',\n 'Tbody',\n 'Tr',\n 'Th',\n 'Td',\n]);\n\nconst SPECIAL_CALLS = new Set(['createComponent', 'each', 'slot']);\n\n/** HTML 标签 -> WXML 标签映射(WXML 只提供有限的基础组件)。 */\nconst TAG_MAP: Record<string, string> = {\n div: 'view',\n section: 'view',\n main: 'view',\n header: 'view',\n footer: 'view',\n article: 'view',\n aside: 'view',\n nav: 'view',\n ul: 'view',\n ol: 'view',\n li: 'view',\n blockquote: 'view',\n pre: 'view',\n code: 'view',\n table: 'view',\n thead: 'view',\n tbody: 'view',\n tr: 'view',\n th: 'view',\n td: 'view',\n p: 'view',\n form: 'form',\n label: 'label',\n h1: 'view',\n h2: 'view',\n h3: 'view',\n h4: 'view',\n h5: 'view',\n h6: 'view',\n span: 'text',\n strong: 'text',\n em: 'text',\n small: 'text',\n button: 'button',\n input: 'input',\n textarea: 'textarea',\n img: 'image',\n a: 'navigator',\n // —— 小程序专有组件(标签名即 WXML 标签)——\n view: 'view',\n text: 'text',\n image: 'image',\n navigator: 'navigator',\n 'scroll-view': 'scroll-view',\n swiper: 'swiper',\n 'swiper-item': 'swiper-item',\n picker: 'picker',\n 'picker-view': 'picker-view',\n 'picker-view-column': 'picker-view-column',\n switch: 'switch',\n checkbox: 'checkbox',\n 'checkbox-group': 'checkbox-group',\n radio: 'radio',\n 'radio-group': 'radio-group',\n slider: 'slider',\n progress: 'progress',\n icon: 'icon',\n 'rich-text': 'rich-text',\n video: 'video',\n camera: 'camera',\n 'live-player': 'live-player',\n 'live-pusher': 'live-pusher',\n map: 'map',\n canvas: 'canvas',\n 'cover-view': 'cover-view',\n 'cover-image': 'cover-image',\n 'movable-view': 'movable-view',\n 'movable-area': 'movable-area',\n 'web-view': 'web-view',\n ad: 'ad',\n 'official-account': 'official-account',\n 'open-data': 'open-data',\n // camelCase 别名(宽松接受)\n scrollView: 'scroll-view',\n swiperItem: 'swiper-item',\n pickerView: 'picker-view',\n pickerViewColumn: 'picker-view-column',\n checkboxGroup: 'checkbox-group',\n radioGroup: 'radio-group',\n richText: 'rich-text',\n coverView: 'cover-view',\n coverImage: 'cover-image',\n movableView: 'movable-view',\n movableArea: 'movable-area',\n webView: 'web-view',\n livePlayer: 'live-player',\n officialAccount: 'official-account',\n openData: 'open-data',\n};\n\n/** TSone 事件名 -> WXML 事件名(click 在 WXML 中是 tap)。 */\nconst EVENT_MAP: Record<string, string> = {\n click: 'tap',\n tap: 'tap',\n longpress: 'longpress',\n longtap: 'longtap',\n input: 'input',\n change: 'change',\n cancel: 'cancel',\n submit: 'submit',\n focus: 'focus',\n blur: 'blur',\n confirm: 'confirm',\n load: 'load',\n error: 'error',\n scroll: 'scroll',\n scrolltoupper: 'scrolltoupper',\n scrolltolower: 'scrolltolower',\n scrollToUpper: 'scrolltoupper',\n scrollToLower: 'scrolltolower',\n refresherrefresh: 'refresherrefresh',\n refresherpulldown: 'refresherpulldown',\n refresherrestore: 'refresherrestore',\n refresherabort: 'refresherabort',\n touchstart: 'touchstart',\n touchmove: 'touchmove',\n touchend: 'touchend',\n touchcancel: 'touchcancel',\n touchforcechange: 'touchforcechange',\n transitionend: 'transitionend',\n animationfinish: 'animationfinish',\n animationfail: 'animationfail',\n getphonenumber: 'getphonenumber',\n getuserinfo: 'getuserinfo',\n getcontact: 'getcontact',\n openshare: 'openshare',\n launchapp: 'launchapp',\n message: 'message',\n};\n\nconst TAG_KEYS = new Set([\n 'props',\n 'children',\n 'listeners',\n 'key',\n 'directions',\n]);\n\n/** 显式传入的 undefined 字面量视为参数缺省(与 TS 运行时语义一致)。 */\nfunction notUndefined(\n ts: typeof tsTypes,\n expression: tsTypes.Expression | undefined\n): boolean {\n return (\n expression !== undefined &&\n !(ts.isIdentifier(expression) && expression.text === 'undefined')\n );\n}\n\nfunction isEventProp(key: string): boolean {\n return /^on[A-Z]/.test(key) || /^on[a-z]/.test(key);\n}\n\nfunction eventNameFromProp(key: string): string {\n return key.slice(2).toLowerCase();\n}\n\nexport function compileTemplate(\n context: CompileContext,\n classSource: ClassSource,\n _kind: 'page' | 'component',\n hoverSelectors: Set<string> = new Set()\n): CompiledTemplate {\n const { ts } = context;\n const owned = ownedMethod(context, classSource, 'render');\n const renderMethod = owned?.declaration;\n if (owned) classSource = owned.owner;\n if (!renderMethod) {\n throw mpError(\n classSource.filePath,\n `组件 ${classSource.className} 缺少 render() 方法`\n );\n }\n const body = renderMethod.body;\n if (!body) {\n throw mpError(classSource.filePath, 'render() 缺少方法体');\n }\n\n const locals = new Map<string, tsTypes.Expression>();\n let returnStatement: tsTypes.ReturnStatement | undefined;\n for (const statement of body.statements) {\n if (ts.isVariableStatement(statement)) {\n const isConst = statement.declarationList.flags & ts.NodeFlags.Const;\n if (!isConst) {\n throw mpError(\n classSource.filePath,\n 'render() 内只支持 const 局部变量(小程序模板是静态编译的)'\n );\n }\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.initializer) {\n locals.set(declaration.name.text, declaration.initializer);\n }\n }\n continue;\n }\n if (ts.isReturnStatement(statement)) {\n returnStatement = statement;\n continue;\n }\n throw mpError(\n classSource.filePath,\n `render() 内不支持的语句(只支持 const 声明与 return): ${statement.getText().slice(0, 60)}`\n );\n }\n if (!returnStatement?.expression) {\n throw mpError(classSource.filePath, 'render() 必须以 return 表达式结束');\n }\n\n const consts = collectModuleConsts(context, classSource);\n const builder: TemplateBuilder = {\n handlers: new Set(),\n usedComponents: new Map(),\n propsReferenced: new Set(),\n customEvents: new Set(),\n emitters: [],\n };\n const env: TemplateEnv = {\n builder,\n scope: { params: new Set(), locals, consts },\n indent: 0,\n extraAttrs: [],\n origins: collectFactoryOrigins(ts, classSource.source),\n hoverSelectors,\n };\n\n const lines = buildNodeLines(\n context,\n classSource,\n returnStatement.expression,\n env\n );\n const header = `<!-- 由 transone build --target ${context.dialect.id} 生成,请勿手动编辑 -->`;\n return {\n template: [header, ...lines].join('\\n') + '\\n',\n builder,\n };\n}\n\nfunction buildNodeLines(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.Node,\n env: TemplateEnv,\n depth = 0\n): string[] {\n if (depth > 64) {\n throw mpError(classSource.filePath, '模板嵌套过深(可能是标识符循环引用)');\n }\n const { ts } = context;\n node = unwrapParentheses(ts, node);\n // 模板中常见 `{ ... } as VNode` 类型断言:类型信息在编译期即被丢弃\n node = unwrapTypeAssertions(ts, node);\n\n if (node.kind === ts.SyntaxKind.NullKeyword) {\n return [];\n }\n\n if (ts.isCallExpression(node)) {\n const localName = callName(ts, node.expression);\n const name = (localName && env.origins.get(localName)) ?? localName;\n if (name === 'createComponent') {\n return compileComponentCall(context, classSource, node, env, depth);\n }\n if (name === 'each') {\n return compileEach(context, classSource, node, env, depth);\n }\n if (name === 'slot') {\n return compileSlot(context, classSource, node, env);\n }\n if (name && ELEMENT_FACTORIES.has(name)) {\n return compileElementCall(context, classSource, node, env, depth);\n }\n throw mpError(\n classSource.filePath,\n `不支持的渲染调用 \"${name ?? '?'}\"(仅支持 h/Tag/元素快捷方式/createComponent/each/slot)`\n );\n }\n\n if (ts.isIdentifier(node)) {\n if (env.scope.params.has(node.text)) {\n return [indent(env.indent) + `{{${node.text}}}`];\n }\n const replacement = resolveIdentifierExpression(\n context,\n classSource,\n node,\n env\n );\n if (replacement) {\n return buildNodeLines(context, classSource, replacement, env, depth + 1);\n }\n throw mpError(classSource.filePath, `无法解析模板标识符 \"${node.text}\"`);\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const componentProp = objectProperty(ts, node, 'component');\n if (componentProp) {\n return compileComponentObject(context, classSource, node, env, depth);\n }\n throw mpError(\n classSource.filePath,\n `render() 中不支持的对象字面量: ${node.getText().slice(0, 60)}`\n );\n }\n\n if (ts.isConditionalExpression(node)) {\n return compileConditional(context, classSource, node, env, depth);\n }\n\n if (ts.isBinaryExpression(node)) {\n if (node.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken) {\n return compileLogicalAnd(context, classSource, node, env, depth);\n }\n throw mpError(\n classSource.filePath,\n `render() 中不支持的表达式(条件渲染请用三元或 &&): ${node.getText().slice(0, 60)}`\n );\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n const lines: string[] = [];\n for (const element of node.elements) {\n if (ts.isSpreadElement(element)) {\n throw mpError(classSource.filePath, 'children 中不支持展开运算符');\n }\n lines.push(...buildNodeLines(context, classSource, element, env, depth));\n }\n return lines;\n }\n\n if (isTextNode(ts, node)) {\n return [indent(env.indent) + textContent(context, classSource, node, env)];\n }\n\n if (\n ts.isPropertyAccessExpression(node) ||\n ts.isElementAccessExpression(node)\n ) {\n return [\n indent(env.indent) +\n `{{${toBinding(bindingContext(context, classSource, env), node)}}}`,\n ];\n }\n\n throw mpError(\n classSource.filePath,\n `render() 中不支持的节点: ${node.getText().slice(0, 60)}`\n );\n}\n\nfunction compileElementCall(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.CallExpression,\n env: TemplateEnv,\n depth: number\n): string[] {\n const { ts } = context;\n const localName = callName(ts, node.expression)!;\n const name = env.origins.get(localName) ?? localName;\n const args = node.arguments;\n\n let tagExpr: tsTypes.Expression;\n let propsExpr: tsTypes.Expression | undefined;\n let childrenExpr: tsTypes.Expression | undefined;\n let listenersExpr: tsTypes.Expression | undefined;\n let directionsExpr: tsTypes.Expression | undefined;\n\n if (name === 'h' || name === 'Tag') {\n if (args.length === 0) {\n throw mpError(classSource.filePath, `${name}() 缺少标签参数`);\n }\n tagExpr = args[0];\n if (\n name === 'Tag' &&\n args.length >= 2 &&\n ts.isObjectLiteralExpression(args[1])\n ) {\n const options = args[1];\n propsExpr = objectProperty(ts, options, 'props');\n childrenExpr = objectProperty(ts, options, 'children');\n listenersExpr = objectProperty(ts, options, 'listeners');\n directionsExpr = objectProperty(ts, options, 'directions');\n } else {\n propsExpr = args[1];\n childrenExpr = args[2];\n listenersExpr = notUndefined(ts, args[3]) ? args[3] : undefined;\n directionsExpr = notUndefined(ts, args[5]) ? args[5] : undefined;\n }\n } else {\n // 元素快捷方式:Div({ props, children, ... })\n tagExpr = ts.factory.createStringLiteral(kebabCase(name));\n const options = args[0];\n if (options && ts.isObjectLiteralExpression(options)) {\n propsExpr = objectProperty(ts, options, 'props');\n childrenExpr = objectProperty(ts, options, 'children');\n listenersExpr = objectProperty(ts, options, 'listeners');\n directionsExpr = objectProperty(ts, options, 'directions');\n const directProps = options.properties.filter(\n (property) =>\n ts.isPropertyAssignment(property) &&\n ts.isIdentifier(property.name) &&\n !TAG_KEYS.has(property.name.text)\n );\n if (directProps.length > 0) {\n propsExpr = ts.factory.createObjectLiteralExpression([\n ...(propsExpr && ts.isObjectLiteralExpression(propsExpr)\n ? propsExpr.properties\n : []),\n ...directProps,\n ]);\n }\n }\n }\n\n if (!ts.isStringLiteral(tagExpr)) {\n throw mpError(classSource.filePath, '元素标签必须是字符串字面量');\n }\n return compileElement(\n context,\n classSource,\n tagExpr.text,\n propsExpr,\n childrenExpr,\n listenersExpr,\n directionsExpr,\n env,\n depth\n );\n}\n\nfunction compileElement(\n context: CompileContext,\n classSource: ClassSource,\n tagName: string,\n propsExpr: tsTypes.Expression | undefined,\n childrenExpr: tsTypes.Expression | undefined,\n listenersExpr: tsTypes.Expression | undefined,\n directionsExpr: tsTypes.Expression | undefined,\n env: TemplateEnv,\n depth: number\n): string[] {\n const { ts } = context;\n const wxmlTag = TAG_MAP[tagName];\n if (!wxmlTag) {\n throw mpError(\n classSource.filePath,\n `不支持的 HTML 标签 \"${tagName}\"(WXML 仅支持基础组件)`\n );\n }\n\n const attrs: string[] = [...env.extraAttrs];\n\n if (propsExpr !== undefined) {\n if (!ts.isObjectLiteralExpression(propsExpr)) {\n throw mpError(classSource.filePath, `元素 props 必须是对象字面量`);\n }\n for (const property of propsExpr.properties) {\n if (\n !ts.isPropertyAssignment(property) ||\n !ts.isIdentifier(property.name)\n ) {\n throw mpError(classSource.filePath, `元素 props 只支持静态属性名`);\n }\n const key = property.name.text;\n const value = property.initializer;\n if (key === 'key') {\n // key 仅用于 DOM diff,小程序无对应属性\n continue;\n }\n if (key === 'class' || key === 'className') {\n attrs.push(compileClassAttr(context, classSource, value, env));\n continue;\n }\n if (key === 'style') {\n attrs.push(compileStyleAttr(context, classSource, value, env));\n continue;\n }\n if (key === 'slot') {\n attrs.push(\n `slot=\"${compileLiteralString(context, classSource, value, 'slot 名称')}\"`\n );\n continue;\n }\n if (isEventProp(key)) {\n const event = eventNameFromProp(key);\n attrs.push(compileListener(context, classSource, event, value, env));\n continue;\n }\n attrs.push(compileGenericAttr(context, classSource, key, value, env));\n }\n }\n\n if (listenersExpr !== undefined) {\n if (!ts.isObjectLiteralExpression(listenersExpr)) {\n throw mpError(classSource.filePath, 'listeners 必须是对象字面量');\n }\n for (const property of listenersExpr.properties) {\n if (\n !ts.isPropertyAssignment(property) ||\n !ts.isIdentifier(property.name)\n ) {\n throw mpError(classSource.filePath, 'listeners 只支持静态事件名');\n }\n const event = property.name.text.split('.')[0];\n const hasModifiers = property.name.text !== event;\n if (hasModifiers) {\n warn(\n context,\n `${classSource.filePath}: 事件修饰符 \"${property.name.text}\" 在小程序中不生效`\n );\n }\n attrs.push(\n compileListener(context, classSource, event, property.initializer, env)\n );\n }\n }\n\n if (directionsExpr !== undefined) {\n if (!ts.isObjectLiteralExpression(directionsExpr)) {\n throw mpError(classSource.filePath, 'directions 必须是对象字面量');\n }\n const ifExpr = objectProperty(ts, directionsExpr, 'if');\n if (ifExpr) {\n const folded = foldExpression(ts, ifExpr, env.scope.consts);\n if (folded === false) {\n return [];\n }\n if (folded !== true) {\n attrs.push(\n `${context.dialect.directivePrefix}if=\"{{${toBinding(bindingContext(context, classSource, env), ifExpr)}}}\"`\n );\n }\n }\n const showExpr = objectProperty(ts, directionsExpr, 'show');\n if (showExpr) {\n const folded = foldExpression(ts, showExpr, env.scope.consts);\n if (folded === false) {\n attrs.push('hidden');\n } else if (folded !== true) {\n const binding = toBinding(\n bindingContext(context, classSource, env),\n showExpr\n );\n attrs.push(`hidden=\"{{!(${binding})}}\"`);\n }\n }\n if (objectProperty(ts, directionsExpr, 'model')) {\n throw mpError(\n classSource.filePath,\n 'directions.model 双向绑定暂不支持编译到小程序,请改用 value + bindinput'\n );\n }\n }\n\n const openTag =\n attrs.length > 0 ? `<${wxmlTag} ${attrs.join(' ')}>` : `<${wxmlTag}>`;\n const lines = [indent(env.indent) + openTag];\n const childLines = buildNodeLines(\n context,\n classSource,\n childrenExpr ?? ts.factory.createArrayLiteralExpression([]),\n {\n ...env,\n indent: env.indent + 1,\n },\n depth + 1\n );\n lines.push(...childLines);\n lines.push(indent(env.indent) + `</${wxmlTag}>`);\n return lines;\n}\n\nfunction compileConditional(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.ConditionalExpression,\n env: TemplateEnv,\n depth: number\n): string[] {\n const condition = toBinding(\n bindingContext(context, classSource, env),\n node.condition\n );\n const whenTrue = buildNodeLines(\n context,\n classSource,\n node.whenTrue,\n env,\n depth + 1\n );\n const whenFalse = buildNodeLines(\n context,\n classSource,\n node.whenFalse,\n env,\n depth + 1\n );\n const lines = [\n indent(env.indent) +\n `<block ${context.dialect.directivePrefix}if=\"{{${condition}}}\">`,\n ];\n lines.push(...whenTrue.map((line) => indent(env.indent + 1) + line));\n lines.push(indent(env.indent) + '</block>');\n if (whenFalse.length > 0) {\n lines.push(\n indent(env.indent) + `<block ${context.dialect.directivePrefix}else>`\n );\n lines.push(...whenFalse.map((line) => indent(env.indent + 1) + line));\n lines.push(indent(env.indent) + '</block>');\n }\n return lines;\n}\n\nfunction compileLogicalAnd(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.BinaryExpression,\n env: TemplateEnv,\n depth: number\n): string[] {\n const condition = toBinding(\n bindingContext(context, classSource, env),\n node.left\n );\n const inner = buildNodeLines(\n context,\n classSource,\n node.right,\n env,\n depth + 1\n );\n return [\n indent(env.indent) +\n `<block ${context.dialect.directivePrefix}if=\"{{${condition}}}\">`,\n ...inner.map((line) => indent(env.indent + 1) + line),\n indent(env.indent) + '</block>',\n ];\n}\n\nfunction compileEach(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.CallExpression,\n env: TemplateEnv,\n depth: number\n): string[] {\n const { ts } = context;\n const [itemsExpr, renderExpr, keyExpr] = node.arguments;\n if (!itemsExpr || !renderExpr) {\n throw mpError(classSource.filePath, 'each(items, render, key) 缺少参数');\n }\n if (!ts.isArrowFunction(renderExpr)) {\n throw mpError(classSource.filePath, 'each 的 render 参数必须是箭头函数');\n }\n\n const paramNames: string[] = [];\n for (const parameter of renderExpr.parameters) {\n if (!ts.isIdentifier(parameter.name)) {\n throw mpError(\n classSource.filePath,\n 'each 的参数必须是 (item, index) 标识符'\n );\n }\n paramNames.push(parameter.name.text);\n }\n if (paramNames.length > 2) {\n throw mpError(classSource.filePath, 'each 最多接受 (item, index) 两个参数');\n }\n\n const itemsBinding = toBinding(\n bindingContext(context, classSource, env),\n itemsExpr\n );\n const itemName = paramNames[0] ?? 'item';\n const indexName = paramNames[1] ?? 'index';\n const childScope: BindingScope = {\n ...env.scope,\n params: new Set([...env.scope.params, itemName, indexName]),\n };\n\n let keyAttr = '';\n if (keyExpr) {\n const keyBinding = eachKeyBinding(\n context,\n classSource,\n keyExpr,\n itemName,\n indexName\n );\n if (keyBinding) {\n keyAttr = ` ${context.dialect.directivePrefix}key=\"${keyBinding}\"`;\n }\n }\n const inner = buildNodeLines(\n context,\n classSource,\n renderExpr.body,\n {\n ...env,\n scope: childScope,\n indent: env.indent + 1,\n },\n depth + 1\n );\n\n return [\n indent(env.indent) +\n `<block ${context.dialect.directivePrefix}for=\"{{${itemsBinding}}}\" ${context.dialect.directivePrefix}for-item=\"${itemName}\" ${context.dialect.directivePrefix}for-index=\"${indexName}\"${keyAttr}>`,\n ...inner,\n indent(env.indent) + '</block>',\n ];\n}\n\nfunction eachKeyBinding(\n context: CompileContext,\n classSource: ClassSource,\n keyExpr: tsTypes.Node,\n itemName: string,\n indexName: string\n): string | undefined {\n const { ts } = context;\n keyExpr = unwrapParentheses(ts, keyExpr);\n // 框架签名 each(items, render, key),key 是 (item) => item.xxx 箭头函数\n if (ts.isArrowFunction(keyExpr)) {\n const body = arrowBodyExpression(ts, keyExpr);\n if (body === undefined) {\n throw mpError(\n classSource.filePath,\n 'each 的 key 必须是 (item) => item.xxx 或 (item, index) => index'\n );\n }\n keyExpr = body;\n }\n if (ts.isIdentifier(keyExpr)) {\n if (keyExpr.text === indexName) {\n return undefined;\n }\n if (keyExpr.text === itemName) {\n throw mpError(\n classSource.filePath,\n '列表 key 不能直接使用 item,请取 item 的成员'\n );\n }\n }\n if (\n ts.isPropertyAccessExpression(keyExpr) &&\n ts.isIdentifier(keyExpr.expression)\n ) {\n const base = keyExpr.expression.text;\n if (base === itemName) {\n return keyExpr.name.text;\n }\n }\n const nested = eachKeyPath(ts, keyExpr, itemName);\n if (nested) {\n return nested;\n }\n throw mpError(\n classSource.filePath,\n 'each 的 key 必须是 (item) => item.xxx 或 (item, index) => index'\n );\n}\n\nfunction arrowBodyExpression(\n ts: typeof tsTypes,\n arrow: tsTypes.ArrowFunction\n): tsTypes.Expression | undefined {\n const body = arrow.body;\n if (ts.isBlock(body)) {\n const statements = body.statements.filter(\n (statement) => !ts.isEmptyStatement(statement)\n );\n if (\n statements.length === 1 &&\n ts.isReturnStatement(statements[0]) &&\n statements[0].expression\n ) {\n return statements[0].expression;\n }\n return undefined;\n }\n return body;\n}\n\nfunction eachKeyPath(\n ts: typeof tsTypes,\n node: tsTypes.Node,\n itemName: string\n): string | undefined {\n node = unwrapParentheses(ts, node);\n if (!ts.isPropertyAccessExpression(node)) {\n return undefined;\n }\n let current: tsTypes.Expression = node;\n const parts: string[] = [];\n while (ts.isPropertyAccessExpression(current)) {\n parts.unshift(current.name.text);\n current = current.expression;\n }\n if (ts.isIdentifier(current) && current.text === itemName) {\n return parts.join('.');\n }\n return undefined;\n}\n\nfunction compileComponentCall(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.CallExpression,\n env: TemplateEnv,\n depth: number\n): string[] {\n const { ts } = context;\n const first = unwrapParentheses(ts, node.arguments[0]);\n // 对象形态:createComponent({ component, props, children, emitters, directions })\n if (\n ts.isObjectLiteralExpression(first) &&\n objectProperty(ts, first, 'component')\n ) {\n return compileComponentObject(context, classSource, first, env, depth);\n }\n const [classExpr, propsExpr, childrenExpr] = node.arguments;\n if (!classExpr) {\n throw mpError(classSource.filePath, 'createComponent 缺少组件类参数');\n }\n const directionsExpr = node.arguments[4];\n return compileComponent(\n context,\n classSource,\n classExpr,\n propsExpr,\n childrenExpr,\n undefined,\n directionsExpr,\n env,\n depth\n );\n}\n\nfunction compileComponentObject(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.ObjectLiteralExpression,\n env: TemplateEnv,\n depth: number\n): string[] {\n return compileComponent(\n context,\n classSource,\n objectProperty(context.ts, node, 'component')!,\n objectProperty(context.ts, node, 'props'),\n objectProperty(context.ts, node, 'children'),\n objectProperty(context.ts, node, 'emitters'),\n objectProperty(context.ts, node, 'directions'),\n env,\n depth\n );\n}\n\nfunction compileComponent(\n context: CompileContext,\n classSource: ClassSource,\n classExpr: tsTypes.Expression,\n propsExpr: tsTypes.Expression | undefined,\n childrenExpr: tsTypes.Expression | undefined,\n emittersExpr: tsTypes.Expression | undefined,\n directionsExpr: tsTypes.Expression | undefined,\n env: TemplateEnv,\n depth: number\n): string[] {\n const { ts } = context;\n const target = resolveClassReference(context, classSource, classExpr);\n if (!isComponentSubclass(context, target)) {\n throw mpError(\n classSource.filePath,\n `createComponent 只接受 Component 子类: ${target.className}`\n );\n }\n const tag = stableTag(context, target);\n env.builder.usedComponents.set(tag, target);\n\n const attrs: string[] = [...env.extraAttrs];\n const callSiteProps: Record<string, string> = {};\n\n if (propsExpr !== undefined) {\n if (!ts.isObjectLiteralExpression(propsExpr)) {\n throw mpError(\n classSource.filePath,\n 'createComponent 的 props 必须是对象字面量'\n );\n }\n for (const property of propsExpr.properties) {\n if (\n !ts.isPropertyAssignment(property) ||\n !ts.isIdentifier(property.name)\n ) {\n throw mpError(classSource.filePath, '组件 props 只支持静态属性名');\n }\n const key = property.name.text;\n const value = property.initializer;\n if (ts.isArrowFunction(value) || ts.isFunctionExpression(value)) {\n throw mpError(\n classSource.filePath,\n `组件 props 传函数(${key})暂不支持编译到小程序,请改用 emitters + this.emit 模式`\n );\n }\n callSiteProps[key] = inferPropType(context, classSource, value, env);\n const folded = foldExpression(ts, value, env.scope.consts);\n if (folded !== undefined && folded !== null) {\n attrs.push(`${key}=\"${escapeAttr(literalToString(folded))}\"`);\n } else {\n const binding = toBinding(\n bindingContext(context, classSource, env),\n value\n );\n attrs.push(`${key}=\"{{${binding}}}\"`);\n }\n }\n const existing = context.callSites.get(tag) ?? [];\n existing.push(callSiteProps);\n context.callSites.set(tag, existing);\n }\n\n if (emittersExpr !== undefined) {\n if (!ts.isObjectLiteralExpression(emittersExpr)) {\n throw mpError(classSource.filePath, 'emitters 必须是对象字面量');\n }\n for (const property of emittersExpr.properties) {\n if (!ts.isPropertyAssignment(property)) {\n throw mpError(classSource.filePath, 'emitters 只支持静态事件名');\n }\n const eventName =\n ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)\n ? property.name.text\n : undefined;\n if (eventName === undefined) {\n throw mpError(classSource.filePath, 'emitters 只支持静态事件名');\n }\n const usage = compileEmitterHandler(\n context,\n classSource,\n property.initializer\n );\n if (!usage) {\n throw mpError(\n classSource.filePath,\n 'emitters 处理器只支持 () => this.method() 或 (value) => this.method(value)'\n );\n }\n usage.event = eventName;\n const key = `__transone_emitter_${eventName}_${env.builder.emitters.length}`;\n usage.key = key;\n env.builder.emitters.push(usage);\n attrs.push(`bind:${eventName}=\"${key}\"`);\n }\n }\n\n if (directionsExpr !== undefined) {\n if (!ts.isObjectLiteralExpression(directionsExpr)) {\n throw mpError(classSource.filePath, 'directions 必须是对象字面量');\n }\n const ifExpr = objectProperty(ts, directionsExpr, 'if');\n if (ifExpr) {\n const folded = foldExpression(ts, ifExpr, env.scope.consts);\n if (folded === false) {\n return [];\n }\n if (folded !== true) {\n attrs.push(\n `${context.dialect.directivePrefix}if=\"{{${toBinding(bindingContext(context, classSource, env), ifExpr)}}}\"`\n );\n }\n }\n }\n\n const openTag = attrs.length > 0 ? `<${tag} ${attrs.join(' ')}>` : `<${tag}>`;\n const lines = [indent(env.indent) + openTag];\n const childLines = buildNodeLines(\n context,\n classSource,\n childrenExpr ?? ts.factory.createArrayLiteralExpression([]),\n {\n ...env,\n indent: env.indent + 1,\n },\n depth + 1\n );\n lines.push(...childLines);\n lines.push(indent(env.indent) + `</${tag}>`);\n return lines;\n}\n\nfunction compileSlot(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.CallExpression,\n env: TemplateEnv\n): string[] {\n const nameExpr = node.arguments[0];\n if (!nameExpr) {\n return [indent(env.indent) + '<slot/>'];\n }\n const name = compileLiteralString(\n context,\n classSource,\n nameExpr,\n 'slot 名称'\n );\n // TransOne 统一以 slot('default') 表示默认插槽;小程序模板中默认插槽\n // 必须省略 name,否则调用侧未声明 slot=\"default\" 的普通子节点不会被投影。\n if (name === 'default') {\n return [indent(env.indent) + '<slot/>'];\n }\n return [indent(env.indent) + `<slot name=\"${name}\"/>`];\n}\n\nfunction compileListener(\n context: CompileContext,\n classSource: ClassSource,\n eventName: string,\n handlerExpr: tsTypes.Expression,\n env: TemplateEnv\n): string {\n const wxmlEvent = EVENT_MAP[eventName];\n if (!wxmlEvent) {\n throw mpError(\n classSource.filePath,\n `不支持的小程序事件 \"${eventName}\"(支持: ${Object.keys(EVENT_MAP).join('/')})`\n );\n }\n const method = compileHandlerMethod(context, classSource, handlerExpr);\n env.builder.handlers.add(method);\n return `${context.dialect.bindEvent(wxmlEvent)}=\"${method}\"`;\n}\n\nfunction compileHandlerMethod(\n context: CompileContext,\n classSource: ClassSource,\n handlerExpr: tsTypes.Expression\n): string {\n const { ts } = context;\n handlerExpr = unwrapParentheses(ts, handlerExpr);\n\n if (\n ts.isPropertyAccessExpression(handlerExpr) &&\n isThisExpression(ts, handlerExpr.expression)\n ) {\n return handlerExpr.name.text;\n }\n\n if (ts.isArrowFunction(handlerExpr)) {\n const call = singleMethodCall(ts, handlerExpr.body);\n if (call && call.args.length === 0) {\n return call.method;\n }\n // (e) => this.method(e):透传事件对象,方法里通过 e.currentTarget.dataset 取数;\n // 实参上的 TS 类型断言(e as TapEvent)不影响运行时语义,直接剥掉再匹配\n const arg =\n call && call.args.length === 1\n ? unwrapTypeAssertions(ts, call.args[0])\n : undefined;\n if (\n call &&\n call.args.length === 1 &&\n handlerExpr.parameters.length === 1 &&\n ts.isIdentifier(handlerExpr.parameters[0].name) &&\n arg !== undefined &&\n ts.isIdentifier(arg) &&\n handlerExpr.parameters[0].name.text === arg.text\n ) {\n return call.method;\n }\n }\n throw mpError(\n classSource.filePath,\n '事件处理器必须是 () => this.method()、this.method 或 (e) => this.method(e) 形式'\n );\n}\n\nfunction compileEmitterHandler(\n context: CompileContext,\n _classSource: ClassSource,\n handlerExpr: tsTypes.Expression\n): EmitterUsage | undefined {\n const { ts } = context;\n handlerExpr = unwrapParentheses(ts, handlerExpr);\n\n if (\n ts.isPropertyAccessExpression(handlerExpr) &&\n isThisExpression(ts, handlerExpr.expression)\n ) {\n return {\n event: 'pending',\n method: handlerExpr.name.text,\n passArgs: true,\n key: '',\n };\n }\n if (!ts.isArrowFunction(handlerExpr)) {\n return undefined;\n }\n const call = singleMethodCall(ts, handlerExpr.body);\n if (!call) {\n return undefined;\n }\n if (call.args.length === 0) {\n return { event: 'pending', method: call.method, passArgs: false, key: '' };\n }\n const arg =\n call.args.length === 1 ? unwrapTypeAssertions(ts, call.args[0]) : undefined;\n if (\n call.args.length === 1 &&\n handlerExpr.parameters.length === 1 &&\n ts.isIdentifier(handlerExpr.parameters[0].name) &&\n arg !== undefined &&\n ts.isIdentifier(arg) &&\n handlerExpr.parameters[0].name.text === arg.text\n ) {\n return { event: 'pending', method: call.method, passArgs: true, key: '' };\n }\n return undefined;\n}\n\nfunction singleMethodCall(\n ts: typeof tsTypes,\n body: tsTypes.ConciseBody\n): { method: string; args: tsTypes.NodeArray<tsTypes.Expression> } | undefined {\n let callExpr: tsTypes.CallExpression | undefined;\n if (ts.isCallExpression(body)) {\n callExpr = body;\n } else if (ts.isBlock(body)) {\n const statements = body.statements.filter(\n (statement) => !ts.isEmptyStatement(statement)\n );\n if (statements.length !== 1 || !ts.isExpressionStatement(statements[0])) {\n return undefined;\n }\n const expression = statements[0].expression;\n if (!ts.isCallExpression(expression)) {\n return undefined;\n }\n callExpr = expression;\n } else {\n return undefined;\n }\n const callee = callExpr.expression;\n if (\n !ts.isPropertyAccessExpression(callee) ||\n !isThisExpression(ts, callee.expression)\n ) {\n return undefined;\n }\n return { method: callee.name.text, args: callExpr.arguments };\n}\n\n/** 剥掉表达式上的 TS 类型断言(as T / <T> / 非空断言),用于参数透传匹配。 */\nfunction unwrapTypeAssertions(\n ts: typeof tsTypes,\n expression: tsTypes.Node\n): tsTypes.Node {\n let node = expression;\n for (;;) {\n if (ts.isAsExpression(node)) {\n node = node.expression;\n continue;\n }\n if (ts.isTypeAssertionExpression(node)) {\n node = node.expression;\n continue;\n }\n if (ts.isNonNullExpression(node)) {\n node = node.expression;\n continue;\n }\n return node;\n }\n}\n\nfunction compileClassAttr(\n context: CompileContext,\n classSource: ClassSource,\n value: tsTypes.Expression,\n env: TemplateEnv\n): string {\n const { ts } = context;\n const folded = foldExpression(ts, value, env.scope.consts);\n if (typeof folded === 'string') {\n // 静态 class 命中 hover 样式时挂 hover-class(WXSS 无 :hover 伪类)\n const hoverClass = hoverClassName(folded, env.hoverSelectors);\n return hoverClass\n ? `class=\"${escapeAttr(folded)}\" hover-class=\"${hoverClass}\"`\n : `class=\"${escapeAttr(folded)}\"`;\n }\n // 折叠结果为 null 表示显式空 class(如某个 const 值为 null);折叠失败\n // (依赖 each 参数/state 的动态表达式)则回退为模板绑定。\n if (folded === null) {\n return '';\n }\n const text = rawTemplateText(ts, value);\n if (text !== undefined) {\n const hoverClass = hoverClassName(text, env.hoverSelectors);\n return hoverClass\n ? `class=\"${escapeAttr(text)}\" hover-class=\"${hoverClass}\"`\n : `class=\"${escapeAttr(text)}\"`;\n }\n return `class=\"{{${toBinding(bindingContext(context, classSource, env), value)}}}\"`;\n}\n\n/** 选择器 '.card' 命中 hover 样式时,返回微信 hover-class 类名('card-hover')。 */\nfunction hoverClassName(\n className: string,\n hoverSelectors: Set<string>\n): string | undefined {\n for (const single of className.split(/\\s+/)) {\n if (single === '') {\n continue;\n }\n if (hoverSelectors.has(single) || hoverSelectors.has(`.${single}`)) {\n return `${single.replace(/^\\./, '')}-hover`;\n }\n }\n return undefined;\n}\n\nfunction compileStyleAttr(\n context: CompileContext,\n classSource: ClassSource,\n value: tsTypes.Expression,\n env: TemplateEnv\n): string {\n const { ts } = context;\n const options = unwrapParentheses(ts, value);\n if (!ts.isObjectLiteralExpression(options)) {\n throw mpError(classSource.filePath, 'style 属性必须是对象字面量');\n }\n const declarations: string[] = [];\n for (const property of options.properties) {\n if (!ts.isPropertyAssignment(property) || !ts.isIdentifier(property.name)) {\n throw mpError(classSource.filePath, 'style 属性只支持静态键');\n }\n const cssKey = property.name.text.replace(/([A-Z])/g, '-$1').toLowerCase();\n const folded = foldExpression(ts, property.initializer, env.scope.consts);\n if (typeof folded === 'string' || typeof folded === 'number') {\n declarations.push(`${cssKey}: ${String(folded)};`);\n } else {\n // 动态值:识别 `表达式 + '单位'`(如 item.width + '%')拆成标准插值\n // style=\"width: {{item.width}}%;\"(微信官方推荐,比表达式拼接更可靠)\n const unitSplit = splitUnitExpression(ts, property.initializer);\n if (unitSplit) {\n declarations.push(\n `${cssKey}: {{${toBinding(bindingContext(context, classSource, env), unitSplit.expr)}}}${unitSplit.unit};`\n );\n } else {\n declarations.push(\n `${cssKey}: {{${toBinding(bindingContext(context, classSource, env), property.initializer)}}};`\n );\n }\n }\n }\n return `style=\"${escapeAttr(declarations.join(' '))}\"`;\n}\n\n/**\n * 识别 `表达式 + '单位'` 形态(item.width + '%' / p.x + 'px'),返回表达式与单位;\n * 仅当右侧为纯单位字符串字面量时拆解,其他动态表达式原样走 {{expr}}。\n */\nfunction splitUnitExpression(\n ts: typeof tsTypes,\n expr: tsTypes.Expression\n): { expr: tsTypes.Expression; unit: string } | undefined {\n expr = unwrapParentheses(ts, expr);\n if (!ts.isBinaryExpression(expr)) {\n return undefined;\n }\n if (expr.operatorToken.kind !== ts.SyntaxKind.PlusToken) {\n return undefined;\n }\n const right = unwrapParentheses(ts, expr.right);\n if (!ts.isStringLiteral(right)) {\n return undefined;\n }\n const unit = right.text;\n if (!/^[a-z%]+$/i.test(unit)) {\n return undefined;\n }\n return { expr: expr.left, unit };\n}\n\nfunction compileGenericAttr(\n context: CompileContext,\n classSource: ClassSource,\n key: string,\n value: tsTypes.Expression,\n env: TemplateEnv\n): string {\n const { ts } = context;\n const attrName = wxmlAttrName(key);\n const folded = foldExpression(ts, value, env.scope.consts);\n if (folded !== undefined) {\n if (folded === false || folded === null) {\n return '';\n }\n if (folded === true) {\n return attrName;\n }\n return `${attrName}=\"${escapeAttr(literalToString(folded))}\"`;\n }\n const text = rawTemplateText(ts, value);\n if (text !== undefined) {\n return `${attrName}=\"${escapeAttr(text)}\"`;\n }\n return `${attrName}=\"{{${toBinding(bindingContext(context, classSource, env), value)}}}\"`;\n}\n\n/** 需要 kebab-case 输出的微信组件属性(如 scrollX -> scroll-x)。 */\nconst KEBAB_ATTRS: Record<string, string> = {\n scrollX: 'scroll-x',\n scrollY: 'scroll-y',\n scrollIntoView: 'scroll-into-view',\n scrollWithAnimation: 'scroll-with-animation',\n scrollAnchoring: 'scroll-anchoring',\n enableFlex: 'enable-flex',\n enableScroll: 'enable-scroll',\n enableZoom: 'enable-zoom',\n enablePassive: 'enable-passive',\n autoFocus: 'auto-focus',\n confirmType: 'confirm-type',\n confirmHold: 'confirm-hold',\n cursorSpacing: 'cursor-spacing',\n selectionStart: 'selection-start',\n selectionEnd: 'selection-end',\n showConfirmBar: 'show-confirm-bar',\n adjustPosition: 'adjust-position',\n holdKeyboard: 'hold-keyboard',\n disableDefaultPadding: 'disable-default-padding',\n disableAutoPush: 'disable-auto-push',\n disableBeforeInput: 'disable-before-input',\n showMarker: 'show-marker',\n enablePublish: 'enable-publish',\n markerCluster: 'marker-cluster',\n showLocation: 'show-location',\n showCompass: 'show-compass',\n enableSatellite: 'enable-satellite',\n enableTraffic: 'enable-traffic',\n enableBuilding: 'enable-building',\n enableRotate: 'enable-rotate',\n enableOverlooking: 'enable-overlooking',\n subKey: 'sub-key',\n enableLazy: 'enable-lazy',\n showMenuByLongpress: 'show-menu-by-longpress',\n openType: 'open-type',\n formType: 'form-type',\n unitId: 'unit-id',\n hoverClass: 'hover-class',\n hoverStartTime: 'hover-start-time',\n hoverStayTime: 'hover-stay-time',\n hoverStopPropagation: 'hover-stop-propagation',\n plain: 'plain',\n loading: 'loading',\n disabled: 'disabled',\n size: 'size',\n};\n\n/**\n * 属性名转 WXML:href -> url;data 前缀(dataId)转 data-id(dataset);\n * 白名单内 camelCase 转 kebab(scrollX -> scroll-x);其余原样输出。\n */\nfunction wxmlAttrName(key: string): string {\n if (key === 'href') {\n return 'url';\n }\n if (key.startsWith('data') && key.length > 4) {\n return `data${key\n .slice(4)\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()}`;\n }\n return KEBAB_ATTRS[key] ?? key;\n}\n\nfunction compileLiteralString(\n context: CompileContext,\n classSource: ClassSource,\n value: tsTypes.Expression,\n what: string\n): string {\n const { ts } = context;\n const folded = foldExpression(ts, value, new Map());\n if (typeof folded !== 'string') {\n throw mpError(classSource.filePath, `${what}必须是字符串字面量`);\n }\n return folded;\n}\n\nfunction textContent(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.Node,\n env: TemplateEnv\n): string {\n const { ts } = context;\n node = unwrapParentheses(ts, node);\n if (ts.isStringLiteral(node)) {\n return escapeXml(node.text);\n }\n if (ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text.includes('{{') ? node.text : escapeXml(node.text);\n }\n if (ts.isTemplateExpression(node)) {\n return `{{${toBinding(bindingContext(context, classSource, env), node)}}}`;\n }\n if (ts.isIdentifier(node)) {\n if (env.scope.params.has(node.text)) {\n return `{{${node.text}}}`;\n }\n const replacement = resolveIdentifierExpression(\n context,\n classSource,\n node,\n env\n );\n if (replacement) {\n return textContent(context, classSource, replacement, env);\n }\n throw mpError(classSource.filePath, `无法解析模板标识符 \"${node.text}\"`);\n }\n if (\n ts.isPropertyAccessExpression(node) ||\n ts.isElementAccessExpression(node)\n ) {\n return `{{${toBinding(bindingContext(context, classSource, env), node)}}}`;\n }\n throw mpError(\n classSource.filePath,\n `不支持的文本节点: ${node.getText().slice(0, 60)}`\n );\n}\n\nfunction isTextNode(ts: typeof tsTypes, node: tsTypes.Node): boolean {\n return (\n ts.isStringLiteral(node) ||\n ts.isNoSubstitutionTemplateLiteral(node) ||\n ts.isTemplateExpression(node)\n );\n}\n\nfunction resolveIdentifierExpression(\n _context: CompileContext,\n _classSource: ClassSource,\n node: tsTypes.Identifier,\n env: TemplateEnv\n): tsTypes.Expression | undefined {\n if (env.scope.locals.has(node.text)) {\n return env.scope.locals.get(node.text)!;\n }\n if (env.scope.consts.has(node.text)) {\n return env.scope.consts.get(node.text)!;\n }\n return undefined;\n}\n\nfunction bindingContext(\n context: CompileContext,\n classSource: ClassSource,\n env: TemplateEnv\n) {\n return {\n ts: context.ts,\n scope: env.scope,\n filePath: classSource.filePath,\n onProp: (name: string) => env.builder.propsReferenced.add(name),\n };\n}\n\nfunction callName(\n ts: typeof tsTypes,\n expression: tsTypes.Expression\n): string | undefined {\n expression = unwrapParentheses(ts, expression);\n if (ts.isIdentifier(expression)) {\n return expression.text;\n }\n if (ts.isPropertyAccessExpression(expression)) {\n return expression.name.text;\n }\n return undefined;\n}\n\nfunction objectProperty(\n ts: typeof tsTypes,\n object: tsTypes.ObjectLiteralExpression,\n key: string\n): tsTypes.Expression | undefined {\n for (const property of object.properties) {\n if (\n ts.isPropertyAssignment(property) &&\n ts.isIdentifier(property.name) &&\n property.name.text === key\n ) {\n return property.initializer;\n }\n }\n return undefined;\n}\n\nfunction collectModuleConsts(\n context: CompileContext,\n classSource: ClassSource\n): Map<string, tsTypes.Expression> {\n return moduleConstants(context, classSource);\n}\n\n/** 收集从 transone 导入的本地名 -> 原始导出名(处理别名)。 */\nfunction collectFactoryOrigins(\n ts: typeof tsTypes,\n source: tsTypes.SourceFile\n): Map<string, string> {\n const origins = new Map<string, string>();\n for (const statement of source.statements) {\n if (!ts.isImportDeclaration(statement)) {\n continue;\n }\n const specifier = statement.moduleSpecifier.getText().replace(/['\"]/g, '');\n if (!specifier.includes('transone')) {\n continue;\n }\n const bindings = statement.importClause?.namedBindings;\n if (!bindings || !ts.isNamedImports(bindings)) {\n continue;\n }\n for (const element of bindings.elements) {\n const local = element.name.text;\n const original = element.propertyName?.text ?? local;\n if (ELEMENT_FACTORIES.has(original) || SPECIAL_CALLS.has(original)) {\n origins.set(local, original);\n }\n }\n }\n return origins;\n}\n\nfunction inferPropType(\n context: CompileContext,\n _classSource: ClassSource,\n value: tsTypes.Expression,\n env: TemplateEnv\n): string {\n const { ts } = context;\n const folded = foldExpression(ts, value, env.scope.consts);\n if (typeof folded === 'string') {\n return 'String';\n }\n if (typeof folded === 'number') {\n return 'Number';\n }\n if (typeof folded === 'boolean') {\n return 'Boolean';\n }\n if (Array.isArray(folded)) {\n return 'Array';\n }\n if (folded !== undefined && typeof folded === 'object') {\n return 'Object';\n }\n return 'null';\n}\n\nfunction rawTemplateText(\n ts: typeof tsTypes,\n node: tsTypes.Node\n): string | undefined {\n node = unwrapParentheses(ts, node);\n if (ts.isNoSubstitutionTemplateLiteral(node) && node.text.includes('{{')) {\n return node.text;\n }\n return undefined;\n}\n\nfunction literalToString(value: FoldedValue): string {\n return typeof value === 'string' ? value : String(value);\n}\n\nfunction kebabCase(name: string): string {\n const kebab = name\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^A-Za-z0-9-]/g, '')\n .toLowerCase();\n if (!kebab) {\n throw new Error(`无法从类名 \"${name}\" 生成组件标签名`);\n }\n return kebab;\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\nfunction escapeAttr(value: string): string {\n return escapeXml(value).replace(/\"/g, '&quot;');\n}\n\nfunction indent(level: number): string {\n return ' '.repeat(level);\n}\n\nexport function findMethod(\n context: CompileContext,\n classSource: ClassSource,\n name: string\n): tsTypes.MethodDeclaration | undefined {\n return ownedMethod(context, classSource, name)?.declaration;\n}\n\nexport { kebabCase };\n",
14
+ "import type * as tsTypes from 'typescript';\nimport { foldExpression, isThisExpression } from './fold';\nimport { mpError } from './errors';\nimport { ClassSource, CompileContext } from './types';\nimport { moduleConstants, ownedMethod, parentSource } from './inheritance';\n\nexport interface CompiledStyles {\n /** 本单元作用域内的 WXSS(class 等选择器)。 */\n style: string;\n /** 全局样式(body 选择器,页面单元会合并进 app.wxss)。 */\n global: string;\n /** 存在 hover 样式的选择器(如 '.card'),模板据此生成 hover-class。 */\n hoverSelectors: Set<string>;\n}\n\ninterface StyleEntry {\n selector: string;\n properties: Record<string, string | number>;\n hover?: Record<string, string | number>;\n media?: Record<string, Record<string, string | number>>;\n}\n\n/** 无单位合法的 CSS 属性:数字值不加 px/rpx。 */\nconst UNITLESS_PROPERTIES = new Set([\n 'opacity',\n 'zIndex',\n 'fontWeight',\n 'lineHeight',\n 'flex',\n 'flexGrow',\n 'flexShrink',\n 'order',\n 'zoom',\n 'scale',\n 'transform',\n 'animationIterationCount',\n 'columnCount',\n 'fontSizeAdjust',\n]);\n\n/**\n * 编译 initStyles():只支持\n * `this.styleManager.addStyle('name', { selector, properties, media, hover })`\n * 字面量调用;body 选择器归入全局样式(小程序用 page 选择器)。\n */\nexport function compileStyles(\n context: CompileContext,\n classSource: ClassSource\n): CompiledStyles {\n const { ts } = context;\n const entries = new Map<string, StyleEntry>();\n const collect = (source: ClassSource): void => {\n const owned = ownedMethod(context, source, 'initStyles');\n if (!owned?.declaration.body) return;\n const owner = owned.owner;\n const consts = collectModuleConsts(context, owner);\n for (const statement of owned.declaration.body.statements) {\n if (ts.isEmptyStatement(statement)) continue;\n if (!ts.isExpressionStatement(statement))\n throw mpError(\n owner.filePath,\n 'initStyles() 只支持 this.styleManager.addStyle(...) 与 super.initStyles() 调用'\n );\n const expression = statement.expression;\n if (\n ts.isCallExpression(expression) &&\n ts.isPropertyAccessExpression(expression.expression) &&\n expression.expression.expression.kind === ts.SyntaxKind.SuperKeyword &&\n expression.expression.name.text === 'initStyles' &&\n expression.arguments.length === 0\n ) {\n const parent = parentSource(context, owner);\n if (parent) collect(parent);\n continue;\n }\n const entry = addStyleEntry(context, owner, expression, consts);\n if (entry && ts.isCallExpression(expression)) {\n const name =\n expression.arguments[0] &&\n foldExpression(ts, expression.arguments[0], consts);\n if (typeof name !== 'string')\n throw mpError(owner.filePath, 'addStyle 名称必须能静态求值');\n entries.set(name, entry);\n }\n }\n };\n collect(classSource);\n\n const local: string[] = [];\n const global: string[] = [];\n const hoverSelectors = new Set<string>();\n for (const entry of entries.values()) {\n const target = entry.selector === 'body' ? global : local;\n target.push(renderStyle(entry, context.lengthUnit));\n if (entry.hover && entry.selector !== 'body') {\n hoverSelectors.add(entry.selector);\n }\n }\n\n return { style: local.join('\\n'), global: global.join('\\n'), hoverSelectors };\n}\n\nfunction addStyleEntry(\n context: CompileContext,\n classSource: ClassSource,\n expression: tsTypes.Expression,\n consts: Map<string, tsTypes.Expression>\n): StyleEntry | undefined {\n const { ts } = context;\n if (!ts.isCallExpression(expression)) {\n throw mpError(\n classSource.filePath,\n 'initStyles() 只支持 this.styleManager.addStyle(...) 调用'\n );\n }\n const callee = expression.expression;\n const manager = ts.isPropertyAccessExpression(callee)\n ? callee.expression\n : undefined;\n if (\n !ts.isPropertyAccessExpression(callee) ||\n callee.name.text !== 'addStyle' ||\n !manager ||\n !ts.isPropertyAccessExpression(manager) ||\n !isThisExpression(ts, manager.expression) ||\n manager.name.text !== 'styleManager'\n ) {\n throw mpError(\n classSource.filePath,\n 'initStyles() 只支持 this.styleManager.addStyle(...) 调用'\n );\n }\n const optionsExpr = expression.arguments[1];\n if (!optionsExpr || !ts.isObjectLiteralExpression(optionsExpr)) {\n throw mpError(\n classSource.filePath,\n 'addStyle 的第二个参数必须是对象字面量'\n );\n }\n\n const selector = foldObjectString(ts, optionsExpr, 'selector', consts);\n const properties = foldObjectRecord(ts, optionsExpr, 'properties', consts);\n const hover = foldObjectRecord(ts, optionsExpr, 'hover', consts);\n const media = foldMedia(ts, optionsExpr, consts);\n if (selector === undefined || properties === undefined) {\n throw mpError(\n classSource.filePath,\n 'addStyle 需要 selector 与 properties 字面量'\n );\n }\n return {\n selector,\n properties,\n ...(hover ? { hover } : {}),\n ...(media ? { media } : {}),\n };\n}\n\nfunction foldObjectString(\n ts: typeof tsTypes,\n object: tsTypes.ObjectLiteralExpression,\n key: string,\n consts: Map<string, tsTypes.Expression>\n): string | undefined {\n const value = objectProperty(ts, object, key);\n if (!value) {\n return undefined;\n }\n const folded = foldExpression(ts, value, consts);\n return typeof folded === 'string' ? folded : undefined;\n}\n\nfunction foldObjectRecord(\n ts: typeof tsTypes,\n object: tsTypes.ObjectLiteralExpression,\n key: string,\n consts: Map<string, tsTypes.Expression>\n): Record<string, string | number> | undefined {\n const value = objectProperty(ts, object, key);\n if (!value) {\n return undefined;\n }\n if (!ts.isObjectLiteralExpression(value)) {\n return undefined;\n }\n const result: Record<string, string | number> = {};\n for (const property of value.properties) {\n if (!ts.isPropertyAssignment(property) || !ts.isIdentifier(property.name)) {\n return undefined;\n }\n const folded = foldExpression(ts, property.initializer, consts);\n if (typeof folded !== 'string' && typeof folded !== 'number') {\n return undefined;\n }\n result[property.name.text] = folded;\n }\n return result;\n}\n\nfunction foldMedia(\n ts: typeof tsTypes,\n object: tsTypes.ObjectLiteralExpression,\n consts: Map<string, tsTypes.Expression>\n): Record<string, Record<string, string | number>> | undefined {\n const value = objectProperty(ts, object, 'media');\n if (!value) {\n return undefined;\n }\n if (!ts.isObjectLiteralExpression(value)) {\n return undefined;\n }\n const result: Record<string, Record<string, string | number>> = {};\n for (const property of value.properties) {\n if (\n !ts.isPropertyAssignment(property) ||\n !ts.isStringLiteral(property.name) ||\n !ts.isObjectLiteralExpression(property.initializer)\n ) {\n return undefined;\n }\n const props: Record<string, string | number> = {};\n for (const item of property.initializer.properties) {\n if (!ts.isPropertyAssignment(item) || !ts.isIdentifier(item.name)) {\n return undefined;\n }\n const folded = foldExpression(ts, item.initializer, consts);\n if (typeof folded !== 'string' && typeof folded !== 'number') {\n return undefined;\n }\n props[item.name.text] = folded;\n }\n result[property.name.text] = props;\n }\n return result;\n}\n\nfunction renderStyle(entry: StyleEntry, lengthUnit: 'px' | 'rpx'): string {\n // WXSS 没有 body,全局样式用 page 选择器\n const selector = entry.selector === 'body' ? 'page' : entry.selector;\n const parts: string[] = [];\n parts.push(`${selector} {\\n${convertToCss(entry.properties, lengthUnit)}\\n}`);\n if (entry.hover) {\n // WXSS 不支持 :hover 伪类,输出 hover-class 样式块(.xxx-hover)\n parts.push(\n `${selector}-hover {\\n${convertToCss(entry.hover, lengthUnit)}\\n}`\n );\n }\n for (const [query, properties] of Object.entries(entry.media ?? {})) {\n parts.push(\n `@media ${query} {\\n${selector} {\\n${convertToCss(\n properties,\n lengthUnit\n )}\\n}\\n}`\n );\n }\n return parts.join('\\n');\n}\n\nfunction convertToCss(\n properties: Record<string, string | number>,\n lengthUnit: 'px' | 'rpx'\n): string {\n return Object.entries(properties)\n .map(([key, value]) => {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n return ` ${cssKey}: ${formatValue(key, value, lengthUnit)};`;\n })\n .join('\\n');\n}\n\nfunction formatValue(\n key: string,\n value: string | number,\n lengthUnit: 'px' | 'rpx'\n): string {\n if (typeof value !== 'number') {\n return value;\n }\n // 0 与无单位属性不追加单位\n if (value === 0 || UNITLESS_PROPERTIES.has(key)) {\n return String(value);\n }\n // 数值长度默认 px;rpx 模式下按 1px=2rpx 换算(375 设计稿基准)\n return lengthUnit === 'rpx' ? `${value * 2}rpx` : `${value}px`;\n}\n\nfunction objectProperty(\n ts: typeof tsTypes,\n object: tsTypes.ObjectLiteralExpression,\n key: string\n): tsTypes.Expression | undefined {\n for (const property of object.properties) {\n if (\n ts.isPropertyAssignment(property) &&\n ts.isIdentifier(property.name) &&\n property.name.text === key\n ) {\n return property.initializer;\n }\n }\n return undefined;\n}\n\nfunction collectModuleConsts(\n context: CompileContext,\n classSource: ClassSource\n): Map<string, tsTypes.Expression> {\n return moduleConstants(context, classSource);\n}\n",
15
+ "import type * as tsTypes from 'typescript';\nimport { foldExpression } from './fold';\nimport { mpError } from './errors';\nimport { ClassSource, CompileContext } from './types';\nimport { moduleConstants, ownedMethod, parentSource } from './inheritance';\n\n/**\n * 编译 initState() 为小程序 data 初始值(JS 对象字面量源码)。\n * 只支持静态可求值的字面量/模块常量/局部常量;其余表达式快速报错。\n */\nexport function compileState(\n context: CompileContext,\n classSource: ClassSource\n): string {\n const { ts } = context;\n const owned = ownedMethod(context, classSource, 'initState');\n const method = owned?.declaration;\n if (owned) classSource = owned.owner;\n if (!method?.body) {\n return '{}';\n }\n\n const consts = collectModuleConsts(context, classSource);\n const locals = new Map<string, tsTypes.Expression>();\n let returnStatement: tsTypes.ReturnStatement | undefined;\n for (const statement of method.body.statements) {\n if (ts.isVariableStatement(statement)) {\n const isConst = statement.declarationList.flags & ts.NodeFlags.Const;\n if (!isConst) {\n throw mpError(\n classSource.filePath,\n 'initState() 内只支持 const 声明(data 需静态求值)'\n );\n }\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.initializer) {\n locals.set(declaration.name.text, declaration.initializer);\n }\n }\n continue;\n }\n if (ts.isReturnStatement(statement)) {\n returnStatement = statement;\n continue;\n }\n throw mpError(\n classSource.filePath,\n `initState() 内不支持的语句(只支持 const 声明与 return): ${statement.getText().slice(0, 60)}`\n );\n }\n if (!returnStatement?.expression) {\n throw mpError(classSource.filePath, 'initState() 必须以 return 表达式结束');\n }\n\n const allConsts = new Map([...consts, ...locals]);\n const replaceSuper = (expression: tsTypes.Expression): tsTypes.Expression => {\n const transformed = ts.transform(expression, [\n (transformContext) => (node) => {\n const visit = (current: tsTypes.Node): tsTypes.Node => {\n if (\n ts.isCallExpression(current) &&\n ts.isPropertyAccessExpression(current.expression) &&\n current.expression.expression.kind === ts.SyntaxKind.SuperKeyword &&\n current.expression.name.text === 'initState' &&\n current.arguments.length === 0\n ) {\n const parent = parentSource(context, classSource);\n const text = parent ? compileState(context, parent) : '{}';\n return ts\n .createSourceFile(\n 'state.ts',\n `(${text})`,\n ts.ScriptTarget.Latest,\n true\n )\n .statements.filter(ts.isExpressionStatement)[0].expression;\n }\n return ts.visitEachChild(current, visit, transformContext);\n };\n return ts.visitNode(node, visit) as tsTypes.Expression;\n },\n ]);\n const result = transformed.transformed[0];\n transformed.dispose();\n return result;\n };\n for (const [name, value] of allConsts)\n allConsts.set(name, replaceSuper(value));\n const value = foldExpression(\n ts,\n replaceSuper(returnStatement.expression),\n allConsts\n );\n if (value === undefined) {\n throw mpError(\n classSource.filePath,\n 'initState() 的结果必须能静态求值(只支持字面量、模块/局部常量与简单表达式)'\n );\n }\n return JSON.stringify(value, null, 2);\n}\n\nfunction collectModuleConsts(\n context: CompileContext,\n classSource: ClassSource\n): Map<string, tsTypes.Expression> {\n return moduleConstants(context, classSource);\n}\n",
16
+ "/**\n * 相对模块内联:小程序产物是自包含的(页面/组件 JS 不打包 node_modules),\n * 页面 import 的相对路径普通模块(非 Component 子类、非 transone 运行时)\n * 需要内联进页面/组件 JS,否则方法体中的标识符在产物里未定义。\n *\n * 处理规则:\n * - 相对路径 import(./、../)且目标文件不是组件文件 → 内联;\n * - 内联时剥离 import/export/interface/type 声明,顶层声明原样保留;\n * - 递归处理模块自身的相对 import(按依赖顺序输出),seen 集合防环。\n */\nimport { dirname, join } from 'node:path';\nimport type * as tsTypes from 'typescript';\nimport { warn } from './types';\nimport { mpError } from './errors';\nimport { sourceSymbolAt } from './source';\nimport { readSource } from './analyze';\nimport type { ClassSource, CompileContext } from './types';\n\n/** 收集 entry 源码需要内联的相对模块 JS 文本(依赖先于使用方)。 */\nexport function collectInlineModules(\n context: CompileContext,\n classSource: ClassSource\n): string[] {\n const { ts } = context;\n const output: string[] = [];\n const seen = new Set<string>();\n const stack = new Set<string>();\n\n const walk = (source: tsTypes.SourceFile): void => {\n const filePath = source.fileName;\n if (seen.has(filePath)) {\n return;\n }\n // 先递归处理本文件的相对 import,保证依赖顺序\n for (const statement of source.statements) {\n if (!ts.isImportDeclaration(statement)) {\n continue;\n }\n const specifier = statement.moduleSpecifier;\n if (!ts.isStringLiteral(specifier)) {\n continue;\n }\n const target = resolveRelativeModule(context, filePath, specifier.text);\n if (!target) {\n continue;\n }\n if (stack.has(target)) {\n warn(context, `模块循环引用已跳过: ${target}`);\n continue;\n }\n stack.add(target);\n walk(readSource(context, target));\n stack.delete(target);\n }\n seen.add(filePath);\n output.push(compileInlineModule(context, source));\n };\n\n walk(classSource.source);\n return output;\n}\n\n/** 解析相对 import 目标;返回 null 表示不内联(非相对路径/包内组件)。 */\nfunction resolveRelativeModule(\n context: CompileContext,\n fromFile: string,\n specifier: string\n): string | null {\n if (!specifier.startsWith('./') && !specifier.startsWith('../')) {\n return null;\n }\n const base = specifier.endsWith('.ts') ? specifier : `${specifier}.ts`;\n const resolved = join(dirname(fromFile), base);\n // 组件文件(导出 Component 子类)由编译器按自定义组件处理,不内联\n if (isComponentFile(context, resolved)) {\n return null;\n }\n return resolved;\n}\n\n/** 判定文件是否为组件文件(顶层导出了 Component 子类)。 */\nfunction isComponentFile(context: CompileContext, filePath: string): boolean {\n const { ts } = context;\n const source = readSource(context, filePath);\n for (const statement of source.statements) {\n if (!ts.isClassDeclaration(statement)) {\n continue;\n }\n const name = statement.name?.text;\n if (!name) {\n continue;\n }\n const isExported = statement.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n );\n if (!isExported) {\n continue;\n }\n const heritage = statement.heritageClauses?.some((clause) =>\n clause.types.some((type) => {\n const expr = type.expression;\n if (!ts.isIdentifier(expr)) {\n return false;\n }\n return expr.text === 'Component' || expr.text.endsWith('Component');\n })\n );\n if (heritage) {\n return true;\n }\n }\n return false;\n}\n\n/** 把模块源码转成可拼接的 JS:去 import/export/interface/type 声明并擦除类型。 */\nfunction compileInlineModule(\n context: CompileContext,\n source: tsTypes.SourceFile\n): string {\n const { ts } = context;\n const kept: tsTypes.Statement[] = [];\n const requestImports: string[] = [];\n for (const statement of source.statements) {\n if (\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n statement.moduleSpecifier.text === 'transone/request' &&\n !statement.importClause?.isTypeOnly\n ) {\n const clause = statement.importClause;\n if (clause?.name)\n requestImports.push(\n `const ${clause.name.text} = getApp().__transoneRequest.default;`\n );\n const bindings = clause?.namedBindings;\n if (bindings && ts.isNamespaceImport(bindings)) {\n requestImports.push(\n `const ${bindings.name.text} = getApp().__transoneRequest;`\n );\n } else if (bindings && ts.isNamedImports(bindings)) {\n for (const item of bindings.elements) {\n if (!item.isTypeOnly)\n requestImports.push(\n `const ${item.name.text} = getApp().__transoneRequest[${JSON.stringify(item.propertyName?.text ?? item.name.text)}];`\n );\n }\n }\n }\n if (\n ts.isImportDeclaration(statement) ||\n ts.isExportDeclaration(statement) ||\n ts.isExportAssignment(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement)\n ) {\n continue;\n }\n // Component classes and createApp calls are compiled into Page/Component elsewhere.\n if (\n ts.isClassDeclaration(statement) &&\n statement.heritageClauses?.some((clause) =>\n clause.types.some(\n (type) =>\n ts.isIdentifier(type.expression) &&\n (type.expression.text === 'Component' ||\n type.expression.text.endsWith('Component'))\n )\n )\n )\n continue;\n if (ts.isVariableStatement(statement)) {\n const declarations = statement.declarationList.declarations.filter(\n (declaration) =>\n !(\n declaration.initializer &&\n ts.isCallExpression(declaration.initializer) &&\n ts.isIdentifier(declaration.initializer.expression) &&\n declaration.initializer.expression.text === 'createApp'\n )\n );\n if (declarations.length === 0) continue;\n kept.push(\n ts.factory.updateVariableStatement(\n statement,\n statement.modifiers,\n ts.factory.updateVariableDeclarationList(\n statement.declarationList,\n declarations\n )\n )\n );\n continue;\n }\n kept.push(statement);\n }\n\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n const printed = printer.printList(\n ts.ListFormat.MultiLine,\n ts.factory.createNodeArray(kept),\n source\n );\n const transpiled = ts.transpileModule(printed, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ES2015,\n },\n reportDiagnostics: false,\n });\n // 顶层 export 前缀:内联进产物后不再是模块边界,直接剥离\n return [\n ...requestImports,\n transpiled.outputText.replace(/^export\\s+/gm, '').trim(),\n ].join('\\n');\n}\n\n/** Link only declarations referenced by compiled methods. Checker symbols preserve the\n * lexical module of every parent method and avoid same-name helper collisions. */\nexport class MethodModuleLinker {\n private readonly names = new Map<tsTypes.Declaration, string>();\n private readonly entries = new Map<\n tsTypes.SourceFile,\n Map<tsTypes.Node, tsTypes.Node>\n >();\n private readonly dependencies = new Map<\n tsTypes.SourceFile,\n Set<tsTypes.SourceFile>\n >();\n constructor(private readonly context: CompileContext) {}\n\n modules(): string[] {\n const { ts } = this.context;\n // A selected ordinary helper module runs its initialization once, in source\n // order. Discovering its initialization can select further helper modules.\n let size = -1;\n const linkedSize = (): number =>\n this.names.size +\n [...this.entries.values()].reduce(\n (count, entries) => count + entries.size,\n 0\n );\n while (size !== linkedSize()) {\n size = linkedSize();\n for (const [source, entries] of this.entries) {\n const componentModule =\n this.context.packageComponentSources?.has(source) ||\n this.context.index!.classes.some(\n (ref) =>\n ref.source === source && this.context.index!.isComponent(ref)\n );\n for (const statement of source.statements) {\n if (ts.isImportDeclaration(statement)) {\n if (!statement.importClause && !componentModule)\n throw mpError(\n source.fileName,\n `小程序 helper 暂不支持副作用导入: ${statement.moduleSpecifier.getText(source)}`\n );\n continue;\n }\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (\n componentModule &&\n !this.names.has(declaration) &&\n (!declaration.initializer ||\n !this.referencesLinkedValue(declaration.initializer))\n )\n continue;\n if (\n !componentModule &&\n !this.names.has(declaration) &&\n (!declaration.initializer ||\n !this.mayInitialize(declaration.initializer))\n )\n continue;\n if (!ts.isIdentifier(declaration.name))\n throw mpError(\n source.fileName,\n '小程序 helper 顶层解构初始化暂不支持'\n );\n this.link(declaration);\n }\n continue;\n }\n if (\n ts.isClassDeclaration(statement) &&\n !componentModule &&\n !this.names.has(statement) &&\n statement.members.some(\n (member) =>\n ts.isClassStaticBlockDeclaration(member) ||\n (ts.isPropertyDeclaration(member) &&\n member.initializer &&\n member.modifiers?.some(\n (modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword\n ))\n )\n ) {\n throw mpError(\n source.fileName,\n `小程序 helper 未引用类的静态初始化暂不支持: ${statement.name?.text ?? 'default'}`\n );\n }\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isExportDeclaration(statement)\n )\n continue;\n if (componentModule && !this.referencesLinkedValue(statement))\n continue;\n if (\n ts.isExportAssignment(statement) ||\n ts.isEnumDeclaration(statement) ||\n ts.isModuleDeclaration(statement)\n ) {\n throw mpError(\n source.fileName,\n `小程序 helper 不支持此初始化语句: ${statement.getText(source).slice(0, 80)}`\n );\n }\n entries.set(statement, this.rewrite(statement, source));\n }\n }\n }\n const output: string[] = [];\n const visited = new Set<tsTypes.SourceFile>();\n const active = new Set<tsTypes.SourceFile>();\n const emit = (source: tsTypes.SourceFile): void => {\n if (visited.has(source)) return;\n if (active.has(source))\n throw mpError(source.fileName, '小程序 helper 模块存在循环初始化依赖');\n active.add(source);\n for (const dependency of this.orderedDependencies(source))\n emit(dependency);\n active.delete(source);\n visited.add(source);\n const statements = [...(this.entries.get(source)?.entries() ?? [])]\n .sort(([a], [b]) => a.pos - b.pos)\n .map(([, node]) => node);\n const printer = ts.createPrinter();\n const printed = statements\n .map((node) => printer.printNode(ts.EmitHint.Unspecified, node, source))\n .join('\\n');\n const result = ts.transpileModule(printed, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n },\n reportDiagnostics: true,\n });\n const error = result.diagnostics?.find(\n (item) => item.category === ts.DiagnosticCategory.Error\n );\n if (error)\n throw mpError(\n source.fileName,\n `helper 转换失败: ${ts.flattenDiagnosticMessageText(error.messageText, ' ')}`\n );\n output.push(\n result.outputText.replace(/^export\\s+(default\\s+)?/gm, '').trim()\n );\n };\n const dependedOn = new Set(\n [...this.dependencies.values()].flatMap((values) => [...values])\n );\n for (const source of this.entries.keys())\n if (!dependedOn.has(source)) emit(source);\n for (const source of this.entries.keys()) emit(source);\n return output;\n }\n\n /** Pure unused closures/constants need no execution and must not pull their\n * otherwise unreachable platform imports into the initialization graph. */\n private mayInitialize(node: tsTypes.Expression): boolean {\n const { ts } = this.context;\n if (\n ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node) ||\n ts.isIdentifier(node) ||\n ts.isStringLiteralLike(node) ||\n ts.isNumericLiteral(node) ||\n [\n ts.SyntaxKind.TrueKeyword,\n ts.SyntaxKind.FalseKeyword,\n ts.SyntaxKind.NullKeyword,\n ].includes(node.kind)\n )\n return false;\n if (\n ts.isParenthesizedExpression(node) ||\n ts.isAsExpression(node) ||\n ts.isTypeAssertionExpression(node) ||\n ts.isSatisfiesExpression(node) ||\n ts.isNonNullExpression(node)\n )\n return this.mayInitialize(node.expression);\n if (ts.isArrayLiteralExpression(node))\n return node.elements.some(\n (item) => ts.isSpreadElement(item) || this.mayInitialize(item)\n );\n if (ts.isObjectLiteralExpression(node))\n return node.properties.some((property) => {\n if (ts.isSpreadAssignment(property)) return true;\n if (\n property.name &&\n ts.isComputedPropertyName(property.name) &&\n this.mayInitialize(property.name.expression)\n )\n return true;\n return (\n ts.isPropertyAssignment(property) &&\n this.mayInitialize(property.initializer)\n );\n });\n return true;\n }\n\n private orderedDependencies(\n source: tsTypes.SourceFile\n ): tsTypes.SourceFile[] {\n const { ts } = this.context;\n const order = new Map<tsTypes.SourceFile, number>();\n source.statements.forEach((statement, position) => {\n if (!ts.isImportDeclaration(statement)) return;\n const clause = statement.importClause;\n const bindings = clause?.namedBindings;\n const names: tsTypes.Node[] = [\n statement.moduleSpecifier,\n ...(clause?.name ? [clause.name] : []),\n ...(bindings && ts.isNamedImports(bindings)\n ? bindings.elements.map((item) => item.name)\n : bindings\n ? [bindings.name]\n : []),\n ];\n for (const name of names) {\n const symbol = sourceSymbolAt(this.context, name, source);\n for (const declaration of symbol?.declarations ?? []) {\n const owner = declaration.getSourceFile();\n if (!order.has(owner)) order.set(owner, position);\n }\n }\n });\n return [...(this.dependencies.get(source) ?? [])].sort(\n (a, b) =>\n (order.get(a) ?? Number.MAX_SAFE_INTEGER) -\n (order.get(b) ?? Number.MAX_SAFE_INTEGER)\n );\n }\n\n /** Initialization next to component families is retained only when it can\n * touch selected module values. This excludes unused platform-only clients. */\n private referencesLinkedValue(\n node: tsTypes.Node,\n seen = new Set<tsTypes.Node>()\n ): boolean {\n const { ts } = this.context;\n if (seen.has(node)) return false;\n seen.add(node);\n if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)) {\n const declaration = sourceSymbolAt(this.context, node)?.valueDeclaration;\n if (declaration && this.names.has(declaration)) return true;\n if (declaration && !seen.has(declaration)) {\n if (\n ts.isFunctionDeclaration(declaration) &&\n declaration.body &&\n this.referencesLinkedValue(declaration.body, seen)\n )\n return true;\n if (\n ts.isVariableDeclaration(declaration) &&\n declaration.initializer &&\n this.referencesLinkedValue(declaration.initializer, seen)\n )\n return true;\n }\n }\n return (\n ts.forEachChild(\n node,\n (child) => this.referencesLinkedValue(child, seen) || undefined\n ) ?? false\n );\n }\n\n private linkFrom(\n declaration: tsTypes.Declaration,\n source: tsTypes.SourceFile\n ): string | undefined {\n const name = this.link(declaration);\n const dependency = declaration.getSourceFile();\n if (name && dependency !== source) {\n if (!this.entries.has(source)) this.entries.set(source, new Map());\n const dependencies =\n this.dependencies.get(source) ?? new Set<tsTypes.SourceFile>();\n dependencies.add(dependency);\n this.dependencies.set(source, dependencies);\n }\n return name;\n }\n\n rewrite<T extends tsTypes.Node>(node: T, source: tsTypes.SourceFile): T {\n const { ts } = this.context;\n const result = ts.transform(node, [\n (transformContext) => (root) => {\n const visit = (current: tsTypes.Node): tsTypes.Node => {\n if (ts.isShorthandPropertyAssignment(current)) {\n const request = this.requestReference(current.name, source);\n if (request)\n return ts.factory.createPropertyAssignment(\n current.name.text,\n request\n );\n const original = ts.getOriginalNode(current.name);\n const declaration =\n original.pos >= 0 && original.getSourceFile()\n ? sourceSymbolAt(this.context, original, source)\n ?.valueDeclaration\n : undefined;\n const linked = declaration && this.linkFrom(declaration, source);\n if (linked)\n return ts.factory.createPropertyAssignment(\n current.name.text,\n ts.factory.createIdentifier(linked)\n );\n return current;\n }\n if (\n ts.isIdentifier(current) ||\n ts.isPropertyAccessExpression(current)\n ) {\n const parent = current.parent;\n const keyOnly =\n ts.isIdentifier(current) &&\n parent &&\n ((ts.isPropertyAccessExpression(parent) &&\n parent.name === current) ||\n (ts.isPropertyAssignment(parent) && parent.name === current) ||\n (ts.isMethodDeclaration(parent) && parent.name === current));\n if (!keyOnly) {\n const request = this.requestReference(current, source);\n if (request) return request;\n const original = ts.getOriginalNode(current);\n const symbol =\n original.pos >= 0 && original.getSourceFile()\n ? sourceSymbolAt(this.context, original, source)\n : undefined;\n const declaration = symbol?.valueDeclaration;\n const linked = declaration && this.linkFrom(declaration, source);\n if (linked) return ts.factory.createIdentifier(linked);\n }\n }\n return ts.visitEachChild(current, visit, transformContext);\n };\n return ts.visitNode(root, visit) as T;\n },\n ]);\n const transformed = result.transformed[0] as T;\n result.dispose();\n return transformed;\n }\n\n private requestReference(\n node: tsTypes.Node,\n source: tsTypes.SourceFile\n ): tsTypes.Expression | undefined {\n const { ts } = this.context;\n const parent = node.parent;\n if (\n parent &&\n ts.isIdentifier(node) &&\n (ts.isParameter(parent) ||\n ts.isVariableDeclaration(parent) ||\n ts.isFunctionDeclaration(parent) ||\n ts.isClassDeclaration(parent) ||\n ts.isBindingElement(parent)) &&\n parent.name === node\n )\n return undefined;\n let local: string | undefined;\n let member: string | undefined;\n if (ts.isIdentifier(node)) local = node.text;\n if (\n ts.isPropertyAccessExpression(node) &&\n ts.isIdentifier(node.expression)\n ) {\n local = node.expression.text;\n member = node.name.text;\n }\n if (!local) return undefined;\n const original = ts.getOriginalNode(\n ts.isPropertyAccessExpression(node) ? node.expression : node\n );\n if (original.pos < 0 || !original.getSourceFile()) return undefined;\n const symbol = sourceSymbolAt(this.context, original, source);\n if (!symbol) return undefined;\n const sameBinding = (name: tsTypes.Identifier): boolean =>\n name.text === local &&\n sourceSymbolAt(this.context, name, source) === symbol;\n for (const statement of source.statements) {\n if (\n !ts.isImportDeclaration(statement) ||\n !ts.isStringLiteral(statement.moduleSpecifier) ||\n statement.moduleSpecifier.text !== 'transone/request'\n )\n continue;\n const clause = statement.importClause;\n const bindings = clause?.namedBindings;\n let exported: string | undefined;\n if (clause?.name && sameBinding(clause.name)) exported = 'default';\n if (bindings && ts.isNamedImports(bindings))\n exported =\n bindings.elements.find((item) => sameBinding(item.name))?.propertyName\n ?.text ??\n (bindings.elements.some((item) => sameBinding(item.name))\n ? local\n : exported);\n if (\n bindings &&\n ts.isNamespaceImport(bindings) &&\n sameBinding(bindings.name)\n )\n exported = member ?? '*';\n if (!exported) continue;\n // Named/default imports can themselves have properties (request.get).\n // Rewrite their receiver, reserving whole-member replacement for namespaces.\n if (\n member &&\n !(\n bindings &&\n ts.isNamespaceImport(bindings) &&\n sameBinding(bindings.name)\n )\n )\n return undefined;\n const runtime = ts.factory.createPropertyAccessExpression(\n ts.factory.createCallExpression(\n ts.factory.createIdentifier('getApp'),\n undefined,\n []\n ),\n '__transoneRequest'\n );\n return exported === '*'\n ? runtime\n : ts.factory.createElementAccessExpression(\n runtime,\n ts.factory.createStringLiteral(exported)\n );\n }\n return undefined;\n }\n\n private link(declaration: tsTypes.Declaration): string | undefined {\n const { ts } = this.context;\n const source = declaration.getSourceFile();\n if (source.isDeclarationFile) return undefined;\n const topVariable =\n ts.isVariableDeclaration(declaration) &&\n ts.isVariableDeclarationList(declaration.parent) &&\n ts.isVariableStatement(declaration.parent.parent) &&\n ts.isSourceFile(declaration.parent.parent.parent);\n const topFunction =\n ts.isFunctionDeclaration(declaration) &&\n ts.isSourceFile(declaration.parent);\n const topClass =\n ts.isClassDeclaration(declaration) && ts.isSourceFile(declaration.parent);\n if (!topVariable && !topFunction && !topClass) return undefined;\n if (topClass) {\n const ref = this.context.index?.findClass(\n source.fileName,\n declaration.name?.text ?? 'default'\n );\n if (ref && this.context.index!.isComponent(ref)) return undefined;\n }\n const existing = this.names.get(declaration);\n if (existing) return existing;\n const name = `__mp_module_${this.names.size}`;\n this.names.set(declaration, name);\n const entries =\n this.entries.get(source) ?? new Map<tsTypes.Node, tsTypes.Node>();\n this.entries.set(source, entries);\n const transformed = this.rewrite(declaration, source);\n let statement: tsTypes.Node = transformed;\n if (ts.isVariableDeclaration(transformed))\n statement = ts.factory.createVariableStatement(\n undefined,\n ts.factory.createVariableDeclarationList(\n [transformed],\n ts.isVariableDeclarationList(declaration.parent)\n ? declaration.parent.flags\n : ts.NodeFlags.Const\n )\n );\n entries.set(declaration, statement);\n return name;\n }\n}\n",
17
+ "import type * as tsTypes from 'typescript';\nimport { foldExpression, FoldedValue, isThisExpression } from './fold';\nimport {\n moduleConstants,\n ownedMethods,\n ownedMethod,\n parentSource,\n} from './inheritance';\nimport { MethodModuleLinker } from './inline';\nimport { mpError } from './errors';\nimport { ClassSource, CompileContext, FunctionEntry, UnitKind } from './types';\n\nconst PAGE_LIFECYCLE: Record<string, string> = {\n beforeMount: 'onLoad',\n onLoad: 'onLoad',\n onMounted: 'onReady',\n onUnmounted: 'onUnload',\n // 小程序页面独有生命周期:同名方法直接映射(下拉刷新/触底加载/分享等)\n onShow: 'onShow',\n onHide: 'onHide',\n onPullDownRefresh: 'onPullDownRefresh',\n onReachBottom: 'onReachBottom',\n onShareAppMessage: 'onShareAppMessage',\n onPageScroll: 'onPageScroll',\n onResize: 'onResize',\n};\n\nconst COMPONENT_LIFECYCLE: Record<string, string> = {\n beforeMount: 'created',\n onMounted: 'attached',\n onUnmounted: 'detached',\n};\n\nexport interface CompiledMethods {\n methods: FunctionEntry[];\n lifecycle: FunctionEntry[];\n inlineModules?: string[];\n}\n\n/**\n * 编译事件方法与小程序的 data 语义桥:\n * - this.state.x -> this.data.x\n * - this.setState(obj) -> this.setData(obj)\n * - this.state.a.b = expr / += -> this.setData({ 'a.b': expr })\n * - 组件内 this.emit('name', args) -> this.triggerEvent('name', { args })\n * - 方法体中的模块常量原地折叠为字面量\n */\nexport function compileMethods(\n context: CompileContext,\n classSource: ClassSource,\n usedNames: Set<string>,\n kind: UnitKind,\n customEvents: Set<string>\n): CompiledMethods {\n const methods = new Map(\n ownedMethods(context, classSource).map((item) => [\n item.declaration.name.getText(item.owner.source),\n item,\n ])\n );\n const linker = context.index ? new MethodModuleLinker(context) : undefined;\n const parentAliases = new Map<string, string>();\n const resolveSuper = (owner: ClassSource, name: string): string => {\n const parent = parentSource(context, owner);\n const owned = parent && ownedMethod(context, parent, name);\n if (!owned)\n throw mpError(owner.filePath, `不支持 super.${name}(): 未找到父业务方法`);\n const identity = `${owned.owner.filePath}:${owned.declaration.pos}`;\n const existing = parentAliases.get(identity);\n if (existing) return existing;\n const alias = `__mp_super_${parentAliases.size}_${name}`;\n parentAliases.set(identity, alias);\n methods.set(alias, owned);\n return alias;\n };\n\n const lifecycleMap = kind === 'page' ? PAGE_LIFECYCLE : COMPONENT_LIFECYCLE;\n const seed = new Set(usedNames);\n for (const hook of Object.keys(lifecycleMap)) {\n if (methods.has(hook)) {\n seed.add(hook);\n }\n }\n // props 变化观察钩子:组件类定义了 onPropsChange 时纳入编译,\n // jsgen 据此生成 observers(properties 变化触发),否则该钩子会被跳过。\n if (methods.has('onPropsChange')) {\n seed.add('onPropsChange');\n }\n\n const queue = [...seed];\n const visited = new Set<string>();\n const entries: FunctionEntry[] = [];\n const lifecycleEntries: FunctionEntry[] = [];\n const emittedKeys = new Set<string>();\n\n while (queue.length > 0) {\n const name = queue.shift()!;\n if (visited.has(name)) {\n continue;\n }\n visited.add(name);\n const owned = methods.get(name);\n if (!owned) {\n throw mpError(classSource.filePath, `未找到事件处理方法 \"${name}\"`);\n }\n\n const lifecycleKey = lifecycleMap[name];\n const key = lifecycleKey ?? name;\n if (emittedKeys.has(key)) {\n throw mpError(\n classSource.filePath,\n `方法名 \"${key}\" 与小程序生命周期钩子冲突`\n );\n }\n emittedKeys.add(key);\n\n const fn = compileMethod(\n context,\n owned.owner,\n owned.declaration,\n kind,\n customEvents,\n queue,\n resolveSuper,\n linker\n );\n if (lifecycleKey) {\n lifecycleEntries.push({ key, fn });\n } else {\n entries.push({ key, fn });\n }\n }\n\n return {\n methods: entries,\n lifecycle: lifecycleEntries,\n inlineModules: linker?.modules(),\n };\n}\n\nfunction compileMethod(\n context: CompileContext,\n classSource: ClassSource,\n declaration: tsTypes.MethodDeclaration,\n kind: UnitKind,\n customEvents: Set<string>,\n referencedMethods: string[],\n resolveSuper: (owner: ClassSource, name: string) => string,\n linker?: MethodModuleLinker\n): string {\n const { ts } = context;\n if (!declaration.body) {\n throw mpError(\n classSource.filePath,\n `方法 ${declaration.name.getText()} 缺少方法体`\n );\n }\n\n const params = declaration.parameters.map((parameter) =>\n ts.factory.createParameterDeclaration(\n undefined,\n parameter.dotDotDotToken,\n parameter.name,\n undefined,\n undefined,\n parameter.initializer\n )\n );\n const modifiers = isAsync(ts, declaration)\n ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]\n : undefined;\n\n const functionExpression = ts.factory.createFunctionExpression(\n modifiers,\n undefined,\n undefined,\n undefined,\n params,\n undefined,\n declaration.body\n );\n\n const consts = collectModuleConsts(context, classSource);\n const locals = new Set<string>();\n const transformerFactory: tsTypes.TransformerFactory<\n tsTypes.FunctionExpression\n > = (transformContext) => {\n return (root) =>\n visit(context, classSource, root, {\n transformContext,\n kind,\n customEvents,\n consts,\n locals,\n referencedMethods,\n resolveSuper,\n }) as tsTypes.FunctionExpression;\n };\n const result = ts.transform(functionExpression, [transformerFactory]);\n const transformed = linker\n ? linker.rewrite(result.transformed[0], classSource.source)\n : result.transformed[0];\n result.dispose();\n\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n const printed = printer.printNode(\n ts.EmitHint.Expression,\n transformed,\n classSource.source\n );\n // ts.transform 只运行自定义 transformer,不会做类型擦除;\n // 方法体源码里残留的 TS 类型注解 / as 断言必须经 transpileModule 移除,\n // 否则生成的小程序 JS 无法被解析。\n const transpiled = ts.transpileModule(printed, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.None,\n },\n reportDiagnostics: false,\n });\n return transpiled.outputText.trim();\n}\n\ninterface VisitState {\n transformContext: tsTypes.TransformationContext;\n kind: UnitKind;\n customEvents: Set<string>;\n consts: Map<string, tsTypes.Expression>;\n locals: Set<string>;\n referencedMethods: string[];\n resolveSuper: (owner: ClassSource, name: string) => string;\n}\n\nfunction visit(\n context: CompileContext,\n classSource: ClassSource,\n node: tsTypes.Node,\n state: VisitState\n): tsTypes.Node {\n const { ts } = context;\n\n if (ts.isFunctionLike(node)) {\n for (const parameter of node.parameters) {\n if (ts.isIdentifier(parameter.name)) {\n state.locals.add(parameter.name.text);\n }\n }\n }\n\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {\n state.locals.add(node.name.text);\n }\n\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n node.expression.expression.kind === ts.SyntaxKind.SuperKeyword\n ) {\n const alias = state.resolveSuper(classSource, node.expression.name.text);\n state.referencedMethods.push(alias);\n const call = ts.factory.createCallExpression(\n ts.factory.createPropertyAccessExpression(ts.factory.createThis(), alias),\n undefined,\n node.arguments\n );\n return ts.visitEachChild(\n call,\n (child) => visit(context, classSource, child, state),\n state.transformContext\n );\n }\n if (node.kind === ts.SyntaxKind.SuperKeyword)\n throw mpError(\n classSource.filePath,\n '不支持的 super 表达式:仅支持父业务方法调用'\n );\n\n // 赋值:this.state.path = expr / += ... -> this.setData({ path: ... })\n if (\n ts.isBinaryExpression(node) &&\n isAssignmentOperator(ts, node.operatorToken.kind)\n ) {\n if (isWholeStateAssignment(ts, node.left)) {\n throw mpError(\n classSource.filePath,\n '不支持替换整个 this.state,请改用 this.setState({ ... })'\n );\n }\n const path = statePath(ts, node.left);\n if (path !== undefined) {\n const assignment = buildStateAssignment(ts, node, classSource.filePath);\n return ts.visitEachChild(\n assignment,\n (child) => visit(context, classSource, child, state),\n state.transformContext\n );\n }\n }\n\n // this.setState(obj) -> this.setData(obj)\n if (ts.isCallExpression(node) && isThisMemberCall(ts, node, 'setState')) {\n const call = ts.factory.createCallExpression(\n ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n 'setData'\n ),\n undefined,\n node.arguments\n );\n return ts.visitEachChild(\n call,\n (child) => visit(context, classSource, child, state),\n state.transformContext\n );\n }\n\n // this.emit('name', args) -> this.triggerEvent('name', { args })\n if (ts.isCallExpression(node) && isThisMemberCall(ts, node, 'emit')) {\n if (state.kind !== 'component') {\n throw mpError(\n classSource.filePath,\n '页面组件不能使用 this.emit(组件间事件仅自定义组件支持)'\n );\n }\n const eventName = node.arguments[0];\n if (!ts.isStringLiteral(eventName)) {\n throw mpError(\n classSource.filePath,\n 'this.emit 的事件名必须是字符串字面量'\n );\n }\n state.customEvents.add(eventName.text);\n const args = ts.factory.createArrayLiteralExpression(\n node.arguments.slice(1)\n );\n const payload = ts.factory.createObjectLiteralExpression([\n ts.factory.createPropertyAssignment('args', args),\n ]);\n const call = ts.factory.createCallExpression(\n ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n 'triggerEvent'\n ),\n undefined,\n [eventName, payload]\n );\n return ts.visitEachChild(\n call,\n (child) => visit(context, classSource, child, state),\n state.transformContext\n );\n }\n\n // this.<method>(...) 调用收集(用于传递依赖;排除框架桥接方法)\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n isThisExpression(ts, node.expression.expression)\n ) {\n const methodName = node.expression.name.text;\n if (!BRIDGE_METHODS.has(methodName)) {\n state.referencedMethods.push(methodName);\n }\n }\n\n // this.state -> this.data;this.props -> this.properties\n if (\n ts.isPropertyAccessExpression(node) &&\n isThisExpression(ts, node.expression)\n ) {\n if (node.name.text === 'state') {\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n 'data'\n );\n }\n if (node.name.text === 'props') {\n if (state.kind !== 'component') {\n throw mpError(classSource.filePath, '页面组件不能访问 this.props');\n }\n return ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n 'properties'\n );\n }\n }\n\n if (\n ts.isShorthandPropertyAssignment(node) &&\n !state.locals.has(node.name.text) &&\n state.consts.has(node.name.text)\n ) {\n const value = foldExpression(\n ts,\n state.consts.get(node.name.text)!,\n state.consts\n );\n if (\n value !== undefined &&\n !(context.index && value !== null && typeof value === 'object')\n )\n return ts.factory.createPropertyAssignment(\n node.name.text,\n valueToNode(ts, value)\n );\n }\n\n // 方法体中的模块常量折叠为字面量\n if (\n ts.isIdentifier(node) &&\n isValueReference(ts, node) &&\n !state.locals.has(node.text) &&\n state.consts.has(node.text)\n ) {\n const initializer = state.consts.get(node.text)!;\n if (\n ts.isCallExpression(initializer) &&\n ts.isIdentifier(initializer.expression)\n ) {\n const factoryName = initializer.expression.text;\n const isRequestFactory = classSource.source.statements.some(\n (statement) =>\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n statement.moduleSpecifier.text === 'transone/request' &&\n statement.importClause?.namedBindings &&\n ts.isNamedImports(statement.importClause.namedBindings) &&\n statement.importClause.namedBindings.elements.some(\n (item) =>\n item.name.text === factoryName &&\n (item.propertyName?.text ?? item.name.text) === 'createRequest'\n )\n );\n if (isRequestFactory) return node;\n }\n const folded = foldExpression(\n ts,\n state.consts.get(node.text)!,\n state.consts\n );\n if (folded === undefined) {\n if (context.index) return node;\n throw mpError(\n classSource.filePath,\n `方法中引用了无法静态求值的模块常量 \"${node.text}\"`\n );\n }\n // A const binding can still hold a mutable object initialized by its module.\n // Keep its identity in indexed builds so helper initialization remains visible.\n if (context.index && folded !== null && typeof folded === 'object')\n return node;\n return valueToNode(ts, folded);\n }\n\n return ts.visitEachChild(\n node,\n (child) => visit(context, classSource, child, state),\n state.transformContext\n );\n}\n\nfunction isValueReference(\n ts: typeof tsTypes,\n node: tsTypes.Identifier\n): boolean {\n const parent = node.parent;\n if (!parent) return true;\n if (\n (ts.isPropertyAccessExpression(parent) ||\n ts.isPropertyAssignment(parent) ||\n ts.isVariableDeclaration(parent) ||\n ts.isParameter(parent) ||\n ts.isMethodDeclaration(parent) ||\n ts.isFunctionDeclaration(parent) ||\n ts.isBindingElement(parent)) &&\n parent.name === node\n )\n return false;\n return !ts.isShorthandPropertyAssignment(parent);\n}\n\nconst BRIDGE_METHODS = new Set(['emit', 'setState', 'setData', 'triggerEvent']);\n\n/**\n * 把 this.state.path 赋值表达式改写为 this.setData({ path: value })。\n * 返回的节点带原始子节点,由调用方在 transform 管线内统一转换。\n */\nfunction buildStateAssignment(\n ts: typeof tsTypes,\n node: tsTypes.BinaryExpression,\n filePath: string\n): tsTypes.Expression {\n const path = statePath(ts, node.left);\n if (path === undefined) {\n throw new Error('internal: state assignment without state path');\n }\n const operator = node.operatorToken.kind;\n const isCompound = operator !== ts.SyntaxKind.EqualsToken;\n\n let value: tsTypes.Expression;\n if (isCompound) {\n const operatorText = compoundOperatorText(ts, operator);\n if (!operatorText) {\n throw new Error(\n `不支持的复合赋值: ${node.operatorToken.getText()} (${filePath})`\n );\n }\n value = ts.factory.createBinaryExpression(\n node.left,\n operatorText as tsTypes.BinaryOperator,\n node.right\n );\n } else {\n value = node.right;\n }\n\n const key = ts.factory.createStringLiteral(path);\n const object = ts.factory.createObjectLiteralExpression([\n ts.factory.createPropertyAssignment(key, value),\n ]);\n return ts.factory.createCallExpression(\n ts.factory.createPropertyAccessExpression(\n ts.factory.createThis(),\n 'setData'\n ),\n undefined,\n [object]\n );\n}\n\n/**\n * 提取 this.state 赋值路径:this.state.a.b[0].c -> \"a.b[0].c\"。\n * 非 this.state 赋值返回 undefined;不支持整体替换 this.state。\n */\nfunction statePath(\n ts: typeof tsTypes,\n left: tsTypes.Expression\n): string | undefined {\n const tokens: string[] = [];\n let current: tsTypes.Expression = left;\n for (;;) {\n if (ts.isPropertyAccessExpression(current)) {\n if (\n isThisExpression(ts, current.expression) &&\n current.name.text === 'state'\n ) {\n if (tokens.length === 0) {\n return undefined;\n }\n return tokens\n .reverse()\n .map((token) => (token.startsWith('[') ? token : `.${token}`))\n .join('')\n .slice(1);\n }\n tokens.push(current.name.text);\n current = current.expression;\n continue;\n }\n if (ts.isElementAccessExpression(current)) {\n const argument = current.argumentExpression;\n if (!ts.isStringLiteral(argument) && !ts.isNumericLiteral(argument)) {\n return undefined;\n }\n tokens.push(`[${argument.text}]`);\n current = current.expression;\n continue;\n }\n return undefined;\n }\n}\n\nfunction isAssignmentOperator(\n ts: typeof tsTypes,\n kind: tsTypes.SyntaxKind\n): boolean {\n return (\n kind === ts.SyntaxKind.EqualsToken ||\n kind === ts.SyntaxKind.PlusEqualsToken ||\n kind === ts.SyntaxKind.MinusEqualsToken ||\n kind === ts.SyntaxKind.AsteriskEqualsToken ||\n kind === ts.SyntaxKind.SlashEqualsToken ||\n kind === ts.SyntaxKind.PercentEqualsToken ||\n kind === ts.SyntaxKind.LessThanLessThanEqualsToken ||\n kind === ts.SyntaxKind.GreaterThanGreaterThanEqualsToken ||\n kind === ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken ||\n kind === ts.SyntaxKind.AmpersandEqualsToken ||\n kind === ts.SyntaxKind.BarEqualsToken ||\n kind === ts.SyntaxKind.CaretEqualsToken ||\n kind === ts.SyntaxKind.AsteriskAsteriskEqualsToken ||\n kind === ts.SyntaxKind.AmpersandAmpersandEqualsToken ||\n kind === ts.SyntaxKind.BarBarEqualsToken ||\n kind === ts.SyntaxKind.QuestionQuestionEqualsToken\n );\n}\n\nfunction isWholeStateAssignment(\n ts: typeof tsTypes,\n left: tsTypes.Expression\n): boolean {\n return (\n ts.isPropertyAccessExpression(left) &&\n isThisExpression(ts, left.expression) &&\n left.name.text === 'state'\n );\n}\n\nfunction compoundOperatorText(\n ts: typeof tsTypes,\n kind: tsTypes.SyntaxKind\n): tsTypes.SyntaxKind | undefined {\n switch (kind) {\n case ts.SyntaxKind.PlusEqualsToken:\n return ts.SyntaxKind.PlusToken;\n case ts.SyntaxKind.MinusEqualsToken:\n return ts.SyntaxKind.MinusToken;\n case ts.SyntaxKind.AsteriskEqualsToken:\n return ts.SyntaxKind.AsteriskToken;\n case ts.SyntaxKind.SlashEqualsToken:\n return ts.SyntaxKind.SlashToken;\n case ts.SyntaxKind.PercentEqualsToken:\n return ts.SyntaxKind.PercentToken;\n default:\n return undefined;\n }\n}\n\nfunction isThisMemberCall(\n ts: typeof tsTypes,\n node: tsTypes.CallExpression,\n name: string\n): boolean {\n return (\n ts.isPropertyAccessExpression(node.expression) &&\n isThisExpression(ts, node.expression.expression) &&\n node.expression.name.text === name\n );\n}\n\nfunction isAsync(\n ts: typeof tsTypes,\n declaration: tsTypes.MethodDeclaration\n): boolean {\n return (declaration.modifiers ?? []).some(\n (modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword\n );\n}\n\nfunction valueToNode(\n ts: typeof tsTypes,\n value: FoldedValue\n): tsTypes.Expression {\n if (typeof value === 'string') {\n return ts.factory.createStringLiteral(value);\n }\n if (typeof value === 'number') {\n return ts.factory.createNumericLiteral(String(value));\n }\n if (typeof value === 'boolean') {\n return value ? ts.factory.createTrue() : ts.factory.createFalse();\n }\n if (value === null) {\n return ts.factory.createNull();\n }\n if (Array.isArray(value)) {\n return ts.factory.createArrayLiteralExpression(\n value.map((item) => valueToNode(ts, item))\n );\n }\n return ts.factory.createObjectLiteralExpression(\n Object.entries(value).map(([key, item]) =>\n ts.factory.createPropertyAssignment(\n ts.factory.createStringLiteral(key),\n valueToNode(ts, item)\n )\n )\n );\n}\n\nfunction collectModuleConsts(\n context: CompileContext,\n classSource: ClassSource\n): Map<string, tsTypes.Expression> {\n return moduleConstants(context, classSource);\n}\n",
18
+ "import { mpError } from './errors';\nimport {\n ClassSource,\n CompiledUnit,\n CompileContext,\n FunctionEntry,\n UnitKind,\n} from './types';\nimport { compileTemplate, kebabCase } from './wxml';\nimport { compileStyles } from './styles';\nimport { compileState } from './state';\nimport { compileMethods } from './methods';\nimport { collectInlineModules } from './inline';\n\nexport interface UnitOptions {\n kind: UnitKind;\n name: string;\n}\n\n/**\n * 编译一个页面或自定义组件单元。组件会被缓存(按 kebab 标签名),\n * 并通过 usedComponents 递归编译依赖的组件。\n */\nexport function compileUnit(\n context: CompileContext,\n classSource: ClassSource,\n options: UnitOptions\n): CompiledUnit {\n const { kind, name } = options;\n\n if (kind === 'component') {\n const cached = context.components.get(name);\n if (cached) {\n return cached;\n }\n if (context.compiling.has(name)) {\n throw mpError(classSource.filePath, `组件循环引用: ${name}`);\n }\n context.compiling.add(name);\n }\n\n try {\n // 先编译样式,拿到 hover 选择器集合供模板生成 hover-class\n const styles = compileStyles(context, classSource);\n const { template, builder } = compileTemplate(\n context,\n classSource,\n kind,\n styles.hoverSelectors\n );\n const data = compileState(context, classSource);\n\n const usedNames = new Set(builder.handlers);\n for (const emitter of builder.emitters) {\n usedNames.add(emitter.method);\n }\n const customEvents = new Set<string>();\n const legacyModules = context.index\n ? undefined\n : collectInlineModules(context, classSource);\n const compiledMethods = compileMethods(\n context,\n classSource,\n usedNames,\n kind,\n customEvents\n );\n\n // emitters 包装方法:还原 triggerEvent 的 e.detail.args\n const methods: FunctionEntry[] = [...compiledMethods.methods];\n for (const emitter of builder.emitters) {\n const key = emitter.key ?? `__transone_emitter_${emitter.event}`;\n const fn = emitter.passArgs\n ? `function(e) { this.${emitter.method}(...e.detail.args); }`\n : `function() { this.${emitter.method}(); }`;\n methods.push({ key, fn });\n }\n\n const usingComponents: Record<string, string> = {};\n for (const [tag, source] of builder.usedComponents) {\n compileUnit(context, source, { kind: 'component', name: tag });\n usingComponents[tag] = `/components/${tag}/${tag}`;\n }\n\n const unit: CompiledUnit = {\n kind,\n name,\n template,\n style: styles.style,\n globalStyle: styles.global,\n data,\n properties: {},\n propsReferenced: builder.propsReferenced,\n methods,\n lifecycle: compiledMethods.lifecycle,\n customEvents: [...customEvents],\n usingComponents,\n inlineModules: compiledMethods.inlineModules ?? legacyModules ?? [],\n };\n\n if (kind === 'component') {\n context.components.set(name, unit);\n }\n return unit;\n } finally {\n if (kind === 'component') {\n context.compiling.delete(name);\n }\n }\n}\n\n/** 编译全部页面后,聚合调用点属性与模板 props 引用,生成组件 properties。 */\nexport function finalizeComponentProperties(context: CompileContext): void {\n for (const [tag, unit] of context.components) {\n const properties = new Map<string, string>();\n for (const callSite of context.callSites.get(tag) ?? []) {\n for (const [name, type] of Object.entries(callSite)) {\n if (!properties.has(name) || properties.get(name) === 'null') {\n properties.set(name, type);\n }\n }\n }\n for (const name of unit.propsReferenced) {\n if (!properties.has(name)) {\n properties.set(name, 'null');\n }\n }\n unit.properties = Object.fromEntries(properties);\n }\n}\n\nexport function componentTag(className: string): string {\n return kebabCase(className);\n}\n",
19
+ "import { CompiledUnit, PropertyTypes } from './types';\nimport type { MpDialect } from './dialect';\n\nconst GENERATED_HEADER = (dialectId: string): string =>\n `// 由 transone build --target ${dialectId} 生成,请勿手动编辑`;\n\n/** 生成页面 JS:Page({ data, methods, lifecycle })(CommonJS)。 */\nfunction inlinePreamble(unit: CompiledUnit): string {\n if (unit.inlineModules.length === 0) {\n return '';\n }\n return unit.inlineModules.join('\\n\\n') + '\\n\\n';\n}\n\nexport function generatePageJs(unit: CompiledUnit, dialect: MpDialect): string {\n const parts: string[] = [\n GENERATED_HEADER(dialect.id),\n inlinePreamble(unit),\n 'Page({',\n ` data: ${embedData(unit.data)},`,\n ];\n for (const entry of [...unit.methods, ...unit.lifecycle]) {\n parts.push(` ${JSON.stringify(entry.key)}: ${entry.fn},`);\n }\n parts.push('});');\n return parts.join('\\n') + '\\n';\n}\n\n/** 生成自定义组件 JS:Component({ properties, data, methods, lifetimes })。 */\nexport function generateComponentJs(unit: CompiledUnit, dialect: MpDialect): string {\n const parts: string[] = [\n GENERATED_HEADER(dialect.id),\n inlinePreamble(unit),\n 'Component({',\n ];\n parts.push(` properties: ${generatePropertiesSource(unit.properties)},`);\n parts.push(` data: ${embedData(unit.data)},`);\n parts.push(' methods: {');\n for (const entry of unit.methods) {\n parts.push(` ${JSON.stringify(entry.key)}: ${entry.fn},`);\n }\n parts.push(' },');\n if (unit.lifecycle.length > 0) {\n parts.push(' lifetimes: {');\n for (const entry of unit.lifecycle) {\n parts.push(` ${JSON.stringify(entry.key)}: ${entry.fn},`);\n }\n parts.push(' },');\n }\n const hasPropsHook = unit.methods.some(\n (entry) => entry.key === 'onPropsChange'\n );\n if (hasPropsHook) {\n const watched = Object.keys(unit.properties);\n parts.push(' observers: {');\n parts.push(\n ` ${JSON.stringify(watched.join(', '))}: function () { if (typeof this.onPropsChange === 'function') this.onPropsChange(); },`\n );\n parts.push(' },');\n }\n parts.push('});');\n return parts.join('\\n') + '\\n';\n}\n\n/** 把 JSON 对象源码嵌入 Page/Component 的 data 字段(统一缩进)。 */\nfunction embedData(data: string): string {\n const body = data\n .trim()\n .replace(/^\\{/, '')\n .replace(/\\}$/, '')\n .trim();\n return `{\\n ${body.replace(/\\n/g, '\\n ')}\\n }`;\n}\n\n/** 生成 properties 对象源码:{ title: { type: String, value: '' } }。 */\nexport function generatePropertiesSource(properties: PropertyTypes): string {\n const entries = Object.entries(properties);\n if (entries.length === 0) {\n return '{}';\n }\n const lines = entries.map(\n ([name, type]) =>\n ` ${JSON.stringify(name)}: { type: ${type === 'null' ? 'null' : type}, value: '' },`\n );\n return `{\\n${lines.join('\\n')}\\n }`;\n}\n"
20
+ ],
21
+ "mappings": "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",
22
+ "debugId": "2351C11ACC1AB08664756E2164756E21",
23
+ "names": []
24
+ }