@faicad/faijs 0.16.1 → 0.18.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 (498) hide show
  1. package/LICENSE +4 -5
  2. package/NOTICE +5 -6
  3. package/dist/api/api-namespace.d.ts.map +1 -1
  4. package/dist/api/api-namespace.js +20 -2
  5. package/dist/api/api-namespace.js.map +1 -1
  6. package/dist/api/assembly/entities.d.ts +1 -1
  7. package/dist/api/assembly/entities.d.ts.map +1 -1
  8. package/dist/api/assembly/entities.js.map +1 -1
  9. package/dist/api/assembly/joints.d.ts +2 -2
  10. package/dist/api/assembly/joints.d.ts.map +1 -1
  11. package/dist/api/assembly/joints.js +2 -2
  12. package/dist/api/assembly/joints.js.map +1 -1
  13. package/dist/api/assembly/lower.d.ts +1 -1
  14. package/dist/api/assembly/lower.d.ts.map +1 -1
  15. package/dist/api/assembly/lower.js.map +1 -1
  16. package/dist/api/assembly/pose.d.ts +3 -3
  17. package/dist/api/assembly/pose.d.ts.map +1 -1
  18. package/dist/api/assembly/pose.js +1 -1
  19. package/dist/api/assembly/pose.js.map +1 -1
  20. package/dist/api/assembly/preview.d.ts +1 -1
  21. package/dist/api/assembly/preview.d.ts.map +1 -1
  22. package/dist/api/assembly/preview.js +1 -1
  23. package/dist/api/assembly/preview.js.map +1 -1
  24. package/dist/api/assembly/solve.d.ts.map +1 -1
  25. package/dist/api/assembly/solve.js +3 -3
  26. package/dist/api/assembly/solve.js.map +1 -1
  27. package/dist/api/assembly/solvers/assembly-tree.d.ts +98 -0
  28. package/dist/api/assembly/solvers/assembly-tree.d.ts.map +1 -0
  29. package/dist/api/assembly/solvers/assembly-tree.js +130 -0
  30. package/dist/api/assembly/solvers/assembly-tree.js.map +1 -0
  31. package/dist/api/assembly/solvers/chain-solver.d.ts +27 -0
  32. package/dist/api/assembly/solvers/chain-solver.d.ts.map +1 -0
  33. package/dist/api/assembly/solvers/chain-solver.js +330 -0
  34. package/dist/api/assembly/solvers/chain-solver.js.map +1 -0
  35. package/dist/api/assembly/solvers/global-solver.js +2 -2
  36. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  37. package/dist/api/assembly/solvers/joints-kinematics.d.ts +308 -0
  38. package/dist/api/assembly/solvers/joints-kinematics.d.ts.map +1 -0
  39. package/dist/api/assembly/solvers/joints-kinematics.js +643 -0
  40. package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -0
  41. package/dist/api/assembly/solvers/quat.d.ts +35 -0
  42. package/dist/api/assembly/solvers/quat.d.ts.map +1 -0
  43. package/dist/api/assembly/solvers/quat.js +84 -0
  44. package/dist/api/assembly/solvers/quat.js.map +1 -0
  45. package/dist/api/assembly/solvers/types.d.ts +33 -0
  46. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  47. package/dist/api/assembly/solvers/types.js.map +1 -1
  48. package/dist/api/boolean.d.ts.map +1 -1
  49. package/dist/api/boolean.js +66 -29
  50. package/dist/api/boolean.js.map +1 -1
  51. package/dist/api/brep-mirror/booleanFns.d.ts +40 -0
  52. package/dist/api/brep-mirror/booleanFns.d.ts.map +1 -0
  53. package/dist/api/brep-mirror/booleanFns.js +104 -0
  54. package/dist/api/brep-mirror/booleanFns.js.map +1 -0
  55. package/dist/api/brep-mirror/brepHelpers.d.ts +55 -0
  56. package/dist/api/brep-mirror/brepHelpers.d.ts.map +1 -0
  57. package/dist/api/brep-mirror/brepHelpers.js +131 -0
  58. package/dist/api/brep-mirror/brepHelpers.js.map +1 -0
  59. package/dist/api/brep-mirror/compoundFns.d.ts +47 -0
  60. package/dist/api/brep-mirror/compoundFns.d.ts.map +1 -0
  61. package/dist/api/brep-mirror/compoundFns.js +300 -0
  62. package/dist/api/brep-mirror/compoundFns.js.map +1 -0
  63. package/dist/api/brep-mirror/healingFns.d.ts +78 -0
  64. package/dist/api/brep-mirror/healingFns.d.ts.map +1 -0
  65. package/dist/api/brep-mirror/healingFns.js +294 -0
  66. package/dist/api/brep-mirror/healingFns.js.map +1 -0
  67. package/dist/api/brep-mirror/hullFns.d.ts +20 -0
  68. package/dist/api/brep-mirror/hullFns.d.ts.map +1 -0
  69. package/dist/api/brep-mirror/hullFns.js +46 -0
  70. package/dist/api/brep-mirror/hullFns.js.map +1 -0
  71. package/dist/api/brep-mirror/patternFns.d.ts +43 -0
  72. package/dist/api/brep-mirror/patternFns.d.ts.map +1 -0
  73. package/dist/api/brep-mirror/patternFns.js +178 -0
  74. package/dist/api/brep-mirror/patternFns.js.map +1 -0
  75. package/dist/api/brep-mirror/primitiveFns.d.ts +42 -0
  76. package/dist/api/brep-mirror/primitiveFns.d.ts.map +1 -0
  77. package/dist/api/brep-mirror/primitiveFns.js +104 -0
  78. package/dist/api/brep-mirror/primitiveFns.js.map +1 -0
  79. package/dist/api/brep-mirror/roofFns.d.ts +24 -0
  80. package/dist/api/brep-mirror/roofFns.d.ts.map +1 -0
  81. package/dist/api/brep-mirror/roofFns.js +229 -0
  82. package/dist/api/brep-mirror/roofFns.js.map +1 -0
  83. package/dist/api/brep-mirror/straightSkeleton.d.ts +36 -0
  84. package/dist/api/brep-mirror/straightSkeleton.d.ts.map +1 -0
  85. package/dist/api/brep-mirror/straightSkeleton.js +443 -0
  86. package/dist/api/brep-mirror/straightSkeleton.js.map +1 -0
  87. package/dist/api/brep-mirror/sweepFns.d.ts +55 -0
  88. package/dist/api/brep-mirror/sweepFns.d.ts.map +1 -0
  89. package/dist/api/brep-mirror/sweepFns.js +200 -0
  90. package/dist/api/brep-mirror/sweepFns.js.map +1 -0
  91. package/dist/api/brep-mirror/threadFns.d.ts +15 -0
  92. package/dist/api/brep-mirror/threadFns.d.ts.map +1 -1
  93. package/dist/api/brep-mirror/threadFns.js +37 -2
  94. package/dist/api/brep-mirror/threadFns.js.map +1 -1
  95. package/dist/api/brep-mirror/topologyFns.d.ts +74 -0
  96. package/dist/api/brep-mirror/topologyFns.d.ts.map +1 -0
  97. package/dist/api/brep-mirror/topologyFns.js +276 -0
  98. package/dist/api/brep-mirror/topologyFns.js.map +1 -0
  99. package/dist/api/brep-topology.d.ts +190 -0
  100. package/dist/api/brep-topology.d.ts.map +1 -0
  101. package/dist/api/brep-topology.js +337 -0
  102. package/dist/api/brep-topology.js.map +1 -0
  103. package/dist/api/brepjs-compat/constants.d.ts +11 -0
  104. package/dist/api/brepjs-compat/constants.d.ts.map +1 -0
  105. package/dist/api/brepjs-compat/constants.js +11 -0
  106. package/dist/api/brepjs-compat/constants.js.map +1 -0
  107. package/dist/api/brepjs-compat/index.d.ts +19 -232
  108. package/dist/api/brepjs-compat/index.d.ts.map +1 -1
  109. package/dist/api/brepjs-compat/index.js +19 -286
  110. package/dist/api/brepjs-compat/index.js.map +1 -1
  111. package/dist/api/brepjs-compat/planeOps.d.ts +98 -0
  112. package/dist/api/brepjs-compat/planeOps.d.ts.map +1 -0
  113. package/dist/api/brepjs-compat/planeOps.js +170 -0
  114. package/dist/api/brepjs-compat/planeOps.js.map +1 -0
  115. package/dist/api/brepjs-compat/planeTypes.d.ts +24 -0
  116. package/dist/api/brepjs-compat/planeTypes.d.ts.map +1 -0
  117. package/dist/api/brepjs-compat/planeTypes.js +8 -0
  118. package/dist/api/brepjs-compat/planeTypes.js.map +1 -0
  119. package/dist/api/brepjs-compat/types.d.ts +64 -0
  120. package/dist/api/brepjs-compat/types.d.ts.map +1 -0
  121. package/dist/api/brepjs-compat/types.js +48 -0
  122. package/dist/api/brepjs-compat/types.js.map +1 -0
  123. package/dist/api/brepjs-compat/vecOps.d.ts +124 -0
  124. package/dist/api/brepjs-compat/vecOps.d.ts.map +1 -0
  125. package/dist/api/brepjs-compat/vecOps.js +202 -0
  126. package/dist/api/brepjs-compat/vecOps.js.map +1 -0
  127. package/dist/api/chamfer.d.ts +12 -3
  128. package/dist/api/chamfer.d.ts.map +1 -1
  129. package/dist/api/chamfer.js +54 -20
  130. package/dist/api/chamfer.js.map +1 -1
  131. package/dist/api/compound-geom.d.ts.map +1 -1
  132. package/dist/api/compound-geom.js +8 -2
  133. package/dist/api/compound-geom.js.map +1 -1
  134. package/dist/api/draft.d.ts +69 -0
  135. package/dist/api/draft.d.ts.map +1 -0
  136. package/dist/api/draft.js +109 -0
  137. package/dist/api/draft.js.map +1 -0
  138. package/dist/api/edge-ref.d.ts.map +1 -1
  139. package/dist/api/edge-ref.js +2 -2
  140. package/dist/api/edge-ref.js.map +1 -1
  141. package/dist/api/engrave.d.ts.map +1 -1
  142. package/dist/api/engrave.js +2 -3
  143. package/dist/api/engrave.js.map +1 -1
  144. package/dist/api/extrude.d.ts.map +1 -1
  145. package/dist/api/extrude.js +44 -14
  146. package/dist/api/extrude.js.map +1 -1
  147. package/dist/api/face-ref.d.ts.map +1 -1
  148. package/dist/api/face-ref.js +2 -2
  149. package/dist/api/face-ref.js.map +1 -1
  150. package/dist/api/feature-repair.d.ts +137 -0
  151. package/dist/api/feature-repair.d.ts.map +1 -0
  152. package/dist/api/feature-repair.js +221 -0
  153. package/dist/api/feature-repair.js.map +1 -0
  154. package/dist/api/fillet-variable.d.ts +35 -0
  155. package/dist/api/fillet-variable.d.ts.map +1 -0
  156. package/dist/api/fillet-variable.js +71 -0
  157. package/dist/api/fillet-variable.js.map +1 -0
  158. package/dist/api/fillet.d.ts +3 -0
  159. package/dist/api/fillet.d.ts.map +1 -1
  160. package/dist/api/fillet.js +7 -4
  161. package/dist/api/fillet.js.map +1 -1
  162. package/dist/api/generated/2d.d.ts +1 -13
  163. package/dist/api/generated/2d.d.ts.map +1 -1
  164. package/dist/api/generated/2d.js +6 -1
  165. package/dist/api/generated/2d.js.map +1 -1
  166. package/dist/api/generated/brepjs/index.d.ts +298 -298
  167. package/dist/api/generated/brepjs/index.d.ts.map +1 -1
  168. package/dist/api/generated/brepjs/index.js +183 -183
  169. package/dist/api/generated/brepjs/index.js.map +1 -1
  170. package/dist/api/generated/core.d.ts +3 -123
  171. package/dist/api/generated/core.d.ts.map +1 -1
  172. package/dist/api/generated/core.js +2 -81
  173. package/dist/api/generated/core.js.map +1 -1
  174. package/dist/api/generated/gear.d.ts +1 -15
  175. package/dist/api/generated/gear.d.ts.map +1 -1
  176. package/dist/api/generated/gear.js +6 -3
  177. package/dist/api/generated/gear.js.map +1 -1
  178. package/dist/api/generated/io.d.ts +1 -13
  179. package/dist/api/generated/io.d.ts.map +1 -1
  180. package/dist/api/generated/io.js +6 -1
  181. package/dist/api/generated/io.js.map +1 -1
  182. package/dist/api/generated/kernel.d.ts +1 -39
  183. package/dist/api/generated/kernel.d.ts.map +1 -1
  184. package/dist/api/generated/kernel.js +6 -4
  185. package/dist/api/generated/kernel.js.map +1 -1
  186. package/dist/api/generated/measurement.d.ts +53 -97
  187. package/dist/api/generated/measurement.d.ts.map +1 -1
  188. package/dist/api/generated/measurement.js +48 -143
  189. package/dist/api/generated/measurement.js.map +1 -1
  190. package/dist/api/generated/ns.d.ts +1 -10
  191. package/dist/api/generated/ns.d.ts.map +1 -1
  192. package/dist/api/generated/ns.js +2 -10
  193. package/dist/api/generated/ns.js.map +1 -1
  194. package/dist/api/generated/operations.d.ts +65 -110
  195. package/dist/api/generated/operations.d.ts.map +1 -1
  196. package/dist/api/generated/operations.js +132 -80
  197. package/dist/api/generated/operations.js.map +1 -1
  198. package/dist/api/generated/projection.d.ts +1 -8
  199. package/dist/api/generated/projection.d.ts.map +1 -1
  200. package/dist/api/generated/projection.js +6 -4
  201. package/dist/api/generated/projection.js.map +1 -1
  202. package/dist/api/generated/query.d.ts +1 -9
  203. package/dist/api/generated/query.d.ts.map +1 -1
  204. package/dist/api/generated/query.js +6 -1
  205. package/dist/api/generated/query.js.map +1 -1
  206. package/dist/api/generated/script-face-manifest.d.ts +2 -0
  207. package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
  208. package/dist/api/generated/script-face-manifest.js +22 -10
  209. package/dist/api/generated/script-face-manifest.js.map +1 -1
  210. package/dist/api/generated/script-face.d.ts +52 -27
  211. package/dist/api/generated/script-face.d.ts.map +1 -1
  212. package/dist/api/generated/script-face.js +18 -4
  213. package/dist/api/generated/script-face.js.map +1 -1
  214. package/dist/api/generated/sketching.d.ts +4 -7
  215. package/dist/api/generated/sketching.d.ts.map +1 -1
  216. package/dist/api/generated/sketching.js +10 -8
  217. package/dist/api/generated/sketching.js.map +1 -1
  218. package/dist/api/generated/text.d.ts +1 -6
  219. package/dist/api/generated/text.d.ts.map +1 -1
  220. package/dist/api/generated/text.js +6 -3
  221. package/dist/api/generated/text.js.map +1 -1
  222. package/dist/api/generated/topology.d.ts +77 -175
  223. package/dist/api/generated/topology.d.ts.map +1 -1
  224. package/dist/api/generated/topology.js +172 -131
  225. package/dist/api/generated/topology.js.map +1 -1
  226. package/dist/api/geom.d.ts.map +1 -1
  227. package/dist/api/geom.js +2 -2
  228. package/dist/api/geom.js.map +1 -1
  229. package/dist/api/helix.d.ts +51 -0
  230. package/dist/api/helix.d.ts.map +1 -0
  231. package/dist/api/helix.js +63 -0
  232. package/dist/api/helix.js.map +1 -0
  233. package/dist/api/import-step.d.ts.map +1 -1
  234. package/dist/api/import-step.js +6 -2
  235. package/dist/api/import-step.js.map +1 -1
  236. package/dist/api/index.d.ts +20 -6
  237. package/dist/api/index.d.ts.map +1 -1
  238. package/dist/api/index.js +30 -13
  239. package/dist/api/index.js.map +1 -1
  240. package/dist/api/internal/compat-op.d.ts +10 -0
  241. package/dist/api/internal/compat-op.d.ts.map +1 -1
  242. package/dist/api/internal/compat-op.js +9 -3
  243. package/dist/api/internal/compat-op.js.map +1 -1
  244. package/dist/api/internal/compat-projection.d.ts +4 -4
  245. package/dist/api/internal/compat-projection.js +7 -7
  246. package/dist/api/internal/compat-projection.js.map +1 -1
  247. package/dist/api/internal/l3-bridge.d.ts +75 -42
  248. package/dist/api/internal/l3-bridge.d.ts.map +1 -1
  249. package/dist/api/internal/l3-bridge.js +105 -50
  250. package/dist/api/internal/l3-bridge.js.map +1 -1
  251. package/dist/api/internal/profile-wire.d.ts +31 -0
  252. package/dist/api/internal/profile-wire.d.ts.map +1 -0
  253. package/dist/api/internal/profile-wire.js +37 -0
  254. package/dist/api/internal/profile-wire.js.map +1 -0
  255. package/dist/api/internal/replica-role-table.js +2 -2
  256. package/dist/api/internal/replica-role-table.js.map +1 -1
  257. package/dist/api/loft.d.ts +66 -0
  258. package/dist/api/loft.d.ts.map +1 -0
  259. package/dist/api/loft.js +111 -0
  260. package/dist/api/loft.js.map +1 -0
  261. package/dist/api/measurement/index.d.ts +51 -0
  262. package/dist/api/measurement/index.d.ts.map +1 -0
  263. package/dist/api/measurement/index.js +71 -0
  264. package/dist/api/measurement/index.js.map +1 -0
  265. package/dist/api/occt-kernel-bridge.d.ts +5 -8
  266. package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
  267. package/dist/api/occt-kernel-bridge.js +18 -14
  268. package/dist/api/occt-kernel-bridge.js.map +1 -1
  269. package/dist/api/pattern.d.ts.map +1 -1
  270. package/dist/api/pattern.js +3 -4
  271. package/dist/api/pattern.js.map +1 -1
  272. package/dist/api/place.d.ts.map +1 -1
  273. package/dist/api/place.js +2 -4
  274. package/dist/api/place.js.map +1 -1
  275. package/dist/api/primitives.d.ts.map +1 -1
  276. package/dist/api/primitives.js +3 -4
  277. package/dist/api/primitives.js.map +1 -1
  278. package/dist/api/profile.d.ts +89 -0
  279. package/dist/api/profile.d.ts.map +1 -0
  280. package/dist/api/profile.js +194 -0
  281. package/dist/api/profile.js.map +1 -0
  282. package/dist/api/replicate.d.ts +28 -1
  283. package/dist/api/replicate.d.ts.map +1 -1
  284. package/dist/api/replicate.js +34 -23
  285. package/dist/api/replicate.js.map +1 -1
  286. package/dist/api/result.d.ts +6 -11
  287. package/dist/api/result.d.ts.map +1 -1
  288. package/dist/api/result.js +6 -11
  289. package/dist/api/result.js.map +1 -1
  290. package/dist/api/revolve.d.ts.map +1 -1
  291. package/dist/api/revolve.js +15 -14
  292. package/dist/api/revolve.js.map +1 -1
  293. package/dist/api/screw.d.ts +3 -0
  294. package/dist/api/screw.d.ts.map +1 -1
  295. package/dist/api/screw.js +9 -4
  296. package/dist/api/screw.js.map +1 -1
  297. package/dist/api/sdf.d.ts +1 -1
  298. package/dist/api/section-by-plane.d.ts +42 -0
  299. package/dist/api/section-by-plane.d.ts.map +1 -0
  300. package/dist/api/section-by-plane.js +61 -0
  301. package/dist/api/section-by-plane.js.map +1 -0
  302. package/dist/api/shell.d.ts +45 -0
  303. package/dist/api/shell.d.ts.map +1 -0
  304. package/dist/api/shell.js +73 -0
  305. package/dist/api/shell.js.map +1 -0
  306. package/dist/api/sketch.d.ts +8 -1
  307. package/dist/api/sketch.d.ts.map +1 -1
  308. package/dist/api/sketch.js +12 -7
  309. package/dist/api/sketch.js.map +1 -1
  310. package/dist/api/split-by-plane.d.ts +41 -0
  311. package/dist/api/split-by-plane.d.ts.map +1 -0
  312. package/dist/api/split-by-plane.js +60 -0
  313. package/dist/api/split-by-plane.js.map +1 -0
  314. package/dist/api/split.d.ts +6 -1
  315. package/dist/api/split.d.ts.map +1 -1
  316. package/dist/api/split.js +23 -9
  317. package/dist/api/split.js.map +1 -1
  318. package/dist/api/surface/arg-spec.d.ts +22 -0
  319. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  320. package/dist/api/surface/arg-spec.js +729 -477
  321. package/dist/api/surface/arg-spec.js.map +1 -1
  322. package/dist/api/sweep.d.ts +55 -0
  323. package/dist/api/sweep.d.ts.map +1 -0
  324. package/dist/api/sweep.js +86 -0
  325. package/dist/api/sweep.js.map +1 -0
  326. package/dist/api/thicken.d.ts +36 -0
  327. package/dist/api/thicken.d.ts.map +1 -0
  328. package/dist/api/thicken.js +55 -0
  329. package/dist/api/thicken.js.map +1 -0
  330. package/dist/api/transform.d.ts +8 -0
  331. package/dist/api/transform.d.ts.map +1 -1
  332. package/dist/api/transform.js +15 -4
  333. package/dist/api/transform.js.map +1 -1
  334. package/dist/api/view/cameraFns.d.ts +48 -0
  335. package/dist/api/view/cameraFns.d.ts.map +1 -0
  336. package/dist/api/view/cameraFns.js +75 -0
  337. package/dist/api/view/cameraFns.js.map +1 -0
  338. package/dist/api/view/projectionPlanes.d.ts +25 -0
  339. package/dist/api/view/projectionPlanes.d.ts.map +1 -0
  340. package/dist/api/view/projectionPlanes.js +30 -0
  341. package/dist/api/view/projectionPlanes.js.map +1 -0
  342. package/dist/api/view/view-camera.d.ts +2 -2
  343. package/dist/api/view/view-camera.d.ts.map +1 -1
  344. package/dist/api/view/view-camera.js +3 -3
  345. package/dist/api/view/view-camera.js.map +1 -1
  346. package/dist/api/view/view-projection.d.ts +9 -6
  347. package/dist/api/view/view-projection.d.ts.map +1 -1
  348. package/dist/api/view/view-projection.js +132 -65
  349. package/dist/api/view/view-projection.js.map +1 -1
  350. package/dist/api/wire.d.ts +45 -0
  351. package/dist/api/wire.d.ts.map +1 -0
  352. package/dist/api/wire.js +96 -0
  353. package/dist/api/wire.js.map +1 -0
  354. package/dist/boolean/creased-normals.d.ts +50 -0
  355. package/dist/boolean/creased-normals.d.ts.map +1 -0
  356. package/dist/boolean/creased-normals.js +114 -0
  357. package/dist/boolean/creased-normals.js.map +1 -0
  358. package/dist/boolean/deriveNormals.d.ts +4 -1
  359. package/dist/boolean/deriveNormals.d.ts.map +1 -1
  360. package/dist/boolean/deriveNormals.js +5 -2
  361. package/dist/boolean/deriveNormals.js.map +1 -1
  362. package/dist/brep/brep-ops.d.ts +6 -0
  363. package/dist/brep/brep-ops.d.ts.map +1 -1
  364. package/dist/brep/brep-ops.js +11 -2
  365. package/dist/brep/brep-ops.js.map +1 -1
  366. package/dist/brep/brep-topology.d.ts +4 -0
  367. package/dist/brep/brep-topology.d.ts.map +1 -1
  368. package/dist/brep/brep-topology.js +4 -0
  369. package/dist/brep/brep-topology.js.map +1 -1
  370. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  371. package/dist/brep/engine/adapters/brep-mock.js +79 -59
  372. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  373. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  374. package/dist/brep/engine/adapters/brepkit.js +35 -2
  375. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  376. package/dist/brep/engine/adapters/occt.d.ts +15 -7
  377. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  378. package/dist/brep/engine/adapters/occt.js +64 -167
  379. package/dist/brep/engine/adapters/occt.js.map +1 -1
  380. package/dist/brep/engine/primitives.d.ts +93 -130
  381. package/dist/brep/engine/primitives.d.ts.map +1 -1
  382. package/dist/brep/engine/primitives.js +9 -7
  383. package/dist/brep/engine/primitives.js.map +1 -1
  384. package/dist/brep/engine/types.d.ts +14 -1
  385. package/dist/brep/engine/types.d.ts.map +1 -1
  386. package/dist/brep/engine/types.js +11 -1
  387. package/dist/brep/engine/types.js.map +1 -1
  388. package/dist/brep/export/step.d.ts +3 -0
  389. package/dist/brep/export/step.d.ts.map +1 -1
  390. package/dist/brep/export/step.js +7 -1
  391. package/dist/brep/export/step.js.map +1 -1
  392. package/dist/brep/face-evolution.d.ts +8 -0
  393. package/dist/brep/face-evolution.d.ts.map +1 -1
  394. package/dist/brep/face-evolution.js +15 -3
  395. package/dist/brep/face-evolution.js.map +1 -1
  396. package/dist/brep/handle-bridge.d.ts +20 -2
  397. package/dist/brep/handle-bridge.d.ts.map +1 -1
  398. package/dist/brep/handle-bridge.js +25 -2
  399. package/dist/brep/handle-bridge.js.map +1 -1
  400. package/dist/brepkit-kernel/brepkitKernel.d.ts +25 -5
  401. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  402. package/dist/brepkit-kernel/brepkitKernel.js +782 -218
  403. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  404. package/dist/brepkit-kernel/multi-version-test.d.ts +40 -0
  405. package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -0
  406. package/dist/brepkit-kernel/multi-version-test.js +89 -0
  407. package/dist/brepkit-kernel/multi-version-test.js.map +1 -0
  408. package/dist/cad-runtime/admit-compat-lib.d.ts +6 -1
  409. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  410. package/dist/cad-runtime/admit-compat-lib.js +5 -1
  411. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  412. package/dist/cad-runtime/backend-dispatch.d.ts +9 -3
  413. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  414. package/dist/cad-runtime/backend-dispatch.js +32 -2
  415. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  416. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  417. package/dist/cad-runtime/direct-executor.js +8 -2
  418. package/dist/cad-runtime/direct-executor.js.map +1 -1
  419. package/dist/cad-runtime/runtime.d.ts +3 -0
  420. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  421. package/dist/cad-runtime/runtime.js +3 -1
  422. package/dist/cad-runtime/runtime.js.map +1 -1
  423. package/dist/define-op.d.ts +18 -2
  424. package/dist/define-op.d.ts.map +1 -1
  425. package/dist/define-op.js +29 -1
  426. package/dist/define-op.js.map +1 -1
  427. package/dist/env-agnostic.d.ts +3 -0
  428. package/dist/env-agnostic.d.ts.map +1 -1
  429. package/dist/env-agnostic.js +7 -0
  430. package/dist/env-agnostic.js.map +1 -1
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +3 -4
  433. package/dist/index.js.map +1 -1
  434. package/dist/lang/symbol-table.generated.d.ts +29 -1
  435. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  436. package/dist/lang/symbol-table.generated.js +30 -2
  437. package/dist/lang/symbol-table.generated.js.map +1 -1
  438. package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
  439. package/dist/occt-kernel/highLevelApi.js +6 -3
  440. package/dist/occt-kernel/highLevelApi.js.map +1 -1
  441. package/dist/occt-kernel/hullGeometry.d.ts +31 -0
  442. package/dist/occt-kernel/hullGeometry.d.ts.map +1 -0
  443. package/dist/occt-kernel/hullGeometry.js +319 -0
  444. package/dist/occt-kernel/hullGeometry.js.map +1 -0
  445. package/dist/occt-kernel/hullOps.d.ts +24 -0
  446. package/dist/occt-kernel/hullOps.d.ts.map +1 -0
  447. package/dist/occt-kernel/hullOps.js +52 -0
  448. package/dist/occt-kernel/hullOps.js.map +1 -0
  449. package/dist/occt-kernel/occt-primitives.d.ts +14 -0
  450. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -0
  451. package/dist/occt-kernel/occt-primitives.js +351 -0
  452. package/dist/occt-kernel/occt-primitives.js.map +1 -0
  453. package/dist/occt-kernel/occtKernel.d.ts +14 -6
  454. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  455. package/dist/occt-kernel/occtKernel.js +11 -3
  456. package/dist/occt-kernel/occtKernel.js.map +1 -1
  457. package/dist/occt-kernel/topologyExt.js +2 -2
  458. package/dist/occt-kernel/topologyExt.js.map +1 -1
  459. package/dist/primitives/brep-primitives.d.ts +4 -0
  460. package/dist/primitives/brep-primitives.d.ts.map +1 -1
  461. package/dist/primitives/brep-primitives.js +4 -0
  462. package/dist/primitives/brep-primitives.js.map +1 -1
  463. package/dist/result/bug.d.ts +22 -0
  464. package/dist/result/bug.d.ts.map +1 -0
  465. package/dist/result/bug.js +28 -0
  466. package/dist/result/bug.js.map +1 -0
  467. package/dist/result/errors.d.ts +270 -0
  468. package/dist/result/errors.d.ts.map +1 -0
  469. package/dist/result/errors.js +317 -0
  470. package/dist/result/errors.js.map +1 -0
  471. package/dist/result/kernelErrorTranslation.d.ts +21 -0
  472. package/dist/result/kernelErrorTranslation.d.ts.map +1 -0
  473. package/dist/result/kernelErrorTranslation.js +102 -0
  474. package/dist/result/kernelErrorTranslation.js.map +1 -0
  475. package/dist/result/result.d.ts +213 -0
  476. package/dist/result/result.d.ts.map +1 -0
  477. package/dist/result/result.js +336 -0
  478. package/dist/result/result.js.map +1 -0
  479. package/dist/result/vec3.d.ts +12 -0
  480. package/dist/result/vec3.d.ts.map +1 -0
  481. package/dist/result/vec3.js +14 -0
  482. package/dist/result/vec3.js.map +1 -0
  483. package/dist/runtime-state.d.ts +9 -0
  484. package/dist/runtime-state.d.ts.map +1 -1
  485. package/dist/runtime-state.js.map +1 -1
  486. package/dist/sdk.d.ts +3 -1
  487. package/dist/sdk.d.ts.map +1 -1
  488. package/dist/sdk.js +2 -1
  489. package/dist/sdk.js.map +1 -1
  490. package/dist/shape.d.ts +43 -1
  491. package/dist/shape.d.ts.map +1 -1
  492. package/dist/shape.js +57 -1
  493. package/dist/shape.js.map +1 -1
  494. package/dist/topology/naming/geom-hint.js +1 -1
  495. package/dist/topology/naming/geom-hint.js.map +1 -1
  496. package/dist/topology/naming/score.js +1 -1
  497. package/dist/topology/naming/score.js.map +1 -1
  498. package/package.json +6 -16
