@faicad/faijs 0.13.2 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) 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 +44 -17
  4. package/dist/api/api-namespace.js.map +1 -1
  5. package/dist/api/boolean.d.ts +19 -0
  6. package/dist/api/boolean.d.ts.map +1 -1
  7. package/dist/api/boolean.js +71 -12
  8. package/dist/api/boolean.js.map +1 -1
  9. package/dist/api/chamfer.d.ts.map +1 -1
  10. package/dist/api/chamfer.js +12 -8
  11. package/dist/api/chamfer.js.map +1 -1
  12. package/dist/api/compound-geom.d.ts +45 -0
  13. package/dist/api/compound-geom.d.ts.map +1 -0
  14. package/dist/api/compound-geom.js +85 -0
  15. package/dist/api/compound-geom.js.map +1 -0
  16. package/dist/api/edge-ref.d.ts.map +1 -1
  17. package/dist/api/edge-ref.js +7 -4
  18. package/dist/api/edge-ref.js.map +1 -1
  19. package/dist/api/engrave.d.ts.map +1 -1
  20. package/dist/api/engrave.js +1 -0
  21. package/dist/api/engrave.js.map +1 -1
  22. package/dist/api/extrude.d.ts.map +1 -1
  23. package/dist/api/extrude.js +131 -3
  24. package/dist/api/extrude.js.map +1 -1
  25. package/dist/api/face-ref.d.ts.map +1 -1
  26. package/dist/api/face-ref.js +7 -4
  27. package/dist/api/face-ref.js.map +1 -1
  28. package/dist/api/fillet.d.ts.map +1 -1
  29. package/dist/api/fillet.js +6 -5
  30. package/dist/api/fillet.js.map +1 -1
  31. package/dist/api/generated/cad/script-face.d.ts +1 -1
  32. package/dist/api/generated/cad/script-face.d.ts.map +1 -1
  33. package/dist/api/generated/cad/script-face.js +1 -2
  34. package/dist/api/generated/cad/script-face.js.map +1 -1
  35. package/dist/api/generated/operations.js +16 -16
  36. package/dist/api/generated/operations.js.map +1 -1
  37. package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
  38. package/dist/api/generated/script-face-manifest.js +0 -2
  39. package/dist/api/generated/script-face-manifest.js.map +1 -1
  40. package/dist/api/generated/script-face.d.ts +1 -7
  41. package/dist/api/generated/script-face.d.ts.map +1 -1
  42. package/dist/api/generated/script-face.js +2 -4
  43. package/dist/api/generated/script-face.js.map +1 -1
  44. package/dist/api/generated/sketching.js +1 -1
  45. package/dist/api/generated/sketching.js.map +1 -1
  46. package/dist/api/generated/topology.d.ts +0 -56
  47. package/dist/api/generated/topology.d.ts.map +1 -1
  48. package/dist/api/generated/topology.js +19 -68
  49. package/dist/api/generated/topology.js.map +1 -1
  50. package/dist/api/import-brep.d.ts +36 -0
  51. package/dist/api/import-brep.d.ts.map +1 -0
  52. package/dist/api/import-brep.js +72 -0
  53. package/dist/api/import-brep.js.map +1 -0
  54. package/dist/api/import-step.d.ts +28 -0
  55. package/dist/api/import-step.d.ts.map +1 -0
  56. package/dist/api/import-step.js +57 -0
  57. package/dist/api/import-step.js.map +1 -0
  58. package/dist/api/index.d.ts +8 -12
  59. package/dist/api/index.d.ts.map +1 -1
  60. package/dist/api/index.js +22 -16
  61. package/dist/api/index.js.map +1 -1
  62. package/dist/api/internal/compat-op.d.ts.map +1 -1
  63. package/dist/api/internal/compat-op.js +2 -1
  64. package/dist/api/internal/compat-op.js.map +1 -1
  65. package/dist/api/internal/compat-projection.d.ts +3 -1
  66. package/dist/api/internal/compat-projection.d.ts.map +1 -1
  67. package/dist/api/internal/compat-projection.js +8 -5
  68. package/dist/api/internal/compat-projection.js.map +1 -1
  69. package/dist/api/internal/replica-role-table.d.ts +36 -0
  70. package/dist/api/internal/replica-role-table.d.ts.map +1 -0
  71. package/dist/api/internal/replica-role-table.js +73 -0
  72. package/dist/api/internal/replica-role-table.js.map +1 -0
  73. package/dist/api/internal/result-unwrap.d.ts +3 -1
  74. package/dist/api/internal/result-unwrap.d.ts.map +1 -1
  75. package/dist/api/internal/result-unwrap.js +2 -2
  76. package/dist/api/internal/result-unwrap.js.map +1 -1
  77. package/dist/api/knurl.d.ts.map +1 -1
  78. package/dist/api/knurl.js +1 -0
  79. package/dist/api/knurl.js.map +1 -1
  80. package/dist/api/occt-kernel-bridge.d.ts +105 -27
  81. package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
  82. package/dist/api/occt-kernel-bridge.js +255 -41
  83. package/dist/api/occt-kernel-bridge.js.map +1 -1
  84. package/dist/api/pattern.d.ts +32 -0
  85. package/dist/api/pattern.d.ts.map +1 -0
  86. package/dist/api/pattern.js +85 -0
  87. package/dist/api/pattern.js.map +1 -0
  88. package/dist/api/place.d.ts +35 -0
  89. package/dist/api/place.d.ts.map +1 -0
  90. package/dist/api/place.js +113 -0
  91. package/dist/api/place.js.map +1 -0
  92. package/dist/api/primitives.d.ts.map +1 -1
  93. package/dist/api/primitives.js +10 -3
  94. package/dist/api/primitives.js.map +1 -1
  95. package/dist/api/replicate.d.ts +145 -0
  96. package/dist/api/replicate.d.ts.map +1 -0
  97. package/dist/api/replicate.js +351 -0
  98. package/dist/api/replicate.js.map +1 -0
  99. package/dist/api/revolve.d.ts +36 -0
  100. package/dist/api/revolve.d.ts.map +1 -0
  101. package/dist/api/revolve.js +165 -0
  102. package/dist/api/revolve.js.map +1 -0
  103. package/dist/api/screw.d.ts.map +1 -1
  104. package/dist/api/screw.js +1 -0
  105. package/dist/api/screw.js.map +1 -1
  106. package/dist/api/sdf.d.ts.map +1 -1
  107. package/dist/api/sdf.js +1 -0
  108. package/dist/api/sdf.js.map +1 -1
  109. package/dist/api/sketch.d.ts.map +1 -1
  110. package/dist/api/sketch.js +1 -0
  111. package/dist/api/sketch.js.map +1 -1
  112. package/dist/api/split.d.ts +31 -0
  113. package/dist/api/split.d.ts.map +1 -0
  114. package/dist/api/split.js +96 -0
  115. package/dist/api/split.js.map +1 -0
  116. package/dist/api/surface/arg-spec.d.ts +17 -0
  117. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  118. package/dist/api/surface/arg-spec.js +86 -66
  119. package/dist/api/surface/arg-spec.js.map +1 -1
  120. package/dist/api/surface/projection-overrides.d.ts.map +1 -1
  121. package/dist/api/surface/projection-overrides.js +6 -0
  122. package/dist/api/surface/projection-overrides.js.map +1 -1
  123. package/dist/api/topo-resolve.d.ts.map +1 -1
  124. package/dist/api/topo-resolve.js +65 -3
  125. package/dist/api/topo-resolve.js.map +1 -1
  126. package/dist/api/transform.d.ts +4 -0
  127. package/dist/api/transform.d.ts.map +1 -1
  128. package/dist/api/transform.js +44 -12
  129. package/dist/api/transform.js.map +1 -1
  130. package/dist/boolean/deriveNormals.d.ts +5 -4
  131. package/dist/boolean/deriveNormals.d.ts.map +1 -1
  132. package/dist/boolean/deriveNormals.js +24 -7
  133. package/dist/boolean/deriveNormals.js.map +1 -1
  134. package/dist/brep/brep-ops.d.ts +34 -1
  135. package/dist/brep/brep-ops.d.ts.map +1 -1
  136. package/dist/brep/brep-ops.js +62 -22
  137. package/dist/brep/brep-ops.js.map +1 -1
  138. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  139. package/dist/brep/engine/adapters/brep-mock.js +66 -0
  140. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  141. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  142. package/dist/brep/engine/adapters/brepkit.js +44 -1
  143. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  144. package/dist/brep/engine/adapters/occt.d.ts +1 -5
  145. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  146. package/dist/brep/engine/adapters/occt.js +246 -9
  147. package/dist/brep/engine/adapters/occt.js.map +1 -1
  148. package/dist/brep/engine/primitives.d.ts +96 -0
  149. package/dist/brep/engine/primitives.d.ts.map +1 -1
  150. package/dist/brep/engine/primitives.js.map +1 -1
  151. package/dist/brep/engine/types.d.ts +66 -6
  152. package/dist/brep/engine/types.d.ts.map +1 -1
  153. package/dist/brep/engine/types.js.map +1 -1
  154. package/dist/brep/export/step.d.ts.map +1 -1
  155. package/dist/brep/export/step.js +6 -1
  156. package/dist/brep/export/step.js.map +1 -1
  157. package/dist/brep/face-evolution.d.ts +78 -8
  158. package/dist/brep/face-evolution.d.ts.map +1 -1
  159. package/dist/brep/face-evolution.js +130 -17
  160. package/dist/brep/face-evolution.js.map +1 -1
  161. package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
  162. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  163. package/dist/brepkit-kernel/brepkitKernel.js +108 -12
  164. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  165. package/dist/browser.d.ts +6 -28
  166. package/dist/browser.d.ts.map +1 -1
  167. package/dist/browser.js +6 -17
  168. package/dist/browser.js.map +1 -1
  169. package/dist/cad-runtime/admit-compat-lib.d.ts +13 -0
  170. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  171. package/dist/cad-runtime/admit-compat-lib.js +27 -0
  172. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  173. package/dist/cad-runtime/backend-dispatch.d.ts +46 -3
  174. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  175. package/dist/cad-runtime/backend-dispatch.js +48 -3
  176. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  177. package/dist/cad-runtime/browser-lib-loader.d.ts +4 -4
  178. package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
  179. package/dist/cad-runtime/browser-lib-loader.js +7 -4
  180. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  181. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  182. package/dist/cad-runtime/direct-executor.js +14 -4
  183. package/dist/cad-runtime/direct-executor.js.map +1 -1
  184. package/dist/cad-runtime/module-registry.d.ts +3 -1
  185. package/dist/cad-runtime/module-registry.d.ts.map +1 -1
  186. package/dist/cad-runtime/module-registry.js +13 -1
  187. package/dist/cad-runtime/module-registry.js.map +1 -1
  188. package/dist/cad-runtime/runtime-concurrent-error.d.ts +38 -0
  189. package/dist/cad-runtime/runtime-concurrent-error.d.ts.map +1 -0
  190. package/dist/cad-runtime/runtime-concurrent-error.js +43 -0
  191. package/dist/cad-runtime/runtime-concurrent-error.js.map +1 -0
  192. package/dist/cad-runtime/runtime.d.ts +52 -2
  193. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  194. package/dist/cad-runtime/runtime.js +180 -9
  195. package/dist/cad-runtime/runtime.js.map +1 -1
  196. package/dist/define-op.d.ts +22 -0
  197. package/dist/define-op.d.ts.map +1 -1
  198. package/dist/define-op.js +82 -12
  199. package/dist/define-op.js.map +1 -1
  200. package/dist/env-agnostic.d.ts +38 -0
  201. package/dist/env-agnostic.d.ts.map +1 -0
  202. package/dist/env-agnostic.js +29 -0
  203. package/dist/env-agnostic.js.map +1 -0
  204. package/dist/fcstd/attachment.d.ts +8 -1
  205. package/dist/fcstd/attachment.d.ts.map +1 -1
  206. package/dist/fcstd/attachment.js +7 -1
  207. package/dist/fcstd/attachment.js.map +1 -1
  208. package/dist/fcstd/build-fai-zip.d.ts.map +1 -1
  209. package/dist/fcstd/build-fai-zip.js +12 -7
  210. package/dist/fcstd/build-fai-zip.js.map +1 -1
  211. package/dist/fcstd/codegen.d.ts +10 -1
  212. package/dist/fcstd/codegen.d.ts.map +1 -1
  213. package/dist/fcstd/codegen.js +158 -49
  214. package/dist/fcstd/codegen.js.map +1 -1
  215. package/dist/fcstd/contour.d.ts.map +1 -1
  216. package/dist/fcstd/contour.js +23 -24
  217. package/dist/fcstd/contour.js.map +1 -1
  218. package/dist/fcstd/convert.d.ts +2 -18
  219. package/dist/fcstd/convert.d.ts.map +1 -1
  220. package/dist/fcstd/convert.js +35 -53
  221. package/dist/fcstd/convert.js.map +1 -1
  222. package/dist/fcstd/expressions.d.ts +24 -0
  223. package/dist/fcstd/expressions.d.ts.map +1 -1
  224. package/dist/fcstd/expressions.js +91 -0
  225. package/dist/fcstd/expressions.js.map +1 -1
  226. package/dist/fcstd/external-geo.d.ts +12 -1
  227. package/dist/fcstd/external-geo.d.ts.map +1 -1
  228. package/dist/fcstd/external-geo.js +15 -1
  229. package/dist/fcstd/external-geo.js.map +1 -1
  230. package/dist/fcstd/feature-translate.d.ts +21 -1
  231. package/dist/fcstd/feature-translate.d.ts.map +1 -1
  232. package/dist/fcstd/feature-translate.js +124 -8
  233. package/dist/fcstd/feature-translate.js.map +1 -1
  234. package/dist/fcstd/structural-types.d.ts +83 -0
  235. package/dist/fcstd/structural-types.d.ts.map +1 -0
  236. package/dist/fcstd/structural-types.js +121 -0
  237. package/dist/fcstd/structural-types.js.map +1 -0
  238. package/dist/index.d.ts +7 -23
  239. package/dist/index.d.ts.map +1 -1
  240. package/dist/index.js +10 -16
  241. package/dist/index.js.map +1 -1
  242. package/dist/lang/determinism-scanner.d.ts +71 -0
  243. package/dist/lang/determinism-scanner.d.ts.map +1 -0
  244. package/dist/lang/determinism-scanner.js +625 -0
  245. package/dist/lang/determinism-scanner.js.map +1 -0
  246. package/dist/lang/symbol-table.d.ts +31 -0
  247. package/dist/lang/symbol-table.d.ts.map +1 -1
  248. package/dist/lang/symbol-table.generated.d.ts +13 -19
  249. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  250. package/dist/lang/symbol-table.generated.js +13 -19
  251. package/dist/lang/symbol-table.generated.js.map +1 -1
  252. package/dist/lang/symbol-table.js +50 -1
  253. package/dist/lang/symbol-table.js.map +1 -1
  254. package/dist/mesh/creased-normals.d.ts +50 -0
  255. package/dist/mesh/creased-normals.d.ts.map +1 -0
  256. package/dist/mesh/creased-normals.js +114 -0
  257. package/dist/mesh/creased-normals.js.map +1 -0
  258. package/dist/mesh/decoration-provider.d.ts +53 -0
  259. package/dist/mesh/decoration-provider.d.ts.map +1 -0
  260. package/dist/mesh/decoration-provider.js +21 -0
  261. package/dist/mesh/decoration-provider.js.map +1 -0
  262. package/dist/mesh/engrave.d.ts +4 -0
  263. package/dist/mesh/engrave.d.ts.map +1 -1
  264. package/dist/mesh/engrave.js +22 -31
  265. package/dist/mesh/engrave.js.map +1 -1
  266. package/dist/mesh/index.d.ts +5 -14
  267. package/dist/mesh/index.d.ts.map +1 -1
  268. package/dist/mesh/index.js +7 -18
  269. package/dist/mesh/index.js.map +1 -1
  270. package/dist/mesh/io.d.ts +2 -1
  271. package/dist/mesh/io.d.ts.map +1 -1
  272. package/dist/mesh/io.js +5 -7
  273. package/dist/mesh/io.js.map +1 -1
  274. package/dist/mesh/primitives.d.ts +5 -18
  275. package/dist/mesh/primitives.d.ts.map +1 -1
  276. package/dist/mesh/primitives.js +4 -48
  277. package/dist/mesh/primitives.js.map +1 -1
  278. package/dist/mesh/stl-loader.d.ts +23 -0
  279. package/dist/mesh/stl-loader.d.ts.map +1 -0
  280. package/dist/mesh/stl-loader.js +139 -0
  281. package/dist/mesh/stl-loader.js.map +1 -0
  282. package/dist/module-resolver/parse-imports.d.ts +37 -0
  283. package/dist/module-resolver/parse-imports.d.ts.map +1 -0
  284. package/dist/module-resolver/parse-imports.js +39 -0
  285. package/dist/module-resolver/parse-imports.js.map +1 -0
  286. package/dist/module-resolver/resolver.d.ts +1 -1
  287. package/dist/module-resolver/resolver.js +2 -2
  288. package/dist/module-resolver/resolver.js.map +1 -1
  289. package/dist/node-host/cli.d.ts.map +1 -1
  290. package/dist/node-host/cli.js +37 -4
  291. package/dist/node-host/cli.js.map +1 -1
  292. package/dist/primitives/text/cjk-font.d.ts +42 -0
  293. package/dist/primitives/text/cjk-font.d.ts.map +1 -0
  294. package/dist/primitives/text/cjk-font.js +86 -0
  295. package/dist/primitives/text/cjk-font.js.map +1 -0
  296. package/dist/runtime-state.d.ts +18 -6
  297. package/dist/runtime-state.d.ts.map +1 -1
  298. package/dist/runtime-state.js +9 -1
  299. package/dist/runtime-state.js.map +1 -1
  300. package/dist/sdk.d.ts +2 -2
  301. package/dist/sdk.js +2 -2
  302. package/dist/sdk.js.map +1 -1
  303. package/dist/shape.d.ts +15 -0
  304. package/dist/shape.d.ts.map +1 -1
  305. package/dist/shape.js +26 -3
  306. package/dist/shape.js.map +1 -1
  307. package/dist/symbol-table.d.ts +15 -0
  308. package/dist/symbol-table.d.ts.map +1 -0
  309. package/dist/symbol-table.js +14 -0
  310. package/dist/symbol-table.js.map +1 -0
  311. package/dist/topology/naming/build-naming.d.ts +14 -30
  312. package/dist/topology/naming/build-naming.d.ts.map +1 -1
  313. package/dist/topology/naming/build-naming.js +21 -54
  314. package/dist/topology/naming/build-naming.js.map +1 -1
  315. package/dist/topology/naming/capture-topo-ref.d.ts.map +1 -1
  316. package/dist/topology/naming/capture-topo-ref.js +5 -0
  317. package/dist/topology/naming/capture-topo-ref.js.map +1 -1
  318. package/dist/topology/naming/index.d.ts +3 -0
  319. package/dist/topology/naming/index.d.ts.map +1 -1
  320. package/dist/topology/naming/index.js +3 -0
  321. package/dist/topology/naming/index.js.map +1 -1
  322. package/dist/topology/naming/lineage-resolve.d.ts +80 -0
  323. package/dist/topology/naming/lineage-resolve.d.ts.map +1 -0
  324. package/dist/topology/naming/lineage-resolve.js +120 -0
  325. package/dist/topology/naming/lineage-resolve.js.map +1 -0
  326. package/dist/topology/naming/lineage.d.ts +349 -0
  327. package/dist/topology/naming/lineage.d.ts.map +1 -0
  328. package/dist/topology/naming/lineage.js +398 -0
  329. package/dist/topology/naming/lineage.js.map +1 -0
  330. package/dist/topology/naming/migrate.d.ts +41 -0
  331. package/dist/topology/naming/migrate.d.ts.map +1 -0
  332. package/dist/topology/naming/migrate.js +88 -0
  333. package/dist/topology/naming/migrate.js.map +1 -0
  334. package/dist/topology/naming/role-name.d.ts +176 -0
  335. package/dist/topology/naming/role-name.d.ts.map +1 -0
  336. package/dist/topology/naming/role-name.js +344 -0
  337. package/dist/topology/naming/role-name.js.map +1 -0
  338. package/dist/topology/naming/roles.d.ts +20 -22
  339. package/dist/topology/naming/roles.d.ts.map +1 -1
  340. package/dist/topology/naming/roles.js +51 -49
  341. package/dist/topology/naming/roles.js.map +1 -1
  342. package/dist/topology/naming/types.d.ts +65 -18
  343. package/dist/topology/naming/types.d.ts.map +1 -1
  344. package/dist/topology/naming/types.js.map +1 -1
  345. package/dist/vendored/brepjs/kernel/index.d.ts +5 -0
  346. package/dist/vendored/brepjs/kernel/index.d.ts.map +1 -1
  347. package/dist/vendored/brepjs/kernel/index.js +11 -0
  348. package/dist/vendored/brepjs/kernel/index.js.map +1 -1
  349. package/dist/weapp.d.ts +4 -4
  350. package/dist/weapp.d.ts.map +1 -1
  351. package/dist/weapp.js +7 -4
  352. package/dist/weapp.js.map +1 -1
  353. package/package.json +16 -14
  354. package/dist/api/compat/index.d.ts +0 -173
  355. package/dist/api/compat/index.d.ts.map +0 -1
  356. package/dist/api/compat/index.js +0 -222
  357. package/dist/api/compat/index.js.map +0 -1
  358. package/dist/api/compound.d.ts +0 -108
  359. package/dist/api/compound.d.ts.map +0 -1
  360. package/dist/api/compound.js +0 -162
  361. package/dist/api/compound.js.map +0 -1
  362. package/dist/api/copy.d.ts +0 -39
  363. package/dist/api/copy.d.ts.map +0 -1
  364. package/dist/api/copy.js +0 -81
  365. package/dist/api/copy.js.map +0 -1
  366. package/dist/api/fai_drill.d.ts +0 -46
  367. package/dist/api/fai_drill.d.ts.map +0 -1
  368. package/dist/api/fai_drill.js +0 -230
  369. package/dist/api/fai_drill.js.map +0 -1
  370. package/dist/api/fai_extrude.d.ts +0 -36
  371. package/dist/api/fai_extrude.d.ts.map +0 -1
  372. package/dist/api/fai_extrude.js +0 -78
  373. package/dist/api/fai_extrude.js.map +0 -1
  374. package/dist/api/fai_split.d.ts +0 -46
  375. package/dist/api/fai_split.d.ts.map +0 -1
  376. package/dist/api/fai_split.js +0 -253
  377. package/dist/api/fai_split.js.map +0 -1
  378. package/dist/api/load.d.ts +0 -39
  379. package/dist/api/load.d.ts.map +0 -1
  380. package/dist/api/load.js +0 -82
  381. package/dist/api/load.js.map +0 -1
  382. package/dist/api/svgExtrude.d.ts +0 -32
  383. package/dist/api/svgExtrude.d.ts.map +0 -1
  384. package/dist/api/svgExtrude.js +0 -73
  385. package/dist/api/svgExtrude.js.map +0 -1
  386. package/dist/api/text.d.ts +0 -34
  387. package/dist/api/text.d.ts.map +0 -1
  388. package/dist/api/text.js +0 -100
  389. package/dist/api/text.js.map +0 -1
  390. package/dist/brep/text/fontTestHelper.d.ts +0 -30
  391. package/dist/brep/text/fontTestHelper.d.ts.map +0 -1
  392. package/dist/brep/text/fontTestHelper.js +0 -57
  393. package/dist/brep/text/fontTestHelper.js.map +0 -1
  394. package/dist/cad-runtime/module-executor.d.ts +0 -271
  395. package/dist/cad-runtime/module-executor.d.ts.map +0 -1
  396. package/dist/cad-runtime/module-executor.js +0 -630
  397. package/dist/cad-runtime/module-executor.js.map +0 -1
  398. package/dist/cad-runtime/terminal-dag.d.ts +0 -65
  399. package/dist/cad-runtime/terminal-dag.d.ts.map +0 -1
  400. package/dist/cad-runtime/terminal-dag.js +0 -167
  401. package/dist/cad-runtime/terminal-dag.js.map +0 -1
  402. package/dist/faqts/browser.d.ts +0 -16
  403. package/dist/faqts/browser.d.ts.map +0 -1
  404. package/dist/faqts/browser.js +0 -13
  405. package/dist/faqts/browser.js.map +0 -1
  406. package/dist/faqts/exec-blob.d.ts +0 -14
  407. package/dist/faqts/exec-blob.d.ts.map +0 -1
  408. package/dist/faqts/exec-blob.js +0 -22
  409. package/dist/faqts/exec-blob.js.map +0 -1
  410. package/dist/faqts/exec-node.d.ts +0 -15
  411. package/dist/faqts/exec-node.d.ts.map +0 -1
  412. package/dist/faqts/exec-node.js +0 -29
  413. package/dist/faqts/exec-node.js.map +0 -1
  414. package/dist/faqts/imports.d.ts +0 -74
  415. package/dist/faqts/imports.d.ts.map +0 -1
  416. package/dist/faqts/imports.js +0 -95
  417. package/dist/faqts/imports.js.map +0 -1
  418. package/dist/faqts/index.d.ts +0 -22
  419. package/dist/faqts/index.d.ts.map +0 -1
  420. package/dist/faqts/index.js +0 -21
  421. package/dist/faqts/index.js.map +0 -1
  422. package/dist/faqts/node.d.ts +0 -23
  423. package/dist/faqts/node.d.ts.map +0 -1
  424. package/dist/faqts/node.js +0 -23
  425. package/dist/faqts/node.js.map +0 -1
  426. package/dist/faqts/run.d.ts +0 -62
  427. package/dist/faqts/run.d.ts.map +0 -1
  428. package/dist/faqts/run.js +0 -62
  429. package/dist/faqts/run.js.map +0 -1
  430. package/dist/faqts/transform.d.ts +0 -43
  431. package/dist/faqts/transform.d.ts.map +0 -1
  432. package/dist/faqts/transform.js +0 -35
  433. package/dist/faqts/transform.js.map +0 -1
  434. package/dist/lang/compile.d.ts +0 -50
  435. package/dist/lang/compile.d.ts.map +0 -1
  436. package/dist/lang/compile.js +0 -368
  437. package/dist/lang/compile.js.map +0 -1
  438. package/dist/lang/keep.d.ts +0 -109
  439. package/dist/lang/keep.d.ts.map +0 -1
  440. package/dist/lang/keep.js +0 -226
  441. package/dist/lang/keep.js.map +0 -1
  442. package/dist/lang/parser.d.ts +0 -91
  443. package/dist/lang/parser.d.ts.map +0 -1
  444. package/dist/lang/parser.js +0 -1594
  445. package/dist/lang/parser.js.map +0 -1
  446. package/dist/mesh/drill-hole/DrillHoleCore.d.ts +0 -90
  447. package/dist/mesh/drill-hole/DrillHoleCore.d.ts.map +0 -1
  448. package/dist/mesh/drill-hole/DrillHoleCore.js +0 -287
  449. package/dist/mesh/drill-hole/DrillHoleCore.js.map +0 -1
  450. package/dist/mesh/drill-hole/drill-types.d.ts +0 -34
  451. package/dist/mesh/drill-hole/drill-types.d.ts.map +0 -1
  452. package/dist/mesh/drill-hole/drill-types.js +0 -7
  453. package/dist/mesh/drill-hole/drill-types.js.map +0 -1
  454. package/dist/mesh/fai_drill.d.ts +0 -21
  455. package/dist/mesh/fai_drill.d.ts.map +0 -1
  456. package/dist/mesh/fai_drill.js +0 -92
  457. package/dist/mesh/fai_drill.js.map +0 -1
  458. package/dist/mesh/fai_extrude.d.ts +0 -24
  459. package/dist/mesh/fai_extrude.d.ts.map +0 -1
  460. package/dist/mesh/fai_extrude.js +0 -42
  461. package/dist/mesh/fai_extrude.js.map +0 -1
  462. package/dist/mesh/fai_split.d.ts +0 -164
  463. package/dist/mesh/fai_split.d.ts.map +0 -1
  464. package/dist/mesh/fai_split.js +0 -269
  465. package/dist/mesh/fai_split.js.map +0 -1
  466. package/dist/primitives/svg-extrude.d.ts +0 -43
  467. package/dist/primitives/svg-extrude.d.ts.map +0 -1
  468. package/dist/primitives/svg-extrude.js +0 -78
  469. package/dist/primitives/svg-extrude.js.map +0 -1
  470. package/dist/primitives/text/cjk.d.ts +0 -61
  471. package/dist/primitives/text/cjk.d.ts.map +0 -1
  472. package/dist/primitives/text/cjk.js +0 -215
  473. package/dist/primitives/text/cjk.js.map +0 -1
  474. package/dist/primitives/text-geometry.d.ts +0 -47
  475. package/dist/primitives/text-geometry.d.ts.map +0 -1
  476. package/dist/primitives/text-geometry.js +0 -127
  477. package/dist/primitives/text-geometry.js.map +0 -1
  478. package/dist/test-helpers.d.ts +0 -31
  479. package/dist/test-helpers.d.ts.map +0 -1
  480. package/dist/test-helpers.js +0 -55
  481. package/dist/test-helpers.js.map +0 -1
  482. package/dist/vendored/brepjs/core/kernelReentrancy.d.ts +0 -41
  483. package/dist/vendored/brepjs/core/kernelReentrancy.d.ts.map +0 -1
  484. package/dist/vendored/brepjs/core/kernelReentrancy.js +0 -68
  485. package/dist/vendored/brepjs/core/kernelReentrancy.js.map +0 -1
