@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 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * faijs-cli — CLI 逻辑(可导入、可测试)。第三方调用入口:packages/core/scripts/faijs-cli.ts。\n * (仓库自用 doc/ci/开发脚本在根 scripts/ 与 packages/core/scripts/gen-*,见 scripts/README.md。)\n *\n *\n * 命令:\n * check <file.fai.js> — dryRun:parse + schema + 引用预检\n * run <file.fai.js> --out <file> — 执行并导出 STL/STEP\n * view <file.fai.js> --out <x.svg> — 执行并投影输出视图 SVG(三视图/等轴测)\n *\n * 选项:\n * --mode <auto|brep|mesh> — 执行模式(默认 auto;view 需要 BREP 路径)\n * --assets <dir> — 资产目录\n * --fonts <dir> — 额外字体目录\n * --part <name> — (view) 指定投影的 shape 变量名;缺省按终端自动选择\n * --view <front|back|top|bottom|left|right|iso|\"x,y,z\">\n * — (view) 单视图方向(默认 front)\n * --sheet <front,top,right,iso> — (view) 多视图图纸(projectSheet;与 --view 互斥)\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { resolve, extname } from 'node:path'\nimport { createRuntime } from '../cad-runtime/runtime'\nimport type { StdlibNamespace } from '../runtime-state'\nimport type { ExecutionMode, HostPorts, LibLoader } from '../cad-runtime/ports'\nimport { createNodePorts } from './index'\nimport { createFsProjectLoader, findProjectRoot, projectKeyOf } from './fs-project-loader'\nimport { buildStlBufferFromMesh } from '../brep/export/stl'\nimport { exportStepFromSolid, exportStepFromSolids, type StepExportEntry } from '../brep/export/step'\nimport { exportStep } from '../occt-kernel/highLevelApi'\nimport { registerOcctBrepEngine } from '../brep/engine/adapters/occt'\nimport type { Shape } from '../mesh/types'\nimport type { CompoundShape } from '../shape'\nimport { ensureSlot } from '../shape'\nimport { brepOf } from '../shape'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { asPartName } from '../identity'\nimport { projectView, projectSheet } from '../api/view'\nimport type { ViewSpec } from '../api/view/view-camera'\n\n// ── P 四(4.4):Node CLI 自动装载(D3-Node,§9.4)──\n// 脚本 import 的第三方库按 specifier 动态解析,host 不再写死任何包清单:\n// - scoped 包名(`@faicad/...`)直接动态 import;\n// - 短名(如 `gear-lib-demo`)先归一为 scoped 全名再装载(避免误装同名陌生人包)。\n// 包未安装 → 动态 import 抛 ERR_MODULE_NOT_FOUND,由 runtime 报明确装载失败信息。\n/** scoped 包名前缀:CLI 允许动态装载的库范围。 */\nconst CLI_SCOPED_PREFIX = '@faicad/'\n/** 已登记短名 → scoped 全名归一表(仅收录 `@faicad/` 范围内的库,防同名陌生人包)。 */\nconst CLI_SHORT_NAMES: Record<string, string> = {\n 'gear-lib-demo': '@faicad/gear-lib-demo',\n 'sheetmetal': '@faicad/sheetmetal',\n 'cq-compat': '@faicad/cq-compat',\n 'fai-cq-gears': '@faicad/fai-cq-gears',\n 'fai-cq-warehouse': '@faicad/fai-cq-warehouse',\n}\n\n/**\n * 读库 package.json 的 `faijs.autoLift` 字段(D3-autoLift 外置,§9.4):\n * 逐库 autoLift 约定从 host 写死改为由各库自身 package.json 声明,loader 此处读取。\n * 未声明 → 返回 undefined(回落到 runtime 的推断式 `!hasDualOp(ns)`);\n * 声明为布尔 → 直接采用(如 cq-compat 声明 false,因其函数以 faijs Shape 为受众,\n * 被 compat 边界整体提升会破坏内部借面逻辑)。\n */\nconst requireNode = createRequire(import.meta.url)\nfunction readLibAutoLift(pkg: string): boolean | undefined {\n try {\n const pjPath = requireNode.resolve(`${pkg}/package.json`)\n const pj = JSON.parse(readFileSync(pjPath, 'utf8')) as { faijs?: { autoLift?: boolean } }\n const v = pj.faijs?.autoLift\n return typeof v === 'boolean' ? v : undefined\n } catch {\n return undefined\n }\n}\n\n/** specifier → scoped 全名归一:scoped 名原样,已登记短名映射,其余原样交 import 解析。 */\nfunction normalizeCliSpecifier(name: string): string {\n return CLI_SHORT_NAMES[name] ?? name\n}\n\nconst cliPortsLibLoader: LibLoader = {\n loadLib: async (name) => {\n const pkg = normalizeCliSpecifier(name)\n if (!pkg.startsWith(CLI_SCOPED_PREFIX)) {\n throw new Error(`package \"${name}\" is not a scoped @faicad/ library`)\n }\n return (await import(pkg)) as StdlibNamespace\n },\n listLibs: () => [...Object.keys(CLI_SHORT_NAMES), '@faicad/'],\n // 默认不提升(与历史 CLI 行为一致);各库用 package.json \"faijs.autoLift\" 逐库覆盖。\n options: {\n autoLift: false,\n autoLiftFor: (name) => {\n const pkg = normalizeCliSpecifier(name)\n return pkg.startsWith(CLI_SCOPED_PREFIX) ? readLibAutoLift(pkg) : undefined\n },\n },\n}\n\n/** 注入 libLoader 到 node ports(CLI 宿主白名单装载)。 */\nfunction withCliLibLoader(ports: HostPorts): HostPorts {\n return { ...ports, libLoader: cliPortsLibLoader }\n}\n\n/**\n * 注入 projectLoader 到 node ports(多文件 §4.5)。\n *\n * 项目根缺省由 `findProjectRoot` 从入口文件向上找最近的 `package.json`;\n * 宿主可用 `--project-root` 覆盖。未提供根(不应发生)时不注入,单文件行为不变。\n */\nfunction withCliProjectLoader(ports: HostPorts, root: string | undefined): HostPorts {\n if (!root) return ports\n return { ...ports, projectLoader: createFsProjectLoader(root) }\n}\n\n/** Options accepted by the `check` command. */\nexport interface CliCheckOptions {\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n}\n\n/** Options accepted by the `run` command. */\nexport interface CliRunOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad — the CLI entry faijs-cli.ts passes createInternalStdlib; core does not assemble it by default). */\n libs?: Record<string, StdlibNamespace>\n /**\n * 项目根(多文件 §4.5):相对 import 的解析基准,moduleKey = 相对它的路径。\n * 缺省由入口文件向上找最近的 package.json。\n */\n projectRoot?: string\n}\n\n/** Result of the `check` (dry-run validation) command. */\nexport interface CliCheckResult {\n /** Whether the validation passed. */\n ok: boolean\n /** Validation errors found, one per stage. */\n errors: Array<{ stage: string; message: string; line?: number; stmtId?: string }>\n /** Non-fatal warnings reported during validation. */\n warnings: string[]\n /** Script-level summary when the script parsed successfully. */\n script?: { statements: number; callees: string[] }\n}\n\n/** Result of the `run` (execute and export) command. */\nexport interface CliRunResult {\n /** Whether execution and export succeeded. */\n ok: boolean\n /** The written output file path. */\n outputFile?: string\n /** The written output format ('stl' | 'step'). */\n outputFormat?: string\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/** Options accepted by the `view` command. */\nexport interface CliViewOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). view 需要 BREP 路径(mesh-only 无投影)。 */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad). */\n libs?: Record<string, StdlibNamespace>\n /** Project root for relative .fai.js imports. */\n projectRoot?: string\n /** Shape variable name to project; default resolves terminals like `run`. */\n part?: string\n /** Single view direction (default 'front'); mutually exclusive with sheet. */\n view?: ViewSpec\n /** Multi-view sheet list (projectSheet); mutually exclusive with view. */\n sheet?: ViewSpec[]\n}\n\n/** Result of the `view` (execute and project SVG) command. */\nexport interface CliViewResult {\n /** Whether execution and projection succeeded. */\n ok: boolean\n /** The written SVG file path(s). */\n outputFiles?: string[]\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/**\n * Execute the `check` command: dry-run validate a .fai.js file.\n *\n * @param filePath - path to the .fai.js file to validate\n * @param _opts - optional CLI check options (assets and fonts directories)\n * @returns the check result with any validation errors\n */\nexport function cliCheck(filePath: string, _opts?: CliCheckOptions): CliCheckResult {\n const code = readFileSync(filePath, 'utf-8')\n const ports = withCliLibLoader(createNodePorts({\n assetsDir: _opts?.assetsDir,\n fontsDir: _opts?.fontsDir,\n }))\n const runtime = createRuntime(ports)\n const result = runtime.check(code)\n return {\n ok: result.ok,\n errors: result.errors.map((e) => ({\n stage: e.stage,\n message: e.message,\n line: e.line,\n stmtId: e.stmtId,\n })),\n warnings: result.warnings,\n script: result.script,\n }\n}\n\n/**\n * Execute the `run` command: execute a .fai.js file and export STL/STEP.\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output file path for the exported result (extension determines format)\n * @param opts - optional run options (mode, assets/fonts directories, injected libs)\n * @returns the run result describing success or failure\n */\nexport async function cliRun(\n filePath: string,\n outPath: string,\n opts?: CliRunOptions,\n): Promise<CliRunResult> {\n const code = readFileSync(filePath, 'utf-8')\n // 多文件(§4.5):项目根缺省向上找 package.json;入口自身也有 key(相对根的路径),\n // 否则入口在子目录时它的 `./parts/x.fai.js` 会以根为基准解析而错位。\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT and bind the vendored brepjs kernel registry (D10) so that\n // cq-compat parts (which project ops through compatFn) run end-to-end under\n // the CLI. registerOcctBrepEngine is idempotent and itself boots initOcctWasm.\n await registerOcctBrepEngine()\n\n // Create runtime with node ports\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n // Part 1.4:cad 经 registerLib 声明 packageName(脚本可 `import * as cad from\n // '@faicad/faijs'`,check ①.5 据此校验 specifier——不 declare 则 import 被拒)。\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n // Execute(T5 后:direct 路径,源码文本直通执行)\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n // Determine output format from extension\n const ext = extname(outPath).toLowerCase().slice(1)\n const terminals = execResult.terminals ?? []\n\n if (terminals.length === 0) {\n // No terminals — use last output\n const outputNames = [...execResult.outputs.keys()]\n if (outputNames.length === 0) {\n return { ok: false, error: 'No statements to export' }\n }\n const lastPartName = outputNames[outputNames.length - 1]\n const shape = execResult.outputs.get(asPartName(lastPartName))\n if (!shape) {\n return { ok: false, error: `No output for part \"${lastPartName}\"` }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(lastPartName))\n return writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n }\n\n // Single terminal\n if (terminals.length === 1) {\n const terminal = terminals[0]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) {\n return { ok: false, error: `No output for terminal \"${terminal.id}\"` }\n }\n // Assembly (compound with behavior) → expand members with colors\n if (!('positions' in shape) || !('indices' in shape)) {\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult)\n if (asmResult) return asmResult\n }\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n return writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n }\n\n // Multiple terminals — write each to a separate file\n // First, check if any terminal is a compound (assembly) — export it as a single STEP\n for (let i = 0; i < terminals.length; i++) {\n const terminal = terminals[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) {\n // Compound terminal — try assembly STEP export\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult)\n if (asmResult) return asmResult\n }\n }\n // Then export non-compound terminals\n for (let i = 0; i < terminals.length; i++) {\n const terminal = terminals[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) continue // skip compounds\n\n const name = terminal.meta?.name ?? terminal.id\n const sep = outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'\n const terminalOutPath = `${outPath}${sep}${i}_${name}.${ext}`\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n const result = writeOutput(terminalOutPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n if (!result.ok) return result\n }\n\n return { ok: true, outputFormat: ext }\n}\n\n/**\n * 解析 `--view` 参数:三数字逗号串 → 方向对象(\"1,-1,1\" → { dir: [1,-1,1] }),\n * 否则按视图名字符串处理(未知名由 viewCamera 抛错)。\n */\nfunction parseViewArg(v: string): ViewSpec {\n const parts = v.split(',').map((s) => s.trim())\n if (parts.length === 3) {\n const nums = parts.map(Number)\n if (nums.every((n) => Number.isFinite(n))) return { dir: nums as [number, number, number] }\n }\n // 视图名字符串('front'|'iso'|…):类型上 CLI 接受任意名称,未知名由 viewCamera 抛错。\n return v as ViewSpec\n}\n\n/**\n * 选出待投影的 shape 列表(`--part` 指定,或按终端自动选择,与 `run` 一致):\n * 只保留带 mesh 的 shape(compound/assembly 无 mesh,无法投影,跳过)。\n */\nfunction selectViewShapes(\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n terminals?: Array<{ id: unknown; meta?: { name?: string } }>\n },\n part?: string,\n): Array<{ name: string; shape: Shape }> {\n const outputs = execResult.outputs\n const viewable = (s: Shape | CompoundShape | undefined): s is Shape =>\n !!s && 'positions' in s && 'indices' in s\n\n if (part) {\n const shape = outputs.get(asPartName(part)) ?? outputs.get(part)\n if (viewable(shape)) return [{ name: part, shape }]\n return []\n }\n\n const terminals = execResult.terminals ?? []\n const ids: unknown[] = terminals.length > 0 ? terminals.map((t) => t.id) : [...outputs.keys()]\n const out: Array<{ name: string; shape: Shape }> = []\n for (const id of ids) {\n const shape = outputs.get(id) ?? outputs.get(asPartName(String(id)))\n if (viewable(shape)) {\n const metaName = terminals.find((t) => t.id === id)?.meta?.name\n out.push({ name: metaName ?? String(id), shape })\n }\n }\n return out\n}\n\n/**\n * Execute the `view` command: execute a .fai.js file and write view SVG(s).\n *\n * 投影在宿主侧进行:脚本只需建模(shape 变量或终端),CLI 调 projectView(--view,\n * 缺省 front)或 projectSheet(--sheet)把 SVG 字符串写盘。view 需要 BREP 路径——\n * mesh-only 的 shape 无 brep 槽,projectView 抛 E_BREP_ONLY_INPUT(提示 --mode brep/auto)。\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output SVG path (multiple shapes get `<out>_<i>_<name>.svg` suffixes)\n * @param opts - optional view options (mode, part, view/sheet, assets/fonts dirs, libs)\n * @returns the view result describing success or failure\n */\nexport async function cliView(\n filePath: string,\n outPath: string,\n opts?: CliViewOptions,\n): Promise<CliViewResult> {\n const code = readFileSync(filePath, 'utf-8')\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT(投影 HLR 依赖 brep 内核)。registerOcctBrepEngine is\n // idempotent and itself boots initOcctWasm, and also binds the vendored\n // brepjs kernel registry (D10) — same boot path as cliRun above.\n await registerOcctBrepEngine()\n\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n const shapes = selectViewShapes(execResult, opts?.part)\n if (shapes.length === 0) {\n return {\n ok: false,\n error: opts?.part\n ? `No output for part \"${opts.part}\"`\n : 'No viewable (mesh-bearing) shapes to project',\n infos: execResult.infos,\n }\n }\n\n const outFiles: string[] = []\n const single = shapes.length === 1\n for (let i = 0; i < shapes.length; i++) {\n const { name, shape } = shapes[i]\n const target = single\n ? outPath\n : `${outPath}${outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'}${i}_${name}.svg`\n try {\n const svg = opts?.sheet\n ? projectSheet(shape, opts.sheet)\n : projectView(shape, opts?.view ?? 'front')\n writeFileSync(target, svg, 'utf-8')\n outFiles.push(target)\n } catch (e) {\n return {\n ok: false,\n error: `Projection failed for \"${name}\": ${(e as Error).message}`,\n infos: execResult.infos,\n }\n }\n }\n return { ok: true, outputFiles: outFiles, infos: execResult.infos }\n}\n\n/**\n * 写出输出文件。\n *\n * 按零件类型分别处理 STEP 导出:\n * - 有 BREP solid → 精确 STEP(exportStepFromSolid,ADVANCED_FACE)\n * - 无 BREP solid → 三角化 STEP(exportStep/meshesToStep,faceted)\n * - STL:无论是否 BREP,都取 mesh Shape 导出\n *\n * keep-syntax §5.1:outputs 现含 compound(group/assembly 产物,无 mesh);\n * compound 无法导出,给出明确错误(此前\"不在 outputs 中\"是静默失败)。\n */\nfunction writeOutput(\n outPath: string,\n ext: string,\n shape: Shape | CompoundShape,\n brepSolid?: { solid: BrepHandle; kernel: BrepEngineApi },\n): CliRunResult {\n if (!('positions' in shape) || !('indices' in shape)) {\n return {\n ok: false,\n error: `Output \"${outPath}\" is a compound (group/assembly) with no exportable mesh; export a member shape instead`,\n }\n }\n if (ext === 'stl') {\n const buffer = buildStlBufferFromMesh(shape.positions, shape.indices)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'stl' }\n }\n\n if (ext === 'step' || ext === 'stp') {\n if (brepSolid) {\n // 有 BREP solid → 精确 STEP\n const buffer = exportStepFromSolid(brepSolid.solid, brepSolid.kernel)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n }\n // 无 BREP solid → 三角化 STEP(mesh 也可以导出 STEP,只是三角化的)\n const stepContent = exportStep(shape)\n writeFileSync(outPath, Buffer.from(stepContent, 'utf-8'))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n }\n\n return { ok: false, error: `Unsupported output format: .${ext} (supported: .stl, .step)` }\n}\n\n/**\n * Export an assembly (compound with AssemblyBehavior) as a multi-entity STEP\n * file, preserving member names and colors (from behavior.memberColors).\n *\n * Returns null if the compound has no assembly behavior (falls through to\n * regular writeOutput), or a CliRunResult on success/failure.\n */\nfunction writeAssemblyStep(\n outPath: string,\n ext: string,\n compound: CompoundShape,\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n brepSolids?: Map<unknown, { solid: BrepHandle; kernel: BrepEngineApi }>\n },\n): CliRunResult | null {\n if (ext !== 'step' && ext !== 'stp') return null\n const slot = ensureSlot(compound)\n const behavior = slot.behavior as\n | { memberNames?: string[]; memberColors?: Record<string, [number, number, number]> }\n | undefined\n\n // Find a kernel and collect all exportable solids\n let kernel: BrepEngineApi | null = null\n const entries: StepExportEntry[] = []\n\n // Preferred path: use behavior.memberNames to match colors.\n // Member name lookup tries (1) the explicit member name, then (2) the kept\n // script-variable name of the compound's i-th child — cq-compat's\n // buildAssembly passes CadQuery-style part names (\"axk\") while the shapes\n // are registered under their .fai.js variable names (\"shape_axk\").\n if (behavior?.memberNames && behavior.memberNames.length > 0) {\n // Member Shape list (same order as memberNames) — when a member name\n // misses in brepSolids (e.g. cq libs register short names like 'axk' while\n // the statement variable is 'shape_axk'), resolve the member shape by index\n // and extract its BREP solid, keeping the member name and color.\n const children = (compound as { children?: Shape[] }).children ?? []\n for (let i = 0; i < behavior.memberNames.length; i++) {\n const memberName = behavior.memberNames[i]\n // Preferred: read the member's LIVE identity slot (brepOf) — assembly\n // transforms are baked into slot.solid by the executor's\n // applyPendingAssemblyTransforms AFTER this statement, so the brepSolids\n // snapshot (registered at member creation) may hold the PRE-transform\n // handle. GOTCHA: don't reorder — brepSolids entries are stale for\n // transformed members.\n const child = children[i]\n const liveSolid = child ? (brepOf(child) as BrepHandle | undefined) : undefined\n if (liveSolid) {\n if (!kernel) kernel = execResult.brepSolids?.values().next().value?.kernel ?? null\n if (kernel) {\n entries.push({\n solid: liveSolid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n continue\n }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(memberName))\n if (solidEntry) {\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n }\n }\n }\n\n // Fallback: export all brepSolids (covers compounds where memberNames wasn't propagated)\n if (entries.length === 0 && execResult.brepSolids) {\n for (const [key, solidEntry] of execResult.brepSolids) {\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: typeof key === 'string' ? key : `part_${entries.length}`,\n })\n }\n }\n\n if (!kernel || entries.length === 0) {\n return null // Let writeOutput handle the error\n }\n\n const buffer = exportStepFromSolids(kernel, entries)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n}\n\n/**\n * Parse command-line arguments.\n *\n * @param argv - the raw process argument list (index 0 = node, 1 = script)\n * @returns the parsed command, file, and option values (command is null when unusable)\n */\nexport function parseArgs(argv: string[]): {\n command: 'check' | 'run' | 'view' | null\n file?: string\n out?: string\n mode?: ExecutionMode\n assetsDir?: string\n fontsDir?: string\n projectRoot?: string\n view?: string\n sheet?: string\n part?: string\n} {\n const args = argv.slice(2) // skip node + script\n if (args.length === 0) return { command: null }\n\n const command = args[0] as 'check' | 'run' | 'view' | null\n if (command !== 'check' && command !== 'run' && command !== 'view') return { command: null }\n\n let file: string | undefined\n let out: string | undefined\n let mode: ExecutionMode | undefined\n let assetsDir: string | undefined\n let fontsDir: string | undefined\n let projectRoot: string | undefined\n let view: string | undefined\n let sheet: string | undefined\n let part: string | undefined\n\n for (let i = 1; i < args.length; i++) {\n const arg = args[i]\n if (arg === '--out' || arg === '-o') {\n out = args[++i]\n } else if (arg === '--mode' || arg === '-m') {\n const m = args[++i] as ExecutionMode\n if (m === 'auto' || m === 'brep' || m === 'mesh') {\n mode = m\n }\n } else if (arg === '--assets') {\n assetsDir = args[++i]\n } else if (arg === '--fonts') {\n fontsDir = args[++i]\n } else if (arg === '--project-root') {\n projectRoot = args[++i]\n } else if (arg === '--view') {\n view = args[++i]\n } else if (arg === '--sheet') {\n sheet = args[++i]\n } else if (arg === '--part') {\n part = args[++i]\n } else if (!file && !arg.startsWith('-')) {\n file = arg\n }\n }\n\n return { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part }\n}\n\n/**\n * CLI main entry point (called by scripts/faijs-cli.ts).\n *\n * @param argv - the raw process argument list\n * @param libs - host-injected library namespace (includes cad — faijs-cli.ts passes createInternalStdlib; core does not assemble it by default)\n * @returns the process exit code (0 on success, non-zero on failure)\n */\nexport async function cliMain(argv: string[], libs?: Record<string, StdlibNamespace>): Promise<number> {\n const { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part } = parseArgs(argv)\n\n if (!command) {\n process.stderr.write('Usage: faijs-cli <check|run|view> <file.fai.js> [options]\\n')\n process.stderr.write(' check <file> DryRun validation\\n')\n process.stderr.write(' run <file> --out <file> Execute and export STL/STEP\\n')\n process.stderr.write(' view <file> --out <svg> Execute and project view SVG (三视图/等轴测)\\n')\n process.stderr.write(' --mode <auto|brep|mesh> Execution mode (view 需要 BREP 路径)\\n')\n process.stderr.write(' --assets <dir> Asset directory\\n')\n process.stderr.write(' --fonts <dir> Extra fonts directory\\n')\n process.stderr.write(' --project-root <dir> Project root for relative .fai.js imports\\n')\n process.stderr.write(' --part <name> (view) shape variable to project (default: terminals)\\n')\n process.stderr.write(' --view <dir> (view) single view: front|back|top|bottom|left|right|iso|\"x,y,z\" (default front)\\n')\n process.stderr.write(' --sheet <a,b,c> (view) multi-view sheet: front,top,right,iso (mutually exclusive with --view)\\n')\n return 1\n }\n\n if (!file) {\n process.stderr.write(`Error: missing file argument for \"${command}\"\\n`)\n return 1\n }\n\n const filePath = resolve(file)\n\n if (command === 'check') {\n const result = cliCheck(filePath, { assetsDir, fontsDir })\n if (result.ok) {\n process.stdout.write(`✓ ${filePath}: OK\\n`)\n if (result.script) {\n process.stdout.write(` statements: ${result.script.statements}\\n`)\n process.stdout.write(` callees: ${result.script.callees.join(', ')}\\n`)\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.errors.length} error(s)\\n`)\n for (const err of result.errors) {\n const loc = err.line ? ` (line ${err.line})` : err.stmtId ? ` (stmt: ${err.stmtId})` : ''\n process.stderr.write(` [${err.stage}] ${err.message}${loc}\\n`)\n }\n return 1\n }\n }\n\n if (command === 'run') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"run\" command\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const result = await cliRun(filePath, outPath, { mode, assetsDir, fontsDir, projectRoot, libs })\n\n if (result.ok) {\n process.stdout.write(`✓ ${filePath} → ${outPath} (${result.outputFormat})\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n if (command === 'view') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"view\" command\\n')\n return 1\n }\n if (view && sheet) {\n process.stderr.write('Error: --view and --sheet are mutually exclusive\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const viewSpec = view ? parseViewArg(view) : undefined\n const sheetSpec = sheet\n ? (sheet\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean) as ViewSpec[])\n : undefined\n const result = await cliView(filePath, outPath, {\n mode,\n assetsDir,\n fontsDir,\n projectRoot,\n libs,\n part,\n view: viewSpec,\n sheet: sheetSpec,\n })\n\n if (result.ok) {\n for (const f of result.outputFiles ?? []) {\n process.stdout.write(`✓ ${filePath} → ${f} (svg)\\n`)\n }\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n return 1\n}\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * faijs-cli — CLI 逻辑(可导入、可测试)。第三方调用入口:packages/core/scripts/faijs-cli.ts。\n * (仓库自用 doc/ci/开发脚本在根 scripts/ 与 packages/core/scripts/gen-*,见 scripts/README.md。)\n *\n *\n * 命令:\n * check <file.fai.js> — dryRun:parse + schema + 引用预检\n * run <file.fai.js> --out <file> — 执行并导出 STL/STEP\n * view <file.fai.js> --out <x.svg> — 执行并投影输出视图 SVG(三视图/等轴测)\n *\n * 选项:\n * --mode <auto|brep|mesh> — 执行模式(默认 auto;view 需要 BREP 路径)\n * --assets <dir> — 资产目录\n * --fonts <dir> — 额外字体目录\n * --part <name> — (view) 指定投影的 shape 变量名;缺省按终端自动选择\n * --view <front|back|top|bottom|left|right|iso|\"x,y,z\">\n * — (view) 单视图方向(默认 front)\n * --sheet <front,top,right,iso> — (view) 多视图图纸(projectSheet;与 --view 互斥)\n */\n\nimport { readFileSync, writeFileSync, existsSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { resolve, extname, dirname, join } from 'node:path'\nimport { createRuntime } from '../cad-runtime/runtime'\nimport type { CadRuntime } from '../cad-runtime/runtime'\nimport type { StdlibNamespace } from '../runtime-state'\nimport type { ExecutionMode, HostPorts, LibLoader } from '../cad-runtime/ports'\nimport { createNodePorts } from './index'\nimport { createFsProjectLoader, findProjectRoot, projectKeyOf } from './fs-project-loader'\nimport { buildStlBufferFromMesh } from '../brep/export/stl'\nimport { exportStepFromSolid, exportStepFromSolids, type StepExportEntry } from '../brep/export/step'\nimport { exportStep } from '../occt-kernel/highLevelApi'\nimport { registerOcctBrepEngine } from '../brep/engine/adapters/occt'\nimport type { Shape } from '../mesh/types'\nimport type { CompoundShape } from '../shape'\nimport { ensureSlot } from '../shape'\nimport { brepOf } from '../shape'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { asPartName } from '../identity'\nimport { projectView, projectSheet } from '../api/view'\nimport type { ViewSpec } from '../api/view/view-camera'\n\n// ── P 四(4.4):Node CLI 自动装载(D3-Node,§9.4)──\n// 脚本 import 的第三方库按 specifier 动态解析,host 不再写死任何包清单:\n// - scoped 包名(`@faicad/...`)直接动态 import;\n// - 短名(如 `sheetmetal`)先归一为 scoped 全名再装载(避免误装同名陌生人包)。\n// 包未安装 → 动态 import 抛 ERR_MODULE_NOT_FOUND,由 runtime 报明确装载失败信息。\n/** scoped 包名前缀:CLI 允许动态装载的库范围。 */\nconst CLI_SCOPED_PREFIX = '@faicad/'\n/** 已登记短名 → scoped 全名归一表(仅收录 `@faicad/` 范围内的库,防同名陌生人包)。 */\nconst CLI_SHORT_NAMES: Record<string, string> = {\n 'sheetmetal': '@faicad/sheetmetal',\n 'cq-compat': '@faicad/cq-compat',\n 'fai-cq-gears': '@faicad/fai-cq-gears',\n 'fai-cq-warehouse': '@faicad/fai-cq-warehouse',\n}\n\n/**\n * 读库 package.json 的 `faijs.autoLift` 字段(D3-autoLift 外置,§9.4):\n * 逐库 autoLift 约定从 host 写死改为由各库自身 package.json 声明,loader 此处读取。\n * 未声明 → 返回 undefined(回落到 runtime 的推断式 `!hasDualOp(ns)`);\n * 声明为布尔 → 直接采用(如 cq-compat 声明 false,因其函数以 faijs Shape 为受众,\n * 被 compat 边界整体提升会破坏内部借面逻辑)。\n */\nconst requireNode = createRequire(import.meta.url)\nfunction readLibAutoLift(pkg: string): boolean | undefined {\n try {\n const pjPath = requireNode.resolve(`${pkg}/package.json`)\n const pj = JSON.parse(readFileSync(pjPath, 'utf8')) as { faijs?: { autoLift?: boolean } }\n const v = pj.faijs?.autoLift\n return typeof v === 'boolean' ? v : undefined\n } catch {\n return undefined\n }\n}\n\n/** specifier → scoped 全名归一:scoped 名原样,已登记短名映射,其余原样交 import 解析。 */\nfunction normalizeCliSpecifier(name: string): string {\n return CLI_SHORT_NAMES[name] ?? name\n}\n\nconst cliPortsLibLoader: LibLoader = {\n loadLib: async (name) => {\n const pkg = normalizeCliSpecifier(name)\n if (!pkg.startsWith(CLI_SCOPED_PREFIX)) {\n throw new Error(`package \"${name}\" is not a scoped @faicad/ library`)\n }\n return (await import(pkg)) as StdlibNamespace\n },\n listLibs: () => [...Object.keys(CLI_SHORT_NAMES), '@faicad/'],\n loadSource: async (name) => {\n const pkg = normalizeCliSpecifier(name)\n if (!pkg.startsWith(CLI_SCOPED_PREFIX)) return undefined\n try {\n const req = createRequire(import.meta.url)\n const pkgJsonPath = req.resolve(`${pkg}/package.json`)\n const pkgDir = dirname(pkgJsonPath)\n for (const p of [join(pkgDir, 'src', 'index.ts'), join(pkgDir, 'dist', 'index.js'), join(pkgDir, 'src', 'index.js')]) {\n if (existsSync(p)) return readFileSync(p, 'utf-8')\n }\n return undefined\n } catch {\n return undefined\n }\n },\n // 默认不提升(与历史 CLI 行为一致);各库用 package.json \"faijs.autoLift\" 逐库覆盖。\n options: {\n autoLift: false,\n autoLiftFor: (name) => {\n const pkg = normalizeCliSpecifier(name)\n return pkg.startsWith(CLI_SCOPED_PREFIX) ? readLibAutoLift(pkg) : undefined\n },\n },\n}\n\n/** 注入 libLoader 到 node ports(CLI 宿主白名单装载)。 */\nfunction withCliLibLoader(ports: HostPorts): HostPorts {\n return { ...ports, libLoader: cliPortsLibLoader }\n}\n\n/**\n * 注入 projectLoader 到 node ports(多文件 §4.5)。\n *\n * 项目根缺省由 `findProjectRoot` 从入口文件向上找最近的 `package.json`;\n * 宿主可用 `--project-root` 覆盖。未提供根(不应发生)时不注入,单文件行为不变。\n */\nfunction withCliProjectLoader(ports: HostPorts, root: string | undefined): HostPorts {\n if (!root) return ports\n return { ...ports, projectLoader: createFsProjectLoader(root) }\n}\n\n/** Options accepted by the `check` command. */\nexport interface CliCheckOptions {\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n}\n\n/** Options accepted by the `run` command. */\nexport interface CliRunOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad — the CLI entry faijs-cli.ts passes createInternalStdlib; core does not assemble it by default). */\n libs?: Record<string, StdlibNamespace>\n /**\n * 项目根(多文件 §4.5):相对 import 的解析基准,moduleKey = 相对它的路径。\n * 缺省由入口文件向上找最近的 package.json。\n */\n projectRoot?: string\n}\n\n/** Result of the `check` (dry-run validation) command. */\nexport interface CliCheckResult {\n /** Whether the validation passed. */\n ok: boolean\n /** Validation errors found, one per stage. */\n errors: Array<{ stage: string; message: string; line?: number; stmtId?: string }>\n /** Non-fatal warnings reported during validation. */\n warnings: string[]\n /** Script-level summary when the script parsed successfully. */\n script?: { statements: number; callees: string[] }\n}\n\n/** Result of the `run` (execute and export) command. */\nexport interface CliRunResult {\n /** Whether execution and export succeeded. */\n ok: boolean\n /** The written output file path. */\n outputFile?: string\n /** The written output format ('stl' | 'step'). */\n outputFormat?: string\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/** Options accepted by the `view` command. */\nexport interface CliViewOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). view 需要 BREP 路径(mesh-only 无投影)。 */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad). */\n libs?: Record<string, StdlibNamespace>\n /** Project root for relative .fai.js imports. */\n projectRoot?: string\n /** Shape variable name to project; default resolves terminals like `run`. */\n part?: string\n /** Single view direction (default 'front'); mutually exclusive with sheet. */\n view?: ViewSpec\n /** Multi-view sheet list (projectSheet); mutually exclusive with view. */\n sheet?: ViewSpec[]\n}\n\n/** Result of the `view` (execute and project SVG) command. */\nexport interface CliViewResult {\n /** Whether execution and projection succeeded. */\n ok: boolean\n /** The written SVG file path(s). */\n outputFiles?: string[]\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/**\n * Execute the `check` command: dry-run validate a .fai.js file.\n *\n * @param filePath - path to the .fai.js file to validate\n * @param _opts - optional CLI check options (assets and fonts directories)\n * @returns the check result with any validation errors\n */\nexport function cliCheck(filePath: string, _opts?: CliCheckOptions): CliCheckResult {\n const code = readFileSync(filePath, 'utf-8')\n const ports = withCliLibLoader(createNodePorts({\n assetsDir: _opts?.assetsDir,\n fontsDir: _opts?.fontsDir,\n }))\n const runtime = createRuntime(ports)\n const result = runtime.check(code)\n return {\n ok: result.ok,\n errors: result.errors.map((e) => ({\n stage: e.stage,\n message: e.message,\n line: e.line,\n stmtId: e.stmtId,\n })),\n warnings: result.warnings,\n script: result.script,\n }\n}\n\n/**\n * Execute the `run` command: execute a .fai.js file and export STL/STEP.\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output file path for the exported result (extension determines format)\n * @param opts - optional run options (mode, assets/fonts directories, injected libs)\n * @returns the run result describing success or failure\n */\nexport async function cliRun(\n filePath: string,\n outPath: string,\n opts?: CliRunOptions,\n): Promise<CliRunResult> {\n const code = readFileSync(filePath, 'utf-8')\n // 多文件(§4.5):项目根缺省向上找 package.json;入口自身也有 key(相对根的路径),\n // 否则入口在子目录时它的 `./parts/x.fai.js` 会以根为基准解析而错位。\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT and bind the vendored brepjs kernel registry (D10) so that\n // cq-compat parts (which project ops through compatFn) run end-to-end under\n // the CLI. registerOcctBrepEngine is idempotent and itself boots initOcctWasm.\n await registerOcctBrepEngine()\n\n // Create runtime with node ports\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n // Part 1.4:cad 经 registerLib 声明 packageName(脚本可 `import * as cad from\n // '@faicad/faijs'`,check ①.5 据此校验 specifier——不 declare 则 import 被拒)。\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n // Execute(T5 后:direct 路径,源码文本直通执行)\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n // Determine output format from extension\n const ext = extname(outPath).toLowerCase().slice(1)\n const terminals = execResult.terminals ?? []\n\n // E1 (H12): export-side failures must surface as a structured result, not an\n // exception — the census and batch driver treat a throw as a process crash,\n // while `{ ok: false, error }` keeps it a per-file, classifiable failure.\n try {\n return await exportExecutionResult(outPath, ext, execResult, terminals)\n } catch (e) {\n return {\n ok: false,\n error: `Export failed: ${String((e as Error)?.message ?? e)}`,\n infos: execResult.infos,\n }\n }\n}\n\n/** Export an executed result to `outPath` (shared body of cliRun's export path). */\nasync function exportExecutionResult(\n outPath: string,\n ext: string,\n execResult: Awaited<ReturnType<CadRuntime['execute']>>,\n terminals: NonNullable<Awaited<ReturnType<CadRuntime['execute']>>['terminals']>,\n): Promise<{ ok: boolean; error?: string; outputFile?: string; outputFormat?: string; infos?: string[] }> {\n if (terminals.length === 0) {\n // No terminals — use last output\n const outputNames = [...execResult.outputs.keys()]\n if (outputNames.length === 0) {\n return { ok: false, error: 'No statements to export' }\n }\n const lastPartName = outputNames[outputNames.length - 1]\n const shape = execResult.outputs.get(asPartName(lastPartName))\n if (!shape) {\n return { ok: false, error: `No output for part \"${lastPartName}\"` }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(lastPartName))\n return writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n }\n\n // Single terminal\n if (terminals.length === 1) {\n const terminal = terminals[0]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) {\n return { ok: false, error: `No output for terminal \"${terminal.id}\"` }\n }\n // Assembly (compound with behavior) → expand members with colors\n if (!('positions' in shape) || !('indices' in shape)) {\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult)\n if (asmResult) return asmResult\n }\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n return writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n }\n\n // Multiple terminals — write each to a separate file\n // First, check if any terminal is a compound (assembly) — export it as a single STEP\n for (let i = 0; i < terminals.length; i++) {\n const terminal = terminals[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) {\n // Compound terminal — try assembly STEP export\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult)\n if (asmResult) return asmResult\n }\n }\n // Then export non-compound terminals\n for (let i = 0; i < terminals.length; i++) {\n const terminal = terminals[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) continue // skip compounds\n\n const name = terminal.meta?.name ?? terminal.id\n const sep = outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'\n const terminalOutPath = `${outPath}${sep}${i}_${name}.${ext}`\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n const result = writeOutput(terminalOutPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n if (!result.ok) return result\n }\n\n return { ok: true, outputFormat: ext }\n}\n\n/**\n * 解析 `--view` 参数:三数字逗号串 → 方向对象(\"1,-1,1\" → { dir: [1,-1,1] }),\n * 否则按视图名字符串处理(未知名由 viewCamera 抛错)。\n */\nfunction parseViewArg(v: string): ViewSpec {\n const parts = v.split(',').map((s) => s.trim())\n if (parts.length === 3) {\n const nums = parts.map(Number)\n if (nums.every((n) => Number.isFinite(n))) return { dir: nums as [number, number, number] }\n }\n // 视图名字符串('front'|'iso'|…):类型上 CLI 接受任意名称,未知名由 viewCamera 抛错。\n return v as ViewSpec\n}\n\n/**\n * 选出待投影的 shape 列表(`--part` 指定,或按终端自动选择,与 `run` 一致):\n * 只保留带 mesh 的 shape(compound/assembly 无 mesh,无法投影,跳过)。\n */\nfunction selectViewShapes(\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n terminals?: Array<{ id: unknown; meta?: { name?: string } }>\n },\n part?: string,\n): Array<{ name: string; shape: Shape }> {\n const outputs = execResult.outputs\n const viewable = (s: Shape | CompoundShape | undefined): s is Shape =>\n !!s && 'positions' in s && 'indices' in s\n\n if (part) {\n const shape = outputs.get(asPartName(part)) ?? outputs.get(part)\n if (viewable(shape)) return [{ name: part, shape }]\n return []\n }\n\n const terminals = execResult.terminals ?? []\n const ids: unknown[] = terminals.length > 0 ? terminals.map((t) => t.id) : [...outputs.keys()]\n const out: Array<{ name: string; shape: Shape }> = []\n for (const id of ids) {\n const shape = outputs.get(id) ?? outputs.get(asPartName(String(id)))\n if (viewable(shape)) {\n const metaName = terminals.find((t) => t.id === id)?.meta?.name\n out.push({ name: metaName ?? String(id), shape })\n }\n }\n return out\n}\n\n/**\n * Execute the `view` command: execute a .fai.js file and write view SVG(s).\n *\n * 投影在宿主侧进行:脚本只需建模(shape 变量或终端),CLI 调 projectView(--view,\n * 缺省 front)或 projectSheet(--sheet)把 SVG 字符串写盘。view 需要 BREP 路径——\n * mesh-only 的 shape 无 brep 槽,projectView 抛 E_BREP_ONLY_INPUT(提示 --mode brep/auto)。\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output SVG path (multiple shapes get `<out>_<i>_<name>.svg` suffixes)\n * @param opts - optional view options (mode, part, view/sheet, assets/fonts dirs, libs)\n * @returns the view result describing success or failure\n */\nexport async function cliView(\n filePath: string,\n outPath: string,\n opts?: CliViewOptions,\n): Promise<CliViewResult> {\n const code = readFileSync(filePath, 'utf-8')\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT(投影 HLR 依赖 brep 内核)。registerOcctBrepEngine is\n // idempotent and itself boots initOcctWasm, and also binds the vendored\n // brepjs kernel registry (D10) — same boot path as cliRun above.\n await registerOcctBrepEngine()\n\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n const shapes = selectViewShapes(execResult, opts?.part)\n if (shapes.length === 0) {\n return {\n ok: false,\n error: opts?.part\n ? `No output for part \"${opts.part}\"`\n : 'No viewable (mesh-bearing) shapes to project',\n infos: execResult.infos,\n }\n }\n\n const outFiles: string[] = []\n const single = shapes.length === 1\n for (let i = 0; i < shapes.length; i++) {\n const { name, shape } = shapes[i]\n const target = single\n ? outPath\n : `${outPath}${outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'}${i}_${name}.svg`\n try {\n const svg = opts?.sheet\n ? projectSheet(shape, opts.sheet)\n : projectView(shape, opts?.view ?? 'front')\n writeFileSync(target, svg, 'utf-8')\n outFiles.push(target)\n } catch (e) {\n return {\n ok: false,\n error: `Projection failed for \"${name}\": ${(e as Error).message}`,\n infos: execResult.infos,\n }\n }\n }\n return { ok: true, outputFiles: outFiles, infos: execResult.infos }\n}\n\n/**\n * 写出输出文件。\n *\n * 按零件类型分别处理 STEP 导出:\n * - 有 BREP solid → 精确 STEP(exportStepFromSolid,ADVANCED_FACE)\n * - 无 BREP solid → 三角化 STEP(exportStep/meshesToStep,faceted)\n * - STL:无论是否 BREP,都取 mesh Shape 导出\n *\n * keep-syntax §5.1:outputs 现含 compound(group/assembly 产物,无 mesh);\n * compound 无法导出,给出明确错误(此前\"不在 outputs 中\"是静默失败)。\n */\nfunction writeOutput(\n outPath: string,\n ext: string,\n shape: Shape | CompoundShape,\n brepSolid?: { solid: BrepHandle; kernel: BrepEngineApi },\n): CliRunResult {\n if (!('positions' in shape) || !('indices' in shape)) {\n return {\n ok: false,\n error: `Output \"${outPath}\" is a compound (group/assembly) with no exportable mesh; export a member shape instead`,\n }\n }\n if (ext === 'stl') {\n const buffer = buildStlBufferFromMesh(shape.positions, shape.indices)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'stl' }\n }\n\n if (ext === 'step' || ext === 'stp') {\n if (brepSolid) {\n // 有 BREP solid → 精确 STEP\n const buffer = exportStepFromSolid(brepSolid.solid, brepSolid.kernel)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n }\n // 无 BREP solid → 三角化 STEP(mesh 也可以导出 STEP,只是三角化的)\n const stepContent = exportStep(shape)\n writeFileSync(outPath, Buffer.from(stepContent, 'utf-8'))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n }\n\n return { ok: false, error: `Unsupported output format: .${ext} (supported: .stl, .step)` }\n}\n\n/**\n * Export an assembly (compound with AssemblyBehavior) as a multi-entity STEP\n * file, preserving member names and colors (from behavior.memberColors).\n *\n * Returns null if the compound has no assembly behavior (falls through to\n * regular writeOutput), or a CliRunResult on success/failure.\n */\nfunction writeAssemblyStep(\n outPath: string,\n ext: string,\n compound: CompoundShape,\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n brepSolids?: Map<unknown, { solid: BrepHandle; kernel: BrepEngineApi }>\n },\n): CliRunResult | null {\n if (ext !== 'step' && ext !== 'stp') return null\n const slot = ensureSlot(compound)\n const behavior = slot.behavior as\n | { memberNames?: string[]; memberColors?: Record<string, [number, number, number]> }\n | undefined\n\n // Find a kernel and collect all exportable solids\n let kernel: BrepEngineApi | null = null\n const entries: StepExportEntry[] = []\n\n // Preferred path: use behavior.memberNames to match colors.\n // Member name lookup tries (1) the explicit member name, then (2) the kept\n // script-variable name of the compound's i-th child — cq-compat's\n // buildAssembly passes CadQuery-style part names (\"axk\") while the shapes\n // are registered under their .fai.js variable names (\"shape_axk\").\n if (behavior?.memberNames && behavior.memberNames.length > 0) {\n // Member Shape list (same order as memberNames) — when a member name\n // misses in brepSolids (e.g. cq libs register short names like 'axk' while\n // the statement variable is 'shape_axk'), resolve the member shape by index\n // and extract its BREP solid, keeping the member name and color.\n const children = (compound as { children?: Shape[] }).children ?? []\n for (let i = 0; i < behavior.memberNames.length; i++) {\n const memberName = behavior.memberNames[i]\n // Preferred: read the member's LIVE identity slot (brepOf) — assembly\n // transforms are baked into slot.solid by the executor's\n // applyPendingAssemblyTransforms AFTER this statement, so the brepSolids\n // snapshot (registered at member creation) may hold the PRE-transform\n // handle. GOTCHA: don't reorder — brepSolids entries are stale for\n // transformed members.\n const child = children[i]\n const liveSolid = child ? (brepOf(child) as BrepHandle | undefined) : undefined\n if (liveSolid) {\n if (!kernel) kernel = execResult.brepSolids?.values().next().value?.kernel ?? null\n if (kernel) {\n entries.push({\n solid: liveSolid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n continue\n }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(memberName))\n if (solidEntry) {\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n }\n }\n }\n\n // Fallback: export all brepSolids (covers compounds where memberNames wasn't propagated)\n if (entries.length === 0 && execResult.brepSolids) {\n for (const [key, solidEntry] of execResult.brepSolids) {\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: typeof key === 'string' ? key : `part_${entries.length}`,\n })\n }\n }\n\n if (!kernel || entries.length === 0) {\n return null // Let writeOutput handle the error\n }\n\n const buffer = exportStepFromSolids(kernel, entries)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n}\n\n/**\n * Parse command-line arguments.\n *\n * @param argv - the raw process argument list (index 0 = node, 1 = script)\n * @returns the parsed command, file, and option values (command is null when unusable)\n */\nexport function parseArgs(argv: string[]): {\n command: 'check' | 'run' | 'view' | null\n file?: string\n out?: string\n mode?: ExecutionMode\n assetsDir?: string\n fontsDir?: string\n projectRoot?: string\n view?: string\n sheet?: string\n part?: string\n} {\n const args = argv.slice(2) // skip node + script\n if (args.length === 0) return { command: null }\n\n const command = args[0] as 'check' | 'run' | 'view' | null\n if (command !== 'check' && command !== 'run' && command !== 'view') return { command: null }\n\n let file: string | undefined\n let out: string | undefined\n let mode: ExecutionMode | undefined\n let assetsDir: string | undefined\n let fontsDir: string | undefined\n let projectRoot: string | undefined\n let view: string | undefined\n let sheet: string | undefined\n let part: string | undefined\n\n for (let i = 1; i < args.length; i++) {\n const arg = args[i]\n if (arg === '--out' || arg === '-o') {\n out = args[++i]\n } else if (arg === '--mode' || arg === '-m') {\n const m = args[++i] as ExecutionMode\n if (m === 'auto' || m === 'brep' || m === 'mesh') {\n mode = m\n }\n } else if (arg === '--assets') {\n assetsDir = args[++i]\n } else if (arg === '--fonts') {\n fontsDir = args[++i]\n } else if (arg === '--project-root') {\n projectRoot = args[++i]\n } else if (arg === '--view') {\n view = args[++i]\n } else if (arg === '--sheet') {\n sheet = args[++i]\n } else if (arg === '--part') {\n part = args[++i]\n } else if (!file && !arg.startsWith('-')) {\n file = arg\n }\n }\n\n return { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part }\n}\n\n/**\n * CLI main entry point (called by scripts/faijs-cli.ts).\n *\n * @param argv - the raw process argument list\n * @param libs - host-injected library namespace (includes cad — faijs-cli.ts passes createInternalStdlib; core does not assemble it by default)\n * @returns the process exit code (0 on success, non-zero on failure)\n */\nexport async function cliMain(argv: string[], libs?: Record<string, StdlibNamespace>): Promise<number> {\n const { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part } = parseArgs(argv)\n\n if (!command) {\n process.stderr.write('Usage: faijs-cli <check|run|view> <file.fai.js> [options]\\n')\n process.stderr.write(' check <file> DryRun validation\\n')\n process.stderr.write(' run <file> --out <file> Execute and export STL/STEP\\n')\n process.stderr.write(' view <file> --out <svg> Execute and project view SVG (三视图/等轴测)\\n')\n process.stderr.write(' --mode <auto|brep|mesh> Execution mode (view 需要 BREP 路径)\\n')\n process.stderr.write(' --assets <dir> Asset directory\\n')\n process.stderr.write(' --fonts <dir> Extra fonts directory\\n')\n process.stderr.write(' --project-root <dir> Project root for relative .fai.js imports\\n')\n process.stderr.write(' --part <name> (view) shape variable to project (default: terminals)\\n')\n process.stderr.write(' --view <dir> (view) single view: front|back|top|bottom|left|right|iso|\"x,y,z\" (default front)\\n')\n process.stderr.write(' --sheet <a,b,c> (view) multi-view sheet: front,top,right,iso (mutually exclusive with --view)\\n')\n return 1\n }\n\n if (!file) {\n process.stderr.write(`Error: missing file argument for \"${command}\"\\n`)\n return 1\n }\n\n const filePath = resolve(file)\n\n if (command === 'check') {\n const result = cliCheck(filePath, { assetsDir, fontsDir })\n if (result.ok) {\n process.stdout.write(`✓ ${filePath}: OK\\n`)\n if (result.script) {\n process.stdout.write(` statements: ${result.script.statements}\\n`)\n process.stdout.write(` callees: ${result.script.callees.join(', ')}\\n`)\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.errors.length} error(s)\\n`)\n for (const err of result.errors) {\n const loc = err.line ? ` (line ${err.line})` : err.stmtId ? ` (stmt: ${err.stmtId})` : ''\n process.stderr.write(` [${err.stage}] ${err.message}${loc}\\n`)\n }\n return 1\n }\n }\n\n if (command === 'run') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"run\" command\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const result = await cliRun(filePath, outPath, { mode, assetsDir, fontsDir, projectRoot, libs })\n\n if (result.ok) {\n process.stdout.write(`✓ ${filePath} → ${outPath} (${result.outputFormat})\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n if (command === 'view') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"view\" command\\n')\n return 1\n }\n if (view && sheet) {\n process.stderr.write('Error: --view and --sheet are mutually exclusive\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const viewSpec = view ? parseViewArg(view) : undefined\n const sheetSpec = sheet\n ? (sheet\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean) as ViewSpec[])\n : undefined\n const result = await cliView(filePath, outPath, {\n mode,\n assetsDir,\n fontsDir,\n projectRoot,\n libs,\n part,\n view: viewSpec,\n sheet: sheetSpec,\n })\n\n if (result.ok) {\n for (const f of result.outputFiles ?? []) {\n process.stdout.write(`✓ ${filePath} → ${f} (svg)\\n`)\n }\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n return 1\n}\n"]}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * cjk-font — CJK character classification and system font loading.
3
+ *
4
+ * Zero-three module: the geometry half of the former `primitives/text/cjk.ts`
5
+ * (`createMixedTextGeometry`) consumers on the editor extension library, whose
6
+ * `cad.text` BREP path still needs the character test and the Local Font Access
7
+ * API loader. Keeping the font half here means the platform `cad.text` BREP path
8
+ * (and the CJK fallback it shares with the mesh path) no longer drags three's
9
+ * `Shape`/`ExtrudeGeometry` into the platform surface.
10
+ *
11
+ * Uses the Local Font Access API (window.queryLocalFonts) to load system CJK
12
+ * fonts; glyph path parsing lives in the consumer.
13
+ */
14
+ import * as opentype from 'opentype.js';
15
+ /**
16
+ * Check if a character is CJK (CJK Unified Ideographs + extensions).
17
+ *
18
+ * @param ch - the single character to test.
19
+ * @returns true when the character falls in a CJK code point range.
20
+ */
21
+ export declare function isCjkChar(ch: string): boolean;
22
+ /**
23
+ * Check if a text string contains any CJK characters.
24
+ *
25
+ * @param text - the text to scan.
26
+ * @returns true when at least one character is CJK.
27
+ */
28
+ export declare function containsCjk(text: string): boolean;
29
+ /** Result of loading a system CJK font. */
30
+ export interface CjkFontResult {
31
+ font: opentype.Font;
32
+ family: string;
33
+ }
34
+ /**
35
+ * Load a CJK font from the system using the Local Font Access API.
36
+ * Returns null if unavailable (no permission, unsupported browser, or no CJK font found).
37
+ *
38
+ * @returns a promise resolving to the parsed CJK font and its family name,
39
+ * or null when no usable system CJK font is available.
40
+ */
41
+ export declare function loadSystemCjkFont(): Promise<CjkFontResult | null>;
42
+ //# sourceMappingURL=cjk-font.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cjk-font.d.ts","sourceRoot":"","sources":["../../../src/primitives/text/cjk-font.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AAEvC;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAS7C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAwCvE"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * cjk-font — CJK character classification and system font loading.
3
+ *
4
+ * Zero-three module: the geometry half of the former `primitives/text/cjk.ts`
5
+ * (`createMixedTextGeometry`) consumers on the editor extension library, whose
6
+ * `cad.text` BREP path still needs the character test and the Local Font Access
7
+ * API loader. Keeping the font half here means the platform `cad.text` BREP path
8
+ * (and the CJK fallback it shares with the mesh path) no longer drags three's
9
+ * `Shape`/`ExtrudeGeometry` into the platform surface.
10
+ *
11
+ * Uses the Local Font Access API (window.queryLocalFonts) to load system CJK
12
+ * fonts; glyph path parsing lives in the consumer.
13
+ */
14
+ import * as opentype from 'opentype.js';
15
+ /**
16
+ * Check if a character is CJK (CJK Unified Ideographs + extensions).
17
+ *
18
+ * @param ch - the single character to test.
19
+ * @returns true when the character falls in a CJK code point range.
20
+ */
21
+ export function isCjkChar(ch) {
22
+ const code = ch.charCodeAt(0);
23
+ return ((code >= 0x4E00 && code <= 0x9FFF) || // CJK Unified Ideographs
24
+ (code >= 0x3400 && code <= 0x4DBF) || // CJK Extension A
25
+ (code >= 0x2F800 && code <= 0x2FA1F) || // CJK Compatibility Ideographs Supplement
26
+ (code >= 0x3000 && code <= 0x303F) || // CJK Symbols and Punctuation
27
+ (code >= 0xFF00 && code <= 0xFFEF) // Fullwidth Forms
28
+ );
29
+ }
30
+ /**
31
+ * Check if a text string contains any CJK characters.
32
+ *
33
+ * @param text - the text to scan.
34
+ * @returns true when at least one character is CJK.
35
+ */
36
+ export function containsCjk(text) {
37
+ for (const ch of text) {
38
+ if (isCjkChar(ch))
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
+ /**
44
+ * Load a CJK font from the system using the Local Font Access API.
45
+ * Returns null if unavailable (no permission, unsupported browser, or no CJK font found).
46
+ *
47
+ * @returns a promise resolving to the parsed CJK font and its family name,
48
+ * or null when no usable system CJK font is available.
49
+ */
50
+ export async function loadSystemCjkFont() {
51
+ const w = typeof window !== 'undefined' ? window : undefined;
52
+ if (!w || typeof w.queryLocalFonts !== 'function') {
53
+ return null;
54
+ }
55
+ try {
56
+ const fonts = await w.queryLocalFonts();
57
+ // Find a font that supports CJK
58
+ const cjkFont = fonts.find((f) => f.family.includes('Microsoft YaHei') ||
59
+ f.family.includes('SimSun') ||
60
+ f.family.includes('Noto Sans') ||
61
+ f.family.includes('Noto Serif') ||
62
+ f.fullName.includes('CJK') ||
63
+ f.fullName.includes('SC') ||
64
+ f.fullName.includes('CN') ||
65
+ f.fullName.includes('JP') ||
66
+ f.fullName.includes('KR') ||
67
+ f.family.includes('Source Han') ||
68
+ f.family.includes('思源') ||
69
+ f.family.includes('微软雅黑') ||
70
+ f.family.includes('宋体') ||
71
+ f.family.includes('黑体') ||
72
+ f.family.includes('楷体') ||
73
+ f.family.includes('仿宋'));
74
+ if (!cjkFont)
75
+ return null;
76
+ const fontData = await cjkFont.blob();
77
+ const buf = await fontData.arrayBuffer();
78
+ const font = opentype.parse(buf);
79
+ return { font, family: cjkFont.family };
80
+ }
81
+ catch {
82
+ // User denied permission or other error
83
+ return null;
84
+ }
85
+ }
86
+ //# sourceMappingURL=cjk-font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cjk-font.js","sourceRoot":"","sources":["../../../src/primitives/text/cjk-font.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * cjk-font — CJK character classification and system font loading.\n *\n * Zero-three module: the geometry half of the former `primitives/text/cjk.ts`\n * (`createMixedTextGeometry`) consumers on the editor extension library, whose\n * `cad.text` BREP path still needs the character test and the Local Font Access\n * API loader. Keeping the font half here means the platform `cad.text` BREP path\n * (and the CJK fallback it shares with the mesh path) no longer drags three's\n * `Shape`/`ExtrudeGeometry` into the platform surface.\n *\n * Uses the Local Font Access API (window.queryLocalFonts) to load system CJK\n * fonts; glyph path parsing lives in the consumer.\n */\nimport * as opentype from 'opentype.js'\n\n/**\n * Check if a character is CJK (CJK Unified Ideographs + extensions).\n *\n * @param ch - the single character to test.\n * @returns true when the character falls in a CJK code point range.\n */\nexport function isCjkChar(ch: string): boolean {\n const code = ch.charCodeAt(0)\n return (\n (code >= 0x4E00 && code <= 0x9FFF) || // CJK Unified Ideographs\n (code >= 0x3400 && code <= 0x4DBF) || // CJK Extension A\n (code >= 0x2F800 && code <= 0x2FA1F) || // CJK Compatibility Ideographs Supplement\n (code >= 0x3000 && code <= 0x303F) || // CJK Symbols and Punctuation\n (code >= 0xFF00 && code <= 0xFFEF) // Fullwidth Forms\n )\n}\n\n/**\n * Check if a text string contains any CJK characters.\n *\n * @param text - the text to scan.\n * @returns true when at least one character is CJK.\n */\nexport function containsCjk(text: string): boolean {\n for (const ch of text) {\n if (isCjkChar(ch)) return true\n }\n return false\n}\n\n/** Result of loading a system CJK font. */\nexport interface CjkFontResult {\n font: opentype.Font\n family: string\n}\n\n/**\n * Load a CJK font from the system using the Local Font Access API.\n * Returns null if unavailable (no permission, unsupported browser, or no CJK font found).\n *\n * @returns a promise resolving to the parsed CJK font and its family name,\n * or null when no usable system CJK font is available.\n */\nexport async function loadSystemCjkFont(): Promise<CjkFontResult | null> {\n const w = typeof window !== 'undefined' ? (window as any) : undefined\n if (!w || typeof w.queryLocalFonts !== 'function') {\n return null\n }\n\n try {\n const fonts: Array<{ family: string; fullName: string; style: string; postscriptName: string; blob: () => Promise<Blob> }> = await w.queryLocalFonts()\n\n // Find a font that supports CJK\n const cjkFont = fonts.find((f) =>\n f.family.includes('Microsoft YaHei') ||\n f.family.includes('SimSun') ||\n f.family.includes('Noto Sans') ||\n f.family.includes('Noto Serif') ||\n f.fullName.includes('CJK') ||\n f.fullName.includes('SC') ||\n f.fullName.includes('CN') ||\n f.fullName.includes('JP') ||\n f.fullName.includes('KR') ||\n f.family.includes('Source Han') ||\n f.family.includes('思源') ||\n f.family.includes('微软雅黑') ||\n f.family.includes('宋体') ||\n f.family.includes('黑体') ||\n f.family.includes('楷体') ||\n f.family.includes('仿宋')\n )\n\n if (!cjkFont) return null\n\n const fontData = await cjkFont.blob()\n const buf = await fontData.arrayBuffer()\n const font = opentype.parse(buf)\n\n return { font, family: cjkFont.family }\n } catch {\n // User denied permission or other error\n return null\n }\n}\n"]}
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * ⚠️ 依赖方向红线:本文件不得 import 任何 src/ 下的模块(只可 import type)。
15
15
  */
16
- import type { PartName } from './identity.js';
16
+ import type { PartName, StmtId } from './identity.js';
17
17
  /**
18
18
  * Lightweight execution anchor — carries only the fields consumed by
19
19
  * library functions via getCurrentStmt(): `id` (StmtId), `outputs` (PartName[]),
@@ -28,7 +28,11 @@ export interface ExecutionAnchor {
28
28
  }
29
29
  /**
30
30
  * 执行模式(与 src/cad-runtime/ports.ts 的 ExecutionMode 保持一致)。
31
- * 此处重复定义是为了保持本模块零依赖;由守卫测试保证两者一致。
31
+ *
32
+ * 此处重复定义是为了保持本模块零依赖。一致性由 `cad-runtime/runtime.ts:460`
33
+ * (`mode: this.mode`,`ExecutionMode` → 本类型的赋值)在编译期间接钉住:
34
+ * 只给 `ExecutionMode` 加成员而不加到这里 → 该行 tsc 报错。
35
+ * (2026-09-22 核实:无独立守卫测试。)
32
36
  */
33
37
  export type RuntimeExecutionMode = 'auto' | 'brep' | 'mesh';
34
38
  /** 宿主注入的环境资源。字段类型用宽松结构,避免本模块依赖具体实现。 */
@@ -40,9 +44,17 @@ export interface Backends {
40
44
  mode: RuntimeExecutionMode;
41
45
  /** 当前 BREP 引擎 id(注册表首个注册者;未注册为 null)。能力路由读(§8.4)。 */
42
46
  brepEngineId?: string | null;
43
- /** 当前引擎能力声明(宽松结构,零依赖)。能力路由读(§8.4)。 */
47
+ /**
48
+ * 当前引擎能力声明(宽松结构,零依赖)。能力路由读(§8.4)。
49
+ *
50
+ * `evolution` = 本引擎**实际提供**的 `*WithHistory` 核函数名名单
51
+ * (`brep/engine/types.ts` 的 `BrepEvolutionKind`)。**不是**族级布尔——
52
+ * 族级布尔会多报能力、使静态判定失效(Phase 0.2)。
53
+ * 本模块须零依赖,故此处只写 `readonly string[]`;权威类型见
54
+ * `BrepCapabilities`,消费侧由 `backend-dispatch.engineCapabilitySet` 归一化。
55
+ */
44
56
  brepCapabilities?: {
45
- evolution?: boolean;
57
+ evolution?: readonly string[];
46
58
  heal?: boolean;
47
59
  directEdit?: boolean;
48
60
  advSurface?: boolean;
@@ -136,6 +148,8 @@ export interface FaijsRuntimeState {
136
148
  readonly slots: WeakMap<object, ShapeSlot>;
137
149
  /** Shape → PartName 反查(keep 与 dependentsOf 用) */
138
150
  readonly shapeToName: WeakMap<object, PartName>;
151
+ /** 同语句 lineage 去重标记(define-op 写入;语句边界 setCurrentStmt 重置)。 */
152
+ registeredStmtId: StmtId | undefined;
139
153
  }
140
154
  /** 进入函数 BREP 域(DirectExecutor 执行 local 语句 fn 之前调用)。 */
141
155
  export declare function enterFunctionBrep(): void;
@@ -156,8 +170,6 @@ export declare function takeFunctionBrepDomain(): unknown[];
156
170
  export interface ShapeSlot {
157
171
  solid?: unknown;
158
172
  faceEvolution?: Map<number, number[]>;
159
- /** 拓扑命名 RoleTable(§2.3 naming 槽:随 Shape 身份槽传播,不序列化)。 */
160
- roleTable?: unknown;
161
173
  /** mesh/primitive 面 hint 快照(§3.6 setTopology 注入时由 runtime 提炼写入,解析兜底用)。 */
162
174
  faceHints?: unknown;
163
175
  behavior?: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../src/runtime-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../src/runtime-state.ts"],"names":[],"mappings":"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"}
@@ -197,6 +197,7 @@ export function getRuntimeState() {
197
197
  created: new WeakSet(),
198
198
  slots: new WeakMap(),
199
199
  shapeToName: new WeakMap(),
200
+ registeredStmtId: undefined,
200
201
  };
201
202
  g[KEY] = created;
202
203
  return created;
@@ -231,7 +232,14 @@ export function getBackends() {
231
232
  * @param stmt - the statement currently being executed.
232
233
  */
233
234
  export function setCurrentStmt(stmt) {
234
- getRuntimeState().currentStmt = stmt;
235
+ const s = getRuntimeState();
236
+ // 语句边界:锚点变化(含语句结束置 undefined)时解除同语句 lineage 去重标记,
237
+ // 使下一条语句(或同 id 复跑)重新获得注册资格;同一条语句内 TS 库函数
238
+ // (如 cq-compat Workplane op)连续调用多个 defineOp 时共享锚点,标记保持
239
+ // 生效,嵌套调用正确跳过注册(见 define-op 的 isOuter 判定)。
240
+ if (s.currentStmt?.id !== stmt?.id)
241
+ s.registeredStmtId = undefined;
242
+ s.currentStmt = stmt;
235
243
  }
236
244
  /**
237
245
  * 读取当前执行语句。库函数不应调用它(F1)。