@faicad/faijs 0.22.2 → 0.29.5

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 (488) hide show
  1. package/LICENSE +202 -28
  2. package/dist/api/api-namespace.d.ts +5 -5
  3. package/dist/api/api-namespace.d.ts.map +1 -1
  4. package/dist/api/api-namespace.js +4 -4
  5. package/dist/api/api-namespace.js.map +1 -1
  6. package/dist/api/appearance.d.ts +138 -0
  7. package/dist/api/appearance.d.ts.map +1 -0
  8. package/dist/api/appearance.js +230 -0
  9. package/dist/api/appearance.js.map +1 -0
  10. package/dist/api/assert.d.ts +2 -2
  11. package/dist/api/assert.js +8 -8
  12. package/dist/api/assert.js.map +1 -1
  13. package/dist/api/asset.d.ts +1 -1
  14. package/dist/api/asset.js +2 -2
  15. package/dist/api/asset.js.map +1 -1
  16. package/dist/api/boolean.d.ts +1 -1
  17. package/dist/api/boolean.d.ts.map +1 -1
  18. package/dist/api/boolean.js +128 -16
  19. package/dist/api/boolean.js.map +1 -1
  20. package/dist/api/cadquery-selectors/borrow-bridge.d.ts +14 -0
  21. package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -0
  22. package/dist/api/cadquery-selectors/borrow-bridge.js +52 -0
  23. package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -0
  24. package/dist/api/cadquery-selectors/edge.d.ts +40 -0
  25. package/dist/api/cadquery-selectors/edge.d.ts.map +1 -0
  26. package/dist/api/cadquery-selectors/edge.js +70 -0
  27. package/dist/api/cadquery-selectors/edge.js.map +1 -0
  28. package/dist/api/cadquery-selectors/entity.d.ts +121 -0
  29. package/dist/api/cadquery-selectors/entity.d.ts.map +1 -0
  30. package/dist/api/cadquery-selectors/entity.js +167 -0
  31. package/dist/api/cadquery-selectors/entity.js.map +1 -0
  32. package/dist/api/cadquery-selectors/face.d.ts +33 -0
  33. package/dist/api/cadquery-selectors/face.d.ts.map +1 -0
  34. package/dist/api/cadquery-selectors/face.js +353 -0
  35. package/dist/api/cadquery-selectors/face.js.map +1 -0
  36. package/dist/api/cadquery-selectors/grammar.d.ts +50 -0
  37. package/dist/api/cadquery-selectors/grammar.d.ts.map +1 -0
  38. package/dist/api/cadquery-selectors/grammar.js +345 -0
  39. package/dist/api/cadquery-selectors/grammar.js.map +1 -0
  40. package/dist/api/cadquery-selectors/index.d.ts +18 -0
  41. package/dist/api/cadquery-selectors/index.d.ts.map +1 -0
  42. package/dist/api/cadquery-selectors/index.js +17 -0
  43. package/dist/api/cadquery-selectors/index.js.map +1 -0
  44. package/dist/api/cadquery-selectors/predicates.d.ts +76 -0
  45. package/dist/api/cadquery-selectors/predicates.d.ts.map +1 -0
  46. package/dist/api/cadquery-selectors/predicates.js +85 -0
  47. package/dist/api/cadquery-selectors/predicates.js.map +1 -0
  48. package/dist/api/cadquery-selectors/resolve.d.ts +41 -0
  49. package/dist/api/cadquery-selectors/resolve.d.ts.map +1 -0
  50. package/dist/api/cadquery-selectors/resolve.js +243 -0
  51. package/dist/api/cadquery-selectors/resolve.js.map +1 -0
  52. package/dist/api/cadquery-selectors/types.d.ts +96 -0
  53. package/dist/api/cadquery-selectors/types.d.ts.map +1 -0
  54. package/dist/api/cadquery-selectors/types.js +11 -0
  55. package/dist/api/cadquery-selectors/types.js.map +1 -0
  56. package/dist/api/chamfer.d.ts +13 -5
  57. package/dist/api/chamfer.d.ts.map +1 -1
  58. package/dist/api/chamfer.js +63 -7
  59. package/dist/api/chamfer.js.map +1 -1
  60. package/dist/api/compound-geom.d.ts +1 -1
  61. package/dist/api/compound-geom.js +1 -1
  62. package/dist/api/compound-geom.js.map +1 -1
  63. package/dist/api/draft.d.ts +1 -1
  64. package/dist/api/draft.js +1 -1
  65. package/dist/api/draft.js.map +1 -1
  66. package/dist/api/edge-ref.d.ts +1 -1
  67. package/dist/api/edge-ref.d.ts.map +1 -1
  68. package/dist/api/edge-ref.js +11 -3
  69. package/dist/api/edge-ref.js.map +1 -1
  70. package/dist/api/engrave.d.ts +1 -1
  71. package/dist/api/engrave.js +7 -7
  72. package/dist/api/engrave.js.map +1 -1
  73. package/dist/api/extrude.d.ts +6 -1
  74. package/dist/api/extrude.d.ts.map +1 -1
  75. package/dist/api/extrude.js +59 -5
  76. package/dist/api/extrude.js.map +1 -1
  77. package/dist/api/face-ref.d.ts +1 -1
  78. package/dist/api/face-ref.js +1 -1
  79. package/dist/api/face-ref.js.map +1 -1
  80. package/dist/api/feature-repair.d.ts +1 -1
  81. package/dist/api/feature-repair.js +1 -1
  82. package/dist/api/feature-repair.js.map +1 -1
  83. package/dist/api/fillet-variable.d.ts +1 -1
  84. package/dist/api/fillet-variable.js +1 -1
  85. package/dist/api/fillet-variable.js.map +1 -1
  86. package/dist/api/fillet.d.ts +28 -8
  87. package/dist/api/fillet.d.ts.map +1 -1
  88. package/dist/api/fillet.js +64 -9
  89. package/dist/api/fillet.js.map +1 -1
  90. package/dist/api/geom.d.ts +1 -1
  91. package/dist/api/geom.js +1 -1
  92. package/dist/api/geom.js.map +1 -1
  93. package/dist/api/helix.d.ts +1 -1
  94. package/dist/api/helix.js +1 -1
  95. package/dist/api/helix.js.map +1 -1
  96. package/dist/api/import-brep.d.ts +20 -2
  97. package/dist/api/import-brep.d.ts.map +1 -1
  98. package/dist/api/import-brep.js +28 -3
  99. package/dist/api/import-brep.js.map +1 -1
  100. package/dist/api/import-step.d.ts +17 -2
  101. package/dist/api/import-step.d.ts.map +1 -1
  102. package/dist/api/import-step.js +51 -3
  103. package/dist/api/import-step.js.map +1 -1
  104. package/dist/api/index.d.ts +6 -1
  105. package/dist/api/index.d.ts.map +1 -1
  106. package/dist/api/index.js +7 -2
  107. package/dist/api/index.js.map +1 -1
  108. package/dist/api/internal/compat-op.js +1 -1
  109. package/dist/api/internal/compat-op.js.map +1 -1
  110. package/dist/api/internal/mesh-solid-op.d.ts +236 -0
  111. package/dist/api/internal/mesh-solid-op.d.ts.map +1 -0
  112. package/dist/api/internal/mesh-solid-op.js +352 -0
  113. package/dist/api/internal/mesh-solid-op.js.map +1 -0
  114. package/dist/api/internal/svg-asset-resolver.d.ts +1 -1
  115. package/dist/api/internal/svg-asset-resolver.js +1 -1
  116. package/dist/api/internal/svg-asset-resolver.js.map +1 -1
  117. package/dist/api/knurl.d.ts +1 -1
  118. package/dist/api/knurl.js +2 -2
  119. package/dist/api/knurl.js.map +1 -1
  120. package/dist/api/loft.d.ts +1 -1
  121. package/dist/api/loft.js +1 -1
  122. package/dist/api/loft.js.map +1 -1
  123. package/dist/api/measurement/index.d.ts +9 -5
  124. package/dist/api/measurement/index.d.ts.map +1 -1
  125. package/dist/api/measurement/index.js +47 -20
  126. package/dist/api/measurement/index.js.map +1 -1
  127. package/dist/api/meta.d.ts +93 -0
  128. package/dist/api/meta.d.ts.map +1 -0
  129. package/dist/api/meta.js +99 -0
  130. package/dist/api/meta.js.map +1 -0
  131. package/dist/api/pattern.d.ts +5 -3
  132. package/dist/api/pattern.d.ts.map +1 -1
  133. package/dist/api/pattern.js +32 -4
  134. package/dist/api/pattern.js.map +1 -1
  135. package/dist/api/place.d.ts +1 -1
  136. package/dist/api/place.js +1 -1
  137. package/dist/api/place.js.map +1 -1
  138. package/dist/api/primitives.d.ts +1 -1
  139. package/dist/api/primitives.d.ts.map +1 -1
  140. package/dist/api/primitives.js +119 -4
  141. package/dist/api/primitives.js.map +1 -1
  142. package/dist/api/profile.d.ts +39 -12
  143. package/dist/api/profile.d.ts.map +1 -1
  144. package/dist/api/profile.js +4 -4
  145. package/dist/api/profile.js.map +1 -1
  146. package/dist/api/reconcile.d.ts +1 -1
  147. package/dist/api/reconcile.js +1 -1
  148. package/dist/api/reconcile.js.map +1 -1
  149. package/dist/api/replicate.d.ts.map +1 -1
  150. package/dist/api/replicate.js +122 -1
  151. package/dist/api/replicate.js.map +1 -1
  152. package/dist/api/screw.d.ts +1 -1
  153. package/dist/api/screw.js +3 -3
  154. package/dist/api/screw.js.map +1 -1
  155. package/dist/api/sdf.d.ts +1 -1
  156. package/dist/api/sdf.js +2 -2
  157. package/dist/api/sdf.js.map +1 -1
  158. package/dist/api/section-by-plane.d.ts +1 -1
  159. package/dist/api/section-by-plane.d.ts.map +1 -1
  160. package/dist/api/section-by-plane.js +2 -1
  161. package/dist/api/section-by-plane.js.map +1 -1
  162. package/dist/api/shell.d.ts +11 -4
  163. package/dist/api/shell.d.ts.map +1 -1
  164. package/dist/api/shell.js +53 -7
  165. package/dist/api/shell.js.map +1 -1
  166. package/dist/api/sketch-on-face.d.ts +41 -0
  167. package/dist/api/sketch-on-face.d.ts.map +1 -1
  168. package/dist/api/sketch-on-face.js +100 -1
  169. package/dist/api/sketch-on-face.js.map +1 -1
  170. package/dist/api/sketch-on-plane.d.ts +7 -5
  171. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  172. package/dist/api/sketch-on-plane.js +6 -7
  173. package/dist/api/sketch-on-plane.js.map +1 -1
  174. package/dist/api/split-by-plane.d.ts +1 -1
  175. package/dist/api/split-by-plane.d.ts.map +1 -1
  176. package/dist/api/split-by-plane.js +2 -1
  177. package/dist/api/split-by-plane.js.map +1 -1
  178. package/dist/api/split.d.ts +1 -1
  179. package/dist/api/split.js +2 -2
  180. package/dist/api/split.js.map +1 -1
  181. package/dist/api/sweep.d.ts +1 -1
  182. package/dist/api/sweep.js +1 -1
  183. package/dist/api/sweep.js.map +1 -1
  184. package/dist/api/thicken.d.ts +1 -1
  185. package/dist/api/thicken.js +1 -1
  186. package/dist/api/thicken.js.map +1 -1
  187. package/dist/api/topo-resolve.d.ts +74 -1
  188. package/dist/api/topo-resolve.d.ts.map +1 -1
  189. package/dist/api/topo-resolve.js +180 -2
  190. package/dist/api/topo-resolve.js.map +1 -1
  191. package/dist/api/transform.d.ts +5 -1
  192. package/dist/api/transform.d.ts.map +1 -1
  193. package/dist/api/transform.js +62 -11
  194. package/dist/api/transform.js.map +1 -1
  195. package/dist/api/wire.d.ts +1 -1
  196. package/dist/api/wire.js +1 -1
  197. package/dist/api/wire.js.map +1 -1
  198. package/dist/brep/brep-ops.d.ts +9 -7
  199. package/dist/brep/brep-ops.d.ts.map +1 -1
  200. package/dist/brep/brep-ops.js +50 -26
  201. package/dist/brep/brep-ops.js.map +1 -1
  202. package/dist/brep/brep-topology.d.ts +5 -4
  203. package/dist/brep/brep-topology.d.ts.map +1 -1
  204. package/dist/brep/brep-topology.js +6 -5
  205. package/dist/brep/brep-topology.js.map +1 -1
  206. package/dist/brep/effective-deflection.d.ts +35 -0
  207. package/dist/brep/effective-deflection.d.ts.map +1 -0
  208. package/dist/brep/effective-deflection.js +49 -0
  209. package/dist/brep/effective-deflection.js.map +1 -0
  210. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  211. package/dist/brep/engine/adapters/brep-mock.js +27 -0
  212. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  213. package/dist/brep/engine/adapters/brepkit.d.ts +18 -0
  214. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  215. package/dist/brep/engine/adapters/brepkit.js +46 -1
  216. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  217. package/dist/brep/engine/adapters/occt.d.ts +1 -1
  218. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  219. package/dist/brep/engine/adapters/occt.js +4 -2
  220. package/dist/brep/engine/adapters/occt.js.map +1 -1
  221. package/dist/brep/engine/primitives.d.ts +29 -7
  222. package/dist/brep/engine/primitives.d.ts.map +1 -1
  223. package/dist/brep/engine/primitives.js.map +1 -1
  224. package/dist/brep/engine/registry.d.ts +24 -1
  225. package/dist/brep/engine/registry.d.ts.map +1 -1
  226. package/dist/brep/engine/registry.js +24 -0
  227. package/dist/brep/engine/registry.js.map +1 -1
  228. package/dist/brep/engine/types.d.ts +54 -3
  229. package/dist/brep/engine/types.d.ts.map +1 -1
  230. package/dist/brep/engine/types.js +10 -0
  231. package/dist/brep/engine/types.js.map +1 -1
  232. package/dist/brep/export/export-model.d.ts +40 -0
  233. package/dist/brep/export/export-model.d.ts.map +1 -1
  234. package/dist/brep/export/export-model.js +274 -30
  235. package/dist/brep/export/export-model.js.map +1 -1
  236. package/dist/brep/export/step-meta-header.d.ts +102 -0
  237. package/dist/brep/export/step-meta-header.d.ts.map +1 -0
  238. package/dist/brep/export/step-meta-header.js +225 -0
  239. package/dist/brep/export/step-meta-header.js.map +1 -0
  240. package/dist/brep/export/step.d.ts +5 -1
  241. package/dist/brep/export/step.d.ts.map +1 -1
  242. package/dist/brep/export/step.js +11 -2
  243. package/dist/brep/export/step.js.map +1 -1
  244. package/dist/brep/face-evolution.d.ts +1 -1
  245. package/dist/brep/face-evolution.d.ts.map +1 -1
  246. package/dist/brep/face-evolution.js +20 -1
  247. package/dist/brep/face-evolution.js.map +1 -1
  248. package/dist/brep/handle-bridge.d.ts +1 -1
  249. package/dist/brep/handle-bridge.js +1 -1
  250. package/dist/brep/handle-bridge.js.map +1 -1
  251. package/dist/brep/mesh-solid.d.ts +218 -0
  252. package/dist/brep/mesh-solid.d.ts.map +1 -0
  253. package/dist/brep/mesh-solid.js +229 -0
  254. package/dist/brep/mesh-solid.js.map +1 -0
  255. package/dist/brep/text/fontRegistry.d.ts +32 -1
  256. package/dist/brep/text/fontRegistry.d.ts.map +1 -1
  257. package/dist/brep/text/fontRegistry.js +51 -1
  258. package/dist/brep/text/fontRegistry.js.map +1 -1
  259. package/dist/brep/text/text-to-solid.d.ts.map +1 -1
  260. package/dist/brep/text/text-to-solid.js +8 -3
  261. package/dist/brep/text/text-to-solid.js.map +1 -1
  262. package/dist/brepkit-kernel/brepkitKernel.d.ts +18 -2
  263. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  264. package/dist/brepkit-kernel/brepkitKernel.js +449 -123
  265. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  266. package/dist/brepkit-kernel/brepkitWasm.d.ts +8 -0
  267. package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
  268. package/dist/brepkit-kernel/brepkitWasm.js +10 -0
  269. package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
  270. package/dist/browser-host/browser-font-provider.d.ts +12 -0
  271. package/dist/browser-host/browser-font-provider.d.ts.map +1 -1
  272. package/dist/browser-host/browser-font-provider.js +25 -0
  273. package/dist/browser-host/browser-font-provider.js.map +1 -1
  274. package/dist/browser.d.ts +6 -3
  275. package/dist/browser.d.ts.map +1 -1
  276. package/dist/browser.js +10 -3
  277. package/dist/browser.js.map +1 -1
  278. package/dist/cad-runtime/backend-dispatch.d.ts +28 -3
  279. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  280. package/dist/cad-runtime/backend-dispatch.js +119 -4
  281. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  282. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  283. package/dist/cad-runtime/direct-executor.d.ts +15 -3
  284. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  285. package/dist/cad-runtime/direct-executor.js +33 -1
  286. package/dist/cad-runtime/direct-executor.js.map +1 -1
  287. package/dist/cad-runtime/ports.d.ts +3 -3
  288. package/dist/cad-runtime/ports.d.ts.map +1 -1
  289. package/dist/cad-runtime/ports.js.map +1 -1
  290. package/dist/cad-runtime/preview-exec.d.ts +4 -4
  291. package/dist/cad-runtime/preview-exec.js +2 -2
  292. package/dist/cad-runtime/preview-exec.js.map +1 -1
  293. package/dist/cad-runtime/runtime.d.ts +42 -7
  294. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  295. package/dist/cad-runtime/runtime.js +68 -5
  296. package/dist/cad-runtime/runtime.js.map +1 -1
  297. package/dist/define-op.d.ts +15 -1
  298. package/dist/define-op.d.ts.map +1 -1
  299. package/dist/define-op.js +73 -2
  300. package/dist/define-op.js.map +1 -1
  301. package/dist/env-agnostic.d.ts +2 -2
  302. package/dist/env-agnostic.d.ts.map +1 -1
  303. package/dist/env-agnostic.js +1 -1
  304. package/dist/env-agnostic.js.map +1 -1
  305. package/dist/geometry2d/adapt.d.ts +39 -4
  306. package/dist/geometry2d/adapt.d.ts.map +1 -1
  307. package/dist/geometry2d/adapt.js +14 -3
  308. package/dist/geometry2d/adapt.js.map +1 -1
  309. package/dist/geometry2d/blueprint.d.ts +2 -2
  310. package/dist/geometry2d/blueprint.js +2 -2
  311. package/dist/geometry2d/blueprint.js.map +1 -1
  312. package/dist/geometry2d/bridge/lift-on-plane.d.ts +18 -8
  313. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
  314. package/dist/geometry2d/bridge/lift-on-plane.js +65 -12
  315. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
  316. package/dist/geometry2d/bridge/plane.d.ts +17 -0
  317. package/dist/geometry2d/bridge/plane.d.ts.map +1 -1
  318. package/dist/geometry2d/bridge/plane.js +22 -0
  319. package/dist/geometry2d/bridge/plane.js.map +1 -1
  320. package/dist/geometry2d/curve2d.d.ts +25 -0
  321. package/dist/geometry2d/curve2d.d.ts.map +1 -1
  322. package/dist/geometry2d/curve2d.js +41 -5
  323. package/dist/geometry2d/curve2d.js.map +1 -1
  324. package/dist/index.d.ts +6 -2
  325. package/dist/index.d.ts.map +1 -1
  326. package/dist/index.js +10 -3
  327. package/dist/index.js.map +1 -1
  328. package/dist/io/bytes-node.d.ts +11 -0
  329. package/dist/io/bytes-node.d.ts.map +1 -0
  330. package/dist/io/bytes-node.js +28 -0
  331. package/dist/io/bytes-node.js.map +1 -0
  332. package/dist/io/bytes.d.ts +33 -0
  333. package/dist/io/bytes.d.ts.map +1 -0
  334. package/dist/io/bytes.js +41 -0
  335. package/dist/io/bytes.js.map +1 -0
  336. package/dist/io/fai-zip/container-read.d.ts +102 -0
  337. package/dist/io/fai-zip/container-read.d.ts.map +1 -0
  338. package/dist/io/fai-zip/container-read.js +305 -0
  339. package/dist/io/fai-zip/container-read.js.map +1 -0
  340. package/dist/io/fai-zip/container-write.d.ts +70 -0
  341. package/dist/io/fai-zip/container-write.d.ts.map +1 -0
  342. package/dist/io/fai-zip/container-write.js +186 -0
  343. package/dist/io/fai-zip/container-write.js.map +1 -0
  344. package/dist/io/fai-zip/container.d.ts +107 -0
  345. package/dist/io/fai-zip/container.d.ts.map +1 -0
  346. package/dist/io/fai-zip/container.js +89 -0
  347. package/dist/io/fai-zip/container.js.map +1 -0
  348. package/dist/io/fai-zip/index.d.ts +18 -0
  349. package/dist/io/fai-zip/index.d.ts.map +1 -0
  350. package/dist/io/fai-zip/index.js +4 -0
  351. package/dist/io/fai-zip/index.js.map +1 -0
  352. package/dist/io/index.d.ts +10 -0
  353. package/dist/io/index.d.ts.map +1 -0
  354. package/dist/io/index.js +13 -0
  355. package/dist/io/index.js.map +1 -0
  356. package/dist/io/zip.d.ts +68 -0
  357. package/dist/io/zip.d.ts.map +1 -0
  358. package/dist/io/zip.js +147 -0
  359. package/dist/io/zip.js.map +1 -0
  360. package/dist/lang/code-to-args.d.ts +1 -1
  361. package/dist/lang/code-to-args.js +1 -1
  362. package/dist/lang/code-to-args.js.map +1 -1
  363. package/dist/lang/metadata-extractor.d.ts.map +1 -1
  364. package/dist/lang/metadata-extractor.js +2 -21
  365. package/dist/lang/metadata-extractor.js.map +1 -1
  366. package/dist/lang/statement-summary.d.ts +1 -1
  367. package/dist/lang/statement-summary.js +1 -1
  368. package/dist/lang/statement-summary.js.map +1 -1
  369. package/dist/lang/types.d.ts +6 -7
  370. package/dist/lang/types.d.ts.map +1 -1
  371. package/dist/lang/types.js +1 -1
  372. package/dist/lang/types.js.map +1 -1
  373. package/dist/mesh/index.d.ts +2 -1
  374. package/dist/mesh/index.d.ts.map +1 -1
  375. package/dist/mesh/index.js +2 -1
  376. package/dist/mesh/index.js.map +1 -1
  377. package/dist/mesh/io.d.ts +13 -0
  378. package/dist/mesh/io.d.ts.map +1 -1
  379. package/dist/mesh/io.js +38 -17
  380. package/dist/mesh/io.js.map +1 -1
  381. package/dist/mesh/primitives.d.ts.map +1 -1
  382. package/dist/mesh/primitives.js +41 -6
  383. package/dist/mesh/primitives.js.map +1 -1
  384. package/dist/mesh/reconcile.d.ts +1 -1
  385. package/dist/mesh/reconcile.js +1 -1
  386. package/dist/mesh/reconcile.js.map +1 -1
  387. package/dist/mesh/rigid-transform.d.ts +3 -3
  388. package/dist/mesh/rigid-transform.js +3 -3
  389. package/dist/mesh/rigid-transform.js.map +1 -1
  390. package/dist/mesh/stl-unit.d.ts +24 -0
  391. package/dist/mesh/stl-unit.d.ts.map +1 -0
  392. package/dist/mesh/stl-unit.js +17 -0
  393. package/dist/mesh/stl-unit.js.map +1 -0
  394. package/dist/mesh/threemf-bambu.d.ts +142 -0
  395. package/dist/mesh/threemf-bambu.d.ts.map +1 -0
  396. package/dist/mesh/threemf-bambu.js +334 -0
  397. package/dist/mesh/threemf-bambu.js.map +1 -0
  398. package/dist/mesh/threemf-loader.d.ts +65 -7
  399. package/dist/mesh/threemf-loader.d.ts.map +1 -1
  400. package/dist/mesh/threemf-loader.js +738 -99
  401. package/dist/mesh/threemf-loader.js.map +1 -1
  402. package/dist/mesh/threemf-view.d.ts +71 -0
  403. package/dist/mesh/threemf-view.d.ts.map +1 -0
  404. package/dist/mesh/threemf-view.js +100 -0
  405. package/dist/mesh/threemf-view.js.map +1 -0
  406. package/dist/mesh/types.d.ts +38 -0
  407. package/dist/mesh/types.d.ts.map +1 -1
  408. package/dist/mesh/types.js.map +1 -1
  409. package/dist/node-host/cli.d.ts +44 -6
  410. package/dist/node-host/cli.d.ts.map +1 -1
  411. package/dist/node-host/cli.js +76 -26
  412. package/dist/node-host/cli.js.map +1 -1
  413. package/dist/node-host/font-family-index.d.ts +93 -0
  414. package/dist/node-host/font-family-index.d.ts.map +1 -0
  415. package/dist/node-host/font-family-index.js +273 -0
  416. package/dist/node-host/font-family-index.js.map +1 -0
  417. package/dist/node-host/fs-asset-resolver.d.ts +8 -3
  418. package/dist/node-host/fs-asset-resolver.d.ts.map +1 -1
  419. package/dist/node-host/fs-asset-resolver.js +13 -5
  420. package/dist/node-host/fs-asset-resolver.js.map +1 -1
  421. package/dist/node-host/index.d.ts +8 -0
  422. package/dist/node-host/index.d.ts.map +1 -1
  423. package/dist/node-host/index.js +1 -0
  424. package/dist/node-host/index.js.map +1 -1
  425. package/dist/node-host/node-font-provider.d.ts +28 -0
  426. package/dist/node-host/node-font-provider.d.ts.map +1 -1
  427. package/dist/node-host/node-font-provider.js +49 -0
  428. package/dist/node-host/node-font-provider.js.map +1 -1
  429. package/dist/node.d.ts +1 -0
  430. package/dist/node.d.ts.map +1 -1
  431. package/dist/node.js +1 -0
  432. package/dist/node.js.map +1 -1
  433. package/dist/occt-kernel/highLevelApi.d.ts +4 -1
  434. package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
  435. package/dist/occt-kernel/highLevelApi.js +4 -2
  436. package/dist/occt-kernel/highLevelApi.js.map +1 -1
  437. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  438. package/dist/occt-kernel/occt-primitives.js +36 -3
  439. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  440. package/dist/occt-kernel/occtKernel.d.ts +19 -14
  441. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  442. package/dist/occt-kernel/occtKernel.js +19 -32
  443. package/dist/occt-kernel/occtKernel.js.map +1 -1
  444. package/dist/occt-kernel/stepColorParser.d.ts +18 -0
  445. package/dist/occt-kernel/stepColorParser.d.ts.map +1 -1
  446. package/dist/occt-kernel/stepColorParser.js +38 -0
  447. package/dist/occt-kernel/stepColorParser.js.map +1 -1
  448. package/dist/occt-kernel/stepMetaParser.d.ts +44 -0
  449. package/dist/occt-kernel/stepMetaParser.d.ts.map +1 -0
  450. package/dist/occt-kernel/stepMetaParser.js +166 -0
  451. package/dist/occt-kernel/stepMetaParser.js.map +1 -0
  452. package/dist/occt-kernel/topologyExt.d.ts +1 -1
  453. package/dist/occt-kernel/topologyExt.d.ts.map +1 -1
  454. package/dist/occt-kernel/topologyExt.js +4 -5
  455. package/dist/occt-kernel/topologyExt.js.map +1 -1
  456. package/dist/primitives/text/cjk-font.d.ts +2 -15
  457. package/dist/primitives/text/cjk-font.d.ts.map +1 -1
  458. package/dist/primitives/text/cjk-font.js +13 -1
  459. package/dist/primitives/text/cjk-font.js.map +1 -1
  460. package/dist/runtime-state.d.ts +85 -9
  461. package/dist/runtime-state.d.ts.map +1 -1
  462. package/dist/runtime-state.js +72 -2
  463. package/dist/runtime-state.js.map +1 -1
  464. package/dist/sdk.d.ts +3 -3
  465. package/dist/sdk.d.ts.map +1 -1
  466. package/dist/sdk.js +5 -5
  467. package/dist/sdk.js.map +1 -1
  468. package/dist/shape.d.ts +108 -5
  469. package/dist/shape.d.ts.map +1 -1
  470. package/dist/shape.js +130 -3
  471. package/dist/shape.js.map +1 -1
  472. package/dist/step/stepMetaParser.d.ts +55 -0
  473. package/dist/step/stepMetaParser.d.ts.map +1 -0
  474. package/dist/step/stepMetaParser.js +177 -0
  475. package/dist/step/stepMetaParser.js.map +1 -0
  476. package/dist/topology/naming/lineage.d.ts +6 -0
  477. package/dist/topology/naming/lineage.d.ts.map +1 -1
  478. package/dist/topology/naming/lineage.js +8 -0
  479. package/dist/topology/naming/lineage.js.map +1 -1
  480. package/dist/topology/naming/resolve-edge.d.ts +20 -1
  481. package/dist/topology/naming/resolve-edge.d.ts.map +1 -1
  482. package/dist/topology/naming/resolve-edge.js +54 -20
  483. package/dist/topology/naming/resolve-edge.js.map +1 -1
  484. package/dist/weapp.d.ts +6 -2
  485. package/dist/weapp.d.ts.map +1 -1
  486. package/dist/weapp.js +7 -1
  487. package/dist/weapp.js.map +1 -1
  488. package/package.json +19 -3
