@faicad/faijs 0.18.3 → 0.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/api/api-namespace.d.ts.map +1 -1
  2. package/dist/api/api-namespace.js +4 -1
  3. package/dist/api/api-namespace.js.map +1 -1
  4. package/dist/api/brep-mirror/joinery-brep.d.ts +1 -1
  5. package/dist/api/brep-mirror/joinery-brep.d.ts.map +1 -1
  6. package/dist/api/brep-mirror/joinery-brep.js +22 -20
  7. package/dist/api/brep-mirror/joinery-brep.js.map +1 -1
  8. package/dist/api/generated/script-face-manifest.d.ts +4 -0
  9. package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
  10. package/dist/api/generated/script-face-manifest.js.map +1 -1
  11. package/dist/api/index.d.ts +4 -0
  12. package/dist/api/index.d.ts.map +1 -1
  13. package/dist/api/index.js +3 -0
  14. package/dist/api/index.js.map +1 -1
  15. package/dist/api/knurl.d.ts.map +1 -1
  16. package/dist/api/knurl.js +1 -0
  17. package/dist/api/knurl.js.map +1 -1
  18. package/dist/api/primitives.d.ts +4 -3
  19. package/dist/api/primitives.d.ts.map +1 -1
  20. package/dist/api/primitives.js +9 -3
  21. package/dist/api/primitives.js.map +1 -1
  22. package/dist/api/profile.d.ts +34 -5
  23. package/dist/api/profile.d.ts.map +1 -1
  24. package/dist/api/profile.js +168 -186
  25. package/dist/api/profile.js.map +1 -1
  26. package/dist/api/punch-hole.d.ts +77 -0
  27. package/dist/api/punch-hole.d.ts.map +1 -0
  28. package/dist/api/punch-hole.js +207 -0
  29. package/dist/api/punch-hole.js.map +1 -0
  30. package/dist/api/sketch-on-face.d.ts +85 -0
  31. package/dist/api/sketch-on-face.d.ts.map +1 -0
  32. package/dist/api/sketch-on-face.js +136 -0
  33. package/dist/api/sketch-on-face.js.map +1 -0
  34. package/dist/api/sketch-on-plane.d.ts +87 -0
  35. package/dist/api/sketch-on-plane.d.ts.map +1 -0
  36. package/dist/api/sketch-on-plane.js +106 -0
  37. package/dist/api/sketch-on-plane.js.map +1 -0
  38. package/dist/api/surface/arg-spec.d.ts +8 -0
  39. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  40. package/dist/api/surface/arg-spec.js.map +1 -1
  41. package/dist/api/transform.d.ts +5 -5
  42. package/dist/api/transform.d.ts.map +1 -1
  43. package/dist/api/transform.js +12 -10
  44. package/dist/api/transform.js.map +1 -1
  45. package/dist/api/xml-dom.d.ts +27 -0
  46. package/dist/api/xml-dom.d.ts.map +1 -0
  47. package/dist/api/xml-dom.js +45 -0
  48. package/dist/api/xml-dom.js.map +1 -0
  49. package/dist/boolean/csg-backend.d.ts +6 -6
  50. package/dist/boolean/csg-backend.d.ts.map +1 -1
  51. package/dist/boolean/csg-backend.js +9 -9
  52. package/dist/boolean/csg-backend.js.map +1 -1
  53. package/dist/boolean/csg-core.d.ts +10 -10
  54. package/dist/boolean/csg-core.d.ts.map +1 -1
  55. package/dist/boolean/csg-core.js +24 -24
  56. package/dist/boolean/csg-core.js.map +1 -1
  57. package/dist/boolean/extrude-helpers.d.ts +8 -8
  58. package/dist/boolean/extrude-helpers.d.ts.map +1 -1
  59. package/dist/boolean/extrude-helpers.js +13 -13
  60. package/dist/boolean/extrude-helpers.js.map +1 -1
  61. package/dist/brep/brep-ops.d.ts +24 -10
  62. package/dist/brep/brep-ops.d.ts.map +1 -1
  63. package/dist/brep/brep-ops.js +46 -18
  64. package/dist/brep/brep-ops.js.map +1 -1
  65. package/dist/brep/brep-topology.d.ts.map +1 -1
  66. package/dist/brep/brep-topology.js +3 -1
  67. package/dist/brep/brep-topology.js.map +1 -1
  68. package/dist/brep/export/export-model.d.ts +79 -0
  69. package/dist/brep/export/export-model.d.ts.map +1 -0
  70. package/dist/brep/export/export-model.js +335 -0
  71. package/dist/brep/export/export-model.js.map +1 -0
  72. package/dist/brep/primitives-brep.d.ts.map +1 -1
  73. package/dist/brep/primitives-brep.js +3 -1
  74. package/dist/brep/primitives-brep.js.map +1 -1
  75. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  76. package/dist/brepkit-kernel/brepkitKernel.js +4 -2
  77. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  78. package/dist/browser-host/csg-worker-protocol.d.ts +3 -3
  79. package/dist/browser-host/csg-worker-protocol.d.ts.map +1 -1
  80. package/dist/browser-host/csg-worker-protocol.js.map +1 -1
  81. package/dist/browser-host/csg-worker.js +3 -3
  82. package/dist/browser-host/csg-worker.js.map +1 -1
  83. package/dist/browser-host/inline-csg-backend.d.ts +3 -3
  84. package/dist/browser-host/inline-csg-backend.d.ts.map +1 -1
  85. package/dist/browser-host/inline-csg-backend.js +3 -3
  86. package/dist/browser-host/inline-csg-backend.js.map +1 -1
  87. package/dist/browser-host/worker-csg-backend.d.ts +3 -3
  88. package/dist/browser-host/worker-csg-backend.d.ts.map +1 -1
  89. package/dist/browser-host/worker-csg-backend.js.map +1 -1
  90. package/dist/cad-runtime/direct-executor.d.ts +4 -0
  91. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  92. package/dist/cad-runtime/direct-executor.js +17 -1
  93. package/dist/cad-runtime/direct-executor.js.map +1 -1
  94. package/dist/cad-runtime/ports.d.ts +3 -3
  95. package/dist/cad-runtime/ports.d.ts.map +1 -1
  96. package/dist/cad-runtime/ports.js.map +1 -1
  97. package/dist/cad-runtime/runtime.d.ts +24 -1
  98. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  99. package/dist/cad-runtime/runtime.js +53 -3
  100. package/dist/cad-runtime/runtime.js.map +1 -1
  101. package/dist/define-op.d.ts +22 -0
  102. package/dist/define-op.d.ts.map +1 -1
  103. package/dist/define-op.js +15 -0
  104. package/dist/define-op.js.map +1 -1
  105. package/dist/env-agnostic.d.ts +7 -7
  106. package/dist/env-agnostic.d.ts.map +1 -1
  107. package/dist/env-agnostic.js +3 -3
  108. package/dist/env-agnostic.js.map +1 -1
  109. package/dist/geometry2d/adapt.d.ts +46 -0
  110. package/dist/geometry2d/adapt.d.ts.map +1 -0
  111. package/dist/geometry2d/adapt.js +41 -0
  112. package/dist/geometry2d/adapt.js.map +1 -0
  113. package/dist/geometry2d/bbox2d.d.ts +82 -0
  114. package/dist/geometry2d/bbox2d.d.ts.map +1 -0
  115. package/dist/geometry2d/bbox2d.js +123 -0
  116. package/dist/geometry2d/bbox2d.js.map +1 -0
  117. package/dist/geometry2d/blueprint-sketcher.d.ts +27 -0
  118. package/dist/geometry2d/blueprint-sketcher.d.ts.map +1 -0
  119. package/dist/geometry2d/blueprint-sketcher.js +29 -0
  120. package/dist/geometry2d/blueprint-sketcher.js.map +1 -0
  121. package/dist/geometry2d/blueprint.d.ts +102 -0
  122. package/dist/geometry2d/blueprint.d.ts.map +1 -0
  123. package/dist/geometry2d/blueprint.js +225 -0
  124. package/dist/geometry2d/blueprint.js.map +1 -0
  125. package/dist/geometry2d/blueprints.d.ts +58 -0
  126. package/dist/geometry2d/blueprints.d.ts.map +1 -0
  127. package/dist/geometry2d/blueprints.js +72 -0
  128. package/dist/geometry2d/blueprints.js.map +1 -0
  129. package/dist/geometry2d/bridge/lift-on-plane.d.ts +50 -0
  130. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -0
  131. package/dist/geometry2d/bridge/lift-on-plane.js +78 -0
  132. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -0
  133. package/dist/geometry2d/bridge/on-surface.d.ts +98 -0
  134. package/dist/geometry2d/bridge/on-surface.d.ts.map +1 -0
  135. package/dist/geometry2d/bridge/on-surface.js +94 -0
  136. package/dist/geometry2d/bridge/on-surface.js.map +1 -0
  137. package/dist/geometry2d/bridge/plane.d.ts +69 -0
  138. package/dist/geometry2d/bridge/plane.d.ts.map +1 -0
  139. package/dist/geometry2d/bridge/plane.js +96 -0
  140. package/dist/geometry2d/bridge/plane.js.map +1 -0
  141. package/dist/geometry2d/canned-blueprints.d.ts +44 -0
  142. package/dist/geometry2d/canned-blueprints.d.ts.map +1 -0
  143. package/dist/geometry2d/canned-blueprints.js +94 -0
  144. package/dist/geometry2d/canned-blueprints.js.map +1 -0
  145. package/dist/geometry2d/compound-blueprint.d.ts +72 -0
  146. package/dist/geometry2d/compound-blueprint.d.ts.map +1 -0
  147. package/dist/geometry2d/compound-blueprint.js +95 -0
  148. package/dist/geometry2d/compound-blueprint.js.map +1 -0
  149. package/dist/geometry2d/curve2d.d.ts +298 -0
  150. package/dist/geometry2d/curve2d.d.ts.map +1 -0
  151. package/dist/geometry2d/curve2d.js +1110 -0
  152. package/dist/geometry2d/curve2d.js.map +1 -0
  153. package/dist/geometry2d/index.d.ts +22 -0
  154. package/dist/geometry2d/index.d.ts.map +1 -0
  155. package/dist/geometry2d/index.js +21 -0
  156. package/dist/geometry2d/index.js.map +1 -0
  157. package/dist/geometry2d/organise.d.ts +28 -0
  158. package/dist/geometry2d/organise.d.ts.map +1 -0
  159. package/dist/geometry2d/organise.js +108 -0
  160. package/dist/geometry2d/organise.js.map +1 -0
  161. package/dist/geometry2d/pen-sketcher.d.ts +365 -0
  162. package/dist/geometry2d/pen-sketcher.d.ts.map +1 -0
  163. package/dist/geometry2d/pen-sketcher.js +520 -0
  164. package/dist/geometry2d/pen-sketcher.js.map +1 -0
  165. package/dist/geometry2d/point.d.ts +44 -0
  166. package/dist/geometry2d/point.d.ts.map +1 -0
  167. package/dist/geometry2d/point.js +57 -0
  168. package/dist/geometry2d/point.js.map +1 -0
  169. package/dist/geometry2d/svg-ellipse.d.ts +74 -0
  170. package/dist/geometry2d/svg-ellipse.d.ts.map +1 -0
  171. package/dist/geometry2d/svg-ellipse.js +163 -0
  172. package/dist/geometry2d/svg-ellipse.js.map +1 -0
  173. package/dist/lang/code-to-args.d.ts +29 -3
  174. package/dist/lang/code-to-args.d.ts.map +1 -1
  175. package/dist/lang/code-to-args.js +41 -2
  176. package/dist/lang/code-to-args.js.map +1 -1
  177. package/dist/lang/codegen.d.ts +45 -1
  178. package/dist/lang/codegen.d.ts.map +1 -1
  179. package/dist/lang/codegen.js +135 -6
  180. package/dist/lang/codegen.js.map +1 -1
  181. package/dist/lang/host-arg.d.ts +6 -0
  182. package/dist/lang/host-arg.d.ts.map +1 -1
  183. package/dist/lang/host-arg.js.map +1 -1
  184. package/dist/lang/metadata-extractor.d.ts +25 -0
  185. package/dist/lang/metadata-extractor.d.ts.map +1 -1
  186. package/dist/lang/metadata-extractor.js +289 -25
  187. package/dist/lang/metadata-extractor.js.map +1 -1
  188. package/dist/lang/parse-error.d.ts +7 -1
  189. package/dist/lang/parse-error.d.ts.map +1 -1
  190. package/dist/lang/parse-error.js.map +1 -1
  191. package/dist/lang/security-scanner.d.ts +9 -1
  192. package/dist/lang/security-scanner.d.ts.map +1 -1
  193. package/dist/lang/security-scanner.js +38 -1
  194. package/dist/lang/security-scanner.js.map +1 -1
  195. package/dist/lang/symbol-table.generated.d.ts +3 -0
  196. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  197. package/dist/lang/symbol-table.generated.js +3 -0
  198. package/dist/lang/symbol-table.generated.js.map +1 -1
  199. package/dist/mesh/io.d.ts +62 -9
  200. package/dist/mesh/io.d.ts.map +1 -1
  201. package/dist/mesh/io.js +124 -17
  202. package/dist/mesh/io.js.map +1 -1
  203. package/dist/mesh/threemf-loader.d.ts +15 -0
  204. package/dist/mesh/threemf-loader.d.ts.map +1 -0
  205. package/dist/mesh/threemf-loader.js +163 -0
  206. package/dist/mesh/threemf-loader.js.map +1 -0
  207. package/dist/mesh/transform.d.ts +2 -2
  208. package/dist/mesh/transform.d.ts.map +1 -1
  209. package/dist/mesh/transform.js +3 -3
  210. package/dist/mesh/transform.js.map +1 -1
  211. package/dist/mesh/types.d.ts +2 -2
  212. package/dist/mesh/types.d.ts.map +1 -1
  213. package/dist/mesh/types.js.map +1 -1
  214. package/dist/node-host/cli.d.ts.map +1 -1
  215. package/dist/node-host/cli.js +53 -26
  216. package/dist/node-host/cli.js.map +1 -1
  217. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  218. package/dist/occt-kernel/occtKernel.js +4 -2
  219. package/dist/occt-kernel/occtKernel.js.map +1 -1
  220. package/dist/occt-kernel/topologyExt.d.ts.map +1 -1
  221. package/dist/occt-kernel/topologyExt.js +4 -1
  222. package/dist/occt-kernel/topologyExt.js.map +1 -1
  223. package/dist/runtime-state.d.ts +18 -0
  224. package/dist/runtime-state.d.ts.map +1 -1
  225. package/dist/runtime-state.js +23 -0
  226. package/dist/runtime-state.js.map +1 -1
  227. package/dist/sdk.d.ts +1 -1
  228. package/dist/sdk.d.ts.map +1 -1
  229. package/dist/sdk.js +1 -1
  230. package/dist/sdk.js.map +1 -1
  231. package/dist/tolerance.d.ts +38 -0
  232. package/dist/tolerance.d.ts.map +1 -0
  233. package/dist/tolerance.js +40 -0
  234. package/dist/tolerance.js.map +1 -0
  235. package/dist/topology/naming/score.js +3 -3
  236. package/dist/topology/naming/score.js.map +1 -1
  237. package/dist/units.d.ts +248 -0
  238. package/dist/units.d.ts.map +1 -0
  239. package/dist/units.js +397 -0
  240. package/dist/units.js.map +1 -0
  241. package/package.json +19 -2
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-extractor.js","sourceRoot":"","sources":["../../src/lang/metadata-extractor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * metadata-extractor — 无 IR 元数据提取器(UI 通道语义源)\n *\n * 方案:docs/plans/2026-09-06-no-ir-dual-channel-runtime.md §4.1(D3)\n *\n * 定位:从 .fai.js 源码(任意合法 JS)提取 **UI 通道需要的全部元数据**。\n * 输入 = 源码文本;输出 = UiMetadata。不生成可执行代码、不求值、不参与执行、\n * 不建执行中介 IR(已删除,只产宿主面类型)。\n *\n * lines 面 = StatementSummary[](与现状 analyzeCode 产出逐字相等,A-16 对拍\n * 锁定;唯一语义差异:id = `'s' + lineNo`,append 场景稳定)。行分类:\n * op 行 → lines;param 行 → params;import 行 → imports;function 行 →\n * functions;循环/条件/switch 块 → blocks(只读节点,不分析内部语义,R8)。\n *\n * 本文件不 import parser.ts/compile.ts(P6 删除 IR 后唯一存活解析侧)。\n */\n\nimport { parse as acornParse } from 'acorn'\nimport type { StatementSummary } from './statement-summary'\nimport type { ScriptMetaIR, TerminalShape } from './types'\nimport { asStmtId, asPartName, type PartName, type StmtId } from '../identity'\nimport type { HostArg, HostCallRef, HostRef } from './host-arg'\nimport { isHostVarRef, isHostParamRef, isHostCallRef, isHostExprRef } from './host-arg'\nimport { ParseError } from './parse-error'\nimport { fnv1a32 } from './fnv-hash'\nimport { assertSecure, type SecurityPolicy } from './security-scanner'\n\n// ── UiMetadata 类型(§4.1) ──\n\n/** 参数表条目(参数面板:const X = <字面量> → 名字/值/是否计算表达式) */\nexport interface ParamEntry {\n name: string\n lineNo: number\n /** RHS 是纯字面量时为其值;表达式/引用(computed=true)时 value 缺省 */\n value?: unknown\n type: 'number' | 'vec3' | 'bool' | 'enum'\n /** RHS 是表达式/参数引用 → 面板只读 */\n computed: boolean\n}\n\n/**\n * 单个参数槽的源码来源信息(UI 通道新增,非 IR)。\n *\n * Timeline 参数表达式编辑方案(docs/plans/2026-09-08-timeline-param-expression-editing.md):\n * 每个参数槽携带自己的源码区间,编辑 = 精确替换该区间(`editArgSource`),\n * 不重印整行。path 对宿主是不透明标识符——宿主只能从本记录读取后原样回传。\n */\nexport interface ArgSource {\n /** 所属语句 id('s' + lineNo);参数行的 rhs 槽同样使用 's' + lineNo */\n stmtId: StmtId\n /** 槽位路径(见 plans 文档 §4.2.1 的路径命名表;对宿主不透明) */\n path: string\n /** 该槽的源码原文(字面量 → `40`;表达式 → `w * 2`;引用 → `w`) */\n text: string\n /** 字符区间 [start, end),相对 extractMetadata 的入参 code(含 codeOffset 归一化) */\n start: number\n end: number\n /** 依赖的参数名(命中 paramNames;表达式里的参数引用) */\n params: string[]\n /** 依赖的其它变量名(命中 declared,含 op 产出 / 派生常量) */\n refs: string[]\n /** 非平凡表达式(非字面量,负字面量视为字面量)→ UI 显示 fx 徽标 */\n isExpression: boolean\n}\n\n/** import 表条目(相对 specifier → moduleKey,裸 specifier → libLoader) */\nexport interface ImportEntry {\n lineNo: number\n specifier: string\n kind: 'named' | 'namespace' | 'default'\n bindings: string[]\n localName?: string\n packageName?: string\n moduleKey?: string\n}\n\n/** 函数表条目(本机函数) */\nexport interface FunctionEntry {\n name: string\n lineNo: number\n params: string[]\n /** 函数体原文区间(只读显示用;坐标相对原始 code 文本) */\n bodyRange: { start: number; end: number }\n /** 函数体原文(花括号内) */\n body: string\n bodyHash: string\n}\n\n/** 块结构条目(只读节点,R8) */\nexport interface BlockEntry {\n lineNo: number\n kind: 'loop' | 'condition' | 'switch' | 'other'\n astKind: string\n /** 块源码原文(含闭合括号的整段) */\n source: string\n range: { start: number; end: number }\n}\n\n/** keep 指令条目(行级,存活判定静态输入;hidden=true 为 keepHidden) */\nexport interface KeepEntry {\n target: string\n hidden: boolean\n}\n\n/** 元数据提取器输出:UI 通道的完整元数据面(§4.1)。 */\nexport interface UiMetadata {\n lines: StatementSummary[]\n params: ParamEntry[]\n imports: ImportEntry[]\n functions: FunctionEntry[]\n blocks: BlockEntry[]\n keep: Map<number, KeepEntry[]>\n meta?: ScriptMetaIR\n terminalShapes?: TerminalShape[]\n /**\n * 全语句参数槽的源码来源(按语句顺序;参数行的 RHS 槽 path 以 'rhs' 开头)。\n * 新增字段:P0-B(见 plans/2026-09-08-timeline-param-expression-editing.md)。\n */\n argSources: ArgSource[]\n /**\n * 本脚本内可被表达式引用的名字(词法序去重):\n * paramNames ∪ declared ∪ nsBindings ∪ localFnParams。\n * `validateExpression` / `editArgSource` 用它做 E_REFERENCE 判定。\n */\n names: string[]\n}\n\n// ── AST 辅助 ──\n\ntype ASTNode = any\n\nconst CONTROL_FLOW_TYPES = new Set([\n 'IfStatement', 'ForStatement', 'ForInStatement', 'ForOfStatement',\n 'WhileStatement', 'DoWhileStatement', 'SwitchStatement', 'TryStatement',\n 'ThrowStatement', 'BreakStatement', 'ContinueStatement', 'LabeledStatement',\n 'WithStatement', 'BlockStatement',\n])\n\nfunction lineOf(node: ASTNode): number {\n return node?.loc?.start?.line ?? 1\n}\n\nfunction derivePackageName(specifier: string): string {\n if (specifier.startsWith('@')) {\n const parts = specifier.split('/')\n return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : specifier\n }\n return specifier.split('/')[0]\n}\n\n// ── 提取器符号表 ──\n\n/**\n * 提取器符号表:声明过的名字与绑定关系(参数、变量、命名空间、函数形参、keep 指令),\n * 供解析过程中判定标识符归属并做常量折叠。\n */\nexport interface SymbolTable {\n /** 参数名(const X = <literal>) */\n paramNames: Set<string>\n /** 参数名 → 字面量值(折叠依据) */\n paramValues: Map<string, unknown>\n /** 已声明变量名(参数 + op outputs + 函数名;含宽松透传名) */\n declared: Set<string>\n /** 命名空间绑定名 → packageName(import * as ns) */\n nsBindings: Map<string, string>\n /** 本机函数名 → 形参 */\n localFnParams: Map<string, string[]>\n /** 缺省命名空间绑定名('cad') */\n defaultNsName: string\n /** keep 指令表(lineNo → 调用点条目;行级存活判定静态输入) */\n keep: Map<number, KeepEntry[]>\n}\n\n// ── 常量折叠(与现状 parser.tryFoldConstExpr 同构;仅字面量 + 参数) ──\n\ntype FoldResult =\n | { ok: true; value: unknown; usedParam: boolean }\n | { ok: false }\n\nfunction numFold(v: number, usedParam = false): FoldResult {\n return Number.isFinite(v) ? { ok: true, value: v, usedParam } : { ok: false }\n}\n\nfunction looseEq(a: unknown, b: unknown): boolean {\n let x: unknown = a\n let y: unknown = b\n if (typeof x === 'boolean') x = x ? 1 : 0\n if (typeof y === 'boolean') y = y ? 1 : 0\n if (typeof x === 'number' && typeof y === 'string') return x === Number(y)\n if (typeof x === 'string' && typeof y === 'number') return Number(x) === y\n if (x === null || y === null) return x === null && y === null\n return x === y\n}\n\nfunction tryFoldConstExpr(node: ASTNode, symbols: SymbolTable): FoldResult {\n switch (node.type) {\n case 'Literal':\n return { ok: true, value: node.value, usedParam: false }\n\n case 'Identifier': {\n if (!symbols.paramNames.has(node.name)) return { ok: false }\n const v = symbols.paramValues.get(node.name)\n return v === undefined ? { ok: false } : { ok: true, value: v, usedParam: true }\n }\n\n case 'UnaryExpression': {\n const operand = tryFoldConstExpr(node.argument, symbols)\n if (!operand.ok) return { ok: false }\n const v = operand.value\n switch (node.operator) {\n case '-': return typeof v === 'number' ? numFold(-v, operand.usedParam) : { ok: false }\n case '+': return typeof v === 'number' ? numFold(+v, operand.usedParam) : { ok: false }\n case '!': return { ok: true, value: !v, usedParam: operand.usedParam }\n case '~': return typeof v === 'number' ? { ok: true, value: ~v, usedParam: operand.usedParam } : { ok: false }\n case 'typeof': return { ok: true, value: typeof v, usedParam: operand.usedParam }\n default: return { ok: false }\n }\n }\n\n case 'BinaryExpression': {\n const left = tryFoldConstExpr(node.left, symbols)\n if (!left.ok) return { ok: false }\n const right = tryFoldConstExpr(node.right, symbols)\n if (!right.ok) return { ok: false }\n const a = left.value\n const b = right.value\n const usedParam = left.usedParam || right.usedParam\n const numBin = (op: (x: number, y: number) => number): FoldResult =>\n typeof a === 'number' && typeof b === 'number' ? numFold(op(a, b), usedParam) : { ok: false }\n const cmpBin = (op: (x: number | string, y: number | string) => boolean): FoldResult => {\n if (typeof a === 'number' && typeof b === 'number') return { ok: true, value: op(a, b), usedParam }\n if (typeof a === 'string' && typeof b === 'string') return { ok: true, value: op(a, b), usedParam }\n return { ok: false }\n }\n switch (node.operator) {\n case '+': {\n if (typeof a === 'number' && typeof b === 'number') return numFold(a + b, usedParam)\n if (typeof a === 'string' || typeof b === 'string') return { ok: true, value: String(a) + String(b), usedParam }\n return { ok: false }\n }\n case '-': return numBin((x, y) => x - y)\n case '*': return numBin((x, y) => x * y)\n case '/': return numBin((x, y) => x / y)\n case '%': return numBin((x, y) => x % y)\n case '**': return numBin((x, y) => x ** y)\n case '<': return cmpBin((x, y) => x < y)\n case '<=': return cmpBin((x, y) => x <= y)\n case '>': return cmpBin((x, y) => x > y)\n case '>=': return cmpBin((x, y) => x >= y)\n case '==': return { ok: true, value: looseEq(a, b), usedParam }\n case '!=': return { ok: true, value: !looseEq(a, b), usedParam }\n case '===': return { ok: true, value: a === b, usedParam }\n case '!==': return { ok: true, value: a !== b, usedParam }\n default: return { ok: false }\n }\n }\n\n case 'LogicalExpression': {\n const left = tryFoldConstExpr(node.left, symbols)\n if (!left.ok) return { ok: false }\n const right = tryFoldConstExpr(node.right, symbols)\n if (!right.ok) return { ok: false }\n const a = left.value\n const usedParam = left.usedParam || right.usedParam\n switch (node.operator) {\n case '&&': return { ok: true, value: a ? right.value : left.value, usedParam }\n case '||': return { ok: true, value: a ? left.value : right.value, usedParam }\n case '??': return { ok: true, value: a === null ? right.value : left.value, usedParam }\n default: return { ok: false }\n }\n }\n\n case 'TemplateLiteral': {\n const parts: string[] = []\n const quasis = node.quasis as ASTNode[]\n const exprs = node.expressions as ASTNode[]\n let usedParam = false\n for (let i = 0; i < quasis.length; i++) {\n const cooked = quasis[i].value?.cooked\n parts.push(cooked ?? '')\n if (i < exprs.length) {\n const r = tryFoldConstExpr(exprs[i], symbols)\n if (!r.ok) return { ok: false }\n usedParam = usedParam || r.usedParam\n parts.push(String(r.value))\n }\n }\n return { ok: true, value: parts.join(''), usedParam }\n }\n\n case 'ConditionalExpression': {\n const test = tryFoldConstExpr(node.test, symbols)\n if (!test.ok) return { ok: false }\n const chosen = tryFoldConstExpr(test.value ? node.consequent : node.alternate, symbols)\n if (!chosen.ok) return { ok: false }\n return { ok: true, value: chosen.value, usedParam: test.usedParam || chosen.usedParam }\n }\n\n default:\n return { ok: false }\n }\n}\n\n// ── Expr 白名单(与现状 parser.isExprWhitelist 同构) ──\n//\n// 本函数与 collectExprIdentifiers 是「唯一实现」——expr-validate.ts / source-edit.ts\n// 直接 import 复用,不复制(见 plans/2026-09-08-timeline-param-expression-editing.md §3.4.1)。\n\n/**\n * <Ns>.fn(...) 等「白名单表达式」结构判定(无可选链、无 spread、成员非计算)。\n * @param node 待判定的表达式 AST 节点;nil 或非法输入按非白名单处理。\n * @returns 节点自身及其全部子表达式均在白名单结构内 → true,否则 false。\n */\nexport function isExprWhitelist(node: ASTNode): boolean {\n if (!node || typeof node !== 'object') return false\n switch (node.type) {\n case 'Literal':\n case 'Identifier':\n return true\n case 'UnaryExpression':\n return isExprWhitelist(node.argument)\n case 'BinaryExpression':\n case 'LogicalExpression':\n return isExprWhitelist(node.left) && isExprWhitelist(node.right)\n case 'ConditionalExpression':\n return isExprWhitelist(node.test) && isExprWhitelist(node.consequent) && isExprWhitelist(node.alternate)\n case 'ArrayExpression':\n return node.elements.every((el: ASTNode) => el !== null && el !== undefined && isExprWhitelist(el))\n case 'MemberExpression':\n if (node.optional) return false\n if (!isExprWhitelist(node.object)) return false\n return node.computed ? isExprWhitelist(node.property) : true\n case 'CallExpression': {\n if (node.optional) return false\n if (!isExprWhitelist(node.callee)) return false\n return (node.arguments as ASTNode[]).every((a) => a.type !== 'SpreadElement' && isExprWhitelist(a))\n }\n default:\n return false\n }\n}\n\n/**\n * 递归收集表达式引用:参数 → params;已声明变量 → refs;未知 → E_REFERENCE。\n *\n * opts(可选扩展;缺省时行为与历史完全一致):\n * - `lenient: true`:未知标识符不抛错(静默跳过)——ArgSource 记录路径用,\n * 保证提取本身绝不抛新错;\n * - `defaultNs`:把默认命名空间('cad')视同 nsBindings 成员——`cad.faceNormal(p)`\n * 作为参数槽整条记录时,不会把 'cad' 当作未知标识符。\n *\n * 本函数与 isExprWhitelist 是「唯一实现」——expr-validate.ts / source-edit.ts\n * 直接 import 复用,不复制(见 plans/2026-09-08-timeline-param-expression-editing.md §3.4.1)。\n *\n * @param node 表达式的 AST 根节点;nil 或非对象直接返回。\n * @param symbols 提取器符号表(判定 Identifier 是参数/已声明/未知)。\n * @param line 当前语句行号(未知标识符报错时的行号)。\n * @param params 收集命中参数名的输出集合。\n * @param refs 收集命中已声明变量的输出集合。\n * @param opts 可选扩展;`lenient` 静默跳过未知标识符,`defaultNs` 把默认命名空间视同绑定成员。\n */\nexport function collectExprIdentifiers(\n node: ASTNode,\n symbols: SymbolTable,\n line: number,\n params: Set<string>,\n refs: Set<string>,\n opts?: { lenient?: boolean; defaultNs?: string },\n): void {\n if (!node || typeof node !== 'object') return\n switch (node.type) {\n case 'Identifier': {\n const name = node.name\n if (symbols.paramNames.has(name)) {\n params.add(name)\n } else if (symbols.declared.has(name)) {\n refs.add(name)\n } else if (opts?.lenient === true) {\n // lenient:未知标识符跳过(ArgSource 记录路径,保证提取不抛新错)\n } else {\n throw new ParseError(`unknown identifier \"${name}\" in expression`, line, 'E_REFERENCE')\n }\n return\n }\n case 'UnaryExpression':\n collectExprIdentifiers(node.argument, symbols, line, params, refs, opts)\n return\n case 'BinaryExpression':\n case 'LogicalExpression':\n collectExprIdentifiers(node.left, symbols, line, params, refs, opts)\n collectExprIdentifiers(node.right, symbols, line, params, refs, opts)\n return\n case 'ConditionalExpression':\n collectExprIdentifiers(node.test, symbols, line, params, refs, opts)\n collectExprIdentifiers(node.consequent, symbols, line, params, refs, opts)\n collectExprIdentifiers(node.alternate, symbols, line, params, refs, opts)\n return\n case 'ArrayExpression':\n for (const el of node.elements) collectExprIdentifiers(el, symbols, line, params, refs, opts)\n return\n case 'ObjectExpression':\n for (const prop of node.properties) {\n if (prop?.type !== 'Property') continue\n collectExprIdentifiers(prop.value, symbols, line, params, refs, opts)\n }\n return\n case 'TemplateLiteral':\n for (const expr of node.expressions) collectExprIdentifiers(expr, symbols, line, params, refs, opts)\n return\n case 'MemberExpression': {\n // 命名空间绑定(import * as cfg / 模块命名空间)的成员 cfg.OutX:对象名是外部\n // 命名空间,不收集为变量引用(§4.1 HostArg 引用形态;求值在内部 ctx.cfg 侧)。\n // opts.defaultNs(缺省命名空间 'cad')同样跳过——cad.faceNormal(p) 整条作为\n // 参数槽记录时不会把 'cad' 当未知标识符。\n const obj = node.object\n if (obj?.type === 'Identifier' && (symbols.nsBindings.has(obj.name) || obj.name === opts?.defaultNs)) {\n if (node.computed) collectExprIdentifiers(node.property, symbols, line, params, refs, opts)\n return\n }\n collectExprIdentifiers(node.object, symbols, line, params, refs, opts)\n if (node.computed) collectExprIdentifiers(node.property, symbols, line, params, refs, opts)\n return\n }\n case 'CallExpression':\n collectExprIdentifiers(node.callee, symbols, line, params, refs, opts)\n for (const a of node.arguments as ASTNode[]) {\n collectExprIdentifiers(a.type === 'SpreadElement' ? a.argument : a, symbols, line, params, refs, opts)\n }\n return\n default:\n return\n }\n}\n\n// ── 值解析 → HostArg(与现状 parseValueExpr/parsePositionalArgs 语义同构) ──\n\ninterface ValueParseCtx {\n symbols: SymbolTable\n /** 宽松模式(append 单行提取/引用前段变量):未知标识符透传为外部名 */\n looseVars: boolean\n /** 宽松本机调用(codeToArgs):裸 callee 不在函数集也放行 */\n looseLocalCalls: boolean\n sourceText: string\n /** 折叠/computed 累积标记:本语句是否引用了参数表达式/spread(hasComputedArgs) */\n computed: { value: boolean }\n /** P0-B:当前语句 id('s' + 归一化行号;argSources 记录的 stmtId) */\n stmtId: StmtId\n /** P0-B:parseCode 的 codeOffset(ArgSource.start/end 归一化到原 code 坐标) */\n codeOffset: number\n /** P0-B:参数槽源码记录累积(语句顺序追加) */\n argSources: ArgSource[]\n}\n\n/** 是否非平凡表达式:非 Literal(负字面量视为字面量)→ UI 显示 fx 徽标 */\nfunction isExpressionNode(node: ASTNode): boolean {\n if (!node || node.type === 'Literal') return false\n if (node.type === 'UnaryExpression' && node.operator === '-' && node.argument?.type === 'Literal') return false\n return true\n}\n\n/**\n * 在折叠之前记录一条参数槽(ArgSource)。\n *\n * - start/end 相对 extractMetadata 的入参 code(减 codeOffset,含封装归一化);\n * - text = parseCode 原文切片(E_RANGE_STALE 用 `code.slice(start,end) === text` 断言);\n * - params/refs 用 collectExprIdentifiers 的 lenient 模式(未知标识符跳过,\n * 保证提取不抛新错——与 main parse 的 E_REFERENCE 例外保持解耦)。\n */\nfunction recordArgSource(node: ASTNode, ctx: ValueParseCtx, path: string): void {\n if (!node || typeof node !== 'object' || node.start == null || node.end == null || node.end < node.start) return\n const isExpr = isExpressionNode(node)\n const params = new Set<string>()\n const refs = new Set<string>()\n if (isExpr) {\n collectExprIdentifiers(node, ctx.symbols, lineOf(node), params, refs, {\n lenient: true,\n defaultNs: ctx.symbols.defaultNsName,\n })\n }\n ctx.argSources.push({\n stmtId: ctx.stmtId,\n path,\n text: ctx.sourceText.slice(node.start, node.end),\n start: node.start - ctx.codeOffset,\n end: node.end - ctx.codeOffset,\n params: [...params],\n refs: [...refs],\n isExpression: isExpr,\n })\n}\n\nfunction parseValueExpr(node: ASTNode, ctx: ValueParseCtx, path: string | null): HostArg {\n if (!node) throw new ParseError('missing value expression', 1, 'E_VALUE')\n const line = lineOf(node)\n\n // P0-B:在折叠之前记录一条 ArgSource(path === null 忽略——参数行 RHS 由\n // recordArgSource 显式记录,不再双记)。\n if (path !== null) recordArgSource(node, ctx, path)\n\n // 折叠优先:Unary/Binary/Logical/Template/Conditional 可静态折叠(字面量 + 参数)\n if (\n node.type === 'UnaryExpression' ||\n node.type === 'BinaryExpression' ||\n node.type === 'LogicalExpression' ||\n node.type === 'TemplateLiteral' ||\n node.type === 'ConditionalExpression'\n ) {\n const r = tryFoldConstExpr(node, ctx.symbols)\n if (r.ok) {\n // F1-E1:仅折叠表达式引用参数才标 computed;纯字面量(负字面量)不标\n if (r.usedParam) ctx.computed.value = true\n return r.value as unknown as HostArg\n }\n // 折叠失败且 ∈ 白名单 → expr-ref(运行时求值)\n if (isExprWhitelist(node)) {\n const params = new Set<string>()\n const refs = new Set<string>()\n collectExprIdentifiers(node, ctx.symbols, line, params, refs)\n ctx.computed.value = true\n return {\n kind: 'expr-ref',\n text: ctx.sourceText.slice(node.start, node.end),\n refs: [...refs],\n params: [...params],\n } as unknown as HostArg\n }\n throw new ParseError(\n `cannot statically evaluate ${node.type} in args (must reference declared params or literals)`,\n line,\n 'E_VALUE',\n )\n }\n\n switch (node.type) {\n case 'Literal':\n return node.value as HostArg\n\n case 'Identifier': {\n const name = node.name\n if (ctx.symbols.paramNames.has(name)) {\n return { kind: 'param-ref', name } as unknown as HostArg\n }\n if (ctx.symbols.declared.has(name)) {\n return { kind: 'var-ref', name } as unknown as HostArg\n }\n if (ctx.looseVars) {\n ctx.symbols.declared.add(name)\n return { kind: 'var-ref', name } as unknown as HostArg\n }\n throw new ParseError(\n `unknown identifier \"${name}\" in args value (not a declared param or variable)`,\n line,\n 'E_REFERENCE',\n )\n }\n\n case 'ArrayExpression': {\n const out: HostArg[] = []\n for (let i = 0; i < node.elements.length; i++) {\n const el = node.elements[i]\n if (el === null || el === undefined) {\n throw new ParseError('array holes are not supported in args', line, 'E_VALUE')\n }\n const childPath = path === null ? null : `${path}[${i}]`\n if (el.type === 'SpreadElement') {\n if (childPath !== null) recordArgSource(el.argument, ctx, childPath)\n const r = tryFoldConstExpr(el.argument, ctx.symbols)\n if (!r.ok || !Array.isArray(r.value)) {\n throw new ParseError(\n 'cannot statically evaluate spread in args (expected an array param or literal)',\n line,\n 'E_VALUE',\n )\n }\n ctx.computed.value = true\n out.push(...(r.value as HostArg[]))\n continue\n }\n out.push(parseValueExpr(el, ctx, childPath))\n }\n return out as unknown as HostArg\n }\n\n case 'ObjectExpression':\n return parseObjectValue(node, ctx, path)\n\n case 'CallExpression': {\n const callee = node.callee\n // <ns>.<fn>(...) → call-ref(只读查询)\n if (\n callee?.type === 'MemberExpression' &&\n callee.object?.type === 'Identifier' &&\n (ctx.symbols.nsBindings.has(callee.object.name) ||\n callee.object.name === ctx.symbols.defaultNsName) &&\n callee.property?.type === 'Identifier'\n ) {\n const nsName = callee.object.name\n const args = (node.arguments as ASTNode[]).map((a, i) =>\n parseValueExpr(a, ctx, path === null ? null : `${path}[${i}]`))\n const callRef: HostCallRef = {\n kind: 'call-ref',\n callee: callee.property.name,\n args,\n ...(nsName !== ctx.symbols.defaultNsName ? { namespace: nsName } : {}),\n }\n return callRef as unknown as HostArg\n }\n if (isExprWhitelist(node)) {\n const params = new Set<string>()\n const refs = new Set<string>()\n collectExprIdentifiers(node, ctx.symbols, line, params, refs)\n ctx.computed.value = true\n return {\n kind: 'expr-ref',\n text: ctx.sourceText.slice(node.start, node.end),\n refs: [...refs],\n params: [...params],\n } as unknown as HostArg\n }\n throw new ParseError(\n 'nested calls in args must be <ns>.<ident>(...) or a whitelisted expression',\n line,\n 'E_VALUE',\n )\n }\n\n case 'MemberExpression': {\n if (isExprWhitelist(node)) {\n const params = new Set<string>()\n const refs = new Set<string>()\n collectExprIdentifiers(node, ctx.symbols, line, params, refs)\n ctx.computed.value = true\n return {\n kind: 'expr-ref',\n text: ctx.sourceText.slice(node.start, node.end),\n refs: [...refs],\n params: [...params],\n } as unknown as HostArg\n }\n throw new ParseError('unsupported member expression in args: optional chaining is not allowed', line, 'E_VALUE')\n }\n\n default:\n throw new ParseError(`unsupported value expression: ${node.type}`, line, 'E_VALUE')\n }\n}\n\n/** 对象字面量参数解析 + 参数槽记录(属性值路径 = `<base>.<key>`;shorthand 以来源名为 text 记一条)。 */\nfunction parseObjectValue(node: ASTNode, ctx: ValueParseCtx, path: string | null): HostArg {\n const line = lineOf(node)\n const obj: Record<string, HostArg> = {}\n for (const prop of node.properties) {\n if (prop.type === 'SpreadElement') {\n const r = tryFoldConstExpr(prop.argument, ctx.symbols)\n if (!r.ok || typeof r.value !== 'object' || r.value === null || Array.isArray(r.value)) {\n throw new ParseError('cannot statically evaluate object spread in args', line, 'E_VALUE')\n }\n ctx.computed.value = true\n Object.assign(obj, r.value as Record<string, unknown>)\n continue\n }\n const key = prop.key?.type === 'Identifier' ? prop.key.name\n : prop.key?.type === 'Literal' ? String(prop.key.value)\n : null\n if (key === null) throw new ParseError('invalid object key', line, 'E_VALUE')\n if (prop.shorthand) {\n // shorthand { size } → { size: param-ref };已声明变量 shorthand 现状报 E_REFERENCE\n const name = key\n let slotParams: string[] = []\n let slotRefs: string[] = []\n if (ctx.symbols.paramNames.has(name)) {\n obj[key] = { kind: 'param-ref', name } as unknown as HostArg\n slotParams = [name]\n } else if (ctx.looseVars) {\n ctx.symbols.declared.add(name)\n obj[key] = { kind: 'var-ref', name } as unknown as HostArg\n slotRefs = [name]\n } else {\n throw new ParseError(\n `unknown shorthand identifier \"${key}\" (not a declared param)`,\n line,\n 'E_REFERENCE',\n )\n }\n // P0-B:shorthand 槽(以属性名 == 变量名作 text,path = <base>.<key>,isExpression=false)\n if (path !== null) {\n ctx.argSources.push({\n stmtId: ctx.stmtId,\n path: `${path}.${key}`,\n text: ctx.sourceText.slice(prop.start, prop.end),\n start: prop.start - ctx.codeOffset,\n end: prop.end - ctx.codeOffset,\n params: slotParams,\n refs: slotRefs,\n isExpression: false,\n })\n }\n } else {\n obj[key] = parseValueExpr(prop.value, ctx, path === null ? null : `${path}.${key}`)\n }\n }\n return obj as unknown as HostArg\n}\n\n/** 位置实参解析(与现状 parsePositionalArgs 同构);P0-B 附带参数槽记录(pathBase 缺省 'positional')。 */\nfunction parsePositionalArgs(\n argNodes: ASTNode[],\n ctx: ValueParseCtx,\n line: number,\n pathBase = 'positional',\n): HostArg[] {\n const out: HostArg[] = []\n for (let i = 0; i < argNodes.length; i++) {\n const argNode = argNodes[i]\n const isLast = i === argNodes.length - 1\n const isTrailingOptions = isLast && argNode?.type === 'ObjectExpression'\n if (isTrailingOptions) {\n // 尾随选项对象:只按 'args.<key>' 记录属性值,不把整对象再记一个 positional 槽\n out.push(parseObjectValue(argNode, ctx, 'args'))\n continue\n }\n const slotPath = `${pathBase}[${i}]`\n if (argNode.type === 'Identifier') {\n recordArgSource(argNode, ctx, slotPath)\n const name = argNode.name\n if (ctx.symbols.declared.has(name)) {\n out.push({ kind: 'var-ref', name } as unknown as HostArg)\n continue\n }\n if (ctx.looseVars) {\n ctx.symbols.declared.add(name)\n out.push({ kind: 'var-ref', name } as unknown as HostArg)\n continue\n }\n throw new ParseError(`unknown variable \"${name}\" in inputs`, lineOf(argNode), 'E_REFERENCE')\n }\n if (argNode.type === 'SpreadElement') {\n recordArgSource(argNode.argument, ctx, slotPath)\n const r = tryFoldConstExpr(argNode.argument, ctx.symbols)\n if (!r.ok || !Array.isArray(r.value)) {\n throw new ParseError(\n 'cannot statically evaluate spread in arguments (must reference an array param or literal)',\n line,\n 'E_VALUE',\n )\n }\n ctx.computed.value = true\n out.push(...(r.value as HostArg[]))\n continue\n }\n out.push(parseValueExpr(argNode, ctx, slotPath))\n }\n return out\n}\n\n// ── 行摘要组装 ──\n\n/** 位置实参末位是否为纯数据对象(非引用形态)→ args 投影真源。\n * 与现状 splitPositionalOptions 同构:引用形态 = var-ref/param-ref/call-ref/expr-ref\n * (kind 值 ∈ HOST_REF_KINDS 且完整匹配变体形状);字面量对象的 kind 字段是普通数据。 */\nfunction isPlainDataObject(v: unknown): v is Record<string, HostArg> {\n return (\n v !== null &&\n typeof v === 'object' &&\n !Array.isArray(v) &&\n !isHostVarRef(v as HostRef) &&\n !isHostParamRef(v as HostRef) &&\n !isHostCallRef(v as HostRef) &&\n !isHostExprRef(v as HostRef)\n )\n}\n\ninterface LineSummarySpec {\n callee: string\n line: number\n ctx: ValueParseCtx\n /** 位置实参槽(含尾随对象;positional 与 HostArg 面同构) */\n positional: HostArg[]\n namespace?: string\n local?: boolean\n receiver?: string\n outputs: string[]\n outputKeys?: string[]\n hasAssignment: boolean\n}\n\n/**\n * 从单条调用组装 StatementSummary:\n * - positional = 全量位置实参(末位纯对象保留,与现状一致)\n * - args = 末位纯对象的投影(keep/keepHidden 键原样保留——compile 期才剥离)\n */\nfunction buildLineSummary(spec: LineSummarySpec): StatementSummary {\n const last = spec.positional[spec.positional.length - 1]\n const args: Record<string, HostArg> =\n isPlainDataObject(last) ? { ...(last as Record<string, HostArg>) } : {}\n\n const refs = new Set<string>()\n for (const a of spec.positional) collectRefsFromHostArg(a, refs)\n if (spec.receiver !== undefined) refs.add(spec.receiver)\n\n const summary: StatementSummary = {\n id: asStmtId(`s${spec.line}`),\n callee: spec.callee,\n ...(spec.local\n ? { local: true }\n : spec.namespace !== undefined\n ? {\n namespace: spec.namespace,\n ...(spec.ctx.symbols.nsBindings.get(spec.namespace) !== undefined\n ? { packageName: spec.ctx.symbols.nsBindings.get(spec.namespace) }\n : {}),\n }\n : {}),\n ...(spec.receiver !== undefined ? { receiver: asPartName(spec.receiver) } : {}),\n positional: spec.positional,\n args,\n outputs: spec.outputs.map((o) => asPartName(o)),\n ...(spec.outputKeys !== undefined ? { outputKeys: spec.outputKeys } : {}),\n hasAssignment: spec.hasAssignment,\n hasComputedArgs: spec.ctx.computed.value,\n line: spec.line,\n }\n if (refs.size > 0) summary.refs = [...refs]\n else summary.refs = []\n return summary\n}\n\nfunction collectRefsFromHostArg(value: HostArg, out: Set<string>): void {\n if (value === null || value === undefined) return\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return\n const kind = (value as { kind?: string }).kind\n if (kind === 'var-ref') {\n out.add((value as { name: string }).name)\n return\n }\n if (kind === 'param-ref') {\n out.add((value as { name: string }).name)\n return\n }\n if (kind === 'call-ref') {\n for (const a of (value as HostCallRef).args) collectRefsFromHostArg(a, out)\n return\n }\n if (kind === 'expr-ref') {\n const e = value as { params: string[]; refs: string[] }\n for (const p of e.params) out.add(p)\n for (const r of e.refs) out.add(r)\n return\n }\n if (Array.isArray(value)) {\n for (const v of value) collectRefsFromHostArg(v as HostArg, out)\n return\n }\n if (typeof value === 'object') {\n for (const v of Object.values(value as Record<string, HostArg>)) collectRefsFromHostArg(v, out)\n }\n}\n\n// ── return / meta 解析 ──\n\nfunction parseReturnStatement(\n node: ASTNode,\n ctx: ValueParseCtx,\n): { meta?: ScriptMetaIR; terminalShapes?: TerminalShape[] } {\n const line = lineOf(node)\n const arg = node.argument\n if (!arg) return {}\n\n const resolveVar = (idNode: ASTNode): PartName => {\n if (idNode?.type !== 'Identifier') throw new ParseError('unknown variable in return', line)\n const name = idNode.name\n if (!ctx.symbols.declared.has(name) && !ctx.symbols.paramNames.has(name)) {\n throw new ParseError(`unknown variable \"${name}\" in return`, line)\n }\n return asPartName(name)\n }\n\n const parseOne = (objNode: ASTNode): { id: PartName | null; meta?: ScriptMetaIR } => {\n let id: PartName | null = null\n const meta: ScriptMetaIR = {}\n for (const prop of objNode.properties) {\n const key = prop.key?.type === 'Identifier' ? prop.key.name\n : prop.key?.type === 'Literal' ? String(prop.key.value)\n : null\n if (!key) continue\n if (key === 'shape') {\n if (prop.value?.type === 'Identifier') id = resolveVar(prop.value)\n } else if (key === 'name') {\n if (prop.value?.type === 'Literal') meta.name = prop.value.value as string\n } else if (key === 'color') {\n if (prop.value?.type === 'Literal') {\n if (!meta.appearance) meta.appearance = {}\n meta.appearance.color = prop.value.value as string\n }\n } else if (key === 'metalness') {\n if (prop.value?.type === 'Literal') {\n if (!meta.appearance) meta.appearance = {}\n meta.appearance.metalness = prop.value.value as number\n }\n } else if (key === 'roughness') {\n if (prop.value?.type === 'Literal') {\n if (!meta.appearance) meta.appearance = {}\n meta.appearance.roughness = prop.value.value as number\n }\n }\n }\n return { id, meta: Object.keys(meta).length > 0 ? meta : undefined }\n }\n\n if (arg.type === 'Identifier') return { terminalShapes: [{ id: resolveVar(arg) }] }\n if (arg.type === 'ObjectExpression') {\n const r = parseOne(arg)\n return { meta: r.meta, terminalShapes: r.id !== null ? [{ id: r.id, meta: r.meta }] : undefined }\n }\n if (arg.type === 'ArrayExpression') {\n const terminalShapes: TerminalShape[] = []\n for (const elem of arg.elements) {\n if (elem?.type !== 'ObjectExpression') {\n throw new ParseError('return array elements must be objects { shape, ... }', line)\n }\n const r = parseOne(elem)\n if (r.id) terminalShapes.push({ id: r.id, meta: r.meta })\n }\n if (terminalShapes.length === 0) throw new ParseError('return array must have at least one element', line)\n return { terminalShapes }\n }\n throw new ParseError(`unsupported return expression: ${arg.type}`, line)\n}\n\n// ── keep 指令提取(行级 keep/keepHidden → metadata.keep) ──\n\nfunction extractKeepEntries(\n positional: HostArg[],\n line: number,\n symbols: SymbolTable,\n): void {\n const last = positional[positional.length - 1]\n if (!isPlainDataObject(last)) return\n const entries: Array<{ target: string; hidden?: boolean }> = []\n const keepArg = last.keep\n if (Array.isArray(keepArg)) {\n for (const entry of keepArg) {\n const parsed = parseKeepEntry(entry)\n if (parsed) entries.push(parsed)\n }\n }\n const statementDefault = last.keepHidden === true\n const normalized = entries.map((e): KeepEntry => {\n // e.hidden 为显式 hidden 值(undefined → 未指定);未指定时用语句级 keepHidden 兜底\n return { target: e.target, hidden: e.hidden ?? statementDefault }\n })\n if (normalized.length > 0) {\n const list = symbols.keep.get(line) ?? []\n list.push(...normalized)\n symbols.keep.set(line, list)\n }\n}\n\nfunction parseKeepEntry(entry: HostArg): { target: string; hidden?: boolean } | undefined {\n // 与现状 keep.ts parseKeepEntry 同构:字符串条目 / 裸 var-ref 条目不携带 hidden\n // (语句级 keepHidden 兜底);{ shape, hidden } 显式条目携带 hidden(false 也显式)。\n if (typeof entry === 'string') return { target: entry }\n if (entry !== null && typeof entry === 'object' && !Array.isArray(entry)) {\n const obj = entry as Record<string, unknown>\n const shape = obj.shape\n if (typeof shape === 'string') return { target: shape, hidden: obj.hidden === true }\n if (shape !== null && typeof shape === 'object') {\n const s = shape as { kind?: string; name?: string }\n if (s.kind === 'var-ref' && typeof s.name === 'string') {\n return { target: s.name, hidden: obj.hidden === true }\n }\n }\n const self = entry as { kind?: string; name?: string }\n // 顶层 var-ref 条目(keep: [part0] → part0 是 var-ref 形态):不携带 hidden\n if (self.kind === 'var-ref' && typeof self.name === 'string') {\n return { target: self.name }\n }\n }\n return undefined\n}\n\n// ── 主入口 ──\n\n/** extractMetadata 的选项(全部可选;影响宽松引用与缺省命名空间解析)。 */\nexport interface ExtractMetadataOptions {\n /** 缺省命名空间绑定名(默认 'cad';registerLib default 绑定改名时传入) */\n defaultNs?: string\n /** 宽松变量(append:未知引用按外部变量透传,由调用方对 ctx 校验) */\n looseVars?: boolean\n /** 宽松本机函数调用(codeToArgs 单行提取:裸 callee 不在函数集也放行) */\n looseLocalCalls?: boolean\n /** 顶层 import 绑定名(单行提取时宿主从脚本 imports 提供) */\n namespaces?: string[]\n /** 安全策略档位(缺省 'strict';A1 接入点:extractMetadata 第一行过 Scanner) */\n security?: SecurityPolicy\n /** S7 命名空间保护名(缺省 = namespaces;append 场景可指定更小集合仅命名空间名) */\n nsNames?: string[]\n}\n\n/**\n * 从源码文本提取 UI 通道元数据(UiMetadata)。\n *\n * 兼容面:analyzeCode/codeToArgs 实现建立在本函数之上(statement-summary.ts /\n * code-to-args.ts),lines 面与 MetadataExtractor 投影逐字相等(A-16 对拍,\n * id 兼容 's'+lineNo 规则:其余字段逐字相等)。不参与执行、不生成可执行代码。\n *\n * 行号语义与 MetadataExtractor 完全一致:\n * - 容器代码(含 export default)→ 取容器箭头函数体,行号 = 原文行号;\n * - 扁平代码 → 按 MetadataExtractor 同款封装(import 段提升到 export default 之外,\n * `export default async (ns) => {\\n...` 包裹),行号扣封装偏移后 = analyzeCode\n * 报告的 line。\n *\n * @param code - the .fai.js source text.\n * @param options - optional extraction options.\n * @returns the full UI metadata surface.\n * @throws ParseError — 含行号(analyzeCode 抛错契约不变)。\n */\nexport function extractMetadata(code: string, options?: ExtractMetadataOptions): UiMetadata {\n // A1:安全门禁前置——在 acornParse 之前对原始 code 扫描,行号与用户编辑器一致。\n // security 与 looseVars 正交:安全规则不受 looseVars 影响。\n assertSecure(code, {\n policy: options?.security ?? 'strict',\n knownNames: [options?.defaultNs ?? 'cad', ...(options?.namespaces ?? [])],\n ...(options?.nsNames ? { nsNames: options.nsNames } : {}),\n defaultNs: options?.defaultNs,\n })\n\n const defaultNsName = options?.defaultNs ?? 'cad'\n\n // 符号表(每行提取共享:参数名/值、已声明变量、命名空间绑定、函数集、keep 表)\n const symbols: SymbolTable = {\n paramNames: new Set<string>(),\n paramValues: new Map<string, unknown>(),\n declared: new Set<string>(),\n nsBindings: new Map<string, string>(),\n localFnParams: new Map<string, string[]>(),\n defaultNsName,\n keep: new Map<number, KeepEntry[]>(),\n }\n\n // ── 0. 顶层 import 预扫描(与 MetadataExtractor 同构;容器/扁平都允许头部 import) ──\n let importBlock: { start: number; end: number } | null = null\n {\n const seen: ASTNode[] = []\n try {\n const prescan = acornParse(code, { ecmaVersion: 'latest', sourceType: 'module', locations: true, ranges: true })\n for (const n of prescan.body) {\n if (n.type === 'ImportDeclaration') seen.push(n)\n }\n } catch {\n // 原始文本非合法 module(如含 return)→ 交给主解析报错\n }\n if (seen.length > 0) {\n const first = seen[0]\n if (!onlyWhitespaceAndComments(code.slice(0, first.start))) {\n throw new ParseError('import statements must appear as a contiguous block at the top of the file', lineOf(first) ?? 1, 'E_IMPORT')\n }\n for (let i = 1; i < seen.length; i++) {\n const gap = code.slice(seen[i - 1].end, seen[i].start)\n if (!onlyWhitespaceAndComments(gap)) {\n throw new ParseError('import statements must be contiguous (no statements between imports)', lineOf(seen[i]) ?? 1, 'E_IMPORT')\n }\n }\n importBlock = { start: seen[0].start, end: seen[seen.length - 1].end }\n }\n }\n\n // ── 0.5 扁平代码封装(与 MetadataExtractor 逐字同款;容器零封装) ──\n // lineOffset:封装头占用的行数(语句行号 = acorn loc 行号 − lineOffset)。\n // codeOffset:封装头字符长度(函数体原文区间坐标换算;容器格式为 0)。\n let parseCode = code\n let lineOffset = code.includes('export default') ? 0 : 1\n let codeOffset = 0\n if (lineOffset) {\n if (importBlock) {\n const prefix = code.slice(0, importBlock.start)\n const importText = code.slice(importBlock.start, importBlock.end)\n const rest = code.slice(importBlock.end)\n parseCode = `${prefix}${importText}\\nexport default async (${defaultNsName}) => {\\n${rest}\\n}`\n lineOffset = countLines(prefix + importText) + 1\n // 字符偏移 = 注入的 '\\n'(importText 后)+ 封装头长度。原实现 29+len 少算 1\n //(未计入 importText 与封装间的换行),导致 import 场景的区间坐标错位——\n // bodyRange/ArgSource.start/end 等归一化要落到原 code 坐标。\n codeOffset = 1 + `export default async (${defaultNsName}) => {\\n`.length\n } else {\n parseCode = `export default async (${defaultNsName}) => {\\n${code}\\n}`\n lineOffset = 1\n codeOffset = `export default async (${defaultNsName}) => {\\n`.length\n }\n }\n\n // ── 1. 主解析(acorn module) ──\n let ast: ASTNode\n try {\n ast = acornParse(parseCode, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n locations: true,\n ranges: true,\n })\n } catch (err) {\n const syntaxErr = err as { message?: string; loc?: { line: number } }\n const loc = syntaxErr.loc?.line ?? 1\n throw new ParseError(`SyntaxError: ${syntaxErr.message ?? String(err)}`, loc, 'E_SYNTAX')\n }\n\n // 顶层 import(模块级,封装外)→ ImportEntry 表\n const imports: ImportEntry[] = []\n for (const n of ast.body) {\n if (n.type !== 'ImportDeclaration') continue\n const imp = classifyImport(n)\n imports.push(imp)\n if (imp.kind === 'namespace' && imp.localName) {\n symbols.nsBindings.set(imp.localName, imp.packageName ?? imp.localName)\n }\n if (imp.kind === 'named') {\n for (const b of imp.bindings) symbols.declared.add(b)\n }\n }\n // 宿主显式提供的命名空间绑定(codeToArgs 单行提取场景)\n for (const n of options?.namespaces ?? []) symbols.nsBindings.set(n, n)\n\n // 顶层 export default → 容器箭头函数体(封装文本下必存在)\n const exportDecl = ast.body.find((n: ASTNode) => n.type === 'ExportDefaultDeclaration')\n if (!exportDecl) {\n throw new ParseError('missing `export default`', 1)\n }\n const arrowFn = exportDecl.declaration\n if (\n arrowFn?.type !== 'ArrowFunctionExpression' ||\n !arrowFn.async ||\n arrowFn.params.length !== 1 ||\n arrowFn.params[0]?.type !== 'Identifier' ||\n arrowFn.params[0].name !== defaultNsName\n ) {\n throw new ParseError(`expected \\`export default async (${defaultNsName}) => { ... }\\``, lineOf(exportDecl))\n }\n const body = arrowFn.body\n if (body?.type !== 'BlockStatement') {\n throw new ParseError('expected arrow function body to be a block statement { ... }', lineOf(arrowFn))\n }\n const bodyNodes = body.body\n\n // 顶层函数预扫描(本机函数集)\n for (const n of bodyNodes) {\n if (n.type === 'FunctionDeclaration' && n.id?.type === 'Identifier') {\n const fparams: string[] = []\n for (const p of n.params ?? []) {\n if (p?.type === 'Identifier') fparams.push(p.name)\n else throw new ParseError('function params must be plain identifiers', lineOf(n), 'E_STATEMENT')\n }\n symbols.localFnParams.set(n.id.name, fparams)\n symbols.declared.add(n.id.name)\n }\n }\n\n const lines: StatementSummary[] = []\n const params: ParamEntry[] = []\n const functions: FunctionEntry[] = []\n const blocks: BlockEntry[] = []\n let meta: ScriptMetaIR | undefined\n let terminalShapes: TerminalShape[] | undefined\n // P0-B:参数槽记录累积(跨语句共享,语句顺序追加)\n const argSources: ArgSource[] = []\n\n // ── 逐顶层语句分类 ──\n for (const stmtNode of bodyNodes) {\n const rawLine = lineOf(stmtNode)\n const line = lineOffset ? rawLine - lineOffset : rawLine\n const vctx: ValueParseCtx = {\n symbols,\n looseVars: options?.looseVars === true,\n looseLocalCalls: options?.looseLocalCalls === true,\n sourceText: parseCode,\n computed: { value: false },\n stmtId: asStmtId(`s${line}`),\n codeOffset,\n argSources,\n }\n\n switch (stmtNode.type) {\n case 'ImportDeclaration':\n break // 已在顶部收集(封装文本下 import 不在此层)\n\n case 'FunctionDeclaration': {\n const name = stmtNode.id?.name\n const fparams: string[] = symbols.localFnParams.get(name) ?? []\n const bodyStart = stmtNode.body.start + 1 - codeOffset\n const bodyEnd = stmtNode.body.end - 1 - codeOffset\n const bodyText = parseCode.slice(stmtNode.body.start + 1, stmtNode.body.end - 1)\n functions.push({\n name,\n lineNo: line,\n params: fparams,\n bodyRange: { start: bodyStart, end: bodyEnd },\n body: bodyText,\n bodyHash: fnv1a32(bodyText),\n })\n break\n }\n\n case 'VariableDeclaration': {\n if (stmtNode.kind !== 'const' && stmtNode.kind !== 'let') {\n throw new ParseError(`only 'const' or 'let' declarations allowed, got '${stmtNode.kind}'`, line, 'E_STATEMENT')\n }\n for (const decl of stmtNode.declarations) {\n const dline = lineOf(decl)\n const dlineSrc = lineOffset ? dline - lineOffset : dline\n\n // 解构 op 行\n if (decl.id?.type === 'ObjectPattern') {\n const summary = classifyDestructure(decl, dlineSrc, vctx)\n lines.push(summary)\n for (const out of summary.outputs) symbols.declared.add(String(out))\n continue\n }\n if (decl.id?.type !== 'Identifier') {\n throw new ParseError('expected identifier on left side of const declaration', dlineSrc, 'E_STATEMENT')\n }\n const name = decl.id.name\n let init = decl.init\n if (init?.type === 'AwaitExpression') init = init.argument\n if (init?.type === 'ImportExpression') {\n throw new ParseError('dynamic import() is not allowed in faijs (no control flow)', dlineSrc, 'E_CONTROL_FLOW')\n }\n\n // op 行:const x = <ns>.<op>(...) / <localFn>(...)\n if (init?.type === 'CallExpression' && isOpCallCallee(init, vctx)) {\n const summary = classifyOpCall(init, dlineSrc, vctx, { output: name, hasAssignment: true })\n lines.push(summary)\n symbols.declared.add(name)\n continue\n }\n\n // P0-B:参数行 RHS 槽——整条 init 源码区间记一条\n //(path:单声明行 'rhs';一行多参声明行 'rhs:<name>' 区分)。\n if (init) {\n const rhsPath = stmtNode.declarations.length > 1 ? `rhs:${name}` : 'rhs'\n recordArgSource(init, vctx, rhsPath)\n }\n\n // 参数行:const x = <literal> / <纯字面量折叠>(值已知)\n const isLiteral =\n init?.type === 'Literal' ||\n init?.type === 'ArrayExpression' ||\n init?.type === 'ObjectExpression'\n const isNegLiteral =\n init?.type === 'UnaryExpression' && init.operator === '-' && init.argument?.type === 'Literal'\n if (isLiteral || isNegLiteral) {\n const value = isNegLiteral\n ? -init.argument.value as number\n : isLiteralValue(init)\n ? parseLiteralValue(init)\n : parseValueExpr(init, vctx, null) as unknown\n const literalLike = isNegLiteral || init.type === 'Literal'\n params.push({\n name,\n lineNo: dlineSrc,\n value,\n type: typeof value === 'number' ? 'number' : typeof value === 'boolean' ? 'bool' : 'vec3',\n computed: !literalLike,\n })\n symbols.paramNames.add(name)\n symbols.declared.add(name)\n if (literalLike) symbols.paramValues.set(name, value)\n continue\n }\n\n // 其余 const 形态:computed 参数(派生常量 / 引用表达式)——A-11 语法自由\n if (init) {\n params.push({ name, lineNo: dlineSrc, value: undefined, type: 'vec3', computed: true })\n symbols.declared.add(name)\n continue\n }\n throw new ParseError(`unsupported const declaration: init type = ${init?.type ?? 'null'}`, line, 'E_STATEMENT')\n }\n break\n }\n\n case 'ExpressionStatement': {\n classifyExpression(stmtNode.expression, line, vctx, lines)\n break\n }\n\n case 'ReturnStatement': {\n const r = parseReturnStatement(stmtNode, vctx)\n meta = r.meta\n terminalShapes = r.terminalShapes\n break\n }\n\n default: {\n // 控制流/块 → 只读块节点(R8)\n if (CONTROL_FLOW_TYPES.has(stmtNode.type)) {\n blocks.push({\n lineNo: line,\n kind: blockKind(stmtNode.type),\n astKind: stmtNode.type,\n source: parseCode.slice(stmtNode.start, stmtNode.end),\n range: { start: stmtNode.start - codeOffset, end: stmtNode.end - codeOffset },\n })\n break\n }\n if (stmtNode.type === 'ClassDeclaration') {\n throw new ParseError('class declarations are not allowed in faijs', line, 'E_STATEMENT')\n }\n if (stmtNode.type === 'NewExpression') {\n throw new ParseError('\"new\" expressions are not allowed in faijs (new Function is a safety red line)', line, 'E_STATEMENT')\n }\n if (stmtNode.type === 'WithStatement') {\n throw new ParseError('\"with\" statements are not allowed in faijs (strict mode)', line, 'E_CONTROL_FLOW')\n }\n // 其余未知顶层语句 → 只读块\n blocks.push({\n lineNo: line,\n kind: 'other',\n astKind: stmtNode.type,\n source: parseCode.slice(stmtNode.start, stmtNode.end),\n range: { start: stmtNode.start - codeOffset, end: stmtNode.end - codeOffset },\n })\n break\n }\n }\n }\n\n // P0-B:名称集合 = 参数 ∪ 已声明变量 ∪ 命名空间绑定 ∪ 本地函数名(字典序去重)。\n // 宿主把「参数表达式」中的未知标识符当作参数名(期望名)处理时用它做联想。\n const names = [\n ...new Set([\n ...symbols.paramNames,\n ...symbols.declared,\n ...symbols.nsBindings.keys(),\n ...symbols.localFnParams.keys(),\n ]),\n ].sort()\n\n return { lines, params, imports, functions, blocks, keep: symbols.keep, meta, terminalShapes, argSources, names }\n}\n\nfunction isLiteralValue(init: ASTNode): boolean {\n return init.type === 'Literal'\n}\n\n/** 字面量(非数组/对象)直接取值。 */\nfunction parseLiteralValue(init: ASTNode): unknown {\n return init.value\n}\n\nfunction countLines(text: string): number {\n if (text === '') return 0\n return (text.match(/\\n/g) ?? []).length + 1\n}\n\nfunction onlyWhitespaceAndComments(text: string): boolean {\n return text\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n .replace(/\\/\\/[^\\n]*/g, '')\n .trim() === ''\n}\n\nfunction blockKind(type: string): BlockEntry['kind'] {\n switch (type) {\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n return 'loop'\n case 'IfStatement':\n return 'condition'\n case 'SwitchStatement':\n return 'switch'\n default:\n return 'other'\n }\n}\n\nfunction classifyImport(decl: ASTNode): ImportEntry {\n const line = lineOf(decl)\n const specifier = decl.source?.value\n if (typeof specifier !== 'string' || specifier === '') {\n throw new ParseError('import must have a string specifier', line, 'E_IMPORT')\n }\n const packageName = derivePackageName(specifier)\n const specs = decl.specifiers ?? []\n if (specs.length === 0) {\n throw new ParseError('side-effect imports are not supported (use import * as ns from \"pkg\")', line, 'E_IMPORT')\n }\n const first = specs[0]\n if (first.type === 'ImportNamespaceSpecifier') {\n return { lineNo: line, specifier, kind: 'namespace', bindings: [first.local?.name], localName: first.local?.name, packageName }\n }\n if (first.type === 'ImportDefaultSpecifier') {\n return { lineNo: line, specifier, kind: 'default', bindings: [first.local?.name], localName: first.local?.name, packageName }\n }\n const bindings: string[] = specs.map((s: ASTNode) => s.local?.name as string)\n return { lineNo: line, specifier, kind: 'named', bindings, localName: bindings[0], packageName }\n}\n\n/** init 是否为 op 调用 callee(<ns>.<op> / 裸本机函数)。 */\nfunction isOpCallCallee(init: ASTNode, ctx: ValueParseCtx): boolean {\n const callee = init.callee\n if (callee?.type === 'MemberExpression') {\n return (\n callee.object?.type === 'Identifier' &&\n callee.property?.type === 'Identifier' &&\n (ctx.symbols.nsBindings.has(callee.object.name) ||\n callee.object.name === ctx.symbols.defaultNsName ||\n ctx.symbols.declared.has(callee.object.name) ||\n ctx.looseVars)\n )\n }\n if (callee?.type === 'Identifier') {\n return ctx.symbols.localFnParams.has(callee.name) || ctx.looseLocalCalls\n }\n return false\n}\n\n/** 从调用表达式构造 op 行(output 单输出 / 副作用无输出)。 */\nfunction classifyOpCall(\n call: ASTNode,\n line: number,\n vctx: ValueParseCtx,\n opts: { output?: string; hasAssignment: boolean },\n): StatementSummary {\n const calleeNode = call.callee\n let callee: string\n let namespace: string | undefined\n let local: boolean | undefined\n let receiver: string | undefined\n\n if (calleeNode?.type === 'MemberExpression' && calleeNode.object?.type === 'Identifier' && calleeNode.property?.type === 'Identifier') {\n const objName = calleeNode.object.name\n if (vctx.symbols.nsBindings.has(objName) || objName === vctx.symbols.defaultNsName) {\n namespace = objName === vctx.symbols.defaultNsName ? undefined : objName\n callee = calleeNode.property.name\n } else {\n receiver = objName\n callee = calleeNode.property.name\n }\n } else if (calleeNode?.type === 'Identifier') {\n local = true\n callee = calleeNode.name\n } else {\n throw new ParseError('expected <ns>.<op>(...) or local function call', line, 'E_STATEMENT')\n }\n\n const positional = parsePositionalArgs(call.arguments ?? [], vctx, line)\n const summary = buildLineSummary({\n callee,\n line,\n ctx: vctx,\n positional,\n namespace,\n local,\n receiver,\n outputs: opts.output !== undefined ? [opts.output] : [],\n hasAssignment: opts.hasAssignment,\n })\n extractKeepEntries(positional, line, vctx.symbols)\n attachAssemblySummary(summary)\n return summary\n}\n\n/**\n * P2-f4:装配语句摘要附加(cad.assembly / asmN.do_assemble / asmN.solve)。\n *\n * - `cad.assembly`(缺省命名空间,namespace===undefined)→ isAssembly + assembly 摘要。\n * 摘要只含 {name?, memberCount, constraintTypes};约束全文不提取(宿主 args 通道\n * 保留,model-store.ts:973 继续从 structuralStmtArgs(stmt).constraints 取)。\n * - `asmN.do_assemble` / `asmN.solve`(receiver 调用)→ isAssembly(装配行为语句)。\n */\nfunction attachAssemblySummary(summary: StatementSummary): void {\n if (summary.callee === 'assembly' && summary.namespace === undefined) {\n const members = summary.args.members\n const constraints = summary.args.constraints\n if (!Array.isArray(members) || !Array.isArray(constraints)) return\n const constraintTypes: string[] = []\n for (const c of constraints) {\n if (c && typeof c === 'object' && typeof (c as { type?: unknown }).type === 'string') {\n constraintTypes.push((c as { type: string }).type)\n }\n }\n const name = summary.args.name\n summary.isAssembly = true\n summary.assembly = {\n ...(typeof name === 'string' ? { name } : {}),\n memberCount: members.length,\n constraintTypes,\n }\n return\n }\n if ((summary.callee === 'do_assemble' || summary.callee === 'solve') && summary.receiver !== undefined) {\n summary.isAssembly = true\n }\n}\n\n/** 从解构调用构造 op 行(const { k1: v1, k2 } = <ns>.<op>(...))。 */\nfunction classifyDestructure(decl: ASTNode, line: number, vctx: ValueParseCtx): StatementSummary {\n const props = decl.id.properties\n if (props.length === 0) {\n throw new ParseError('destructuring must have at least one property', line, 'E_STATEMENT')\n }\n const keys: string[] = []\n const valueNames: string[] = []\n for (const prop of props) {\n if (prop.type !== 'Property' || prop.key?.type !== 'Identifier') {\n throw new ParseError('destructuring properties must be identifiers', line, 'E_STATEMENT')\n }\n if (prop.value?.type !== 'Identifier') {\n throw new ParseError(`destructuring value for \"${prop.key.name}\" must be an identifier`, line, 'E_STATEMENT')\n }\n keys.push(prop.key.name)\n valueNames.push(prop.value.name)\n }\n let init = decl.init\n if (init?.type === 'AwaitExpression') init = init.argument\n if (init?.type !== 'CallExpression') {\n throw new ParseError(`expected <ns>.<op>(...) or local function call in destructuring, got ${init?.type ?? 'null'}`, line, 'E_STATEMENT')\n }\n\n const calleeNode = init.callee\n let callee: string\n let namespace: string | undefined\n let local: boolean | undefined\n let receiver: string | undefined\n if (calleeNode?.type === 'MemberExpression' && calleeNode.object?.type === 'Identifier' && calleeNode.property?.type === 'Identifier') {\n const objName = calleeNode.object.name\n if (vctx.symbols.nsBindings.has(objName) || objName === vctx.symbols.defaultNsName) {\n namespace = objName === vctx.symbols.defaultNsName ? undefined : objName\n callee = calleeNode.property.name\n } else {\n receiver = objName\n callee = calleeNode.property.name\n }\n } else if (calleeNode?.type === 'Identifier') {\n local = true\n callee = calleeNode.name\n } else {\n throw new ParseError('destructuring is only allowed for <ns>.<op>(...) or local function calls', line, 'E_STATEMENT')\n }\n\n const positional = parsePositionalArgs(init.arguments ?? [], vctx, line)\n const summary = buildLineSummary({\n callee,\n line,\n ctx: vctx,\n positional,\n namespace,\n local,\n receiver,\n outputs: valueNames,\n outputKeys: keys,\n hasAssignment: true,\n })\n extractKeepEntries(positional, line, vctx.symbols)\n return summary\n}\n\n/** ExpressionStatement 分类(重赋值 / 本机副作用调用 / 成员方法 / 命名空间裸调用)。 */\nfunction classifyExpression(\n expr: ASTNode,\n line: number,\n vctx: ValueParseCtx,\n lines: StatementSummary[],\n): void {\n if (expr?.type === 'ImportExpression') {\n throw new ParseError('dynamic import() is not allowed in faijs (no control flow)', line, 'E_CONTROL_FLOW')\n }\n if (expr?.type === 'CallExpression' && expr.callee?.type === 'Identifier' && expr.callee.name === 'eval') {\n throw new ParseError('eval is not allowed in faijs', line, 'E_STATEMENT')\n }\n if (expr?.type === 'NewExpression') {\n throw new ParseError('\"new\" expressions are not allowed in faijs (new Function is a safety red line)', line, 'E_STATEMENT')\n }\n\n // 裸重赋值 part0 = [await] cad.op(...)\n if (expr?.type === 'AssignmentExpression' && expr.operator === '=' && expr.left?.type === 'Identifier') {\n const varName = expr.left.name\n if (!vctx.symbols.declared.has(varName)) {\n if (vctx.looseVars) {\n vctx.symbols.declared.add(varName)\n } else {\n throw new ParseError(`unknown variable \"${varName}\" in re-assignment`, line, 'E_REFERENCE')\n }\n }\n let init = expr.right\n if (init?.type === 'AwaitExpression') init = init.argument\n if (init?.type === 'CallExpression' && isOpCallCallee(init, vctx)) {\n const summary = classifyOpCall(init, line, vctx, { output: varName, hasAssignment: true })\n lines.push(summary)\n return\n }\n throw new ParseError('re-assignment must be a cad.op() call', line, 'E_STATEMENT')\n }\n\n // 成员方法 / 命名空间裸调用(无赋值)\n if (expr?.type === 'CallExpression' && expr.callee?.type === 'MemberExpression' &&\n expr.callee.object?.type === 'Identifier' && expr.callee.property?.type === 'Identifier') {\n const objName = expr.callee.object.name\n const isNs = vctx.symbols.nsBindings.has(objName) || objName === vctx.symbols.defaultNsName\n const isReceiver = vctx.symbols.declared.has(objName)\n if (isNs || isReceiver || vctx.looseVars) {\n const summary = classifyOpCall(expr, line, vctx, { hasAssignment: false })\n lines.push(summary)\n return\n }\n throw new ParseError(`unknown variable \"${objName}\" in .${expr.callee.property.name}() call`, line, 'E_REFERENCE')\n }\n\n // 本机函数副作用调用 myFn(part0, {...})\n if (expr?.type === 'CallExpression' && expr.callee?.type === 'Identifier') {\n const fnName = expr.callee.name\n if (vctx.symbols.localFnParams.has(fnName) || vctx.looseLocalCalls) {\n const summary = classifyOpCall(expr, line, vctx, { hasAssignment: false })\n lines.push(summary)\n return\n }\n throw new ParseError(`function \"${fnName}\" does not exist in this script`, line, 'E_REFERENCE')\n }\n\n throw new ParseError(\n `bare expression statements not allowed; use 'const part0 = cad.op(...)' instead`,\n line,\n 'E_STATEMENT',\n )\n}\n"]}
1
+ {"version":3,"file":"metadata-extractor.js","sourceRoot":"","sources":["../../src/lang/metadata-extractor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * metadata-extractor — 无 IR 元数据提取器(UI 通道语义源)\n *\n * 方案:docs/plans/2026-09-06-no-ir-dual-channel-runtime.md §4.1(D3)\n *\n * 定位:从 .fai.js 源码(任意合法 JS)提取 **UI 通道需要的全部元数据**。\n * 输入 = 源码文本;输出 = UiMetadata。不生成可执行代码、不求值、不参与执行、\n * 不建执行中介 IR(已删除,只产宿主面类型)。\n *\n * lines 面 = StatementSummary[](与现状 analyzeCode 产出逐字相等,A-16 对拍\n * 锁定;唯一语义差异:id = `'s' + lineNo`,append 场景稳定)。行分类:\n * op 行 → lines;param 行 → params;import 行 → imports;function 行 →\n * functions;循环/条件/switch 块 → blocks(只读节点,不分析内部语义,R8)。\n *\n * 本文件不 import parser.ts/compile.ts(P6 删除 IR 后唯一存活解析侧)。\n */\n\nimport { parse as acornParse } from 'acorn'\nimport type { StatementSummary } from './statement-summary'\nimport type { ScriptMetaIR, TerminalShape } from './types'\nimport { asStmtId, asPartName, type PartName, type StmtId } from '../identity'\nimport type { HostArg, HostCallRef, HostRef } from './host-arg'\nimport { isHostVarRef, isHostParamRef, isHostCallRef, isHostExprRef } from './host-arg'\nimport { ParseError } from './parse-error'\nimport { fnv1a32 } from './fnv-hash'\nimport { assertSecure, type SecurityPolicy } from './security-scanner'\nimport type { DimName } from '../units'\nimport { SCRIPT_UNIT_NAMES, UNIT_DIM, UNIT_SCALE, SCRIPT_UNIT_TO_NAME } from '../units'\n\n// ── UiMetadata 类型(§4.1) ──\n\n/** 参数表条目(参数面板:const X = <字面量> → 名字/值/是否计算表达式) */\nexport interface ParamEntry {\n name: string\n lineNo: number\n /** RHS 是纯字面量时为其值;表达式/引用(computed=true)时 value 缺省 */\n value?: unknown\n type: 'number' | 'vec3' | 'bool' | 'enum'\n /** RHS 是表达式/参数引用 → 面板只读 */\n computed: boolean\n}\n\n/**\n * 单个参数槽的源码来源信息(UI 通道新增,非 IR)。\n *\n * Timeline 参数表达式编辑方案(docs/plans/2026-09-08-timeline-param-expression-editing.md):\n * 每个参数槽携带自己的源码区间,编辑 = 精确替换该区间(`editArgSource`),\n * 不重印整行。path 对宿主是不透明标识符——宿主只能从本记录读取后原样回传。\n */\nexport interface ArgSource {\n /** 所属语句 id('s' + lineNo);参数行的 rhs 槽同样使用 's' + lineNo */\n stmtId: StmtId\n /** 槽位路径(见 plans 文档 §4.2.1 的路径命名表;对宿主不透明) */\n path: string\n /** 该槽的源码原文(字面量 → `40`;表达式 → `w * 2`;引用 → `w`) */\n text: string\n /** 字符区间 [start, end),相对 extractMetadata 的入参 code(含 codeOffset 归一化) */\n start: number\n end: number\n /** 依赖的参数名(命中 paramNames;表达式里的参数引用) */\n params: string[]\n /** 依赖的其它变量名(命中 declared,含 op 产出 / 派生常量) */\n refs: string[]\n /** 非平凡表达式(非字面量,负字面量视为字面量)→ UI 显示 fx 徽标 */\n isExpression: boolean\n}\n\n/** import 表条目(相对 specifier → moduleKey,裸 specifier → libLoader) */\nexport interface ImportEntry {\n lineNo: number\n specifier: string\n kind: 'named' | 'namespace' | 'default'\n bindings: string[]\n localName?: string\n packageName?: string\n moduleKey?: string\n}\n\n/** 函数表条目(本机函数) */\nexport interface FunctionEntry {\n name: string\n lineNo: number\n params: string[]\n /** 函数体原文区间(只读显示用;坐标相对原始 code 文本) */\n bodyRange: { start: number; end: number }\n /** 函数体原文(花括号内) */\n body: string\n bodyHash: string\n}\n\n/** 块结构条目(只读节点,R8) */\nexport interface BlockEntry {\n lineNo: number\n kind: 'loop' | 'condition' | 'switch' | 'other'\n astKind: string\n /** 块源码原文(含闭合括号的整段) */\n source: string\n range: { start: number; end: number }\n}\n\n/** keep 指令条目(行级,存活判定静态输入;hidden=true 为 keepHidden) */\nexport interface KeepEntry {\n target: string\n hidden: boolean\n}\n\n/** 元数据提取器输出:UI 通道的完整元数据面(§4.1)。 */\nexport interface UiMetadata {\n lines: StatementSummary[]\n params: ParamEntry[]\n imports: ImportEntry[]\n functions: FunctionEntry[]\n blocks: BlockEntry[]\n keep: Map<number, KeepEntry[]>\n meta?: ScriptMetaIR\n terminalShapes?: TerminalShape[]\n /**\n * 全语句参数槽的源码来源(按语句顺序;参数行的 RHS 槽 path 以 'rhs' 开头)。\n * 新增字段:P0-B(见 plans/2026-09-08-timeline-param-expression-editing.md)。\n */\n argSources: ArgSource[]\n /**\n * 本脚本内可被表达式引用的名字(词法序去重):\n * paramNames ∪ declared ∪ nsBindings ∪ localFnParams。\n * `validateExpression` / `editArgSource` 用它做 E_REFERENCE 判定。\n */\n names: string[]\n}\n\n// ── AST 辅助 ──\n\ntype ASTNode = any\n\nconst CONTROL_FLOW_TYPES = new Set([\n 'IfStatement', 'ForStatement', 'ForInStatement', 'ForOfStatement',\n 'WhileStatement', 'DoWhileStatement', 'SwitchStatement', 'TryStatement',\n 'ThrowStatement', 'BreakStatement', 'ContinueStatement', 'LabeledStatement',\n 'WithStatement', 'BlockStatement',\n])\n\nfunction lineOf(node: ASTNode): number {\n return node?.loc?.start?.line ?? 1\n}\n\nfunction derivePackageName(specifier: string): string {\n if (specifier.startsWith('@')) {\n const parts = specifier.split('/')\n return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : specifier\n }\n return specifier.split('/')[0]\n}\n\n// ── 提取器符号表 ──\n\n/**\n * 提取器符号表:声明过的名字与绑定关系(参数、变量、命名空间、函数形参、keep 指令),\n * 供解析过程中判定标识符归属并做常量折叠。\n */\nexport interface SymbolTable {\n /** 参数名(const X = <literal>) */\n paramNames: Set<string>\n /** 参数名 → 字面量值(折叠依据) */\n paramValues: Map<string, unknown>\n /** 已声明变量名(参数 + op outputs + 函数名;含宽松透传名) */\n declared: Set<string>\n /** 命名空间绑定名 → packageName(import * as ns) */\n nsBindings: Map<string, string>\n /** 本机函数名 → 形参 */\n localFnParams: Map<string, string[]>\n /** 缺省命名空间绑定名('cad') */\n defaultNsName: string\n /** keep 指令表(lineNo → 调用点条目;行级存活判定静态输入) */\n keep: Map<number, KeepEntry[]>\n}\n\n// ── 常量折叠(与现状 parser.tryFoldConstExpr 同构;仅字面量 + 参数) ──\n\ntype FoldResult =\n| { ok: true; value: unknown; usedParam: boolean; usedUnit: boolean }\n| { ok: false }\n\nfunction numFold(v: number, usedParam = false, usedUnit = false): FoldResult {\nreturn Number.isFinite(v) ? { ok: true, value: v, usedParam, usedUnit } : { ok: false }\n}\n\nfunction looseEq(a: unknown, b: unknown): boolean {\n let x: unknown = a\n let y: unknown = b\n if (typeof x === 'boolean') x = x ? 1 : 0\n if (typeof y === 'boolean') y = y ? 1 : 0\n if (typeof x === 'number' && typeof y === 'string') return x === Number(y)\n if (typeof x === 'string' && typeof y === 'number') return Number(x) === y\n if (x === null || y === null) return x === null && y === null\n return x === y\n}\n\nfunction tryFoldConstExpr(node: ASTNode, symbols: SymbolTable): FoldResult {\n switch (node.type) {\n case 'Literal':\n return { ok: true, value: node.value, usedParam: false, usedUnit: false }\n\n case 'Identifier': {\n // P7/D10.4: unit constants (MM, INCH, DEGREE, …) are recognized as\n // foldable constants. Their values come from UNIT_SCALE (the single\n // source of truth). The `usedUnit` flag is set so that `parseValueExpr`\n // can mark the line as computed (host read-only downgrade), preventing\n // the folded base value (e.g. 254) from being written back to source.\n if (SCRIPT_UNIT_NAMES.has(node.name)) {\n const unitName = SCRIPT_UNIT_TO_NAME[node.name]\n if (unitName) {\n return { ok: true, value: UNIT_SCALE[unitName], usedParam: false, usedUnit: true }\n }\n }\n if (!symbols.paramNames.has(node.name)) return { ok: false }\n const v = symbols.paramValues.get(node.name)\n return v === undefined ? { ok: false } : { ok: true, value: v, usedParam: true, usedUnit: false }\n }\n\n case 'UnaryExpression': {\n const operand = tryFoldConstExpr(node.argument, symbols)\n if (!operand.ok) return { ok: false }\n const v = operand.value\n switch (node.operator) {\n case '-': return typeof v === 'number' ? numFold(-v, operand.usedParam, operand.usedUnit) : { ok: false }\n case '+': return typeof v === 'number' ? numFold(+v, operand.usedParam, operand.usedUnit) : { ok: false }\n case '!': return { ok: true, value: !v, usedParam: operand.usedParam, usedUnit: operand.usedUnit }\n case '~': return typeof v === 'number' ? { ok: true, value: ~v, usedParam: operand.usedParam, usedUnit: operand.usedUnit } : { ok: false }\n case 'typeof': return { ok: true, value: typeof v, usedParam: operand.usedParam, usedUnit: operand.usedUnit }\n default: return { ok: false }\n }\n }\n\n case 'BinaryExpression': {\n const left = tryFoldConstExpr(node.left, symbols)\n if (!left.ok) return { ok: false }\n const right = tryFoldConstExpr(node.right, symbols)\n if (!right.ok) return { ok: false }\n const a = left.value\n const b = right.value\n const usedParam = left.usedParam || right.usedParam\n const usedUnit = left.usedUnit || right.usedUnit\n const numBin = (op: (x: number, y: number) => number): FoldResult =>\n typeof a === 'number' && typeof b === 'number' ? numFold(op(a, b), usedParam, usedUnit) : { ok: false }\n const cmpBin = (op: (x: number | string, y: number | string) => boolean): FoldResult => {\n if (typeof a === 'number' && typeof b === 'number') return { ok: true, value: op(a, b), usedParam, usedUnit }\n if (typeof a === 'string' && typeof b === 'string') return { ok: true, value: op(a, b), usedParam, usedUnit }\n return { ok: false }\n }\n switch (node.operator) {\n case '+': {\n if (typeof a === 'number' && typeof b === 'number') return numFold(a + b, usedParam, usedUnit)\n if (typeof a === 'string' || typeof b === 'string') return { ok: true, value: String(a) + String(b), usedParam, usedUnit }\n return { ok: false }\n }\n case '-': return numBin((x, y) => x - y)\n case '*': return numBin((x, y) => x * y)\n case '/': return numBin((x, y) => x / y)\n case '%': return numBin((x, y) => x % y)\n case '**': return numBin((x, y) => x ** y)\n case '<': return cmpBin((x, y) => x < y)\n case '<=': return cmpBin((x, y) => x <= y)\n case '>': return cmpBin((x, y) => x > y)\n case '>=': return cmpBin((x, y) => x >= y)\n case '==': return { ok: true, value: looseEq(a, b), usedParam, usedUnit }\n case '!=': return { ok: true, value: !looseEq(a, b), usedParam, usedUnit }\n case '===': return { ok: true, value: a === b, usedParam, usedUnit }\n case '!==': return { ok: true, value: a !== b, usedParam, usedUnit }\n default: return { ok: false }\n }\n }\n\n case 'LogicalExpression': {\n const left = tryFoldConstExpr(node.left, symbols)\n if (!left.ok) return { ok: false }\n const right = tryFoldConstExpr(node.right, symbols)\n if (!right.ok) return { ok: false }\n const a = left.value\n const usedParam = left.usedParam || right.usedParam\n const usedUnit = left.usedUnit || right.usedUnit\n switch (node.operator) {\n case '&&': return { ok: true, value: a ? right.value : left.value, usedParam, usedUnit }\n case '||': return { ok: true, value: a ? left.value : right.value, usedParam, usedUnit }\n case '??': return { ok: true, value: a === null ? right.value : left.value, usedParam, usedUnit }\n default: return { ok: false }\n }\n }\n\n case 'TemplateLiteral': {\n const parts: string[] = []\n const quasis = node.quasis as ASTNode[]\n const exprs = node.expressions as ASTNode[]\n let usedParam = false\n let usedUnit = false\n for (let i = 0; i < quasis.length; i++) {\n const cooked = quasis[i].value?.cooked\n parts.push(cooked ?? '')\n if (i < exprs.length) {\n const r = tryFoldConstExpr(exprs[i], symbols)\n if (!r.ok) return { ok: false }\n usedParam = usedParam || r.usedParam\n usedUnit = usedUnit || r.usedUnit\n parts.push(String(r.value))\n }\n }\n return { ok: true, value: parts.join(''), usedParam, usedUnit }\n }\n\n case 'ConditionalExpression': {\n const test = tryFoldConstExpr(node.test, symbols)\n if (!test.ok) return { ok: false }\n const chosen = tryFoldConstExpr(test.value ? node.consequent : node.alternate, symbols)\n if (!chosen.ok) return { ok: false }\n return { ok: true, value: chosen.value, usedParam: test.usedParam || chosen.usedParam, usedUnit: test.usedUnit || chosen.usedUnit }\n }\n\n default:\n return { ok: false }\n }\n}\n\n// ── Expr 白名单(与现状 parser.isExprWhitelist 同构) ──\n//\n// 本函数与 collectExprIdentifiers 是「唯一实现」——expr-validate.ts / source-edit.ts\n// 直接 import 复用,不复制(见 plans/2026-09-08-timeline-param-expression-editing.md §3.4.1)。\n\n/**\n * <Ns>.fn(...) 等「白名单表达式」结构判定(无可选链、无 spread、成员非计算)。\n * @param node 待判定的表达式 AST 节点;nil 或非法输入按非白名单处理。\n * @returns 节点自身及其全部子表达式均在白名单结构内 → true,否则 false。\n */\nexport function isExprWhitelist(node: ASTNode): boolean {\n if (!node || typeof node !== 'object') return false\n switch (node.type) {\n case 'Literal':\n case 'Identifier':\n return true\n case 'UnaryExpression':\n return isExprWhitelist(node.argument)\n case 'BinaryExpression':\n case 'LogicalExpression':\n return isExprWhitelist(node.left) && isExprWhitelist(node.right)\n case 'ConditionalExpression':\n return isExprWhitelist(node.test) && isExprWhitelist(node.consequent) && isExprWhitelist(node.alternate)\n case 'ArrayExpression':\n return node.elements.every((el: ASTNode) => el !== null && el !== undefined && isExprWhitelist(el))\n case 'MemberExpression':\n if (node.optional) return false\n if (!isExprWhitelist(node.object)) return false\n return node.computed ? isExprWhitelist(node.property) : true\n case 'CallExpression': {\n if (node.optional) return false\n if (!isExprWhitelist(node.callee)) return false\n return (node.arguments as ASTNode[]).every((a) => a.type !== 'SpreadElement' && isExprWhitelist(a))\n }\n default:\n return false\n }\n}\n\n/**\n * 递归收集表达式引用:参数 → params;已声明变量 → refs;未知 → E_REFERENCE。\n *\n * opts(可选扩展;缺省时行为与历史完全一致):\n * - `lenient: true`:未知标识符不抛错(静默跳过)——ArgSource 记录路径用,\n * 保证提取本身绝不抛新错;\n * - `defaultNs`:把默认命名空间('cad')视同 nsBindings 成员——`cad.faceNormal(p)`\n * 作为参数槽整条记录时,不会把 'cad' 当作未知标识符。\n *\n * 本函数与 isExprWhitelist 是「唯一实现」——expr-validate.ts / source-edit.ts\n * 直接 import 复用,不复制(见 plans/2026-09-08-timeline-param-expression-editing.md §3.4.1)。\n *\n * @param node 表达式的 AST 根节点;nil 或非对象直接返回。\n * @param symbols 提取器符号表(判定 Identifier 是参数/已声明/未知)。\n * @param line 当前语句行号(未知标识符报错时的行号)。\n * @param params 收集命中参数名的输出集合。\n * @param refs 收集命中已声明变量的输出集合。\n * @param opts 可选扩展;`lenient` 静默跳过未知标识符,`defaultNs` 把默认命名空间视同绑定成员。\n */\nexport function collectExprIdentifiers(\n node: ASTNode,\n symbols: SymbolTable,\n line: number,\n params: Set<string>,\n refs: Set<string>,\n opts?: { lenient?: boolean; defaultNs?: string },\n): void {\n if (!node || typeof node !== 'object') return\n switch (node.type) {\n case 'Identifier': {\n const name = node.name\n if (symbols.paramNames.has(name)) {\n params.add(name)\n } else if (symbols.declared.has(name)) {\n refs.add(name)\n } else if (SCRIPT_UNIT_NAMES.has(name)) {\n // P6/D7: unit constants (MM, INCH, DEGREE, …) are global read-only constants.\n // Treat as a known reference — do not throw E_REFERENCE.\n refs.add(name)\n } else if (opts?.lenient === true) {\n // lenient:未知标识符跳过(ArgSource 记录路径,保证提取不抛新错)\n } else {\n throw new ParseError(`unknown identifier \"${name}\" in expression`, line, 'E_REFERENCE')\n }\n return\n }\n case 'UnaryExpression':\n collectExprIdentifiers(node.argument, symbols, line, params, refs, opts)\n return\n case 'BinaryExpression':\n case 'LogicalExpression':\n collectExprIdentifiers(node.left, symbols, line, params, refs, opts)\n collectExprIdentifiers(node.right, symbols, line, params, refs, opts)\n return\n case 'ConditionalExpression':\n collectExprIdentifiers(node.test, symbols, line, params, refs, opts)\n collectExprIdentifiers(node.consequent, symbols, line, params, refs, opts)\n collectExprIdentifiers(node.alternate, symbols, line, params, refs, opts)\n return\n case 'ArrayExpression':\n for (const el of node.elements) collectExprIdentifiers(el, symbols, line, params, refs, opts)\n return\n case 'ObjectExpression':\n for (const prop of node.properties) {\n if (prop?.type !== 'Property') continue\n collectExprIdentifiers(prop.value, symbols, line, params, refs, opts)\n }\n return\n case 'TemplateLiteral':\n for (const expr of node.expressions) collectExprIdentifiers(expr, symbols, line, params, refs, opts)\n return\n case 'MemberExpression': {\n // 命名空间绑定(import * as cfg / 模块命名空间)的成员 cfg.OutX:对象名是外部\n // 命名空间,不收集为变量引用(§4.1 HostArg 引用形态;求值在内部 ctx.cfg 侧)。\n // opts.defaultNs(缺省命名空间 'cad')同样跳过——cad.faceNormal(p) 整条作为\n // 参数槽记录时不会把 'cad' 当未知标识符。\n const obj = node.object\n if (obj?.type === 'Identifier' && (symbols.nsBindings.has(obj.name) || obj.name === opts?.defaultNs)) {\n if (node.computed) collectExprIdentifiers(node.property, symbols, line, params, refs, opts)\n return\n }\n collectExprIdentifiers(node.object, symbols, line, params, refs, opts)\n if (node.computed) collectExprIdentifiers(node.property, symbols, line, params, refs, opts)\n return\n }\n case 'CallExpression':\n collectExprIdentifiers(node.callee, symbols, line, params, refs, opts)\n for (const a of node.arguments as ASTNode[]) {\n collectExprIdentifiers(a.type === 'SpreadElement' ? a.argument : a, symbols, line, params, refs, opts)\n }\n return\n default:\n return\n }\n}\n\n// ── 值解析 → HostArg(与现状 parseValueExpr/parsePositionalArgs 语义同构) ──\n\ninterface ValueParseCtx {\n symbols: SymbolTable\n /** 宽松模式(append 单行提取/引用前段变量):未知标识符透传为外部名 */\n looseVars: boolean\n /** 宽松本机调用(codeToArgs):裸 callee 不在函数集也放行 */\n looseLocalCalls: boolean\n sourceText: string\n /** 折叠/computed 累积标记:本语句是否引用了参数表达式/spread(hasComputedArgs) */\n computed: { value: boolean }\n /** P0-B:当前语句 id('s' + 归一化行号;argSources 记录的 stmtId) */\n stmtId: StmtId\n /** P0-B:parseCode 的 codeOffset(ArgSource.start/end 归一化到原 code 坐标) */\n codeOffset: number\n /** P0-B:参数槽源码记录累积(语句顺序追加) */\n argSources: ArgSource[]\n /** P6/D8: callee → 量纲声明(dimension pass 用) */\n opDims?: OpDimMap\n /** P6/D8: dimension 校验错误累积 */\n dimErrors: ParseError[]\n}\n\n/** 是否非平凡表达式:非 Literal(负字面量视为字面量)→ UI 显示 fx 徽标 */\nfunction isExpressionNode(node: ASTNode): boolean {\n if (!node || node.type === 'Literal') return false\n if (node.type === 'UnaryExpression' && node.operator === '-' && node.argument?.type === 'Literal') return false\n return true\n}\n\n// ── P6/D8: 静态量纲校验(dimension pass) ──\n\n/**\n * P6/D8 R4: Determine the dimension of an AST expression node.\n *\n * Returns the DimName if the expression can be statically determined to carry\n * a dimension, `'bare'` for a bare number literal, or `null` if it cannot be\n * determined (R5: pass through).\n */\nfunction inferDim(node: ASTNode): DimName | 'bare' | null {\n if (!node) return null\n\n switch (node.type) {\n case 'Literal':\n if (typeof node.value === 'number') return 'bare'\n return null\n\n case 'UnaryExpression':\n if (node.operator === '-' || node.operator === '+' || node.operator === '~') {\n return inferDim(node.argument)\n }\n return null\n\n case 'Identifier':\n // Unit constant? → its dimension\n if (SCRIPT_UNIT_NAMES.has(node.name)) {\n const unitName = SCRIPT_UNIT_TO_NAME[node.name]\n return unitName ? (UNIT_DIM[unitName] ?? null) : null\n }\n // Declared variable or parameter → cannot determine (R5: pass through)\n return null\n\n case 'BinaryExpression': {\n const left = inferDim(node.left)\n const right = inferDim(node.right)\n\n switch (node.operator) {\n case '*': {\n // number * unitConst → unit's dim; unitConst * number → same\n if (left === 'bare' && right && right !== 'bare') return right\n if (right === 'bare' && left && left !== 'bare') return left\n // both bare → bare (dimensionless multiply)\n if (left === 'bare' && right === 'bare') return 'bare'\n // both have dims → compound (length * length → area); pass through\n return null\n }\n case '/': {\n // same dim / same dim → dimensionless (bare)\n if (left && right && left === right && left !== 'bare') return 'bare'\n // dim / bare → dim\n if (left && left !== 'bare' && right === 'bare') return left\n // bare / dim → 1/dim (not a simple dim); pass through\n if (left === 'bare' && right && right !== 'bare') return null\n if (left === 'bare' && right === 'bare') return 'bare'\n return null\n }\n case '+':\n case '-': {\n // Both sides must have the same dimension (R3)\n if (left === right) return left\n // R3: if both sides are determinable but differ → mismatch.\n // But inferDim can't report errors — it returns the dim or null.\n // We return a special sentinel 'mismatch' to signal checkDim.\n if (left && right && left !== 'bare' && right !== 'bare' && left !== right) {\n return 'mismatch' as unknown as DimName\n }\n // If one is bare and the other has a dim → the result has that dim\n if (left === 'bare' && right && right !== 'bare') return right\n if (right === 'bare' && left && left !== 'bare') return left\n // If either is null (unknown), pass through (R5)\n return null\n }\n default:\n return null\n }\n }\n\n case 'ParenthesizedExpression':\n return inferDim(node.expression)\n\n case 'ArrayExpression':\n // vec3 — check first element for dimensionality\n if (node.elements && node.elements.length > 0 && node.elements[0]) {\n return inferDim(node.elements[0])\n }\n return null\n\n default:\n return null\n }\n}\n\n/**\n * P6/D8: Check if an argument expression has the required dimension.\n *\n * - R2: bare number literal on a dimensioned slot → E_DIM_BARE_NUMBER\n * - R3: mismatched dimensions → E_DIM_MISMATCH\n * - R5: cannot determine → pass (no error)\n *\n * Appends errors to ctx.dimErrors (does not throw — extraction continues).\n */\nfunction checkDim(node: ASTNode, expectedDim: DimName, ctx: ValueParseCtx): void {\n const actualDim = inferDim(node)\n\n // R5: cannot determine → pass through\n if (actualDim === null) return\n\n // R3: mismatched dimensions within the expression (e.g. mm + degree)\n if (actualDim === 'mismatch' as unknown as string) {\n ctx.dimErrors.push(new ParseError(\n `dimension mismatch in expression: \"${ctx.sourceText.slice(node.start, node.end)}\"`,\n lineOf(node),\n 'E_DIM_MISMATCH',\n ))\n return\n }\n\n // R2: bare number on dimensioned slot\n if (actualDim === 'bare') {\n ctx.dimErrors.push(new ParseError(\n `bare number literal requires unit suffix (expected ${expectedDim}): \"${ctx.sourceText.slice(node.start, node.end)}\"`,\n lineOf(node),\n 'E_DIM_BARE_NUMBER',\n ))\n return\n }\n\n // R3: dimension mismatch with expected\n if (actualDim !== expectedDim) {\n ctx.dimErrors.push(new ParseError(\n `dimension mismatch: expected ${expectedDim}, got ${actualDim} in \"${ctx.sourceText.slice(node.start, node.end)}\"`,\n lineOf(node),\n 'E_DIM_MISMATCH',\n ))\n return\n }\n}\n\n/**\n * 在折叠之前记录一条参数槽(ArgSource)。\n *\n * - start/end 相对 extractMetadata 的入参 code(减 codeOffset,含封装归一化);\n * - text = parseCode 原文切片(E_RANGE_STALE 用 `code.slice(start,end) === text` 断言);\n * - params/refs 用 collectExprIdentifiers 的 lenient 模式(未知标识符跳过,\n * 保证提取不抛新错——与 main parse 的 E_REFERENCE 例外保持解耦)。\n */\nfunction recordArgSource(node: ASTNode, ctx: ValueParseCtx, path: string): void {\n if (!node || typeof node !== 'object' || node.start == null || node.end == null || node.end < node.start) return\n const isExpr = isExpressionNode(node)\n const params = new Set<string>()\n const refs = new Set<string>()\n if (isExpr) {\n collectExprIdentifiers(node, ctx.symbols, lineOf(node), params, refs, {\n lenient: true,\n defaultNs: ctx.symbols.defaultNsName,\n })\n }\n ctx.argSources.push({\n stmtId: ctx.stmtId,\n path,\n text: ctx.sourceText.slice(node.start, node.end),\n start: node.start - ctx.codeOffset,\n end: node.end - ctx.codeOffset,\n params: [...params],\n refs: [...refs],\n isExpression: isExpr,\n })\n}\n\nfunction parseValueExpr(node: ASTNode, ctx: ValueParseCtx, path: string | null): HostArg {\n if (!node) throw new ParseError('missing value expression', 1, 'E_VALUE')\n const line = lineOf(node)\n\n // P0-B:在折叠之前记录一条 ArgSource(path === null 忽略——参数行 RHS 由\n // recordArgSource 显式记录,不再双记)。\n if (path !== null) recordArgSource(node, ctx, path)\n\n // 折叠优先:Unary/Binary/Logical/Template/Conditional 可静态折叠(字面量 + 参数)\n if (\n node.type === 'UnaryExpression' ||\n node.type === 'BinaryExpression' ||\n node.type === 'LogicalExpression' ||\n node.type === 'TemplateLiteral' ||\n node.type === 'ConditionalExpression'\n ) {\n const r = tryFoldConstExpr(node, ctx.symbols)\n if (r.ok) {\n // F1-E1:仅折叠表达式引用参数才标 computed;纯字面量(负字面量)不标\n // P7/D10.4: unit constants (usedUnit) also mark computed — the folded\n // base value (e.g. 254 for `10 * INCH`) must NOT be written back to\n // source code (would lose the unit and change geometry in non-base contexts).\n if (r.usedParam || r.usedUnit) ctx.computed.value = true\n return r.value as unknown as HostArg\n }\n // 折叠失败且 ∈ 白名单 → expr-ref(运行时求值)\n if (isExprWhitelist(node)) {\n const params = new Set<string>()\n const refs = new Set<string>()\n collectExprIdentifiers(node, ctx.symbols, line, params, refs)\n ctx.computed.value = true\n return {\n kind: 'expr-ref',\n text: ctx.sourceText.slice(node.start, node.end),\n refs: [...refs],\n params: [...params],\n } as unknown as HostArg\n }\n throw new ParseError(\n `cannot statically evaluate ${node.type} in args (must reference declared params or literals)`,\n line,\n 'E_VALUE',\n )\n }\n\n switch (node.type) {\n case 'Literal':\n return node.value as HostArg\n\n case 'Identifier': {\n const name = node.name\n if (ctx.symbols.paramNames.has(name)) {\n return { kind: 'param-ref', name } as unknown as HostArg\n }\n if (ctx.symbols.declared.has(name)) {\n return { kind: 'var-ref', name } as unknown as HostArg\n }\n if (ctx.looseVars) {\n ctx.symbols.declared.add(name)\n return { kind: 'var-ref', name } as unknown as HostArg\n }\n throw new ParseError(\n `unknown identifier \"${name}\" in args value (not a declared param or variable)`,\n line,\n 'E_REFERENCE',\n )\n }\n\n case 'ArrayExpression': {\n const out: HostArg[] = []\n for (let i = 0; i < node.elements.length; i++) {\n const el = node.elements[i]\n if (el === null || el === undefined) {\n throw new ParseError('array holes are not supported in args', line, 'E_VALUE')\n }\n const childPath = path === null ? null : `${path}[${i}]`\n if (el.type === 'SpreadElement') {\n if (childPath !== null) recordArgSource(el.argument, ctx, childPath)\n const r = tryFoldConstExpr(el.argument, ctx.symbols)\n if (!r.ok || !Array.isArray(r.value)) {\n throw new ParseError(\n 'cannot statically evaluate spread in args (expected an array param or literal)',\n line,\n 'E_VALUE',\n )\n }\n ctx.computed.value = true\n out.push(...(r.value as HostArg[]))\n continue\n }\n out.push(parseValueExpr(el, ctx, childPath))\n }\n return out as unknown as HostArg\n }\n\n case 'ObjectExpression':\n return parseObjectValue(node, ctx, path)\n\n case 'CallExpression': {\n const callee = node.callee\n // <ns>.<fn>(...) → call-ref(只读查询)\n if (\n callee?.type === 'MemberExpression' &&\n callee.object?.type === 'Identifier' &&\n (ctx.symbols.nsBindings.has(callee.object.name) ||\n callee.object.name === ctx.symbols.defaultNsName) &&\n callee.property?.type === 'Identifier'\n ) {\n const nsName = callee.object.name\n const args = (node.arguments as ASTNode[]).map((a, i) =>\n parseValueExpr(a, ctx, path === null ? null : `${path}[${i}]`))\n const callRef: HostCallRef = {\n kind: 'call-ref',\n callee: callee.property.name,\n args,\n ...(nsName !== ctx.symbols.defaultNsName ? { namespace: nsName } : {}),\n }\n return callRef as unknown as HostArg\n }\n if (isExprWhitelist(node)) {\n const params = new Set<string>()\n const refs = new Set<string>()\n collectExprIdentifiers(node, ctx.symbols, line, params, refs)\n ctx.computed.value = true\n return {\n kind: 'expr-ref',\n text: ctx.sourceText.slice(node.start, node.end),\n refs: [...refs],\n params: [...params],\n } as unknown as HostArg\n }\n throw new ParseError(\n 'nested calls in args must be <ns>.<ident>(...) or a whitelisted expression',\n line,\n 'E_VALUE',\n )\n }\n\n case 'MemberExpression': {\n if (isExprWhitelist(node)) {\n const params = new Set<string>()\n const refs = new Set<string>()\n collectExprIdentifiers(node, ctx.symbols, line, params, refs)\n ctx.computed.value = true\n return {\n kind: 'expr-ref',\n text: ctx.sourceText.slice(node.start, node.end),\n refs: [...refs],\n params: [...params],\n } as unknown as HostArg\n }\n throw new ParseError('unsupported member expression in args: optional chaining is not allowed', line, 'E_VALUE')\n }\n\n default:\n throw new ParseError(`unsupported value expression: ${node.type}`, line, 'E_VALUE')\n }\n}\n\n/** 对象字面量参数解析 + 参数槽记录(属性值路径 = `<base>.<key>`;shorthand 以来源名为 text 记一条)。 */\nfunction parseObjectValue(node: ASTNode, ctx: ValueParseCtx, path: string | null): HostArg {\n const line = lineOf(node)\n const obj: Record<string, HostArg> = {}\n for (const prop of node.properties) {\n if (prop.type === 'SpreadElement') {\n const r = tryFoldConstExpr(prop.argument, ctx.symbols)\n if (!r.ok || typeof r.value !== 'object' || r.value === null || Array.isArray(r.value)) {\n throw new ParseError('cannot statically evaluate object spread in args', line, 'E_VALUE')\n }\n ctx.computed.value = true\n Object.assign(obj, r.value as Record<string, unknown>)\n continue\n }\n const key = prop.key?.type === 'Identifier' ? prop.key.name\n : prop.key?.type === 'Literal' ? String(prop.key.value)\n : null\n if (key === null) throw new ParseError('invalid object key', line, 'E_VALUE')\n if (prop.shorthand) {\n // shorthand { size } → { size: param-ref };已声明变量 shorthand 现状报 E_REFERENCE\n const name = key\n let slotParams: string[] = []\n let slotRefs: string[] = []\n if (ctx.symbols.paramNames.has(name)) {\n obj[key] = { kind: 'param-ref', name } as unknown as HostArg\n slotParams = [name]\n } else if (ctx.looseVars) {\n ctx.symbols.declared.add(name)\n obj[key] = { kind: 'var-ref', name } as unknown as HostArg\n slotRefs = [name]\n } else {\n throw new ParseError(\n `unknown shorthand identifier \"${key}\" (not a declared param)`,\n line,\n 'E_REFERENCE',\n )\n }\n // P0-B:shorthand 槽(以属性名 == 变量名作 text,path = <base>.<key>,isExpression=false)\n if (path !== null) {\n ctx.argSources.push({\n stmtId: ctx.stmtId,\n path: `${path}.${key}`,\n text: ctx.sourceText.slice(prop.start, prop.end),\n start: prop.start - ctx.codeOffset,\n end: prop.end - ctx.codeOffset,\n params: slotParams,\n refs: slotRefs,\n isExpression: false,\n })\n }\n } else {\n obj[key] = parseValueExpr(prop.value, ctx, path === null ? null : `${path}.${key}`)\n }\n }\n return obj as unknown as HostArg\n}\n\n/** 位置实参解析(与现状 parsePositionalArgs 同构);P0-B 附带参数槽记录(pathBase 缺省 'positional')。 */\nfunction parsePositionalArgs(\n argNodes: ASTNode[],\n ctx: ValueParseCtx,\n line: number,\n pathBase = 'positional',\n): HostArg[] {\n const out: HostArg[] = []\n for (let i = 0; i < argNodes.length; i++) {\n const argNode = argNodes[i]\n const isLast = i === argNodes.length - 1\n const isTrailingOptions = isLast && argNode?.type === 'ObjectExpression'\n if (isTrailingOptions) {\n // 尾随选项对象:只按 'args.<key>' 记录属性值,不把整对象再记一个 positional 槽\n out.push(parseObjectValue(argNode, ctx, 'args'))\n continue\n }\n const slotPath = `${pathBase}[${i}]`\n if (argNode.type === 'Identifier') {\n recordArgSource(argNode, ctx, slotPath)\n const name = argNode.name\n if (ctx.symbols.declared.has(name)) {\n out.push({ kind: 'var-ref', name } as unknown as HostArg)\n continue\n }\n if (ctx.looseVars) {\n ctx.symbols.declared.add(name)\n out.push({ kind: 'var-ref', name } as unknown as HostArg)\n continue\n }\n throw new ParseError(`unknown variable \"${name}\" in inputs`, lineOf(argNode), 'E_REFERENCE')\n }\n if (argNode.type === 'SpreadElement') {\n recordArgSource(argNode.argument, ctx, slotPath)\n const r = tryFoldConstExpr(argNode.argument, ctx.symbols)\n if (!r.ok || !Array.isArray(r.value)) {\n throw new ParseError(\n 'cannot statically evaluate spread in arguments (must reference an array param or literal)',\n line,\n 'E_VALUE',\n )\n }\n ctx.computed.value = true\n out.push(...(r.value as HostArg[]))\n continue\n }\n out.push(parseValueExpr(argNode, ctx, slotPath))\n }\n return out\n}\n\n// ── 行摘要组装 ──\n\n/** 位置实参末位是否为纯数据对象(非引用形态)→ args 投影真源。\n * 与现状 splitPositionalOptions 同构:引用形态 = var-ref/param-ref/call-ref/expr-ref\n * (kind 值 ∈ HOST_REF_KINDS 且完整匹配变体形状);字面量对象的 kind 字段是普通数据。 */\nfunction isPlainDataObject(v: unknown): v is Record<string, HostArg> {\n return (\n v !== null &&\n typeof v === 'object' &&\n !Array.isArray(v) &&\n !isHostVarRef(v as HostRef) &&\n !isHostParamRef(v as HostRef) &&\n !isHostCallRef(v as HostRef) &&\n !isHostExprRef(v as HostRef)\n )\n}\n\ninterface LineSummarySpec {\n callee: string\n line: number\n ctx: ValueParseCtx\n /** 位置实参槽(含尾随对象;positional 与 HostArg 面同构) */\n positional: HostArg[]\n namespace?: string\n local?: boolean\n receiver?: string\n outputs: string[]\n outputKeys?: string[]\n hasAssignment: boolean\n}\n\n/**\n * 从单条调用组装 StatementSummary:\n * - positional = 全量位置实参(末位纯对象保留,与现状一致)\n * - args = 末位纯对象的投影(keep/keepHidden 键原样保留——compile 期才剥离)\n */\nfunction buildLineSummary(spec: LineSummarySpec): StatementSummary {\n const last = spec.positional[spec.positional.length - 1]\n const args: Record<string, HostArg> =\n isPlainDataObject(last) ? { ...(last as Record<string, HostArg>) } : {}\n\n const refs = new Set<string>()\n for (const a of spec.positional) collectRefsFromHostArg(a, refs)\n if (spec.receiver !== undefined) refs.add(spec.receiver)\n\n const summary: StatementSummary = {\n id: asStmtId(`s${spec.line}`),\n callee: spec.callee,\n ...(spec.local\n ? { local: true }\n : spec.namespace !== undefined\n ? {\n namespace: spec.namespace,\n ...(spec.ctx.symbols.nsBindings.get(spec.namespace) !== undefined\n ? { packageName: spec.ctx.symbols.nsBindings.get(spec.namespace) }\n : {}),\n }\n : {}),\n ...(spec.receiver !== undefined ? { receiver: asPartName(spec.receiver) } : {}),\n positional: spec.positional,\n args,\n outputs: spec.outputs.map((o) => asPartName(o)),\n ...(spec.outputKeys !== undefined ? { outputKeys: spec.outputKeys } : {}),\n hasAssignment: spec.hasAssignment,\n hasComputedArgs: spec.ctx.computed.value,\n line: spec.line,\n }\n if (refs.size > 0) summary.refs = [...refs]\n else summary.refs = []\n return summary\n}\n\nfunction collectRefsFromHostArg(value: HostArg, out: Set<string>): void {\n if (value === null || value === undefined) return\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return\n const kind = (value as { kind?: string }).kind\n if (kind === 'var-ref') {\n out.add((value as { name: string }).name)\n return\n }\n if (kind === 'param-ref') {\n out.add((value as { name: string }).name)\n return\n }\n if (kind === 'call-ref') {\n for (const a of (value as HostCallRef).args) collectRefsFromHostArg(a, out)\n return\n }\n if (kind === 'expr-ref') {\n const e = value as { params: string[]; refs: string[] }\n for (const p of e.params) out.add(p)\n for (const r of e.refs) out.add(r)\n return\n }\n if (Array.isArray(value)) {\n for (const v of value) collectRefsFromHostArg(v as HostArg, out)\n return\n }\n if (typeof value === 'object') {\n for (const v of Object.values(value as Record<string, HostArg>)) collectRefsFromHostArg(v, out)\n }\n}\n\n// ── return / meta 解析 ──\n\nfunction parseReturnStatement(\n node: ASTNode,\n ctx: ValueParseCtx,\n): { meta?: ScriptMetaIR; terminalShapes?: TerminalShape[] } {\n const line = lineOf(node)\n const arg = node.argument\n if (!arg) return {}\n\n const resolveVar = (idNode: ASTNode): PartName => {\n if (idNode?.type !== 'Identifier') throw new ParseError('unknown variable in return', line)\n const name = idNode.name\n if (!ctx.symbols.declared.has(name) && !ctx.symbols.paramNames.has(name)) {\n throw new ParseError(`unknown variable \"${name}\" in return`, line)\n }\n return asPartName(name)\n }\n\n const parseOne = (objNode: ASTNode): { id: PartName | null; meta?: ScriptMetaIR } => {\n let id: PartName | null = null\n const meta: ScriptMetaIR = {}\n for (const prop of objNode.properties) {\n const key = prop.key?.type === 'Identifier' ? prop.key.name\n : prop.key?.type === 'Literal' ? String(prop.key.value)\n : null\n if (!key) continue\n if (key === 'shape') {\n if (prop.value?.type === 'Identifier') id = resolveVar(prop.value)\n } else if (key === 'name') {\n if (prop.value?.type === 'Literal') meta.name = prop.value.value as string\n } else if (key === 'color') {\n if (prop.value?.type === 'Literal') {\n if (!meta.appearance) meta.appearance = {}\n meta.appearance.color = prop.value.value as string\n }\n } else if (key === 'metalness') {\n if (prop.value?.type === 'Literal') {\n if (!meta.appearance) meta.appearance = {}\n meta.appearance.metalness = prop.value.value as number\n }\n } else if (key === 'roughness') {\n if (prop.value?.type === 'Literal') {\n if (!meta.appearance) meta.appearance = {}\n meta.appearance.roughness = prop.value.value as number\n }\n }\n }\n return { id, meta: Object.keys(meta).length > 0 ? meta : undefined }\n }\n\n if (arg.type === 'Identifier') return { terminalShapes: [{ id: resolveVar(arg) }] }\n if (arg.type === 'ObjectExpression') {\n const r = parseOne(arg)\n return { meta: r.meta, terminalShapes: r.id !== null ? [{ id: r.id, meta: r.meta }] : undefined }\n }\n if (arg.type === 'ArrayExpression') {\n const terminalShapes: TerminalShape[] = []\n for (const elem of arg.elements) {\n if (elem?.type !== 'ObjectExpression') {\n throw new ParseError('return array elements must be objects { shape, ... }', line)\n }\n const r = parseOne(elem)\n if (r.id) terminalShapes.push({ id: r.id, meta: r.meta })\n }\n if (terminalShapes.length === 0) throw new ParseError('return array must have at least one element', line)\n return { terminalShapes }\n }\n throw new ParseError(`unsupported return expression: ${arg.type}`, line)\n}\n\n// ── keep 指令提取(行级 keep/keepHidden → metadata.keep) ──\n\nfunction extractKeepEntries(\n positional: HostArg[],\n line: number,\n symbols: SymbolTable,\n): void {\n const last = positional[positional.length - 1]\n if (!isPlainDataObject(last)) return\n const entries: Array<{ target: string; hidden?: boolean }> = []\n const keepArg = last.keep\n if (Array.isArray(keepArg)) {\n for (const entry of keepArg) {\n const parsed = parseKeepEntry(entry)\n if (parsed) entries.push(parsed)\n }\n }\n const statementDefault = last.keepHidden === true\n const normalized = entries.map((e): KeepEntry => {\n // e.hidden 为显式 hidden 值(undefined → 未指定);未指定时用语句级 keepHidden 兜底\n return { target: e.target, hidden: e.hidden ?? statementDefault }\n })\n if (normalized.length > 0) {\n const list = symbols.keep.get(line) ?? []\n list.push(...normalized)\n symbols.keep.set(line, list)\n }\n}\n\nfunction parseKeepEntry(entry: HostArg): { target: string; hidden?: boolean } | undefined {\n // 与现状 keep.ts parseKeepEntry 同构:字符串条目 / 裸 var-ref 条目不携带 hidden\n // (语句级 keepHidden 兜底);{ shape, hidden } 显式条目携带 hidden(false 也显式)。\n if (typeof entry === 'string') return { target: entry }\n if (entry !== null && typeof entry === 'object' && !Array.isArray(entry)) {\n const obj = entry as Record<string, unknown>\n const shape = obj.shape\n if (typeof shape === 'string') return { target: shape, hidden: obj.hidden === true }\n if (shape !== null && typeof shape === 'object') {\n const s = shape as { kind?: string; name?: string }\n if (s.kind === 'var-ref' && typeof s.name === 'string') {\n return { target: s.name, hidden: obj.hidden === true }\n }\n }\n const self = entry as { kind?: string; name?: string }\n // 顶层 var-ref 条目(keep: [part0] → part0 是 var-ref 形态):不携带 hidden\n if (self.kind === 'var-ref' && typeof self.name === 'string') {\n return { target: self.name }\n }\n }\n return undefined\n}\n\n// ── 主入口 ──\n\n/** extractMetadata 的选项(全部可选;影响宽松引用与缺省命名空间解析)。 */\nexport interface ExtractMetadataOptions {\n /** 缺省命名空间绑定名(默认 'cad';registerLib default 绑定改名时传入) */\n defaultNs?: string\n /** 宽松变量(append:未知引用按外部变量透传,由调用方对 ctx 校验) */\n looseVars?: boolean\n /** 宽松本机函数调用(codeToArgs 单行提取:裸 callee 不在函数集也放行) */\n looseLocalCalls?: boolean\n /** 顶层 import 绑定名(单行提取时宿主从脚本 imports 提供) */\n namespaces?: string[]\n /** 安全策略档位(缺省 'strict';A1 接入点:extractMetadata 第一行过 Scanner) */\n security?: SecurityPolicy\n /** S7 命名空间保护名(缺省 = namespaces;append 场景可指定更小集合仅命名空间名) */\n nsNames?: string[]\n /**\n * P4/P6 (unit-system D8): callee → 量纲声明的映射,供 dimension pass 做静态\n * 量纲校验。调用方从 op 注册表取出透传(lang 不碰 op 注册表铁律)。\n */\n opDims?: OpDimMap\n}\n\n/**\n * P4/P6 (unit-system D8): 一个 op 的脚本面量纲声明,供静态 dimension 检查使用。\n * 由调用方(CadRuntime/CLI/codeToArgs)从 op 注册表取出透传,`lang/` 本身不碰\n * op 注册表(铁律:lang 不得依赖 op 注册表)。\n */\nexport interface OpDimDecl {\n /** 参数名 → 量纲;缺省键视为无量纲。 */\n paramDims?: Record<string, DimName>\n /** 函数调用结果的量纲。 */\n retDim?: DimName\n /** D11 slot-map(positional→object 装箱表);位置形态校验用。 */\n slotMap?: { keys: string[]; vec3Keys?: string[]; shapeArity?: number }\n}\n\n/** P4/P6: callee 名 → 量纲声明(供 extractMetadata 的 dimension pass 消费)。 */\nexport type OpDimMap = Record<string, OpDimDecl>\n\n/**\n * 从源码文本提取 UI 通道元数据(UiMetadata)。\n *\n * 兼容面:analyzeCode/codeToArgs 实现建立在本函数之上(statement-summary.ts /\n * code-to-args.ts),lines 面与 MetadataExtractor 投影逐字相等(A-16 对拍,\n * id 兼容 's'+lineNo 规则:其余字段逐字相等)。不参与执行、不生成可执行代码。\n *\n * 行号语义与 MetadataExtractor 完全一致:\n * - 容器代码(含 export default)→ 取容器箭头函数体,行号 = 原文行号;\n * - 扁平代码 → 按 MetadataExtractor 同款封装(import 段提升到 export default 之外,\n * `export default async (ns) => {\\n...` 包裹),行号扣封装偏移后 = analyzeCode\n * 报告的 line。\n *\n * @param code - the .fai.js source text.\n * @param options - optional extraction options.\n * @returns the full UI metadata surface.\n * @throws ParseError — 含行号(analyzeCode 抛错契约不变)。\n */\nexport function extractMetadata(code: string, options?: ExtractMetadataOptions): UiMetadata {\n // A1:安全门禁前置——在 acornParse 之前对原始 code 扫描,行号与用户编辑器一致。\n // security 与 looseVars 正交:安全规则不受 looseVars 影响。\n assertSecure(code, {\n policy: options?.security ?? 'strict',\n knownNames: [options?.defaultNs ?? 'cad', ...(options?.namespaces ?? [])],\n ...(options?.nsNames ? { nsNames: options.nsNames } : {}),\n defaultNs: options?.defaultNs,\n })\n\n const defaultNsName = options?.defaultNs ?? 'cad'\n\n // 符号表(每行提取共享:参数名/值、已声明变量、命名空间绑定、函数集、keep 表)\n const symbols: SymbolTable = {\n paramNames: new Set<string>(),\n paramValues: new Map<string, unknown>(),\n declared: new Set<string>(),\n nsBindings: new Map<string, string>(),\n localFnParams: new Map<string, string[]>(),\n defaultNsName,\n keep: new Map<number, KeepEntry[]>(),\n }\n\n // ── 0. 顶层 import 预扫描(与 MetadataExtractor 同构;容器/扁平都允许头部 import) ──\n let importBlock: { start: number; end: number } | null = null\n {\n const seen: ASTNode[] = []\n try {\n const prescan = acornParse(code, { ecmaVersion: 'latest', sourceType: 'module', locations: true, ranges: true })\n for (const n of prescan.body) {\n if (n.type === 'ImportDeclaration') seen.push(n)\n }\n } catch {\n // 原始文本非合法 module(如含 return)→ 交给主解析报错\n }\n if (seen.length > 0) {\n const first = seen[0]\n if (!onlyWhitespaceAndComments(code.slice(0, first.start))) {\n throw new ParseError('import statements must appear as a contiguous block at the top of the file', lineOf(first) ?? 1, 'E_IMPORT')\n }\n for (let i = 1; i < seen.length; i++) {\n const gap = code.slice(seen[i - 1].end, seen[i].start)\n if (!onlyWhitespaceAndComments(gap)) {\n throw new ParseError('import statements must be contiguous (no statements between imports)', lineOf(seen[i]) ?? 1, 'E_IMPORT')\n }\n }\n importBlock = { start: seen[0].start, end: seen[seen.length - 1].end }\n }\n }\n\n // ── 0.5 扁平代码封装(与 MetadataExtractor 逐字同款;容器零封装) ──\n // lineOffset:封装头占用的行数(语句行号 = acorn loc 行号 − lineOffset)。\n // codeOffset:封装头字符长度(函数体原文区间坐标换算;容器格式为 0)。\n let parseCode = code\n let lineOffset = code.includes('export default') ? 0 : 1\n let codeOffset = 0\n if (lineOffset) {\n if (importBlock) {\n const prefix = code.slice(0, importBlock.start)\n const importText = code.slice(importBlock.start, importBlock.end)\n const rest = code.slice(importBlock.end)\n parseCode = `${prefix}${importText}\\nexport default async (${defaultNsName}) => {\\n${rest}\\n}`\n lineOffset = countLines(prefix + importText) + 1\n // 字符偏移 = 注入的 '\\n'(importText 后)+ 封装头长度。原实现 29+len 少算 1\n //(未计入 importText 与封装间的换行),导致 import 场景的区间坐标错位——\n // bodyRange/ArgSource.start/end 等归一化要落到原 code 坐标。\n codeOffset = 1 + `export default async (${defaultNsName}) => {\\n`.length\n } else {\n parseCode = `export default async (${defaultNsName}) => {\\n${code}\\n}`\n lineOffset = 1\n codeOffset = `export default async (${defaultNsName}) => {\\n`.length\n }\n }\n\n // ── 1. 主解析(acorn module) ──\n let ast: ASTNode\n try {\n ast = acornParse(parseCode, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n locations: true,\n ranges: true,\n })\n } catch (err) {\n const syntaxErr = err as { message?: string; loc?: { line: number } }\n const loc = syntaxErr.loc?.line ?? 1\n throw new ParseError(`SyntaxError: ${syntaxErr.message ?? String(err)}`, loc, 'E_SYNTAX')\n }\n\n // 顶层 import(模块级,封装外)→ ImportEntry 表\n const imports: ImportEntry[] = []\n for (const n of ast.body) {\n if (n.type !== 'ImportDeclaration') continue\n const imp = classifyImport(n)\n imports.push(imp)\n if (imp.kind === 'namespace' && imp.localName) {\n symbols.nsBindings.set(imp.localName, imp.packageName ?? imp.localName)\n }\n if (imp.kind === 'named') {\n for (const b of imp.bindings) symbols.declared.add(b)\n }\n }\n // 宿主显式提供的命名空间绑定(codeToArgs 单行提取场景)\n for (const n of options?.namespaces ?? []) symbols.nsBindings.set(n, n)\n\n // 顶层 export default → 容器箭头函数体(封装文本下必存在)\n const exportDecl = ast.body.find((n: ASTNode) => n.type === 'ExportDefaultDeclaration')\n if (!exportDecl) {\n throw new ParseError('missing `export default`', 1)\n }\n const arrowFn = exportDecl.declaration\n if (\n arrowFn?.type !== 'ArrowFunctionExpression' ||\n !arrowFn.async ||\n arrowFn.params.length !== 1 ||\n arrowFn.params[0]?.type !== 'Identifier' ||\n arrowFn.params[0].name !== defaultNsName\n ) {\n throw new ParseError(`expected \\`export default async (${defaultNsName}) => { ... }\\``, lineOf(exportDecl))\n }\n const body = arrowFn.body\n if (body?.type !== 'BlockStatement') {\n throw new ParseError('expected arrow function body to be a block statement { ... }', lineOf(arrowFn))\n }\n const bodyNodes = body.body\n\n // 顶层函数预扫描(本机函数集)\n for (const n of bodyNodes) {\n if (n.type === 'FunctionDeclaration' && n.id?.type === 'Identifier') {\n const fparams: string[] = []\n for (const p of n.params ?? []) {\n if (p?.type === 'Identifier') fparams.push(p.name)\n else throw new ParseError('function params must be plain identifiers', lineOf(n), 'E_STATEMENT')\n }\n symbols.localFnParams.set(n.id.name, fparams)\n symbols.declared.add(n.id.name)\n }\n }\n\n const lines: StatementSummary[] = []\n const params: ParamEntry[] = []\n const functions: FunctionEntry[] = []\n const blocks: BlockEntry[] = []\n let meta: ScriptMetaIR | undefined\n let terminalShapes: TerminalShape[] | undefined\n // P0-B:参数槽记录累积(跨语句共享,语句顺序追加)\n const argSources: ArgSource[] = []\n // P6/D8: dimension 校验错误累积(跨语句共享)\n const allDimErrors: ParseError[] = []\n\n // ── 逐顶层语句分类 ──\n for (const stmtNode of bodyNodes) {\n const rawLine = lineOf(stmtNode)\n const line = lineOffset ? rawLine - lineOffset : rawLine\n const vctx: ValueParseCtx = {\n symbols,\n looseVars: options?.looseVars === true,\n looseLocalCalls: options?.looseLocalCalls === true,\n sourceText: parseCode,\n computed: { value: false },\n stmtId: asStmtId(`s${line}`),\n codeOffset,\n argSources,\n opDims: options?.opDims,\n dimErrors: allDimErrors,\n }\n\n switch (stmtNode.type) {\n case 'ImportDeclaration':\n break // 已在顶部收集(封装文本下 import 不在此层)\n\n case 'FunctionDeclaration': {\n const name = stmtNode.id?.name\n const fparams: string[] = symbols.localFnParams.get(name) ?? []\n const bodyStart = stmtNode.body.start + 1 - codeOffset\n const bodyEnd = stmtNode.body.end - 1 - codeOffset\n const bodyText = parseCode.slice(stmtNode.body.start + 1, stmtNode.body.end - 1)\n functions.push({\n name,\n lineNo: line,\n params: fparams,\n bodyRange: { start: bodyStart, end: bodyEnd },\n body: bodyText,\n bodyHash: fnv1a32(bodyText),\n })\n break\n }\n\n case 'VariableDeclaration': {\n if (stmtNode.kind !== 'const' && stmtNode.kind !== 'let') {\n throw new ParseError(`only 'const' or 'let' declarations allowed, got '${stmtNode.kind}'`, line, 'E_STATEMENT')\n }\n for (const decl of stmtNode.declarations) {\n const dline = lineOf(decl)\n const dlineSrc = lineOffset ? dline - lineOffset : dline\n\n // 解构 op 行\n if (decl.id?.type === 'ObjectPattern') {\n const summary = classifyDestructure(decl, dlineSrc, vctx)\n lines.push(summary)\n for (const out of summary.outputs) symbols.declared.add(String(out))\n continue\n }\n if (decl.id?.type !== 'Identifier') {\n throw new ParseError('expected identifier on left side of const declaration', dlineSrc, 'E_STATEMENT')\n }\n const name = decl.id.name\n let init = decl.init\n if (init?.type === 'AwaitExpression') init = init.argument\n if (init?.type === 'ImportExpression') {\n throw new ParseError('dynamic import() is not allowed in faijs (no control flow)', dlineSrc, 'E_CONTROL_FLOW')\n }\n\n // op 行:const x = <ns>.<op>(...) / <localFn>(...)\n if (init?.type === 'CallExpression' && isOpCallCallee(init, vctx)) {\n const summary = classifyOpCall(init, dlineSrc, vctx, { output: name, hasAssignment: true })\n lines.push(summary)\n symbols.declared.add(name)\n continue\n }\n\n // P0-B:参数行 RHS 槽——整条 init 源码区间记一条\n //(path:单声明行 'rhs';一行多参声明行 'rhs:<name>' 区分)。\n if (init) {\n const rhsPath = stmtNode.declarations.length > 1 ? `rhs:${name}` : 'rhs'\n recordArgSource(init, vctx, rhsPath)\n }\n\n // 参数行:const x = <literal> / <纯字面量折叠>(值已知)\n const isLiteral =\n init?.type === 'Literal' ||\n init?.type === 'ArrayExpression' ||\n init?.type === 'ObjectExpression'\n const isNegLiteral =\n init?.type === 'UnaryExpression' && init.operator === '-' && init.argument?.type === 'Literal'\n if (isLiteral || isNegLiteral) {\n const value = isNegLiteral\n ? -init.argument.value as number\n : isLiteralValue(init)\n ? parseLiteralValue(init)\n : parseValueExpr(init, vctx, null) as unknown\n const literalLike = isNegLiteral || init.type === 'Literal'\n params.push({\n name,\n lineNo: dlineSrc,\n value,\n type: typeof value === 'number' ? 'number' : typeof value === 'boolean' ? 'bool' : 'vec3',\n computed: !literalLike,\n })\n symbols.paramNames.add(name)\n symbols.declared.add(name)\n if (literalLike) symbols.paramValues.set(name, value)\n continue\n }\n\n // 其余 const 形态:computed 参数(派生常量 / 引用表达式)——A-11 语法自由\n if (init) {\n params.push({ name, lineNo: dlineSrc, value: undefined, type: 'vec3', computed: true })\n symbols.declared.add(name)\n continue\n }\n throw new ParseError(`unsupported const declaration: init type = ${init?.type ?? 'null'}`, line, 'E_STATEMENT')\n }\n break\n }\n\n case 'ExpressionStatement': {\n classifyExpression(stmtNode.expression, line, vctx, lines)\n break\n }\n\n case 'ReturnStatement': {\n const r = parseReturnStatement(stmtNode, vctx)\n meta = r.meta\n terminalShapes = r.terminalShapes\n break\n }\n\n default: {\n // 控制流/块 → 只读块节点(R8)\n if (CONTROL_FLOW_TYPES.has(stmtNode.type)) {\n blocks.push({\n lineNo: line,\n kind: blockKind(stmtNode.type),\n astKind: stmtNode.type,\n source: parseCode.slice(stmtNode.start, stmtNode.end),\n range: { start: stmtNode.start - codeOffset, end: stmtNode.end - codeOffset },\n })\n break\n }\n if (stmtNode.type === 'ClassDeclaration') {\n throw new ParseError('class declarations are not allowed in faijs', line, 'E_STATEMENT')\n }\n if (stmtNode.type === 'NewExpression') {\n throw new ParseError('\"new\" expressions are not allowed in faijs (new Function is a safety red line)', line, 'E_STATEMENT')\n }\n if (stmtNode.type === 'WithStatement') {\n throw new ParseError('\"with\" statements are not allowed in faijs (strict mode)', line, 'E_CONTROL_FLOW')\n }\n // 其余未知顶层语句 → 只读块\n blocks.push({\n lineNo: line,\n kind: 'other',\n astKind: stmtNode.type,\n source: parseCode.slice(stmtNode.start, stmtNode.end),\n range: { start: stmtNode.start - codeOffset, end: stmtNode.end - codeOffset },\n })\n break\n }\n }\n }\n\n // P0-B:名称集合 = 参数 ∪ 已声明变量 ∪ 命名空间绑定 ∪ 本地函数名 ∪ 单位常量(字典序去重)。\n // 宿主把「参数表达式」中的未知标识符当作参数名(期望名)处理时用它做联想。\n // P6/D7:单位常量名(MM, INCH, DEGREE, …)加入 knownNames,使表达式实时校验通过。\n const names = [\n ...new Set([\n ...symbols.paramNames,\n ...symbols.declared,\n ...symbols.nsBindings.keys(),\n ...symbols.localFnParams.keys(),\n ...SCRIPT_UNIT_NAMES,\n ]),\n ].sort()\n\n // P6/D8: dimension 校验——如果有错误,抛出第一个(用 stage='dimension' 包装)\n if (allDimErrors.length > 0) {\n throw allDimErrors[0]\n }\n\n return { lines, params, imports, functions, blocks, keep: symbols.keep, meta, terminalShapes, argSources, names }\n}\n\nfunction isLiteralValue(init: ASTNode): boolean {\n return init.type === 'Literal'\n}\n\n/** 字面量(非数组/对象)直接取值。 */\nfunction parseLiteralValue(init: ASTNode): unknown {\n return init.value\n}\n\nfunction countLines(text: string): number {\n if (text === '') return 0\n return (text.match(/\\n/g) ?? []).length + 1\n}\n\nfunction onlyWhitespaceAndComments(text: string): boolean {\n return text\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n .replace(/\\/\\/[^\\n]*/g, '')\n .trim() === ''\n}\n\nfunction blockKind(type: string): BlockEntry['kind'] {\n switch (type) {\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n return 'loop'\n case 'IfStatement':\n return 'condition'\n case 'SwitchStatement':\n return 'switch'\n default:\n return 'other'\n }\n}\n\nfunction classifyImport(decl: ASTNode): ImportEntry {\n const line = lineOf(decl)\n const specifier = decl.source?.value\n if (typeof specifier !== 'string' || specifier === '') {\n throw new ParseError('import must have a string specifier', line, 'E_IMPORT')\n }\n const packageName = derivePackageName(specifier)\n const specs = decl.specifiers ?? []\n if (specs.length === 0) {\n throw new ParseError('side-effect imports are not supported (use import * as ns from \"pkg\")', line, 'E_IMPORT')\n }\n const first = specs[0]\n if (first.type === 'ImportNamespaceSpecifier') {\n return { lineNo: line, specifier, kind: 'namespace', bindings: [first.local?.name], localName: first.local?.name, packageName }\n }\n if (first.type === 'ImportDefaultSpecifier') {\n return { lineNo: line, specifier, kind: 'default', bindings: [first.local?.name], localName: first.local?.name, packageName }\n }\n const bindings: string[] = specs.map((s: ASTNode) => s.local?.name as string)\n return { lineNo: line, specifier, kind: 'named', bindings, localName: bindings[0], packageName }\n}\n\n/** init 是否为 op 调用 callee(<ns>.<op> / 裸本机函数)。 */\nfunction isOpCallCallee(init: ASTNode, ctx: ValueParseCtx): boolean {\n const callee = init.callee\n if (callee?.type === 'MemberExpression') {\n return (\n callee.object?.type === 'Identifier' &&\n callee.property?.type === 'Identifier' &&\n (ctx.symbols.nsBindings.has(callee.object.name) ||\n callee.object.name === ctx.symbols.defaultNsName ||\n ctx.symbols.declared.has(callee.object.name) ||\n ctx.looseVars)\n )\n }\n if (callee?.type === 'Identifier') {\n return ctx.symbols.localFnParams.has(callee.name) || ctx.looseLocalCalls\n }\n return false\n}\n\n/** 从调用表达式构造 op 行(output 单输出 / 副作用无输出)。 */\nfunction classifyOpCall(\n call: ASTNode,\n line: number,\n vctx: ValueParseCtx,\n opts: { output?: string; hasAssignment: boolean },\n): StatementSummary {\n const calleeNode = call.callee\n let callee: string\n let namespace: string | undefined\n let local: boolean | undefined\n let receiver: string | undefined\n\n if (calleeNode?.type === 'MemberExpression' && calleeNode.object?.type === 'Identifier' && calleeNode.property?.type === 'Identifier') {\n const objName = calleeNode.object.name\n if (vctx.symbols.nsBindings.has(objName) || objName === vctx.symbols.defaultNsName) {\n namespace = objName === vctx.symbols.defaultNsName ? undefined : objName\n callee = calleeNode.property.name\n } else {\n receiver = objName\n callee = calleeNode.property.name\n }\n } else if (calleeNode?.type === 'Identifier') {\n local = true\n callee = calleeNode.name\n } else {\n throw new ParseError('expected <ns>.<op>(...) or local function call', line, 'E_STATEMENT')\n }\n\n const positional = parsePositionalArgs(call.arguments ?? [], vctx, line)\n\n // P6/D8: dimension pass — check each argument against declared paramDims\n if (vctx.opDims && call.arguments) {\n // Build the full callee key for opDims lookup: 'cad.box' for default ns,\n // 'otherNs.box' for non-default ns, or just 'box' for local fn.\n const dimKey = namespace !== undefined ? `${namespace}.${callee}` : `${vctx.symbols.defaultNsName}.${callee}`\n const localKey = local ? callee : dimKey\n checkOpCallDims(call, local ? localKey : dimKey, vctx)\n }\n\n const summary = buildLineSummary({\n callee,\n line,\n ctx: vctx,\n positional,\n namespace,\n local,\n receiver,\n outputs: opts.output !== undefined ? [opts.output] : [],\n hasAssignment: opts.hasAssignment,\n })\n extractKeepEntries(positional, line, vctx.symbols)\n attachAssemblySummary(summary)\n return summary\n}\n\n/**\n * P6/D8: Check dimension constraints on op call arguments.\n *\n * Handles both object-form (`cad.box({ width: 10 * MM })`) and positional-form\n * (`cad.box(10 * MM, 10 * MM, 10 * MM)`). For positional form, uses slotMap\n * to map positional args to parameter names. For vec3 params, checks each element.\n *\n * Errors are accumulated in `ctx.dimErrors` (does not throw).\n */\nfunction checkOpCallDims(call: ASTNode, calleeKey: string, ctx: ValueParseCtx): void {\n const decl = ctx.opDims?.[calleeKey]\n if (!decl || !decl.paramDims) return\n\n const args = call.arguments ?? []\n if (args.length === 0) return\n\n const slotMap = decl.slotMap\n const shapeArity = slotMap?.shapeArity ?? 0\n\n // ── Object form ──\n // Look for an ObjectExpression arg that contains keys matching paramDims.\n // It could be at position `shapeArity` (with slotMap) or at any position\n // (without slotMap — e.g. fai_extrude(shape, { length: 5 })).\n if (slotMap) {\n const firstNonShape = args[shapeArity]\n if (firstNonShape?.type === 'ObjectExpression') {\n const hasDimKeys = firstNonShape.properties.some(\n (p: ASTNode) => p?.type === 'Property' && p.key?.type === 'Identifier' && p.key.name in decl.paramDims!,\n )\n if (hasDimKeys) {\n for (const prop of firstNonShape.properties) {\n if (prop?.type !== 'Property') continue\n const keyNode = prop.key\n if (keyNode?.type !== 'Identifier') continue\n const paramName = keyNode.name\n const dim = decl.paramDims[paramName]\n if (!dim) continue\n\n checkDim(prop.value, dim, ctx)\n\n if (slotMap.vec3Keys?.includes(paramName) && prop.value?.type === 'ArrayExpression') {\n for (const el of prop.value.elements ?? []) {\n if (el) checkDim(el, dim, ctx)\n }\n }\n }\n return\n }\n }\n } else {\n // No slotMap — scan all args for ObjectExpression with dim keys\n for (const arg of args) {\n if (arg?.type !== 'ObjectExpression') continue\n const hasDimKeys = arg.properties.some(\n (p: ASTNode) => p?.type === 'Property' && p.key?.type === 'Identifier' && p.key.name in decl.paramDims!,\n )\n if (!hasDimKeys) continue\n for (const prop of arg.properties) {\n if (prop?.type !== 'Property') continue\n const keyNode = prop.key\n if (keyNode?.type !== 'Identifier') continue\n const paramName = keyNode.name\n const dim = decl.paramDims[paramName]\n if (!dim) continue\n\n checkDim(prop.value, dim, ctx)\n }\n return\n }\n }\n\n // ── Positional form ──\n if (!slotMap) return\n const keys = slotMap.keys\n const vec3Keys = new Set(slotMap.vec3Keys ?? [])\n let keyIdx = 0\n for (let i = shapeArity; i < args.length && keyIdx < keys.length; i++) {\n const arg = args[i]\n if (arg?.type === 'ObjectExpression') break // trailing options object\n\n const paramName = keys[keyIdx]\n const dim = decl.paramDims[paramName]\n keyIdx++\n\n if (!dim) continue\n\n if (vec3Keys.has(paramName) && arg?.type === 'ArrayExpression') {\n for (const el of arg.elements ?? []) {\n if (el) checkDim(el, dim, ctx)\n }\n } else if (arg) {\n checkDim(arg, dim, ctx)\n }\n }\n}\n\n/**\n * P2-f4:装配语句摘要附加(cad.assembly / asmN.do_assemble / asmN.solve)。\n *\n * - `cad.assembly`(缺省命名空间,namespace===undefined)→ isAssembly + assembly 摘要。\n * 摘要只含 {name?, memberCount, constraintTypes};约束全文不提取(宿主 args 通道\n * 保留,model-store.ts:973 继续从 structuralStmtArgs(stmt).constraints 取)。\n * - `asmN.do_assemble` / `asmN.solve`(receiver 调用)→ isAssembly(装配行为语句)。\n */\nfunction attachAssemblySummary(summary: StatementSummary): void {\n if (summary.callee === 'assembly' && summary.namespace === undefined) {\n const members = summary.args.members\n const constraints = summary.args.constraints\n if (!Array.isArray(members) || !Array.isArray(constraints)) return\n const constraintTypes: string[] = []\n for (const c of constraints) {\n if (c && typeof c === 'object' && typeof (c as { type?: unknown }).type === 'string') {\n constraintTypes.push((c as { type: string }).type)\n }\n }\n const name = summary.args.name\n summary.isAssembly = true\n summary.assembly = {\n ...(typeof name === 'string' ? { name } : {}),\n memberCount: members.length,\n constraintTypes,\n }\n return\n }\n if ((summary.callee === 'do_assemble' || summary.callee === 'solve') && summary.receiver !== undefined) {\n summary.isAssembly = true\n }\n}\n\n/** 从解构调用构造 op 行(const { k1: v1, k2 } = <ns>.<op>(...))。 */\nfunction classifyDestructure(decl: ASTNode, line: number, vctx: ValueParseCtx): StatementSummary {\n const props = decl.id.properties\n if (props.length === 0) {\n throw new ParseError('destructuring must have at least one property', line, 'E_STATEMENT')\n }\n const keys: string[] = []\n const valueNames: string[] = []\n for (const prop of props) {\n if (prop.type !== 'Property' || prop.key?.type !== 'Identifier') {\n throw new ParseError('destructuring properties must be identifiers', line, 'E_STATEMENT')\n }\n if (prop.value?.type !== 'Identifier') {\n throw new ParseError(`destructuring value for \"${prop.key.name}\" must be an identifier`, line, 'E_STATEMENT')\n }\n keys.push(prop.key.name)\n valueNames.push(prop.value.name)\n }\n let init = decl.init\n if (init?.type === 'AwaitExpression') init = init.argument\n if (init?.type !== 'CallExpression') {\n throw new ParseError(`expected <ns>.<op>(...) or local function call in destructuring, got ${init?.type ?? 'null'}`, line, 'E_STATEMENT')\n }\n\n const calleeNode = init.callee\n let callee: string\n let namespace: string | undefined\n let local: boolean | undefined\n let receiver: string | undefined\n if (calleeNode?.type === 'MemberExpression' && calleeNode.object?.type === 'Identifier' && calleeNode.property?.type === 'Identifier') {\n const objName = calleeNode.object.name\n if (vctx.symbols.nsBindings.has(objName) || objName === vctx.symbols.defaultNsName) {\n namespace = objName === vctx.symbols.defaultNsName ? undefined : objName\n callee = calleeNode.property.name\n } else {\n receiver = objName\n callee = calleeNode.property.name\n }\n } else if (calleeNode?.type === 'Identifier') {\n local = true\n callee = calleeNode.name\n } else {\n throw new ParseError('destructuring is only allowed for <ns>.<op>(...) or local function calls', line, 'E_STATEMENT')\n }\n\n const positional = parsePositionalArgs(init.arguments ?? [], vctx, line)\n const summary = buildLineSummary({\n callee,\n line,\n ctx: vctx,\n positional,\n namespace,\n local,\n receiver,\n outputs: valueNames,\n outputKeys: keys,\n hasAssignment: true,\n })\n extractKeepEntries(positional, line, vctx.symbols)\n return summary\n}\n\n/** ExpressionStatement 分类(重赋值 / 本机副作用调用 / 成员方法 / 命名空间裸调用)。 */\nfunction classifyExpression(\n expr: ASTNode,\n line: number,\n vctx: ValueParseCtx,\n lines: StatementSummary[],\n): void {\n if (expr?.type === 'ImportExpression') {\n throw new ParseError('dynamic import() is not allowed in faijs (no control flow)', line, 'E_CONTROL_FLOW')\n }\n if (expr?.type === 'CallExpression' && expr.callee?.type === 'Identifier' && expr.callee.name === 'eval') {\n throw new ParseError('eval is not allowed in faijs', line, 'E_STATEMENT')\n }\n if (expr?.type === 'NewExpression') {\n throw new ParseError('\"new\" expressions are not allowed in faijs (new Function is a safety red line)', line, 'E_STATEMENT')\n }\n\n // 裸重赋值 part0 = [await] cad.op(...)\n if (expr?.type === 'AssignmentExpression' && expr.operator === '=' && expr.left?.type === 'Identifier') {\n const varName = expr.left.name\n if (!vctx.symbols.declared.has(varName)) {\n if (vctx.looseVars) {\n vctx.symbols.declared.add(varName)\n } else {\n throw new ParseError(`unknown variable \"${varName}\" in re-assignment`, line, 'E_REFERENCE')\n }\n }\n let init = expr.right\n if (init?.type === 'AwaitExpression') init = init.argument\n if (init?.type === 'CallExpression' && isOpCallCallee(init, vctx)) {\n const summary = classifyOpCall(init, line, vctx, { output: varName, hasAssignment: true })\n lines.push(summary)\n return\n }\n throw new ParseError('re-assignment must be a cad.op() call', line, 'E_STATEMENT')\n }\n\n // 成员方法 / 命名空间裸调用(无赋值)\n if (expr?.type === 'CallExpression' && expr.callee?.type === 'MemberExpression' &&\n expr.callee.object?.type === 'Identifier' && expr.callee.property?.type === 'Identifier') {\n const objName = expr.callee.object.name\n const isNs = vctx.symbols.nsBindings.has(objName) || objName === vctx.symbols.defaultNsName\n const isReceiver = vctx.symbols.declared.has(objName)\n if (isNs || isReceiver || vctx.looseVars) {\n const summary = classifyOpCall(expr, line, vctx, { hasAssignment: false })\n lines.push(summary)\n return\n }\n throw new ParseError(`unknown variable \"${objName}\" in .${expr.callee.property.name}() call`, line, 'E_REFERENCE')\n }\n\n // 本机函数副作用调用 myFn(part0, {...})\n if (expr?.type === 'CallExpression' && expr.callee?.type === 'Identifier') {\n const fnName = expr.callee.name\n if (vctx.symbols.localFnParams.has(fnName) || vctx.looseLocalCalls) {\n const summary = classifyOpCall(expr, line, vctx, { hasAssignment: false })\n lines.push(summary)\n return\n }\n throw new ParseError(`function \"${fnName}\" does not exist in this script`, line, 'E_REFERENCE')\n }\n\n throw new ParseError(\n `bare expression statements not allowed; use 'const part0 = cad.op(...)' instead`,\n line,\n 'E_STATEMENT',\n )\n}\n"]}