@faicad/faijs 0.14.1 → 0.16.1

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 (338) hide show
  1. package/dist/api/api-namespace.d.ts +7 -0
  2. package/dist/api/api-namespace.d.ts.map +1 -1
  3. package/dist/api/api-namespace.js +23 -22
  4. package/dist/api/api-namespace.js.map +1 -1
  5. package/dist/api/boolean.d.ts.map +1 -1
  6. package/dist/api/boolean.js +26 -8
  7. package/dist/api/boolean.js.map +1 -1
  8. package/dist/api/chamfer.d.ts.map +1 -1
  9. package/dist/api/chamfer.js +4 -1
  10. package/dist/api/chamfer.js.map +1 -1
  11. package/dist/api/generated/cad/script-face.d.ts +1 -1
  12. package/dist/api/generated/cad/script-face.d.ts.map +1 -1
  13. package/dist/api/generated/cad/script-face.js +1 -2
  14. package/dist/api/generated/cad/script-face.js.map +1 -1
  15. package/dist/api/generated/operations.js +16 -16
  16. package/dist/api/generated/operations.js.map +1 -1
  17. package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
  18. package/dist/api/generated/script-face-manifest.js +0 -1
  19. package/dist/api/generated/script-face-manifest.js.map +1 -1
  20. package/dist/api/generated/script-face.d.ts +1 -4
  21. package/dist/api/generated/script-face.d.ts.map +1 -1
  22. package/dist/api/generated/script-face.js +2 -3
  23. package/dist/api/generated/script-face.js.map +1 -1
  24. package/dist/api/generated/sketching.js +1 -1
  25. package/dist/api/generated/sketching.js.map +1 -1
  26. package/dist/api/generated/topology.d.ts +0 -8
  27. package/dist/api/generated/topology.d.ts.map +1 -1
  28. package/dist/api/generated/topology.js +19 -26
  29. package/dist/api/generated/topology.js.map +1 -1
  30. package/dist/api/index.d.ts +1 -10
  31. package/dist/api/index.d.ts.map +1 -1
  32. package/dist/api/index.js +10 -18
  33. package/dist/api/index.js.map +1 -1
  34. package/dist/api/internal/compat-projection.d.ts +3 -1
  35. package/dist/api/internal/compat-projection.d.ts.map +1 -1
  36. package/dist/api/internal/compat-projection.js +8 -5
  37. package/dist/api/internal/compat-projection.js.map +1 -1
  38. package/dist/api/internal/replica-role-table.d.ts +36 -0
  39. package/dist/api/internal/replica-role-table.d.ts.map +1 -0
  40. package/dist/api/internal/replica-role-table.js +73 -0
  41. package/dist/api/internal/replica-role-table.js.map +1 -0
  42. package/dist/api/internal/result-unwrap.d.ts +3 -1
  43. package/dist/api/internal/result-unwrap.d.ts.map +1 -1
  44. package/dist/api/internal/result-unwrap.js +2 -2
  45. package/dist/api/internal/result-unwrap.js.map +1 -1
  46. package/dist/api/occt-kernel-bridge.d.ts +105 -27
  47. package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
  48. package/dist/api/occt-kernel-bridge.js +255 -41
  49. package/dist/api/occt-kernel-bridge.js.map +1 -1
  50. package/dist/api/pattern.d.ts.map +1 -1
  51. package/dist/api/pattern.js +25 -61
  52. package/dist/api/pattern.js.map +1 -1
  53. package/dist/api/replicate.d.ts +145 -0
  54. package/dist/api/replicate.d.ts.map +1 -0
  55. package/dist/api/replicate.js +351 -0
  56. package/dist/api/replicate.js.map +1 -0
  57. package/dist/api/revolve.d.ts +36 -0
  58. package/dist/api/revolve.d.ts.map +1 -0
  59. package/dist/api/revolve.js +165 -0
  60. package/dist/api/revolve.js.map +1 -0
  61. package/dist/api/surface/arg-spec.d.ts +8 -0
  62. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  63. package/dist/api/surface/arg-spec.js +37 -36
  64. package/dist/api/surface/arg-spec.js.map +1 -1
  65. package/dist/api/surface/projection-overrides.d.ts.map +1 -1
  66. package/dist/api/surface/projection-overrides.js +6 -0
  67. package/dist/api/surface/projection-overrides.js.map +1 -1
  68. package/dist/boolean/deriveNormals.d.ts +5 -4
  69. package/dist/boolean/deriveNormals.d.ts.map +1 -1
  70. package/dist/boolean/deriveNormals.js +24 -7
  71. package/dist/boolean/deriveNormals.js.map +1 -1
  72. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  73. package/dist/brep/engine/adapters/brep-mock.js +58 -0
  74. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  75. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  76. package/dist/brep/engine/adapters/brepkit.js +39 -1
  77. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  78. package/dist/brep/engine/adapters/occt.d.ts +1 -5
  79. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  80. package/dist/brep/engine/adapters/occt.js +232 -18
  81. package/dist/brep/engine/adapters/occt.js.map +1 -1
  82. package/dist/brep/engine/primitives.d.ts +79 -0
  83. package/dist/brep/engine/primitives.d.ts.map +1 -1
  84. package/dist/brep/engine/primitives.js.map +1 -1
  85. package/dist/brep/engine/types.d.ts +18 -1
  86. package/dist/brep/engine/types.d.ts.map +1 -1
  87. package/dist/brep/engine/types.js.map +1 -1
  88. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  89. package/dist/brepkit-kernel/brepkitKernel.js +81 -11
  90. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  91. package/dist/browser.d.ts +6 -28
  92. package/dist/browser.d.ts.map +1 -1
  93. package/dist/browser.js +6 -17
  94. package/dist/browser.js.map +1 -1
  95. package/dist/cad-runtime/admit-compat-lib.d.ts +13 -18
  96. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  97. package/dist/cad-runtime/admit-compat-lib.js +25 -18
  98. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  99. package/dist/cad-runtime/backend-dispatch.d.ts +4 -2
  100. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  101. package/dist/cad-runtime/backend-dispatch.js +2 -0
  102. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  103. package/dist/cad-runtime/browser-lib-loader.d.ts +4 -6
  104. package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
  105. package/dist/cad-runtime/browser-lib-loader.js +4 -9
  106. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  107. package/dist/cad-runtime/ports.d.ts +0 -7
  108. package/dist/cad-runtime/ports.d.ts.map +1 -1
  109. package/dist/cad-runtime/ports.js.map +1 -1
  110. package/dist/cad-runtime/runtime.d.ts +1 -3
  111. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  112. package/dist/cad-runtime/runtime.js +13 -18
  113. package/dist/cad-runtime/runtime.js.map +1 -1
  114. package/dist/env-agnostic.d.ts +38 -0
  115. package/dist/env-agnostic.d.ts.map +1 -0
  116. package/dist/env-agnostic.js +29 -0
  117. package/dist/env-agnostic.js.map +1 -0
  118. package/dist/fcstd/codegen.d.ts.map +1 -1
  119. package/dist/fcstd/codegen.js +8 -1
  120. package/dist/fcstd/codegen.js.map +1 -1
  121. package/dist/fcstd/expressions.d.ts +24 -0
  122. package/dist/fcstd/expressions.d.ts.map +1 -1
  123. package/dist/fcstd/expressions.js +91 -0
  124. package/dist/fcstd/expressions.js.map +1 -1
  125. package/dist/fcstd/feature-translate.d.ts.map +1 -1
  126. package/dist/fcstd/feature-translate.js +16 -2
  127. package/dist/fcstd/feature-translate.js.map +1 -1
  128. package/dist/fcstd/structural-types.d.ts.map +1 -1
  129. package/dist/fcstd/structural-types.js +5 -0
  130. package/dist/fcstd/structural-types.js.map +1 -1
  131. package/dist/index.d.ts +7 -24
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +10 -16
  134. package/dist/index.js.map +1 -1
  135. package/dist/lang/determinism-scanner.d.ts +9 -0
  136. package/dist/lang/determinism-scanner.d.ts.map +1 -1
  137. package/dist/lang/determinism-scanner.js +7 -1
  138. package/dist/lang/determinism-scanner.js.map +1 -1
  139. package/dist/lang/symbol-table.d.ts +31 -0
  140. package/dist/lang/symbol-table.d.ts.map +1 -1
  141. package/dist/lang/symbol-table.generated.d.ts +6 -16
  142. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  143. package/dist/lang/symbol-table.generated.js +6 -16
  144. package/dist/lang/symbol-table.generated.js.map +1 -1
  145. package/dist/lang/symbol-table.js +50 -1
  146. package/dist/lang/symbol-table.js.map +1 -1
  147. package/dist/mesh/creased-normals.d.ts +50 -0
  148. package/dist/mesh/creased-normals.d.ts.map +1 -0
  149. package/dist/mesh/creased-normals.js +114 -0
  150. package/dist/mesh/creased-normals.js.map +1 -0
  151. package/dist/mesh/decoration-provider.d.ts +53 -0
  152. package/dist/mesh/decoration-provider.d.ts.map +1 -0
  153. package/dist/mesh/decoration-provider.js +21 -0
  154. package/dist/mesh/decoration-provider.js.map +1 -0
  155. package/dist/mesh/engrave.d.ts +4 -0
  156. package/dist/mesh/engrave.d.ts.map +1 -1
  157. package/dist/mesh/engrave.js +22 -31
  158. package/dist/mesh/engrave.js.map +1 -1
  159. package/dist/mesh/index.d.ts +5 -14
  160. package/dist/mesh/index.d.ts.map +1 -1
  161. package/dist/mesh/index.js +7 -19
  162. package/dist/mesh/index.js.map +1 -1
  163. package/dist/mesh/io.d.ts +2 -1
  164. package/dist/mesh/io.d.ts.map +1 -1
  165. package/dist/mesh/io.js +5 -7
  166. package/dist/mesh/io.js.map +1 -1
  167. package/dist/mesh/primitives.d.ts +5 -18
  168. package/dist/mesh/primitives.d.ts.map +1 -1
  169. package/dist/mesh/primitives.js +4 -48
  170. package/dist/mesh/primitives.js.map +1 -1
  171. package/dist/mesh/stl-loader.d.ts +23 -0
  172. package/dist/mesh/stl-loader.d.ts.map +1 -0
  173. package/dist/mesh/stl-loader.js +139 -0
  174. package/dist/mesh/stl-loader.js.map +1 -0
  175. package/dist/module-resolver/parse-imports.d.ts +37 -0
  176. package/dist/module-resolver/parse-imports.d.ts.map +1 -0
  177. package/dist/module-resolver/parse-imports.js +39 -0
  178. package/dist/module-resolver/parse-imports.js.map +1 -0
  179. package/dist/module-resolver/resolver.d.ts +1 -1
  180. package/dist/module-resolver/resolver.js +2 -2
  181. package/dist/module-resolver/resolver.js.map +1 -1
  182. package/dist/node-host/cli.d.ts.map +1 -1
  183. package/dist/node-host/cli.js +1 -22
  184. package/dist/node-host/cli.js.map +1 -1
  185. package/dist/primitives/text/cjk-font.d.ts +42 -0
  186. package/dist/primitives/text/cjk-font.d.ts.map +1 -0
  187. package/dist/primitives/text/cjk-font.js +86 -0
  188. package/dist/primitives/text/cjk-font.js.map +1 -0
  189. package/dist/sdk.d.ts +2 -2
  190. package/dist/sdk.js +2 -2
  191. package/dist/sdk.js.map +1 -1
  192. package/dist/symbol-table.d.ts +15 -0
  193. package/dist/symbol-table.d.ts.map +1 -0
  194. package/dist/symbol-table.js +14 -0
  195. package/dist/symbol-table.js.map +1 -0
  196. package/dist/topology/naming/lineage-resolve.js +1 -1
  197. package/dist/topology/naming/lineage-resolve.js.map +1 -1
  198. package/dist/vendored/brepjs/kernel/index.d.ts +5 -0
  199. package/dist/vendored/brepjs/kernel/index.d.ts.map +1 -1
  200. package/dist/vendored/brepjs/kernel/index.js +11 -0
  201. package/dist/vendored/brepjs/kernel/index.js.map +1 -1
  202. package/dist/weapp.d.ts +3 -3
  203. package/dist/weapp.d.ts.map +1 -1
  204. package/dist/weapp.js +6 -3
  205. package/dist/weapp.js.map +1 -1
  206. package/package.json +16 -14
  207. package/dist/api/compat/index.d.ts +0 -173
  208. package/dist/api/compat/index.d.ts.map +0 -1
  209. package/dist/api/compat/index.js +0 -222
  210. package/dist/api/compat/index.js.map +0 -1
  211. package/dist/api/compound.d.ts +0 -110
  212. package/dist/api/compound.d.ts.map +0 -1
  213. package/dist/api/compound.js +0 -164
  214. package/dist/api/compound.js.map +0 -1
  215. package/dist/api/copy.d.ts +0 -40
  216. package/dist/api/copy.d.ts.map +0 -1
  217. package/dist/api/copy.js +0 -83
  218. package/dist/api/copy.js.map +0 -1
  219. package/dist/api/fai_drill.d.ts +0 -46
  220. package/dist/api/fai_drill.d.ts.map +0 -1
  221. package/dist/api/fai_drill.js +0 -243
  222. package/dist/api/fai_drill.js.map +0 -1
  223. package/dist/api/fai_extrude.d.ts +0 -36
  224. package/dist/api/fai_extrude.d.ts.map +0 -1
  225. package/dist/api/fai_extrude.js +0 -79
  226. package/dist/api/fai_extrude.js.map +0 -1
  227. package/dist/api/fai_split.d.ts +0 -46
  228. package/dist/api/fai_split.d.ts.map +0 -1
  229. package/dist/api/fai_split.js +0 -254
  230. package/dist/api/fai_split.js.map +0 -1
  231. package/dist/api/load.d.ts +0 -41
  232. package/dist/api/load.d.ts.map +0 -1
  233. package/dist/api/load.js +0 -84
  234. package/dist/api/load.js.map +0 -1
  235. package/dist/api/svgExtrude.d.ts +0 -32
  236. package/dist/api/svgExtrude.d.ts.map +0 -1
  237. package/dist/api/svgExtrude.js +0 -74
  238. package/dist/api/svgExtrude.js.map +0 -1
  239. package/dist/api/text.d.ts +0 -34
  240. package/dist/api/text.d.ts.map +0 -1
  241. package/dist/api/text.js +0 -101
  242. package/dist/api/text.js.map +0 -1
  243. package/dist/brep/text/fontTestHelper.d.ts +0 -30
  244. package/dist/brep/text/fontTestHelper.d.ts.map +0 -1
  245. package/dist/brep/text/fontTestHelper.js +0 -57
  246. package/dist/brep/text/fontTestHelper.js.map +0 -1
  247. package/dist/cad-runtime/module-executor.d.ts +0 -271
  248. package/dist/cad-runtime/module-executor.d.ts.map +0 -1
  249. package/dist/cad-runtime/module-executor.js +0 -630
  250. package/dist/cad-runtime/module-executor.js.map +0 -1
  251. package/dist/cad-runtime/terminal-dag.d.ts +0 -65
  252. package/dist/cad-runtime/terminal-dag.d.ts.map +0 -1
  253. package/dist/cad-runtime/terminal-dag.js +0 -167
  254. package/dist/cad-runtime/terminal-dag.js.map +0 -1
  255. package/dist/faqts/browser.d.ts +0 -16
  256. package/dist/faqts/browser.d.ts.map +0 -1
  257. package/dist/faqts/browser.js +0 -13
  258. package/dist/faqts/browser.js.map +0 -1
  259. package/dist/faqts/exec-blob.d.ts +0 -14
  260. package/dist/faqts/exec-blob.d.ts.map +0 -1
  261. package/dist/faqts/exec-blob.js +0 -22
  262. package/dist/faqts/exec-blob.js.map +0 -1
  263. package/dist/faqts/exec-node.d.ts +0 -15
  264. package/dist/faqts/exec-node.d.ts.map +0 -1
  265. package/dist/faqts/exec-node.js +0 -29
  266. package/dist/faqts/exec-node.js.map +0 -1
  267. package/dist/faqts/imports.d.ts +0 -74
  268. package/dist/faqts/imports.d.ts.map +0 -1
  269. package/dist/faqts/imports.js +0 -95
  270. package/dist/faqts/imports.js.map +0 -1
  271. package/dist/faqts/index.d.ts +0 -22
  272. package/dist/faqts/index.d.ts.map +0 -1
  273. package/dist/faqts/index.js +0 -21
  274. package/dist/faqts/index.js.map +0 -1
  275. package/dist/faqts/node.d.ts +0 -23
  276. package/dist/faqts/node.d.ts.map +0 -1
  277. package/dist/faqts/node.js +0 -23
  278. package/dist/faqts/node.js.map +0 -1
  279. package/dist/faqts/run.d.ts +0 -62
  280. package/dist/faqts/run.d.ts.map +0 -1
  281. package/dist/faqts/run.js +0 -62
  282. package/dist/faqts/run.js.map +0 -1
  283. package/dist/faqts/transform.d.ts +0 -43
  284. package/dist/faqts/transform.d.ts.map +0 -1
  285. package/dist/faqts/transform.js +0 -35
  286. package/dist/faqts/transform.js.map +0 -1
  287. package/dist/lang/compile.d.ts +0 -50
  288. package/dist/lang/compile.d.ts.map +0 -1
  289. package/dist/lang/compile.js +0 -368
  290. package/dist/lang/compile.js.map +0 -1
  291. package/dist/lang/keep.d.ts +0 -109
  292. package/dist/lang/keep.d.ts.map +0 -1
  293. package/dist/lang/keep.js +0 -226
  294. package/dist/lang/keep.js.map +0 -1
  295. package/dist/lang/parser.d.ts +0 -91
  296. package/dist/lang/parser.d.ts.map +0 -1
  297. package/dist/lang/parser.js +0 -1594
  298. package/dist/lang/parser.js.map +0 -1
  299. package/dist/mesh/drill-hole/DrillHoleCore.d.ts +0 -90
  300. package/dist/mesh/drill-hole/DrillHoleCore.d.ts.map +0 -1
  301. package/dist/mesh/drill-hole/DrillHoleCore.js +0 -287
  302. package/dist/mesh/drill-hole/DrillHoleCore.js.map +0 -1
  303. package/dist/mesh/drill-hole/drill-types.d.ts +0 -34
  304. package/dist/mesh/drill-hole/drill-types.d.ts.map +0 -1
  305. package/dist/mesh/drill-hole/drill-types.js +0 -7
  306. package/dist/mesh/drill-hole/drill-types.js.map +0 -1
  307. package/dist/mesh/fai_drill.d.ts +0 -21
  308. package/dist/mesh/fai_drill.d.ts.map +0 -1
  309. package/dist/mesh/fai_drill.js +0 -92
  310. package/dist/mesh/fai_drill.js.map +0 -1
  311. package/dist/mesh/fai_extrude.d.ts +0 -24
  312. package/dist/mesh/fai_extrude.d.ts.map +0 -1
  313. package/dist/mesh/fai_extrude.js +0 -42
  314. package/dist/mesh/fai_extrude.js.map +0 -1
  315. package/dist/mesh/fai_split.d.ts +0 -164
  316. package/dist/mesh/fai_split.d.ts.map +0 -1
  317. package/dist/mesh/fai_split.js +0 -269
  318. package/dist/mesh/fai_split.js.map +0 -1
  319. package/dist/primitives/svg-extrude.d.ts +0 -43
  320. package/dist/primitives/svg-extrude.d.ts.map +0 -1
  321. package/dist/primitives/svg-extrude.js +0 -78
  322. package/dist/primitives/svg-extrude.js.map +0 -1
  323. package/dist/primitives/text/cjk.d.ts +0 -61
  324. package/dist/primitives/text/cjk.d.ts.map +0 -1
  325. package/dist/primitives/text/cjk.js +0 -215
  326. package/dist/primitives/text/cjk.js.map +0 -1
  327. package/dist/primitives/text-geometry.d.ts +0 -47
  328. package/dist/primitives/text-geometry.d.ts.map +0 -1
  329. package/dist/primitives/text-geometry.js +0 -127
  330. package/dist/primitives/text-geometry.js.map +0 -1
  331. package/dist/test-helpers.d.ts +0 -31
  332. package/dist/test-helpers.d.ts.map +0 -1
  333. package/dist/test-helpers.js +0 -55
  334. package/dist/test-helpers.js.map +0 -1
  335. package/dist/vendored/brepjs/core/kernelReentrancy.d.ts +0 -41
  336. package/dist/vendored/brepjs/core/kernelReentrancy.d.ts.map +0 -1
  337. package/dist/vendored/brepjs/core/kernelReentrancy.js +0 -68
  338. package/dist/vendored/brepjs/core/kernelReentrancy.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,24 +15,17 @@