@@ -1 +1 @@
1
- {"version":3,"file":"import-step.js","sourceRoot":"","sources":["../../src/api/import-step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAA+B;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,6CAA6C,CAAC,CAAA;IAC3F,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,MAEhB,CAAA;IACb,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,OAAO,CACf,aAAa,EACb,aAAa,EACb,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAE7C,IAAI,MAAqB,CAAA;IACzB,IAAI,CAAC;QAAC,MAAM,GAAG,UAAU,EAAE,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,IAAI,oBAAoB,CAChE,mFAAmF,CACpF,CAAA;IACH,CAAC;IAED,2DAA2D;IAC3D,uDAAuD;IACvD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,QAAQ,CAC5C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CACzE,CAAA;IACD,4CAA4C;IAC5C,+CAA+C;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAA;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AACvF,CAAC","sourcesContent":["import type { Shape } from '../mesh/types'\nimport { getBackends, BrepUnsupportedError, getCurrentStmt } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { OpError } from './internal/result-unwrap'\nimport { loadBrep } from '../brep/brep-ops'\nimport { fromBrep } from '../shape'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\n\n/**\n * stdlib import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)\n *\n * 与 `import_brep`(容器资产)和 `cad.load`(编辑器 FileRef)的职责切分:\n * - `cad.import_step` 是 faijs **平台**几何 op:单一本地路径(宿主 `resolveFile`),\n * OCCT STEPControl_Reader 读入,返回持 OCCT 句柄 + roleTable 的 Shape。\n * - `import_brep` 读的是容器 `assets/` 里的冻结 BREP 资产(key,去扩展名);\n * `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流、\n * 画布语句位置语义),平台侧不要复用它(C7)。\n *\n * 非实体(wire/face/shell)一等公民(C6,对齐 import_brep):始终 allowNonSolid。\n * STEP 是 BREP 专属格式:mesh / 无内核模式抛 E_BREP_UNSUPPORTED。\n *\n * @group 创建\n * @inputs 0\n * @async true\n * @qual ok\n * @name import_step\n * @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true\n * @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。\n * @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。\n * @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。\n * @example\n * const a = await cad.import_step({ path: 'D:/models/box.step' })\n */\n\nexport async function import_step(params: Record<string, unknown>): Promise<Shape> {\n const path = params.path\n if (typeof path !== 'string' || path.length === 0) {\n throw new OpError('import_step', 'E_ARGS', '[api/import_step] path (string) is required')\n }\n\n const assets = getBackends().assets as {\n resolveFile?(path: string): Promise<ArrayBuffer>\n } | undefined\n if (!assets || !assets.resolveFile) {\n throw new OpError(\n 'import_step',\n 'E_OP_FAILED',\n '[api/import_step] assets backend (resolveFile) is required',\n )\n }\n\n const buffer = await assets.resolveFile(path)\n\n let kernel: BrepEngineApi\n try { kernel = getBrepApi() } catch { throw new BrepUnsupportedError(\n 'E_BREP_UNSUPPORTED: import_step requires an OCCT kernel (STEP has no mesh parser)',\n )\n }\n\n // C6:非实体一等公民(对齐 import_brep)。loadBrep 自适应:CASCADE Topology\n // 文本走 kernel.fromBREP,其余(STEP/STP)走 kernel.importStep。\n const { solid: solidHandle, shape } = loadBrep(\n kernel, buffer, undefined, undefined, undefined, { allowNonSolid: true },\n )\n // E3(H12):链根建 roleTable——导入文件的面没有语义名,按枚举序命名\n // imported:<i>(同一文件重复导入,枚举序稳定,role 名跨次导入保持一致)。\n const stmtId = String(getCurrentStmt()?.id ?? '')\n const hashes = kernel.subShapeHashes(solidHandle, 'face', 2147483647)\n const roles = new Map<string, number[]>()\n for (let i = 0; i < hashes.length; i++) {\n roles.set(`imported:${i}`, [hashes[i]!])\n }\n return fromBrep(shape, { solid: solidHandle, roleTable: new Map([[stmtId, roles]]) })\n}\n"]}
1
+ {"version":3,"file":"import-step.js","sourceRoot":"","sources":["../../src/api/import-step.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Shape } from '../mesh/types'\nimport { getBackends, BrepUnsupportedError, getCurrentStmt } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { OpError } from './internal/result-unwrap'\nimport { loadBrep } from '../brep/brep-ops'\nimport { fromBrep } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { parseStepPartMeta } from '../step/stepMetaParser'\nimport type { ShapeMeta } from './meta'\n\n/** 尽力把 ArrayBuffer 当 UTF-8 文本解出;非文本(如 .brp 二进制)返回 undefined。 */\nfunction decodeStepText(buffer: ArrayBuffer): string | undefined {\n if (!(buffer?.byteLength)) return undefined\n try {\n const s = new TextDecoder('utf-8', { fatal: false }).decode(buffer)\n // STEP 是纯文本 ISO-10303-21;首段要出现 `ISO-10303-21;` 才算。\n return s.includes('ISO-10303-21') ? s : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * api import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)\n *\n * 与 `import_brep`(容器资产)和 `cad.load`(编辑器 FileRef)的职责切分:\n * - `cad.import_step` 是 faijs **平台**几何 op:单一本地路径(宿主 `resolveFile`),\n * OCCT STEPControl_Reader 读入,返回持 OCCT 句柄 + roleTable 的 Shape。\n * - `import_brep` 读的是容器 `assets/` 里的冻结 BREP 资产(key,去扩展名);\n * `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流、\n * 画布语句位置语义),平台侧不要复用它(C7)。\n *\n * 非实体(wire/face/shell)一等公民(C6,对齐 import_brep):始终 allowNonSolid。\n * STEP 是 BREP 专属格式:mesh / 无内核模式抛 E_BREP_UNSUPPORTED。\n *\n * @group 创建\n * @inputs 0\n * @async true\n * @qual ok\n * @name import_step\n * @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true\n * @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。\n * @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。\n * @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。\n * @example\n * const a = await cad.import_step({ path: 'D:/models/box.step' })\n */\n\n/**\n * 裸实现:契约层测试直调(不经 defineOp 的 dispatch 拦截)。\n *\n * @param params - op 参数对象;`path` 为 STEP 文件路径。\n * @returns 持 OCCT 句柄的几何(非实体亦可)。\n */\nexport async function importStepImpl(params: Record<string, unknown>): Promise<Shape> {\n const path = params.path\n if (typeof path !== 'string' || path.length === 0) {\n throw new OpError('import_step', 'E_ARGS', '[api/import_step] path (string) is required')\n }\n\n const assets = getBackends().assets as {\n resolveFile?(path: string): Promise<ArrayBuffer>\n } | undefined\n if (!assets || !assets.resolveFile) {\n throw new OpError(\n 'import_step',\n 'E_OP_FAILED',\n '[api/import_step] assets backend (resolveFile) is required',\n )\n }\n\n const buffer = await assets.resolveFile(path)\n\n let kernel: BrepEngineApi\n try { kernel = getBrepApi() } catch { throw new BrepUnsupportedError(\n 'E_BREP_UNSUPPORTED: import_step requires an OCCT kernel (STEP has no mesh parser)',\n )\n }\n\n // C6:非实体一等公民(对齐 import_brep)。loadBrep 自适应:CASCADE Topology\n // 文本走 kernel.fromBREP,其余(STEP/STP)走 kernel.importStep。\n const { solid: solidHandle, shape } = loadBrep(\n kernel, buffer, undefined, undefined, { allowNonSolid: true },\n )\n // P2(设计文档 2026-10-05-meta §5.2 读):从 STEP (P21) 文本捞伙伴级描述/属性\n // 挂 `shape.meta`(name 已由 OCCT label 提供,description/UDA 由纯文本补充)。\n // 非文本/非 STEP 内容跳过,绝不抛。\n const stepText = decodeStepText(buffer)\n if (stepText && shape.meta == null) {\n const partMeta = parseStepPartMeta(stepText)\n const shapeMeta: ShapeMeta = { ...(shape.meta ?? {}) }\n if (partMeta.description) shapeMeta.description = partMeta.description\n if (partMeta.metadata && Object.keys(partMeta.metadata).length > 0) shapeMeta.metadata = partMeta.metadata\n if (Object.keys(shapeMeta).length > 0) shape.meta = shapeMeta\n }\n // E3(H12):链根建 roleTable——导入文件的面没有语义名,按枚举序命名\n // imported:<i>(同一文件重复导入,枚举序稳定,role 名跨次导入保持一致)。\n const stmtId = String(getCurrentStmt()?.id ?? '')\n const hashes = kernel.subShapeHashes(solidHandle, 'face', 2147483647)\n const roles = new Map<string, number[]>()\n for (let i = 0; i < hashes.length; i++) {\n roles.set(`imported:${i}`, [hashes[i]!])\n }\n return fromBrep(shape, { solid: solidHandle, roleTable: new Map([[stmtId, roles]]) })\n}\n\n/**\n * GOTCHA(2026-09-30):与 import_brep 同——必须经 defineOp 包装进入 cad 命名空间,\n * 不能是裸 async 函数。part 键 roleTable(outputTablesByPart)只在 define-op.ts\n * 包装层的 brep 分支登记;裸 async 函数产物没有 part 键表,下游 place/edgeRef\n * 报 \"input shape has no role table (nameless shape)\"。\n */\nexport const import_step = defineOp({\n name: 'import_step',\n brep: importStepImpl,\n engines: ['occt'],\n // `imported:0` 是 <i> 采样值(同 extrude 的 `wall:0`),与 import-brep 同构。\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'imported', index: 0 }] } } as Provenance,\n})\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * L3 API 面(api/)— faijs 库函数命名空间(替代原 packages/stdlib)
2
+ * L3 API 面(api/)— faijs 库函数命名空间
3
3
  *
4
4
  * 设计文档:docs/plans/2026-09-01-layered-api-architecture.md §D1/D2(P6 迁入 core)
5
5
  *
@@ -50,6 +50,10 @@ export { solid, isShape, isCompound } from '../shape.js';
50
50
  export { compound as structCompound } from '../shape.js';
51
51
  export type { ShapeSlot, SolidShape, CompoundShape, CurveShape, StdShape, ShapeKind } from '../shape.js';
52
52
  export type { Shape } from '../mesh/types.js';
53
+ export type { PbrAppearance, PbrColor, PbrAlphaMode, MaterialSpec, ShapeAppearanceMethods } from './appearance.js';
54
+ export { mergeAppearance, normalizeColor } from './appearance.js';
55
+ export type { ShapeMeta, FileMeta, ShapeMetaMethods } from './meta.js';
56
+ export { mergeMeta } from './meta.js';
53
57
  export * from './generated/script-face.js';
54
58
  export { extrude } from './extrude.js';
55
59
  export { revolve } from './generated/operations.js';
@@ -57,5 +61,6 @@ export { ok, err, isOk, isErr, unwrap, unwrapOr, vecAdd, vecSub, vecScale, vecDo
57
61
  export type { Result, Ok, Err, BrepError, Plane, PlaneName, PlaneInput, Vec3, PointInput, } from './brepjs-compat/index.js';
58
62
  export { map, andThen } from './brepjs-compat/index.js';
59
63
  export * from './brep-topology.js';
64
+ export * from './cadquery-selectors/index.js';
60
65
  export { measureVolume, measureArea, measureLength } from './generated/measurement.js';
61
66
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
package/dist/api/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * L3 API 面(api/)— faijs 库函数命名空间(替代原 packages/stdlib)
2
+ * L3 API 面(api/)— faijs 库函数命名空间
3
3
  *
4
4
  * 设计文档:docs/plans/2026-09-01-layered-api-architecture.md §D1/D2(P6 迁入 core)
5
5
  *
@@ -42,7 +42,7 @@ export { loft } from './loft.js';
42
42
  export { knurl } from './knurl.js';
43
43
  export { sdf } from './sdf.js';
44
44
  // 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:
45
- // 引擎不得 import stdlib/compound;公共 API 经本 re-export 保持)。
45
+ // 引擎不得 import api/compound;公共 API 经本 re-export 保持)。
46
46
  export { applyTransform } from '../mesh/rigid-transform.js';
47
47
  // P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。
48
48
  // A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)已迁出
@@ -60,6 +60,8 @@ export { faceRef } from './face-ref.js';
60
60
  export { asset } from './asset.js';
61
61
  export { solid, isShape, isCompound } from '../shape.js';
62
62
  export { compound as structCompound } from '../shape.js';
63
+ export { mergeAppearance, normalizeColor } from './appearance.js';
64
+ export { mergeMeta } from './meta.js';
63
65
  // ── P23:brepjs 兼容面接线(§4.2 / B1 三源一致)──
64
66
  //
65
67
  // ① 生成脚本面 op(与 api-namespace 的 cad 面同源:api/generated/script-face.ts)。
@@ -92,5 +94,8 @@ export { map, andThen } from './brepjs-compat/index.js';
92
94
  // / measureArea / measureLength)为 api/generated/measurement.ts 第一方
93
95
  // 同步版,一并平铺(cad 面的 volume/area/length 为 async 脚本面重命名)。
94
96
  export * from './brep-topology.js';
97
+ // CadQuery 拓扑选择器子系统(独立物理边界,与 topo-resolve 隔离):
98
+ // 等价搬运自 cq-compat,子路径直达 @faicad/faijs/api/cadquery-selectors。
99
+ export * from './cadquery-selectors/index.js';
95
100
  export { measureVolume, measureArea, measureLength } from './generated/measurement.js';
96
101
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * L3 API 面(api/)— faijs 库函数命名空间(替代原 packages/stdlib)\n *\n * 设计文档:docs/plans/2026-09-01-layered-api-architecture.md §D1/D2(P6 迁入 core)\n *\n * 导出全部官方库函数、Shape 构造器与 schema 表。\n * 库函数签名 = .fai.js 源码里的调用形态(无隐式参数);\n * 后端资源经 getBackends() 获取,保留声明经 keep() 表达。\n * 实现来源按 D11:mesh 侧复用 mesh/ 层,brep 侧复用既有 brep/ 层;\n * 缺失 brep 能力时经 D10 桥接调移植树 L2(见各 op 实现)。\n */\n\nexport { box, sphere, cylinder, cone, wedge } from './primitives'\n// `../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):transform 家族\n// (translate/rotate_euler/scale/scale3d)为编辑器应用提供(拖拽 / 时间线语句),\n// 不属 faijs 平台面,但服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**;\n// 各 op 的 JSDoc 已带校正后的 @deprecated。\n//\n// D1(2026-09-23 扩展库拆分,选项 C):四个 transform op **全部留 core**——\n// `translate` 是通用几何变换且是小程序端唯一在用的 transform op,同族不拆散。\nexport { translate, rotate_euler, scale, scale3d } from './transform'\nexport { union, subtract, intersect, cut } from './boolean'\nexport { engrave } from './engrave'\nexport { chamfer } from './chamfer'\nexport { fillet } from './fillet'\nexport { shell, type ShellParams } from './shell'\nexport { draft, type DraftParams } from './draft'\nexport { thicken } from './thicken'\nexport { defeature, reverseShape, unifySameDomain, sew, sewAndSolidify, removeHolesFromFace, type SewParams } from './feature-repair'\nexport { filletVariable } from './fillet-variable'\nexport { splitByPlane, type SplitByPlaneParams } from './split-by-plane'\nexport { sectionByPlane, type SectionByPlaneParams } from './section-by-plane'\nexport { screw } from './screw'\nexport { profile, buildProfileShape, assertProfileParams } from './profile'\nexport type { ProfileLineSeg, ProfileArcSeg, ProfileSeg, ProfileLoop, ProfileParams } from './profile'\nexport { sketchOnPlane, buildSketchOnPlaneWith } from './sketch-on-plane'\nexport { sketchOnFace, buildSketchOnFaceWith } from './sketch-on-face'\nexport { punchHole, buildPunchHole, punchSolidOf } from './punch-hole'\nexport type { SketchOnPlaneParams, PlaneSpec } from './sketch-on-plane'\nexport { wire } from './wire'\nexport { helix } from './helix'\nexport { split } from './split'\nexport { sweep } from './sweep'\nexport { loft } from './loft'\nexport { knurl } from './knurl'\nexport { sdf } from './sdf'\n// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:\n// 引擎不得 import stdlib/compound;公共 API 经本 re-export 保持)。\nexport { applyTransform } from '../mesh/rigid-transform'\n// P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。\n// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)已迁出\n// core,见 @faicad/faijs-extra;装配**求解器**(solve/validate/joints/solvers)\n// 仍是平台能力,留在此处。\nexport * from './assembly'\n// ── H11:平台几何 op(方案 §4,替代 FCStd 迁移对编辑器 op 的借用)──\nexport { import_brep } from './import-brep'\nexport { import_step } from './import-step'\nexport { compound } from './compound-geom'\nexport { place } from './place'\nexport { faceNormal, bboxCenter, bboxMin, bboxMax } from './geom'\nexport { edgeRef } from './edge-ref'\nexport { faceRef } from './face-ref'\nexport { asset } from './asset'\nexport { solid, isShape, isCompound } from '../shape'\nexport { compound as structCompound } from '../shape'\nexport type { ShapeSlot, SolidShape, CompoundShape, CurveShape, StdShape, ShapeKind } from '../shape'\nexport type { Shape } from '../mesh/types'\n\n// ── P23:brepjs 兼容面接线(§4.2 / B1 三源一致)──\n//\n// ① 生成脚本面 op(与 api-namespace 的 cad 面同源:api/generated/script-face.ts)。\n// 这批 op 经 `compatOp(projectBrepOp(…))` 包装,faijs 形态(Shape 进 / Shape 出、\n// 布尔双形态、brep-only),TS 侧与 `.fai.js` 侧同语义。\nexport * from './generated/script-face'\n// P25: compat extrude/revolve (brep-only, face→prism / face→lathe) share one\n// definition between the TS surface and the cad scripting surface. The fcstd\n// codegen wires Pad/Pocket/Extrusion/Revolution through these (sketch face →\n// cad.extrude / cad.revolve).\n// extrude 是平台手写 op(承载 upTo;长度形态委托生成投影)——见 api/extrude.ts;\n// revolve 仍直接取生成投影。\nexport { extrude } from './extrude'\nexport { revolve } from './generated/operations'\n//\n// ② 2026-09-25 core-decouple:brepjsCompat 命名空间与全部 op 投影随 vendored\n// 树删除(§5.5 第 3 条,裁决 9)。此处只平铺**无 op 语义**的组合器与纯工具\n// (Result / 向量 / 平面 / 错误 / 常量),它们为 core 内联实现(§5.2),\n// 在两个面之间语义一致且无同名冲突。\nexport {\n ok, err, isOk, isErr, unwrap, unwrapOr,\n vecAdd, vecSub, vecScale, vecDot, vecCross, vecLength, vecNormalize,\n createPlane, createNamedPlane, resolvePlane,\n kernelError, validationError,\n DEG2RAD, RAD2DEG,\n} from './brepjs-compat'\nexport type {\n Result, Ok, Err,\n BrepError,\n Plane, PlaneName, PlaneInput,\n Vec3, PointInput,\n} from './brepjs-compat'\n// ── 2026-09-25 core-decouple:vendored 库建造工厂(makeExternalGear /\n// makeInternalGear / makePlanetaryGear / thread)与其句柄类型\n// (Vertex/Edge/…/Shape3D/ValidSolid/Bounds3D/Gear*)随裁决 9 删除;\n// Result 组合器 map/andThen 为 core 内联(§5.2),保留平铺;\n// brepjsCompat 命名空间整体删除(§5.5 第 3 条)。\nexport { map, andThen } from './brepjs-compat'\n// ── 2026-09-25 core-decouple wrapup §2.2:sheetmetal 拓扑查询 / 构造 / 测量\n// 出口(faijs 风格,裁决 3 补进公开导出)。isValid 不在此面——cad 脚本面\n// 已有同语义出口(见 brep-topology.ts 头部注释)。同步测量(measureVolume\n// / measureArea / measureLength)为 api/generated/measurement.ts 第一方\n// 同步版,一并平铺(cad 面的 volume/area/length 为 async 脚本面重命名)。\nexport * from './brep-topology'\nexport { measureVolume, measureArea, measureLength } from './generated/measurement'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACjE,+DAA+D;AAC/D,8DAA8D;AAC9D,4DAA4D;AAC5D,mCAAmC;AACnC,EAAE;AACF,2DAA2D;AAC3D,qDAAqD;AACrD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,KAAK,EAAoB,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,KAAK,EAAoB,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,mBAAmB,EAAkB,MAAM,kBAAkB,CAAA;AACrI,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAA2B,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,cAAc,EAA6B,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAE3E,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,yDAAyD;AACzD,oDAAoD;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,0DAA0D;AAC1D,0EAA0E;AAC1E,sEAAsE;AACtE,eAAe;AACf,cAAc,YAAY,CAAA;AAC1B,iDAAiD;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,UAAU,CAAA;AAMrD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAI9D,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,wCAAwC;AACxC,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,4CAA4C;AAC5C,cAAc,yBAAyB,CAAA;AACvC,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,8BAA8B;AAC9B,0DAA0D;AAC1D,oBAAoB;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,EAAE;AACF,kEAAkE;AAClE,mDAAmD;AACnD,uDAAuD;AACvD,uBAAuB;AACvB,OAAO,EACL,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EACtC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EACnE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAC3C,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE,OAAO,GACjB,MAAM,iBAAiB,CAAA;AAOxB,gEAAgE;AAChE,0DAA0D;AAC1D,gEAAgE;AAChE,kDAAkD;AAClD,wCAAwC;AACxC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,oEAAoE;AACpE,oDAAoD;AACpD,yDAAyD;AACzD,sEAAsE;AACtE,yDAAyD;AACzD,cAAc,iBAAiB,CAAA;AAC/B,+CAA+C;AAC/C,8DAA8D;AAC9D,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA","sourcesContent":["/**\n * L3 API 面(api/)— faijs 库函数命名空间\n *\n * 设计文档:docs/plans/2026-09-01-layered-api-architecture.md §D1/D2(P6 迁入 core)\n *\n * 导出全部官方库函数、Shape 构造器与 schema 表。\n * 库函数签名 = .fai.js 源码里的调用形态(无隐式参数);\n * 后端资源经 getBackends() 获取,保留声明经 keep() 表达。\n * 实现来源按 D11:mesh 侧复用 mesh/ 层,brep 侧复用既有 brep/ 层;\n * 缺失 brep 能力时经 D10 桥接调移植树 L2(见各 op 实现)。\n */\n\nexport { box, sphere, cylinder, cone, wedge } from './primitives'\n// `../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):transform 家族\n// (translate/rotate_euler/scale/scale3d)为编辑器应用提供(拖拽 / 时间线语句),\n// 不属 faijs 平台面,但服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**;\n// 各 op 的 JSDoc 已带校正后的 @deprecated。\n//\n// D1(2026-09-23 扩展库拆分,选项 C):四个 transform op **全部留 core**——\n// `translate` 是通用几何变换且是小程序端唯一在用的 transform op,同族不拆散。\nexport { translate, rotate_euler, scale, scale3d } from './transform'\nexport { union, subtract, intersect, cut } from './boolean'\nexport { engrave } from './engrave'\nexport { chamfer } from './chamfer'\nexport { fillet } from './fillet'\nexport { shell, type ShellParams } from './shell'\nexport { draft, type DraftParams } from './draft'\nexport { thicken } from './thicken'\nexport { defeature, reverseShape, unifySameDomain, sew, sewAndSolidify, removeHolesFromFace, type SewParams } from './feature-repair'\nexport { filletVariable } from './fillet-variable'\nexport { splitByPlane, type SplitByPlaneParams } from './split-by-plane'\nexport { sectionByPlane, type SectionByPlaneParams } from './section-by-plane'\nexport { screw } from './screw'\nexport { profile, buildProfileShape, assertProfileParams } from './profile'\nexport type { ProfileLineSeg, ProfileArcSeg, ProfileSeg, ProfileLoop, ProfileParams } from './profile'\nexport { sketchOnPlane, buildSketchOnPlaneWith } from './sketch-on-plane'\nexport { sketchOnFace, buildSketchOnFaceWith } from './sketch-on-face'\nexport { punchHole, buildPunchHole, punchSolidOf } from './punch-hole'\nexport type { SketchOnPlaneParams, PlaneSpec } from './sketch-on-plane'\nexport { wire } from './wire'\nexport { helix } from './helix'\nexport { split } from './split'\nexport { sweep } from './sweep'\nexport { loft } from './loft'\nexport { knurl } from './knurl'\nexport { sdf } from './sdf'\n// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:\n// 引擎不得 import api/compound;公共 API 经本 re-export 保持)。\nexport { applyTransform } from '../mesh/rigid-transform'\n// P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。\n// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)已迁出\n// core,见 @faicad/faijs-extra;装配**求解器**(solve/validate/joints/solvers)\n// 仍是平台能力,留在此处。\nexport * from './assembly'\n// ── H11:平台几何 op(方案 §4,替代 FCStd 迁移对编辑器 op 的借用)──\nexport { import_brep } from './import-brep'\nexport { import_step } from './import-step'\nexport { compound } from './compound-geom'\nexport { place } from './place'\nexport { faceNormal, bboxCenter, bboxMin, bboxMax } from './geom'\nexport { edgeRef } from './edge-ref'\nexport { faceRef } from './face-ref'\nexport { asset } from './asset'\nexport { solid, isShape, isCompound } from '../shape'\nexport { compound as structCompound } from '../shape'\nexport type { ShapeSlot, SolidShape, CompoundShape, CurveShape, StdShape, ShapeKind } from '../shape'\nexport type { Shape } from '../mesh/types'\n// PBR 外观规格(设计文档 2026-10-05 v2 §4.1):类型供宿主/第三方消费;\n// 归一化/合并纯函数供编辑器映射(faijsAppearanceToHost)与导出复用。\nexport type { PbrAppearance, PbrColor, PbrAlphaMode, MaterialSpec, ShapeAppearanceMethods } from './appearance'\nexport { mergeAppearance, normalizeColor } from './appearance'\n// 零件/文件级说明性元数据(设计文档 2026-10-05-meta):类型供宿主/第三方消费;\n// 合并纯函数供编辑器映射与导出复用。\nexport type { ShapeMeta, FileMeta, ShapeMetaMethods } from './meta'\nexport { mergeMeta } from './meta'\n\n// ── P23:brepjs 兼容面接线(§4.2 / B1 三源一致)──\n//\n// ① 生成脚本面 op(与 api-namespace 的 cad 面同源:api/generated/script-face.ts)。\n// 这批 op 经 `compatOp(projectBrepOp(…))` 包装,faijs 形态(Shape 进 / Shape 出、\n// 布尔双形态、brep-only),TS 侧与 `.fai.js` 侧同语义。\nexport * from './generated/script-face'\n// P25: compat extrude/revolve (brep-only, face→prism / face→lathe) share one\n// definition between the TS surface and the cad scripting surface. The fcstd\n// codegen wires Pad/Pocket/Extrusion/Revolution through these (sketch face →\n// cad.extrude / cad.revolve).\n// extrude 是平台手写 op(承载 upTo;长度形态委托生成投影)——见 api/extrude.ts;\n// revolve 仍直接取生成投影。\nexport { extrude } from './extrude'\nexport { revolve } from './generated/operations'\n//\n// ② 2026-09-25 core-decouple:brepjsCompat 命名空间与全部 op 投影随 vendored\n// 树删除(§5.5 第 3 条,裁决 9)。此处只平铺**无 op 语义**的组合器与纯工具\n// (Result / 向量 / 平面 / 错误 / 常量),它们为 core 内联实现(§5.2),\n// 在两个面之间语义一致且无同名冲突。\nexport {\n ok, err, isOk, isErr, unwrap, unwrapOr,\n vecAdd, vecSub, vecScale, vecDot, vecCross, vecLength, vecNormalize,\n createPlane, createNamedPlane, resolvePlane,\n kernelError, validationError,\n DEG2RAD, RAD2DEG,\n} from './brepjs-compat'\nexport type {\n Result, Ok, Err,\n BrepError,\n Plane, PlaneName, PlaneInput,\n Vec3, PointInput,\n} from './brepjs-compat'\n// ── 2026-09-25 core-decouple:vendored 库建造工厂(makeExternalGear /\n// makeInternalGear / makePlanetaryGear / thread)与其句柄类型\n// (Vertex/Edge/…/Shape3D/ValidSolid/Bounds3D/Gear*)随裁决 9 删除;\n// Result 组合器 map/andThen 为 core 内联(§5.2),保留平铺;\n// brepjsCompat 命名空间整体删除(§5.5 第 3 条)。\nexport { map, andThen } from './brepjs-compat'\n// ── 2026-09-25 core-decouple wrapup §2.2:sheetmetal 拓扑查询 / 构造 / 测量\n// 出口(faijs 风格,裁决 3 补进公开导出)。isValid 不在此面——cad 脚本面\n// 已有同语义出口(见 brep-topology.ts 头部注释)。同步测量(measureVolume\n// / measureArea / measureLength)为 api/generated/measurement.ts 第一方\n// 同步版,一并平铺(cad 面的 volume/area/length 为 async 脚本面重命名)。\nexport * from './brep-topology'\n// CadQuery 拓扑选择器子系统(独立物理边界,与 topo-resolve 隔离):\n// 等价搬运自 cq-compat,子路径直达 @faicad/faijs/api/cadquery-selectors。\nexport * from './cadquery-selectors'\nexport { measureVolume, measureArea, measureLength } from './generated/measurement'\n"]}
@@ -147,7 +147,7 @@ function buildAdapter(fn, spec) {
147
147
  // BREP chain)。默认 true 保持 brepjs 形态库的借入语义。
148
148
  const effective = spec.borrow === false ? args : args.map((a) => borrowDeep(a, 0));
149
149
  // Async library fns are supported: a library that awaits its kernel (every
150
- // `@faicad/fai-cq-gears` factory does — `await getGearKernel()`) returns
150
+ // `@faicad/faijs-gears` factory does — `await getGearKernel()`) returns
151
151
  // `Promise<Result<…>>`, and the shared unwrap is a sync leaf that only
152
152
  // recognizes settled Result records. Awaiting a non-promise product is a
153
153
  // no-op, so sync libraries are unaffected.
@@ -1 +1 @@
1
- {"version":3,"file":"compat-op.js","sourceRoot":"","sources":["../../../src/api/internal/compat-op.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * compat-op — lift an arbitrary brepjs-shaped function into a faijs statement\n * op, built **on top of** defineOp (single implementation entry, v1).\n *\n * Design: docs/plans/2026-09-06-compatop-on-defineop.md §3\n *\n * compatOp is NOT a second implementation path parallel to defineOp: every\n * shared mechanism is owned by defineOp — dispatch (dispatchPath + capability\n * routing), the Result boundary (runImpl + unwrapResult), product wrapping\n * (wrapBrepOne / wrapByKeys), `DUAL_OP_META` mounting and\n * `assertLibConforms` validation. compatOp only does two things:\n * - spec pass-through: `CompatSpec` is a combinatorial inheritance of\n * `DualOpOptions` (single source of truth, fields auto-sync — §3.1);\n * - adapter construction: a brepjs-shaped bridge feeding the brep impl — the\n * three bridging steps that cannot be shared (all reuse shared\n * infrastructure, §3.2):\n * 1. borrowDeep — inward borrow: deep walk, any faijs Shape →\n * borrowBrepjsShape view (zero-copy; library-private handles pass\n * through untouched);\n * 2. call + unwrap — callBrepjs through the shared unwrapResult\n * (`err` throws an OpError carrying the op name + BrepError code);\n * async library fns are awaited first, so `Promise<Result<…>>` —\n * the shape every kernel-awaiting library returns — unwraps too;\n * 3. adoptOut — outward adoption: top-level handle / `outputs`-declared\n * fields (single handle or handle array) → adoptEntity\n * (unregister finalizer + fromHandle).\n *\n * The keep / keepHidden contract is untouched: compatOp neither blocks nor\n * rewrites it — any function running inside a DirectExecutor context can use\n * function-body declarations (C1), and call-site declarations override them\n * (`lang/keep.ts` resolveKeep). The decorated product therefore behaves like\n * any defineOp product: `keep`-safe, capability-aware, multi-output\n * (`DUAL_OP_META.outputs` visible).\n *\n * No self-invented fields: `CompatSpec` extends `Omit<DualOpOptions, 'mesh' |\n * 'brep'>` and declares nothing else; the only tweak is `name` tightened\n * (inherited field, not a new one).\n *\n * @module\n */\n\nimport {\n defineOp,\n DUAL_OP_META,\n type DualOpMeta,\n type DualOpOptions,\n type BrepImpl,\n type BrepProduct,\n} from '../../define-op'\nimport { isShape } from '../../shape'\nimport { borrowBrepjsShape, adoptEntity, callBrepjs } from './l3-bridge'\nimport { unwrapResult } from './result-unwrap'\nimport type { Shape } from '../../mesh/types'\n\n/** compatOp's static spec: combinatorial inheritance (single source of truth). */\nexport interface CompatSpec extends Omit<DualOpOptions, 'mesh' | 'brep'> {\n /** Op name (error messages + metadata; required, unlike defineOp's optional name). */\n name: string\n /**\n * 是否按 brepjs 句柄形态借入输入(默认 true)。\n *\n * faijs 化库(内部直接消费 core Shape 与 core op,如 sheetmetal)必须传\n * `borrow: false`:borrowDeep 会把嵌套的 faijs Shape 替换成 brepjs 形态的\n * `BorrowedShapeHandle`,而 core op 只认带 BREP 槽的 Shape,替换后库内部\n * 布尔/拓扑调用会报「input is not on the BREP chain」。真 brepjs 形态的库\n * (消费 ShapeHandle 对象)保持默认 true。\n */\n borrow?: boolean\n}\n\nconst MAX_WALK_DEPTH = 4\n\n/**\n * Inward bridging step: deep walk with faijs Shapes replaced by borrowed\n * brepjs views (zero-copy); everything else passes through.\n * Class instances are not traversed (defensive); library-private handles\n * pass through (§4.3.4 of the design).\n *\n * @param v - the value to borrow from (plain object, array, or primitive).\n * @param depth - current traversal depth (guard against deep recursion).\n * @returns the value with faijs Shapes replaced by borrowed views.\n */\nexport function borrowDeep(v: unknown, depth: number): unknown {\n if (depth > MAX_WALK_DEPTH || v === null || typeof v !== 'object') return v\n if (isShape(v)) return borrowBrepjsShape(v)\n if (Array.isArray(v)) return v.map((x) => borrowDeep(x, depth + 1))\n if (Object.getPrototypeOf(v) !== Object.prototype) return v\n const out: Record<string, unknown> = {}\n for (const [k, x] of Object.entries(v)) out[k] = borrowDeep(x, depth + 1)\n return out\n}\n\n/**\n * Statement-boundary unwrap — `err` becomes an execution error carrying the op\n * name and the `BrepError` code. Delegates to the shared\n * {@link unwrapResult} so the compat boundary and defineOp's Result boundary\n * share one leaf implementation (no drift).\n *\n * @param r - the Result-like value to unwrap.\n * @param name - the op name used in error messages.\n * @returns the unwrapped ok value.\n */\nexport function unwrapOrThrow(r: unknown, name: string): unknown {\n return unwrapResult(r, name)\n}\n\n/**\n * Bridging step: outward adoption — top-level handle or `outputs`-declared\n * fields → adoptEntity (unregister finalizer + fromHandle). `outputs` may also\n * name an array field of handles; every element is adopted individually.\n * Deduplication of already-adopted handles lives inside adoptEntity. A field\n * already being a faijs Shape passes through untouched (no double adoption).\n *\n * @param v - the library product.\n * @param spec - the compat spec (name + optional `outputs`).\n * @param segments - caller-provided `segments` (裁决 1,§5.2), forwarded so the\n * adopted handles' tessellation honors it.\n * @returns the adopted record / Shape, or the plain data untouched.\n */\nfunction adoptOut(v: unknown, spec: CompatSpec, segments?: number): unknown {\n if (isShape(v)) return v\n if (spec.outputs && typeof v === 'object' && v !== null && !Array.isArray(v)) {\n const rec = v as Record<string, unknown>\n for (const f of spec.outputs) {\n const field = rec[f]\n rec[f] = Array.isArray(field)\n ? field.map((x) => adoptEntity(x, spec.name, segments))\n : adoptEntity(field, spec.name, segments)\n }\n return v\n }\n return adoptEntity(v, spec.name, segments)\n}\n\n/**\n * Read the caller-supplied tessellation density from a compat op's args.\n *\n * 裁决 1:faijs 的 `segments` 显式超集在 brepjs 投影侧也必须可选;这里从调用点\n * 的尾参 options(或任一 plain-object 实参)抓取 `segments`,在产出句柄被收编为\n * faijs Shape 时透传给 `fromHandle` 的三角化(§5.2 机制)。默认不传 = 由\n * handle-bridge 的 64 兜底。\n */\nfunction readSegmentsFromArgs(args: unknown[]): number | undefined {\n for (let i = args.length - 1; i >= 0; i--) {\n const a = args[i]\n if (\n a !== null &&\n typeof a === 'object' &&\n !Array.isArray(a) &&\n Object.getPrototypeOf(a) === Object.prototype\n ) {\n const seg = (a as Record<string, unknown>).segments\n if (typeof seg === 'number' && Number.isFinite(seg)) return seg\n }\n }\n return undefined\n}\n\n/**\n * Build the brep-only adapter: borrow inputs → call the vendor function through\n * the shared unwrap → adopt the product (with the caller's `segments`,\n * 裁决 1/§5.2). The adapter never dispatches and never mounts metadata —\n * those are defineOp's.\n *\n * @param fn the brepjs-shaped function (dual-form normalization inside, D11).\n * @param spec the static op spec (name + options pass-through).\n * @returns a `BrepImpl` compatible with defineOp's brep-only decl.\n */\nfunction buildAdapter(fn: (...args: unknown[]) => unknown, spec: CompatSpec): BrepImpl<unknown[]> {\n return async (...args: unknown[]): Promise<BrepProduct> => {\n // borrow: false(faijs 化库)时输入原样直传——嵌套的 core Shape 保留其\n // BREP 槽,库内部调 core op 才能取到 OCCT 句柄(否则报 input not on the\n // BREP chain)。默认 true 保持 brepjs 形态库的借入语义。\n const effective = spec.borrow === false ? args : args.map((a) => borrowDeep(a, 0))\n // Async library fns are supported: a library that awaits its kernel (every\n // `@faicad/fai-cq-gears` factory does — `await getGearKernel()`) returns\n // `Promise<Result<…>>`, and the shared unwrap is a sync leaf that only\n // recognizes settled Result records. Awaiting a non-promise product is a\n // no-op, so sync libraries are unaffected.\n const value = unwrapOrThrow(await callBrepjs(fn as never, effective), spec.name)\n return adoptOut(value, spec, readSegmentsFromArgs(args)) as BrepProduct\n }\n}\n\n/** Carrier of the DualOpMeta mounted by defineOp (same shape as defineOp's). */\ntype MetaCarrier = { [DUAL_OP_META]?: DualOpMeta }\n\n/**\n * Lift a brepjs-shaped function into a defineOp-decorated op facade (brep-only).\n *\n * The decorated product is identical to a defineOp product: same `DUAL_OP_META`\n * field set (kind 'dual-op', brep impl, name, capabilities, outputs, schema,\n * slotMap), same dispatch semantics, same Result boundary. The adapter carries\n * only the brepjs bridging (borrow / call / adopt); every other mechanism\n * belongs to defineOp.\n *\n * @param fn the brepjs-shaped function.\n * @param spec the static spec (name required; capabilities/outputs/slotMap/\n * schema pass through and take effect).\n * @returns the compat op facade, carrying dual-op metadata.\n */\nexport function compatOp(\n fn: (...args: unknown[]) => unknown,\n spec: CompatSpec,\n): ((...args: unknown[]) => Promise<Shape>) & MetaCarrier {\n const { outputs, capabilities, engines, schema, slotMap, naming } = spec\n // `outputs` flows through defineOp's own wrapping path: the adapter adopts\n // per declared field, then defineOp wraps — isShape passthrough, so no\n // double wrapping (§3.2).\n return defineOp({\n brep: buildAdapter(fn, spec),\n name: spec.name,\n capabilities,\n // D11 透传:平台 op(vendored 实现调 occt-only 方法)在生成物里声明 engines。\n // engines 与 capabilities 可并存(2026-09-24 撤销 D11-7 互斥),此处两条独立透传。\n engines,\n outputs,\n schema,\n slotMap,\n naming,\n }) as unknown as ((...args: unknown[]) => Promise<Shape>) & MetaCarrier\n}"]}
1
+ {"version":3,"file":"compat-op.js","sourceRoot":"","sources":["../../../src/api/internal/compat-op.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * compat-op — lift an arbitrary brepjs-shaped function into a faijs statement\n * op, built **on top of** defineOp (single implementation entry, v1).\n *\n * Design: docs/plans/2026-09-06-compatop-on-defineop.md §3\n *\n * compatOp is NOT a second implementation path parallel to defineOp: every\n * shared mechanism is owned by defineOp — dispatch (dispatchPath + capability\n * routing), the Result boundary (runImpl + unwrapResult), product wrapping\n * (wrapBrepOne / wrapByKeys), `DUAL_OP_META` mounting and\n * `assertLibConforms` validation. compatOp only does two things:\n * - spec pass-through: `CompatSpec` is a combinatorial inheritance of\n * `DualOpOptions` (single source of truth, fields auto-sync — §3.1);\n * - adapter construction: a brepjs-shaped bridge feeding the brep impl — the\n * three bridging steps that cannot be shared (all reuse shared\n * infrastructure, §3.2):\n * 1. borrowDeep — inward borrow: deep walk, any faijs Shape →\n * borrowBrepjsShape view (zero-copy; library-private handles pass\n * through untouched);\n * 2. call + unwrap — callBrepjs through the shared unwrapResult\n * (`err` throws an OpError carrying the op name + BrepError code);\n * async library fns are awaited first, so `Promise<Result<…>>` —\n * the shape every kernel-awaiting library returns — unwraps too;\n * 3. adoptOut — outward adoption: top-level handle / `outputs`-declared\n * fields (single handle or handle array) → adoptEntity\n * (unregister finalizer + fromHandle).\n *\n * The keep / keepHidden contract is untouched: compatOp neither blocks nor\n * rewrites it — any function running inside a DirectExecutor context can use\n * function-body declarations (C1), and call-site declarations override them\n * (`lang/keep.ts` resolveKeep). The decorated product therefore behaves like\n * any defineOp product: `keep`-safe, capability-aware, multi-output\n * (`DUAL_OP_META.outputs` visible).\n *\n * No self-invented fields: `CompatSpec` extends `Omit<DualOpOptions, 'mesh' |\n * 'brep'>` and declares nothing else; the only tweak is `name` tightened\n * (inherited field, not a new one).\n *\n * @module\n */\n\nimport {\n defineOp,\n DUAL_OP_META,\n type DualOpMeta,\n type DualOpOptions,\n type BrepImpl,\n type BrepProduct,\n} from '../../define-op'\nimport { isShape } from '../../shape'\nimport { borrowBrepjsShape, adoptEntity, callBrepjs } from './l3-bridge'\nimport { unwrapResult } from './result-unwrap'\nimport type { Shape } from '../../mesh/types'\n\n/** compatOp's static spec: combinatorial inheritance (single source of truth). */\nexport interface CompatSpec extends Omit<DualOpOptions, 'mesh' | 'brep'> {\n /** Op name (error messages + metadata; required, unlike defineOp's optional name). */\n name: string\n /**\n * 是否按 brepjs 句柄形态借入输入(默认 true)。\n *\n * faijs 化库(内部直接消费 core Shape 与 core op,如 sheetmetal)必须传\n * `borrow: false`:borrowDeep 会把嵌套的 faijs Shape 替换成 brepjs 形态的\n * `BorrowedShapeHandle`,而 core op 只认带 BREP 槽的 Shape,替换后库内部\n * 布尔/拓扑调用会报「input is not on the BREP chain」。真 brepjs 形态的库\n * (消费 ShapeHandle 对象)保持默认 true。\n */\n borrow?: boolean\n}\n\nconst MAX_WALK_DEPTH = 4\n\n/**\n * Inward bridging step: deep walk with faijs Shapes replaced by borrowed\n * brepjs views (zero-copy); everything else passes through.\n * Class instances are not traversed (defensive); library-private handles\n * pass through (§4.3.4 of the design).\n *\n * @param v - the value to borrow from (plain object, array, or primitive).\n * @param depth - current traversal depth (guard against deep recursion).\n * @returns the value with faijs Shapes replaced by borrowed views.\n */\nexport function borrowDeep(v: unknown, depth: number): unknown {\n if (depth > MAX_WALK_DEPTH || v === null || typeof v !== 'object') return v\n if (isShape(v)) return borrowBrepjsShape(v)\n if (Array.isArray(v)) return v.map((x) => borrowDeep(x, depth + 1))\n if (Object.getPrototypeOf(v) !== Object.prototype) return v\n const out: Record<string, unknown> = {}\n for (const [k, x] of Object.entries(v)) out[k] = borrowDeep(x, depth + 1)\n return out\n}\n\n/**\n * Statement-boundary unwrap — `err` becomes an execution error carrying the op\n * name and the `BrepError` code. Delegates to the shared\n * {@link unwrapResult} so the compat boundary and defineOp's Result boundary\n * share one leaf implementation (no drift).\n *\n * @param r - the Result-like value to unwrap.\n * @param name - the op name used in error messages.\n * @returns the unwrapped ok value.\n */\nexport function unwrapOrThrow(r: unknown, name: string): unknown {\n return unwrapResult(r, name)\n}\n\n/**\n * Bridging step: outward adoption — top-level handle or `outputs`-declared\n * fields → adoptEntity (unregister finalizer + fromHandle). `outputs` may also\n * name an array field of handles; every element is adopted individually.\n * Deduplication of already-adopted handles lives inside adoptEntity. A field\n * already being a faijs Shape passes through untouched (no double adoption).\n *\n * @param v - the library product.\n * @param spec - the compat spec (name + optional `outputs`).\n * @param segments - caller-provided `segments` (裁决 1,§5.2), forwarded so the\n * adopted handles' tessellation honors it.\n * @returns the adopted record / Shape, or the plain data untouched.\n */\nfunction adoptOut(v: unknown, spec: CompatSpec, segments?: number): unknown {\n if (isShape(v)) return v\n if (spec.outputs && typeof v === 'object' && v !== null && !Array.isArray(v)) {\n const rec = v as Record<string, unknown>\n for (const f of spec.outputs) {\n const field = rec[f]\n rec[f] = Array.isArray(field)\n ? field.map((x) => adoptEntity(x, spec.name, segments))\n : adoptEntity(field, spec.name, segments)\n }\n return v\n }\n return adoptEntity(v, spec.name, segments)\n}\n\n/**\n * Read the caller-supplied tessellation density from a compat op's args.\n *\n * 裁决 1:faijs 的 `segments` 显式超集在 brepjs 投影侧也必须可选;这里从调用点\n * 的尾参 options(或任一 plain-object 实参)抓取 `segments`,在产出句柄被收编为\n * faijs Shape 时透传给 `fromHandle` 的三角化(§5.2 机制)。默认不传 = 由\n * handle-bridge 的 64 兜底。\n */\nfunction readSegmentsFromArgs(args: unknown[]): number | undefined {\n for (let i = args.length - 1; i >= 0; i--) {\n const a = args[i]\n if (\n a !== null &&\n typeof a === 'object' &&\n !Array.isArray(a) &&\n Object.getPrototypeOf(a) === Object.prototype\n ) {\n const seg = (a as Record<string, unknown>).segments\n if (typeof seg === 'number' && Number.isFinite(seg)) return seg\n }\n }\n return undefined\n}\n\n/**\n * Build the brep-only adapter: borrow inputs → call the vendor function through\n * the shared unwrap → adopt the product (with the caller's `segments`,\n * 裁决 1/§5.2). The adapter never dispatches and never mounts metadata —\n * those are defineOp's.\n *\n * @param fn the brepjs-shaped function (dual-form normalization inside, D11).\n * @param spec the static op spec (name + options pass-through).\n * @returns a `BrepImpl` compatible with defineOp's brep-only decl.\n */\nfunction buildAdapter(fn: (...args: unknown[]) => unknown, spec: CompatSpec): BrepImpl<unknown[]> {\n return async (...args: unknown[]): Promise<BrepProduct> => {\n // borrow: false(faijs 化库)时输入原样直传——嵌套的 core Shape 保留其\n // BREP 槽,库内部调 core op 才能取到 OCCT 句柄(否则报 input not on the\n // BREP chain)。默认 true 保持 brepjs 形态库的借入语义。\n const effective = spec.borrow === false ? args : args.map((a) => borrowDeep(a, 0))\n // Async library fns are supported: a library that awaits its kernel (every\n // `@faicad/faijs-gears` factory does — `await getGearKernel()`) returns\n // `Promise<Result<…>>`, and the shared unwrap is a sync leaf that only\n // recognizes settled Result records. Awaiting a non-promise product is a\n // no-op, so sync libraries are unaffected.\n const value = unwrapOrThrow(await callBrepjs(fn as never, effective), spec.name)\n return adoptOut(value, spec, readSegmentsFromArgs(args)) as BrepProduct\n }\n}\n\n/** Carrier of the DualOpMeta mounted by defineOp (same shape as defineOp's). */\ntype MetaCarrier = { [DUAL_OP_META]?: DualOpMeta }\n\n/**\n * Lift a brepjs-shaped function into a defineOp-decorated op facade (brep-only).\n *\n * The decorated product is identical to a defineOp product: same `DUAL_OP_META`\n * field set (kind 'dual-op', brep impl, name, capabilities, outputs, schema,\n * slotMap), same dispatch semantics, same Result boundary. The adapter carries\n * only the brepjs bridging (borrow / call / adopt); every other mechanism\n * belongs to defineOp.\n *\n * @param fn the brepjs-shaped function.\n * @param spec the static spec (name required; capabilities/outputs/slotMap/\n * schema pass through and take effect).\n * @returns the compat op facade, carrying dual-op metadata.\n */\nexport function compatOp(\n fn: (...args: unknown[]) => unknown,\n spec: CompatSpec,\n): ((...args: unknown[]) => Promise<Shape>) & MetaCarrier {\n const { outputs, capabilities, engines, schema, slotMap, naming } = spec\n // `outputs` flows through defineOp's own wrapping path: the adapter adopts\n // per declared field, then defineOp wraps — isShape passthrough, so no\n // double wrapping (§3.2).\n return defineOp({\n brep: buildAdapter(fn, spec),\n name: spec.name,\n capabilities,\n // D11 透传:平台 op(vendored 实现调 occt-only 方法)在生成物里声明 engines。\n // engines 与 capabilities 可并存(2026-09-24 撤销 D11-7 互斥),此处两条独立透传。\n engines,\n outputs,\n schema,\n slotMap,\n naming,\n }) as unknown as ((...args: unknown[]) => Promise<Shape>) & MetaCarrier\n}"]}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * mesh-solid-op — 网格 op 的「三明治」共享实现(方案 2026-10-01 §3.5)
3
+ *
4
+ * 每个网格 op 的实现体都是同一个形状,本模块只把这三步抽出来,让 op 侧只剩"调哪个
5
+ * 内核方法"这一件事:
6
+ *
7
+ * ```
8
+ * MeshData ──► meshSolid 句柄(从 Shape 槽取,**不重复导入**)
9
+ * │
10
+ * ├─ 内核调用(fillet / chamfer / fuse / cut / intersect / …)
11
+ * │
12
+ * └─ meshShape(新句柄) ──► MeshData(显示 mesh 与近似拓扑**同一份**)
13
+ * ```
14
+ *
15
+ * 三条不可让步的口径:
16
+ *
17
+ * 1. **显示 mesh = 新实体的三角化**,不是输入的顶点数组。规则 1:拓扑 faceRuns
18
+ * 索引的三角形必须就是用户看到的三角形——照抄输入数组会让两者错位。
19
+ * 2. **新句柄必须写回**(Shape 槽 + 运行时注册表 + 近似拓扑)。不写回 = 下游 op
20
+ * 拿不到句柄、宿主选中不到面;不登记注册表 = 句柄无人释放。
21
+ * 3. **旧句柄不由本模块释放**。BREP 侧同构(`filletBrep` 也不释放输入句柄):
22
+ * 句柄生命周期归链(注册表 / releasePartCaches),op 只管"取一个、交一个"。
23
+ * 这里"顺手 release 输入"会打断 `b = fillet(a)` 之后仍然可用的 `a`。
24
+ *
25
+ * op 拿不到 `CadRuntime` 实例,故句柄与拓扑经 **pending 通道**登记
26
+ * (与 `load` 的 `setPendingMeshSolid` / `setPendingMeshTopology` 同模式),
27
+ * 由引擎在语句执行后收编——收编时会核对存活 ctx 变量仍携带**这个**句柄,防顶替。
28
+ */
29
+ import type { Shape } from '../../mesh/types.js';
30
+ import type { BrepEngineApi } from '../../brep/engine/primitives.js';
31
+ import type { BrepHandle } from '../../brep/engine/types.js';
32
+ import { type MeshSolidBackend } from '../../brep/mesh-solid.js';
33
+ import { type EdgeTopoRef, type FaceTopoRef, type ResolutionContext } from '../../topology/naming/index.js';
34
+ import { OpError } from './result-unwrap.js';
35
+ import { type Plane } from '../../geometry2d/bridge/plane.js';
36
+ /**
37
+ * 网格 op 的最小执行入口:内核 + 后端 + 输入句柄(**不带**解析上下文)。
38
+ *
39
+ * 变换 / 抽壳 / 阵列这类"整体作用于实体"的 op 不需要解析上下文(它们按序号或
40
+ * 几何选面/选边,且各自的选面逻辑自带上下文构建)——对它们建一遍全边表 + 逐边
41
+ * 几何 hint,是纯粹的浪费(大网格上是 O(边数) 次内核调用)。
42
+ */
43
+ export interface MeshSolidBasic {
44
+ /** 网格后端的 L1 契约面(几何操作走它,op 不碰内核私有方言)。 */
45
+ readonly kernel: BrepEngineApi;
46
+ /** 网格后端(三角化 / 近似拓扑 / 释放)。 */
47
+ readonly backend: MeshSolidBackend;
48
+ /** 输入的网格实体句柄。 */
49
+ readonly solid: BrepHandle;
50
+ }
51
+ /** 网格 op 的执行入口:最小入口 + 边解析上下文。 */
52
+ export interface MeshSolidEntry extends MeshSolidBasic {
53
+ /** 边解析上下文(无 role 层 → 纯几何匹配,见 `buildMeshEdgeResolutionContext`)。 */
54
+ readonly edgeContext: ResolutionContext;
55
+ }
56
+ /**
57
+ * 取当前装配的网格后端;未装配即抛(宿主装配事实,不是运行时降级点)。
58
+ *
59
+ * @param opLabel - the op name (error messages).
60
+ * @returns the assembled mesh backend.
61
+ * @throws {MeshUnsupportedError} when no mesh backend is assembled in this host.
62
+ */
63
+ export declare function meshBackendOrThrow(opLabel: string): MeshSolidBackend;
64
+ /**
65
+ * 取网格实体的最小执行入口(只要内核 + 后端 + 句柄)。
66
+ *
67
+ * 两个失败面必须分开说,因为它们的原因完全不同:
68
+ * - 输入**不是**网格实体(裸网格 / BREP 实体)→ 该 op 的 mesh 路径只懂网格实体,
69
+ * 如实拒绝。裸网格意味着"加载它的时候没有装配网格内核",与"规范化失败"是两回事。
70
+ * - 输入是网格实体但**没有装配网格后端** → 装配事实(宿主没提供),不是运行时降级点。
71
+ *
72
+ * @param input - the op's geometry input.
73
+ * @param opLabel - the op name (error messages).
74
+ * @returns the minimal mesh-solid entry for this input.
75
+ * @throws {MeshUnsupportedError} when the input is not a mesh solid or no backend is assembled.
76
+ */
77
+ export declare function meshSolidBasicEntry(input: Shape, opLabel: string): MeshSolidBasic;
78
+ /**
79
+ * 取网格实体的执行入口(含边解析上下文)。
80
+ *
81
+ * 两个失败面必须分开说,因为它们的原因完全不同:
82
+ * - 输入**不是**网格实体(裸网格 / BREP 实体)→ 该 op 的 mesh 路径只懂网格实体,
83
+ * 如实拒绝。裸网格意味着"加载它的时候没有装配网格内核",与"规范化失败"是两回事。
84
+ * - 输入是网格实体但**没有装配网格后端** → 装配事实(宿主没提供),不是运行时降级点。
85
+ *
86
+ * @param input - the op's geometry input.
87
+ * @param opLabel - the op name (error messages).
88
+ * @returns the mesh-solid entry for this input (with the edge resolution context).
89
+ * @throws {MeshUnsupportedError} when the input is not a mesh solid or no backend is assembled.
90
+ */
91
+ export declare function meshSolidEntry(input: Shape, opLabel: string): MeshSolidEntry;
92
+ /**
93
+ * 把一组边**选择器**解析成当前网格实体的边句柄。
94
+ *
95
+ * 两种选择器,两条解析路:
96
+ * - **序号**(1 起,与 `sketchOnFace` 的 `face` 序号同口径):直接取自
97
+ * `getSubShapes(solid,'edge')` 的枚举序,即宿主在近似拓扑 `edges` 数组里看到的
98
+ * 那个下标 + 1。这是**首选**——近似拓扑没有 role 层,几何(长度 / 中点)在等长边
99
+ * 上无法区分,序号是唯一无歧义的指认方式。
100
+ * - **`EdgeTopoRef`**:纯几何匹配(length / midpoint)。解析不到或无法区分时如实
101
+ * 抛错,绝不静默退回"拿序号硬取"。
102
+ *
103
+ * @param entry - the mesh-solid entry (provides the live edge table).
104
+ * @param refs - edge selectors: 1-based ordinals or TopoRefs captured from the topology.
105
+ * @param opLabel - the op name (error messages).
106
+ * @returns the resolved edge handles, in the same order as `refs`.
107
+ * @throws {OpError} `E_TOPO_NOT_FOUND` when a selector cannot be resolved.
108
+ */
109
+ export declare function resolveMeshEdges(entry: MeshSolidEntry, refs: readonly (number | EdgeTopoRef)[], opLabel: string): BrepHandle[];
110
+ /**
111
+ * 面选择器数组 → 面句柄数组(`shell` 的 `openFaces` 用;序号或 `FaceTopoRef` 都收)。
112
+ *
113
+ * @param kernel - the mesh backend's L1 kernel.
114
+ * @param on - the mesh-solid shape hosting the faces.
115
+ * @param selectors - 1-based face ordinals or FaceTopoRefs.
116
+ * @param opLabel - the op name (error messages).
117
+ * @returns the live face handles, in the same order as `selectors`.
118
+ * @throws {OpError} when a selector cannot be resolved.
119
+ */
120
+ export declare function resolveMeshFaces(kernel: BrepEngineApi, on: Shape, selectors: readonly (number | FaceTopoRef)[], opLabel: string): BrepHandle[];
121
+ /**
122
+ * 把内核产出的**新网格实体句柄**封装成 op 产物。
123
+ *
124
+ * 一次三角化同时喂显示与拓扑(规则 1),并把句柄与近似拓扑登记到 pending 通道,
125
+ * 由引擎在语句执行后收编(同 `load`)。
126
+ *
127
+ * @param entry - the mesh-solid entry (backend for tessellation/topology/release).
128
+ * @param solid - the new mesh solid handle produced by the kernel call.
129
+ * @returns the product Shape carrying the new handle and its tessellation.
130
+ */
131
+ export declare function meshSolidProduct(entry: {
132
+ backend: MeshSolidBackend;
133
+ }, solid: BrepHandle): Shape;
134
+ /**
135
+ * 同上,但直接收后端(产物输入不是网格实体时用——如 `extrude` 的输入是一张面)。
136
+ *
137
+ * @param backend - the mesh backend (tessellation / topology / release).
138
+ * @param solid - the new mesh solid handle produced by the kernel call.
139
+ * @returns the product Shape carrying the new handle and its tessellation.
140
+ */
141
+ export declare function meshSolidProductWithBackend(backend: MeshSolidBackend, solid: BrepHandle): Shape;
142
+ /**
143
+ * 阵列 / 镜像族产物:把若干**自造副本**融成一个网格零件,并把副本句柄释放掉。
144
+ *
145
+ * 释放口径与 BREP 侧完全一致(`pattern.ts` 的 `finally { for (const c of raw) kernel.release(c) }`):
146
+ * - 释放的是**本次调用新建的副本**——它们是中间量,融合后无人再引用;
147
+ * - **不释放输入句柄**(`a` 在 `b = linearPattern(a)` 之后仍必须可用)。
148
+ *
149
+ * 副本之间通常是分离的(有间距的阵列),故 fuseAll 得到的是一体多壳的实体——与
150
+ * BREP 路径 fuseAll 分离副本的结局同形,不是"凑成一张皮"。
151
+ *
152
+ * 副本的**生成**也在 try 内:中途失败时已建出的副本同样会被释放(否则每个失败
153
+ * 调用都漏一批句柄)。
154
+ *
155
+ * @param entry - the mesh-solid entry (kernel + backend).
156
+ * @param opLabel - the op name (error messages).
157
+ * @param code - the op-level error code for kernel failures.
158
+ * @param makeCopies - creates the copies to fuse (called once, inside the guard).
159
+ * @returns the fused mesh solid as a new mesh part.
160
+ * @throws {OpError} with `code` when the kernel refuses a copy or the fusion.
161
+ */
162
+ export declare function meshPatternProduct(entry: MeshSolidBasic, opLabel: string, code: string, makeCopies: () => BrepHandle[]): Shape;
163
+ /** 网格链**面**的执行入口:内核 + 后端 + 面句柄(`sketchOnFace` 的网格分支用)。 */ export interface MeshFaceEntry {
164
+ /** 网格后端的 L1 契约面。 */
165
+ readonly kernel: BrepEngineApi;
166
+ /** 网格后端(三角化 / 释放)。 */
167
+ readonly backend: MeshSolidBackend;
168
+ /** 网格链面句柄。 */
169
+ readonly face: BrepHandle;
170
+ }
171
+ /**
172
+ * 取网格链面的执行入口(`sketchOnFace` 网格分支的输入门)。
173
+ *
174
+ * 与 `meshSolidEntry` 的两个失败面同构:输入没有网格链面身份 → 如实拒绝(它可能是
175
+ * 网格实体、BREP 面或裸网格,三种都不是这里要的东西);宿主没装配网格后端 → 装配事实。
176
+ *
177
+ * @param input - the op's geometry input (must be a mesh-chain face).
178
+ * @param opLabel - the op name (error messages).
179
+ * @returns the mesh-face entry for this input.
180
+ * @throws {MeshUnsupportedError} when the input is not a mesh-chain face or no backend is assembled.
181
+ */
182
+ export declare function meshFaceEntry(input: Shape, opLabel: string): MeshFaceEntry;
183
+ /**
184
+ * 把网格链面上的面选择器解析成活句柄(序号直接取;`FaceTopoRef` 走纯几何解析)。
185
+ *
186
+ * 网格零件没有 role 层,故与 `resolveMeshEdges` 同纪律:解析不到或无法区分时如实抛错,
187
+ * 绝不静默按序号硬取一张面。**同尺寸的平行面(立方体顶面/底面)在几何上不可区分**,
188
+ * 这种情形会以 `E_TOPO_AMBIGUOUS` 失败——调用方应改用序号。
189
+ *
190
+ * @param kernel - the mesh backend's L1 kernel.
191
+ * @param on - the mesh-solid shape hosting the face.
192
+ * @param selector - a 1-based face ordinal or a `FaceTopoRef`.
193
+ * @param opLabel - the op name (error messages).
194
+ * @returns the live face handle.
195
+ * @throws {OpError} `E_MESH_SOLID_UNSUPPORTED` / `E_TOPO_NOT_FOUND` / `E_TOPO_AMBIGUOUS`.
196
+ */
197
+ export declare function resolveMeshFaceHandle(kernel: BrepEngineApi, on: Shape, selector: number | FaceTopoRef, opLabel: string): BrepHandle;
198
+ /**
199
+ * 从一张网格链面取它的支撑平面(草图平面数据,方案 §4 Phase 3-1)。
200
+ *
201
+ * 两个数据源,各有各的理由:
202
+ * - **平面原点**取面的包围盒中心,不取 `surfaceCenterOfMass`:后者在 brepkit 上是
203
+ * "UV 域中点求值"的近似(内核没有 per-face 质心 API),对平面求的域中点是
204
+ * `getSurfaceDomain` 的中点;而平面域是 ±1e6 的**无限域**,其中点只是曲面参数原点,
205
+ * 可能位于面**之外**。包围盒中心是面自己的几何中心,草图从它铺出去必然落在面上。
206
+ * - **法向**取 UV 域中点的 `surfaceNormal`——L1 契约面上的中立方法(brepkit 侧映射
207
+ * `evaluateSurfaceNormal`),不直接调内核方言的 `getAnalyticSurfaceParams`。
208
+ *
209
+ * @param kernel - the mesh backend's L1 kernel.
210
+ * @param face - the live face handle.
211
+ * @returns the face's supporting plane frame (2D origin = the face's bbox centre).
212
+ */
213
+ export declare function meshFacePlane(kernel: BrepEngineApi, face: BrepHandle): Plane;
214
+ /**
215
+ * 把内核算出的网格链面句柄封装成 op 产物。
216
+ *
217
+ * 与 `meshSolidProductWithBackend` 的区别是**不登记** `MeshSolidRegistry` 与近似拓扑:
218
+ * 面不是零件,没有自己的注册表条目,下游也不需要"面的近似拓扑"(它自己就是拓扑的一部分)。
219
+ * 显示载荷取面自身的三角化(`meshShape` 按句柄类型分发到 face 分支)。
220
+ *
221
+ * @param backend - the mesh backend (tessellation).
222
+ * @param face - the new face handle produced by the kernel call.
223
+ * @returns the product Shape carrying the face handle and its tessellation.
224
+ */
225
+ export declare function meshFaceProduct(backend: MeshSolidBackend, face: BrepHandle): Shape;
226
+ /**
227
+ * 内核原生错误 → 带 op 名与输入几何的 OpError(几何失败必须带上下文,不裸抛内核串)。
228
+ *
229
+ * @param opLabel - the op name.
230
+ * @param code - the op-level error code.
231
+ * @param context - a short human description of what was being attempted.
232
+ * @param cause - the kernel's own error.
233
+ * @returns the wrapped op error.
234
+ */
235
+ export declare function meshKernelFailure(opLabel: string, code: string, context: string, cause: unknown): OpError;
236
+ //# sourceMappingURL=mesh-solid-op.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-solid-op.d.ts","sourceRoot":"","sources":["../../../src/api/internal/mesh-solid-op.ts"],"names":[],"mappings":"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"}