@@ -1,368 +0,0 @@
1
- /**
2
- * compile — ScriptIR → 零 import ESM 模块(VM 执行方案 Phase 1)
3
- *
4
- *
5
- * `compileToModule(script)` 把校验过的 ScriptIR IR 编译为**不含任何 import 语句**的
6
- * ESM 文本(`export const statements = [...]`)。产物零 import 是关键决策——Node 的
7
- * `data:` URL 与浏览器的 Blob URL 动态 import 都无法解析裸说明符,零 import 使模块在
8
- * 两个平台都能直接 `import()`,无需 import map / 打包器 / 文件系统。
9
- *
10
- * 编译规则:
11
- * - 每条语句一个 `{ id, deps, fn }`:`id` 是独立 StmtId(参数语句占 s1..sK,语句 s(K+1)..s(K+N));
12
- * `deps` 由 parser 收集的 `stmt.refs`(inputs + $param + $geom.of + members)翻译为定义语句的 id;
13
- * `fn` 是 `async (ctx, ns) => {...}`(ns = 命名空间集合,无隐式参数)。
14
- * - 参数即变量:`const r = 20` 编译为普通语句 `ctx.r = 20`。
15
- * - 变量引用编译为 `ctx.x`(持久变量容器,跨增量执行存活)。
16
- * - $param → `ctx.<name>`;$geom → `ns.cad.<feature>(ctx.<of>, ...)`;$asset → `await ns.cad.asset(key)`。
17
- * - 编译输入只有 IR,用户原文不进 VM(先解析后执行红线)。
18
- */
19
- import { isParamRef, isVarRef, isCallRef, isExprRef, splitPositionalOptions } from './types.js';
20
- import { withoutKeepDirectives, withoutKeepDirectivesFromPositional } from './keep.js';
21
- import { fmtNum } from './codegen.js';
22
- import { asStmtId } from '../identity.js';
23
- // ── 值格式化(编译产物内部,非用户可读文本) ──
24
- /** JsonValue(参数字面量)→ JS 表达式 */
25
- function fmtJsonValue(v) {
26
- if (typeof v === 'number')
27
- return fmtNum(v);
28
- return JSON.stringify(v);
29
- }
30
- /** 字符串转义(JSON 双引号形式,编译产物内部使用) */
31
- function fmtStr(s) {
32
- return JSON.stringify(s);
33
- }
34
- // ── ArgIR 翻译($param / $ref / $call → 编译产物表达式) ──
35
- /** ParamRefIR → `ctx.<name>` */
36
- function translateParamRef(ref) {
37
- return `ctx.${ref.$param}`;
38
- }
39
- /** VarRefIR → `ctx.<name>` */
40
- function translateVarRef(ref) {
41
- return `ctx.${ref.$ref}`;
42
- }
43
- /** CallRefIR → `await ns.<ns>.<callee>(<args>)`(嵌套调用,统一 await:同步函数被 await 是合法 JS;F2 放开命名空间) */
44
- function translateCallRef(ref) {
45
- const { callee, args, namespace } = ref.$call;
46
- const inner = args.map((a) => translateArg(a)).join(', ');
47
- return `await ns.${namespace ?? 'cad'}.${callee}(${inner})`;
48
- }
49
- /**
50
- * ExprIR → 箭头包装发射(§5.4,零改写):
51
- * `((${names}) => ${text})(${args})`,names = [...params, ...refs](去重、保持声明顺序),
52
- * args = `ctx.<name>, ...` 与 names 一一对应。表达式原文 text 不重写,标识符经
53
- * 箭头参数绑定解析到 ctx.<name>;语法门禁在 parse 期完成(§3.3 白名单文法)。
54
- *
55
- * 失败语义标记(true-JS-subset D4):表达式求值包在 try/catch IIFE 内,失败抛
56
- * `__FaiExprEvalError`(生成模块内联类,零 import)——ModuleExecutor 据此把
57
- * 表达式运行时错误包装为 OpError(E_EXPR) 归并 failedAt,而 op 实现的普通异常
58
- * (= bug,Result 体系契约)保持抛穿不受影响。
59
- */
60
- function translateExprRef(ref) {
61
- useExprEvalGuard = true;
62
- const names = [...new Set([...ref.$expr.params, ...ref.$expr.refs])];
63
- const args = names.map((n) => `ctx.${n}`).join(', ');
64
- const inner = `((${names.join(', ')}) => ${ref.$expr.text})(${args})`;
65
- return `(() => { try { return ${inner} } catch (__e) { throw new __FaiExprEvalError(__e) } })()`;
66
- }
67
- /** 本轮 compileToModule 是否发射了 ExprIR(决定是否内联 __FaiExprEvalError 类)。 */
68
- let useExprEvalGuard = false;
69
- /** 生成模块内联的表达式求值错误标记类(零 import;与 module-executor 的识别契约见类名)。 */
70
- const EXPR_EVAL_ERROR_CLASS = `class __FaiExprEvalError extends Error { constructor(cause) {` +
71
- ` super('expression evaluation failed: ' + (cause && cause.message ? cause.message : String(cause)));` +
72
- ` this.name = 'FaiExprEvalError'; this.isExprEvalError = true; this.exprCause = cause } }`;
73
- /** 递归翻译单个 ArgIR 值为编译产物表达式。 */
74
- function translateArg(value) {
75
- if (value === null || value === undefined)
76
- return 'null';
77
- if (typeof value === 'number')
78
- return fmtNum(value);
79
- if (typeof value === 'boolean')
80
- return String(value);
81
- if (typeof value === 'string')
82
- return fmtStr(value);
83
- if (isParamRef(value))
84
- return translateParamRef(value);
85
- if (isVarRef(value))
86
- return translateVarRef(value);
87
- if (isCallRef(value))
88
- return translateCallRef(value);
89
- if (isExprRef(value))
90
- return translateExprRef(value);
91
- if (Array.isArray(value)) {
92
- return `[${value.map((v) => translateArg(v)).join(', ')}]`;
93
- }
94
- if (typeof value === 'object') {
95
- const entries = Object.entries(value);
96
- return `{ ${entries.map(([k, v]) => `${k}: ${translateArg(v)}`).join(', ')} }`;
97
- }
98
- return String(value);
99
- }
100
- /** 语句 args 表 → 编译产物对象字面量。 */
101
- function translateArgs(args) {
102
- const entries = Object.entries(args);
103
- if (entries.length === 0)
104
- return '{}';
105
- return `{ ${entries.map(([k, v]) => `${k}: ${translateArg(v)}`).join(', ')} }`;
106
- }
107
- // ── 语句 fn 体生成 ──
108
- /**
109
- * 获取语句引用的变量名集合。
110
- *
111
- * 优先用 parser 填充的 stmt.refs(positional + args + receiver 的全量递归收集);
112
- * 手工构造的 ScriptIR(测试等)无 refs 时,从 positional + args + receiver 兜底扫描计算。
113
- */
114
- function getStatementRefs(stmt) {
115
- if (stmt.refs)
116
- return stmt.refs;
117
- const refs = new Set();
118
- // receiver:成员方法调用(do_assemble 等)依赖其 receiver 变量
119
- if (stmt.receiver)
120
- refs.add(stmt.receiver);
121
- const scan = (value) => {
122
- if (value === null || typeof value !== 'object')
123
- return;
124
- if (isParamRef(value)) {
125
- refs.add(value.$param);
126
- return;
127
- }
128
- if (isVarRef(value)) {
129
- refs.add(value.$ref);
130
- return;
131
- }
132
- if (isCallRef(value)) {
133
- for (const a of value.$call.args)
134
- scan(a);
135
- return;
136
- }
137
- if (isExprRef(value)) {
138
- for (const p of value.$expr.params)
139
- refs.add(p);
140
- for (const r of value.$expr.refs)
141
- refs.add(r);
142
- return;
143
- }
144
- if (Array.isArray(value)) {
145
- for (const v of value)
146
- scan(v);
147
- return;
148
- }
149
- for (const v of Object.values(value))
150
- scan(v);
151
- };
152
- for (const arg of stmt.positional ?? [])
153
- scan(arg);
154
- for (const arg of Object.values(stmt.args ?? {}))
155
- scan(arg);
156
- // 兼容旧手工构造 IR:group/assembly members 可能是裸字符串变量名
157
- if (stmt.callee === 'group' || stmt.callee === 'assembly') {
158
- const members = stmt.args?.members;
159
- if (Array.isArray(members)) {
160
- for (const m of members)
161
- if (typeof m === 'string')
162
- refs.add(m);
163
- }
164
- }
165
- return [...refs];
166
- }
167
- /** 生成单条语句的 fn 体(缩进 6 空格,嵌入模块文本)。纯机械:按 IR 形态发射,无 callee 分支(A9 消灭)。
168
- * @param localParams 本机函数名 → 形参表(ABI 发射用;local 语句按形参序补位)。 */
169
- function buildStatementFnBody(stmt, localParams) {
170
- // ── 本机函数调用(local,§3.4 / §5.3):ABI 按形参序发射 ──
171
- // 发射形态(§3.6):`await <name>(ctx, ns, <pos1>, …, <posM>, <v_{M+1}>, …, <vk>)`
172
- // - 位置实参(splitPositionalOptions 切出的 values,可为任意表达式形态)占前 M 位
173
- // - 尾随选项对象(positional 末位纯对象;手工 IR 兜底用 stmt.args)键按形参名补到剩余位
174
- // (缺失形参 → undefined;parse 期 ABI 已拦截未知/占用键)
175
- // - keep/keepHidden 先剥离(与命名空间调用一致)
176
- if (stmt.local) {
177
- const params = localParams?.get(stmt.callee) ?? [];
178
- const { values, named } = splitPositionalOptions(stmt.positional ?? []);
179
- const M = values.length;
180
- const callArgs = ['ctx', 'ns'];
181
- for (const v of values)
182
- callArgs.push(translateArg(v));
183
- // 尾随对象为空时回退 args 槽(手工构造 IR 只填 args 的兼容路径;解析产物二者一致)
184
- const namedSrc = Object.keys(named).length > 0 ? named : withoutKeepDirectives(stmt.args);
185
- const runtimeArgs = withoutKeepDirectives(namedSrc);
186
- for (let i = M; i < params.length; i++) {
187
- const p = params[i];
188
- const v = runtimeArgs[p];
189
- callArgs.push(v !== undefined ? translateArg(v) : 'undefined');
190
- }
191
- const call = `await localFns.${stmt.callee}(${callArgs.join(', ')})`;
192
- // 1) 对象解构赋值(本机函数多返回值:return { front, back })
193
- if (stmt.outputKeys && stmt.outputKeys.length > 0) {
194
- const keys = stmt.outputKeys.join(', ');
195
- const assigns = stmt.outputs.map((out, i) => ` ctx.${out} = ${stmt.outputKeys[i]}`).join('\n');
196
- return [` const { ${keys} } = ${call}`, assigns].join('\n');
197
- }
198
- // 2) 无赋值调用(副作用)
199
- if (stmt.outputs.length === 0) {
200
- return ` await ${call}`;
201
- }
202
- // 3) 普通赋值(单输出)
203
- return ` ctx.${stmt.outputs[0]} = ${call}`;
204
- }
205
- // P7:按命名空间发射(`import * as mech from 'gear-lib-demo'` → ns.mech.<callee>;缺省 cad)
206
- const nsExpr = `ns.${stmt.namespace ?? 'cad'}`;
207
- // 位置实参发射(true-JS-subset §4.3.1):全部位置实参按序翻译;尾随纯对象的
208
- // keep/keepHidden 指令发射前剥离(keep-syntax 设计 §7.1)。剥离后若尾随对象为空
209
- // (如 `union(a, b, { keep: [a, b] })`),整个对象不再发射——与 `union(a, b)` 无选项槽一致。
210
- const positionalStripped = withoutKeepDirectivesFromPositional(stmt.positional ?? []);
211
- const lastArg = positionalStripped[positionalStripped.length - 1];
212
- if (lastArg !== null &&
213
- typeof lastArg === 'object' &&
214
- !Array.isArray(lastArg) &&
215
- !isVarRef(lastArg) &&
216
- !isCallRef(lastArg) &&
217
- !isExprRef(lastArg) &&
218
- Object.keys(lastArg).length === 0) {
219
- positionalStripped.pop();
220
- }
221
- const positionalArgs = positionalStripped;
222
- const positionalStr = positionalArgs.map((v) => translateArg(v)).join(', ');
223
- // 兼容兜底:positional 为空但 args 非空(手工构造 IR 只填 args 的旧形态)
224
- // → 退回 args 槽发射。解析产物中 args 非空 ⇒ positional 必含尾随对象,不会走此分支。
225
- const lastIsPlainObject = positionalArgs.length > 0 &&
226
- (() => {
227
- const a = positionalArgs[positionalArgs.length - 1];
228
- return (a !== null && typeof a === 'object' && !Array.isArray(a) &&
229
- !isVarRef(a) && !isCallRef(a) && !isExprRef(a));
230
- })();
231
- let callArgs;
232
- if (positionalStr !== '') {
233
- if (lastIsPlainObject) {
234
- // 尾随纯对象已含选项(args 是其投影),不重复发射
235
- callArgs = positionalStr;
236
- }
237
- else {
238
- // 手工构造 IR 的过渡兼容:positional 尾位不是纯对象而 args 槽非空 → args 作为
239
- // 独立选项槽追加(keep 指令同步剥离)
240
- const legacyArgs = withoutKeepDirectives(stmt.args);
241
- const legacyStr = Object.keys(legacyArgs).length > 0 ? `, ${translateArgs(legacyArgs)}` : '';
242
- callArgs = positionalStr + legacyStr;
243
- }
244
- }
245
- else if (stmt.receiver) {
246
- const legacyArgs = withoutKeepDirectives(stmt.args);
247
- callArgs = Object.keys(legacyArgs).length > 0 ? translateArgs(legacyArgs) : '';
248
- }
249
- else {
250
- const legacyArgs = withoutKeepDirectives(stmt.args);
251
- callArgs = Object.keys(legacyArgs).length > 0 ? translateArgs(legacyArgs) : '{}';
252
- }
253
- // 1) 对象解构赋值:outputKeys 存在(任意 callee)
254
- if (stmt.outputKeys && stmt.outputKeys.length > 0) {
255
- const keys = stmt.outputKeys.join(', ');
256
- const assigns = stmt.outputs.map((out, i) => ` ctx.${out} = ${stmt.outputKeys[i]}`).join('\n');
257
- return [
258
- ` const { ${keys} } = await ${nsExpr}.${stmt.callee}(${callArgs})`,
259
- assigns,
260
- ].join('\n');
261
- }
262
- // 2) 成员调用(表达式语句):receiver 存在(add_constraint/do_assemble 挂 compound 方法)
263
- if (stmt.receiver) {
264
- // 空 args 不发射 `{}`:`do_assemble()` 而不是 `do_assemble({})`(§5.2 成员方法签名)
265
- return ` await ctx.${stmt.receiver}.${stmt.callee}(${callArgs})`;
266
- }
267
- // 3) 无赋值调用(表达式语句,outputs 为空且无 receiver)
268
- if (stmt.outputs.length === 0) {
269
- return ` await ${nsExpr}.${stmt.callee}(${callArgs})`;
270
- }
271
- // 4) 普通赋值(单输出)
272
- return ` ctx.${stmt.outputs[0]} = await ${nsExpr}.${stmt.callee}(${callArgs})`;
273
- }
274
- // ── 主编译函数 ──
275
- /**
276
- * 把 ScriptIR 编译为零 import ESM 模块文本 + 语句元数据。
277
- *
278
- * 同一份 ScriptIR 编译结果确定(StmtId 按语句顺序稳定分配)。
279
- */
280
- /**
281
- * Compile a validated ScriptIR into a zero-import ESM module text plus parallel
282
- * statement metadata. The output of compiling the same ScriptIR is
283
- * deterministic (StmtIds are assigned stably in statement order).
284
- * @param script - the validated ScriptIR to compile.
285
- * @returns the compiled module code and its statement metadata.
286
- */
287
- export function compileToModule(script) {
288
- useExprEvalGuard = false;
289
- const metas = [];
290
- const varToStmtId = new Map();
291
- // 本机函数名 → 形参表(ABI 发射:位置实参占前 M 位,args 键按形参名补剩余位)
292
- const localParams = new Map();
293
- for (const fn of script.functions ?? [])
294
- localParams.set(fn.name, fn.params);
295
- // 1. 参数语句(s1..sK)
296
- script.params.forEach((p, i) => {
297
- const id = asStmtId(`s${i + 1}`);
298
- metas.push({ id, deps: [], writes: [p.name] });
299
- varToStmtId.set(p.name, id);
300
- });
301
- // 2. 脚本语句(s(K+1)..s(K+N),Phase 3: id 即 sN)
302
- // 顺序处理:先算 deps(用已有 varToStmtId),再写 varToStmtId,
303
- // 这样单入单出复用名的变量能正确解析到上游定义语句(而非自己)。
304
- script.statements.forEach((stmt, i) => {
305
- const id = stmt.id;
306
- // A11 消灭:writes = outputs(无赋值语句 outputs 本来就是 [],机械写法天然正确)
307
- const writes = stmt.outputs;
308
- // 先算 deps(用已有 varToStmtId,此时还未被本语句的 writes 覆盖)
309
- const deps = new Set();
310
- for (const ref of getStatementRefs(stmt)) {
311
- const depId = varToStmtId.get(ref);
312
- if (depId)
313
- deps.add(depId);
314
- }
315
- metas.push({ id, deps: [...deps], writes, sourceIndex: i });
316
- // 再写 varToStmtId(后续语句引用本语句的输出时能找到)
317
- for (const w of writes)
318
- varToStmtId.set(w, id);
319
- });
320
- // 4. 生成模块文本
321
- const bodyLines = [];
322
- let stmtCursor = 0;
323
- for (const meta of metas) {
324
- let fnBody;
325
- if (meta.sourceIndex === undefined) {
326
- // 参数语句:ctx.<name> = <literal>
327
- const p = script.params[stmtCursor];
328
- fnBody = ` ctx.${p.name} = ${fmtJsonValue(p.value)}`;
329
- }
330
- else {
331
- fnBody = buildStatementFnBody(script.statements[meta.sourceIndex], localParams);
332
- }
333
- stmtCursor++;
334
- const depsStr = meta.deps.length > 0 ? meta.deps.map((d) => `'${d}'`).join(', ') : '';
335
- bodyLines.push(` { id: '${meta.id}', deps: [${depsStr}],`);
336
- bodyLines.push(` fn: async (ctx, ns) => {`);
337
- bodyLines.push(fnBody);
338
- bodyLines.push(` } },`);
339
- }
340
- // 5. 本机函数段(§5.1 / §5.2,ABI 方案 A / D7):
341
- // 包装器 = `async function <name>(__ctx, __ns, <用户形参按名>) { <命名空间绑定> <用户函数体原文> }`。
342
- // 命名空间绑定:`const cad = __ns.cad` + 每个顶层 import 绑定名(函数体内裸 cad./mech. 可解析)。
343
- // 函数体原文嵌入(语法门禁后,P3/P5);不注入 ctx / 兄弟函数名(D10 禁体内本机调用)。
344
- const fnLines = [];
345
- for (const fn of script.functions ?? []) {
346
- const bindNames = new Set(['cad']);
347
- for (const imp of script.imports ?? []) {
348
- bindNames.add(imp.localName);
349
- for (const b of imp.bindings ?? [])
350
- bindNames.add(b);
351
- }
352
- const binds = [...bindNames].map((n) => ` const ${n} = __ns.${n}`).join('\n');
353
- const params = fn.params.length > 0 ? `, ${fn.params.join(', ')}` : '';
354
- fnLines.push(`async function ${fn.name}(__ctx, __ns${params}) {`);
355
- fnLines.push(binds);
356
- fnLines.push(fn.body);
357
- fnLines.push('}');
358
- }
359
- const localFnsExport = (script.functions ?? []).length > 0
360
- ? `export const localFns = { ${(script.functions ?? []).map((f) => f.name).join(', ')} }\n`
361
- : '';
362
- const fnSection = fnLines.length > 0 ? `${fnLines.join('\n')}\n` : '';
363
- // D4:发射过 ExprIR 时内联表达式求值错误标记类(零 import;ModuleExecutor 据此包装 E_EXPR)
364
- const exprClassSection = useExprEvalGuard ? `${EXPR_EVAL_ERROR_CLASS}\n` : '';
365
- const code = `${exprClassSection}${fnSection}${localFnsExport}export const statements = [\n${bodyLines.join('\n')}\n]\n`;
366
- return { code, statements: metas };
367
- }
368
- //# sourceMappingURL=compile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/lang/compile.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * compile — ScriptIR → 零 import ESM 模块(VM 执行方案 Phase 1)\n *\n *\n * `compileToModule(script)` 把校验过的 ScriptIR IR 编译为**不含任何 import 语句**的\n * ESM 文本(`export const statements = [...]`)。产物零 import 是关键决策——Node 的\n * `data:` URL 与浏览器的 Blob URL 动态 import 都无法解析裸说明符,零 import 使模块在\n * 两个平台都能直接 `import()`,无需 import map / 打包器 / 文件系统。\n *\n * 编译规则:\n * - 每条语句一个 `{ id, deps, fn }`:`id` 是独立 StmtId(参数语句占 s1..sK,语句 s(K+1)..s(K+N));\n * `deps` 由 parser 收集的 `stmt.refs`(inputs + $param + $geom.of + members)翻译为定义语句的 id;\n * `fn` 是 `async (ctx, ns) => {...}`(ns = 命名空间集合,无隐式参数)。\n * - 参数即变量:`const r = 20` 编译为普通语句 `ctx.r = 20`。\n * - 变量引用编译为 `ctx.x`(持久变量容器,跨增量执行存活)。\n * - $param → `ctx.<name>`;$geom → `ns.cad.<feature>(ctx.<of>, ...)`;$asset → `await ns.cad.asset(key)`。\n * - 编译输入只有 IR,用户原文不进 VM(先解析后执行红线)。\n */\n\nimport type {\n ArgIR,\n StatementIR,\n JsonValue,\n ParamRefIR,\n ScriptIR,\n VarRefIR,\n CallRefIR,\n ExprIR,\n} from './types'\nimport { isParamRef, isVarRef, isCallRef, isExprRef, splitPositionalOptions } from './types'\nimport { withoutKeepDirectives, withoutKeepDirectivesFromPositional } from './keep'\nimport { fmtNum } from './codegen'\nimport { asStmtId, type StmtId } from '../identity'\n\n// ── 编译产物类型 ──\n\n/** 编译后单条语句的元数据(与模块文本中的 `{ id, deps, fn }` 并行)。 */\nexport interface CompiledStatementMeta {\n /** 独立 StmtId(模块语句 id) */\n id: StmtId\n /** 依赖语句 id(定义被引用变量的语句) */\n deps: StmtId[]\n /** 本语句写入 ctx 的键(变量名):普通语句 [id]、split 双输出、参数 [paramName]、add_constraint/do_assemble 空 */\n writes: string[]\n /** 在 script.statements 中的下标(参数语句为 undefined) */\n sourceIndex?: number\n}\n\n/** compileToModule 的返回:模块文本 + 并行元数据(供 ModuleExecutor 建 sourceById / reconcileCtx)。 */\nexport interface CompiledModule {\n code: string\n statements: CompiledStatementMeta[]\n}\n\n// ── 值格式化(编译产物内部,非用户可读文本) ──\n\n/** JsonValue(参数字面量)→ JS 表达式 */\nfunction fmtJsonValue(v: JsonValue): string {\n if (typeof v === 'number') return fmtNum(v)\n return JSON.stringify(v)\n}\n\n/** 字符串转义(JSON 双引号形式,编译产物内部使用) */\nfunction fmtStr(s: string): string {\n return JSON.stringify(s)\n}\n\n// ── ArgIR 翻译($param / $ref / $call → 编译产物表达式) ──\n\n/** ParamRefIR → `ctx.<name>` */\nfunction translateParamRef(ref: ParamRefIR): string {\n return `ctx.${ref.$param}`\n}\n\n/** VarRefIR → `ctx.<name>` */\nfunction translateVarRef(ref: VarRefIR): string {\n return `ctx.${ref.$ref}`\n}\n\n/** CallRefIR → `await ns.<ns>.<callee>(<args>)`(嵌套调用,统一 await:同步函数被 await 是合法 JS;F2 放开命名空间) */\nfunction translateCallRef(ref: CallRefIR): string {\n const { callee, args, namespace } = ref.$call\n const inner = args.map((a) => translateArg(a)).join(', ')\n return `await ns.${namespace ?? 'cad'}.${callee}(${inner})`\n}\n\n/**\n * ExprIR → 箭头包装发射(§5.4,零改写):\n * `((${names}) => ${text})(${args})`,names = [...params, ...refs](去重、保持声明顺序),\n * args = `ctx.<name>, ...` 与 names 一一对应。表达式原文 text 不重写,标识符经\n * 箭头参数绑定解析到 ctx.<name>;语法门禁在 parse 期完成(§3.3 白名单文法)。\n *\n * 失败语义标记(true-JS-subset D4):表达式求值包在 try/catch IIFE 内,失败抛\n * `__FaiExprEvalError`(生成模块内联类,零 import)——ModuleExecutor 据此把\n * 表达式运行时错误包装为 OpError(E_EXPR) 归并 failedAt,而 op 实现的普通异常\n * (= bug,Result 体系契约)保持抛穿不受影响。\n */\nfunction translateExprRef(ref: ExprIR): string {\n useExprEvalGuard = true\n const names = [...new Set([...ref.$expr.params, ...ref.$expr.refs])]\n const args = names.map((n) => `ctx.${n}`).join(', ')\n const inner = `((${names.join(', ')}) => ${ref.$expr.text})(${args})`\n return `(() => { try { return ${inner} } catch (__e) { throw new __FaiExprEvalError(__e) } })()`\n}\n\n/** 本轮 compileToModule 是否发射了 ExprIR(决定是否内联 __FaiExprEvalError 类)。 */\nlet useExprEvalGuard = false\n\n/** 生成模块内联的表达式求值错误标记类(零 import;与 module-executor 的识别契约见类名)。 */\nconst EXPR_EVAL_ERROR_CLASS =\n `class __FaiExprEvalError extends Error { constructor(cause) {` +\n ` super('expression evaluation failed: ' + (cause && cause.message ? cause.message : String(cause)));` +\n ` this.name = 'FaiExprEvalError'; this.isExprEvalError = true; this.exprCause = cause } }`\n\n/** 递归翻译单个 ArgIR 值为编译产物表达式。 */\nfunction translateArg(value: ArgIR): string {\n if (value === null || value === undefined) return 'null'\n if (typeof value === 'number') return fmtNum(value)\n if (typeof value === 'boolean') return String(value)\n if (typeof value === 'string') return fmtStr(value)\n if (isParamRef(value)) return translateParamRef(value)\n if (isVarRef(value)) return translateVarRef(value)\n if (isCallRef(value)) return translateCallRef(value)\n if (isExprRef(value)) return translateExprRef(value)\n if (Array.isArray(value)) {\n return `[${value.map((v) => translateArg(v as ArgIR)).join(', ')}]`\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, ArgIR>)\n return `{ ${entries.map(([k, v]) => `${k}: ${translateArg(v)}`).join(', ')} }`\n }\n return String(value)\n}\n\n/** 语句 args 表 → 编译产物对象字面量。 */\nfunction translateArgs(args: Record<string, ArgIR>): string {\n const entries = Object.entries(args)\n if (entries.length === 0) return '{}'\n return `{ ${entries.map(([k, v]) => `${k}: ${translateArg(v)}`).join(', ')} }`\n}\n\n// ── 语句 fn 体生成 ──\n\n/**\n * 获取语句引用的变量名集合。\n *\n * 优先用 parser 填充的 stmt.refs(positional + args + receiver 的全量递归收集);\n * 手工构造的 ScriptIR(测试等)无 refs 时,从 positional + args + receiver 兜底扫描计算。\n */\nfunction getStatementRefs(stmt: StatementIR): string[] {\n if (stmt.refs) return stmt.refs\n const refs = new Set<string>()\n // receiver:成员方法调用(do_assemble 等)依赖其 receiver 变量\n if (stmt.receiver) refs.add(stmt.receiver)\n const scan = (value: ArgIR): void => {\n if (value === null || typeof value !== 'object') return\n if (isParamRef(value)) {\n refs.add(value.$param)\n return\n }\n if (isVarRef(value)) {\n refs.add(value.$ref)\n return\n }\n if (isCallRef(value)) {\n for (const a of value.$call.args) scan(a)\n return\n }\n if (isExprRef(value)) {\n for (const p of value.$expr.params) refs.add(p)\n for (const r of value.$expr.refs) refs.add(r)\n return\n }\n if (Array.isArray(value)) {\n for (const v of value) scan(v)\n return\n }\n for (const v of Object.values(value)) scan(v)\n }\n for (const arg of stmt.positional ?? []) scan(arg)\n for (const arg of Object.values(stmt.args ?? {})) scan(arg)\n // 兼容旧手工构造 IR:group/assembly members 可能是裸字符串变量名\n if (stmt.callee === 'group' || stmt.callee === 'assembly') {\n const members = stmt.args?.members\n if (Array.isArray(members)) {\n for (const m of members) if (typeof m === 'string') refs.add(m)\n }\n }\n return [...refs]\n}\n\n/** 生成单条语句的 fn 体(缩进 6 空格,嵌入模块文本)。纯机械:按 IR 形态发射,无 callee 分支(A9 消灭)。\n * @param localParams 本机函数名 → 形参表(ABI 发射用;local 语句按形参序补位)。 */\nfunction buildStatementFnBody(stmt: StatementIR, localParams?: Map<string, string[]>): string {\n // ── 本机函数调用(local,§3.4 / §5.3):ABI 按形参序发射 ──\n // 发射形态(§3.6):`await <name>(ctx, ns, <pos1>, …, <posM>, <v_{M+1}>, …, <vk>)`\n // - 位置实参(splitPositionalOptions 切出的 values,可为任意表达式形态)占前 M 位\n // - 尾随选项对象(positional 末位纯对象;手工 IR 兜底用 stmt.args)键按形参名补到剩余位\n // (缺失形参 → undefined;parse 期 ABI 已拦截未知/占用键)\n // - keep/keepHidden 先剥离(与命名空间调用一致)\n if (stmt.local) {\n const params = localParams?.get(stmt.callee) ?? []\n const { values, named } = splitPositionalOptions(stmt.positional ?? [])\n const M = values.length\n const callArgs: string[] = ['ctx', 'ns']\n for (const v of values) callArgs.push(translateArg(v))\n // 尾随对象为空时回退 args 槽(手工构造 IR 只填 args 的兼容路径;解析产物二者一致)\n const namedSrc = Object.keys(named).length > 0 ? named : withoutKeepDirectives(stmt.args)\n const runtimeArgs = withoutKeepDirectives(namedSrc)\n for (let i = M; i < params.length; i++) {\n const p = params[i]\n const v = runtimeArgs[p]\n callArgs.push(v !== undefined ? translateArg(v) : 'undefined')\n }\n const call = `await localFns.${stmt.callee}(${callArgs.join(', ')})`\n // 1) 对象解构赋值(本机函数多返回值:return { front, back })\n if (stmt.outputKeys && stmt.outputKeys.length > 0) {\n const keys = stmt.outputKeys.join(', ')\n const assigns = stmt.outputs.map((out, i) => ` ctx.${out} = ${stmt.outputKeys![i]}`).join('\\n')\n return [` const { ${keys} } = ${call}`, assigns].join('\\n')\n }\n // 2) 无赋值调用(副作用)\n if (stmt.outputs.length === 0) {\n return ` await ${call}`\n }\n // 3) 普通赋值(单输出)\n return ` ctx.${stmt.outputs[0]} = ${call}`\n }\n\n // P7:按命名空间发射(`import * as mech from 'gear-lib-demo'` → ns.mech.<callee>;缺省 cad)\n const nsExpr = `ns.${stmt.namespace ?? 'cad'}`\n\n // 位置实参发射(true-JS-subset §4.3.1):全部位置实参按序翻译;尾随纯对象的\n // keep/keepHidden 指令发射前剥离(keep-syntax 设计 §7.1)。剥离后若尾随对象为空\n // (如 `union(a, b, { keep: [a, b] })`),整个对象不再发射——与 `union(a, b)` 无选项槽一致。\n const positionalStripped = withoutKeepDirectivesFromPositional(stmt.positional ?? [])\n const lastArg = positionalStripped[positionalStripped.length - 1]\n if (\n lastArg !== null &&\n typeof lastArg === 'object' &&\n !Array.isArray(lastArg) &&\n !isVarRef(lastArg) &&\n !isCallRef(lastArg) &&\n !isExprRef(lastArg) &&\n Object.keys(lastArg as Record<string, ArgIR>).length === 0\n ) {\n positionalStripped.pop()\n }\n const positionalArgs = positionalStripped\n const positionalStr = positionalArgs.map((v) => translateArg(v)).join(', ')\n\n // 兼容兜底:positional 为空但 args 非空(手工构造 IR 只填 args 的旧形态)\n // → 退回 args 槽发射。解析产物中 args 非空 ⇒ positional 必含尾随对象,不会走此分支。\n const lastIsPlainObject =\n positionalArgs.length > 0 &&\n (() => {\n const a = positionalArgs[positionalArgs.length - 1]\n return (\n a !== null && typeof a === 'object' && !Array.isArray(a) &&\n !isVarRef(a) && !isCallRef(a) && !isExprRef(a)\n )\n })()\n let callArgs: string\n if (positionalStr !== '') {\n if (lastIsPlainObject) {\n // 尾随纯对象已含选项(args 是其投影),不重复发射\n callArgs = positionalStr\n } else {\n // 手工构造 IR 的过渡兼容:positional 尾位不是纯对象而 args 槽非空 → args 作为\n // 独立选项槽追加(keep 指令同步剥离)\n const legacyArgs = withoutKeepDirectives(stmt.args)\n const legacyStr = Object.keys(legacyArgs).length > 0 ? `, ${translateArgs(legacyArgs)}` : ''\n callArgs = positionalStr + legacyStr\n }\n } else if (stmt.receiver) {\n const legacyArgs = withoutKeepDirectives(stmt.args)\n callArgs = Object.keys(legacyArgs).length > 0 ? translateArgs(legacyArgs) : ''\n } else {\n const legacyArgs = withoutKeepDirectives(stmt.args)\n callArgs = Object.keys(legacyArgs).length > 0 ? translateArgs(legacyArgs) : '{}'\n }\n\n // 1) 对象解构赋值:outputKeys 存在(任意 callee)\n if (stmt.outputKeys && stmt.outputKeys.length > 0) {\n const keys = stmt.outputKeys.join(', ')\n const assigns = stmt.outputs.map((out, i) => ` ctx.${out} = ${stmt.outputKeys![i]}`).join('\\n')\n return [\n ` const { ${keys} } = await ${nsExpr}.${stmt.callee}(${callArgs})`,\n assigns,\n ].join('\\n')\n }\n\n // 2) 成员调用(表达式语句):receiver 存在(add_constraint/do_assemble 挂 compound 方法)\n if (stmt.receiver) {\n // 空 args 不发射 `{}`:`do_assemble()` 而不是 `do_assemble({})`(§5.2 成员方法签名)\n return ` await ctx.${stmt.receiver}.${stmt.callee}(${callArgs})`\n }\n\n // 3) 无赋值调用(表达式语句,outputs 为空且无 receiver)\n if (stmt.outputs.length === 0) {\n return ` await ${nsExpr}.${stmt.callee}(${callArgs})`\n }\n\n // 4) 普通赋值(单输出)\n return ` ctx.${stmt.outputs[0]} = await ${nsExpr}.${stmt.callee}(${callArgs})`\n}\n\n// ── 主编译函数 ──\n\n/**\n * 把 ScriptIR 编译为零 import ESM 模块文本 + 语句元数据。\n *\n * 同一份 ScriptIR 编译结果确定(StmtId 按语句顺序稳定分配)。\n */\n/**\n * Compile a validated ScriptIR into a zero-import ESM module text plus parallel\n * statement metadata. The output of compiling the same ScriptIR is\n * deterministic (StmtIds are assigned stably in statement order).\n * @param script - the validated ScriptIR to compile.\n * @returns the compiled module code and its statement metadata.\n */\nexport function compileToModule(script: ScriptIR): CompiledModule {\n useExprEvalGuard = false\n const metas: CompiledStatementMeta[] = []\n const varToStmtId = new Map<string, StmtId>()\n // 本机函数名 → 形参表(ABI 发射:位置实参占前 M 位,args 键按形参名补剩余位)\n const localParams = new Map<string, string[]>()\n for (const fn of script.functions ?? []) localParams.set(fn.name, fn.params)\n\n // 1. 参数语句(s1..sK)\n script.params.forEach((p, i) => {\n const id = asStmtId(`s${i + 1}`)\n metas.push({ id, deps: [], writes: [p.name] })\n varToStmtId.set(p.name, id)\n })\n\n // 2. 脚本语句(s(K+1)..s(K+N),Phase 3: id 即 sN)\n // 顺序处理:先算 deps(用已有 varToStmtId),再写 varToStmtId,\n // 这样单入单出复用名的变量能正确解析到上游定义语句(而非自己)。\n script.statements.forEach((stmt, i) => {\n const id = stmt.id\n // A11 消灭:writes = outputs(无赋值语句 outputs 本来就是 [],机械写法天然正确)\n const writes = stmt.outputs\n // 先算 deps(用已有 varToStmtId,此时还未被本语句的 writes 覆盖)\n const deps = new Set<StmtId>()\n for (const ref of getStatementRefs(stmt)) {\n const depId = varToStmtId.get(ref)\n if (depId) deps.add(depId)\n }\n metas.push({ id, deps: [...deps], writes, sourceIndex: i })\n // 再写 varToStmtId(后续语句引用本语句的输出时能找到)\n for (const w of writes) varToStmtId.set(w, id)\n })\n\n // 4. 生成模块文本\n const bodyLines: string[] = []\n let stmtCursor = 0\n for (const meta of metas) {\n let fnBody: string\n if (meta.sourceIndex === undefined) {\n // 参数语句:ctx.<name> = <literal>\n const p = script.params[stmtCursor]\n fnBody = ` ctx.${p.name} = ${fmtJsonValue(p.value as JsonValue)}`\n } else {\n fnBody = buildStatementFnBody(script.statements[meta.sourceIndex], localParams)\n }\n stmtCursor++\n const depsStr = meta.deps.length > 0 ? meta.deps.map((d) => `'${d}'`).join(', ') : ''\n bodyLines.push(` { id: '${meta.id}', deps: [${depsStr}],`)\n bodyLines.push(` fn: async (ctx, ns) => {`)\n bodyLines.push(fnBody)\n bodyLines.push(` } },`)\n }\n\n // 5. 本机函数段(§5.1 / §5.2,ABI 方案 A / D7):\n // 包装器 = `async function <name>(__ctx, __ns, <用户形参按名>) { <命名空间绑定> <用户函数体原文> }`。\n // 命名空间绑定:`const cad = __ns.cad` + 每个顶层 import 绑定名(函数体内裸 cad./mech. 可解析)。\n // 函数体原文嵌入(语法门禁后,P3/P5);不注入 ctx / 兄弟函数名(D10 禁体内本机调用)。\n const fnLines: string[] = []\n for (const fn of script.functions ?? []) {\n const bindNames = new Set<string>(['cad'])\n for (const imp of script.imports ?? []) {\n bindNames.add(imp.localName)\n for (const b of imp.bindings ?? []) bindNames.add(b)\n }\n const binds = [...bindNames].map((n) => ` const ${n} = __ns.${n}`).join('\\n')\n const params = fn.params.length > 0 ? `, ${fn.params.join(', ')}` : ''\n fnLines.push(`async function ${fn.name}(__ctx, __ns${params}) {`)\n fnLines.push(binds)\n fnLines.push(fn.body)\n fnLines.push('}')\n }\n const localFnsExport =\n (script.functions ?? []).length > 0\n ? `export const localFns = { ${(script.functions ?? []).map((f) => f.name).join(', ')} }\\n`\n : ''\n const fnSection = fnLines.length > 0 ? `${fnLines.join('\\n')}\\n` : ''\n // D4:发射过 ExprIR 时内联表达式求值错误标记类(零 import;ModuleExecutor 据此包装 E_EXPR)\n const exprClassSection = useExprEvalGuard ? `${EXPR_EVAL_ERROR_CLASS}\\n` : ''\n\n const code = `${exprClassSection}${fnSection}${localFnsExport}export const statements = [\\n${bodyLines.join('\\n')}\\n]\\n`\n return { code, statements: metas }\n}\n"]}
@@ -1,109 +0,0 @@
1
- /**
2
- * keep — 统一内外 keep 机制的语义集中点(L0 零依赖)
3
- *
4
- *
5
- * keep 机制的两面:
6
- * - 调用点声明:`cad.op(input, { keep: [a, b], keepHidden: true })`(UI / AI / 用户)
7
- * - 函数体声明:`exec.keep(...shapes)` / `exec.keepHidden(...shapes)`(库作者)
8
- *
9
- * 优先级:调用点 > 函数体(resolveKeep 先铺函数体声明,再用调用点覆盖写入)。
10
- *
11
- * 本文件是 keep 语义的唯一集中点:parseUserKeep / withoutKeepDirectives /
12
- * resolveKeep / validateKeepDirectives。消费方:compile(发射剥离)、
13
- * module-executor(statementKey)、terminal-dag(消费判定)、runtime.check(校验)。
14
- *
15
- * L0 边界:仅依赖 ./types 与 ../identity,零运行时依赖。
16
- */
17
- import type { ArgIR, StatementIR } from './types.js';
18
- import { type PartName } from '../identity.js';
19
- /** 函数体 `exec.keep` / `exec.keepHidden` 的运行时登记记录(ModuleExecutor 持有)。 */
20
- export interface InternalKeepRecord {
21
- /** 被声明保留的变量名集合 */
22
- kept: Set<PartName>;
23
- /** kept 变量的 hidden 状态(未列出的 kept 变量 = 可见) */
24
- hidden: Map<PartName, boolean>;
25
- }
26
- /** keep 合并结果(terminal-dag 消费判定 + hidden 计算)。 */
27
- export interface KeepResolution {
28
- kept: Set<PartName>;
29
- /** 仅对 kept 中的变量有条目;未列出者 = 可见 */
30
- hidden: Map<PartName, boolean>;
31
- }
32
- /** 调用点 keep 指令解析结果。 */
33
- export interface UserKeep {
34
- targets: PartName[];
35
- /** 逐条目 hidden({shape, hidden:true} 形态) */
36
- hidden: Map<PartName, boolean>;
37
- /** 语句级 hidden 默认(keepHidden: true),默认 false */
38
- statementDefault: boolean;
39
- }
40
- /**
41
- * 剥离调用点 keep 指令(`keep` / `keepHidden` 两键)。
42
- *
43
- * 编译发射与 statementKey 必须剥离(设计 §7.1/§7.2):keep 透传给库函数会
44
- * 挤占 params 槽 / 被当 Shape 传入(union/split 的 `...rest`)。
45
- */
46
- /**
47
- * Strip the call-site keep directives (`keep` / `keepHidden` keys). Both
48
- * compile emission and statement-key computation must strip them (design
49
- * §7.1/§7.2): passing keep through would crowd the params slot or be treated as
50
- * a Shape argument (union/split `...rest`).
51
- * @param args - the statement's args object, or undefined.
52
- * @returns the args with the keep and keepHidden keys removed.
53
- */
54
- export declare function withoutKeepDirectives(args: Record<string, ArgIR> | undefined): Record<string, ArgIR>;
55
- /**
56
- * 剥离位置实参槽中的 keep 指令(true-JS-subset 方案 §4.1):keep/keepHidden 键
57
- * 存在于尾随纯对象位置实参(选项槽)中,发射/序列化前从该对象剥离。
58
- * 与 withoutKeepDirectives 同语义,只是载体从 args 记录变为 positional 尾随对象。
59
- * @param positional - the statement's positional argument slot.
60
- * @returns a copy of the positional slot with keep/keepHidden removed from the trailing plain object.
61
- */
62
- export declare function withoutKeepDirectivesFromPositional(positional: ArgIR[]): ArgIR[];
63
- /**
64
- * 解析调用点 keep / keepHidden 指令(IR 形态 → 目标与 hidden)。
65
- *
66
- * 两种条目形态等价(设计 §2.3):标识符 `keep:[a,b]`(parser 产出 VarRefIR)
67
- * 与字符串字面量 `keep:['a']`(parser 产出 string)。
68
- * hidden 三态:仅 `{shape, hidden}` 显式条目写入;普通条目不写
69
- * (hidden 由语句级 keepHidden 兜底,设计 §2.4 `?? statementDefault`)。
70
- */
71
- /**
72
- * Parse the call-site keep / keepHidden directives (IR shape into targets and
73
- * hidden states). Identifier and string-literal entry forms are equivalent;
74
- * hidden is three-valued, with only explicit `{shape, hidden}` entries written.
75
- * @param stmt - the statement whose args hold the keep directives.
76
- * @returns the parsed user keep targets and hidden defaults.
77
- */
78
- export declare function parseUserKeep(stmt: StatementIR): UserKeep;
79
- /**
80
- * 合并函数体声明与调用点声明。
81
- *
82
- * 优先级体现为两步顺序:先铺函数体声明(internal),再用调用点声明覆盖写入。
83
- * 调用点条目的 hidden = 逐条目 hidden ?? statementDefault(D1:默认可见)。
84
- */
85
- /**
86
- * Merge function-body declarations with call-site declarations. Precedence is a
87
- * two-step order: function-body declarations (internal) are laid down first,
88
- * then call-site declarations overwrite them.
89
- * @param stmt - the statement whose call-site keep directives to merge.
90
- * @param internal - the function-body keep registration, if any.
91
- * @returns the merged keep resolution with kept variables and hidden states.
92
- */
93
- export declare function resolveKeep(stmt: StatementIR, internal?: InternalKeepRecord): KeepResolution;
94
- /**
95
- * 校验语句的 keep / keepHidden 指令(纯静态,不依赖第三方签名)。
96
- * 返回错误消息列表(空 = 合法):
97
- * - `keep` 必须是数组;条目必须是变量引用(字符串或标识符)或 `{shape, hidden}` 对象
98
- * - 引用目标必须是本语句 inputs 之一,或出现在 args 中(VarRefIR)
99
- * - `keepHidden` 必须是 boolean
100
- */
101
- /**
102
- * Validate a statement's keep / keepHidden directives (purely static, does not
103
- * depend on third-party signatures). Returns a list of error messages, empty
104
- * when the directives are legal.
105
- * @param stmt - the statement whose keep directives to validate.
106
- * @returns an array of error messages, empty when valid.
107
- */
108
- export declare function validateKeepDirectives(stmt: StatementIR): string[];
109
- //# sourceMappingURL=keep.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keep.d.ts","sourceRoot":"","sources":["../../src/lang/keep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAa,WAAW,EAAoB,MAAM,SAAS,CAAA;AAE9E,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAIvD,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,kBAAkB;IAClB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnB,4CAA4C;IAC5C,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnB,gCAAgC;IAChC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,uBAAuB;AACvB,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,QAAQ,EAAE,CAAA;IACnB,0CAA0C;IAC1C,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC9B,+CAA+C;IAC/C,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAID;;;;;GAKG;AACH;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,GACtC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAIvB;AAeD;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAQhF;AA4BD;;;;;;;GAOG;AACH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAoBzD;AAID;;;;;GAKG;AACH;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,cAAc,CAWhB;AAID;;;;;;GAMG;AACH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CA2DlE"}