15
15
  * - OCCT Kernel:initOcctWasm / getKernel / setOcctWasmInitFn / ...
16
16
  * - CSG Backend:setCsgBackend / geoToManifoldMesh / ...
17
17
  */
18
- export { asFileId, asInnerId, asScopedId, asStmtId, asPartName, asGroupName, asRefId, asReferenceId, asSelectorKey, asOccurrenceId, asShapeId, asFaceId, asEdgeId, asNodeId, toScopedId, splitScopedId, isScopedId, toInnerId, } from './identity.js';
19
- // ── 运行时状态锚点(零依赖层;引擎与库共享)
20
- export { configureBackends, getBackends, setCurrentStmt, getCurrentStmt, keep, keepHidden, getRuntimeState, nameOf, setName, setKeepSink, setPendingAssemblyTransforms, takePendingAssemblyTransforms, assertContractVersion, CONTRACT_VERSION, } from './runtime-state.js';
21
- export { derivePartName, getMaxModelNum, } from './lang/allocate-id.js';
22
- export { fmtNum, formatCodeLine } from './lang/codegen.js';
23
- export { analyzeCode } from './lang/statement-summary.js';
24
- export { codeToArgs } from './lang/code-to-args.js';
25
- // MetadataExtractor — 无 IR 元数据提取器(UI 通道语义源;UiMetadata 全量)
26
- export { extractMetadata } from './lang/metadata-extractor.js';
27
- // SecurityScanner — 静态安全门禁(纵深防御第一层)
28
- export { scanSource, scanAst, assertSecure } from './lang/security-scanner.js';
29
- export { isHostVarRef, isHostParamRef, isHostCallRef, isHostExprRef, isHostRef, hostArgToDisplay, hostArgToLiteral, HOST_REF_KINDS, } from './lang/host-arg.js';
18
+ // ── 共享面(env-agnostic:identity + runtime-state + lang/*)──
19
+ // 手写清单已收敛:三处 umbrella(index/browser/weapp)统一 re-export,防漂移。
20
+ export * from './env-agnostic.js';
30
21
  export { createBrepChainState, initBrepChainState, releaseBrepChainState, isCadFormat, } from './brep/brep-chain.js';
31
22
  export { solidToShape, getSolidBoundingBox, translateBrep, rotateBrep, scaleBrep, fuseBrep, cutBrep, commonBrep, drillBrep, splitBrep, extrudeBrep, loadBrep, matrixToArray, } from './brep/index.js';
32
23
  export { buildStlBufferFromMesh } from './brep/export/stl.js';
33
24
  export { exportStepFromSolid, exportStepFromSolids } from './brep/export/step.js';
34
- // ── L1 Mesh 执行�?──
25
+ // ── L1 Mesh ──
35
26
  export { cad } from './mesh/index.js';
27
+ // 宿主注入的 mesh 装饰几何(cad.engrave 的文字/SVG 几何链在 @faicad/faijs-extra)
28
+ export { setEngraveDecorationProvider, getEngraveDecorationProvider } from './mesh/decoration-provider.js';
36
29
  export { setManifoldWasmUrl, getManifoldWasmUrl, getManifoldModule } from './mesh/manifold-loader.js';
37
30
  export { NRAD_DEFAULT, NRAD_MIN, NRAD_MAX, clampNRad } from './mesh/types.js';
38
31
  export { faceAt } from './mesh/query.js';
@@ -49,10 +42,11 @@ export { geoToManifoldMesh, manifoldMeshToGeo } from './boolean/geo-convert.js';
49
42
  export { mergeBufferGeometries, makePrimitiveGeo, DEFAULT_SIZE, applyPrimitiveOffset } from './primitives/mesh-primitives.js';
50
43
  export { makeScrew } from './primitives/screw/screw.js';
51
44
  export { getScrewSpec, getScrewSpecs, threadToPitchMm, SCREW_HEAD_DIMS } from './primitives/screw/screw-db.js';
52
- export { svgToExtrudedGeometry } from './primitives/svg-extrude.js';
45
+ export { parseSvgNaturalSize } from './primitives/parse-svg-size.js';
53
46
  export { extractMeshData, primitiveToBrepSolid, geometryToBrepSolid, brepSolidToStep, primitiveToBrepStep, } from './primitives/brep-primitives.js';
54
- export { loadSystemCjkFont, containsCjk, isCjkChar, createMixedTextGeometry } from './primitives/text/cjk.js';
55
- export { createTextGeometry, getOpentypeFont, opentypePathToGeometry } from './primitives/text-geometry.js';
47
+ // B 组(svg 挤出 / 3D 文字几何链)已随 @faicad/faijs-extra 迁出;
48
+ // 留 core 的是零 three 的 CJK 字符判定与系统字体装载。
49
+ export { loadSystemCjkFont, containsCjk, isCjkChar } from './primitives/text/cjk-font.js';
56
50
  export { nextPrimitiveColor } from './primitives/types.js';
57
51
  // ── L1 SDF ──