@@ -1 +1 @@
1
- {"version":3,"file":"brepkitKernel.js","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAsB,MAAM,eAAe,CAAA;AAgBnE,iEAAiE;AACjE,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAc,EAAE,CAAC,CAAe,CAAA;AAC3D,MAAM,KAAK,GAAG,CAAC,CAAa,EAAU,EAAE,CAAC,CAAsB,CAAA;AAC/D,MAAM,GAAG,GAAG,CAAC,CAA+B,EAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAsB,CAAC,CAAA;AAE7F;;;;;;;;;;;;;;GAcG;AACH,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,MAAiC,CAAA;YAC3C,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACnE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAa,EAAE,CAAA;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,EAAE;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC/D,OAAO,GAAG,CAAA;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1C,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAsB,EAAE,MAAM,CAAC,CAAA;QACpE,MAAM,CAAC,GAAG,CAA4B,CAAA;QACtC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,GAAG,GAAa,EAAE,CAAA;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/D,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,yCAAyC;AACzC,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,iEAAiE,CAAC,CAAA;AAC1H,CAAC;AAED,uDAAuD;AACvD,SAAS,eAAe,CAAC,MAAqB,EAAE,IAAY,EAAE,UAAkB;IAC9E,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACzF,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,CAAC;QAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5C,IAAI,CAAC,GAAG,UAAU,CAAA;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,oEAAoE;AACpE,SAAS,YAAY,CACnB,MAAqB,EACrB,GAAW,EACX,YAAoB,EACpB,eAAyB,EACzB,cAAsB;IAEtB,iHAAiH;IACjH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAG5B,CAAA;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;IAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACzE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5D,mDAAmD;IACnD,qDAAqD;IACrD,gEAAgE;IAChE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACtC,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjD,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IACD,4CAA4C;IAC5C,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,EAAE,IAAI,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,CAAA;IACpF,CAAC;IACD,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,GAAG,EAAkB,CAAA;QACjD,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7E,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AACzE,CAAC;AAED,2DAA2D;AAC3D,MAAM,YAAY,GAAG,IAAI,OAAO,EAAsC,CAAA;AAKtE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;IACtC,UAAU,GAAG,MAAM,CAAA;IACnB,IAAI,iBAAiB,GAAG,CAAC,CAAA;IACzB,+CAA+C;IAC/C,kEAAkE;IAClE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IACpC,MAAM,YAAY,GAAG,GAAW,EAAE;QAChC,IAAI,CAAC;YACH,OAAO,OAAO,MAAM,CAAC,iBAAiB,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChG,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,CAAC,CAAA;QAAC,CAAC;IACtB,CAAC,CAAA;IACD,0CAA0C;IAC1C,MAAM,aAAa,GAAG,CAAI,CAAI,EAAK,EAAE,GAAG,iBAAiB,GAAG,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAA;IAEtF,MAAM,GAAG,GAAG;QACV,aAAa;QACb,OAAO,CAAC,MAAkB,IAAqD,CAAC;QAChF,iDAAiD;QACjD,oBAAoB;YAClB,MAAM,GAAG,GAAG,YAAY,EAAE,CAAA;YAC1B,MAAM,KAAK,GAAG,GAAG,GAAG,iBAAiB,CAAA;YACrC,iBAAiB,GAAG,GAAG,CAAA;YACvB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,aAAa;QACb,OAAO,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC;QACvG,kBAAkB,CAAC,OAAiB,EAAE,OAAiB;YACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACtH,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YACpC,OAAO,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,iBAAiB,CACvE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAC/F,CAAC,CAAC,CAAC,CAAA;QACN,CAAC;QACD,YAAY,CAAC,MAAc,EAAE,MAAc,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA,CAAC,CAAC;QACjH,UAAU,CAAC,MAAc,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC;QACzF,QAAQ,CAAC,EAAU,EAAE,EAAU,EAAE,MAAc,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA,CAAC,CAAC;QACjH,aAAa,CAAC,MAAc,EAAE,OAAe,IAAgB,OAAO,WAAW,CAAC,eAAe,CAAC,CAAA,CAAC,CAAC;QAElG,aAAa;QACb,OAAO,CAAC,MAAkB,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,IAAgB,OAAO,WAAW,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,EAAE,6DAA6D;QAC/K,IAAI,CAAC,MAAoB,EAAE,QAAiB,EAAE,MAAe,IAAgB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC;QAEzG,cAAc;QACd,IAAI,CAAC,CAAa,EAAE,CAAa,IAAgB,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAClH,GAAG,CAAC,CAAa,EAAE,CAAa,IAAgB,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAChH,MAAM,CAAC,CAAa,EAAE,CAAa,IAAgB,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QACtH,SAAS,CAAC,CAAa,EAAE,CAAa,IAAgB,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QACzH,OAAO,CAAC,EAAc,EAAE,EAAc,IAAgB,OAAO,WAAW,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,EAAE,kDAAkD;QACzI,OAAO,CAAC,MAAoB;YAC1B,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpF,CAAC;QAED,cAAc;QACd,OAAO,CAAC,KAAiB,EAAE,KAAmB,EAAE,QAAgB;YAC9D,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC3G,CAAC;QACD,gBAAgB,CAAC,KAAiB,EAAE,KAAmB,EAAE,QAAgB,EAAE,QAAgB;YACzF,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QAClI,CAAC;QACD,MAAM,CAAC,KAAiB,EAAE,KAAmB,EAAE,MAAc;YAC3D,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACxG,CAAC;QACD,cAAc,CAAC,KAAiB,EAAE,IAAgB,EAAE,WAAmB,EAAE,SAAiB;YACxF,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;QAC1G,CAAC;QACD,iBAAiB,CAAC,KAAiB,EAAE,KAAmB,EAAE,MAAc,EAAE,eAAyB,EAAE,cAAsB;YACzH,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YAC/F,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,CAAA;QAC1F,CAAC;QACD,kBAAkB,CAAC,MAAkB,EAAE,MAAoB,EAAE,SAAiB,EAAE,gBAA0B,EAAE,eAAuB;YACjI,qFAAqF;YACrF,OAAO,WAAW,CAAC,oBAAoB,CAAC,CAAA;QAC1C,CAAC;QAED,WAAW;QACX,kEAAkE;QAClE,8CAA8C;QAC9C,kEAAkE;QAClE,iEAAiE;QACjE,2CAA2C;QAC3C,SAAS,CAAC,KAAiB,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;YAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YACxC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;YACvE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,KAAK,CAAC,KAAiB,EAAE,MAAgB,EAAE,MAAc;YACvD,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YACxC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;YACrE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,SAAS,CAAC,KAAiB,EAAE,MAAgB;YAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YACxC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;YAChD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,OAAO,CAAC,KAAiB,EAAE,MAAgB;YACzC,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YACxC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;YAChD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,gBAAgB,CAAC,KAAiB,EAAE,MAAgB;YAClD,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YACxC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;YAChD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,IAAI,CAAC,KAAiB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAEvF,+EAA+E;QAC/E,iEAAiE;QACjE,uEAAuE;QACvE,aAAa,CAAC,KAAiB,EAAE,SAAmB,EAAE,OAAe,EAAE,KAAa;YAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YAC1G,OAAO,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9D,CAAC;QACD,eAAe,CAAC,KAAiB,EAAE,MAAgB,EAAE,IAAc,EAAE,SAAiB,EAAE,KAAa;YACnG,+EAA+E;YAC/E,6DAA6D;YAC7D,qCAAqC;YACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACpF,OAAO,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9D,CAAC;QACD,WAAW,CAAC,KAAiB,EAAE,UAAoB,EAAE,UAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc;YAC3I,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAChC,KAAK,CAAC,KAAK,CAAC,EACZ,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EACxC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EACxC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CACnC,CAAC,CAAA;QACJ,CAAC;QAED,aAAa;QACb,YAAY,CAAC,KAAe,EAAE,GAAa;YACzC,OAAO,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACtF,CAAC;QACD,WAAW,CAAC,MAAgB,EAAE,IAAc,EAAE,IAAc,IAAgB,OAAO,WAAW,CAAC,aAAa,CAAC,CAAA,CAAC,CAAC;QAC/G,cAAc,CAAC,cAA0B,IAAgB,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAC;QAE/F,aAAa;QACb,QAAQ,CAAC,KAAmB;YAC1B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QAC5E,CAAC;QACD,QAAQ,CAAC,IAAgB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAChG,YAAY,CAAC,MAAoB;YAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1E,CAAC;QACD,cAAc,CAAC,KAAmB,EAAE,SAAkB;YACpD,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAA;QACxF,CAAC;QACD,YAAY,CAAC,EAAY,EAAE,EAAY,EAAE,EAAY,IAAgB,OAAO,WAAW,CAAC,cAAc,CAAC,CAAA,CAAC,CAAC;QACzG,cAAc,CAAC,IAAgB,EAAE,SAAuB;YACtD,OAAO,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5F,CAAC;QAED,4BAA4B;QAC5B,SAAS,CAAC,KAAiB,EAAE,OAA+B;YAC1D,MAAM,UAAU,GAAG,OAAO,EAAE,gBAAgB,IAAI,GAAG,CAAA;YACnD,MAAM,OAAO,GAAG,OAAO,EAAE,iBAAiB,IAAI,GAAG,CAAA;YACjD,MAAM,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAC5E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyF,CAAA;YACjH,iFAAiF;YACjF,yDAAyD;YACzD,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAA;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC5C,MAAM,UAAU,GAAa,EAAE,CAAA;YAC/B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YACjH,CAAC;YAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC7B,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC/C,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC5C,CAAC;YACD,OAAO;gBACL,SAAS,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxC,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;gBACpC,OAAO,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;gBACnC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACnC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU;gBACV,SAAS;aACV,CAAA;QACH,CAAC;QACD,SAAS,CAAC,KAAiB,EAAE,UAAmB;YAC9C,MAAM,CAAC,GAAG,UAAU,IAAI,GAAG,CAAA;YAC3B,6FAA6F;YAC7F,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,CAElD,CAAA;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;YACtC,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;YAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;YACnC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBAC7B,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;gBAC9D,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;gBACzB,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;gBAC7B,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,kCAAkC;YAC9D,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAA;QACrG,CAAC;QAED,aAAa;QACb,kEAAkE;QAClE,iFAAiF;QACjF,oEAAoE;QACpE,oEAAoE;QACpE,qDAAqD;QACrD,6DAA6D;QAC7D,YAAY,CAAC,KAAiB,EAAE,IAAsB;YACpD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;YACtB,IAAI,IAAc,CAAA;YAClB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,sBAAsB;gBACtB,IAAI,CAAC;oBAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;gBAAC,CAAC;gBAC3C,MAAM,CAAC;oBAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBAAC,CAAC;gBACrD,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACzC,CAAC;iBAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC7B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;YAClC,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;oBAChC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC9C,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,gCAAgC;gBAChC,IAAI,CAAC;oBAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;gBAAC,CAAC;gBAC/C,MAAM,CAAC;oBAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;gBAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,WAAW,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAA;YAC7C,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3B,CAAC;QACD,UAAU,CAAC,MAAoB;YAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACpB,IAAI,CAAC;oBAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;gBAAC,CAAC;YACzF,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,cAAc,CAAC,KAAiB,EAAE,IAAsB,EAAE,cAAsB;YAC9E,IAAI,IAAI,KAAK,MAAM;gBAAE,OAAO,WAAW,CAAC,kBAAkB,IAAI,GAAG,CAAC,CAAA;YAClE,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACrD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAA;YACzE,2CAA2C;YAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAA;YACjE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9C,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YAC7B,OAAO,MAAM,CAAA;QACf,CAAC;QACD,QAAQ,CAAC,KAAiB,EAAE,UAAkB;YAC5C,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;QAC1D,CAAC;QACD,MAAM,CAAC,CAAa,EAAE,CAAa,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAC9E,OAAO,CAAC,KAAiB;YACvB,IAAI,CAAC;gBAAC,OAAO,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAA;YAAC,CAAC;QAC1F,CAAC;QACD,gBAAgB,CAAC,KAAiB;YAChC,IAAI,CAAC;gBAAC,OAAO,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,SAAS,CAAA;YAAC,CAAC;QAC5F,CAAC;QAED,aAAa;QACb,SAAS,CAAC,IAAgB,IAAY,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAC3F,iBAAiB,CAAC,IAAgB,EAAE,KAAa;YAC/C,wDAAwD;YACxD,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QACzE,CAAC;QACD,YAAY,CAAC,IAAgB,EAAE,KAAa;YAC1C,kEAAkE;YAClE,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YACpE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;QACrD,CAAC;QACD,eAAe,CAAC,IAAgB;YAC9B,uDAAuD;YACvD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAChE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;QACzD,CAAC;QACD,aAAa,CAAC,IAAgB;YAC5B,qDAAqD;YACrD,qCAAqC;YACrC,0DAA0D;YAC1D,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;gBACpE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS;oBAAE,OAAO,IAAI,CAAA;gBAClD,IAAI,CAAC,KAAK,MAAM;oBAAE,OAAO,KAAK,CAAA;YAChC,CAAC;YAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6C,CAAA;oBACrE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;gBACnC,CAAC;gBACD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACnC,MAAM,CAAC,GAAG,GAA8B,CAAA;oBACxC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAA;QACd,CAAC;QACD,WAAW,CAAC,IAAgB,IAAY,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QACvF,WAAW,CAAC,IAAgB,IAAY,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAC3F,aAAa,CAAC,IAAgB,EAAE,CAAS,EAAE,CAAS;YAClD,8DAA8D;YAC9D,0DAA0D;YAC1D,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5E,CAAC;QACD,cAAc,CAAC,IAAgB,EAAE,CAAS,EAAE,CAAS;YACnD,0CAA0C;YAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,CAAC;QACD,QAAQ,CAAC,IAAgB;YACvB,yDAAyD;YACzD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC1D,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;QAC/E,CAAC;QACD,sBAAsB,CAAC,IAAgB;YACrC,kDAAkD;YAClD,0CAA0C;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAChF,CAAC;QACD,mBAAmB,CAAC,IAAgB;YAClC,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAuC,CAAA;gBACxG,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;YACzF,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,iBAAiB,CAAC,IAAgB;YAChC,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAgE,CAAA;gBAC1H,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;YACpH,CAAC;YAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,WAAW;QACX,cAAc,CAAC,KAAiB,EAAE,iBAA2B;YAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAsB,CAAA;YAC/D,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACnF,CAAC;QACD,SAAS,CAAC,KAAiB,IAAY,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC;QACzF,eAAe,CAAC,KAAiB;YAC/B,mDAAmD;YACnD,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;QAED,cAAc;QACd,OAAO,CAAC,MAAkB,IAAa,OAAO,WAAW,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC;QACtE,eAAe,CAAC,KAAiB,IAAgB,OAAO,KAAK,CAAA,CAAC,gCAAgC,CAAC,CAAC;QAChG,SAAS,CAAC,KAAiB,EAAE,UAAmB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QACjH,QAAQ,CAAC,KAAiB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAC3F,mBAAmB,CAAC,KAAiB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;QAChH,qBAAqB,CAAC,MAAkB,IAAgB,OAAO,WAAW,CAAC,uBAAuB,CAAC,CAAA,CAAC,CAAC;QAErG,WAAW;QACX,UAAU,CAAC,IAA0B;YACnC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC7E,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1C,CAAC;QACD,UAAU,CAAC,KAAiB;YAC1B,yEAAyE;YACzE,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5E,CAAC;QACD,SAAS,CAAC,KAA2B,IAAgB,OAAO,WAAW,CAAC,WAAW,CAAC,CAAA,CAAC,CAAC;QACtF,QAAQ,CAAC,IAAY;YACnB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;YACjD,OAAO,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;QACjD,CAAC;QAED,mBAAmB;QACnB,cAAc,CAAC,CAAa,EAAE,CAAa,EAAE,eAAyB,EAAE,cAAsB;YAC5F,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACvD,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,CAAA;QAC1F,CAAC;QACD,eAAe,CAAC,CAAa,EAAE,CAAa,EAAE,eAAyB,EAAE,cAAsB;YAC7F,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACxD,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,CAAA;QAC1F,CAAC;QACD,oBAAoB,CAAC,EAAc,EAAE,EAAc,EAAE,gBAA0B,EAAE,eAAuB;YACtG,OAAO,WAAW,CAAC,sBAAsB,CAAC,CAAA;QAC5C,CAAC;QACD,oDAAoD;QACpD,mEAAmE;QACnE,8CAA8C;QAC9C,gEAAgE;QAChE,wCAAwC;QACxC,oBAAoB,CAAC,MAAkB,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,gBAA0B,EAAE,eAAuB;YACjI,OAAO,WAAW,CAAC,sBAAsB,CAAC,CAAA;QAC5C,CAAC;QACD,iBAAiB,CAAC,MAAkB,EAAE,KAA+C,EAAE,SAAiB,EAAE,gBAA0B,EAAE,eAAuB;YAC3J,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAA;QACzC,CAAC;QACD,iBAAiB,CAAC,MAAkB,EAAE,MAAgB,EAAE,OAAiB,EAAE,gBAA0B,EAAE,eAAuB;YAC5H,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAA;QACzC,CAAC;QACD,gBAAgB,CAAC,MAAkB,EAAE,OAAiB,EAAE,OAAe,EAAE,gBAA0B,EAAE,eAAuB;YAC1H,OAAO,WAAW,CAAC,kBAAkB,CAAC,CAAA;QACxC,CAAC;QACD,gBAAgB,CAAC,MAAkB,EAAE,MAAoB,EAAE,UAAkB,EAAE,UAAkB,EAAE,gBAA0B,EAAE,eAAuB;YACpJ,OAAO,WAAW,CAAC,kBAAkB,CAAC,CAAA;QACxC,CAAC;QACD,iBAAiB,CAAC,MAAkB,EAAE,SAAiB,EAAE,UAAkB,EAAE,gBAA0B,EAAE,eAAuB;YAC9H,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAA;QACzC,CAAC;QACD,kBAAkB,CAAC,MAAkB,EAAE,UAAkB,EAAE,UAAkB,EAAE,gBAA0B,EAAE,eAAuB;YAChI,OAAO,WAAW,CAAC,oBAAoB,CAAC,CAAA;QAC1C,CAAC;QAED,uBAAuB;QACvB,kBAAkB,KAAuB,OAAO,WAAW,CAAC,oBAAoB,CAAC,CAAA,CAAC,CAAC;QACnF,kBAAkB,CAAC,SAAiB,IAAsB,OAAO,WAAW,CAAC,oBAAoB,CAAC,CAAA,CAAC,CAAC;QAEpG,8DAA8D;QAC9D,6CAA6C;QAC7C,WAAW,CAAC,KAAiB,IAAqB,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,CAAC;QAC9F,mBAAmB,CAAC,IAAgB,IAAc,OAAO,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC;QACrG,OAAO,CAAC,MAAmB,IAA6B,CAAC;QACzD,SAAS,CAAC,MAAkB,IAAsB,OAAO,WAAW,CAAC,WAAW,CAAC,CAAA,CAAC,CAAC;QACnF,MAAM,CAAC,MAAkB,IAAa,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;QACpE,UAAU,CAAC,MAAkB,IAAkB,OAAO,WAAW,CAAC,YAAY,CAAC,CAAA,CAAC,CAAC;QACjF,MAAM,CAAC,MAAkB,EAAE,OAAiB,IAAgB,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;QAC1F,SAAS,CAAC,MAAkB,IAAgB,OAAO,WAAW,CAAC,WAAW,CAAC,CAAA,CAAC,CAAC;QAC7E,QAAQ,CAAC,MAAkB,EAAE,WAA6B,IAAgB,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC;QAC1G,gBAAgB,CAAC,GAAa,EAAE,GAAa,IAAc,OAAO,WAAW,CAAC,kBAAkB,CAAC,CAAA,CAAC,CAAC;QACnG,iBAAiB,CAAC,QAAgB,EAAE,OAAe,EAAE,UAAkB,IAAgB,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAA,CAAC,CAAC;QAChI,kBAAkB,CAAC,MAAkB,EAAE,QAAoB,IAAgB,OAAO,WAAW,CAAC,oBAAoB,CAAC,CAAA,CAAC,CAAC;QACrH,QAAQ,CAAC,MAAkB,EAAE,UAAmB,IAAgB,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC;QAChG,QAAQ,CAAC,MAAkB,EAAE,UAAmB,IAAgB,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC;QAChG,mBAAmB,CAAC,KAAiB,IAAgB,OAAO,WAAW,CAAC,qBAAqB,CAAC,CAAA,CAAC,CAAC;QAChG,cAAc,CAAC,OAAmB,EAAE,UAAkB,IAAgB,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAC;QAC5G,YAAY,CAAC,MAAoB,EAAE,QAAmE,IAAgB,OAAO,WAAW,CAAC,cAAc,CAAC,CAAA,CAAC,CAAC;QAC1J,aAAa,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,+CAA+C;QACpK,iBAAiB,CAAC,KAAiB,EAAE,KAAiB,IAAgB,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAA,CAAC,CAAC;QAC/G,SAAS,CAAC,WAAmB,EAAE,WAAmB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,sDAAsD;QAC3L,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,uBAAuB;QAChI,iBAAiB,CAAC,MAAoB,IAAgB,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAA,CAAC,CAAC;QAC/F,MAAM,CAAC,KAAiB,EAAE,KAAe,EAAE,MAAgB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,oBAAoB;QACxM,UAAU,CAAC,MAAkB,EAAE,OAAiB,EAAE,UAAoB,EAAE,SAAiB,IAAgB,OAAO,WAAW,CAAC,YAAY,CAAC,CAAA,CAAC,CAAC;QAC3I,GAAG,CAAC,OAAqB,EAAE,UAAmB,IAAgB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;QACzF,KAAK,CAAC,KAAiB,EAAE,aAA2B,EAAE,SAAiB,EAAE,UAAkB,IAAgB,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,kCAAkC;QACnP,UAAU,CAAC,QAAoB,EAAE,MAAkB,IAAgB,OAAO,WAAW,CAAC,YAAY,CAAC,CAAA,CAAC,CAAC;QACrG,QAAQ,CAAC,MAAkB,IAAgB,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC;QAC3E,KAAK,CAAC,MAAkB,EAAE,MAAoB,IAAgB,OAAO,WAAW,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,EAAE,+EAA+E;QAC5K,cAAc,CAAC,QAAoB,EAAE,MAAkB,EAAE,QAAkB,EAAE,OAAiB,IAAgB,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAC;QACpJ,6BAA6B,CAAC,MAAkB,EAAE,OAAiB,IAAgB,OAAO,WAAW,CAAC,+BAA+B,CAAC,CAAA,CAAC,CAAC;QACxI,2BAA2B,CAAC,MAAkB,EAAE,OAAiB,EAAE,gBAA0B,EAAE,eAAuB,IAAuB,OAAO,WAAW,CAAC,6BAA6B,CAAC,CAAA,CAAC,CAAC;QAChM,iCAAiC,CAAC,MAAkB,EAAE,OAAiB,EAAE,gBAA0B,EAAE,eAAuB,IAAuB,OAAO,WAAW,CAAC,mCAAmC,CAAC,CAAA,CAAC,CAAC;KAC7M,CAAA;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,WAAW;AAEX,mEAAmE;AACnE,SAAS,iBAAiB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;IAC3D,OAAO;QACL,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACX,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACX,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;KACZ,CAAA;AACH,CAAC;AAED,iDAAiD;AACjD,SAAS,WAAW,CAAC,MAAgB,EAAE,MAAc;IACnD,OAAO;QACL,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QACrC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QACrC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;KACtC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAAgB;IACtC,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2GAA2G,MAAM,CAAC,MAAM,EAAE,CAC3H,CAAA;IACH,CAAC;IACD,OAAO;QACL,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACX,CAAA;AACH,CAAC;AAED,8CAA8C;AAC9C,SAAS,MAAM,CAAC,CAAiD;IAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3D,CAAC;AAED,4CAA4C;AAC5C,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,OAAO,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;IAE9C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACpD,CAAC;AAED,8BAA8B;AAC9B,IAAI,UAAU,GAAyB,IAAI,CAAA;AAE3C,8BAA8B;AAC9B,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,IAAI,UAAU,EAAE,IAAI;YAAE,UAAU,CAAC,IAAI,EAAE,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;IACrB,UAAU,GAAG,IAAI,CAAA;AACnB,CAAC","sourcesContent":["/**\n * brepkit-kernel/brepkitKernel — brepkit 内核 → faijs BrepEngineApi 适配器(v1 白名单)\n *\n * 设计要点(对应 3d_editor 项目的 weapp-voice-ai-modeling 设计计划 §5):\n * - 句柄:brepkit u32 句柄与 faijs BrepHandle(number) 同构,直通零转换;\n * - 拓扑红线:meshShape 用 tessellateSolidGrouped 输出 faceGroups,与三角化几何同源;\n * - 面溯源:布尔/倒角走 *WithEvolution,映射为 BrepEvolutionData(hash 编码);\n * - 链纪律:kernel.meshFallbackCount 计数差 > 0 → getMeshFallbackCount 暴露给宿主,\n * 由宿主标记 BREP 链中断(不在此层静默处理);\n * - v1 白名单之外的方法:显式抛错(报错好于掩盖,禁止空实现假成功)。\n */\n\nimport { initBrepkitWasm, type BrepKitKernel } from './brepkitWasm'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepSubShapeType,\n BrepTessellateOptions,\n BrepUvBounds,\n BrepVec3,\n BrepXcafDocument,\n} from '../brep/engine/types'\n\n// ── 句柄桥接:brepkit number 句柄 ↔ BrepHandle(零运行时成本,与 occt 适配器同构) ──\nconst asHandle = (n: number): BrepHandle => n as BrepHandle\nconst asNum = (h: BrepHandle): number => h as unknown as number\nconst arr = (x: ArrayLike<number> | number[]): number[] => Array.from(x as ArrayLike<number>)\n\n/**\n * brepkit 几何查询返回值归一为 number[]。\n *\n * 关键事实(npm brepkit-wasm d.ts 与本地 web-target 胶水一致):\n * getSurfaceDomain / getFaceNormal / evaluateSurfaceNormal / evaluateSurface /\n * evaluateEdgeCurve / evaluateEdgeCurveD1 / getEdgeCurveParameters / centerOfMass\n * 返回 **Float64Array**(不是 JSON 字符串);\n * 仅 getAnalyticSurfaceParams / getNurbsCurveData / tessellateSolidGrouped /\n * *WithEvolution 返回 JSON 字符串。\n *\n * 历史 bug:曾误以为全部返回 JSON 字符串而统一 JSON.parse,导致\n * `String(Float64Array)` 变成逗号拼接数字串(如 \"-1000000,1000000,...\"),\n * JSON.parse 在第一个逗号处抛 \"Unexpected non-whitespace character after JSON\"。\n * 这里同时兼容:JSON 字符串 / TypedArray / 普通数组 / {x,y,z} / 数字键对象。\n */\nfunction toNumArray(v: unknown): number[] {\n if (typeof v === 'string') {\n const parsed: unknown = JSON.parse(v)\n if (Array.isArray(parsed)) return parsed.map(Number)\n if (parsed && typeof parsed === 'object') {\n const o = parsed as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n }\n if (v && typeof v === 'object') {\n if (Array.isArray(v)) return v.map(Number)\n if ('length' in v) return Array.from(v as ArrayLike<number>, Number)\n const o = v as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n}\n\n/** v1 白名单外的方法统一抛错(携带适配器上下文与 v1 范围说明)。 */\nfunction unsupported(name: string): never {\n throw new Error(`[brepkit-kernel] BrepEngineApi.${name} 不在 brepkit 适配器 v1 白名单内(能力表见设计文档 §5.2)。该操作请在 OCCT 链执行,或等待适配器扩展。`)\n}\n\n/** 面稳定指纹:解析曲面参数 + 面积 → FNV-1a → 取模上界(跨操作可追溯,与句柄无关)。 */\nfunction faceFingerprint(kernel: BrepKitKernel, face: number, upperBound: number): number {\n let params = ''\n try { params = String(kernel.getAnalyticSurfaceParams(face) ?? '') } catch { /* 非解析面 */ }\n let area = 0\n try { area = Number(kernel.faceArea?.(face, 0.1) ?? 0) } catch { /* 查询失败用 0 */ }\n const basis = `${params}|${area.toFixed(6)}`\n let h = 0x811c9dc5\n for (let i = 0; i < basis.length; i++) {\n h ^= basis.charCodeAt(i)\n h = Math.imul(h, 0x01000193) >>> 0\n }\n return upperBound > 0 ? h % upperBound : h\n}\n\n/** 面演化数据(BrepEvolutionData):brepkit evolution JSON → hash 编码三元组。 */\nfunction mapEvolution(\n kernel: BrepKitKernel,\n raw: string,\n resultHandle: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n): BrepEvolutionData {\n // raw: {solid, evolution:{modified:{oldHandle:[newHandles]}, generated:{oldHandle:[new]}, deleted:[oldHandles]}}\n const parsed = JSON.parse(raw) as {\n solid: number\n evolution: { modified: Record<string, number[]>; generated: Record<string, number[]>; deleted: number[] }\n }\n const evo = parsed.evolution ?? { modified: {}, generated: {}, deleted: [] }\n const modifiedKeys = new Set(Object.keys(evo.modified ?? {}).map(Number))\n const deletedKeys = new Set((evo.deleted ?? []).map(Number))\n // 输入面 hash → 是否被改/删:通过该输入面在输入 hash 快照中的位置无法直接回溯句柄,\n // 诚实映射:modified/deleted 用\"发生变化的输入句柄数 == 输入面数\"的对齐近似——\n // v1 精确溯源依赖 per-shape hash 注册表(subShapeHashes 时登记 hash↔handle)。\n const registry = hashRegistry.get(kernel)\n const modified: number[] = []\n const deleted: number[] = []\n if (registry) {\n for (const [hash, handle] of registry) {\n if (modifiedKeys.has(handle)) modified.push(hash)\n if (deletedKeys.has(handle)) deleted.push(hash)\n }\n }\n // generated:结果实体的新面 hash(数量按 generated 表展开)\n const generated: number[] = []\n for (const news of Object.values(evo.generated ?? {})) {\n for (const nh of news) generated.push(faceFingerprint(kernel, nh, hashUpperBound))\n }\n // 更新注册表:结果实体 faces 的最新 hash 登记(供下一次演化对齐)\n try {\n const faces = arr(kernel.getSolidFaces(resultHandle))\n const reg = registry ?? new Map<number, number>()\n for (const f of faces) reg.set(faceFingerprint(kernel, f, hashUpperBound), f)\n hashRegistry.set(kernel, reg)\n } catch { /* 非实体结果跳过登记 */ }\n return { result: asHandle(resultHandle), modified, generated, deleted }\n}\n\n/** per-kernel 的 hash↔handle 登记表(fuseWithHistory 溯源对齐用)。 */\nconst hashRegistry = new WeakMap<BrepKitKernel, Map<number, number>>()\n\n/** brepkit 适配器返回类型:BrepEngineApi + brepkit 专属诊断。 */\ntype BrepkitEngineExtras = BrepEngineApi & { getMeshFallbackCount(): number }\n\n/**\n * 创建 brepkit BrepEngineApi 实现(v1 白名单)。\n * 与 occt 的 initOcctWasm 同位:返回满足引擎契约的原语集合。\n * @returns a promise resolving to the BrepEngineApi implementation plus brepkit-specific\n * diagnostics (`getMeshFallbackCount`).\n */\nexport async function createBrepkitPrimitives(): Promise<BrepkitEngineExtras> {\n const kernel = await initBrepkitWasm()\n liveKernel = kernel\n let lastFallbackCount = 0\n // 已知面句柄集合:getSubShapes(shape,'face') 返回的面在此登记;\n // getSubShapes(handle,'edge'/'vertex') 据此分发到 face 级或 solid 级 API。\n const knownFaces = new Set<number>()\n const readFallback = (): number => {\n try {\n return typeof kernel.meshFallbackCount === 'function' ? Number(kernel.meshFallbackCount()) : 0\n } catch { return 0 }\n }\n /** 布尔类操作后登记回退计数差(§5.4:宿主每步读取,>0 即链中断)。 */\n const trackFallback = <T>(r: T): T => { lastFallbackCount = readFallback(); return r }\n\n const api = {\n // ── 生命周期 ──\n release(_shape: BrepHandle): void { /* GC 型:brepkit 句柄由内核统一管理,无逐句柄 free API */ },\n /** 内核级诊断:距上次读取的 mesh 布尔回退计数差(>0 = BREP 链已中断)。 */\n getMeshFallbackCount(): number {\n const now = readFallback()\n const delta = now - lastFallbackCount\n lastFallbackCount = now\n return delta\n },\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle { return asHandle(kernel.makeBox(dx, dy, dz)) },\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle {\n const dx = Math.abs(corner2.x - corner1.x), dy = Math.abs(corner2.y - corner1.y), dz = Math.abs(corner2.z - corner1.z)\n const h = kernel.makeBox(dx, dy, dz)\n return asHandle(kernel.transformSolid(h, toKernelMatrix(translationMatrix(\n Math.min(corner1.x, corner2.x), Math.min(corner1.y, corner2.y), Math.min(corner1.z, corner2.z),\n ))))\n },\n makeCylinder(radius: number, height: number): BrepHandle { return asHandle(kernel.makeCylinder(radius, height)) },\n makeSphere(radius: number): BrepHandle { return asHandle(kernel.makeSphere(radius, 32)) },\n makeCone(r1: number, r2: number, height: number): BrepHandle { return asHandle(kernel.makeCone(r1, r2, height)) },\n makeRectangle(_width: number, _height: number): BrepHandle { return unsupported('makeRectangle') },\n\n // ── 造型运算 ──\n extrude(_shape: BrepHandle, _dx: number, _dy: number, _dz: number): BrepHandle { return unsupported('extrude') }, // ⚠️ wasm extrude(face, dir, distance) 语义不同 → 保持 unsupported\n loft(_wires: BrepHandle[], _isSolid: boolean, _ruled: boolean): BrepHandle { return unsupported('loft') },\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(trackFallback(kernel.fuse(asNum(a), asNum(b)))) },\n cut(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(trackFallback(kernel.cut(asNum(a), asNum(b)))) },\n common(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(trackFallback(kernel.common(asNum(a), asNum(b)))) },\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(trackFallback(kernel.common(asNum(a), asNum(b)))) },\n section(_a: BrepHandle, _b: BrepHandle): BrepHandle { return unsupported('section') }, // ⚠️ wasm section(solid+平面) 语义不同 → 保持 unsupported\n fuseAll(shapes: BrepHandle[]): BrepHandle {\n return asHandle(trackFallback(kernel.fuseAll(Int32Array.from(shapes.map(asNum)))))\n },\n\n // ── 倒角与圆角 ──\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle {\n return asHandle(trackFallback(kernel.chamfer(asNum(solid), Int32Array.from(edges.map(asNum)), distance)))\n },\n chamferDistAngle(solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number): BrepHandle {\n return asHandle(trackFallback(kernel.chamferDistanceAngle(asNum(solid), Int32Array.from(edges.map(asNum)), distance, angleDeg)))\n },\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle {\n return asHandle(trackFallback(kernel.fillet(asNum(solid), Int32Array.from(edges.map(asNum)), radius)))\n },\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle {\n return asHandle(trackFallback(kernel.filletVariable(asNum(solid), asNum(edge), startRadius, endRadius)))\n },\n filletWithHistory(solid: BrepHandle, edges: BrepHandle[], radius: number, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.filletWithEvolution(asNum(solid), Int32Array.from(edges.map(asNum)), radius)\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n chamferWithHistory(_solid: BrepHandle, _edges: BrepHandle[], _distance: number, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n // brepkit 无 chamferWithEvolution → 等距倒角演化不支持,诚实报错(能力表 evolution 仅覆盖 fuse/cut/fillet)\n return unsupported('chamferWithHistory')\n },\n\n // ── 变换 ──\n // ⚠️ brepkit 的 transformSolid 是「原地修改、返回 undefined」——必须先 copySolid\n // 复制出新句柄再变换,否则会篡改调用方手里的原实体(单测 2026-09-19 实证)。\n // ⚠️ 矩阵方言:faijs 接口口径是 3×4 行主序 12 元素(见 brep/engine/primitives.ts);\n // brepkit transformSolid 吃 4×4 行主序 16 元素。所有 transformSolid 调用一律经\n // toKernelMatrix 归一(下方唯一转换点),禁止直出 16 元素旁路。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.transformSolid(c, toKernelMatrix(translationMatrix(dx, dy, dz)))\n return asHandle(c)\n },\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.transformSolid(c, toKernelMatrix(scaleMatrix(center, factor)))\n return asHandle(c)\n },\n transform(shape: BrepHandle, matrix: number[]): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.transformSolid(c, toKernelMatrix(matrix))\n return asHandle(c)\n },\n located(shape: BrepHandle, matrix: number[]): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.transformSolid(c, toKernelMatrix(matrix))\n return asHandle(c)\n },\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.transformSolid(c, toKernelMatrix(matrix))\n return asHandle(c)\n },\n copy(shape: BrepHandle): BrepHandle { return asHandle(kernel.copySolid(asNum(shape))) },\n\n // ── 阵列(Phase 2:brepkit wasm 已导出 linearPattern/circularPattern/gridPattern) ──\n // brepkit wasm 的 pattern 内核函数都返回 compound(含全部副本,README「Returns a\n // compound handle containing all copies」实证)→ 经 getCompoundSolids 拆成数组。\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[] {\n const compound = kernel.linearPattern(asNum(shape), direction.x, direction.y, direction.z, spacing, count)\n return arr(kernel.getCompoundSolids(compound)).map(asHandle)\n },\n circularPattern(shape: BrepHandle, center: BrepVec3, axis: BrepVec3, angleStep: number, count: number): BrepHandle[] {\n // ⚠️ brepkit wasm circularPattern(solid, ax, ay, az, count) 无 center/angle 参数:\n // 固定整圆均分(每份 360°/count)。fullAngle=360 时与 vendored/occt 语义一致;\n // 其它角度跨度无法表达(语义限制记录于此,parity 测试用整圆)。\n const compound = kernel.circularPattern(asNum(shape), axis.x, axis.y, axis.z, count)\n return arr(kernel.getCompoundSolids(compound)).map(asHandle)\n },\n gridPattern(shape: BrepHandle, directionX: BrepVec3, directionY: BrepVec3, spacingX: number, spacingY: number, countX: number, countY: number): BrepHandle {\n return asHandle(kernel.gridPattern(\n asNum(shape),\n directionX.x, directionX.y, directionX.z,\n directionY.x, directionY.y, directionY.z,\n spacingX, spacingY, countX, countY,\n ))\n },\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle {\n return asHandle(kernel.makeLineEdge(start.x, start.y, start.z, end.x, end.y, end.z))\n },\n makeArcEdge(_start: BrepVec3, _mid: BrepVec3, _end: BrepVec3): BrepHandle { return unsupported('makeArcEdge') },\n makeBezierEdge(_controlPoints: BrepVec3[]): BrepHandle { return unsupported('makeBezierEdge') },\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle {\n return asHandle(kernel.makeWire(Int32Array.from(edges.map(asNum)), false))\n },\n makeFace(wire: BrepHandle): BrepHandle { return asHandle(kernel.makeFaceFromWire(asNum(wire))) },\n makeCompound(shapes: BrepHandle[]): BrepHandle {\n return asHandle(kernel.makeCompound(Int32Array.from(shapes.map(asNum))))\n },\n sewAndSolidify(faces: BrepHandle[], tolerance?: number): BrepHandle {\n return asHandle(kernel.sewFaces(Int32Array.from(faces.map(asNum)), tolerance ?? 1e-6))\n },\n buildTriFace(_a: BrepVec3, _b: BrepVec3, _c: BrepVec3): BrepHandle { return unsupported('buildTriFace') },\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle {\n return asHandle(kernel.addHolesToFace(asNum(face), Int32Array.from(holeWires.map(asNum))))\n },\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult {\n const deflection = options?.linearDeflection ?? 0.1\n const angular = options?.angularDeflection ?? 0.5\n const raw = kernel.tessellateSolidGrouped(asNum(shape), deflection, angular)\n const m = JSON.parse(raw) as { positions: number[]; normals: number[]; indices: number[]; faceOffsets: number[] }\n // faceOffsets 形如 [start0, start1, ..., totalEnd]:以「索引数组单位」计的每面偏移(2026-09-19 实测),\n // 除以 3 换算为 faijs 契约的三角形单位 [triStart, triCount, faceHash]\n const fo = m.faceOffsets\n const faceCount = Math.max(0, fo.length - 1)\n const faceHashes: number[] = []\n try {\n const faces = arr(kernel.getSolidFaces(asNum(shape)))\n for (let i = 0; i < faceCount && i < faces.length; i++) faceHashes.push(faceFingerprint(kernel, faces[i], 1e9))\n } catch { /* 非实体:faceHash 置 0 */ }\n const faceGroups = new Int32Array(faceCount * 3)\n for (let i = 0; i < faceCount; i++) {\n faceGroups[i * 3] = fo[i] / 3\n faceGroups[i * 3 + 1] = (fo[i + 1] - fo[i]) / 3\n faceGroups[i * 3 + 2] = faceHashes[i] ?? 0\n }\n return {\n positions: new Float32Array(m.positions),\n normals: new Float32Array(m.normals),\n indices: new Uint32Array(m.indices),\n vertexCount: m.positions.length / 3,\n triangleCount: m.indices.length / 3,\n faceGroups,\n faceCount,\n }\n },\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData {\n const d = deflection ?? 0.1\n // JsEdgeLines:edgeCount/offsets/positions 均为属性(offsets/positions 为 TypedArray,2026-09-19 实测)\n const me = kernel.meshEdgesAll(asNum(shape), d, 0.5) as {\n edgeCount: number; offsets: ArrayLike<number>; positions: ArrayLike<number>\n }\n const edgeCount = Number(me.edgeCount)\n const offsets = arr(me.offsets)\n const positions = arr(me.positions)\n const edgeGroups = new Int32Array(edgeCount * 3)\n for (let i = 0; i < edgeCount; i++) {\n const start = offsets[i] ?? 0\n const count = (offsets[i + 1] ?? positions.length / 3) - start\n edgeGroups[i * 3] = start\n edgeGroups[i * 3 + 1] = count\n edgeGroups[i * 3 + 2] = i // 线框 hash 用序号(wireframe 不参与跨操作溯源)\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount }\n },\n\n // ── 拓扑查询 ──\n // 注意:拓扑 manifest(topologyExt.buildSelectorManifestCore)会在「面句柄」上调用\n // getSubShapes(face, 'edge'/'vertex'),而 brepkit 的 getSolidEdges/getSolidVertices\n // 只接受 solid 句柄;brepkit 提供 getFaceEdges(face)/getFaceVertices(face)。\n // brepkit 没有 shape-type 分类 API,且 getFaceEdges(solid) 不抛错(会返回某一面的边),\n // 不能用 try/catch 探测。改用「已知面集」:每次枚举面时把面句柄记入 knownFaces,\n // edge/vertex 查询时按句柄是否在 knownFaces 里分发到 face 级或 solid 级 API。\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[] {\n const s = asNum(shape)\n let list: number[]\n if (type === 'face') {\n // 输入可能是 solid 或 shell\n try { list = arr(kernel.getSolidFaces(s)) }\n catch { list = arr(kernel.getShellFaces?.(s) ?? []) }\n for (const f of list) knownFaces.add(f)\n } else if (type === 'edge') {\n list = knownFaces.has(s)\n ? arr(kernel.getFaceEdges(s))\n : arr(kernel.getSolidEdges(s))\n } else if (type === 'vertex') {\n list = knownFaces.has(s)\n ? arr(kernel.getFaceVertices(s))\n : arr(kernel.getSolidVertices(s))\n } else if (type === 'shell') {\n list = arr(kernel.getSolidShells?.(s) ?? [])\n } else if (type === 'solid') {\n // 输入可能是 compound(多实体)或单个 solid。\n try { list = arr(kernel.getCompoundSolids(s)) }\n catch { list = [s] }\n } else {\n return unsupported(`getSubShapes(${type})`)\n }\n return list.map(asHandle)\n },\n queryBatch(shapes: BrepHandle[]): Array<{ area: number }> {\n return shapes.map(h => {\n try { return { area: Number(kernel.faceArea(asNum(h))) } } catch { return { area: 0 } }\n })\n },\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[] {\n if (type !== 'face') return unsupported(`subShapeHashes(${type})`)\n const faces = arr(kernel.getSolidFaces(asNum(shape)))\n const hashes = faces.map(f => faceFingerprint(kernel, f, hashUpperBound))\n // 登记 hash↔handle(fuseWithHistory 溯源对齐依赖此表)\n const reg = hashRegistry.get(kernel) ?? new Map<number, number>()\n faces.forEach((f, i) => reg.set(hashes[i], f))\n hashRegistry.set(kernel, reg)\n return hashes\n },\n hashCode(shape: BrepHandle, upperBound: number): number {\n return faceFingerprint(kernel, asNum(shape), upperBound)\n },\n isSame(a: BrepHandle, b: BrepHandle): boolean { return asNum(a) === asNum(b) },\n isSolid(shape: BrepHandle): boolean {\n try { return arr(kernel.getSolidFaces(asNum(shape))).length > 0 } catch { return false }\n },\n shapeOrientation(shape: BrepHandle): string {\n try { return String(kernel.getShapeOrientation(asNum(shape))) } catch { return 'forward' }\n },\n\n // ── 几何求值 ──\n curveType(edge: BrepHandle): string { return String(kernel.getEdgeCurveType(asNum(edge))) },\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurve 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.evaluateEdgeCurve(asNum(edge), param)))\n },\n curveTangent(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurveD1 返回 Float64Array [px,py,pz, tx,ty,tz](点+切向量)\n const d = toNumArray(kernel.evaluateEdgeCurveD1(asNum(edge), param))\n return { x: d[3] ?? 0, y: d[4] ?? 0, z: d[5] ?? 0 }\n },\n curveParameters(edge: BrepHandle): BrepCurveParameters {\n // getEdgeCurveParameters 返回 Float64Array [first, last]\n const d = toNumArray(kernel.getEdgeCurveParameters(asNum(edge)))\n return { first: d[0] ?? 0, last: d[d.length - 1] ?? 1 }\n },\n curveIsClosed(edge: BrepHandle): boolean {\n // brepkit 无直接 edge-isClosed API;按曲线类型 + Nurbs 元数据判定:\n // CIRCLE/ELLIPSE 类曲线恒闭合;LINE 恒不闭合;\n // 其他曲线尝试 getNurbsCurveData().closed,拿不到时按不闭合处理(保守,不报错)。\n try {\n const t = String(kernel.getEdgeCurveType(asNum(edge))).toUpperCase()\n if (t === 'CIRCLE' || t === 'ELLIPSE') return true\n if (t === 'LINE') return false\n } catch { /* 类型查询失败走 Nurbs 元数据 */ }\n try {\n const raw = kernel.getNurbsCurveData(asNum(edge))\n if (typeof raw === 'string') {\n const p = JSON.parse(raw) as { closed?: boolean; periodic?: boolean }\n return !!p.closed || !!p.periodic\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n return !!(o.closed || o.periodic)\n }\n } catch { /* 非 Nurbs 边 */ }\n return false\n },\n curveLength(edge: BrepHandle): number { return Number(kernel.edgeLength(asNum(edge))) },\n surfaceType(face: BrepHandle): string { return String(kernel.getSurfaceType(asNum(face))) },\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurfaceNormal(face,u,v) 返回 Float64Array [nx,ny,nz];\n // 注意:getFaceNormal(face) 只接受 face 一个参数,不带 u/v,不能用于参数空间法向。\n return vec3Of(toNumArray(kernel.evaluateSurfaceNormal(asNum(face), u, v)))\n },\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurface 返回 Float64Array [x,y,z]\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n },\n uvBounds(face: BrepHandle): BrepUvBounds {\n // getSurfaceDomain 返回 Float64Array [uMin,uMax,vMin,vMax]\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n return { uMin: d[0] ?? 0, uMax: d[1] ?? 1, vMin: d[2] ?? 0, vMax: d[3] ?? 1 }\n },\n getSurfaceCenterOfMass(face: BrepHandle): BrepVec3 {\n // brepkit 无 per-face 质心 API;用 UV 域中点在曲面上求值作为面中心近似\n // (与 OCCT 路径的「面中心用于命名/拾取锚点」语义一致,不追求精确质心)。\n const b = this.uvBounds(face)\n return this.pointOnSurface(face, (b.uMin + b.uMax) / 2, (b.vMin + b.vMax) / 2)\n },\n getFaceCylinderData(face: BrepHandle): { radius: number } | null {\n try {\n const p = JSON.parse(kernel.getAnalyticSurfaceParams(asNum(face))) as { type?: string; radius?: number }\n if (p?.type === 'cylinder' && typeof p.radius === 'number') return { radius: p.radius }\n } catch { /* 非解析面 */ }\n return null\n },\n getNurbsCurveData(edge: BrepHandle): { degree: number; periodic: boolean; rational: boolean } | null {\n try {\n const p = JSON.parse(kernel.getNurbsCurveData(asNum(edge))) as { degree?: number; periodic?: boolean; rational?: boolean }\n if (p && typeof p.degree === 'number') return { degree: p.degree, periodic: !!p.periodic, rational: !!p.rational }\n } catch { /* 非 Nurbs 边 */ }\n return null\n },\n\n // ── 测量 ──\n getBoundingBox(shape: BrepHandle, _useTriangulation?: boolean): BrepBoundingBox {\n const b = kernel.boundingBox(asNum(shape)) as ArrayLike<number>\n return { xmin: b[0], ymin: b[1], zmin: b[2], xmax: b[3], ymax: b[4], zmax: b[5] }\n },\n getVolume(shape: BrepHandle): number { return Number(kernel.volume(asNum(shape), 0.05)) },\n getCenterOfMass(shape: BrepHandle): BrepVec3 {\n // centerOfMass 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.centerOfMass(asNum(shape), 0.05)))\n },\n\n // ── 校验与修复 ──\n isValid(_shape: BrepHandle): boolean { return unsupported('isValid') },\n unifySameDomain(shape: BrepHandle): BrepHandle { return shape /* brepkit 无对应 API;恒等返回(不丢句柄) */ },\n healSolid(shape: BrepHandle, _tolerance?: number): BrepHandle { return asHandle(kernel.healSolid(asNum(shape))) },\n fixShape(shape: BrepHandle): BrepHandle { return asHandle(kernel.healSolid(asNum(shape))) },\n fixFaceOrientations(shape: BrepHandle): BrepHandle { return asHandle(kernel.fixFaceOrientations(asNum(shape))) },\n removeDegenerateEdges(_shape: BrepHandle): BrepHandle { return unsupported('removeDegenerateEdges') },\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle {\n const text = typeof data === 'string' ? data : new TextDecoder().decode(data)\n return asHandle(kernel.importStep(text))\n },\n exportStep(shape: BrepHandle): string {\n // brepkit exportStep 返回 UTF-8 字节(Uint8Array),需解码为 STEP 文本(2026-09-19 实测)\n const bytes = kernel.exportStep(asNum(shape))\n return typeof bytes === 'string' ? bytes : new TextDecoder().decode(bytes)\n },\n importStl(_data: string | ArrayBuffer): BrepHandle { return unsupported('importStl') },\n fromBREP(data: string): BrepHandle {\n const bytes = Uint8Array.from(atobPolyfill(data))\n return asHandle(kernel.deserializeSolid(bytes))\n },\n\n // ── 面演化(可选能力槽) ──\n cutWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.cutWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n fuseWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.fuseWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n intersectWithHistory(_a: BrepHandle, _b: BrepHandle, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('intersectWithHistory')\n },\n // Phase 0.1 补齐的 7 个:brepkit 适配器 v1 未实现 —— 如实抛错,不伪造。\n // ⚠️ 这些桩**不能**被当作\"已实现\"来探测:`typeof api.xWithHistory === 'function'`\n // 恒为真。Phase 0.2 起适配器的 `evolution` 是逐核函数**名单**\n // (`adapters/brepkit.ts` = ['fuse','cut','fillet']),名单才是唯一真相来源;\n // 声明多写一项 = 让该 op 静默通过静态判定后死在这些桩上(红线违规)。\n translateWithHistory(_shape: BrepHandle, _dx: number, _dy: number, _dz: number, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('translateWithHistory')\n },\n rotateWithHistory(_shape: BrepHandle, _axis: { point: BrepVec3; direction: BrepVec3 }, _angleRad: number, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('rotateWithHistory')\n },\n mirrorWithHistory(_shape: BrepHandle, _point: BrepVec3, _normal: BrepVec3, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('mirrorWithHistory')\n },\n scaleWithHistory(_shape: BrepHandle, _center: BrepVec3, _factor: number, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('scaleWithHistory')\n },\n shellWithHistory(_solid: BrepHandle, _faces: BrepHandle[], _thickness: number, _tolerance: number, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('shellWithHistory')\n },\n offsetWithHistory(_solid: BrepHandle, _distance: number, _tolerance: number, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('offsetWithHistory')\n },\n thickenWithHistory(_shape: BrepHandle, _thickness: number, _tolerance: number, _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData {\n return unsupported('thickenWithHistory')\n },\n\n // ── XCAF 装配(v1 关闭) ──\n createXCAFDocument(): BrepXcafDocument { return unsupported('createXCAFDocument') },\n importXCAFFromSTEP(_stepData: string): BrepXcafDocument { return unsupported('importXCAFFromSTEP') },\n\n // ── Phase 3 登记方法(capability-map 64 方法收口):真实现 3 个(wasm 有对应导出,\n // 命名映射),其余如实 unsupported——能力表不声明,静态判定拦截 ──\n boundingBox(shape: BrepHandle): BrepBoundingBox { return kernel.getBoundingBox(asNum(shape)) },\n surfaceCenterOfMass(face: BrepHandle): BrepVec3 { return kernel.getSurfaceCenterOfMass(asNum(face)) },\n dispose(_shape?: BrepHandle): void { /* GC 型引擎:无显式释放 */ },\n shapeType(_shape: BrepHandle): BrepSubShapeType { return unsupported('shapeType') },\n isNull(_shape: BrepHandle): boolean { return unsupported('isNull') },\n iterShapes(_shape: BrepHandle): BrepHandle[] { return unsupported('iterShapes') },\n locate(_shape: BrepHandle, _matrix: number[]): BrepHandle { return unsupported('locate') },\n copyShape(_shape: BrepHandle): BrepHandle { return unsupported('copyShape') },\n downcast(_shape: BrepHandle, _targetType: BrepSubShapeType): BrepHandle { return unsupported('downcast') },\n composeTransform(_m1: number[], _m2: number[]): number[] { return unsupported('composeTransform') },\n buildExtrusionLaw(_profile: string, _length: number, _endFactor: number): BrepHandle { return unsupported('buildExtrusionLaw') },\n buildEdgeOnSurface(_curve: BrepHandle, _surface: BrepHandle): BrepHandle { return unsupported('buildEdgeOnSurface') },\n healFace(_shape: BrepHandle, _tolerance?: number): BrepHandle { return unsupported('healFace') },\n healWire(_shape: BrepHandle, _tolerance?: number): BrepHandle { return unsupported('healWire') },\n fixSelfIntersection(_wire: BrepHandle): BrepHandle { return unsupported('fixSelfIntersection') },\n hullFromPoints(_points: BrepVec3[], _tolerance: number): BrepHandle { return unsupported('hullFromPoints') },\n loftAdvanced(_wires: BrepHandle[], _options?: { solid?: boolean; ruled?: boolean; tolerance?: number }): BrepHandle { return unsupported('loftAdvanced') },\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle { return asHandle(kernel.makeEllipsoid(rx, ry, rz)) }, // Phase 3: wasm 同签名真实现(brepkit-wasm.d.ts:1354)\n makeFaceOnSurface(_face: BrepHandle, _wire: BrepHandle): BrepHandle { return unsupported('makeFaceOnSurface') },\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle { return asHandle(kernel.makeTorus(majorRadius, minorRadius, 64)) }, // Phase 3: wasm 真实现(segments 固定 64,BrepEngineApi 不暴露)\n makeVertex(x: number, y: number, z: number): BrepHandle { return asHandle(kernel.makeVertex(x, y, z)) }, // Phase 3: wasm 同签名真实现\n makeWireFromMixed(_items: BrepHandle[]): BrepHandle { return unsupported('makeWireFromMixed') },\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle { return asHandle(kernel.mirror(asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z)) }, // Phase 3: wasm 真实现\n revolveVec(_shape: BrepHandle, _center: BrepVec3, _direction: BrepVec3, _angleDeg: number): BrepHandle { return unsupported('revolveVec') },\n sew(_shapes: BrepHandle[], _tolerance?: number): BrepHandle { return unsupported('sew') },\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, _tolerance: number): BrepHandle { return asHandle(kernel.shell(asNum(solid), thickness, Uint32Array.from(facesToRemove.map(asNum)))) }, // Phase 3: wasm 真实现(tolerance 忽略)\n simplePipe(_profile: BrepHandle, _spine: BrepHandle): BrepHandle { return unsupported('simplePipe') },\n simplify(_shape: BrepHandle): BrepHandle { return unsupported('simplify') },\n split(_shape: BrepHandle, _tools: BrepHandle[]): BrepHandle { return unsupported('split') }, // ⚠️ wasm split 是平面分割(solid+平面参数),与 BrepEngineApi 工具实体分割语义不匹配 → 保持 unsupported\n sweepPipeShell(_profile: BrepHandle, _spine: BrepHandle, _freenet?: boolean, _smooth?: boolean): BrepHandle { return unsupported('sweepPipeShell') },\n generalTransformNonOrthogonal(_shape: BrepHandle, _matrix: number[]): BrepHandle { return unsupported('generalTransformNonOrthogonal') },\n generalTransformWithHistory(_shape: BrepHandle, _matrix: number[], _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData { return unsupported('generalTransformWithHistory') },\n applyComposedTransformWithHistory(_shape: BrepHandle, _matrix: number[], _inputFaceHashes: number[], _hashUpperBound: number): BrepEvolutionData { return unsupported('applyComposedTransformWithHistory') },\n }\n return api\n}\n\n// ── 工具 ──\n\n/** 3×4 行主序平移矩阵(faijs 接口方言:平移在 index 3/7/11,与 matrixToArray 同构)。 */\nfunction translationMatrix(dx: number, dy: number, dz: number): number[] {\n return [\n 1, 0, 0, dx,\n 0, 1, 0, dy,\n 0, 0, 1, dz,\n ]\n}\n\n/** 3×4 行主序缩放矩阵(绕 center 缩放;faijs 接口方言,12 元素)。 */\nfunction scaleMatrix(center: BrepVec3, factor: number): number[] {\n return [\n factor, 0, 0, center.x * (1 - factor),\n 0, factor, 0, center.y * (1 - factor),\n 0, 0, factor, center.z * (1 - factor),\n ]\n}\n\n/**\n * 唯一的矩阵方言转换点:faijs 3×4 行主序(12 元素,matrixToArray 口径)→\n * brepkit transformSolid 的 4×4 行主序(16 元素,补底行 0,0,0,1)。\n * translate/scale 内部矩阵与 transform/located/generalTransform 的宿主入参\n * 全部经此归一;非 12 元素直接抛错(方言不清 = 缺陷,静默通过即红线违规)。\n */\nfunction toKernelMatrix(matrix: number[]): number[] {\n if (matrix.length !== 12) {\n throw new Error(\n `[brepkit] matrix dialect violation: expected 12 elements (3x4 row-major, faijs interface contract), got ${matrix.length}`,\n )\n }\n return [\n matrix[0], matrix[1], matrix[2], matrix[3],\n matrix[4], matrix[5], matrix[6], matrix[7],\n matrix[8], matrix[9], matrix[10], matrix[11],\n 0, 0, 0, 1,\n ]\n}\n\n/** wasm 返回的点/向量形态归一(数组 [x,y,z] 或 {x,y,z})。 */\nfunction vec3Of(p: number[] | { x: number; y: number; z: number }): BrepVec3 {\n if (Array.isArray(p)) return { x: p[0], y: p[1], z: p[2] }\n return { x: Number(p.x), y: Number(p.y), z: Number(p.z) }\n}\n\n/** base64 解码(node 与浏览器通用,避免直接依赖 Buffer)。 */\nfunction atobPolyfill(s: string): string {\n if (typeof atob === 'function') return atob(s)\n\n return Buffer.from(s, 'base64').toString('binary')\n}\n\n/** 释放内核单例(测试收尾用;宿主常驻不需调用)。 */\nlet liveKernel: BrepKitKernel | null = null\n\n/** 释放内核单例(测试收尾用;宿主常驻不需调用)。 */\nexport function disposeBrepkit(): void {\n try {\n if (liveKernel?.free) liveKernel.free()\n } catch { /* 已释放 */ }\n liveKernel = null\n}\n\n/** brepkit 适配器原语集类型(BrepEngineApi + brepkit 专属诊断 getMeshFallbackCount)。 */\nexport type BrepkitPrimitives = Awaited<ReturnType<typeof createBrepkitPrimitives>>\n"]}
1
+ {"version":3,"file":"brepkitKernel.js","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * brepkit-kernel/brepkitKernel — brepkit 内核 → faijs BrepEngineApi 适配器\n *\n * Phase 4(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):\n * 本文件是 L1 契约 `BrepEngineApi` 的 **brepkit 显式对象字面量实现**——与 occt 侧\n * `occt-primitives.ts` 同构:逐方法接线、方言在适配器内消化、零 `unsupported()` 桩。\n *\n * 契约面收窄后 L1 只含 occt/brepkit 双方**语义可对齐**的方法(唯一真源:\n * `api/surface/engine-method-map.json` 的 aligned/dialect 条目)。brepkit 独有\n * 能力(chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean、\n * minkowskiSum …)与单方语义(loft、平面 section/split 之外的 splitter 语义…)\n * 都不在本对象里——平台代码经原生面 `getBrepkitKernel()`(D3)访问。\n *\n * 设计要点(对应 3d_editor 项目的 weapp-voice-ai-modeling 设计计划 §5):\n * - 句柄:brepkit u32 句柄与 faijs BrepHandle(number) 同构,直通零转换;\n * - 拓扑红线:meshShape 用 tessellateSolidGrouped 输出 faceGroups,与三角化几何同源;\n * - 面溯源:布尔/倒角走 *WithEvolution,映射为 BrepEvolutionData(hash 编码);\n * - 链纪律:kernel.meshFallbackCount 计数差 > 0 → getMeshFallbackCount 暴露给宿主,\n * 由宿主标记 BREP 链中断(不在此层静默处理)。\n */\n\nimport { initBrepkitWasm, type BrepKitKernel } from './brepkitWasm'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepSubShapeType,\n BrepTessellateOptions,\n BrepUvBounds,\n BrepVec3,\n} from '../brep/engine/types'\n\n// ── 句柄桥接:brepkit number 句柄 ↔ BrepHandle(零运行时成本,与 occt 适配器同构) ──\nconst asHandle = (n: number): BrepHandle => n as BrepHandle\nconst asNum = (h: BrepHandle): number => h as unknown as number\nconst arr = (x: ArrayLike<number> | number[]): number[] => Array.from(x as ArrayLike<number>)\n\n/** 适配器内部的显式失败(替代旧 unsupported 桩:能力缺失一律在静态判定拦截,不在实现体里伪装)。 */\nfunction fail(detail: string): never {\n throw new Error(`[brepkit-kernel] ${detail}`)\n}\n\n/**\n * brepkit 几何查询返回值归一为 number[]。\n *\n * 关键事实(npm brepkit-wasm d.ts 与本地 web-target 胶水一致):\n * getSurfaceDomain / getFaceNormal / evaluateSurfaceNormal / evaluateSurface /\n * evaluateEdgeCurve / evaluateEdgeCurveD1 / getEdgeCurveParameters / centerOfMass\n * 返回 **Float64Array**(不是 JSON 字符串);\n * 仅 getAnalyticSurfaceParams / getNurbsCurveData / tessellateSolidGrouped /\n * *WithEvolution 返回 JSON 字符串。\n *\n * 历史 bug:曾误以为全部返回 JSON 字符串而统一 JSON.parse,导致\n * `String(Float64Array)` 变成逗号拼接数字串(如 \"-1000000,1000000,...\"),\n * JSON.parse 在第一个逗号处抛 \"Unexpected non-whitespace character after JSON\"。\n * 这里同时兼容:JSON 字符串 / TypedArray / 普通数组 / {x,y,z} / 数字键对象。\n */\nfunction toNumArray(v: unknown): number[] {\n if (typeof v === 'string') {\n const parsed: unknown = JSON.parse(v)\n if (Array.isArray(parsed)) return parsed.map(Number)\n if (parsed && typeof parsed === 'object') {\n const o = parsed as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n }\n if (v && typeof v === 'object') {\n if (Array.isArray(v)) return v.map(Number)\n if ('length' in v) return Array.from(v as ArrayLike<number>, Number)\n const o = v as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n}\n\n/** 面稳定指纹:解析曲面参数 + 面积 → FNV-1a → 取模上界(跨操作可追溯,与句柄无关)。 */\nfunction faceFingerprint(kernel: BrepKitKernel, face: number, upperBound: number): number {\n let params = ''\n try { params = String(kernel.getAnalyticSurfaceParams(face) ?? '') } catch { /* 非解析面 */ }\n let area = 0\n try { area = Number(kernel.faceArea?.(face, 0.1) ?? 0) } catch { /* 查询失败用 0 */ }\n const basis = `${params}|${area.toFixed(6)}`\n let h = 0x811c9dc5\n for (let i = 0; i < basis.length; i++) {\n h ^= basis.charCodeAt(i)\n h = Math.imul(h, 0x01000193) >>> 0\n }\n return upperBound > 0 ? h % upperBound : h\n}\n\n/** 面演化数据(BrepEvolutionData):brepkit evolution JSON → hash 编码三元组。 */\nfunction mapEvolution(\n kernel: BrepKitKernel,\n raw: string,\n resultHandle: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n): BrepEvolutionData {\n // raw: {solid, evolution:{modified:{oldHandle:[newHandles]}, generated:{oldHandle:[new]}, deleted:[oldHandles]}}\n const parsed = JSON.parse(raw) as {\n solid: number\n evolution: { modified: Record<string, number[]>; generated: Record<string, number[]>; deleted: number[] }\n }\n const evo = parsed.evolution ?? { modified: {}, generated: {}, deleted: [] }\n const deletedKeys = new Set((evo.deleted ?? []).map(Number))\n // registry 登记的是 hash→handle(输入面)。下游 decodeEvolution/decodeHashEvolution 期望\n // modified 为 OCCT 分段格式 [inHash, count, outHash1, outHash2, ...](见 face-evolution.ts),\n // 不是扁平 hash 列表——GOTCHA:曾误返回扁平列表,把 modified[1](一个 hash ~1e9)当成\n // count,导致 decodeHashEvolution 空转 17 亿次 push 抛 \"Invalid array length\"(2026-09-26 实证)。\n // 故这里反向建 handle→hash 表,逐条目拼出 [inHash, outCount, ...outHashes]。\n const registry = hashRegistry.get(kernel)\n const handleToHash = new Map<number, number>()\n if (registry) for (const [h, handle] of registry) handleToHash.set(handle, h)\n const modified: number[] = []\n const deleted: number[] = []\n for (const oldHandle of deletedKeys) {\n const h = handleToHash.get(oldHandle)\n if (h !== undefined) deleted.push(h)\n }\n for (const [oldHandleStr, newHandles] of Object.entries(evo.modified ?? {})) {\n const inHash = handleToHash.get(Number(oldHandleStr))\n if (inHash === undefined) continue\n const outHashes = (newHandles as number[]).map((nh) => faceFingerprint(kernel, nh, hashUpperBound))\n modified.push(inHash, outHashes.length, ...outHashes)\n }\n // generated:结果实体的新面 hash(数量按 generated 表展开)\n const generated: number[] = []\n for (const news of Object.values(evo.generated ?? {})) {\n for (const nh of news) generated.push(faceFingerprint(kernel, nh, hashUpperBound))\n }\n // 更新注册表:结果实体 faces 的最新 hash 登记(供下一次演化对齐)\n try {\n const faces = arr(kernel.getSolidFaces(resultHandle))\n const reg = registry ?? new Map<number, number>()\n for (const f of faces) reg.set(faceFingerprint(kernel, f, hashUpperBound), f)\n hashRegistry.set(kernel, reg)\n } catch { /* 非实体结果跳过登记 */ }\n return { result: asHandle(resultHandle), modified, generated, deleted }\n}\n\n/** per-kernel 的 hash↔handle 登记表(fuseWithHistory 溯源对齐用)。 */\nconst hashRegistry = new WeakMap<BrepKitKernel, Map<number, number>>()\n\n/** brepkit 适配器返回类型:BrepEngineApi + brepkit 专属诊断。 */\ntype BrepkitEngineExtras = BrepEngineApi & { getMeshFallbackCount(): number }\n\n/** 三点外接圆(makeArcEdge 方言消化:occt 吃 3 点,brepkit 吃圆心+轴)。 */\nfunction circumcircle(a: BrepVec3, b: BrepVec3, c: BrepVec3): { center: BrepVec3; axis: BrepVec3 } {\n const abx = b.x - a.x, aby = b.y - a.y, abz = b.z - a.z\n const acx = c.x - a.x, acy = c.y - a.y, acz = c.z - a.z\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n const n2 = nx * nx + ny * ny + nz * nz\n if (n2 < 1e-18) fail('makeArcEdge: 3 points are collinear (no circumscribed circle)')\n const ab2 = abx * abx + aby * aby + abz * abz\n const ac2 = acx * acx + acy * acy + acz * acz\n // center = a + ( ac2·(ab×n) + ab2·(n×ac) ) / (2·n²)\n const abxnx = aby * nz - abz * ny, abxny = abz * nx - abx * nz, abxnz = abx * ny - aby * nx\n const nxacx = ny * acz - nz * acy, nxacy = nz * acx - nx * acz, nxacz = nx * acy - ny * acx\n const denom = 2 * n2\n const len = Math.sqrt(n2)\n return {\n center: {\n x: a.x + (ac2 * abxnx + ab2 * nxacx) / denom,\n y: a.y + (ac2 * abxny + ab2 * nxacy) / denom,\n z: a.z + (ac2 * abxnz + ab2 * nxacz) / denom,\n },\n axis: { x: nx / len, y: ny / len, z: nz / len },\n }\n}\n\n/** BrepVec3[] → 扁平 Float64Array(brepkit 坐标数组方言)。 */\nfunction flattenPoints(points: BrepVec3[]): Float64Array {\n const out = new Float64Array(points.length * 3)\n for (let i = 0; i < points.length; i++) {\n out[i * 3] = points[i].x\n out[i * 3 + 1] = points[i].y\n out[i * 3 + 2] = points[i].z\n }\n return out\n}\n\n/**\n * 创建 brepkit BrepEngineApi 实现(L1 契约显式对象字面量)。\n * 与 occt 的 createOcctPrimitives 同位:返回满足引擎契约的原语集合。\n * @returns a promise resolving to the BrepEngineApi implementation plus brepkit-specific\n * diagnostics (`getMeshFallbackCount`).\n */\nexport async function createBrepkitPrimitives(): Promise<BrepkitEngineExtras> {\n const kernel = await initBrepkitWasm()\n liveKernel = kernel\n let lastFallbackCount = 0\n // 已知面句柄集合:getSubShapes(shape,'face') / makeRectangle / makeFace / buildTriFace\n // 返回的面在此登记;extrude/revolveVec 的 face 输入断言、getSubShapes 的\n // edge/vertex 分发都据此判定(brepkit 无 shape-type 分类 API,见下方注释)。\n const knownFaces = new Set<number>()\n // GOTCHA(2026-09-26 非实体句柄修复):brepkit 的 tessellateSolidGrouped / getSolidFaces\n // 等 *Solid API 只吃 solid 句柄,传 face/wire/edge/compound 即抛\n // \"invalid solid handle: index N out of bounds\"。而 brepkit **没有 shape-type 分类 API**\n // (getFaceEdges(solid) 不抛错、会返回某一面的边,不能 try/catch 探测)。故 meshShape\n // 必须靠这组「已知句柄集合」在执行前静态分发,而不是运行时探测:\n // knownFaces → tessellateFace(JsMesh)\n // knownWires → getWireEdges + tessellateEdge 逐边采样成线段\n // knownEdges → tessellateEdge 直接采样成线段(wire.ts smooth 路径 interpolatePoints 返回 edge)\n // knownCompounds→ 逐子句柄按其类型 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)\n // 不在任何集合里的句柄一律按 solid 走 tessellateSolidGrouped(实体创建不入集合,天然落此路径)。\n const knownWires = new Set<number>()\n const knownEdges = new Set<number>()\n // GOTCHA: getSolidFaces returns GLOBAL face indices (0..5, 6..11, ...) that collide\n // with solid handles (per-type namespace). Enumerated sub-faces must NOT pollute\n // knownFaces, else measuring a later solid whose handle number equals an old\n // enumerated face gets mis-tessellated as a face. derivedFaces is consulted ONLY by\n // getSubShapes edge/vertex drilling, never by meshShape/getBoundingBox.\n const derivedFaces = new Set<number>()\n // 虚拟 compound 句柄计数器(非实体子句柄不进内核 makeCompound,见 makeCompound GOTCHA)。\n const knownCompounds = new Map<number, number[]>()\n let virtualCompoundCounter = 0\n // GOTCHA(2026-09-26):brepkit 句柄按**类型分命名空间**——solid/face/wire/edge 各自从 0 计数\n // (实测 edge=wire=face=solid=0 可共存)。因此「某编号 N 在 knownFaces」与「某编号 N 是 solid」\n // 并不互斥:新 solid 恰好复用了早先某 face 的编号时,knownFaces.has(N) 会把 solid 误判成 face\n // (实测 box makeBox 返回 solid 2,撞 profile 早先的 face 2 → cloneShape 走 copyFace 崩溃)。\n // 建 solid 时必须从 knownFaces/knownWires/knownEdges/derivedFaces 抹掉该编号,让默认 solid 路径生效。\n // derivedFaces 也必须清:getSubShapes(solid,'edge') 会查 derivedFaces.has(s) 误走 getFaceEdges。\n const markSolid = (h: number): number => {\n knownFaces.delete(h); knownWires.delete(h); knownEdges.delete(h); knownCompounds.delete(h); derivedFaces.delete(h)\n return h\n }\n const readFallback = (): number => {\n try {\n return typeof kernel.meshFallbackCount === 'function' ? Number(kernel.meshFallbackCount()) : 0\n } catch { return 0 }\n }\n /** 布尔类操作后登记回退计数差(§5.4:宿主每步读取,>0 即链中断)。 */\n const trackFallback = <T>(r: T): T => { lastFallbackCount = readFallback(); return r }\n\n const faceCenterOfMass = (face: BrepHandle): BrepVec3 => {\n // brepkit 无 per-face 质心 API;用 UV 域中点在曲面上求值作为面中心近似\n // (与 OCCT 路径的「面中心用于命名/拾取锚点」语义一致,不追求精确质心)。\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n const u = ((d[0] ?? 0) + (d[1] ?? 1)) / 2\n const v = ((d[2] ?? 0) + (d[3] ?? 1)) / 2\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n }\n\n // ── 非实体 tessellation 助手(meshShape 分发用) ──\n // GOTCHA:tessellateFace 返回 JsMesh(positions/normals 为 Float64Array、indices 为 Uint32Array),\n // **不是** tessellateSolidGrouped 的 JSON 字符串——两者形态不同,勿混用 JSON.parse。\n type JsMesh = { positions: ArrayLike<number>; normals: ArrayLike<number>; indices: ArrayLike<number>; vertexCount: number; triangleCount: number }\n\n /** 单个 face → BrepMeshResult(tessellateFace)。 */\n const faceMesh = (f: number, deflection: number, angular: number): BrepMeshResult => {\n const jm = kernel.tessellateFace(f, deflection, angular) as JsMesh\n const positions = arr(jm.positions)\n const normals = arr(jm.normals)\n const indices = arr(jm.indices)\n const triCount = jm.triangleCount > 0 ? jm.triangleCount : indices.length / 3\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: triCount,\n faceGroups: new Int32Array([0, triCount, faceFingerprint(kernel, f, 1e9)]),\n faceCount: 1,\n }\n }\n\n /** 一组 edge 句柄 → 线段 mesh(positions 为采样点、indices 为端点对)。 */\n // GOTCHA:tessellateEdge(edge, N) 返回扁平 [x,y,z,...] 采样点(NURBS 才采样 N 点,\n // 直线边只回端点),不是三角网格;wire/curve 显示吃「端点对」索引(与 mesh 路径 wireMesh 同构)。\n const edgesToLineMesh = (edgeHandles: number[], deflection: number): BrepMeshResult => {\n const positions: number[] = []\n const indices: number[] = []\n // 采样密度:按 deflection 粗采样即可(1D 线框显示,非精确几何)。\n const nPts = Math.max(12, Math.round(4 / Math.max(deflection, 0.01)))\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n const base = positions.length / 3\n for (let i = 0; i < pts.length; i++) positions.push(pts[i]!)\n const verts = pts.length / 3\n for (let i = 0; i < verts - 1; i++) indices.push(base + i, base + i + 1)\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(positions.length),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: 0,\n faceGroups: new Int32Array(0),\n faceCount: 0,\n }\n }\n\n /** wire → 线段 mesh(getWireEdges 取边集后逐边采样)。 */\n const wireMesh = (wire: number, deflection: number): BrepMeshResult => {\n const edges = arr(kernel.getWireEdges(wire))\n return edgesToLineMesh(edges, deflection)\n }\n\n /** solid → BrepMeshResult(tessellateSolidGrouped,原 meshShape 实体路径抽出)。 */\n const solidMesh = (solid: number, deflection: number, angular: number): BrepMeshResult => {\n const raw = kernel.tessellateSolidGrouped(solid, deflection, angular)\n const m = JSON.parse(raw) as { positions: number[]; normals: number[]; indices: number[]; faceOffsets: number[] }\n // faceOffsets 形如 [start0, start1, ..., totalEnd]:以「索引数组单位」计的每面偏移(2026-09-19 实测),\n // 除以 3 换算为 faijs 契约的三角形单位 [triStart, triCount, faceHash]\n const fo = m.faceOffsets\n const faceCount = Math.max(0, fo.length - 1)\n const faceHashes: number[] = []\n try {\n const faces = arr(kernel.getSolidFaces(solid))\n for (let i = 0; i < faceCount && i < faces.length; i++) faceHashes.push(faceFingerprint(kernel, faces[i]!, 1e9))\n } catch { /* 非实体:faceHash 置 0 */ }\n const faceGroups = new Int32Array(faceCount * 3)\n for (let i = 0; i < faceCount; i++) {\n faceGroups[i * 3] = fo[i]! / 3\n faceGroups[i * 3 + 1] = (fo[i + 1]! - fo[i]!) / 3\n faceGroups[i * 3 + 2] = faceHashes[i] ?? 0\n }\n return {\n positions: new Float32Array(m.positions),\n normals: new Float32Array(m.normals),\n indices: new Uint32Array(m.indices),\n vertexCount: m.positions.length / 3,\n triangleCount: m.indices.length / 3,\n faceGroups,\n faceCount,\n }\n }\n\n /** compound → 逐子句柄 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)。 */\n const compoundMesh = (children: number[], deflection: number, angular: number): BrepMeshResult => {\n const positions: number[] = []\n const normals: number[] = []\n const indices: number[] = []\n const faceGroups: number[] = []\n let triOffset = 0\n for (const c of children) {\n let sub: BrepMeshResult\n if (knownFaces.has(c)) {\n sub = faceMesh(c, deflection, angular)\n } else if (knownWires.has(c)) {\n sub = wireMesh(c, deflection)\n } else if (knownEdges.has(c)) {\n sub = edgesToLineMesh([c], deflection)\n } else {\n // 子句柄按 solid 处理(importStep 多实体 / makeCompound(solids))。\n sub = solidMesh(c, deflection, angular)\n }\n const vOffset = positions.length / 3\n for (let i = 0; i < sub.positions.length; i++) positions.push(sub.positions[i]!)\n for (let i = 0; i < sub.normals.length; i++) normals.push(sub.normals[i] ?? 0)\n for (let i = 0; i < sub.indices.length; i++) indices.push(sub.indices[i]! + vOffset)\n if (sub.faceGroups) {\n for (let i = 0; i < sub.faceGroups.length; i += 3) {\n faceGroups.push((sub.faceGroups[i] ?? 0) + triOffset, sub.faceGroups[i + 1] ?? 0, sub.faceGroups[i + 2] ?? 0)\n }\n }\n triOffset += sub.triangleCount\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: indices.length / 3,\n faceGroups: new Int32Array(faceGroups),\n faceCount: faceGroups.length / 3,\n }\n }\n\n // ── 按句柄类型深拷贝(transform/copy 族分发用) ──\n // GOTCHA:brepkit copySolid/copyFace/copyWire 三者入参严格对应 solid/face/wire 句柄,\n // 传错即崩溃;transformSolid/transformFace/transformWire 均为「原地修改」void。\n // place/translate 等会作用在 profile 产出的 face 上(sew 用例 place 两张 face),\n // 故必须按 knownFaces/knownWires 分发,不能一律 copySolid。\n const cloneShape = (shape: number): number => {\n if (knownFaces.has(shape)) { const c = kernel.copyFace(shape); knownFaces.add(c); return c }\n if (knownWires.has(shape)) { const c = kernel.copyWire(shape); knownWires.add(c); return c }\n return markSolid(kernel.copySolid(shape))\n }\n\n /** 深拷贝 + 原地仿射变换(matrix 已经 toKernelMatrix 归一为 16 元素 4×4)。 */\n const cloneAndTransform = (shape: number, matrix16: number[]): number => {\n const c = cloneShape(shape)\n const m = Float64Array.from(matrix16)\n if (knownFaces.has(c)) kernel.transformFace(c, m)\n else if (knownWires.has(c)) kernel.transformWire(c, m)\n else kernel.transformSolid(c, m)\n return c\n }\n\n const api: BrepkitEngineExtras = {\n // ── 生命周期 ──\n release(_shape: BrepHandle): void { /* GC 型:brepkit 句柄由内核统一管理,无逐句柄 free API */ },\n dispose(_shape?: BrepHandle): void { /* GC 型引擎:无显式释放 */ },\n /** 内核级诊断:距上次读取的 mesh 布尔回退计数差(>0 = BREP 链已中断)。 */\n getMeshFallbackCount(): number {\n const now = readFallback()\n const delta = now - lastFallbackCount\n lastFallbackCount = now\n return delta\n },\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle { return asHandle(markSolid(kernel.makeBox(dx, dy, dz))) },\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle {\n const dx = Math.abs(corner2.x - corner1.x), dy = Math.abs(corner2.y - corner1.y), dz = Math.abs(corner2.z - corner1.z)\n const h = markSolid(kernel.makeBox(dx, dy, dz))\n // ⚠️ transformSolid 是「原地修改、返回 undefined」——makeBox 的句柄本身即新实体,\n // 直接原地变换后返回 h;若写 `asHandle(transformSolid(...))` 会拿到 undefined 句柄\n // (2026-09-25 实证:导致 splitBrep 基于半空间盒的 common/cut 全部失效)。\n kernel.transformSolid(h, toKernelMatrix(translationMatrix(\n Math.min(corner1.x, corner2.x), Math.min(corner1.y, corner2.y), Math.min(corner1.z, corner2.z),\n )))\n return asHandle(h)\n },\n makeCylinder(radius: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCylinder(radius, height))) },\n makeSphere(radius: number): BrepHandle { return asHandle(markSolid(kernel.makeSphere(radius, 32))) },\n makeCone(r1: number, r2: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCone(r1, r2, height))) },\n makeRectangle(width: number, height: number): BrepHandle {\n const f = kernel.makeRectangle(width, height)\n knownFaces.add(f)\n return asHandle(f)\n },\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle { return asHandle(markSolid(kernel.makeEllipsoid(rx, ry, rz))) },\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle { return asHandle(markSolid(kernel.makeTorus(majorRadius, minorRadius, 64))) },\n makeVertex(x: number, y: number, z: number): BrepHandle { return asHandle(kernel.makeVertex(x, y, z)) },\n\n // ── 造型运算 ──\n extrude(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n // 方言归一(§3.6-1):L1 口径是挤出向量;brepkit 原生吃 (face, dir, distance)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('extrude requires a face input (plan §3.6-1); got a handle that is not a known face')\n }\n const len = Math.hypot(dx, dy, dz)\n if (len === 0) fail('extrude: zero-length extrusion vector')\n return asHandle(markSolid(kernel.extrude(s, dx / len, dy / len, dz / len, len)))\n },\n revolveVec(shape: BrepHandle, center: BrepVec3, direction: BrepVec3, angleDeg: number): BrepHandle {\n // 方言归一:brepkit revolve 只吃 face(与 extrude 同族断言)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('revolveVec requires a face input; got a handle that is not a known face')\n }\n return asHandle(markSolid(kernel.revolve(\n s, center.x, center.y, center.z, direction.x, direction.y, direction.z, angleDeg,\n )))\n },\n sew(shapesList: BrepHandle[], tolerance?: number): BrepHandle {\n return asHandle(kernel.sewFaces(Uint32Array.from(shapesList.map(asNum)), tolerance ?? 1e-6))\n },\n sewAndSolidify(faces: BrepHandle[], _tolerance?: number): BrepHandle {\n // brepkit 的 makeSolid 即「缝合并固化成实体」(sewFaces + 建 solid)。\n return asHandle(markSolid(kernel.makeSolid(Uint32Array.from(faces.map(asNum)))))\n },\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, _tolerance: number): BrepHandle {\n // brepkit 参数序 (solid, thickness, open_faces);tolerance 内核固定。\n return asHandle(kernel.shell(asNum(solid), thickness, Uint32Array.from(facesToRemove.map(asNum))))\n },\n hullFromPoints(points: BrepVec3[], _tolerance: number): BrepHandle {\n return asHandle(kernel.convexHull(flattenPoints(points)))\n },\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.fuse(asNum(a), asNum(b))))) },\n cut(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.cut(asNum(a), asNum(b))))) },\n common(a: BrepHandle, b: BrepHandle): BrepHandle {\n // brepkit 无 `common` 原生名;交集语义由 `intersect` 承担(method-map: dialect)。\n return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b)))))\n },\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(trackFallback(kernel.intersect(asNum(a), asNum(b)))) },\n fuseAll(shapesList: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fuseAll(Int32Array.from(shapesList.map(asNum))))))\n },\n sectionByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle[] {\n // brepkit 原生 section(solid, plane) 返回剖面 face 句柄组(§3.6-2 新中立名)。\n // GOTCHA:brepkit section 返回的是 **face** 句柄(不是 edge/wire),必须登记进 knownFaces,\n // 否则 op 层 makeCompound(这些 face) 后送 meshShape 会按 solid 路径崩溃。\n const s = asNum(shape)\n const faces = arr(kernel.section(\n s, point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n for (const f of faces) knownFaces.add(f)\n return faces.map(asHandle)\n },\n splitByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): { positive: BrepHandle; negative: BrepHandle } {\n const parts = arr(kernel.split(\n asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n if (parts.length !== 2) {\n fail(`splitByPlane: expected 2 solids, got ${parts.length}`)\n }\n // 法向正侧 = positive(§3.7):按质心在平面法向的投影分类。\n const originDot = point.x * normal.x + point.y * normal.y + point.z * normal.z\n const side = (h: number): number => {\n const c = toNumArray(kernel.centerOfMass(h, 0.05))\n return (c[0] ?? 0) * normal.x + (c[1] ?? 0) * normal.y + (c[2] ?? 0) * normal.z - originDot\n }\n const [a, b] = parts\n markSolid(a); markSolid(b)\n return side(a) >= side(b)\n ? { positive: asHandle(a), negative: asHandle(b) }\n : { positive: asHandle(b), negative: asHandle(a) }\n },\n\n // ── 倒角与圆角(Q7:只对齐等距 + 距角两种粒度)──\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle {\n return asHandle(trackFallback(kernel.chamfer(asNum(solid), Uint32Array.from(edges.map(asNum)), distance)))\n },\n chamferDistAngle(solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number): BrepHandle {\n // 方言映射:L1 chamferDistAngle ↔ brepkit chamferDistanceAngle。\n // ⚠️ 单位方言:L1 口径是**度**(`AddDA(distance, angleDeg, E, F)`),brepkit 内核吃**弧度**\n // (2026-09-25 实证:传 45 抛 \"angle must be less than π/2\";传 π/4 正常倒角)。\n const angleRad = (angleDeg * Math.PI) / 180\n return asHandle(trackFallback(kernel.chamferDistanceAngle(\n asNum(solid), Uint32Array.from(edges.map(asNum)), distance, angleRad,\n )))\n },\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle {\n return asHandle(trackFallback(kernel.fillet(asNum(solid), Uint32Array.from(edges.map(asNum)), radius)))\n },\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle {\n // 方言映射:L1 filletVariable(solid, edge, startRadius, endRadius)(单边变半径)\n // ↔ brepkit filletVariable(solid, json) 吃**序列** `[{edge, radius1, radius2}, ...]`。\n // ⚠️ 直接传 4 个位置参数会触发 wasm memory out of bounds(2026-09-25 实证)。\n const spec = JSON.stringify([{ edge: asNum(edge), radius1: startRadius, radius2: endRadius }])\n return asHandle(trackFallback(kernel.filletVariable(asNum(solid), spec)))\n },\n filletWithHistory(solid: BrepHandle, edges: BrepHandle[], radius: number, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.filletWithEvolution(asNum(solid), Int32Array.from(edges.map(asNum)), radius)\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n\n // ── 变换 ──\n // ⚠️ brepkit 的 transformSolid 是「原地修改、返回 undefined」——必须先 copySolid\n // 复制出新句柄再变换,否则会篡改调用方手里的原实体(单测 2026-09-19 实证)。\n // ⚠️ 矩阵方言:faijs 接口口径是 3×4 行主序 12 元素(见 brep/engine/primitives.ts);\n // brepkit transformSolid 吃 4×4 行主序 16 元素。所有 transformSolid 调用一律经\n // toKernelMatrix 归一(下方唯一转换点),禁止直出 16 元素旁路。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n return asHandle(cloneAndTransform(asNum(shape), toKernelMatrix(translationMatrix(dx, dy, dz))))\n },\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle {\n return asHandle(cloneAndTransform(asNum(shape), toKernelMatrix(scaleMatrix(center, factor))))\n },\n transform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return asHandle(cloneAndTransform(asNum(shape), toKernelMatrix(matrix)))\n },\n located(shape: BrepHandle, matrix: number[]): BrepHandle {\n return asHandle(cloneAndTransform(asNum(shape), toKernelMatrix(matrix)))\n },\n locate(shape: BrepHandle, matrix: number[]): BrepHandle {\n return asHandle(cloneAndTransform(asNum(shape), toKernelMatrix(matrix)))\n },\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return asHandle(cloneAndTransform(asNum(shape), toKernelMatrix(matrix)))\n },\n copy(shape: BrepHandle): BrepHandle { return asHandle(cloneShape(asNum(shape))) },\n copyShape(shape: BrepHandle): BrepHandle { return asHandle(cloneShape(asNum(shape))) },\n composeTransform(m1: number[], m2: number[]): number[] {\n // 方言:L1 是 3×4 行主序 12 元素;brepkit composeTransforms 吃/回 4×4 16 元素。\n const r = kernel.composeTransforms(\n Float64Array.from(toKernelMatrix(m1)),\n Float64Array.from(toKernelMatrix(m2)),\n )\n return Array.from(r as ArrayLike<number>).slice(0, 12)\n },\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle {\n return asHandle(kernel.mirror(asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z))\n },\n\n // ── 阵列 ──\n // brepkit wasm 的 pattern 内核函数都返回 compound(含全部副本)→ 经 getCompoundSolids 拆成数组。\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[] {\n const compound = kernel.linearPattern(asNum(shape), direction.x, direction.y, direction.z, spacing, count)\n return arr(kernel.getCompoundSolids(compound)).map(asHandle)\n },\n circularPattern(shape: BrepHandle, _center: BrepVec3, axis: BrepVec3, _angleStep: number, count: number): BrepHandle[] {\n // ⚠️ brepkit wasm circularPattern(solid, ax, ay, az, count) 无 center/angle 参数:\n // 固定整圆均分(每份 360°/count)。fullAngle=360 时与 vendored/occt 语义一致;\n // 其它角度跨度无法表达(语义限制记录于此,parity 测试用整圆)。\n const compound = kernel.circularPattern(asNum(shape), axis.x, axis.y, axis.z, count)\n return arr(kernel.getCompoundSolids(compound)).map(asHandle)\n },\n gridPattern(shape: BrepHandle, directionX: BrepVec3, directionY: BrepVec3, spacingX: number, spacingY: number, countX: number, countY: number): BrepHandle {\n return asHandle(kernel.gridPattern(\n asNum(shape),\n directionX.x, directionX.y, directionX.z,\n directionY.x, directionY.y, directionY.z,\n spacingX, spacingY, countX, countY,\n ))\n },\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle {\n const e = kernel.makeLineEdge(start.x, start.y, start.z, end.x, end.y, end.z)\n knownEdges.add(e)\n return asHandle(e)\n },\n makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle {\n // 方言消化:occt 吃 3 点;brepkit makeCircleArc3d 吃 (start,end,center,axis)。\n const { center, axis } = circumcircle(start, mid, end)\n const e = kernel.makeCircleArc3d(\n start.x, start.y, start.z,\n end.x, end.y, end.z,\n center.x, center.y, center.z,\n axis.x, axis.y, axis.z,\n )\n knownEdges.add(e)\n return asHandle(e)\n },\n makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle {\n // 方言消化:L1 吃控制点(Bezier);brepkit 原生 makeNurbsEdge 吃\n // (start,end,degree,knots,control_points,weights)。Bezier = degree n-1 的\n // clamped NURBS,knots = [0]×n + [1]×n,weights 全 1。\n const n = controlPoints.length\n if (n < 2) fail('makeBezierEdge: need at least 2 control points')\n const degree = n - 1\n const knots = new Float64Array(2 * n)\n for (let i = n; i < 2 * n; i++) knots[i] = 1\n const weights = new Float64Array(n).fill(1)\n const first = controlPoints[0]\n const last = controlPoints[n - 1]\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree, knots, flattenPoints(controlPoints), weights,\n )\n knownEdges.add(e)\n return asHandle(e)\n },\n makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle {\n const e = kernel.makeCircleEdge(\n center.x, center.y, center.z, normal.x, normal.y, normal.z, radius,\n )\n knownEdges.add(e)\n return asHandle(e)\n },\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle {\n const w = kernel.makeWire(Int32Array.from(edges.map(asNum)), false)\n knownWires.add(w)\n return asHandle(w)\n },\n makeFace(wire: BrepHandle): BrepHandle {\n const f = kernel.makeFaceFromWire(asNum(wire))\n knownFaces.add(f)\n return asHandle(f)\n },\n makeCompound(shapesList: BrepHandle[]): BrepHandle {\n const kids = arr(shapesList.map(asNum))\n // GOTCHA(2026-09-26):brepkit makeCompound 只接受 **solid** 句柄——把 face/wire\n // (sectionByPlane 截面面组)塞进去即抛 \"invalid solid handle\"。非实体子句柄时\n // 不调内核,改用高段虚拟句柄(0x80000000+),仅靠 knownCompounds 表分发\n // meshShape/wireframe/getSubShapes/getBoundingBox,不触达内核。\n const hasNonSolid = kids.some((k) => knownFaces.has(k) || knownWires.has(k) || knownEdges.has(k) || knownCompounds.has(k))\n if (hasNonSolid) {\n virtualCompoundCounter++\n const v = 0x80000000 + virtualCompoundCounter\n knownCompounds.set(v, kids)\n return asHandle(v)\n }\n const c = kernel.makeCompound(Int32Array.from(kids))\n knownCompounds.set(c, kids)\n return asHandle(c)\n },\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle {\n // addHolesToFace 返回**新 face 句柄**(同曲面 + 内孔 wire),必须登记进 knownFaces,\n // 否则 profile(op) 带孔面送 meshShape 会落到 solid 路径崩溃。\n const f = kernel.addHolesToFace(asNum(face), Int32Array.from(holeWires.map(asNum)))\n knownFaces.add(f)\n return asHandle(f)\n },\n buildTriFace(a: BrepVec3, b: BrepVec3, c: BrepVec3): BrepHandle {\n const f = kernel.makePolygon(flattenPoints([a, b, c]))\n knownFaces.add(f)\n return asHandle(f)\n },\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult {\n const deflection = options?.linearDeflection ?? 0.1\n const angular = options?.angularDeflection ?? 0.5\n const s = asNum(shape)\n // 非实体句柄按已知集合静态分发(见文件头 GOTCHA:brepkit 无 shape-type 分类 API)。\n // 顺序:face → wire → edge → compound → solid。实体创建不入任何集合,天然落 solid 路径。\n if (knownFaces.has(s)) return faceMesh(s, deflection, angular)\n if (knownWires.has(s)) return wireMesh(s, deflection)\n if (knownEdges.has(s)) return edgesToLineMesh([s], deflection)\n const compoundChildren = knownCompounds.get(s)\n if (compoundChildren) return compoundMesh(compoundChildren, deflection, angular)\n // solid(或未登记句柄):走原 tessellateSolidGrouped 路径。\n return solidMesh(s, deflection, angular)\n },\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData {\n const d = deflection ?? 0.1\n const s = asNum(shape)\n // GOTCHA:meshEdgesAll 是 solid-only API——buildTopologyFromMesh 会对 face/wire/edge\n // 产物调 wireframe(...),传入非实体句柄即抛 \"invalid solid handle\"。按已知集合分发:\n // face -> getFaceEdges;wire -> getWireEdges;edge -> [self];否则 solid 走 meshEdgesAll。\n let edgeHandles: number[] | null = null\n if (knownFaces.has(s)) edgeHandles = arr(kernel.getFaceEdges(s))\n else if (knownWires.has(s)) edgeHandles = arr(kernel.getWireEdges(s))\n else if (knownEdges.has(s)) edgeHandles = [s]\n else if (knownCompounds.has(s)) {\n // compound(sectionByPlane 面组):逐子面收集边。\n edgeHandles = []\n for (const k of knownCompounds.get(s)!) {\n if (knownFaces.has(k)) edgeHandles.push(...arr(kernel.getFaceEdges(k)))\n else if (knownWires.has(k)) edgeHandles.push(...arr(kernel.getWireEdges(k)))\n else if (knownEdges.has(k)) edgeHandles.push(k)\n }\n }\n if (edgeHandles) {\n const nPts = Math.max(12, Math.round(4 / Math.max(d, 0.01)))\n const positions: number[] = []\n const offsets: number[] = [0]\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n for (const p of pts) positions.push(p)\n offsets.push(positions.length / 3)\n }\n const edgeGroups = new Int32Array(edgeHandles.length * 3)\n for (let i = 0; i < edgeHandles.length; i++) {\n edgeGroups[i * 3] = offsets[i] ?? 0\n edgeGroups[i * 3 + 1] = (offsets[i + 1] ?? positions.length / 3) - (offsets[i] ?? 0)\n edgeGroups[i * 3 + 2] = i\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length / 3, edgeCount: edgeHandles.length }\n }\n // solid(或未登记句柄):走原 meshEdgesAll 路径。\n // JsEdgeLines:edgeCount/offsets/positions 均为属性(offsets/positions 为 TypedArray,2026-09-19 实测)\n const me = kernel.meshEdgesAll(s, d, 0.5) as {\n edgeCount: number; offsets: ArrayLike<number>; positions: ArrayLike<number>\n }\n const edgeCount = Number(me.edgeCount)\n const offsets = arr(me.offsets)\n const positions = arr(me.positions)\n const edgeGroups = new Int32Array(edgeCount * 3)\n for (let i = 0; i < edgeCount; i++) {\n const start = offsets[i] ?? 0\n const count = (offsets[i + 1] ?? positions.length / 3) - start\n edgeGroups[i * 3] = start\n edgeGroups[i * 3 + 1] = count\n edgeGroups[i * 3 + 2] = i // 线框 hash 用序号(wireframe 不参与跨操作溯源)\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount }\n },\n\n // ── 拓扑查询 ──\n // 注意:拓扑 manifest(topologyExt.buildSelectorManifestCore)会在「面句柄」上调用\n // getSubShapes(face, 'edge'/'vertex'),而 brepkit 的 getSolidEdges/getSolidVertices\n // 只接受 solid 句柄;brepkit 提供 getFaceEdges(face)/getFaceVertices(face)。\n // brepkit 没有 shape-type 分类 API,且 getFaceEdges(solid) 不抛错(会返回某一面的边),\n // 不能用 try/catch 探测。改用「已知面集」:每次枚举面时把面句柄记入 knownFaces,\n // edge/vertex 查询时按句柄是否在 knownFaces 里分发到 face 级或 solid 级 API。\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[] {\n const s = asNum(shape)\n // GOTCHA(2026-09-26 非实体句柄修复):buildTopologyFromMesh 会对**面产物**\n // 调 getSubShapes(face,'face')。brepkit 的 getSolidFaces/getShellFaces 是 solid-only,\n // 对面句柄一个抛 \"invalid solid handle\"、catch 里再抛 \"invalid shell handle\"——\n // 两跳都不被捕获即崩溃。brepkit 无 shape-type 分类 API,必须靠已知集合先分发:\n // 输入本身就是 knownFaces 里的一张面时,'face' 返回 [s],edge/vertex 走 face 级 API。\n if (knownFaces.has(s)) {\n if (type === 'face') return [asHandle(s)]\n if (type === 'edge') { const es = arr(kernel.getFaceEdges(s)); es.forEach((e) => knownEdges.add(e)); return es.map(asHandle) }\n if (type === 'vertex') return arr(kernel.getFaceVertices(s)).map(asHandle)\n return []\n }\n if (knownWires.has(s)) {\n if (type === 'edge') { const es = arr(kernel.getWireEdges(s)); es.forEach((e) => knownEdges.add(e)); return es.map(asHandle) }\n return []\n }\n if (knownEdges.has(s)) {\n // input is itself an edge (wire.ts smooth path: interpolatePoints returns edge)\n if (type === 'edge') return [asHandle(s)]\n return []\n }\n const compKids = knownCompounds.get(s)\n if (compKids) {\n // compound(sectionByPlane 面组 / makeCompound 多实体 / importStep 多实体):\n // 'face' 返回子面,'solid' 返回子实体,其余空。\n if (type === 'face') return compKids.filter((k) => knownFaces.has(k)).map(asHandle)\n if (type === 'solid') return compKids.filter((k) => !knownFaces.has(k) && !knownWires.has(k) && !knownEdges.has(k)).map(asHandle)\n return []\n }\n let list: number[]\n const isFaceLike = knownFaces.has(s) || derivedFaces.has(s)\n if (type === 'face') {\n // 输入可能是 solid 或 shell。枚举到的子面登记到 derivedFaces(不进 knownFaces,\n // 避免与 solid 句柄撞号——见 derivedFaces 注释)。\n try { list = arr(kernel.getSolidFaces(s)) } catch { list = arr(kernel.getShellFaces?.(s) ?? []) }\n for (const f of list) derivedFaces.add(f)\n } else if (type === 'edge') {\n list = isFaceLike\n ? arr(kernel.getFaceEdges(s))\n : arr(kernel.getSolidEdges(s))\n } else if (type === 'vertex') {\n list = isFaceLike\n ? arr(kernel.getFaceVertices(s))\n : arr(kernel.getSolidVertices(s))\n } else if (type === 'shell') {\n list = arr(kernel.getSolidShells?.(s) ?? [])\n } else if (type === 'solid') {\n // 输入可能是 compound(多实体)或单个 solid。\n try { list = arr(kernel.getCompoundSolids(s)) }\n catch { list = [s] }\n } else {\n fail(`getSubShapes(${type}): unsupported sub-shape type`)\n }\n return list.map(asHandle)\n },\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[] {\n if (type !== 'face') fail(`subShapeHashes(${type}): only 'face' is supported by brepkit`)\n const s = asNum(shape)\n // GOTCHA:buildTopologyFromMesh 会对面产物调 subShapeHashes(face,'face');\n // getSolidFaces 是 solid-only,对面句柄崩溃。输入本身是已知面时,哈希即其自身指纹。\n if (knownFaces.has(s)) return [faceFingerprint(kernel, s, hashUpperBound)]\n // wire/edge 无面;compound(sectionByPlane 面组)的子句柄即面。\n if (knownWires.has(s) || knownEdges.has(s)) return []\n const compKids = knownCompounds.get(s)\n if (compKids) {\n const faces = compKids.filter((k) => knownFaces.has(k))\n return faces.map((f) => faceFingerprint(kernel, f, hashUpperBound))\n }\n const faces = arr(kernel.getSolidFaces(s))\n const hashes = faces.map(f => faceFingerprint(kernel, f, hashUpperBound))\n // 登记 hash↔handle(fuseWithHistory 溯源对齐依赖此表)\n const reg = hashRegistry.get(kernel) ?? new Map<number, number>()\n faces.forEach((f, i) => reg.set(hashes[i], f))\n hashRegistry.set(kernel, reg)\n return hashes\n },\n hashCode(shape: BrepHandle, upperBound: number): number {\n return faceFingerprint(kernel, asNum(shape), upperBound)\n },\n isSame(a: BrepHandle, b: BrepHandle): boolean { return asNum(a) === asNum(b) },\n isSolid(shape: BrepHandle): boolean {\n try { return arr(kernel.getSolidFaces(asNum(shape))).length > 0 } catch { return false }\n },\n shapeType(shape: BrepHandle): string {\n try {\n const s = arr(kernel.getSolidFaces(asNum(shape)))\n const f = arr(kernel.getFaces(asNum(shape)))\n return s.length > 0 ? 'SOLID' : f.length > 0 ? 'FACE' : 'COMPOUND'\n } catch { return 'COMPOUND' }\n },\n shapeOrientation(shape: BrepHandle): string {\n try { return String(kernel.getShapeOrientation(asNum(shape))) } catch { return 'forward' }\n },\n edgeToFaceMap(shape: BrepHandle): unknown {\n // brepkit 返回 JSON 字符串 {\"edgeId\":[faceId,...]};L1 契约是 unknown(调用方自解析)。\n return kernel.edgeToFaceMap(asNum(shape))\n },\n adjacentFaces(shape: BrepHandle, face: BrepHandle): BrepHandle[] {\n return arr(kernel.adjacentFaces(asNum(shape), asNum(face))).map(asHandle)\n },\n sharedEdges(a: BrepHandle, b: BrepHandle): BrepHandle[] {\n return arr(kernel.sharedEdges(asNum(a), asNum(b))).map(asHandle)\n },\n\n // ── 几何求值 ──\n curveType(edge: BrepHandle): string { return String(kernel.getEdgeCurveType(asNum(edge))) },\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurve 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.evaluateEdgeCurve(asNum(edge), param)))\n },\n curveTangent(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurveD1 返回 Float64Array [px,py,pz, tx,ty,tz](点+切向量)\n const d = toNumArray(kernel.evaluateEdgeCurveD1(asNum(edge), param))\n return { x: d[3] ?? 0, y: d[4] ?? 0, z: d[5] ?? 0 }\n },\n curveParameters(edge: BrepHandle): BrepCurveParameters {\n // getEdgeCurveParameters 返回 Float64Array [first, last]\n const d = toNumArray(kernel.getEdgeCurveParameters(asNum(edge)))\n return { first: d[0] ?? 0, last: d[d.length - 1] ?? 1 }\n },\n curveIsClosed(edge: BrepHandle): boolean {\n // brepkit 无直接 edge-isClosed API;按曲线类型 + Nurbs 元数据判定:\n // CIRCLE/ELLIPSE 类曲线恒闭合;LINE 恒不闭合;\n // 其他曲线尝试 getNurbsCurveData().closed,拿不到时按不闭合处理(保守,不报错)。\n try {\n const t = String(kernel.getEdgeCurveType(asNum(edge))).toUpperCase()\n if (t === 'CIRCLE' || t === 'ELLIPSE') return true\n if (t === 'LINE') return false\n } catch { /* 类型查询失败走 Nurbs 元数据 */ }\n try {\n const raw = kernel.getNurbsCurveData(asNum(edge))\n if (typeof raw === 'string') {\n const p = JSON.parse(raw) as { closed?: boolean; periodic?: boolean }\n return !!p.closed || !!p.periodic\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n return !!(o.closed || o.periodic)\n }\n } catch { /* 非 Nurbs 边 */ }\n return false\n },\n curveLength(edge: BrepHandle): number { return Number(kernel.edgeLength(asNum(edge))) },\n surfaceType(face: BrepHandle): string { return String(kernel.getSurfaceType(asNum(face))) },\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurfaceNormal(face,u,v) 返回 Float64Array [nx,ny,nz];\n // 注意:getFaceNormal(face) 只接受 face 一个参数,不带 u/v,不能用于参数空间法向。\n return vec3Of(toNumArray(kernel.evaluateSurfaceNormal(asNum(face), u, v)))\n },\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurface 返回 Float64Array [x,y,z]\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n },\n uvBounds(face: BrepHandle): BrepUvBounds {\n // getSurfaceDomain 返回 Float64Array [uMin,uMax,vMin,vMax]\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n return { uMin: d[0] ?? 0, uMax: d[1] ?? 1, vMin: d[2] ?? 0, vMax: d[3] ?? 1 }\n },\n surfaceCenterOfMass: faceCenterOfMass,\n getFaceCylinderData(face: BrepHandle): { radius: number } | null {\n try {\n const p = JSON.parse(kernel.getAnalyticSurfaceParams(asNum(face))) as { type?: string; radius?: number }\n if (p?.type === 'cylinder' && typeof p.radius === 'number') return { radius: p.radius }\n } catch { /* 非解析面 */ }\n return null\n },\n getNurbsCurveData(edge: BrepHandle): { degree: number; periodic: boolean; rational: boolean } | null {\n try {\n const p = JSON.parse(kernel.getNurbsCurveData(asNum(edge))) as { degree?: number; periodic?: boolean; rational?: boolean }\n if (p && typeof p.degree === 'number') return { degree: p.degree, periodic: !!p.periodic, rational: !!p.rational }\n } catch { /* 非 Nurbs 边 */ }\n return null\n },\n interpolatePoints(points: BrepVec3[], degree: number): BrepHandle {\n // GOTCHA:interpolatePoints 返回 **edge** 句柄(不是 wire)——wire.ts smooth 路径把它\n // 直接当 wire 送 solidToShape。登记进 knownEdges,meshShape 才能走 tessellateEdge 路径。\n const e = kernel.interpolatePoints(flattenPoints(points), degree)\n knownEdges.add(e)\n return asHandle(e)\n },\n defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle {\n return asHandle(kernel.defeature(asNum(shape), Uint32Array.from(faces.map(asNum))))\n },\n draft(shape: BrepHandle, faces: BrepHandle[], pull: BrepVec3, neutral: BrepVec3, angleDeg: number): BrepHandle {\n return asHandle(kernel.draft(\n asNum(shape),\n Uint32Array.from(faces.map(asNum)),\n pull.x, pull.y, pull.z,\n neutral.x, neutral.y, neutral.z,\n angleDeg,\n ))\n },\n removeHolesFromFace(face: BrepHandle): BrepHandle {\n // removeHolesFromFace 返回**新 face 句柄**(去掉内孔的同曲面 face),必须登记进 knownFaces。\n const f = kernel.removeHolesFromFace(asNum(face))\n knownFaces.add(f)\n return asHandle(f)\n },\n reverseShape(shape: BrepHandle): BrepHandle {\n return asHandle(kernel.reverseShape(asNum(shape)))\n },\n projectEdges(shape: BrepHandle, origin: BrepVec3, direction: BrepVec3, xAxis: BrepVec3, hiddenLines: boolean, deflection: number): unknown {\n // brepkit 返回 JSON 字符串 {\"visible\":[[x,y,…]],\"hidden\":[[…]]};L1 契约是 unknown。\n return kernel.projectEdges(\n asNum(shape),\n origin.x, origin.y, origin.z,\n direction.x, direction.y, direction.z,\n xAxis.x, xAxis.y, xAxis.z,\n hiddenLines, deflection,\n )\n },\n\n // ── 测量 ──\n getBoundingBox(shape: BrepHandle, _useTriangulation?: boolean): BrepBoundingBox {\n const s = asNum(shape)\n const bboxFromPoints = (pts: ArrayLike<number>): BrepBoundingBox => {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (let i = 0; i + 2 < pts.length; i += 3) {\n xmin = Math.min(xmin, pts[i]!); ymin = Math.min(ymin, pts[i + 1]!); zmin = Math.min(zmin, pts[i + 2]!)\n xmax = Math.max(xmax, pts[i]!); ymax = Math.max(ymax, pts[i + 1]!); zmax = Math.max(zmax, pts[i + 2]!)\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n const solidBbox = (h: number): BrepBoundingBox => {\n const b = kernel.boundingBox(h) as ArrayLike<number>\n return { xmin: b[0]!, ymin: b[1]!, zmin: b[2]!, xmax: b[3]!, ymax: b[4]!, zmax: b[5]! }\n }\n const kids = knownCompounds.get(s)\n if (kids) {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const k of kids) {\n try {\n let b: BrepBoundingBox\n if (knownFaces.has(k)) b = bboxFromPoints(arr(kernel.tessellateFace(k, 0.1, 1).positions))\n else if (knownWires.has(k)) b = bboxFromPoints(arr(kernel.getWireEdges(k)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n else if (knownEdges.has(k)) b = bboxFromPoints(arr(kernel.tessellateEdge(k, 16)))\n else b = solidBbox(k)\n xmin = Math.min(xmin, b.xmin); ymin = Math.min(ymin, b.ymin); zmin = Math.min(zmin, b.zmin)\n xmax = Math.max(xmax, b.xmax); ymax = Math.max(ymax, b.ymax); zmax = Math.max(zmax, b.zmax)\n } catch { /* 子项 bbox 查询失败忽略 */ }\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n // GOTCHA:kernel.boundingBox 是 solid-only。face/wire/edge 句柄必须走 tessellation 采样,\n // 否则 measure() 对 wire/profile 调 getBoundingBox 即崩 \"invalid solid handle\"。\n if (knownFaces.has(s)) return bboxFromPoints(arr(kernel.tessellateFace(s, 0.1, 1).positions))\n if (knownWires.has(s)) return bboxFromPoints(arr(kernel.getWireEdges(s)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n if (knownEdges.has(s)) return bboxFromPoints(arr(kernel.tessellateEdge(s, 16)))\n return solidBbox(s)\n },\n getVolume(shape: BrepHandle): number { return Number(kernel.volume(asNum(shape), 0.05)) },\n getCenterOfMass(shape: BrepHandle): BrepVec3 {\n // centerOfMass 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.centerOfMass(asNum(shape), 0.05)))\n },\n getSurfaceArea(shape: BrepHandle): number {\n // 方言映射:L1 getSurfaceArea ↔ brepkit surfaceArea(solid, deflection)。\n return Number(kernel.surfaceArea(asNum(shape), 0.05))\n },\n getLength(shape: BrepHandle): number {\n // 方言映射:L1 getLength ↔ brepkit edgeLength(edge) / wireLength(wire)。\n // wire 与 edge 的入参差异在适配器内判别(D6):edgeLength 只吃 edge 句柄,\n // 对 wire 会抛错;据此分发,两条路径都失败时如实抛出(不静默返回 0)。\n const s = asNum(shape)\n try {\n kernel.getEdgeCurveType(s)\n return Number(kernel.edgeLength(s))\n } catch {\n return Number(kernel.wireLength(s))\n }\n },\n\n // ── 校验与修复 ──\n // ⚠️ brepkit 的修复类内核函数全部是「**原地修改入参实体 + 返回修复计数**」,不是返回新句柄:\n // healSolid(solid) → 修复的问题数\n // fixFaceOrientations(solid) → 修复的面数\n // unifyFaces(solid) → 合并删除的面数\n // removeDegenerateEdges(s,tol) → 删除的边数\n // repairSolid(solid) → 修复后剩余错误数\n // 直接 `asHandle(kernel.healSolid(...))` 会把计数(常见为 0)当成句柄,得到无效实体\n // (2026-09-25 实证)。正确适配:先 copySolid 保护调用方原实体,再原地修复副本,返回副本句柄。\n isValid(shape: BrepHandle): boolean {\n // brepkit validateSolid 返回错误数(0 = 有效)。\n return Number(kernel.validateSolid(asNum(shape))) === 0\n },\n unifySameDomain(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.unifyFaces(c)\n return asHandle(c)\n },\n healSolid(shape: BrepHandle, _tolerance?: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixShape(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixFaceOrientations(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.fixFaceOrientations(c)\n return asHandle(c)\n },\n removeDegenerateEdges(shape: BrepHandle, tolerance?: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.removeDegenerateEdges(c, tolerance ?? 1e-6)\n return asHandle(c)\n },\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle {\n // ⚠️ brepkit importStep 吃 **Uint8Array**(不是字符串),返回 **Uint32Array**(文件内可含多个 solid)。\n // L1 契约是单 BrepHandle:0 个 → fail;1 个 → 直通;多个 → 合成 compound(2026-09-25 实证)。\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n const solids = arr(kernel.importStep(bytes))\n if (solids.length === 0) fail('importStep: kernel returned no solid')\n return asHandle(solids.length === 1 ? solids[0] : kernel.makeCompound(Uint32Array.from(solids)))\n },\n exportStep(shape: BrepHandle): string {\n // brepkit exportStep 返回 UTF-8 字节(Uint8Array),需解码为 STEP 文本(2026-09-19 实测)\n const bytes = kernel.exportStep(asNum(shape))\n return typeof bytes === 'string' ? bytes : new TextDecoder().decode(bytes)\n },\n importStl(data: string | ArrayBuffer): BrepHandle {\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n return asHandle(kernel.importStl(bytes))\n },\n fromBREP(data: string): BrepHandle {\n // ⚠️ brepkit fromBREP 吃字符串(STEP 文本或 toBREP/toBrepJson 输出,内核自动判别),\n // 与 serializeSolid/deserializeSolid 的**二进制 arena** 是两套机制。\n // 旧实现误用 `deserializeSolid(atob(data))`:base64 解码破坏了 STEP 文本 → 往返必失败\n // (2026-09-25 实证:fromBREP(STEP)、fromBREP(toBREP)、fromBREP(toBrepJson) 均成功)。\n return asHandle(kernel.fromBREP(data))\n },\n\n // ── 面演化(L1 三员 + filletWithHistory,双方都有对齐实现) ──\n cutWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.cutWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n fuseWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.fuseWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n intersectWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.intersectWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n }\n return api\n}\n\n// ── 工具 ──\n\n/** 3×4 行主序平移矩阵(faijs 接口方言:平移在 index 3/7/11,与 matrixToArray 同构)。 */\nfunction translationMatrix(dx: number, dy: number, dz: number): number[] {\n return [\n 1, 0, 0, dx,\n 0, 1, 0, dy,\n 0, 0, 1, dz,\n ]\n}\n\n/** 3×4 行主序缩放矩阵(绕 center 缩放;faijs 接口方言,12 元素)。 */\nfunction scaleMatrix(center: BrepVec3, factor: number): number[] {\n return [\n factor, 0, 0, center.x * (1 - factor),\n 0, factor, 0, center.y * (1 - factor),\n 0, 0, factor, center.z * (1 - factor),\n ]\n}\n\n/**\n * 唯一的矩阵方言转换点:faijs 3×4 行主序(12 元素,matrixToArray 口径)→\n * brepkit transformSolid 的 4×4 行主序(16 元素,补底行 0,0,0,1)。\n * translate/scale 内部矩阵与 transform/located/generalTransform 的宿主入参\n * 全部经此归一;非 12 元素直接抛错(方言不清 = 缺陷,静默通过即红线违规)。\n */\nfunction toKernelMatrix(matrix: number[]): number[] {\n if (matrix.length !== 12) {\n throw new Error(\n `[brepkit] matrix dialect violation: expected 12 elements (3x4 row-major, faijs interface contract), got ${matrix.length}`,\n )\n }\n return [\n matrix[0], matrix[1], matrix[2], matrix[3],\n matrix[4], matrix[5], matrix[6], matrix[7],\n matrix[8], matrix[9], matrix[10], matrix[11],\n 0, 0, 0, 1,\n ]\n}\n\n/** wasm 返回的点/向量形态归一(数组 [x,y,z] 或 {x,y,z})。 */\nfunction vec3Of(p: number[] | { x: number; y: number; z: number }): BrepVec3 {\n if (Array.isArray(p)) return { x: p[0], y: p[1], z: p[2] }\n return { x: Number(p.x), y: Number(p.y), z: Number(p.z) }\n}\n\n\n/** 已初始化的 brepkit 内核单例(createBrepkitPrimitives 时赋值)。 */\nlet liveKernel: BrepKitKernel | null = null\n\n/**\n * 原生 brepkit 内核面(D3):平台特定代码访问 brepkit 独有能力的唯一入口\n * (chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean 等)。\n *\n * ⚠️ 这是**平台特定**出口——import 本函数即声明「这段代码只跑在 brepkit 引擎下」。\n * 可移植代码请用 `getBrepApi()`(L1 契约面)。\n *\n * @returns the live brepkit wasm kernel singleton.\n */\nexport function getBrepkitKernel(): BrepKitKernel {\n if (!liveKernel) {\n throw new Error('[brepkit-kernel] kernel not initialized: call createBrepkitPrimitives() first')\n }\n return liveKernel\n}\n\n/** 释放内核单例(测试收尾用;宿主常驻不需调用)。 */\nexport function disposeBrepkit(): void {\n try {\n if (liveKernel?.free) liveKernel.free()\n } catch { /* 已释放 */ }\n liveKernel = null\n}\n\n/** brepkit 适配器原语集类型(BrepEngineApi + brepkit 专属诊断 getMeshFallbackCount)。 */\nexport type BrepkitPrimitives = Awaited<ReturnType<typeof createBrepkitPrimitives>>\n"]}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * brepkit-kernel/multi-version-test — 同进程多版本 brepkit-wasm 装载辅助(仅测试用)
3
+ *
4
+ * 让 faijs 测试在同一 Node 进程内切换三个 brepkit-wasm 版本:
5
+ * - 2.129.15(MIT OR Apache-2.0,用户目标版本线末代)
6
+ * - 3.4.18(仓库当前 devDependency,node_modules 默认路径)
7
+ * - 4.0.32(npm dist-tag latest)
8
+ *
9
+ * 解包产物位于 `_test-kernels/brepkit-<version>/package/`(由 `npm pack` 拉取并解包,
10
+ * 已 gitignore,不进入 dist / 不提交)。3.4.18 直接走 node_modules。
11
+ *
12
+ * 切换序列(与 brep/engine/measurement-parity.test.ts 的 reset+重注册范式一致,
13
+ * 全程只经公开导出 API 操作,不改动内核源码):
14
+ * 1. disposeBrepkit() —— 释放 liveKernel 单例
15
+ * 2. setBrepkitWasmInitFn(customFn) —— 重置 initPromise 并注入新版本装载函数
16
+ * 3. __resetEngineRegistriesForTests() —— 清空引擎注册表(provider/cache/默认)
17
+ * 4. registerBrepkitBrepEngine() —— 用新版本重新注册(内部触发 wasm 装载)
18
+ *
19
+ * customFn 内从对应版本的绝对路径取 BrepKernel 类并 `new` 之——三个版本的 cjs
20
+ * 入口(brepkit_wasm_node.cjs)在加载时同步 readFileSync 自身同目录的 wasm 并
21
+ * 实例化,故按绝对路径 import 即天然隔离,不会与 node_modules 的包名缓存冲突。
22
+ */
23
+ /** 可在同进程切换的 brepkit-wasm 版本。 */
24
+ export type BrepkitTestVersion = '2.129.15' | '3.4.18' | '4.0.32';
25
+ /**
26
+ * 切换到指定 brepkit-wasm 版本并重新注册为 BREP 引擎。
27
+ *
28
+ * 抛出的错误(wasm 装载失败 / BrepKernel 缺失 / 构造抛错)一律原样上抛,
29
+ * 不在此 try-catch 掩盖——测试需要看到真实失败原因。
30
+ * @param version - 目标 brepkit-wasm 版本标识(BrepkitTestVersion 联合类型之一)。
31
+ */
32
+ export declare function loadBrepkitVersion(version: BrepkitTestVersion): Promise<void>;
33
+ /**
34
+ * 测试收尾:dispose + 清掉自定义 initFn(恢复默认 node_modules 装载路径)+ 清注册表。
35
+ * 不重新注册任何引擎——收尾后本进程不再假定默认 BREP 引擎。
36
+ */
37
+ export declare function resetToDefaultBrepkit(): Promise<void>;
38
+ /** 解包版本目录清单(诊断/校验用)。 */
39
+ export declare const UNPACKED_VERSIONS: ("2.129.15" | "4.0.32")[];
40
+ //# sourceMappingURL=multi-version-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-version-test.d.ts","sourceRoot":"","sources":["../../src/brepkit-kernel/multi-version-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,gCAAgC;AAChC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAA;AA+CjE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3D;AAED,wBAAwB;AACxB,eAAO,MAAM,iBAAiB,2BAAmB,CAAA"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * brepkit-kernel/multi-version-test — 同进程多版本 brepkit-wasm 装载辅助(仅测试用)
3
+ *
4
+ * 让 faijs 测试在同一 Node 进程内切换三个 brepkit-wasm 版本:
5
+ * - 2.129.15(MIT OR Apache-2.0,用户目标版本线末代)
6
+ * - 3.4.18(仓库当前 devDependency,node_modules 默认路径)
7
+ * - 4.0.32(npm dist-tag latest)
8
+ *
9
+ * 解包产物位于 `_test-kernels/brepkit-<version>/package/`(由 `npm pack` 拉取并解包,
10
+ * 已 gitignore,不进入 dist / 不提交)。3.4.18 直接走 node_modules。
11
+ *
12
+ * 切换序列(与 brep/engine/measurement-parity.test.ts 的 reset+重注册范式一致,
13
+ * 全程只经公开导出 API 操作,不改动内核源码):
14
+ * 1. disposeBrepkit() —— 释放 liveKernel 单例
15
+ * 2. setBrepkitWasmInitFn(customFn) —— 重置 initPromise 并注入新版本装载函数
16
+ * 3. __resetEngineRegistriesForTests() —— 清空引擎注册表(provider/cache/默认)
17
+ * 4. registerBrepkitBrepEngine() —— 用新版本重新注册(内部触发 wasm 装载)
18
+ *
19
+ * customFn 内从对应版本的绝对路径取 BrepKernel 类并 `new` 之——三个版本的 cjs
20
+ * 入口(brepkit_wasm_node.cjs)在加载时同步 readFileSync 自身同目录的 wasm 并
21
+ * 实例化,故按绝对路径 import 即天然隔离,不会与 node_modules 的包名缓存冲突。
22
+ */
23
+ import { fileURLToPath, pathToFileURL } from 'node:url';
24
+ import { dirname, join } from 'node:path';
25
+ import { setBrepkitWasmInitFn } from './brepkitWasm.js';
26
+ import { disposeBrepkit } from './brepkitKernel.js';
27
+ import { __resetEngineRegistriesForTests } from '../brep/engine/registry.js';
28
+ import { registerBrepkitBrepEngine } from '../brep/engine/adapters/brepkit.js';
29
+ /** 解包版本(2.x/4.x)相对本辅助文件的目录名;3.4.18 走 node_modules。 */
30
+ const UNPACKED_PKG_DIR = ['2.129.15', '4.0.32'];
31
+ /** 本辅助文件所在目录(vite-node / 原生 ESM 在 node 环境下均暴露 file:// 源文件 URL)。 */
32
+ const hereDir = dirname(fileURLToPath(import.meta.url));
33
+ /**
34
+ * 从指定版本装载 BrepKernel 类。
35
+ *
36
+ * - 3.4.18:复用 node_modules 默认包路径(与 brepkitWasm.ts 生产路径一致)。
37
+ * - 2.129.15 / 4.0.32:按绝对路径动态 import 解包后的 node cjs 入口;
38
+ * vite 注释标记让 vite-node 不拦截、交回原生 Node ESM 装载,
39
+ * cjs 入口内部用 __dirname 相对定位 wasm,因此与 cwd 无关。
40
+ */
41
+ async function loadBrepKernelClass(version) {
42
+ if (version === '3.4.18') {
43
+ // node_modules 默认路径(与 brepkitWasm.ts 生产装载同 specifier)。
44
+ const mod = (await import(/* @vite-ignore */ 'brepkit-wasm'));
45
+ if (!mod?.BrepKernel) {
46
+ throw new Error(`[multi-version] 3.4.18: node_modules brepkit-wasm 未导出 BrepKernel`);
47
+ }
48
+ return mod.BrepKernel;
49
+ }
50
+ const cjsPath = join(hereDir, '_test-kernels', `brepkit-${version}`, 'package', 'brepkit_wasm_node.cjs');
51
+ // 原生 Node ESM import CJS:返回 namespace,命名导出经 cjs-module-lexer 暴露。
52
+ const mod = (await import(/* @vite-ignore */ pathToFileURL(cjsPath).href));
53
+ if (!mod?.BrepKernel) {
54
+ throw new Error(`[multi-version] ${version}: ${cjsPath} 未导出 BrepKernel`);
55
+ }
56
+ return mod.BrepKernel;
57
+ }
58
+ /**
59
+ * 切换到指定 brepkit-wasm 版本并重新注册为 BREP 引擎。
60
+ *
61
+ * 抛出的错误(wasm 装载失败 / BrepKernel 缺失 / 构造抛错)一律原样上抛,
62
+ * 不在此 try-catch 掩盖——测试需要看到真实失败原因。
63
+ * @param version - 目标 brepkit-wasm 版本标识(BrepkitTestVersion 联合类型之一)。
64
+ */
65
+ export async function loadBrepkitVersion(version) {
66
+ // 1. 释放旧 liveKernel(wasm 模块级实例仍驻留,但 JS 句柄与 liveKernel 解绑)。
67
+ disposeBrepkit();
68
+ // 2. 注入新版本装载函数(setBrepkitWasmInitFn 内部同时清空 initPromise)。
69
+ setBrepkitWasmInitFn(async () => {
70
+ const Ctor = await loadBrepKernelClass(version);
71
+ return new Ctor();
72
+ });
73
+ // 3. 清空引擎注册表(provider/cache/默认 id/frozen 标志)。
74
+ __resetEngineRegistriesForTests();
75
+ // 4. 重新注册:内部 createBrepkitPrimitives → initBrepkitWasm → 上面注入的 customFn。
76
+ await registerBrepkitBrepEngine();
77
+ }
78
+ /**
79
+ * 测试收尾:dispose + 清掉自定义 initFn(恢复默认 node_modules 装载路径)+ 清注册表。
80
+ * 不重新注册任何引擎——收尾后本进程不再假定默认 BREP 引擎。
81
+ */
82
+ export async function resetToDefaultBrepkit() {
83
+ disposeBrepkit();
84
+ setBrepkitWasmInitFn(null);
85
+ __resetEngineRegistriesForTests();
86
+ }
87
+ /** 解包版本目录清单(诊断/校验用)。 */
88
+ export const UNPACKED_VERSIONS = UNPACKED_PKG_DIR;
89
+ //# sourceMappingURL=multi-version-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-version-test.js","sourceRoot":"","sources":["../../src/brepkit-kernel/multi-version-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAsB,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAK3E,sDAAsD;AACtD,MAAM,gBAAgB,GAA4C,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAA;AAEjG,mEAAmE;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAIvD;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAAC,OAA2B;IAC5D,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,uDAAuD;QACvD,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAE3D,CAAA;QACD,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACrF,CAAC;QACD,OAAO,GAAG,CAAC,UAAU,CAAA;IACvB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAClB,OAAO,EACP,eAAe,EACf,WAAW,OAAO,EAAE,EACpB,SAAS,EACT,uBAAuB,CACxB,CAAA;IACD,iEAAiE;IACjE,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAExE,CAAA;IACD,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,KAAK,OAAO,iBAAiB,CAAC,CAAA;IAC1E,CAAC;IACD,OAAO,GAAG,CAAC,UAAU,CAAA;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA2B;IAClE,2DAA2D;IAC3D,cAAc,EAAE,CAAA;IAChB,yDAAyD;IACzD,oBAAoB,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAA;QAC/C,OAAO,IAAI,IAAI,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IACF,8CAA8C;IAC9C,+BAA+B,EAAE,CAAA;IACjC,yEAAyE;IACzE,MAAM,yBAAyB,EAAE,CAAA;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,cAAc,EAAE,CAAA;IAChB,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAC1B,+BAA+B,EAAE,CAAA;AACnC,CAAC;AAED,wBAAwB;AACxB,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAA","sourcesContent":["/**\n * brepkit-kernel/multi-version-test — 同进程多版本 brepkit-wasm 装载辅助(仅测试用)\n *\n * 让 faijs 测试在同一 Node 进程内切换三个 brepkit-wasm 版本:\n * - 2.129.15(MIT OR Apache-2.0,用户目标版本线末代)\n * - 3.4.18(仓库当前 devDependency,node_modules 默认路径)\n * - 4.0.32(npm dist-tag latest)\n *\n * 解包产物位于 `_test-kernels/brepkit-<version>/package/`(由 `npm pack` 拉取并解包,\n * 已 gitignore,不进入 dist / 不提交)。3.4.18 直接走 node_modules。\n *\n * 切换序列(与 brep/engine/measurement-parity.test.ts 的 reset+重注册范式一致,\n * 全程只经公开导出 API 操作,不改动内核源码):\n * 1. disposeBrepkit() —— 释放 liveKernel 单例\n * 2. setBrepkitWasmInitFn(customFn) —— 重置 initPromise 并注入新版本装载函数\n * 3. __resetEngineRegistriesForTests() —— 清空引擎注册表(provider/cache/默认)\n * 4. registerBrepkitBrepEngine() —— 用新版本重新注册(内部触发 wasm 装载)\n *\n * customFn 内从对应版本的绝对路径取 BrepKernel 类并 `new` 之——三个版本的 cjs\n * 入口(brepkit_wasm_node.cjs)在加载时同步 readFileSync 自身同目录的 wasm 并\n * 实例化,故按绝对路径 import 即天然隔离,不会与 node_modules 的包名缓存冲突。\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { dirname, join } from 'node:path'\nimport { setBrepkitWasmInitFn, type BrepKitKernel } from './brepkitWasm'\nimport { disposeBrepkit } from './brepkitKernel'\nimport { __resetEngineRegistriesForTests } from '../brep/engine/registry'\nimport { registerBrepkitBrepEngine } from '../brep/engine/adapters/brepkit'\n\n/** 可在同进程切换的 brepkit-wasm 版本。 */\nexport type BrepkitTestVersion = '2.129.15' | '3.4.18' | '4.0.32'\n\n/** 解包版本(2.x/4.x)相对本辅助文件的目录名;3.4.18 走 node_modules。 */\nconst UNPACKED_PKG_DIR: Exclude<BrepkitTestVersion, '3.4.18'>[] = ['2.129.15', '4.0.32'] as const\n\n/** 本辅助文件所在目录(vite-node / 原生 ESM 在 node 环境下均暴露 file:// 源文件 URL)。 */\nconst hereDir = dirname(fileURLToPath(import.meta.url))\n\ntype BrepKernelCtor = new () => BrepKitKernel\n\n/**\n * 从指定版本装载 BrepKernel 类。\n *\n * - 3.4.18:复用 node_modules 默认包路径(与 brepkitWasm.ts 生产路径一致)。\n * - 2.129.15 / 4.0.32:按绝对路径动态 import 解包后的 node cjs 入口;\n * vite 注释标记让 vite-node 不拦截、交回原生 Node ESM 装载,\n * cjs 入口内部用 __dirname 相对定位 wasm,因此与 cwd 无关。\n */\nasync function loadBrepKernelClass(version: BrepkitTestVersion): Promise<BrepKernelCtor> {\n if (version === '3.4.18') {\n // node_modules 默认路径(与 brepkitWasm.ts 生产装载同 specifier)。\n const mod = (await import(/* @vite-ignore */ 'brepkit-wasm')) as {\n BrepKernel?: BrepKernelCtor\n }\n if (!mod?.BrepKernel) {\n throw new Error(`[multi-version] 3.4.18: node_modules brepkit-wasm 未导出 BrepKernel`)\n }\n return mod.BrepKernel\n }\n\n const cjsPath = join(\n hereDir,\n '_test-kernels',\n `brepkit-${version}`,\n 'package',\n 'brepkit_wasm_node.cjs',\n )\n // 原生 Node ESM import CJS:返回 namespace,命名导出经 cjs-module-lexer 暴露。\n const mod = (await import(/* @vite-ignore */ pathToFileURL(cjsPath).href)) as {\n BrepKernel?: BrepKernelCtor\n }\n if (!mod?.BrepKernel) {\n throw new Error(`[multi-version] ${version}: ${cjsPath} 未导出 BrepKernel`)\n }\n return mod.BrepKernel\n}\n\n/**\n * 切换到指定 brepkit-wasm 版本并重新注册为 BREP 引擎。\n *\n * 抛出的错误(wasm 装载失败 / BrepKernel 缺失 / 构造抛错)一律原样上抛,\n * 不在此 try-catch 掩盖——测试需要看到真实失败原因。\n * @param version - 目标 brepkit-wasm 版本标识(BrepkitTestVersion 联合类型之一)。\n */\nexport async function loadBrepkitVersion(version: BrepkitTestVersion): Promise<void> {\n // 1. 释放旧 liveKernel(wasm 模块级实例仍驻留,但 JS 句柄与 liveKernel 解绑)。\n disposeBrepkit()\n // 2. 注入新版本装载函数(setBrepkitWasmInitFn 内部同时清空 initPromise)。\n setBrepkitWasmInitFn(async () => {\n const Ctor = await loadBrepKernelClass(version)\n return new Ctor()\n })\n // 3. 清空引擎注册表(provider/cache/默认 id/frozen 标志)。\n __resetEngineRegistriesForTests()\n // 4. 重新注册:内部 createBrepkitPrimitives → initBrepkitWasm → 上面注入的 customFn。\n await registerBrepkitBrepEngine()\n}\n\n/**\n * 测试收尾:dispose + 清掉自定义 initFn(恢复默认 node_modules 装载路径)+ 清注册表。\n * 不重新注册任何引擎——收尾后本进程不再假定默认 BREP 引擎。\n */\nexport async function resetToDefaultBrepkit(): Promise<void> {\n disposeBrepkit()\n setBrepkitWasmInitFn(null)\n __resetEngineRegistriesForTests()\n}\n\n/** 解包版本目录清单(诊断/校验用)。 */\nexport const UNPACKED_VERSIONS = UNPACKED_PKG_DIR\n"]}