transone-cli 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/dist/{build-mp-6j38wf4r.js → build-mp-004pd4h0.js} +50 -4
- package/dist/{build-mp-6j38wf4r.js.map → build-mp-004pd4h0.js.map} +5 -5
- package/dist/cli.js +1 -1
- package/dist/create.d.ts +1 -1
- package/dist/{index-nag8rsrg.js → index-pg5v7h1t.js} +29 -5
- package/dist/{index-nag8rsrg.js.map → index-pg5v7h1t.js.map} +5 -5
- package/dist/index.js +1 -1
- package/dist/types.d.ts +9 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/mp/build-mp.ts", "../src/mp/analyze.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/methods.ts", "../src/mp/inline.ts", "../src/mp/compile.ts", "../src/mp/jsgen.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { cp, mkdir, readdir, rm, writeFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\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 { findRootClass } from './analyze';\nimport { compileUnit, finalizeComponentProperties } from './compile';\nimport { generatePageJs, generateComponentJs } from './jsgen';\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 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 const outDir = mp.outDir;\n await rm(outDir, { recursive: true, force: true });\n await mkdir(outDir, { recursive: true });\n\n const assetsBuilt: string[] = [];\n const write = async (path: string, content: string): Promise<void> => {\n const target = join(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 ...mp.appExtra,\n ...dialect.appJsonExtras(),\n },\n null,\n 2\n )}\\n`\n );\n\n await write(\n 'app.js',\n `App(
|
|
5
|
+
"import { cp, mkdir, readdir, rm, 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 { findRootClass } from './analyze';\nimport { compileUnit, finalizeComponentProperties } from './compile';\nimport { generatePageJs, generateComponentJs } from './jsgen';\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 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 const outDir = mp.outDir;\n await rm(outDir, { recursive: true, force: true });\n await mkdir(outDir, { recursive: true });\n\n const assetsBuilt: string[] = [];\n const write = async (path: string, content: string): Promise<void> => {\n const target = join(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 ...mp.appExtra,\n ...dialect.appJsonExtras(),\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', format: 'cjs', minify: false,\n });\n if (!requestBundle.success) throw new Error(`Mini program request runtime build failed: ${requestBundle.logs.join('\\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 ...(mp.host !== undefined ? { __transoneConfig: { host: mp.host } } : {}),\n ...(mp.globalData !== undefined ? { globalData: mp.globalData } : {}),\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(`components/${tag}/${tag}.${dialect.templateExt}`, unit.template);\n await write(`components/${tag}/${tag}.${dialect.styleExt}`, `${unit.style}\\n`);\n await write(`components/${tag}/${tag}.js`, generateComponentJs(unit, dialect));\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 = join(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
6
|
"import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport type * as tsTypes from 'typescript';\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 return {\n filePath,\n source,\n declaration: statement,\n className: name,\n };\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 return { 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 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 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 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(fromFile: string, specifier: string): 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<string, unknown>;\n return { dir: join(current, 'node_modules', ...segments), source: json.source };\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(packageDir: string, sourceField: string): 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.getText().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
7
|
"/** 小程序编译错误:携带出错文件,便于定位不可静态编译的源码。 */\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",
|
|
8
8
|
"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.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,12 +11,12 @@
|
|
|
11
11
|
"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 { 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\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 renderMethod = findMethod(context, classSource, 'render');\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 = [indent(env.indent) + `<block ${context.dialect.directivePrefix}if=\"{{${condition}}}\">`];\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(indent(env.indent) + `<block ${context.dialect.directivePrefix}else>`);\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) + `<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 = kebabCase(target.className);\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 { event: 'pending', method: handlerExpr.name.text, passArgs: true, key: '' };\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 const consts = new Map<string, tsTypes.Expression>();\n for (const statement of classSource.source.statements) {\n if (!context.ts.isVariableStatement(statement)) {\n continue;\n }\n const isConst =\n statement.declarationList.flags & context.ts.NodeFlags.Const;\n if (!isConst) {\n continue;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (\n context.ts.isIdentifier(declaration.name) &&\n declaration.initializer\n ) {\n consts.set(declaration.name.text, declaration.initializer);\n }\n }\n }\n return consts;\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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction escapeAttr(value: string): string {\n return escapeXml(value).replace(/\"/g, '"');\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 const { ts } = context;\n return classSource.declaration.members.find(\n (member): member is tsTypes.MethodDeclaration =>\n ts.isMethodDeclaration(member) && member.name.getText() === name\n );\n}\n\nexport { kebabCase };\n",
|
|
12
12
|
"import type * as tsTypes from 'typescript';\nimport { foldExpression, isThisExpression } from './fold';\nimport { mpError } from './errors';\nimport { ClassSource, CompileContext } from './types';\nimport { findMethod } from './wxml';\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 method = findMethod(context, classSource, 'initStyles');\n if (!method?.body) {\n return { style: '', global: '', hoverSelectors: new Set() };\n }\n\n const consts = collectModuleConsts(context, classSource);\n const entries: StyleEntry[] = [];\n for (const statement of method.body.statements) {\n if (ts.isEmptyStatement(statement)) {\n continue;\n }\n if (!ts.isExpressionStatement(statement)) {\n throw mpError(\n classSource.filePath,\n 'initStyles() 只支持 this.styleManager.addStyle(...) 调用'\n );\n }\n const expression = statement.expression;\n const entry = addStyleEntry(context, classSource, expression, consts);\n if (entry) {\n entries.push(entry);\n }\n }\n\n const local: string[] = [];\n const global: string[] = [];\n const hoverSelectors = new Set<string>();\n for (const entry of entries) {\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 const consts = new Map<string, tsTypes.Expression>();\n for (const statement of classSource.source.statements) {\n if (!context.ts.isVariableStatement(statement)) {\n continue;\n }\n const isConst =\n statement.declarationList.flags & context.ts.NodeFlags.Const;\n if (!isConst) {\n continue;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (\n context.ts.isIdentifier(declaration.name) &&\n declaration.initializer\n ) {\n consts.set(declaration.name.text, declaration.initializer);\n }\n }\n }\n return consts;\n}\n",
|
|
13
13
|
"import type * as tsTypes from 'typescript';\nimport { foldExpression } from './fold';\nimport { mpError } from './errors';\nimport { ClassSource, CompileContext } from './types';\nimport { findMethod } from './wxml';\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 method = findMethod(context, classSource, 'initState');\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 value = foldExpression(ts, returnStatement.expression, allConsts);\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 const consts = new Map<string, tsTypes.Expression>();\n for (const statement of classSource.source.statements) {\n if (!context.ts.isVariableStatement(statement)) {\n continue;\n }\n const isConst =\n statement.declarationList.flags & context.ts.NodeFlags.Const;\n if (!isConst) {\n continue;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (\n context.ts.isIdentifier(declaration.name) &&\n declaration.initializer\n ) {\n consts.set(declaration.name.text, declaration.initializer);\n }\n }\n }\n return consts;\n}\n",
|
|
14
|
-
"import type * as tsTypes from 'typescript';\nimport { foldExpression, FoldedValue, isThisExpression } from './fold';\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}\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 { ts } = context;\n const methods = new Map<string, tsTypes.MethodDeclaration>();\n for (const member of classSource.declaration.members) {\n if (\n ts.isMethodDeclaration(member) &&\n ts.isIdentifier(member.name) &&\n !isStatic(ts, member)\n ) {\n methods.set(member.name.text, member);\n }\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 declaration = methods.get(name);\n if (!declaration) {\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 classSource,\n declaration,\n kind,\n customEvents,\n queue\n );\n if (lifecycleKey) {\n lifecycleEntries.push({ key, fn });\n } else {\n entries.push({ key, fn });\n }\n }\n\n return { methods: entries, lifecycle: lifecycleEntries };\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): 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 }) as tsTypes.FunctionExpression;\n };\n const result = ts.transform(functionExpression, [transformerFactory]);\n const transformed = result.transformed[0] as tsTypes.FunctionExpression;\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: { target: ts.ScriptTarget.ESNext, module: ts.ModuleKind.None },\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}\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 // 赋值: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 // 方法体中的模块常量折叠为字面量\n if (\n ts.isIdentifier(node) &&\n !state.locals.has(node.text) &&\n state.consts.has(node.text)\n ) {\n const folded = foldExpression(\n ts,\n state.consts.get(node.text)!,\n state.consts\n );\n if (folded === undefined) {\n throw mpError(\n classSource.filePath,\n `方法中引用了无法静态求值的模块常量 \"${node.text}\"`\n );\n }\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\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 isStatic(\n ts: typeof tsTypes,\n declaration: tsTypes.MethodDeclaration\n): boolean {\n return (declaration.modifiers ?? []).some(\n (modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword\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 const consts = new Map<string, tsTypes.Expression>();\n for (const statement of classSource.source.statements) {\n if (!context.ts.isVariableStatement(statement)) {\n continue;\n }\n const isConst =\n statement.declarationList.flags & context.ts.NodeFlags.Const;\n if (!isConst) {\n continue;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (\n context.ts.isIdentifier(declaration.name) &&\n declaration.initializer\n ) {\n consts.set(declaration.name.text, declaration.initializer);\n }\n }\n }\n return consts;\n}\n",
|
|
15
|
-
"/**\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 { 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 for (const statement of source.statements) {\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 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 transpiled.outputText.replace(/^export\\s+/gm, '').trim();\n}\n",
|
|
14
|
+
"import type * as tsTypes from 'typescript';\nimport { foldExpression, FoldedValue, isThisExpression } from './fold';\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}\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 { ts } = context;\n const methods = new Map<string, tsTypes.MethodDeclaration>();\n for (const member of classSource.declaration.members) {\n if (\n ts.isMethodDeclaration(member) &&\n ts.isIdentifier(member.name) &&\n !isStatic(ts, member)\n ) {\n methods.set(member.name.text, member);\n }\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 declaration = methods.get(name);\n if (!declaration) {\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 classSource,\n declaration,\n kind,\n customEvents,\n queue\n );\n if (lifecycleKey) {\n lifecycleEntries.push({ key, fn });\n } else {\n entries.push({ key, fn });\n }\n }\n\n return { methods: entries, lifecycle: lifecycleEntries };\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): 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 }) as tsTypes.FunctionExpression;\n };\n const result = ts.transform(functionExpression, [transformerFactory]);\n const transformed = result.transformed[0] as tsTypes.FunctionExpression;\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: { target: ts.ScriptTarget.ESNext, module: ts.ModuleKind.None },\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}\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 // 赋值: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 // 方法体中的模块常量折叠为字面量\n if (\n ts.isIdentifier(node) &&\n !state.locals.has(node.text) &&\n state.consts.has(node.text)\n ) {\n const initializer = state.consts.get(node.text)!;\n if (ts.isCallExpression(initializer) && ts.isIdentifier(initializer.expression)) {\n const factoryName = initializer.expression.text;\n const isRequestFactory = classSource.source.statements.some((statement) =>\n ts.isImportDeclaration(statement) && 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((item) =>\n item.name.text === factoryName && (item.propertyName?.text ?? item.name.text) === 'createRequest')\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 throw mpError(\n classSource.filePath,\n `方法中引用了无法静态求值的模块常量 \"${node.text}\"`\n );\n }\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\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 isStatic(\n ts: typeof tsTypes,\n declaration: tsTypes.MethodDeclaration\n): boolean {\n return (declaration.modifiers ?? []).some(\n (modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword\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 const consts = new Map<string, tsTypes.Expression>();\n for (const statement of classSource.source.statements) {\n if (!context.ts.isVariableStatement(statement)) {\n continue;\n }\n const isConst =\n statement.declarationList.flags & context.ts.NodeFlags.Const;\n if (!isConst) {\n continue;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (\n context.ts.isIdentifier(declaration.name) &&\n declaration.initializer\n ) {\n consts.set(declaration.name.text, declaration.initializer);\n }\n }\n }\n return consts;\n}\n",
|
|
15
|
+
"/**\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 { 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 (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)\n && statement.moduleSpecifier.text === 'transone/request' && !statement.importClause?.isTypeOnly) {\n const clause = statement.importClause;\n if (clause?.name) requestImports.push(`const ${clause.name.text} = getApp().__transoneRequest.default;`);\n const bindings = clause?.namedBindings;\n if (bindings && ts.isNamespaceImport(bindings)) {\n requestImports.push(`const ${bindings.name.text} = getApp().__transoneRequest;`);\n } else if (bindings && ts.isNamedImports(bindings)) {\n for (const item of bindings.elements) {\n if (!item.isTypeOnly) requestImports.push(`const ${item.name.text} = getApp().__transoneRequest[${JSON.stringify(item.propertyName?.text ?? item.name.text)}];`);\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 (ts.isClassDeclaration(statement) && statement.heritageClauses?.some((clause) =>\n clause.types.some((type) => ts.isIdentifier(type.expression)\n && (type.expression.text === 'Component' || type.expression.text.endsWith('Component')))\n )) continue;\n if (ts.isVariableStatement(statement)) {\n const declarations = statement.declarationList.declarations.filter((declaration) =>\n !(declaration.initializer && ts.isCallExpression(declaration.initializer)\n && ts.isIdentifier(declaration.initializer.expression)\n && declaration.initializer.expression.text === 'createApp')\n );\n if (declarations.length === 0) continue;\n kept.push(ts.factory.updateVariableStatement(statement, statement.modifiers,\n ts.factory.updateVariableDeclarationList(statement.declarationList, declarations)));\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 [...requestImports, transpiled.outputText.replace(/^export\\s+/gm, '').trim()].join('\\n');\n}\n",
|
|
16
16
|
"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 inlineModules = 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,\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",
|
|
17
17
|
"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"
|
|
18
18
|
],
|
|
19
|
-
"mappings": "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",
|
|
20
|
-
"debugId": "
|
|
19
|
+
"mappings": "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",
|
|
20
|
+
"debugId": "E75D11FB4BE62D3864756E2164756E21",
|
|
21
21
|
"names": []
|
|
22
22
|
}
|