58
52
  export { runSdf } from './sdf/sdf-runner.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @faicad/faijs �?Faicad CAD execution engine\n *\n * 公开 API 统一入口。所有导出按层组织:\n * - L0 文本层:parser / codegen / symbol-table / types\n * - L1 几何执行层:BREP ops / Shape / 导出\n * - L1 Mesh 执行层:cad API\n * - L1 Boolean/CSG 辅助:cross-section / deriveNormals / extrude-helpers / joinery-shapes\n * - L1 Primitives:geometry / screw / svg-extrude / text / types\n * - L1 SDF:sdf-runner / templates / types\n * - L1 Knurl:KnurlGenerator / subdivision / textureLoader\n * - L1 Topology:build-face-ids / build-selector-runtime / types\n * - L2 编排层:CadRuntime / HostPorts\n * - L3 Node Host:createNodePorts / CLI\n * - OCCT Kernel:initOcctWasm / getKernel / setOcctWasmInitFn / ...\n * - CSG Backend:setCsgBackend / geoToManifoldMesh / ...\n */\n\n// ── identity:品牌类型 + 信任点(f0,零依赖)\nexport type {\n FileId, InnerId, ScopedId, StmtId, PartName, GroupName,\n RefId, ReferenceId, SelectorKey, OccurrenceId, ShapeId,\n FaceId, EdgeId, NodeId, StatementId, FaceSelector,\n} from './identity'\nexport {\n asFileId, asInnerId, asScopedId, asStmtId, asPartName, asGroupName,\n asRefId, asReferenceId, asSelectorKey, asOccurrenceId, asShapeId,\n asFaceId, asEdgeId, asNodeId,\n toScopedId, splitScopedId, isScopedId, toInnerId,\n} from './identity'\n\n// ── 运行时状态锚点(零依赖层;引擎与库共享)\nexport {\n configureBackends, getBackends, setCurrentStmt, getCurrentStmt,\n keep, keepHidden, getRuntimeState, nameOf, setName, setKeepSink,\n setPendingAssemblyTransforms, takePendingAssemblyTransforms, assertContractVersion,\n CONTRACT_VERSION,\n} from './runtime-state'\nexport type {\n Backends, FaijsRuntimeState, ShapeSlot, KeepSink, RuntimeExecutionMode,\n AssemblyTransform, StdlibFn, StdlibNamespace, ExecutionAnchor,\n} from './runtime-state'\n\n// ── L0 文本层(IR 是引擎内部实现细节,不导出;公开面只有代码文本工具与结果类型)\nexport type {\n Vec3, JsonValue,\n TerminalShape, ParamDef,\n} from './lang/types'\n// Phase 2.11-②:三库(fai_cq_gears / fai_cq_warehouse / sheetmetal)的 fn.naming 声明需要此类型。\nexport type { Provenance, NewFaceRule } from './topology/naming/lineage'\nexport {\n derivePartName, getMaxModelNum,\n} from './lang/allocate-id'\nexport type { DerivePartNameInput, DerivePartNameResult } from './lang/allocate-id'\nexport { fmtNum, formatCodeLine } from './lang/codegen'\nexport type { FormatCodeLineInput } from './lang/codegen'\nexport { analyzeCode } from './lang/statement-summary'\nexport type { StatementSummary } from './lang/statement-summary'\nexport { codeToArgs } from './lang/code-to-args'\nexport type { CodeToArgsResult } from './lang/code-to-args'\n// MetadataExtractor — 无 IR 元数据提取器(UI 通道语义源;UiMetadata 全量)\nexport { extractMetadata } from './lang/metadata-extractor'\nexport type {\n UiMetadata, ParamEntry, ImportEntry, FunctionEntry, BlockEntry, KeepEntry,\n ExtractMetadataOptions,\n} from './lang/metadata-extractor'\n// SecurityScanner — 静态安全门禁(纵深防御第一层)\nexport { scanSource, scanAst, assertSecure } from './lang/security-scanner'\nexport type {\n SecurityPolicy, SecurityRuleId, SecurityViolation,\n SecurityScanOptions, SecurityScanResult,\n} from './lang/security-scanner'\n// HostArg — 宿主友好位置参数类型(IR 屏蔽层)\nexport type {\n HostArg, HostRef, HostVarRef, HostParamRef, HostCallRef, HostExprRef, HostRefKind,\n} from './lang/host-arg'\nexport {\n isHostVarRef, isHostParamRef, isHostCallRef, isHostExprRef, isHostRef,\n hostArgToDisplay, hostArgToLiteral, HOST_REF_KINDS,\n} from './lang/host-arg'\n\n// ── L1 几何执行 ──\nexport type { Shape } from './mesh/types'\nexport type { BrepChainState } from './brep/brep-chain'\nexport {\n createBrepChainState, initBrepChainState, releaseBrepChainState,\n isCadFormat,\n} from './brep/brep-chain'\nexport {\n solidToShape, getSolidBoundingBox,\n translateBrep, rotateBrep, scaleBrep,\n fuseBrep, cutBrep, commonBrep,\n drillBrep, splitBrep, extrudeBrep,\n loadBrep, matrixToArray,\n} from './brep'\nexport type { DrillBrepParams, SplitBrepParams, SplitBrepResult, ExtrudeBrepParams } from './brep'\nexport { buildStlBufferFromMesh } from './brep/export/stl'\nexport { exportStepFromSolid, exportStepFromSolids } from './brep/export/step'\nexport type { StepExportEntry } from './brep/export/step'\n\n// ── L1 Mesh 执行�?──\nexport { cad } from './mesh'\nexport { setManifoldWasmUrl, getManifoldWasmUrl, getManifoldModule } from './mesh/manifold-loader'\nexport type {\n BoundingBox, FaceDescriptor,\n BoxParams, SphereParams, CylinderParams, ConeParams, WedgeParams,\n TextParams, SvgExtrudeParams, SdfParams,\n DrillParams, ExtrudeParams, EngraveParams, KnurlParams,\n SplitPlane, SplitResult,\n} from './mesh/types'\nexport { NRAD_DEFAULT, NRAD_MIN, NRAD_MAX, clampNRad } from './mesh/types'\nexport { faceAt } from './mesh/query'\n\n// ── L1 Boolean/CSG 辅助 ──\nexport { computeSection, buildExtrudedProfile } from './boolean/cross-section'\nexport { manifoldToMeshData, weldPositionsWorker, dovetailBooleanSplit, dowelOrTenonBooleanSplit } from './boolean/csg-core'\nexport { deriveNormals } from './boolean/deriveNormals'\nexport { buildExtrudeParts, makeWorldPlane } from './boolean/extrude-helpers'\nexport type { ExtrudeParts, ExtrudeOffsetMode } from './boolean/extrude-helpers'\nexport {\n buildWedgeGeometry, buildDowelGeometry, buildStraightTenonGeometry,\n} from './boolean/joinery-shapes'\nexport type { JoineryMeshData } from './boolean/joinery-shapes'\n\n// ── CSG Backend ──\nexport { setCsgBackend } from './boolean/csg-backend'\nexport { geoToManifoldMesh, manifoldMeshToGeo } from './boolean/geo-convert'\nexport type {\n ManifoldMeshData, BooleanOperation,\n DovetailGrooveParams, DowelSplitParams, StraightTenonSplitParams,\n} from './boolean/geo-convert'\n\n// ── L1 Primitives ──\nexport { mergeBufferGeometries, makePrimitiveGeo, DEFAULT_SIZE, applyPrimitiveOffset } from './primitives/mesh-primitives'\nexport { makeScrew } from './primitives/screw/screw'\nexport { getScrewSpec, getScrewSpecs, threadToPitchMm, SCREW_HEAD_DIMS } from './primitives/screw/screw-db'\nexport type { ScrewParams, ScrewSpec, ScrewSystem } from './primitives/screw/screw-db'\nexport { svgToExtrudedGeometry } from './primitives/svg-extrude'\nexport {\n extractMeshData, primitiveToBrepSolid, geometryToBrepSolid,\n brepSolidToStep, primitiveToBrepStep,\n} from './primitives/brep-primitives'\nexport type { PrimitiveToBrepResult, PrimitiveParams } from './primitives/brep-primitives'\nexport { loadSystemCjkFont, containsCjk, isCjkChar, createMixedTextGeometry } from './primitives/text/cjk'\nexport type { CjkFontResult } from './primitives/text/cjk'\nexport { createTextGeometry, getOpentypeFont, opentypePathToGeometry } from './primitives/text-geometry'\nexport type {\n PrimitiveType, PrimitiveParamsRecord, PrimitiveArgsRecord, PrimitiveMeta,\n} from './primitives/types'\nexport { nextPrimitiveColor } from './primitives/types'\n\n// ── L1 SDF ──\nexport { runSdf } from './sdf/sdf-runner'\nexport type { SdfMeshData } from './sdf/sdf-runner'\nexport { runSdfInline } from './sdf/sdf-core'\nexport { SDF_TEMPLATES, DEFAULT_SDF_TEMPLATE } from './sdf/templates'\nexport type {\n SdfMeta, SdfBox, SdfParamDef, SdfTemplateCategory,\n SdfWorkerInput, SdfWorkerMessage,\n} from './sdf/types'\nexport { boxToTuple, parseParamDefs, defaultParamValues } from './sdf/types'\n\n// ── L1 Knurl ──\nexport { applyKnurlDisplacement, KNURL_DEFAULTS } from './mesh/knurl/KnurlGenerator'\nexport type { KnurlBounds } from './mesh/knurl/KnurlGenerator'\nexport { subdivide } from './mesh/knurl/subdivision'\nexport { loadKnurlingTexture, setKnurlTextureLoader } from './mesh/knurl/textureLoader'\nexport type { TextureData } from './mesh/knurl/textureLoader'\nexport { QuantizedPointMap, weldVertices } from './mesh/knurl/meshIndex'\nexport { computeUV, MODE_TRIPLANAR, getCubicBlendWeights, type MappingSettings } from './mesh/knurl/mapping'\nexport { applyDisplacement, type DisplacementSettings } from './mesh/knurl/displacement'\n\n// ── L1 Topology ──\nexport { TOPOLOGY_FACE_ID_NONE, buildFaceIdsForPart } from './topology/build-face-ids'\nexport {\n buildSelectorRuntime, buildSelectorRuntimeData, buildSelectorRuntimeMaps,\n} from './topology/build-selector-runtime'\nexport type { SelectorRuntimeData } from './topology/build-selector-runtime'\nexport type {\n SelectorRuntime, SelectorBundle, SelectorManifest, SelectorBuffers,\n FaceRow, EdgeRow, Reference,\n BufferViewDescriptor, SelectorProxy,\n} from './topology/types'\n\nexport * from './topology/naming'\n\n// ── L2 编排�?──\n// D1(2026-09-19):createRuntime 自注册 cad 默认命名空间(引擎 + 标准库定位)。\n// 需要纯引擎(不带 cad)的宿主可直接 import { createRuntime } from './cad-runtime/runtime'。\nexport { CadRuntime, createRuntime, computeContentKey, AppendPrefixError } from './cad-runtime/createRuntimeWithCad'\nexport { createPreviewExec } from './cad-runtime/preview-exec'\nexport type { PreviewExec } from './cad-runtime/preview-exec'\nexport type { ExecutionResult, ExecuteOptions, CheckResult, CheckError, CadRuntimeOptions } from './cad-runtime/runtime'\nexport type {\n HostPorts, CsgBackend, SdfBackend, FontProvider, TextureSampler,\n AssetResolver, EventSink, ExecutionMode,\n MeshData, PlaneParams, SplitResult as CsgSplitResult,\n DovetailGrooveParams as PortDovetailGrooveParams,\n DowelSplitParams as PortDowelSplitParams,\n StraightTenonSplitParams as PortStraightTenonSplitParams,\n LibLoader, ProjectLoader,\n} from './cad-runtime/ports'\n\n// ── OCCT Kernel ──\nexport {\n initOcctWasm, getKernel, disposeOcctWasm, setOcctWasmInitFn,\n computeEffectiveDeflection, importStepToMesh, importBrepToMesh,\n meshesToStep, releaseShape,\n importAssemblyFromStep, releaseAssemblyTree, collectLeafParts,\n} from './occt-kernel/occtKernel'\nexport type {\n WasmTessellatedMesh, WasmImportResult, AssemblyPartNode,\n MeshDeflectionOptions, ShapeHandle, OcctKernel,\n Mesh, EdgeData, SurfaceKind, CurveKind,\n} from './occt-kernel/occtKernel'\n\n// ── OCCT Mesh Reconstruct ──\nexport { reconstructSolidFromMesh, meshToAsciiStl, cadShapeIsValid, meshToStepBrep } from './occt-kernel/meshReconstruct'\n\n// ── OCCT 高层导出(多实体、零 fuse) ──\nexport { exportStepFromSolidsHighLevel } from './occt-kernel/highLevelApi'\n\n// ── OCCT Topology Extension ──\nexport { buildSelectorManifest, buildAssemblySelectorManifest, buildTopologyAdjacency } from './occt-kernel/topologyExt'\nexport type { SelectorManifestInput, PartTopologyInput, AssemblyTopologyResult, TopologyAdjacency } from './occt-kernel/topologyExt'\n\n// ── BREP 引擎注册(宿主装配;引擎可切换——occt 只是默认实现) ──\nexport { registerOcctBrepEngine, OCCT_BREP_ENGINE_ID } from './brep/engine/adapters/occt'\nexport { registerBrepMockEngine, BREP_MOCK_ENGINE_ID, createBrepMockApi } from './brep/engine/adapters/brep-mock'\n// brepkit 端侧 BREP 引擎(微信小程序等无 OCCT 环境):由宿主注入 wasm init 并抢先注册,\n// 使 ensureBrepChain 不回退 OCCT。setBrepkitWasmInitFn 注入自定义初始化(如 WXWebAssembly 实例化)。\nexport { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit'\nexport { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm'\nexport {\n registerBrepEngine, getBrepEngine, hasBrepEngine, getActiveBrepEngineId,\n registerMeshEngine, getMeshEngine, getActiveMeshEngineId, freezeEngineRegistries,\n} from './brep/engine/registry'\nexport type { BrepEngine, BrepEngineProvider, MeshEngine } from './brep/engine/registry'\nexport type { BrepEngineApi } from './brep/engine/primitives'\nexport type {\n BrepHandle, BrepMeshResult, BrepBoundingBox, BrepVec3, BrepCapabilities,\n BrepEvolutionData, BrepXcafDocument,\n} from './brep/engine/types'\n\n// ── BREP Topology ──\nexport { buildSolidTopologyRuntime } from './brep/brep-topology'\nexport type { SolidTopologyResult } from './brep/brep-topology'\n\n// ── Font Registry (for browser host injection) ──\nexport { setFontLoader, getFontLoader, loadFont, ensureDefaultFont, getFont, clearFonts } from './brep/text/fontRegistry'\nexport type { FontLoader } from './brep/text/fontRegistry'\n\n// ── L3 Node Host ──\n// node-host 模块已移�?@faicad/faijs/node 入口,避免浏览器环境静�?import\n// node-host 模块(含 Node.js 专用代码�?fs/path)导致生产构�?404�?\n// �?Node.js 环境中:import { createNodePorts } from '@faicad/faijs/node'\n\n// ── L3 Browser Host ──\nexport { createBrowserPorts } from './browser-host'\nexport type { CreateBrowserPortsOptions } from './browser-host'\n// D3-Browser(§9.4):CDN 通用 libLoader 工厂(a/b 混合)。**不**被 createBrowserPorts\n// 默认装配——demo 的源码 alias HMR 路径必须零网络;CDN 装载由主机显式注入。\nexport { createBrowserLibLoader, DEFAULT_CDN_BASE } from './cad-runtime/browser-lib-loader'\nexport type {\n BrowserLibLoader, BrowserLibMeta, CreateBrowserLibLoaderOptions,\n} from './cad-runtime/browser-lib-loader'\nexport { BrowserEventSink } from './browser-host/browser-event-sink'\nexport { BrowserFontProvider } from './browser-host/browser-font-provider'\nexport type { BrowserFontProviderOptions } from './browser-host/browser-font-provider'\nexport { FetchAssetResolver } from './browser-host/fetch-asset-resolver'\nexport type { FetchAssetResolverOptions } from './browser-host/fetch-asset-resolver'\n\n// ── L3 API 面(原 packages/stdlib 迁入,P6/D1)──\n// P23 主导出切换(§4.2 / Q1):`export * from './api'` 现在同时带来\n// ① faijs 特有 dual op(mesh+brep 双路径,D11 双形态归一);\n// ② 生成脚本面 op(`api/generated/script-face.ts`,compatOp(projectBrepOp(…)) 包装的\n// brep-only 语句级 op——`cad.*` 脚本面与此同源,B1 三源一致);\n// ③ brepjs 形态 TS 兼容面(`api/brepjs-compat`,以 `brepjsCompat` 命名空间导出——库作者面,\n// 句柄进出 + Result 语义)及其 Result / 向量 / 平面组合器(顶层平铺)。\n// op 符号不平铺 brepjsCompat 版:`brepjsCompat.fuse`(句柄形态)与顶层 `fuse`(faijs 形态)\n// 是同一 vendored 实现的两个投影,按「一个名字一份实现」红线(§6.3)只保留脚本面那份。\nexport * from './api'\nexport { createApiNamespace } from './api/api-namespace'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @faicad/faijs �?Faicad CAD execution engine\n *\n * 公开 API 统一入口。所有导出按层组织:\n * - L0 文本层:parser / codegen / symbol-table / types\n * - L1 几何执行层:BREP ops / Shape / 导出\n * - L1 Mesh 执行层:cad API\n * - L1 Boolean/CSG 辅助:cross-section / deriveNormals / extrude-helpers / joinery-shapes\n * - L1 Primitives:geometry / screw / svg-extrude / text / types\n * - L1 SDF:sdf-runner / templates / types\n * - L1 Knurl:KnurlGenerator / subdivision / textureLoader\n * - L1 Topology:build-face-ids / build-selector-runtime / types\n * - L2 编排层:CadRuntime / HostPorts\n * - L3 Node Host:createNodePorts / CLI\n * - OCCT Kernel:initOcctWasm / getKernel / setOcctWasmInitFn / ...\n * - CSG Backend:setCsgBackend / geoToManifoldMesh / ...\n */\n\n// ── 共享面(env-agnostic:identity + runtime-state + lang/*)──\n// 手写清单已收敛:三处 umbrella(index/browser/weapp)统一 re-export,防漂移。\nexport * from './env-agnostic'\n\n// ── L1 几何执行 ──\nexport type { Shape } from './mesh/types'\nexport type { BrepChainState } from './brep/brep-chain'\nexport {\n createBrepChainState, initBrepChainState, releaseBrepChainState,\n isCadFormat,\n} from './brep/brep-chain'\nexport {\n solidToShape, getSolidBoundingBox,\n translateBrep, rotateBrep, scaleBrep,\n fuseBrep, cutBrep, commonBrep,\n drillBrep, splitBrep, extrudeBrep,\n loadBrep, matrixToArray,\n} from './brep'\nexport type { DrillBrepParams, SplitBrepParams, SplitBrepResult, ExtrudeBrepParams } from './brep'\nexport { buildStlBufferFromMesh } from './brep/export/stl'\nexport { exportStepFromSolid, exportStepFromSolids } from './brep/export/step'\nexport type { StepExportEntry } from './brep/export/step'\n\n// ── L1 Mesh ──\nexport { cad } from './mesh'\n// 宿主注入的 mesh 装饰几何(cad.engrave 的文字/SVG 几何链在 @faicad/faijs-extra)\nexport { setEngraveDecorationProvider, getEngraveDecorationProvider } from './mesh/decoration-provider'\nexport type { EngraveDecorationProvider, EngraveDecorationParams } from './mesh/decoration-provider'\nexport { setManifoldWasmUrl, getManifoldWasmUrl, getManifoldModule } from './mesh/manifold-loader'\nexport type {\n BoundingBox, FaceDescriptor,\n BoxParams, SphereParams, CylinderParams, ConeParams, WedgeParams,\n TextParams, SvgExtrudeParams, SdfParams,\n DrillParams, ExtrudeParams, EngraveParams, KnurlParams,\n SplitPlane, SplitResult,\n} from './mesh/types'\nexport { NRAD_DEFAULT, NRAD_MIN, NRAD_MAX, clampNRad } from './mesh/types'\nexport { faceAt } from './mesh/query'\n\n// ── L1 Boolean/CSG 辅助 ──\nexport { computeSection, buildExtrudedProfile } from './boolean/cross-section'\nexport { manifoldToMeshData, weldPositionsWorker, dovetailBooleanSplit, dowelOrTenonBooleanSplit } from './boolean/csg-core'\nexport { deriveNormals } from './boolean/deriveNormals'\nexport { buildExtrudeParts, makeWorldPlane } from './boolean/extrude-helpers'\nexport type { ExtrudeParts, ExtrudeOffsetMode } from './boolean/extrude-helpers'\nexport {\n buildWedgeGeometry, buildDowelGeometry, buildStraightTenonGeometry,\n} from './boolean/joinery-shapes'\nexport type { JoineryMeshData } from './boolean/joinery-shapes'\n\n// ── CSG Backend ──\nexport { setCsgBackend } from './boolean/csg-backend'\nexport { geoToManifoldMesh, manifoldMeshToGeo } from './boolean/geo-convert'\nexport type {\n ManifoldMeshData, BooleanOperation,\n DovetailGrooveParams, DowelSplitParams, StraightTenonSplitParams,\n} from './boolean/geo-convert'\n\n// ── L1 Primitives ──\nexport { mergeBufferGeometries, makePrimitiveGeo, DEFAULT_SIZE, applyPrimitiveOffset } from './primitives/mesh-primitives'\nexport { makeScrew } from './primitives/screw/screw'\nexport { getScrewSpec, getScrewSpecs, threadToPitchMm, SCREW_HEAD_DIMS } from './primitives/screw/screw-db'\nexport type { ScrewParams, ScrewSpec, ScrewSystem } from './primitives/screw/screw-db'\nexport { parseSvgNaturalSize } from './primitives/parse-svg-size'\nexport {\n extractMeshData, primitiveToBrepSolid, geometryToBrepSolid,\n brepSolidToStep, primitiveToBrepStep,\n} from './primitives/brep-primitives'\nexport type { PrimitiveToBrepResult, PrimitiveParams } from './primitives/brep-primitives'\n// B 组(svg 挤出 / 3D 文字几何链)已随 @faicad/faijs-extra 迁出;\n// 留 core 的是零 three 的 CJK 字符判定与系统字体装载。\nexport { loadSystemCjkFont, containsCjk, isCjkChar } from './primitives/text/cjk-font'\nexport type { CjkFontResult } from './primitives/text/cjk-font'\nexport type {\n PrimitiveType, PrimitiveParamsRecord, PrimitiveArgsRecord, PrimitiveMeta,\n} from './primitives/types'\nexport { nextPrimitiveColor } from './primitives/types'\n\n// ── L1 SDF ──\nexport { runSdf } from './sdf/sdf-runner'\nexport type { SdfMeshData } from './sdf/sdf-runner'\nexport { runSdfInline } from './sdf/sdf-core'\nexport { SDF_TEMPLATES, DEFAULT_SDF_TEMPLATE } from './sdf/templates'\nexport type {\n SdfMeta, SdfBox, SdfParamDef, SdfTemplateCategory,\n SdfWorkerInput, SdfWorkerMessage,\n} from './sdf/types'\nexport { boxToTuple, parseParamDefs, defaultParamValues } from './sdf/types'\n\n// ── L1 Knurl ──\nexport { applyKnurlDisplacement, KNURL_DEFAULTS } from './mesh/knurl/KnurlGenerator'\nexport type { KnurlBounds } from './mesh/knurl/KnurlGenerator'\nexport { subdivide } from './mesh/knurl/subdivision'\nexport { loadKnurlingTexture, setKnurlTextureLoader } from './mesh/knurl/textureLoader'\nexport type { TextureData } from './mesh/knurl/textureLoader'\nexport { QuantizedPointMap, weldVertices } from './mesh/knurl/meshIndex'\nexport { computeUV, MODE_TRIPLANAR, getCubicBlendWeights, type MappingSettings } from './mesh/knurl/mapping'\nexport { applyDisplacement, type DisplacementSettings } from './mesh/knurl/displacement'\n\n// ── L1 Topology ──\nexport { TOPOLOGY_FACE_ID_NONE, buildFaceIdsForPart } from './topology/build-face-ids'\nexport {\n buildSelectorRuntime, buildSelectorRuntimeData, buildSelectorRuntimeMaps,\n} from './topology/build-selector-runtime'\nexport type { SelectorRuntimeData } from './topology/build-selector-runtime'\nexport type {\n SelectorRuntime, SelectorBundle, SelectorManifest, SelectorBuffers,\n FaceRow, EdgeRow, Reference,\n BufferViewDescriptor, SelectorProxy,\n} from './topology/types'\n\nexport * from './topology/naming'\n\n// ── L2 编排�?──\n// D1(2026-09-19):createRuntime 自注册 cad 默认命名空间(引擎 + 标准库定位)。\n// 需要纯引擎(不带 cad)的宿主可直接 import { createRuntime } from './cad-runtime/runtime'。\nexport { CadRuntime, createRuntime, computeContentKey, AppendPrefixError } from './cad-runtime/createRuntimeWithCad'\nexport { createPreviewExec } from './cad-runtime/preview-exec'\nexport type { PreviewExec } from './cad-runtime/preview-exec'\nexport type { ExecutionResult, ExecuteOptions, CheckResult, CheckError, CadRuntimeOptions } from './cad-runtime/runtime'\nexport type {\n HostPorts, CsgBackend, SdfBackend, FontProvider, TextureSampler,\n AssetResolver, EventSink, ExecutionMode,\n MeshData, PlaneParams, SplitResult as CsgSplitResult,\n DovetailGrooveParams as PortDovetailGrooveParams,\n DowelSplitParams as PortDowelSplitParams,\n StraightTenonSplitParams as PortStraightTenonSplitParams,\n LibLoader, ProjectLoader,\n} from './cad-runtime/ports'\n\n// ── OCCT Kernel ──\nexport {\n initOcctWasm, getKernel, disposeOcctWasm, setOcctWasmInitFn,\n computeEffectiveDeflection, importStepToMesh, importBrepToMesh,\n meshesToStep, releaseShape,\n importAssemblyFromStep, releaseAssemblyTree, collectLeafParts,\n} from './occt-kernel/occtKernel'\nexport type {\n WasmTessellatedMesh, WasmImportResult, AssemblyPartNode,\n MeshDeflectionOptions, ShapeHandle, OcctKernel,\n Mesh, EdgeData, SurfaceKind, CurveKind,\n} from './occt-kernel/occtKernel'\n\n// ── OCCT Mesh Reconstruct ──\nexport { reconstructSolidFromMesh, meshToAsciiStl, cadShapeIsValid, meshToStepBrep } from './occt-kernel/meshReconstruct'\n\n// ── OCCT 高层导出(多实体、零 fuse) ──\nexport { exportStepFromSolidsHighLevel } from './occt-kernel/highLevelApi'\n\n// ── OCCT Topology Extension ──\nexport { buildSelectorManifest, buildAssemblySelectorManifest, buildTopologyAdjacency } from './occt-kernel/topologyExt'\nexport type { SelectorManifestInput, PartTopologyInput, AssemblyTopologyResult, TopologyAdjacency } from './occt-kernel/topologyExt'\n\n// ── BREP 引擎注册(宿主装配;引擎可切换——occt 只是默认实现) ──\nexport { registerOcctBrepEngine, OCCT_BREP_ENGINE_ID } from './brep/engine/adapters/occt'\nexport { registerBrepMockEngine, BREP_MOCK_ENGINE_ID, createBrepMockApi } from './brep/engine/adapters/brep-mock'\n// brepkit 端侧 BREP 引擎(微信小程序等无 OCCT 环境):由宿主注入 wasm init 并抢先注册,\n// 使 ensureBrepChain 不回退 OCCT。setBrepkitWasmInitFn 注入自定义初始化(如 WXWebAssembly 实例化)。\nexport { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit'\nexport { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm'\nexport {\n registerBrepEngine, getBrepEngine, hasBrepEngine, getActiveBrepEngineId,\n registerMeshEngine, getMeshEngine, getActiveMeshEngineId, freezeEngineRegistries,\n} from './brep/engine/registry'\nexport type { BrepEngine, BrepEngineProvider, MeshEngine } from './brep/engine/registry'\nexport type { BrepEngineApi } from './brep/engine/primitives'\nexport type {\n BrepHandle, BrepMeshResult, BrepBoundingBox, BrepVec3, BrepCapabilities,\n BrepEvolutionData, BrepXcafDocument,\n} from './brep/engine/types'\n\n// ── BREP Topology ──\nexport { buildSolidTopologyRuntime } from './brep/brep-topology'\nexport type { SolidTopologyResult } from './brep/brep-topology'\n\n// ── Font Registry (for browser host injection) ──\nexport { setFontLoader, getFontLoader, loadFont, ensureDefaultFont, getFont, clearFonts } from './brep/text/fontRegistry'\nexport type { FontLoader } from './brep/text/fontRegistry'\n\n// ── L3 Node Host ──\n// node-host 模块已移�?@faicad/faijs/node 入口,避免浏览器环境静�?import\n// node-host 模块(含 Node.js 专用代码�?fs/path)导致生产构�?404�?\n// �?Node.js 环境中:import { createNodePorts } from '@faicad/faijs/node'\n\n// ── L3 Browser Host ──\nexport { createBrowserPorts } from './browser-host'\nexport type { CreateBrowserPortsOptions } from './browser-host'\n// D3-Browser(§9.4):CDN 通用 libLoader 工厂(a/b 混合)。**不**被 createBrowserPorts\n// 默认装配——demo 的源码 alias HMR 路径必须零网络;CDN 装载由主机显式注入。\nexport { createBrowserLibLoader, DEFAULT_CDN_BASE } from './cad-runtime/browser-lib-loader'\nexport type {\n BrowserLibLoader, BrowserLibMeta, CreateBrowserLibLoaderOptions,\n} from './cad-runtime/browser-lib-loader'\nexport { BrowserEventSink } from './browser-host/browser-event-sink'\nexport { BrowserFontProvider } from './browser-host/browser-font-provider'\nexport type { BrowserFontProviderOptions } from './browser-host/browser-font-provider'\nexport { FetchAssetResolver } from './browser-host/fetch-asset-resolver'\nexport type { FetchAssetResolverOptions } from './browser-host/fetch-asset-resolver'\n\n// ── L3 API 面(原 packages/stdlib 迁入,P6/D1)──\n// P23 主导出切换(§4.2 / Q1):`export * from './api'` 现在同时带来\n// ① faijs 特有 dual op(mesh+brep 双路径,D11 双形态归一);\n// ② 生成脚本面 op(`api/generated/script-face.ts`,compatOp(projectBrepOp(…)) 包装的\n// brep-only 语句级 op——`cad.*` 脚本面与此同源,B1 三源一致);\n// ③ brepjs 形态 TS 兼容面(`api/brepjs-compat`,以 `brepjsCompat` 命名空间导出——库作者面,\n// 句柄进出 + Result 语义)及其 Result / 向量 / 平面组合器(顶层平铺)。\n// op 符号不平铺 brepjsCompat 版:`brepjsCompat.fuse`(句柄形态)与顶层 `fuse`(faijs 形态)\n// 是同一 vendored 实现的两个投影,按「一个名字一份实现」红线(§6.3)只保留脚本面那份。\nexport * from './api'\nexport { createApiNamespace } from './api/api-namespace'\n// Vec3 双源消歧:env-agnostic(lang/types)与 api(mesh/types)均有 Vec3,\n// 显式 re-export 定为 lang 版(与收敛前 index.ts 的具名导出一致)。\nexport type { Vec3 } from './lang/types'\n"]}
@@ -45,6 +45,15 @@ export interface DeterminismScanOptions {
45
45
  * ...` → `'gear'`). Direct calls to these are geometry sinks.
46
46
  */
47
47
  extraCallees?: string[];
48
+ /**
49
+ * Strict parse: when true, a source that cannot be parsed as plain JS
50
+ * (e.g. TypeScript syntax) throws a SyntaxError instead of silently
51
+ * returning ok. Used for library-source scanning where the input is
52
+ * contractually compiled JS — type stripping is not supported and a
53
+ * parse failure must surface loudly (never fall back, never stay silent).
54
+ * Default false: the main .fai.js parse path owns syntax diagnostics.
55
+ */
56
+ strict?: boolean;
48
57
  }
49
58
  /** Scan result. */
50
59
  export interface DeterminismScanResult {
@@ -1 +1 @@
1
- {"version":3,"file":"determinism-scanner.d.ts","sourceRoot":"","sources":["../../src/lang/determinism-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAExD,mDAAmD;AACnD,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,MAAM,GACN,QAAQ,GACR,iBAAiB,GACjB,iBAAiB,CAAA;AAErB,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,MAAM,EAAE,iBAAiB,CAAA;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,oBAAoB;AACpB,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,mBAAmB;AACnB,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,EAAE,EAAE,OAAO,CAAA;IACX,UAAU,EAAE,oBAAoB,EAAE,CAAA;CACnC;AAwED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,sBAA2B,GAAG,qBAAqB,CA0iBtG"}
1
+ {"version":3,"file":"determinism-scanner.d.ts","sourceRoot":"","sources":["../../src/lang/determinism-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAExD,mDAAmD;AACnD,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,MAAM,GACN,QAAQ,GACR,iBAAiB,GACjB,iBAAiB,CAAA;AAErB,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,MAAM,EAAE,iBAAiB,CAAA;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,oBAAoB;AACpB,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,mBAAmB;AACnB,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,EAAE,EAAE,OAAO,CAAA;IACX,UAAU,EAAE,oBAAoB,EAAE,CAAA;CACnC;AAwED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,sBAA2B,GAAG,qBAAqB,CAmjBtG"}
@@ -89,7 +89,13 @@ export function scanDeterminism(code, opts = {}) {
89
89
  locations: true,
90
90
  });
91
91
  }
92
- catch {
92
+ catch (e) {
93
+ if (opts.strict) {
94
+ const loc = e.loc;
95
+ const at = loc ? ` at line ${loc.line}:${loc.column}` : '';
96
+ throw new SyntaxError(`[determinism] library source is not valid plain JavaScript${at} ` +
97
+ `(type stripping is not supported; libraries must ship compiled JS): ${e.message}`, { cause: e });
98
+ }
93
99
  // A syntax error is not a determinism violation; the main parse path owns
94
100
  // syntax diagnostics. Return ok (empty).
95
101
  return { ok: true, violations: [] };
@@ -1 +1 @@
1
- {"version":3,"file":"determinism-scanner.js","sourceRoot":"","sources":["../../src/lang/determinism-scanner.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * determinism-scanner — .fai.js determinism gate (B-tier, conservative taint)\n *\n * Decides statically whether any non-deterministic value (`Math.random`,\n * `Date.now` / `new Date`, `crypto.*`, `performance.now`) flows into geometry\n * generation. Conservative policy: anything the analysis cannot prove safe is a\n * violation — \"when in doubt, reject\".\n *\n * Model:\n * - **sources** produce tainted values.\n * - **propagation** moves taint through arithmetic, member access, assignment,\n * arrays/objects, calls, and implicit control flow.\n * - **sinks** are geometry-generating call sites: members of the `cad`\n * namespace (and any library namespace), named library callees, and unknown\n * function calls (conservative). `console.*` and the pure built-ins are safe\n * containers — taint may pass through them but does not, by itself, violate.\n *\n * This gate is entry prevention; exit equivalence is checked separately by\n * cross-kernel parity tests (docs/reproducibility-contract.md §5).\n */\n\nimport { parse as acornParse } from 'acorn'\n\n// ── types ──\n\n/** Determinism gate policy for execution-time scanning. */\nexport type DeterminismPolicy = 'off' | 'warn' | 'error'\n\n/** Why a value is non-deterministic (a source). */\nexport type DeterminismSource =\n | 'Math.random'\n | 'Date'\n | 'crypto'\n | 'performance.now'\n | 'getRandomValues'\n\n/** A single conservatively-flagged violation. */\nexport interface DeterminismViolation {\n /** 1-based line of the offending sink / flow. */\n lineNo: number\n /** The non-deterministic source kind that reached geometry. */\n source: DeterminismSource\n /** Human-readable message (for tooling / self-correction). */\n message: string\n}\n\n/** Scan options. */\nexport interface DeterminismScanOptions {\n /** Default geometry namespace name (default `'cad'`). */\n defaultNs?: string\n /**\n * Extra geometry namespace binding names (`import * as sheet from ...` →\n * `'sheet'`). Member calls on these are geometry sinks.\n */\n extraNamespaces?: string[]\n /**\n * Extra named callees treated as geometry functions (`import { gear } from\n * ...` → `'gear'`). Direct calls to these are geometry sinks.\n */\n extraCallees?: string[]\n}\n\n/** Scan result. */\nexport interface DeterminismScanResult {\n /** True iff `violations` is empty. */\n ok: boolean\n violations: DeterminismViolation[]\n}\n\n// ── rule tables ──\n\n/** Containers (identifier → member) whose member access is a non-deterministic source. */\nconst SOURCE_MEMBERS: Record<string, Set<string>> = {\n Math: new Set(['random']),\n Date: new Set(['now', 'parse', 'UTC']),\n performance: new Set(['now']),\n crypto: new Set(['getRandomValues', 'randomUUID']),\n}\n\n/**\n * Identifiers that are themselves non-deterministic values (a bare `Date` or\n * `crypto` reference is a source — `new Date()` / `crypto.subtle` alias paths).\n */\nconst SOURCE_IDENTS = new Set<string>(['Date', 'crypto', 'getRandomValues', 'performance'])\n\n/**\n * Safe containers: member calls on these neither violate nor introduce taint;\n * taint only propagates through their arguments (pure/observable-only globals).\n */\nconst SAFE_CONTAINERS = new Set<string>([\n 'console', 'Math', 'JSON', 'Number', 'String', 'Boolean', 'Object', 'Array',\n 'Map', 'Set', 'Symbol', 'RegExp', 'Promise', 'Error', 'Intl', 'Reflect',\n])\n\n/** Safe top-level functions (pure/known, not geometry). */\nconst SAFE_FUNCTIONS = new Set<string>([\n 'parseInt', 'parseFloat', 'isNaN', 'isFinite', 'String', 'Number', 'Boolean',\n 'encodeURI', 'encodeURIComponent', 'decodeURI', 'decodeURIComponent',\n])\n\n// ── scope ──\n\ninterface Scope {\n parent: Scope | null\n tainted: Map<string, boolean>\n}\n\nfunction childScope(parent: Scope): Scope {\n return { parent, tainted: new Map() }\n}\n\nfunction lookupTaint(scope: Scope, name: string): boolean {\n let s: Scope | null = scope\n while (s) {\n const v = s.tainted.get(name)\n if (v !== undefined) return v\n s = s.parent\n }\n return false\n}\n\nfunction markTaint(scope: Scope, name: string): void {\n // Write through to the nearest scope that declares `name`, else current scope.\n let s: Scope | null = scope\n while (s) {\n if (s.tainted.has(name)) {\n s.tainted.set(name, true)\n return\n }\n s = s.parent\n }\n scope.tainted.set(name, true)\n}\n\n// ── scanner ──\n\n/** acorn node (structural access only; see security-scanner for the same pattern). */\ntype Node = any\n\n/**\n * Static non-determinism scanner (B-tier, conservative).\n * @param code - the `.fai.js` / library source text.\n * @param opts - scan options (geometry namespace/callee hints).\n * @returns scan result with all violations.\n */\nexport function scanDeterminism(code: string, opts: DeterminismScanOptions = {}): DeterminismScanResult {\n const defaultNs = opts.defaultNs ?? 'cad'\n const geometryNamespaces = new Set<string>([defaultNs, ...(opts.extraNamespaces ?? [])])\n const geometryCallees = new Set<string>(opts.extraCallees ?? [])\n\n const violations: DeterminismViolation[] = []\n\n let ast: Node\n try {\n ast = acornParse(code, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n locations: true,\n })\n } catch {\n // A syntax error is not a determinism violation; the main parse path owns\n // syntax diagnostics. Return ok (empty).\n return { ok: true, violations: [] }\n }\n\n const rootScope: Scope = { parent: null, tainted: new Map() }\n\n function lineOf(node: Node): number {\n return node?.loc?.start?.line ?? 1\n }\n\n function report(node: Node, source: DeterminismSource, detail: string): void {\n violations.push({\n lineNo: lineOf(node),\n source,\n message: `[determinism] ${detail} (non-deterministic value reaches geometry)`,\n })\n }\n\n /** Return the source kind of a call/construct callee, else null. */\n function sourceKindOfCallee(callee: Node): DeterminismSource | null {\n if (\n callee?.type === 'MemberExpression' &&\n callee.object?.type === 'Identifier' &&\n !callee.computed &&\n callee.property?.type === 'Identifier'\n ) {\n const members = SOURCE_MEMBERS[callee.object.name]\n if (members?.has(callee.property.name)) {\n const o = callee.object.name\n if (o === 'Math') return 'Math.random'\n if (o === 'Date') return 'Date'\n if (o === 'crypto') return callee.property.name === 'randomUUID' ? 'crypto' : 'getRandomValues'\n return 'performance.now'\n }\n }\n if (callee?.type === 'Identifier' && SOURCE_IDENTS.has(callee.name)) {\n if (callee.name === 'performance') return 'performance.now'\n if (callee.name === 'getRandomValues') return 'getRandomValues'\n return callee.name as DeterminismSource\n }\n return null\n }\n\n /**\n * Whether a call/construct site is a geometry sink, and if so, check its\n * arguments for taint. Returns the tainted-ness of the call result.\n */\n function handleCall(node: Node, scope: Scope): boolean {\n const callee = node.callee\n let resultTainted = false\n\n // A source call (Date.now / Math.random / crypto.* / performance.now)\n // produces a tainted result regardless of its arguments.\n const srcKind = sourceKindOfCallee(callee)\n if (srcKind) {\n lastSource = srcKind\n // Still walk arguments: nested calls inside may themselves violate.\n for (const a of node.arguments ?? []) {\n evalTaint(a?.type === 'SpreadElement' ? a.argument : a, scope)\n }\n return true\n }\n\n // Evaluate argument taint (propagation, eager evaluation).\n const argTaints: boolean[] = []\n for (const a of node.arguments ?? []) {\n if (a?.type === 'SpreadElement') {\n argTaints.push(evalTaint(a.argument, scope))\n } else {\n argTaints.push(evalTaint(a, scope))\n }\n if (argTaints[argTaints.length - 1]) resultTainted = true\n }\n\n // Determine the call target kind.\n // 1) Geometry namespace member call: `cad.box(...)` / `sheet.fn(...)`.\n if (callee?.type === 'MemberExpression') {\n const obj = callee.object\n const prop = callee.computed ? null : callee.property?.name\n const objName = obj?.type === 'Identifier' ? obj.name : null\n\n if (objName !== null && geometryNamespaces.has(objName)) {\n // Geometry op: any tainted argument violates.\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${objName}.${prop ?? '(computed)'} receives a non-deterministic argument`)\n }\n return resultTainted\n }\n\n if (objName !== null && SAFE_CONTAINERS.has(objName)) {\n // Safe container (console/math/json/...): propagate only.\n return resultTainted\n }\n\n // Object itself tainted (e.g. `d.getSeconds()` where `d = new Date()`)\n // → result conservatively tainted (method may return a dependent value).\n if (objName !== null && evalTaint(obj, scope)) resultTainted = true\n }\n\n // 2) Direct named geometry callee: `gear(...)` from `import { gear }`.\n if (callee?.type === 'Identifier' && geometryCallees.has(callee.name)) {\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${callee.name}(...) receives a non-deterministic argument`)\n }\n return resultTainted\n }\n\n // 3) Known safe top-level function: propagate only.\n if (callee?.type === 'Identifier' && SAFE_FUNCTIONS.has(callee.name)) {\n return resultTainted\n }\n\n // 4) Unknown function call: conservative — a tainted argument may feed\n // geometry, and we cannot prove otherwise.\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${calleeName(callee)}(...) receives a non-deterministic argument through an unknown callee`)\n }\n return resultTainted\n }\n\n function inferSourceForArgs(): DeterminismSource {\n // Best-effort attribution; the precise source is tracked per-node via lastSource.\n return lastSource ?? 'Date'\n }\n\n function calleeName(node: Node): string {\n if (!node) return '(unknown)'\n if (node.type === 'Identifier') return node.name\n if (node.type === 'MemberExpression') {\n const o = node.object?.type === 'Identifier' ? node.object.name : '?'\n const p = node.computed ? '[...]' : node.property?.name ?? '?'\n return `${o}.${p}`\n }\n return node.type\n }\n\n // Track the most recent source kind seen (for coarse attribution in reports).\n let lastSource: DeterminismSource | undefined\n\n /**\n * Evaluate whether an expression is tainted, recording sources as side\n * effects. Memo-free (exponential-free because the AST is a tree).\n */\n function evalTaint(node: Node, scope: Scope): boolean {\n if (!node) return false\n switch (node.type) {\n case 'Literal':\n return false\n\n case 'Identifier': {\n if (node.name === 'undefined' || node.name === 'NaN' || node.name === 'Infinity') return false\n // Source: bare `Date` / `crypto` / `performance` reference.\n if (SOURCE_IDENTS.has(node.name)) {\n lastSource = node.name !== 'performance' ? (node.name as DeterminismSource) : 'performance.now'\n return true\n }\n return lookupTaint(scope, node.name)\n }\n\n case 'MemberExpression': {\n // Source: `Math.random`, `Date.now`, `crypto.getRandomValues`, ...\n if (node.object?.type === 'Identifier') {\n const members = SOURCE_MEMBERS[node.object.name]\n if (members && !node.computed && node.property?.type === 'Identifier' && members.has(node.property.name)) {\n const kind =\n node.object.name === 'Math' ? 'Math.random'\n : node.object.name === 'Date' ? 'Date'\n : node.object.name === 'crypto' ? (node.property.name === 'randomUUID' ? 'crypto' : 'getRandomValues')\n : 'performance.now'\n lastSource = kind\n return true\n }\n }\n // Otherwise: taint flows through the object (and, conservatively, the key).\n const objTaint = evalTaint(node.object, scope)\n const keyTaint = node.computed ? evalTaint(node.property, scope) : false\n return objTaint || keyTaint\n }\n\n case 'NewExpression':\n // `new Date(...)` is a source regardless of arguments (timezone/sytem\n // clock dependence). `new crypto.X` likewise.\n if (node.callee?.type === 'Identifier' && SOURCE_IDENTS.has(node.callee.name)) {\n lastSource = node.callee.name === 'Date' ? 'Date' : 'crypto'\n return true\n }\n return handleCall(node, scope)\n\n case 'CallExpression':\n return handleCall(node, scope)\n\n case 'ArrayExpression': {\n let t = false\n for (const el of node.elements ?? []) {\n if (el && evalTaint(el, scope)) t = true\n }\n return t\n }\n\n case 'ObjectExpression': {\n let t = false\n for (const prop of node.properties ?? []) {\n if (prop.type === 'SpreadElement') {\n if (evalTaint(prop.argument, scope)) t = true\n } else if (prop.value && evalTaint(prop.value, scope)) {\n t = true\n }\n }\n return t\n }\n\n case 'UnaryExpression':\n return evalTaint(node.argument, scope)\n\n case 'UpdateExpression':\n return evalTaint(node.argument, scope)\n\n case 'BinaryExpression':\n case 'LogicalExpression':\n return evalTaint(node.left, scope) || evalTaint(node.right, scope)\n\n case 'ConditionalExpression': {\n const testT = evalTaint(node.test, scope)\n const consT = evalTaint(node.consequent, scope)\n const altT = evalTaint(node.alternate, scope)\n return testT || consT || altT\n }\n\n case 'AssignmentExpression': {\n const rhsT = evalTaint(node.right, scope)\n if (rhsT) {\n markAssignTarget(node.left, scope)\n }\n return rhsT\n }\n\n case 'SequenceExpression': {\n let t = false\n for (const e of node.expressions ?? []) {\n if (evalTaint(e, scope)) t = true\n }\n return t\n }\n\n case 'TemplateLiteral': {\n let t = false\n for (const expr of node.expressions ?? []) {\n if (evalTaint(expr, scope)) t = true\n }\n return t\n }\n\n case 'ChainExpression':\n return evalTaint(node.expression, scope)\n\n case 'AwaitExpression':\n return evalTaint(node.argument, scope)\n\n case 'SpreadElement':\n return evalTaint(node.argument, scope)\n\n case 'ArrowFunctionExpression':\n case 'FunctionExpression': {\n const fnScope = childScope(scope)\n for (const p of node.params ?? []) {\n collectPatternTaintDefault(p, fnScope)\n }\n walkFunctionBody(node, fnScope)\n return false\n }\n\n default:\n return false\n }\n }\n\n /** Mark an assignment/declaration target tainted. */\n function markAssignTarget(left: Node, scope: Scope): void {\n if (left.type === 'Identifier') {\n markTaint(scope, left.name)\n return\n }\n if (left.type === 'MemberExpression') {\n // Conservatively taint the base object; the precise key is unknown.\n if (left.object?.type === 'Identifier') markTaint(scope, left.object.name)\n return\n }\n if (left.type === 'ArrayPattern' || left.type === 'ObjectPattern') {\n collectPattern(left, (name) => markTaint(scope, name))\n return\n }\n }\n\n /** Collect binding names from a destructuring pattern. */\n function collectPattern(pattern: Node, cb: (name: string) => void): void {\n if (!pattern) return\n if (pattern.type === 'Identifier') {\n cb(pattern.name)\n return\n }\n if (pattern.type === 'RestElement') {\n collectPattern(pattern.argument, cb)\n return\n }\n if (pattern.type === 'ArrayPattern') {\n for (const el of pattern.elements ?? []) if (el) collectPattern(el, cb)\n return\n }\n if (pattern.type === 'ObjectPattern') {\n for (const prop of pattern.properties ?? []) {\n if (prop.type === 'RestElement') collectPattern(prop.argument, cb)\n else if (prop.value) collectPattern(prop.value, cb)\n }\n return\n }\n if (pattern.type === 'AssignmentPattern') {\n collectPattern(pattern.left, cb)\n return\n }\n }\n\n /** Register a parameter, evaluating its default for taint. */\n function collectPatternTaintDefault(pattern: Node, scope: Scope): void {\n if (pattern?.type === 'AssignmentPattern') {\n collectPattern(pattern.left, (name) => {\n scope.tainted.set(name, evalTaint(pattern.right, scope))\n })\n return\n }\n collectPattern(pattern, (name) => {\n if (!scope.tainted.has(name)) scope.tainted.set(name, false)\n })\n }\n\n /** Walk a function body (its own scope; statements inside analyzed eagerly). */\n function walkFunctionBody(node: Node, fnScope: Scope): void {\n if (node.body?.type === 'BlockStatement') walkBody(node.body.body ?? [], fnScope)\n else if (node.body) {\n // Expression body: `x => expr`.\n evalTaint(node.body, fnScope)\n }\n }\n\n /** Walk a statement list, carrying implicit-flow taint. */\n function walkBody(body: Node[], scope: Scope, implicitTaint = false): void {\n // Hoist declarations first so assignments resolve in this scope.\n for (const stmt of body) {\n if (stmt?.type === 'VariableDeclaration') {\n for (const decl of stmt.declarations ?? []) {\n collectPattern(decl.id, (name) => {\n if (!scope.tainted.has(name)) scope.tainted.set(name, false)\n })\n }\n }\n if (stmt?.type === 'FunctionDeclaration' && stmt.id?.name) {\n if (!scope.tainted.has(stmt.id.name)) scope.tainted.set(stmt.id.name, false)\n }\n }\n if (implicitTaint) {\n // Any assignment target inside a tainted control flow becomes tainted.\n for (const stmt of body) markStmtTargets(stmt, scope)\n }\n for (const stmt of body) walkStmt(stmt, scope)\n }\n\n /** Conservatively mark every LHS a block writes through as tainted. */\n function markStmtTargets(node: Node, scope: Scope): void {\n if (!node) return\n switch (node.type) {\n case 'VariableDeclaration':\n for (const d of node.declarations ?? []) collectPattern(d.id, (n) => markTaint(scope, n))\n return\n case 'ExpressionStatement':\n if (node.expression?.type === 'AssignmentExpression') markAssignTarget(node.expression.left, scope)\n if (node.expression?.type === 'UpdateExpression') markAssignTarget(node.expression.argument, scope)\n if (node.expression?.type === 'CallExpression') {\n // In-place mutation ergonomics: taint the first argument receiver.\n const first = node.expression.arguments?.[0]\n if (first?.type === 'Identifier') markTaint(scope, first.name)\n }\n return\n case 'FunctionDeclaration':\n if (node.id?.name) markTaint(scope, node.id.name)\n return\n default:\n return\n }\n }\n\n function walkStmt(node: Node, scope: Scope): void {\n if (!node) return\n switch (node.type) {\n case 'ExpressionStatement':\n evalTaint(node.expression, scope)\n return\n\n case 'VariableDeclaration':\n for (const decl of node.declarations ?? []) {\n if (decl.init && evalTaint(decl.init, scope)) {\n collectPattern(decl.id, (name) => markTaint(scope, name))\n }\n }\n return\n\n case 'BlockStatement':\n walkBody(node.body ?? [], childScope(scope))\n return\n\n case 'IfStatement': {\n const testT = evalTaint(node.test, scope)\n walkBody(toList(node.consequent), childScope(scope), testT)\n if (node.alternate) walkBody(toList(node.alternate), childScope(scope), testT)\n return\n }\n\n case 'ForStatement': {\n const forScope = childScope(scope)\n if (node.init?.type === 'VariableDeclaration') {\n for (const d of node.init.declarations ?? []) {\n collectPattern(d.id, (n) => { if (!forScope.tainted.has(n)) forScope.tainted.set(n, false) })\n if (d.init && evalTaint(d.init, forScope)) collectPattern(d.id, (n) => markTaint(forScope, n))\n }\n } else if (node.init) {\n evalTaint(node.init, forScope)\n }\n const testT = node.test ? evalTaint(node.test, forScope) : false\n if (node.update) evalTaint(node.update, forScope)\n walkBody(toList(node.body), forScope, testT)\n return\n }\n\n case 'ForInStatement':\n case 'ForOfStatement': {\n const forScope = childScope(scope)\n const rightT = evalTaint(node.right, forScope)\n if (node.left?.type === 'VariableDeclaration') {\n for (const d of node.left.declarations ?? []) {\n collectPattern(d.id, (n) => { if (!forScope.tainted.has(n)) forScope.tainted.set(n, false) })\n }\n }\n walkBody(toList(node.body), forScope, rightT)\n return\n }\n\n case 'WhileStatement':\n case 'DoWhileStatement': {\n const loopScope = childScope(scope)\n const testT = evalTaint(node.test, loopScope)\n walkBody(toList(node.body), loopScope, testT)\n return\n }\n\n case 'SwitchStatement': {\n const swScope = childScope(scope)\n const discT = evalTaint(node.discriminant, swScope)\n for (const c of node.cases ?? []) {\n if (c.test) evalTaint(c.test, swScope)\n walkBody(c.consequent ?? [], childScope(swScope), discT)\n }\n return\n }\n\n case 'ReturnStatement':\n if (node.argument) evalTaint(node.argument, scope)\n return\n\n case 'ThrowStatement':\n if (node.argument) evalTaint(node.argument, scope)\n return\n\n case 'TryStatement': {\n walkBody(toList(node.block?.body ?? []), scope)\n if (node.handler) {\n const catchScope = childScope(scope)\n if (node.handler.param) collectPattern(node.handler.param, (n) => { catchScope.tainted.set(n, false) })\n walkBody(node.handler.body?.body ?? [], catchScope)\n }\n if (node.finalizer) walkBody(node.finalizer.body ?? [], scope)\n return\n }\n\n case 'FunctionDeclaration': {\n const fnScope = childScope(scope)\n for (const p of node.params ?? []) collectPatternTaintDefault(p, fnScope)\n walkFunctionBody(node, fnScope)\n return\n }\n\n case 'LabeledStatement':\n if (node.body) walkStmt(node.body, scope)\n return\n\n case 'ImportDeclaration':\n case 'ExportNamedDeclaration':\n case 'ExportDefaultDeclaration':\n // Imports are handled by the caller (namespace/callee hints). A default\n // export with a declaration still needs its body walked.\n if (node.type === 'ExportDefaultDeclaration' && node.declaration && node.declaration.type !== 'Identifier') {\n walkStmt(node.declaration, scope)\n }\n if (node.type === 'ExportNamedDeclaration' && node.declaration) {\n walkStmt(node.declaration, scope)\n }\n return\n\n case 'ClassDeclaration': {\n const clsScope = childScope(scope)\n for (const m of node.body?.body ?? []) {\n if (m.value) walkFunctionBody(m.value, childScope(clsScope))\n }\n return\n }\n\n case 'EmptyStatement':\n case 'BreakStatement':\n case 'ContinueStatement':\n case 'DebuggerStatement':\n return\n\n default: {\n // Unknown statement node: conservatively walk children via evalTaint on\n // expression-shaped child properties is error-prone; skip structurally.\n return\n }\n }\n }\n\n function toList(node: Node): Node[] {\n if (!node) return []\n return node.type === 'BlockStatement' ? (node.body ?? []) : [node]\n }\n\n walkBody(ast.body ?? [], rootScope)\n\n return { ok: violations.length === 0, violations }\n}"]}
1
+ {"version":3,"file":"determinism-scanner.js","sourceRoot":"","sources":["../../src/lang/determinism-scanner.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * determinism-scanner — .fai.js determinism gate (B-tier, conservative taint)\n *\n * Decides statically whether any non-deterministic value (`Math.random`,\n * `Date.now` / `new Date`, `crypto.*`, `performance.now`) flows into geometry\n * generation. Conservative policy: anything the analysis cannot prove safe is a\n * violation — \"when in doubt, reject\".\n *\n * Model:\n * - **sources** produce tainted values.\n * - **propagation** moves taint through arithmetic, member access, assignment,\n * arrays/objects, calls, and implicit control flow.\n * - **sinks** are geometry-generating call sites: members of the `cad`\n * namespace (and any library namespace), named library callees, and unknown\n * function calls (conservative). `console.*` and the pure built-ins are safe\n * containers — taint may pass through them but does not, by itself, violate.\n *\n * This gate is entry prevention; exit equivalence is checked separately by\n * cross-kernel parity tests (docs/reproducibility-contract.md §5).\n */\n\nimport { parse as acornParse } from 'acorn'\n\n// ── types ──\n\n/** Determinism gate policy for execution-time scanning. */\nexport type DeterminismPolicy = 'off' | 'warn' | 'error'\n\n/** Why a value is non-deterministic (a source). */\nexport type DeterminismSource =\n | 'Math.random'\n | 'Date'\n | 'crypto'\n | 'performance.now'\n | 'getRandomValues'\n\n/** A single conservatively-flagged violation. */\nexport interface DeterminismViolation {\n /** 1-based line of the offending sink / flow. */\n lineNo: number\n /** The non-deterministic source kind that reached geometry. */\n source: DeterminismSource\n /** Human-readable message (for tooling / self-correction). */\n message: string\n}\n\n/** Scan options. */\nexport interface DeterminismScanOptions {\n /** Default geometry namespace name (default `'cad'`). */\n defaultNs?: string\n /**\n * Extra geometry namespace binding names (`import * as sheet from ...` →\n * `'sheet'`). Member calls on these are geometry sinks.\n */\n extraNamespaces?: string[]\n /**\n * Extra named callees treated as geometry functions (`import { gear } from\n * ...` → `'gear'`). Direct calls to these are geometry sinks.\n */\n extraCallees?: string[]\n /**\n * Strict parse: when true, a source that cannot be parsed as plain JS\n * (e.g. TypeScript syntax) throws a SyntaxError instead of silently\n * returning ok. Used for library-source scanning where the input is\n * contractually compiled JS — type stripping is not supported and a\n * parse failure must surface loudly (never fall back, never stay silent).\n * Default false: the main .fai.js parse path owns syntax diagnostics.\n */\n strict?: boolean\n}\n\n/** Scan result. */\nexport interface DeterminismScanResult {\n /** True iff `violations` is empty. */\n ok: boolean\n violations: DeterminismViolation[]\n}\n\n// ── rule tables ──\n\n/** Containers (identifier → member) whose member access is a non-deterministic source. */\nconst SOURCE_MEMBERS: Record<string, Set<string>> = {\n Math: new Set(['random']),\n Date: new Set(['now', 'parse', 'UTC']),\n performance: new Set(['now']),\n crypto: new Set(['getRandomValues', 'randomUUID']),\n}\n\n/**\n * Identifiers that are themselves non-deterministic values (a bare `Date` or\n * `crypto` reference is a source — `new Date()` / `crypto.subtle` alias paths).\n */\nconst SOURCE_IDENTS = new Set<string>(['Date', 'crypto', 'getRandomValues', 'performance'])\n\n/**\n * Safe containers: member calls on these neither violate nor introduce taint;\n * taint only propagates through their arguments (pure/observable-only globals).\n */\nconst SAFE_CONTAINERS = new Set<string>([\n 'console', 'Math', 'JSON', 'Number', 'String', 'Boolean', 'Object', 'Array',\n 'Map', 'Set', 'Symbol', 'RegExp', 'Promise', 'Error', 'Intl', 'Reflect',\n])\n\n/** Safe top-level functions (pure/known, not geometry). */\nconst SAFE_FUNCTIONS = new Set<string>([\n 'parseInt', 'parseFloat', 'isNaN', 'isFinite', 'String', 'Number', 'Boolean',\n 'encodeURI', 'encodeURIComponent', 'decodeURI', 'decodeURIComponent',\n])\n\n// ── scope ──\n\ninterface Scope {\n parent: Scope | null\n tainted: Map<string, boolean>\n}\n\nfunction childScope(parent: Scope): Scope {\n return { parent, tainted: new Map() }\n}\n\nfunction lookupTaint(scope: Scope, name: string): boolean {\n let s: Scope | null = scope\n while (s) {\n const v = s.tainted.get(name)\n if (v !== undefined) return v\n s = s.parent\n }\n return false\n}\n\nfunction markTaint(scope: Scope, name: string): void {\n // Write through to the nearest scope that declares `name`, else current scope.\n let s: Scope | null = scope\n while (s) {\n if (s.tainted.has(name)) {\n s.tainted.set(name, true)\n return\n }\n s = s.parent\n }\n scope.tainted.set(name, true)\n}\n\n// ── scanner ──\n\n/** acorn node (structural access only; see security-scanner for the same pattern). */\ntype Node = any\n\n/**\n * Static non-determinism scanner (B-tier, conservative).\n * @param code - the `.fai.js` / library source text.\n * @param opts - scan options (geometry namespace/callee hints).\n * @returns scan result with all violations.\n */\nexport function scanDeterminism(code: string, opts: DeterminismScanOptions = {}): DeterminismScanResult {\n const defaultNs = opts.defaultNs ?? 'cad'\n const geometryNamespaces = new Set<string>([defaultNs, ...(opts.extraNamespaces ?? [])])\n const geometryCallees = new Set<string>(opts.extraCallees ?? [])\n\n const violations: DeterminismViolation[] = []\n\n let ast: Node\n try {\n ast = acornParse(code, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n locations: true,\n })\n } catch (e) {\n if (opts.strict) {\n const loc = (e as { loc?: { line?: number; column?: number } }).loc\n const at = loc ? ` at line ${loc.line}:${loc.column}` : ''\n throw new SyntaxError(\n `[determinism] library source is not valid plain JavaScript${at} ` +\n `(type stripping is not supported; libraries must ship compiled JS): ${(e as Error).message}`,\n { cause: e },\n )\n }\n // A syntax error is not a determinism violation; the main parse path owns\n // syntax diagnostics. Return ok (empty).\n return { ok: true, violations: [] }\n }\n\n const rootScope: Scope = { parent: null, tainted: new Map() }\n\n function lineOf(node: Node): number {\n return node?.loc?.start?.line ?? 1\n }\n\n function report(node: Node, source: DeterminismSource, detail: string): void {\n violations.push({\n lineNo: lineOf(node),\n source,\n message: `[determinism] ${detail} (non-deterministic value reaches geometry)`,\n })\n }\n\n /** Return the source kind of a call/construct callee, else null. */\n function sourceKindOfCallee(callee: Node): DeterminismSource | null {\n if (\n callee?.type === 'MemberExpression' &&\n callee.object?.type === 'Identifier' &&\n !callee.computed &&\n callee.property?.type === 'Identifier'\n ) {\n const members = SOURCE_MEMBERS[callee.object.name]\n if (members?.has(callee.property.name)) {\n const o = callee.object.name\n if (o === 'Math') return 'Math.random'\n if (o === 'Date') return 'Date'\n if (o === 'crypto') return callee.property.name === 'randomUUID' ? 'crypto' : 'getRandomValues'\n return 'performance.now'\n }\n }\n if (callee?.type === 'Identifier' && SOURCE_IDENTS.has(callee.name)) {\n if (callee.name === 'performance') return 'performance.now'\n if (callee.name === 'getRandomValues') return 'getRandomValues'\n return callee.name as DeterminismSource\n }\n return null\n }\n\n /**\n * Whether a call/construct site is a geometry sink, and if so, check its\n * arguments for taint. Returns the tainted-ness of the call result.\n */\n function handleCall(node: Node, scope: Scope): boolean {\n const callee = node.callee\n let resultTainted = false\n\n // A source call (Date.now / Math.random / crypto.* / performance.now)\n // produces a tainted result regardless of its arguments.\n const srcKind = sourceKindOfCallee(callee)\n if (srcKind) {\n lastSource = srcKind\n // Still walk arguments: nested calls inside may themselves violate.\n for (const a of node.arguments ?? []) {\n evalTaint(a?.type === 'SpreadElement' ? a.argument : a, scope)\n }\n return true\n }\n\n // Evaluate argument taint (propagation, eager evaluation).\n const argTaints: boolean[] = []\n for (const a of node.arguments ?? []) {\n if (a?.type === 'SpreadElement') {\n argTaints.push(evalTaint(a.argument, scope))\n } else {\n argTaints.push(evalTaint(a, scope))\n }\n if (argTaints[argTaints.length - 1]) resultTainted = true\n }\n\n // Determine the call target kind.\n // 1) Geometry namespace member call: `cad.box(...)` / `sheet.fn(...)`.\n if (callee?.type === 'MemberExpression') {\n const obj = callee.object\n const prop = callee.computed ? null : callee.property?.name\n const objName = obj?.type === 'Identifier' ? obj.name : null\n\n if (objName !== null && geometryNamespaces.has(objName)) {\n // Geometry op: any tainted argument violates.\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${objName}.${prop ?? '(computed)'} receives a non-deterministic argument`)\n }\n return resultTainted\n }\n\n if (objName !== null && SAFE_CONTAINERS.has(objName)) {\n // Safe container (console/math/json/...): propagate only.\n return resultTainted\n }\n\n // Object itself tainted (e.g. `d.getSeconds()` where `d = new Date()`)\n // → result conservatively tainted (method may return a dependent value).\n if (objName !== null && evalTaint(obj, scope)) resultTainted = true\n }\n\n // 2) Direct named geometry callee: `gear(...)` from `import { gear }`.\n if (callee?.type === 'Identifier' && geometryCallees.has(callee.name)) {\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${callee.name}(...) receives a non-deterministic argument`)\n }\n return resultTainted\n }\n\n // 3) Known safe top-level function: propagate only.\n if (callee?.type === 'Identifier' && SAFE_FUNCTIONS.has(callee.name)) {\n return resultTainted\n }\n\n // 4) Unknown function call: conservative — a tainted argument may feed\n // geometry, and we cannot prove otherwise.\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${calleeName(callee)}(...) receives a non-deterministic argument through an unknown callee`)\n }\n return resultTainted\n }\n\n function inferSourceForArgs(): DeterminismSource {\n // Best-effort attribution; the precise source is tracked per-node via lastSource.\n return lastSource ?? 'Date'\n }\n\n function calleeName(node: Node): string {\n if (!node) return '(unknown)'\n if (node.type === 'Identifier') return node.name\n if (node.type === 'MemberExpression') {\n const o = node.object?.type === 'Identifier' ? node.object.name : '?'\n const p = node.computed ? '[...]' : node.property?.name ?? '?'\n return `${o}.${p}`\n }\n return node.type\n }\n\n // Track the most recent source kind seen (for coarse attribution in reports).\n let lastSource: DeterminismSource | undefined\n\n /**\n * Evaluate whether an expression is tainted, recording sources as side\n * effects. Memo-free (exponential-free because the AST is a tree).\n */\n function evalTaint(node: Node, scope: Scope): boolean {\n if (!node) return false\n switch (node.type) {\n case 'Literal':\n return false\n\n case 'Identifier': {\n if (node.name === 'undefined' || node.name === 'NaN' || node.name === 'Infinity') return false\n // Source: bare `Date` / `crypto` / `performance` reference.\n if (SOURCE_IDENTS.has(node.name)) {\n lastSource = node.name !== 'performance' ? (node.name as DeterminismSource) : 'performance.now'\n return true\n }\n return lookupTaint(scope, node.name)\n }\n\n case 'MemberExpression': {\n // Source: `Math.random`, `Date.now`, `crypto.getRandomValues`, ...\n if (node.object?.type === 'Identifier') {\n const members = SOURCE_MEMBERS[node.object.name]\n if (members && !node.computed && node.property?.type === 'Identifier' && members.has(node.property.name)) {\n const kind =\n node.object.name === 'Math' ? 'Math.random'\n : node.object.name === 'Date' ? 'Date'\n : node.object.name === 'crypto' ? (node.property.name === 'randomUUID' ? 'crypto' : 'getRandomValues')\n : 'performance.now'\n lastSource = kind\n return true\n }\n }\n // Otherwise: taint flows through the object (and, conservatively, the key).\n const objTaint = evalTaint(node.object, scope)\n const keyTaint = node.computed ? evalTaint(node.property, scope) : false\n return objTaint || keyTaint\n }\n\n case 'NewExpression':\n // `new Date(...)` is a source regardless of arguments (timezone/sytem\n // clock dependence). `new crypto.X` likewise.\n if (node.callee?.type === 'Identifier' && SOURCE_IDENTS.has(node.callee.name)) {\n lastSource = node.callee.name === 'Date' ? 'Date' : 'crypto'\n return true\n }\n return handleCall(node, scope)\n\n case 'CallExpression':\n return handleCall(node, scope)\n\n case 'ArrayExpression': {\n let t = false\n for (const el of node.elements ?? []) {\n if (el && evalTaint(el, scope)) t = true\n }\n return t\n }\n\n case 'ObjectExpression': {\n let t = false\n for (const prop of node.properties ?? []) {\n if (prop.type === 'SpreadElement') {\n if (evalTaint(prop.argument, scope)) t = true\n } else if (prop.value && evalTaint(prop.value, scope)) {\n t = true\n }\n }\n return t\n }\n\n case 'UnaryExpression':\n return evalTaint(node.argument, scope)\n\n case 'UpdateExpression':\n return evalTaint(node.argument, scope)\n\n case 'BinaryExpression':\n case 'LogicalExpression':\n return evalTaint(node.left, scope) || evalTaint(node.right, scope)\n\n case 'ConditionalExpression': {\n const testT = evalTaint(node.test, scope)\n const consT = evalTaint(node.consequent, scope)\n const altT = evalTaint(node.alternate, scope)\n return testT || consT || altT\n }\n\n case 'AssignmentExpression': {\n const rhsT = evalTaint(node.right, scope)\n if (rhsT) {\n markAssignTarget(node.left, scope)\n }\n return rhsT\n }\n\n case 'SequenceExpression': {\n let t = false\n for (const e of node.expressions ?? []) {\n if (evalTaint(e, scope)) t = true\n }\n return t\n }\n\n case 'TemplateLiteral': {\n let t = false\n for (const expr of node.expressions ?? []) {\n if (evalTaint(expr, scope)) t = true\n }\n return t\n }\n\n case 'ChainExpression':\n return evalTaint(node.expression, scope)\n\n case 'AwaitExpression':\n return evalTaint(node.argument, scope)\n\n case 'SpreadElement':\n return evalTaint(node.argument, scope)\n\n case 'ArrowFunctionExpression':\n case 'FunctionExpression': {\n const fnScope = childScope(scope)\n for (const p of node.params ?? []) {\n collectPatternTaintDefault(p, fnScope)\n }\n walkFunctionBody(node, fnScope)\n return false\n }\n\n default:\n return false\n }\n }\n\n /** Mark an assignment/declaration target tainted. */\n function markAssignTarget(left: Node, scope: Scope): void {\n if (left.type === 'Identifier') {\n markTaint(scope, left.name)\n return\n }\n if (left.type === 'MemberExpression') {\n // Conservatively taint the base object; the precise key is unknown.\n if (left.object?.type === 'Identifier') markTaint(scope, left.object.name)\n return\n }\n if (left.type === 'ArrayPattern' || left.type === 'ObjectPattern') {\n collectPattern(left, (name) => markTaint(scope, name))\n return\n }\n }\n\n /** Collect binding names from a destructuring pattern. */\n function collectPattern(pattern: Node, cb: (name: string) => void): void {\n if (!pattern) return\n if (pattern.type === 'Identifier') {\n cb(pattern.name)\n return\n }\n if (pattern.type === 'RestElement') {\n collectPattern(pattern.argument, cb)\n return\n }\n if (pattern.type === 'ArrayPattern') {\n for (const el of pattern.elements ?? []) if (el) collectPattern(el, cb)\n return\n }\n if (pattern.type === 'ObjectPattern') {\n for (const prop of pattern.properties ?? []) {\n if (prop.type === 'RestElement') collectPattern(prop.argument, cb)\n else if (prop.value) collectPattern(prop.value, cb)\n }\n return\n }\n if (pattern.type === 'AssignmentPattern') {\n collectPattern(pattern.left, cb)\n return\n }\n }\n\n /** Register a parameter, evaluating its default for taint. */\n function collectPatternTaintDefault(pattern: Node, scope: Scope): void {\n if (pattern?.type === 'AssignmentPattern') {\n collectPattern(pattern.left, (name) => {\n scope.tainted.set(name, evalTaint(pattern.right, scope))\n })\n return\n }\n collectPattern(pattern, (name) => {\n if (!scope.tainted.has(name)) scope.tainted.set(name, false)\n })\n }\n\n /** Walk a function body (its own scope; statements inside analyzed eagerly). */\n function walkFunctionBody(node: Node, fnScope: Scope): void {\n if (node.body?.type === 'BlockStatement') walkBody(node.body.body ?? [], fnScope)\n else if (node.body) {\n // Expression body: `x => expr`.\n evalTaint(node.body, fnScope)\n }\n }\n\n /** Walk a statement list, carrying implicit-flow taint. */\n function walkBody(body: Node[], scope: Scope, implicitTaint = false): void {\n // Hoist declarations first so assignments resolve in this scope.\n for (const stmt of body) {\n if (stmt?.type === 'VariableDeclaration') {\n for (const decl of stmt.declarations ?? []) {\n collectPattern(decl.id, (name) => {\n if (!scope.tainted.has(name)) scope.tainted.set(name, false)\n })\n }\n }\n if (stmt?.type === 'FunctionDeclaration' && stmt.id?.name) {\n if (!scope.tainted.has(stmt.id.name)) scope.tainted.set(stmt.id.name, false)\n }\n }\n if (implicitTaint) {\n // Any assignment target inside a tainted control flow becomes tainted.\n for (const stmt of body) markStmtTargets(stmt, scope)\n }\n for (const stmt of body) walkStmt(stmt, scope)\n }\n\n /** Conservatively mark every LHS a block writes through as tainted. */\n function markStmtTargets(node: Node, scope: Scope): void {\n if (!node) return\n switch (node.type) {\n case 'VariableDeclaration':\n for (const d of node.declarations ?? []) collectPattern(d.id, (n) => markTaint(scope, n))\n return\n case 'ExpressionStatement':\n if (node.expression?.type === 'AssignmentExpression') markAssignTarget(node.expression.left, scope)\n if (node.expression?.type === 'UpdateExpression') markAssignTarget(node.expression.argument, scope)\n if (node.expression?.type === 'CallExpression') {\n // In-place mutation ergonomics: taint the first argument receiver.\n const first = node.expression.arguments?.[0]\n if (first?.type === 'Identifier') markTaint(scope, first.name)\n }\n return\n case 'FunctionDeclaration':\n if (node.id?.name) markTaint(scope, node.id.name)\n return\n default:\n return\n }\n }\n\n function walkStmt(node: Node, scope: Scope): void {\n if (!node) return\n switch (node.type) {\n case 'ExpressionStatement':\n evalTaint(node.expression, scope)\n return\n\n case 'VariableDeclaration':\n for (const decl of node.declarations ?? []) {\n if (decl.init && evalTaint(decl.init, scope)) {\n collectPattern(decl.id, (name) => markTaint(scope, name))\n }\n }\n return\n\n case 'BlockStatement':\n walkBody(node.body ?? [], childScope(scope))\n return\n\n case 'IfStatement': {\n const testT = evalTaint(node.test, scope)\n walkBody(toList(node.consequent), childScope(scope), testT)\n if (node.alternate) walkBody(toList(node.alternate), childScope(scope), testT)\n return\n }\n\n case 'ForStatement': {\n const forScope = childScope(scope)\n if (node.init?.type === 'VariableDeclaration') {\n for (const d of node.init.declarations ?? []) {\n collectPattern(d.id, (n) => { if (!forScope.tainted.has(n)) forScope.tainted.set(n, false) })\n if (d.init && evalTaint(d.init, forScope)) collectPattern(d.id, (n) => markTaint(forScope, n))\n }\n } else if (node.init) {\n evalTaint(node.init, forScope)\n }\n const testT = node.test ? evalTaint(node.test, forScope) : false\n if (node.update) evalTaint(node.update, forScope)\n walkBody(toList(node.body), forScope, testT)\n return\n }\n\n case 'ForInStatement':\n case 'ForOfStatement': {\n const forScope = childScope(scope)\n const rightT = evalTaint(node.right, forScope)\n if (node.left?.type === 'VariableDeclaration') {\n for (const d of node.left.declarations ?? []) {\n collectPattern(d.id, (n) => { if (!forScope.tainted.has(n)) forScope.tainted.set(n, false) })\n }\n }\n walkBody(toList(node.body), forScope, rightT)\n return\n }\n\n case 'WhileStatement':\n case 'DoWhileStatement': {\n const loopScope = childScope(scope)\n const testT = evalTaint(node.test, loopScope)\n walkBody(toList(node.body), loopScope, testT)\n return\n }\n\n case 'SwitchStatement': {\n const swScope = childScope(scope)\n const discT = evalTaint(node.discriminant, swScope)\n for (const c of node.cases ?? []) {\n if (c.test) evalTaint(c.test, swScope)\n walkBody(c.consequent ?? [], childScope(swScope), discT)\n }\n return\n }\n\n case 'ReturnStatement':\n if (node.argument) evalTaint(node.argument, scope)\n return\n\n case 'ThrowStatement':\n if (node.argument) evalTaint(node.argument, scope)\n return\n\n case 'TryStatement': {\n walkBody(toList(node.block?.body ?? []), scope)\n if (node.handler) {\n const catchScope = childScope(scope)\n if (node.handler.param) collectPattern(node.handler.param, (n) => { catchScope.tainted.set(n, false) })\n walkBody(node.handler.body?.body ?? [], catchScope)\n }\n if (node.finalizer) walkBody(node.finalizer.body ?? [], scope)\n return\n }\n\n case 'FunctionDeclaration': {\n const fnScope = childScope(scope)\n for (const p of node.params ?? []) collectPatternTaintDefault(p, fnScope)\n walkFunctionBody(node, fnScope)\n return\n }\n\n case 'LabeledStatement':\n if (node.body) walkStmt(node.body, scope)\n return\n\n case 'ImportDeclaration':\n case 'ExportNamedDeclaration':\n case 'ExportDefaultDeclaration':\n // Imports are handled by the caller (namespace/callee hints). A default\n // export with a declaration still needs its body walked.\n if (node.type === 'ExportDefaultDeclaration' && node.declaration && node.declaration.type !== 'Identifier') {\n walkStmt(node.declaration, scope)\n }\n if (node.type === 'ExportNamedDeclaration' && node.declaration) {\n walkStmt(node.declaration, scope)\n }\n return\n\n case 'ClassDeclaration': {\n const clsScope = childScope(scope)\n for (const m of node.body?.body ?? []) {\n if (m.value) walkFunctionBody(m.value, childScope(clsScope))\n }\n return\n }\n\n case 'EmptyStatement':\n case 'BreakStatement':\n case 'ContinueStatement':\n case 'DebuggerStatement':\n return\n\n default: {\n // Unknown statement node: conservatively walk children via evalTaint on\n // expression-shaped child properties is error-prone; skip structurally.\n return\n }\n }\n }\n\n function toList(node: Node): Node[] {\n if (!node) return []\n return node.type === 'BlockStatement' ? (node.body ?? []) : [node]\n }\n\n walkBody(ast.body ?? [], rootScope)\n\n return { ok: violations.length === 0, violations }\n}"]}
@@ -10,6 +10,12 @@
10
10
  * 未知第三方函数不在表中时,check() 报"函数不存在",其它机制不受影响。
11
11
  *
12
12
  * 生成文件:src/lang/symbol-table.generated.ts(由 scripts/gen-symbol-table.ts 生成,禁手改)。
13
+ *
14
+ * P5(2026-09-23 扩展库拆分):符号表额外接受**宿主注册的扩展条目**
15
+ * (`registerSymbolTableEntries`)。扩展库(如 `@faicad/faijs-extra`)的 op 不在
16
+ * 生成表里——生成表的唯一来源是 core 的 `createApiNamespace()` 平台面;扩展库由
17
+ * 宿主在装配时注入名字清单,使静态分析同样能查到 `cad.fai_drill`。
18
+ * 扩展条目**不得**覆盖平台函数(真重名即抛错,不静默覆盖)。
13
19
  */
14
20
  /** 符号表条目(keep-syntax P1 后为空对象占位,仅承载键存在性)。 */
15
21
  export type FunctionSymbol = Record<string, never>;
@@ -17,6 +23,31 @@ export type FunctionSymbol = Record<string, never>;
17
23
  export type SymbolTable = Record<string, FunctionSymbol>;
18
24
  /** 生成的符号表(禁手改,由 scripts/gen-symbol-table.ts 生成) */
19
25
  export declare const SYMBOL_TABLE: SymbolTable;
26
+ /**
27
+ * Register library function names in the symbol table (P5).
28
+ *
29
+ * Idempotent for names already registered as extensions; throws when a name
30
+ * collides with a platform function, because a silent override would let a
31
+ * library shadow the platform surface in static analysis.
32
+ *
33
+ * @param names - the library's function names (`cad.<name>`).
34
+ * @throws when a name is already a platform function of the generated table.
35
+ */
36
+ export declare function registerSymbolTableEntries(names: readonly string[]): void;
37
+ /**
38
+ * Remove previously registered extension entries (host unloads a library).
39
+ * Unknown names are ignored.
40
+ *
41
+ * @param names - the function names to unregister.
42
+ */
43
+ export declare function unregisterSymbolTableEntries(names: readonly string[]): void;
44
+ /**
45
+ * All callee names known to the symbol table: the generated platform table plus
46
+ * the registered extension entries.
47
+ *
48
+ * @returns the union of platform and extension names, platform first.
49
+ */
50
+ export declare function symbolTableNames(): string[];
20
51
  /**
21
52
  * Look up a callee in the standard-library symbol table. Unknown functions
22
53
  * (absent from the table) return undefined, which check() reports as
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-table.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAElD,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAExD,mDAAmD;AACnD,eAAO,MAAM,YAAY,EAAE,WAAwC,CAAA;AAEnE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE5E"}
1
+ {"version":3,"file":"symbol-table.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAElD,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAExD,mDAAmD;AACnD,eAAO,MAAM,YAAY,EAAE,WAAwC,CAAA;AASnE;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAOzE;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE5E"}
@@ -10,18 +10,13 @@ declare const _default: {
10
10
  cylinder: {};
11
11
  cone: {};
12
12
  wedge: {};
13
- text: {};
14
13
  screw: {};
15
- svgExtrude: {};
16
14
  sketch: {};
17
15
  sdf: {};
18
- load: {};
19
16
  translate: {};
20
17
  rotate_euler: {};
21
18
  scale: {};
22
19
  scale3d: {};
23
- fai_drill: {};
24
- fai_extrude: {};
25
20
  engrave: {};
26
21
  chamfer: {};
27
22
  fillet: {};
@@ -31,10 +26,6 @@ declare const _default: {
31
26
  intersect: {};
32
27
  extrude: {};
33
28
  revolve: {};
34
- fai_split: {};
35
- group: {};
36
- assembly: {};
37
- copy: {};
38
29
  faceNormal: {};
39
30
  bboxCenter: {};
40
31
  bboxMin: {};
@@ -52,26 +43,25 @@ declare const _default: {
52
43
  cut: {};
53
44
  split: {};
54
45
  linearPattern: {};
46
+ circularPattern: {};
47
+ gridPattern: {};
48
+ rectangularPattern: {};
49
+ mirrorJoin: {};
50
+ mirror: {};
51
+ clone: {};
55
52
  torus: {};
56
53
  fuse: {};
57
54
  viewCamera: {};
58
55
  projectView: {};
59
56
  projectSheet: {};
60
- circularPattern: {};
61
- gridPattern: {};
62
57
  drill: {};
63
58
  pocket: {};
64
59
  boss: {};
65
- mirrorJoin: {};
66
- rectangularPattern: {};
67
60
  convexHull: {};
68
61
  makeBaseBox: {};
69
62
  ellipsoid: {};
70
63
  rotate: {};
71
- mirror: {};
72
- clone: {};
73
64
  applyMatrix: {};
74
- transformCopy: {};
75
65
  locate: {};
76
66
  offset: {};
77
67
  heal: {};
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-table.generated.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBA2EC"}
1
+ {"version":3,"file":"symbol-table.generated.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAiEC"}