@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":"result-unwrap.js","sourceRoot":"","sources":["../../../src/api/internal/result-unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,OAAQ,SAAQ,KAAK;IAChC,6CAA6C;IACpC,EAAE,CAAQ;IACnB,2EAA2E;IAClE,IAAI,CAAQ;IACrB,YAAY,EAAU,EAAE,IAAY,EAAE,OAAe;QACnD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAQ,CAAsB,CAAC,EAAE,KAAK,SAAS,CAAA;AAC/F,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,GAAY;IAClD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAA;QAC7C,MAAM,MAAM,GAAG,cAAc,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QACnF,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,cAAc,IAAI,kBAAkB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACrE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAY;IACpD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAA;QAC7C,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAA;QAC/D,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,IAAI,KAAK,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACrF,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,IAAI,kBAAkB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,CAAU,EAAE,IAAY;IACnD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAC9B,IAAI,CAAC,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC,KAAK,CAAA;IACxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAwC,CAAA;IAChE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,aAAa,CAAA;IACpC,MAAM,IAAI,OAAO,CACf,IAAI,EACJ,IAAI,EACJ,yBAAyB,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,kBAAkB,EAAE,CAC7E,CAAA;AACH,CAAC","sourcesContent":["/**\n * result-unwrap — the single Result→throw bridge shared by every faijs\n * statement boundary (D1).\n *\n * Design: docs/plans/2026-09-03-faijs-brepjs-compat-api.md §5.1 / §5.2\n *\n * Three-layer error semantics (§5.1):\n * library internals / TS compat face → `Result<T>` native (BrepError)\n * statement boundary → `err` unwrapped into a throw\n * faijs-specific op impls → may return `Result`; same unwrap\n *\n * This module is a **leaf**: it imports nothing, so both the SDK layer\n * (`src/define-op.ts`, whose `dist/sdk.js` must stay free of heavy static\n * imports) and the compat bridge (`api/internal/compat-op.ts`) can share one\n * implementation. Having two copies would let the two boundaries drift.\n *\n * @module\n */\n\n/** Structural shape of the vendored `Ok`/`Err` records (`vendored/brepjs/core/result.ts:12-21`). */\nexport type ResultLike =\n | { ok: true; value: unknown }\n | { ok: false; error: { code?: string; message?: string } }\n\n/**\n * Statement-boundary op failure (D1 unwrap / compat adoption).\n *\n * An `err` Result unwrapped at the statement boundary used to be thrown as a\n * plain `Error`, which `CadRuntime.runWithFailureHandling` (recognizing only\n * `BrepUnsupportedError`/`MeshUnsupportedError` by `instanceof`) re-threw out\n * of `execute()` instead of converting it into `ExecutionResult.failedAt`.\n * This class is the engine-recognizable carrier: defined in this leaf module\n * (zero imports) so both `define-op` and the compat bridge can throw it while\n * CadRuntime can catch it without importing anything heavier.\n *\n * A thrown `Error` that is *not* an `OpError` keeps its old meaning: an\n * unexpected implementation bug that must propagate (Result 体系 — expected\n * failures are `err` values, exceptions are bugs).\n */\nexport class OpError extends Error {\n /** The op name that produced the failure. */\n readonly op: string\n /** The `BrepError.code`, or `'E_OP_FAILED'` when the library sent none. */\n readonly code: string\n constructor(op: string, code: string, message: string) {\n super(message)\n this.name = 'OpError'\n this.op = op\n this.code = code\n }\n}\n\n/**\n * Structural test for a Result value.\n *\n * Only the `ok: boolean` discriminant is checked — the vendored `Result` is a\n * plain record, so no `instanceof` and no import is needed (which is what keeps\n * this module a leaf).\n *\n * @param v - the candidate value.\n * @returns true when `v` looks like an Ok/Err record.\n */\nexport function isResultLike(v: unknown): v is ResultLike {\n return typeof v === 'object' && v !== null && typeof (v as { ok?: unknown }).ok === 'boolean'\n}\n\n/**\n * Render an error thrown by (or returned from) an implementation as a\n * statement-level failure.\n *\n * The op name and the `BrepError.code` (when present) are always kept so the\n * engine's statement-level catch reports the same shape the plan's trace A/B\n * describe (`[faijs/brepjs-compat] <op>: <CODE>: <message>`).\n *\n * @param name - the op name.\n * @param err - the thrown value (Error or anything else).\n * @returns an Error carrying the op context.\n */\nexport function toOpError(name: string, err: unknown): Error {\n if (err instanceof Error) {\n const code = (err as { code?: unknown }).code\n const prefix = `[faijs/op] ${name}: ${typeof code === 'string' ? code + ': ' : ''}`\n return new Error(prefix + err.message)\n }\n return new Error(`[faijs/op] ${name}: E_OP_FAILED: ${String(err)}`)\n}\n\n/**\n * Wrap an implementation-thrown exception as an {@link OpError} (statement-\n * level failure carrier). Used by `define-op.ts` `runImpl` so that\n * `CadRuntime.directFailedAtOrThrow` recognizes the error as an op failure\n * (not a bug to re-throw).\n *\n * @param name - the op name.\n * @param err - the thrown value.\n * @returns an OpError carrying the op context and code.\n */\nexport function toOpFailure(name: string, err: unknown): OpError {\n if (err instanceof Error) {\n const code = (err as { code?: unknown }).code\n const codeStr = typeof code === 'string' ? code : 'E_OP_FAILED'\n return new OpError(name, codeStr, `[faijs/op] ${name}: ${codeStr}: ${err.message}`)\n }\n return new OpError(name, 'E_OP_FAILED', `[faijs/op] ${name}: E_OP_FAILED: ${String(err)}`)\n}\n\n/**\n * Statement-boundary unwrap (D1).\n *\n * - a non-Result product → returned untouched (plain-data ops, mesh products);\n * - `ok` → `.value`;\n * - `err` → throws an {@link OpError} carrying the op name and BrepError code\n * (the engine converts `OpError` into `ExecutionResult.failedAt`).\n *\n * @param r - the implementation product.\n * @param name - the op name (error messages).\n * @returns the unwrapped value, or the input when it was not a Result.\n * @throws an {@link OpError} when `r` is an `Err`.\n */\nexport function unwrapResult(r: unknown, name: string): unknown {\n if (!isResultLike(r)) return r\n if (r.ok) return r.value\n const e = (r.error ?? {}) as { code?: string; message?: string }\n const code = e.code ?? 'E_OP_FAILED'\n throw new OpError(\n name,\n code,\n `[faijs/brepjs-compat] ${name}: ${code}: ${e.message ?? 'operation failed'}`,\n )\n}\n"]}
1
+ {"version":3,"file":"result-unwrap.js","sourceRoot":"","sources":["../../../src/api/internal/result-unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,OAAQ,SAAQ,KAAK;IAChC,6CAA6C;IACpC,EAAE,CAAQ;IACnB,2EAA2E;IAClE,IAAI,CAAQ;IACrB,YAAY,EAAU,EAAE,IAAY,EAAE,OAAe,EAAE,OAA6B;QAClF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAQ,CAAsB,CAAC,EAAE,KAAK,SAAS,CAAA;AAC/F,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,GAAY;IAClD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAA;QAC7C,MAAM,MAAM,GAAG,cAAc,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QACnF,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,cAAc,IAAI,kBAAkB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACrE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAY;IACpD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAA;QAC7C,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAA;QAC/D,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,IAAI,KAAK,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACrF,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,IAAI,kBAAkB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,CAAU,EAAE,IAAY;IACnD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAC9B,IAAI,CAAC,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC,KAAK,CAAA;IACxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAwC,CAAA;IAChE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,aAAa,CAAA;IACpC,MAAM,IAAI,OAAO,CACf,IAAI,EACJ,IAAI,EACJ,yBAAyB,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,kBAAkB,EAAE,CAC7E,CAAA;AACH,CAAC","sourcesContent":["/**\n * result-unwrap — the single Result→throw bridge shared by every faijs\n * statement boundary (D1).\n *\n * Design: docs/plans/2026-09-03-faijs-brepjs-compat-api.md §5.1 / §5.2\n *\n * Three-layer error semantics (§5.1):\n * library internals / TS compat face → `Result<T>` native (BrepError)\n * statement boundary → `err` unwrapped into a throw\n * faijs-specific op impls → may return `Result`; same unwrap\n *\n * This module is a **leaf**: it imports nothing, so both the SDK layer\n * (`src/define-op.ts`, whose `dist/sdk.js` must stay free of heavy static\n * imports) and the compat bridge (`api/internal/compat-op.ts`) can share one\n * implementation. Having two copies would let the two boundaries drift.\n *\n * @module\n */\n\n/** Structural shape of the vendored `Ok`/`Err` records (`vendored/brepjs/core/result.ts:12-21`). */\nexport type ResultLike =\n | { ok: true; value: unknown }\n | { ok: false; error: { code?: string; message?: string } }\n\n/**\n * Statement-boundary op failure (D1 unwrap / compat adoption).\n *\n * An `err` Result unwrapped at the statement boundary used to be thrown as a\n * plain `Error`, which `CadRuntime.runWithFailureHandling` (recognizing only\n * `BrepUnsupportedError`/`MeshUnsupportedError` by `instanceof`) re-threw out\n * of `execute()` instead of converting it into `ExecutionResult.failedAt`.\n * This class is the engine-recognizable carrier: defined in this leaf module\n * (zero imports) so both `define-op` and the compat bridge can throw it while\n * CadRuntime can catch it without importing anything heavier.\n *\n * A thrown `Error` that is *not* an `OpError` keeps its old meaning: an\n * unexpected implementation bug that must propagate (Result 体系 — expected\n * failures are `err` values, exceptions are bugs).\n */\nexport class OpError extends Error {\n /** The op name that produced the failure. */\n readonly op: string\n /** The `BrepError.code`, or `'E_OP_FAILED'` when the library sent none. */\n readonly code: string\n constructor(op: string, code: string, message: string, options?: { cause?: unknown }) {\n super(message, options)\n this.name = 'OpError'\n this.op = op\n this.code = code\n }\n}\n\n/**\n * Structural test for a Result value.\n *\n * Only the `ok: boolean` discriminant is checked — the vendored `Result` is a\n * plain record, so no `instanceof` and no import is needed (which is what keeps\n * this module a leaf).\n *\n * @param v - the candidate value.\n * @returns true when `v` looks like an Ok/Err record.\n */\nexport function isResultLike(v: unknown): v is ResultLike {\n return typeof v === 'object' && v !== null && typeof (v as { ok?: unknown }).ok === 'boolean'\n}\n\n/**\n * Render an error thrown by (or returned from) an implementation as a\n * statement-level failure.\n *\n * The op name and the `BrepError.code` (when present) are always kept so the\n * engine's statement-level catch reports the same shape the plan's trace A/B\n * describe (`[faijs/brepjs-compat] <op>: <CODE>: <message>`).\n *\n * @param name - the op name.\n * @param err - the thrown value (Error or anything else).\n * @returns an Error carrying the op context.\n */\nexport function toOpError(name: string, err: unknown): Error {\n if (err instanceof Error) {\n const code = (err as { code?: unknown }).code\n const prefix = `[faijs/op] ${name}: ${typeof code === 'string' ? code + ': ' : ''}`\n return new Error(prefix + err.message)\n }\n return new Error(`[faijs/op] ${name}: E_OP_FAILED: ${String(err)}`)\n}\n\n/**\n * Wrap an implementation-thrown exception as an {@link OpError} (statement-\n * level failure carrier). Used by `define-op.ts` `runImpl` so that\n * `CadRuntime.directFailedAtOrThrow` recognizes the error as an op failure\n * (not a bug to re-throw).\n *\n * @param name - the op name.\n * @param err - the thrown value.\n * @returns an OpError carrying the op context and code.\n */\nexport function toOpFailure(name: string, err: unknown): OpError {\n if (err instanceof Error) {\n const code = (err as { code?: unknown }).code\n const codeStr = typeof code === 'string' ? code : 'E_OP_FAILED'\n return new OpError(name, codeStr, `[faijs/op] ${name}: ${codeStr}: ${err.message}`)\n }\n return new OpError(name, 'E_OP_FAILED', `[faijs/op] ${name}: E_OP_FAILED: ${String(err)}`)\n}\n\n/**\n * Statement-boundary unwrap (D1).\n *\n * - a non-Result product → returned untouched (plain-data ops, mesh products);\n * - `ok` → `.value`;\n * - `err` → throws an {@link OpError} carrying the op name and BrepError code\n * (the engine converts `OpError` into `ExecutionResult.failedAt`).\n *\n * @param r - the implementation product.\n * @param name - the op name (error messages).\n * @returns the unwrapped value, or the input when it was not a Result.\n * @throws an {@link OpError} when `r` is an `Err`.\n */\nexport function unwrapResult(r: unknown, name: string): unknown {\n if (!isResultLike(r)) return r\n if (r.ok) return r.value\n const e = (r.error ?? {}) as { code?: string; message?: string }\n const code = e.code ?? 'E_OP_FAILED'\n throw new OpError(\n name,\n code,\n `[faijs/brepjs-compat] ${name}: ${code}: ${e.message ?? 'operation failed'}`,\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"knurl.d.ts","sourceRoot":"","sources":["../../src/api/knurl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,eAAe,CAAA;AAMhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEvE;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,eAAO,MAAM,KAAK;;CAoBhB,CAAA"}
1
+ {"version":3,"file":"knurl.d.ts","sourceRoot":"","sources":["../../src/api/knurl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,eAAe,CAAA;AAOhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEvE;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,eAAO,MAAM,KAAK;;CAqBhB,CAAA"}
package/dist/api/knurl.js CHANGED
@@ -58,5 +58,6 @@ export const knurl = defineOp({
58
58
  knurlMappingMode: params.knurlMappingMode ?? 5,
59
59
  });
60
60
  },
61
+ naming: { kind: 'unmodeled', reason: 'knurl is mesh-only, no BREP face identity' },
61
62
  });
62
63
  //# sourceMappingURL=knurl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"knurl.js","sourceRoot":"","sources":["../../src/api/knurl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAE/C;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IAC/D,oBAAoB,CAAC,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,KAAK,EAAE,KAAY,EAAE,MAA+B,EAAE,EAAE;QAC5D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QAC/D,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACzB,+CAA+C;QAC/C,iEAAiE;QACjE,MAAM,CAAC,SAAS,CAAC,GAAG,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YAC1B,IAAI,EAAE;gBACJ,MAAM,EAAG,MAAM,CAAC,UAA+B,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC5E,MAAM,EAAG,MAAM,CAAC,UAA+B,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC7D;YACD,kBAAkB,EAAG,MAAM,CAAC,kBAAyC,IAAI,GAAG;YAC5E,uBAAuB,EAAG,MAAM,CAAC,uBAA+C,IAAI,KAAK;YACzF,iBAAiB,EAAG,MAAM,CAAC,iBAAwC,IAAI,GAAG;YAC1E,WAAW,EAAG,MAAM,CAAC,WAAkC,IAAI,IAAI;YAC/D,WAAW,EAAG,MAAM,CAAC,WAAkC,IAAI,IAAI;YAC/D,gBAAgB,EAAG,MAAM,CAAC,gBAAuC,IAAI,CAAC;SACvE,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA","sourcesContent":["/**\n * stdlib knurl — 滚花库函数(mesh-only)\n *\n *\n * knurl 无 BREP 实现(mesh-only)——dispatchPath 在 brep 模式下调用前抛错。\n * part-brep-lost 事件由引擎统一发(P4,库不再 emit)。\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\nimport { cad } from '../mesh'\nimport { reconcileBrepInputs } from './reconcile'\nimport { defineOp } from '../sdk'\nimport { assertPositiveNumber } from './assert'\n\n/**\n * Validate knurl parameters: `knurlTextureHeight` must be a positive number.\n * @param params - the raw knurl operation parameters.\n */\nexport function assertKnurlParams(params: Record<string, unknown>): void {\n assertPositiveNumber(params.knurlTextureHeight, 'knurl.knurlTextureHeight')\n}\n\n/**\n * 施加滚花(顶点位移,非布尔)。mesh-only。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual warn\n * @name knurl\n * @note knurl 无 BREP 实现(mesh-only),本质是顶点位移(网格操作),网格参数可接受;brep 模式下调用前抛 BrepUnsupportedError。面锚定建议用几何引用。\n * @returns Shape 滚花后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param params.knurlTextureHeight - 纹路高度(mm)。type:number 默认 0.5\n * @param params.knurlScaleU - 纹路 U 向频率。type:number 默认 0.15\n * @param params.knurlScaleV - 纹路 V 向频率。type:number 默认 0.15\n * @param params.knurlInvertDisplacement - 反向位移。type:boolean 默认 false\n * @param params.knurlRefineLength - 细分长度(mm)。type:number 默认 1.0\n * @param params.knurlMappingMode - UV 映射模式。type:number 默认 5\n * @param params.faceCenter - 面锚点中心。type:[x,y,z] 默认 bboxCenter\n * @param params.faceNormal - 面法向。type:[x,y,z] 默认 [0,0,1]\n * @example\n * const p = await cad.knurl(part0, { knurlTextureHeight: 0.5, knurlScaleU: 0.15, knurlScaleV: 0.15, knurlInvertDisplacement: false, knurlRefineLength: 1.0, knurlMappingMode: 5 })\n */\nexport const knurl = defineOp({\n mesh: async (input: Shape, params: Record<string, unknown>) => {\n if (!input) throw new Error('[stdlib/knurl] no input geometry')\n assertKnurlParams(params)\n // 断链时刻(用户点名场景):BREP 建模的模型最后做滚花 → BREP 输入必须先归约为\n // 合法 2-manifold 网格再进 mesh 路径(reconcileBrepInputs 对 mesh 侧输入原样透传)\n const [meshInput] = reconcileBrepInputs([input])\n return cad.knurl(meshInput, {\n face: {\n center: (params.faceCenter as Vec3 | undefined) ?? cad.bboxCenter(meshInput),\n normal: (params.faceNormal as Vec3 | undefined) ?? [0, 0, 1],\n },\n knurlTextureHeight: (params.knurlTextureHeight as number | undefined) ?? 0.5,\n knurlInvertDisplacement: (params.knurlInvertDisplacement as boolean | undefined) ?? false,\n knurlRefineLength: (params.knurlRefineLength as number | undefined) ?? 1.0,\n knurlScaleU: (params.knurlScaleU as number | undefined) ?? 0.15,\n knurlScaleV: (params.knurlScaleV as number | undefined) ?? 0.15,\n knurlMappingMode: (params.knurlMappingMode as number | undefined) ?? 5,\n })\n },\n})\n"]}
1
+ {"version":3,"file":"knurl.js","sourceRoot":"","sources":["../../src/api/knurl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAE/C;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IAC/D,oBAAoB,CAAC,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,KAAK,EAAE,KAAY,EAAE,MAA+B,EAAE,EAAE;QAC5D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QAC/D,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACzB,+CAA+C;QAC/C,iEAAiE;QACjE,MAAM,CAAC,SAAS,CAAC,GAAG,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YAC1B,IAAI,EAAE;gBACJ,MAAM,EAAG,MAAM,CAAC,UAA+B,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC5E,MAAM,EAAG,MAAM,CAAC,UAA+B,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC7D;YACD,kBAAkB,EAAG,MAAM,CAAC,kBAAyC,IAAI,GAAG;YAC5E,uBAAuB,EAAG,MAAM,CAAC,uBAA+C,IAAI,KAAK;YACzF,iBAAiB,EAAG,MAAM,CAAC,iBAAwC,IAAI,GAAG;YAC1E,WAAW,EAAG,MAAM,CAAC,WAAkC,IAAI,IAAI;YAC/D,WAAW,EAAG,MAAM,CAAC,WAAkC,IAAI,IAAI;YAC/D,gBAAgB,EAAG,MAAM,CAAC,gBAAuC,IAAI,CAAC;SACvE,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,2CAA2C,EAAgB;CACjG,CAAC,CAAA","sourcesContent":["/**\n * stdlib knurl — 滚花库函数(mesh-only)\n *\n *\n * knurl 无 BREP 实现(mesh-only)——dispatchPath 在 brep 模式下调用前抛错。\n * part-brep-lost 事件由引擎统一发(P4,库不再 emit)。\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\nimport { cad } from '../mesh'\nimport { reconcileBrepInputs } from './reconcile'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { assertPositiveNumber } from './assert'\n\n/**\n * Validate knurl parameters: `knurlTextureHeight` must be a positive number.\n * @param params - the raw knurl operation parameters.\n */\nexport function assertKnurlParams(params: Record<string, unknown>): void {\n assertPositiveNumber(params.knurlTextureHeight, 'knurl.knurlTextureHeight')\n}\n\n/**\n * 施加滚花(顶点位移,非布尔)。mesh-only。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual warn\n * @name knurl\n * @note knurl 无 BREP 实现(mesh-only),本质是顶点位移(网格操作),网格参数可接受;brep 模式下调用前抛 BrepUnsupportedError。面锚定建议用几何引用。\n * @returns Shape 滚花后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param params.knurlTextureHeight - 纹路高度(mm)。type:number 默认 0.5\n * @param params.knurlScaleU - 纹路 U 向频率。type:number 默认 0.15\n * @param params.knurlScaleV - 纹路 V 向频率。type:number 默认 0.15\n * @param params.knurlInvertDisplacement - 反向位移。type:boolean 默认 false\n * @param params.knurlRefineLength - 细分长度(mm)。type:number 默认 1.0\n * @param params.knurlMappingMode - UV 映射模式。type:number 默认 5\n * @param params.faceCenter - 面锚点中心。type:[x,y,z] 默认 bboxCenter\n * @param params.faceNormal - 面法向。type:[x,y,z] 默认 [0,0,1]\n * @example\n * const p = await cad.knurl(part0, { knurlTextureHeight: 0.5, knurlScaleU: 0.15, knurlScaleV: 0.15, knurlInvertDisplacement: false, knurlRefineLength: 1.0, knurlMappingMode: 5 })\n */\nexport const knurl = defineOp({\n mesh: async (input: Shape, params: Record<string, unknown>) => {\n if (!input) throw new Error('[stdlib/knurl] no input geometry')\n assertKnurlParams(params)\n // 断链时刻(用户点名场景):BREP 建模的模型最后做滚花 → BREP 输入必须先归约为\n // 合法 2-manifold 网格再进 mesh 路径(reconcileBrepInputs 对 mesh 侧输入原样透传)\n const [meshInput] = reconcileBrepInputs([input])\n return cad.knurl(meshInput, {\n face: {\n center: (params.faceCenter as Vec3 | undefined) ?? cad.bboxCenter(meshInput),\n normal: (params.faceNormal as Vec3 | undefined) ?? [0, 0, 1],\n },\n knurlTextureHeight: (params.knurlTextureHeight as number | undefined) ?? 0.5,\n knurlInvertDisplacement: (params.knurlInvertDisplacement as boolean | undefined) ?? false,\n knurlRefineLength: (params.knurlRefineLength as number | undefined) ?? 1.0,\n knurlScaleU: (params.knurlScaleU as number | undefined) ?? 0.15,\n knurlScaleV: (params.knurlScaleV as number | undefined) ?? 0.15,\n knurlMappingMode: (params.knurlMappingMode as number | undefined) ?? 5,\n })\n },\n naming: { kind: 'unmodeled', reason: 'knurl is mesh-only, no BREP face identity' } as Provenance,\n})\n"]}
@@ -1,43 +1,121 @@
1
1
  /**
2
- * L3 bridge — occt-wasm kernel single-instance injection (D10).
2
+ * L3 bridge — vendored kernel registry injection (engine-neutral, Phase 2 P2-5).
3
3
  *
4
- * The ported `kernel/occtWasm` adapter is constructor-injected (DI form, never
5
- * imports `occt-wasm` itself). This file is the **only** faijs-side place
6
- * wiring the two together (boundary rule D8/R5: core side may import the
7
- * vendored tree only from `api/`):
4
+ * 原 occt-kernel-bridge 的职责是「把 vendored kernel registry 冻结绑定到 occt-wasm
5
+ * 单实例」(D10)。Phase 2 起改为**跟随当前 BREP 引擎**:装配期把 registry 里当前
6
+ * 引擎(occt / brepkit / mock)的 `BrepEngineApi` 适配器包装为 brepjs `KernelAdapter`
7
+ * 形态注册进 vendored registry,使 `vendoredRegistry.getKernel()` 返回当前引擎——
8
+ * vendored 函数全部逻辑(命名/角色表/Result)原样保留、零改动。
8
9
  *
9
- * initOcctWasm() ──same instance──▶ OcctWasmAdapter ──▶ registerKernel
10
- * (faijs existing (vendored, DI) (vendored kernel
11
- * occt singleton) registry, D10)
10
+ * 边界规则(D8/R5)不变:本文件是 faijs 侧唯一把 vendored kernel registry 与
11
+ * faijs 引擎接线的地方;core 侧只从 `api/` import vendored 树。
12
12
  *
13
- * `occtKernel.getKernel()` returns the faijs singleton `OcctKernel`; building
14
- * the adapter over that exact instance guarantees the single-instance ban
15
- * (D10: two wasm instances would put handles in different pointer spaces and
16
- * silently desync `hasBrep`/`brepOf`/face evolution).
17
- *
18
- * See docs/plans/2026-09-01-layered-api-architecture.md §D10 / §D8.
13
+ * 装配期完整性检查(方案 §Phase 2.5):KernelAdapter 是 211 方法大接口,但 vendored
14
+ * 面存在大量**辅助构造方法**(createVector3d / createPoint3d / createDirection3d /
15
+ * createAxis1 / createAxis2 / createAxis3,见 vendored core/kernelBoundary.ts)——
16
+ * 它们不落在能力名体系内(BrepMethodKind 之外)、无法由 op 声明覆盖,任何 compat
17
+ * op / TS compat 面都可能触发。⇒ 注入前必须断言这些胶水方法在适配器上齐备,缺失
18
+ * 则在**装配期**报错(而非执行期崩)。清单见 {@link GLUE_METHODS}。
19
19
  */
20
+ import { type BrepEngine } from '../brep/engine/registry.js';
20
21
  import type { KernelAdapter } from '../vendored/brepjs/kernel/types.js';
22
+ /** occt-wasm 适配器在 vendored registry 中的注册 id。这是 vendored 注册表的
23
+ * 槽位名(宿主侧判据 + D10 globalThis 单例兼容),**不是**引擎身份标识——
24
+ * 实际引擎由注入的 adapter 决定(vendored 面全部无参 `getKernel()` 取默认)。 */
25
+ export declare const VENDORED_OCCT_KERNEL_ID = "occt-wasm";
21
26
  /**
22
- * Bind the ported kernel registry to the faijs single occt-wasm instance.
27
+ * Inject the currently-registered BREP engine into the vendored kernel registry
28
+ * (replaces the old occt-only `bindOcctKernel()` fixed binding, Phase 2 P2-5).
29
+ *
30
+ * 装配期调用(在 `registerOcctBrepEngine()` / 其它引擎注册之后)。从引擎注册表取
31
+ * 当前默认 BREP 引擎,按其 id 构造 KernelAdapter 形态注册进 vendored registry:
23
32
  *
24
- * Idempotent: the first call registers the adapter and freezes the registry
25
- * (D10 冻结); subsequent calls return the already-bound adapter without
26
- * re-registering. Call after `initOcctWasm()` has been run (e.g. inside
27
- * `registerOcctBrepEngine()` host assembly).
33
+ * - occt:`OcctWasmAdapter.fromKernel(当前引擎 primitives)`——同一 occt-wasm 单实例
34
+ * (D10 不变),211 方法完整适配器,vendored 函数行为与旧 bindOcctKernel 完全一致;
35
+ * - 其它引擎(brepkit/mock):将 BrepEngineApi 透传包装为 KernelAdapter 形态
36
+ * (`dispose`→`release` 等方法名映射 + pattern 返回形态适配),**不做方法伪造**;
37
+ * - 任一引擎注入前都做**装配期完整性检查**(GLUE_METHODS 齐备断言)。
28
38
  *
29
- * @returns the registered kernel adapter.
39
+ * 幂等:首次调用后注册并冻结;重复调用返回已注入的适配器。
40
+ *
41
+ * @returns 注册进 vendored registry 的 kernel adapter。
42
+ * @throws 无 BREP 引擎注册;或完整性检查失败(胶水方法缺失)——装配期报错。
30
43
  */
31
- export declare function bindOcctKernel(): KernelAdapter;
44
+ export declare function injectCurrentBrepEngineAsKernel(): Promise<KernelAdapter>;
45
+ /**
46
+ * 按引擎 id 构造 KernelAdapter 形态(occt 走完整适配器;其它引擎透传包装)。
47
+ *
48
+ * occt 分支保持旧 bindOcctKernel 行为:OcctWasmAdapter.fromKernel 需要 occt-wasm
49
+ * 实例(OcctKernelOwner)。当前引擎的 primitives 即 initOcctWasm 单例(occtApi 是
50
+ * 同一实例的实例覆盖,方法面完整),转换安全。
51
+ *
52
+ * 其它引擎分支:BrepEngineApi → KernelAdapter 契约面——
53
+ * - `dispose` → `release`(vendored 面用 dispose,BrepEngineApi 用 release);
54
+ * - `linearPattern` / `circularPattern` 的方向/中心/轴参数是 Vec3 对象(BrepEngineApi
55
+ * 口径),vendored 面传 [x,y,z] 三元组——包装为对象再转发;
56
+ * - 返回 BrepHandle[](BrepEngineApi)→ KernelShape[](vendored castResultShape 消费
57
+ * `.wrapped` + `.type`)——包装为 `{ wrapped, type: 'solid' }`;
58
+ * - `gridPattern` 返回单 BrepHandle → 单 KernelShape(compound 语义一致)。
59
+ * 不声明 `rectangularPattern`(纯 JS 组合,不调内核——capability-map 实证)。
60
+ *
61
+ * ⚠️ 不伪造:BrepEngineApi 未提供的方法**不**补桩;vendored 函数若触发,由
62
+ * compat op 的静态能力判定(backend-dispatch,Phase 1)在执行前拦截。
63
+ *
64
+ * @param engine - 当前 BREP 引擎(装配期从引擎注册表取得)。
65
+ * @returns 该引擎的 vendored KernelAdapter(occt → OcctWasmAdapter.fromKernel;
66
+ * 其它引擎 → BrepEngineApi 透传包装,pattern 族 Vec3↔三元组适配)。
67
+ */
68
+ export declare function buildKernelAdapter(engine: BrepEngine): KernelAdapter;
32
69
  /**
33
- * Whether the vendored kernel registry has been bound (D10).
34
- * @returns true once bound to the occt-wasm kernel.
70
+ * vendored kernel methods with no source capability in BrepEngineApi.
71
+ * Registered explicitly (not silently undefined): tests assert this list and
72
+ * the engine-contract gap is a separate decision, not a wrapping bug. No
73
+ * stubs, no fake zeros — a silent 0 is worse than a crash.
35
74
  */
36
- export declare function isOcctKernelBound(): boolean;
75
+ export declare const UNMAPPED_VENDORED_MEASURE_METHODS: readonly ["area", "length", "linearCenterOfMass"];
76
+ /**
77
+ * 装配期完整性检查:KernelAdapter 胶水方法齐备断言。
78
+ *
79
+ * @param id - 引擎注册 id(报错时定位到引擎)。
80
+ * @param adapter - 待注入 vendored registry 的 KernelAdapter。
81
+ * @throws 缺失任一胶水方法 → 装配期报错(列出引擎 id 与缺失方法名)。
82
+ */
83
+ export declare function assertGlueMethodsComplete(id: string, adapter: KernelAdapter): void;
37
84
  /**
38
- * Access the currently bound vendored kernel adapter (reads the registry).
39
- * @throws If the bridge has not been bound.
40
- * @returns the vendored occt-wasm kernel adapter.
85
+ * Test-only: clear the injection cache and reset the vendored kernel registry
86
+ * so a re-assembly (e.g. switching engines in tests) re-runs buildKernelAdapter
87
+ * + assertGlueMethodsComplete for the new engine. Never called in prod.
88
+ */
89
+ export declare function __resetKernelInjectionForTests(): void;
90
+ /**
91
+ * Whether the vendored kernel registry has been injected (engine-neutral D10).
92
+ *
93
+ * 取代旧的 `isOcctKernelBound()`(其判据 `_bound && getActiveKernelId() === 'occt-wasm'`
94
+ * 把注入面写死为 occt)。新判据只问「vendored registry 是否已注入当前引擎」——
95
+ * 不关心引擎 id,装配期换引擎(brepkit/mock)同样成立。
96
+ *
97
+ * @returns 注入是否已完成(vendored registry 已装配当前 BREP 引擎)。
98
+ */
99
+ export declare function isKernelInjected(): boolean;
100
+ /**
101
+ * Access the currently injected vendored kernel adapter (reads the registry).
102
+ * @throws If the bridge has not been injected.
103
+ * @returns the vendored kernel adapter for the current BREP engine.
41
104
  */
42
105
  export declare function getBrepjsKernel(): KernelAdapter;
106
+ /**
107
+ * 固定绑定 occt 内核到 vendored registry(Phase 2 前的装配方式)。
108
+ *
109
+ * @deprecated Phase 2 P2-5:固定绑定已被引擎中立的 injectCurrentBrepEngineAsKernel
110
+ * 取代。保留导出仅为兼容旧调用点(适配器层迁移期);新代码一律用注入函数。
111
+ * @returns 恒抛错——本函数已移除,仅保留签名占位。
112
+ */
113
+ export declare function bindOcctKernel(): KernelAdapter;
114
+ /**
115
+ * 旧 occt 专用注入判据(Phase 2 前语义:绑定且激活内核为 occt-wasm)。
116
+ *
117
+ * @deprecated Phase 2 P2-5:occt 专用判据已被引擎中立的 isKernelInjected() 取代。
118
+ * @returns 当前是否已注入(透传 isKernelInjected())。
119
+ */
120
+ export declare function isOcctKernelBound(): boolean;
43
121
  //# sourceMappingURL=occt-kernel-bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"occt-kernel-bridge.d.ts","sourceRoot":"","sources":["../../src/api/occt-kernel-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAIvE;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,aAAa,CAe9C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAE/C"}
1
+ {"version":3,"file":"occt-kernel-bridge.d.ts","sourceRoot":"","sources":["../../src/api/occt-kernel-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAYxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAEvE;;4DAE4D;AAC5D,eAAO,MAAM,uBAAuB,cAAc,CAAA;AAwBlD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,aAAa,CAAC,CAgB9E;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,CAMpE;AAKD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,mDAIpC,CAAA;AAmIV;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAWlF;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAGrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,aAAa,CAM9C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
@@ -1,65 +1,279 @@
1
1
  /**
2
- * L3 bridge — occt-wasm kernel single-instance injection (D10).
2
+ * L3 bridge — vendored kernel registry injection (engine-neutral, Phase 2 P2-5).
3
3
  *
4
- * The ported `kernel/occtWasm` adapter is constructor-injected (DI form, never
5
- * imports `occt-wasm` itself). This file is the **only** faijs-side place
6
- * wiring the two together (boundary rule D8/R5: core side may import the
7
- * vendored tree only from `api/`):
4
+ * 原 occt-kernel-bridge 的职责是「把 vendored kernel registry 冻结绑定到 occt-wasm
5
+ * 单实例」(D10)。Phase 2 起改为**跟随当前 BREP 引擎**:装配期把 registry 里当前
6
+ * 引擎(occt / brepkit / mock)的 `BrepEngineApi` 适配器包装为 brepjs `KernelAdapter`
7
+ * 形态注册进 vendored registry,使 `vendoredRegistry.getKernel()` 返回当前引擎——
8
+ * vendored 函数全部逻辑(命名/角色表/Result)原样保留、零改动。
8
9
  *
9
- * initOcctWasm() ──same instance──▶ OcctWasmAdapter ──▶ registerKernel
10
- * (faijs existing (vendored, DI) (vendored kernel
11
- * occt singleton) registry, D10)
10
+ * 边界规则(D8/R5)不变:本文件是 faijs 侧唯一把 vendored kernel registry 与
11
+ * faijs 引擎接线的地方;core 侧只从 `api/` import vendored 树。
12
12
  *
13
- * `occtKernel.getKernel()` returns the faijs singleton `OcctKernel`; building
14
- * the adapter over that exact instance guarantees the single-instance ban
15
- * (D10: two wasm instances would put handles in different pointer spaces and
16
- * silently desync `hasBrep`/`brepOf`/face evolution).
17
- *
18
- * See docs/plans/2026-09-01-layered-api-architecture.md §D10 / §D8.
13
+ * 装配期完整性检查(方案 §Phase 2.5):KernelAdapter 是 211 方法大接口,但 vendored
14
+ * 面存在大量**辅助构造方法**(createVector3d / createPoint3d / createDirection3d /
15
+ * createAxis1 / createAxis2 / createAxis3,见 vendored core/kernelBoundary.ts)——
16
+ * 它们不落在能力名体系内(BrepMethodKind 之外)、无法由 op 声明覆盖,任何 compat
17
+ * op / TS compat 面都可能触发。⇒ 注入前必须断言这些胶水方法在适配器上齐备,缺失
18
+ * 则在**装配期**报错(而非执行期崩)。清单见 {@link GLUE_METHODS}。
19
19
  */
20
20
  import { getKernel as getFaijsKernel } from '../occt-kernel/occtKernel.js';
21
+ import { getBrepEngine } from '../brep/engine/registry.js';
21
22
  import { OcctWasmAdapter } from '../vendored/brepjs/kernel/occtWasm/occtWasmAdapter.js';
22
- import { freezeKernels, getActiveKernelId, getKernel as getVendoredKernel, registerKernel, syncRegistryFromGlobal, syncRegistryToGlobal, } from '../vendored/brepjs/kernel/index.js';
23
- let _bound = false;
23
+ import { freezeKernels, getActiveKernelId, getKernel as getVendoredKernel, registerKernel, syncRegistryFromGlobal, syncRegistryToGlobal, __resetKernelRegistryForTests, } from '../vendored/brepjs/kernel/index.js';
24
+ /** occt-wasm 适配器在 vendored registry 中的注册 id。这是 vendored 注册表的
25
+ * 槽位名(宿主侧判据 + D10 globalThis 单例兼容),**不是**引擎身份标识——
26
+ * 实际引擎由注入的 adapter 决定(vendored 面全部无参 `getKernel()` 取默认)。 */
27
+ export const VENDORED_OCCT_KERNEL_ID = 'occt-wasm';
24
28
  /**
25
- * Bind the ported kernel registry to the faijs single occt-wasm instance.
29
+ * 装配期完整性检查清单——vendored 面辅助构造/生命周期胶水方法。
26
30
  *
27
- * Idempotent: the first call registers the adapter and freezes the registry
28
- * (D10 冻结); subsequent calls return the already-bound adapter without
29
- * re-registering. Call after `initOcctWasm()` has been run (e.g. inside
30
- * `registerOcctBrepEngine()` host assembly).
31
+ * 这些方法不在 `BrepMethodKind` 能力名体系内(能力判定无法覆盖),但 vendored 面
32
+ * 大量使用(kernelBoundary.ts / wrapperFns / castShape 等)。当前引擎的
33
+ * KernelAdapter 包装必须全部具备,否则对应 compat op / TS compat 面会在执行期崩。
31
34
  *
32
- * @returns the registered kernel adapter.
35
+ * Phase 0 盘点实证:36 个 compat op 的 vendored 函数(capability-map 64 方法)与
36
+ * kernelBoundary 都不需要 createAxis*(2D sketcher / TS compat 面需要)——清单按
37
+ * 「vendored 面实际触发面」保守枚举,缺即装配期报错。
33
38
  */
34
- export function bindOcctKernel() {
35
- // Check the SHARED registry first (globalThis singleton): a CDN-bundled faijs
36
- // instance has its own module-level `_bound = false`, but the host bundle may
37
- // already have registered+bound 'occt-wasm'. Re-registering would throw
38
- // "registry frozen" — treat an existing binding as bound instead.
39
+ const GLUE_METHODS = [
40
+ 'createVector3d',
41
+ 'createPoint3d',
42
+ 'createDirection3d',
43
+ 'createAxis1',
44
+ 'createAxis2',
45
+ 'createAxis3',
46
+ ];
47
+ let _injected = false;
48
+ /**
49
+ * Inject the currently-registered BREP engine into the vendored kernel registry
50
+ * (replaces the old occt-only `bindOcctKernel()` fixed binding, Phase 2 P2-5).
51
+ *
52
+ * 装配期调用(在 `registerOcctBrepEngine()` / 其它引擎注册之后)。从引擎注册表取
53
+ * 当前默认 BREP 引擎,按其 id 构造 KernelAdapter 形态注册进 vendored registry:
54
+ *
55
+ * - occt:`OcctWasmAdapter.fromKernel(当前引擎 primitives)`——同一 occt-wasm 单实例
56
+ * (D10 不变),211 方法完整适配器,vendored 函数行为与旧 bindOcctKernel 完全一致;
57
+ * - 其它引擎(brepkit/mock):将 BrepEngineApi 透传包装为 KernelAdapter 形态
58
+ * (`dispose`→`release` 等方法名映射 + pattern 返回形态适配),**不做方法伪造**;
59
+ * - 任一引擎注入前都做**装配期完整性检查**(GLUE_METHODS 齐备断言)。
60
+ *
61
+ * 幂等:首次调用后注册并冻结;重复调用返回已注入的适配器。
62
+ *
63
+ * @returns 注册进 vendored registry 的 kernel adapter。
64
+ * @throws 无 BREP 引擎注册;或完整性检查失败(胶水方法缺失)——装配期报错。
65
+ */
66
+ export async function injectCurrentBrepEngineAsKernel() {
67
+ // CDN 宿主跨实例同步:host bundle 已注入则直接复用(同旧 bindOcctKernel 语义)。
68
+ // 短路判据与 isKernelInjected() 一致(含 registry 侧激活 id 分支),避免
69
+ // 「registry 已注入但模块级 _injected=false」时走完整路径撞 frozen 抛错。
39
70
  syncRegistryFromGlobal();
40
- if (_bound)
41
- return getVendoredKernel('occt-wasm');
42
- const faijsKernel = getFaijsKernel();
43
- const adapter = OcctWasmAdapter.fromKernel(faijsKernel);
44
- registerKernel('occt-wasm', adapter);
71
+ if (isKernelInjected())
72
+ return getVendoredKernel();
73
+ const engine = await getBrepEngine();
74
+ const adapter = buildKernelAdapter(engine);
75
+ assertGlueMethodsComplete(engine.id, adapter);
76
+ registerKernel(VENDORED_OCCT_KERNEL_ID, adapter);
45
77
  freezeKernels();
46
- _bound = true;
78
+ _injected = true;
47
79
  syncRegistryToGlobal();
48
80
  return adapter;
49
81
  }
50
82
  /**
51
- * Whether the vendored kernel registry has been bound (D10).
52
- * @returns true once bound to the occt-wasm kernel.
83
+ * 按引擎 id 构造 KernelAdapter 形态(occt 走完整适配器;其它引擎透传包装)。
84
+ *
85
+ * occt 分支保持旧 bindOcctKernel 行为:OcctWasmAdapter.fromKernel 需要 occt-wasm
86
+ * 实例(OcctKernelOwner)。当前引擎的 primitives 即 initOcctWasm 单例(occtApi 是
87
+ * 同一实例的实例覆盖,方法面完整),转换安全。
88
+ *
89
+ * 其它引擎分支:BrepEngineApi → KernelAdapter 契约面——
90
+ * - `dispose` → `release`(vendored 面用 dispose,BrepEngineApi 用 release);
91
+ * - `linearPattern` / `circularPattern` 的方向/中心/轴参数是 Vec3 对象(BrepEngineApi
92
+ * 口径),vendored 面传 [x,y,z] 三元组——包装为对象再转发;
93
+ * - 返回 BrepHandle[](BrepEngineApi)→ KernelShape[](vendored castResultShape 消费
94
+ * `.wrapped` + `.type`)——包装为 `{ wrapped, type: 'solid' }`;
95
+ * - `gridPattern` 返回单 BrepHandle → 单 KernelShape(compound 语义一致)。
96
+ * 不声明 `rectangularPattern`(纯 JS 组合,不调内核——capability-map 实证)。
97
+ *
98
+ * ⚠️ 不伪造:BrepEngineApi 未提供的方法**不**补桩;vendored 函数若触发,由
99
+ * compat op 的静态能力判定(backend-dispatch,Phase 1)在执行前拦截。
100
+ *
101
+ * @param engine - 当前 BREP 引擎(装配期从引擎注册表取得)。
102
+ * @returns 该引擎的 vendored KernelAdapter(occt → OcctWasmAdapter.fromKernel;
103
+ * 其它引擎 → BrepEngineApi 透传包装,pattern 族 Vec3↔三元组适配)。
104
+ */
105
+ export function buildKernelAdapter(engine) {
106
+ if (engine.id === 'occt') {
107
+ const faijsKernel = engine.primitives;
108
+ return OcctWasmAdapter.fromKernel(faijsKernel);
109
+ }
110
+ return wrapBrepEngineApi(engine.primitives);
111
+ }
112
+ /** No-op `delete` for synthesized glue objects (mirrors vendored `noop`). */
113
+ const noop = () => { };
114
+ /**
115
+ * vendored kernel methods with no source capability in BrepEngineApi.
116
+ * Registered explicitly (not silently undefined): tests assert this list and
117
+ * the engine-contract gap is a separate decision, not a wrapping bug. No
118
+ * stubs, no fake zeros — a silent 0 is worse than a crash.
53
119
  */
54
- export function isOcctKernelBound() {
55
- return _bound && getActiveKernelId() === 'occt-wasm';
120
+ export const UNMAPPED_VENDORED_MEASURE_METHODS = [
121
+ 'area',
122
+ 'length',
123
+ 'linearCenterOfMass',
124
+ ];
125
+ /** Unwrap a vendored KernelShape (handle view or bare number) to a BrepHandle. */
126
+ function unwrapHandle(h) {
127
+ if (typeof h === 'number')
128
+ return h;
129
+ const view = h;
130
+ return typeof view.id === 'number' ? view.id : h;
131
+ }
132
+ /**
133
+ * Map vendored measure method names/shapes onto BrepEngineApi capabilities.
134
+ * The vendored measure face calls `kernel.volume/area/length/centerOfMass/...`
135
+ * (its own naming); the occt adapter carries an internal mapping layer — this
136
+ * is the engine-neutral equivalent for any wrapped BrepEngineApi. Only real
137
+ * BrepEngineApi capabilities are mapped; the rest stay in the gap registry.
138
+ */
139
+ function mapMeasureMethods(adapter, api) {
140
+ adapter['volume'] = (s) => api.getVolume(unwrapHandle(s));
141
+ adapter['centerOfMass'] = (s) => {
142
+ const v = api.getCenterOfMass(unwrapHandle(s));
143
+ return [v.x, v.y, v.z];
144
+ };
145
+ adapter['boundingBox'] = (s) => {
146
+ const bb = api.getBoundingBox(unwrapHandle(s), true);
147
+ return {
148
+ min: [bb.xmin, bb.ymin, bb.zmin],
149
+ max: [bb.xmax, bb.ymax, bb.zmax],
150
+ };
151
+ };
152
+ // shapeType / isNull: same name, same semantics — already covered by the
153
+ // transparent pass-through in wrapBrepEngineApi; listed here for docs only.
154
+ // Known contract gaps (UNMAPPED_VENDORED_MEASURE_METHODS) are NOT stubbed:
155
+ // they remain undefined so tests can pin the gap explicitly.
56
156
  }
57
157
  /**
58
- * Access the currently bound vendored kernel adapter (reads the registry).
59
- * @throws If the bridge has not been bound.
60
- * @returns the vendored occt-wasm kernel adapter.
158
+ * Synthesize the vendored glue/auxiliary construction methods over any engine's
159
+ * primitives. These 6 methods are pure JS data-literal constructors in the
160
+ * vendored surface (zero kernel calls — see vendored constructionOps.ts), i.e.
161
+ * a *calling convention*, not a kernel capability — so they are synthesized at
162
+ * the faijs wrapper layer (engine-neutral) rather than added to BrepEngineApi.
163
+ * Field shapes are copied verbatim from the vendored occt adapter; `delete` is
164
+ * mandatory (kernelBoundary's with* helpers call it in `finally`).
165
+ */
166
+ function synthesizeGlueMethods(adapter) {
167
+ const pnt = (x, y, z, __type) => ({ x, y, z, __type, delete: noop });
168
+ adapter['createPoint3d'] = (x, y, z) => pnt(x, y, z, 'point3d');
169
+ adapter['createDirection3d'] = (x, y, z) => pnt(x, y, z, 'direction3d');
170
+ adapter['createVector3d'] = (x, y, z) => pnt(x, y, z, 'vector3d');
171
+ adapter['createAxis1'] = (cx, cy, cz, dx, dy, dz) => ({
172
+ origin: { x: cx, y: cy, z: cz },
173
+ direction: { x: dx, y: dy, z: dz },
174
+ __type: 'axis1',
175
+ delete: noop,
176
+ });
177
+ // axis2/axis3: 6- or 9-arg forms (origin + zDir + optional xDir).
178
+ const makeAxis = (__type) => (ox, oy, oz, zx, zy, zz, xx, xy, xz) => ({
179
+ origin: { x: ox, y: oy, z: oz },
180
+ zDir: { x: zx, y: zy, z: zz },
181
+ xDir: xx !== undefined ? { x: xx, y: xy, z: xz } : undefined,
182
+ __type,
183
+ delete: noop,
184
+ });
185
+ adapter['createAxis2'] = makeAxis('axis2');
186
+ adapter['createAxis3'] = makeAxis('axis3');
187
+ }
188
+ /** 把 BrepEngineApi 透传包装为 KernelAdapter 形态(非 occt 引擎)。 */
189
+ function wrapBrepEngineApi(api) {
190
+ const adapter = {
191
+ // 生命周期:vendored 面统一用 dispose(BrepEngineApi 用 release)。
192
+ dispose: (h) => api.release(h),
193
+ };
194
+ synthesizeGlueMethods(adapter);
195
+ for (const key of Object.keys(api)) {
196
+ if (key === 'release')
197
+ continue; // 上面已映射为 dispose
198
+ adapter[key] = api[key];
199
+ }
200
+ // 测量面映射在透传之后追加,覆盖同名键(vendored 名 → BrepEngineApi 名 + 形态转换)。
201
+ mapMeasureMethods(adapter, api);
202
+ // pattern 族形态适配(BrepEngineApi 对象 Vec3 ↔ vendored 三元组)。
203
+ adapter['linearPattern'] = (shape, direction, spacing, count) => api.linearPattern(shape, { x: direction[0], y: direction[1], z: direction[2] }, spacing, count).map((h) => ({ wrapped: h, type: 'solid' }));
204
+ adapter['circularPattern'] = (shape, center, axis, angleStep, count) => api.circularPattern(shape, { x: center[0], y: center[1], z: center[2] }, { x: axis[0], y: axis[1], z: axis[2] }, angleStep, count).map((h) => ({ wrapped: h, type: 'solid' }));
205
+ adapter['gridPattern'] = (shape, directionX, directionY, spacingX, spacingY, countX, countY) => ({
206
+ wrapped: api.gridPattern(shape, { x: directionX[0], y: directionX[1], z: directionX[2] }, { x: directionY[0], y: directionY[1], z: directionY[2] }, spacingX, spacingY, countX, countY),
207
+ type: 'compound',
208
+ });
209
+ return adapter;
210
+ }
211
+ /**
212
+ * 装配期完整性检查:KernelAdapter 胶水方法齐备断言。
213
+ *
214
+ * @param id - 引擎注册 id(报错时定位到引擎)。
215
+ * @param adapter - 待注入 vendored registry 的 KernelAdapter。
216
+ * @throws 缺失任一胶水方法 → 装配期报错(列出引擎 id 与缺失方法名)。
217
+ */
218
+ export function assertGlueMethodsComplete(id, adapter) {
219
+ const missing = GLUE_METHODS.filter((m) => typeof adapter[m] !== 'function');
220
+ if (missing.length > 0) {
221
+ throw new Error(`[faijs] BREP engine '${id}' cannot back the vendored compat surface: KernelAdapter ` +
222
+ `missing glue method(s): ${missing.join(', ')}. These auxiliary construction methods ` +
223
+ `(createVector3d / createPoint3d / createDirection3d / createAxis1/2/3) are required by ` +
224
+ `the vendored kernel boundary and cannot be covered by capability declarations. ` +
225
+ `Fix the adapter (add real implementations) or do not inject this engine into the vendored registry.`);
226
+ }
227
+ }
228
+ /**
229
+ * Test-only: clear the injection cache and reset the vendored kernel registry
230
+ * so a re-assembly (e.g. switching engines in tests) re-runs buildKernelAdapter
231
+ * + assertGlueMethodsComplete for the new engine. Never called in prod.
232
+ */
233
+ export function __resetKernelInjectionForTests() {
234
+ _injected = false;
235
+ __resetKernelRegistryForTests();
236
+ }
237
+ /**
238
+ * Whether the vendored kernel registry has been injected (engine-neutral D10).
239
+ *
240
+ * 取代旧的 `isOcctKernelBound()`(其判据 `_bound && getActiveKernelId() === 'occt-wasm'`
241
+ * 把注入面写死为 occt)。新判据只问「vendored registry 是否已注入当前引擎」——
242
+ * 不关心引擎 id,装配期换引擎(brepkit/mock)同样成立。
243
+ *
244
+ * @returns 注入是否已完成(vendored registry 已装配当前 BREP 引擎)。
245
+ */
246
+ export function isKernelInjected() {
247
+ syncRegistryFromGlobal();
248
+ return _injected || getActiveKernelId() !== null;
249
+ }
250
+ /**
251
+ * Access the currently injected vendored kernel adapter (reads the registry).
252
+ * @throws If the bridge has not been injected.
253
+ * @returns the vendored kernel adapter for the current BREP engine.
61
254
  */
62
255
  export function getBrepjsKernel() {
63
- return getVendoredKernel('occt-wasm');
256
+ return getVendoredKernel();
257
+ }
258
+ /**
259
+ * 固定绑定 occt 内核到 vendored registry(Phase 2 前的装配方式)。
260
+ *
261
+ * @deprecated Phase 2 P2-5:固定绑定已被引擎中立的 injectCurrentBrepEngineAsKernel
262
+ * 取代。保留导出仅为兼容旧调用点(适配器层迁移期);新代码一律用注入函数。
263
+ * @returns 恒抛错——本函数已移除,仅保留签名占位。
264
+ */
265
+ export function bindOcctKernel() {
266
+ void getFaijsKernel;
267
+ throw new Error('[faijs] bindOcctKernel() removed (Phase 2 P2-5): use injectCurrentBrepEngineAsKernel() ' +
268
+ 'during host assembly to inject the current BREP engine into the vendored registry.');
269
+ }
270
+ /**
271
+ * 旧 occt 专用注入判据(Phase 2 前语义:绑定且激活内核为 occt-wasm)。
272
+ *
273
+ * @deprecated Phase 2 P2-5:occt 专用判据已被引擎中立的 isKernelInjected() 取代。
274
+ * @returns 当前是否已注入(透传 isKernelInjected())。
275
+ */
276
+ export function isOcctKernelBound() {
277
+ return isKernelInjected();
64
278
  }
65
279
  //# sourceMappingURL=occt-kernel-bridge.js.map