@metamesh/modeling 0.18.0 → 0.19.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 (843) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +73 -57
  3. package/dist/api/engine.d.ts +7 -47
  4. package/dist/api/export-3mf.d.ts +2 -0
  5. package/dist/api/export-glb.d.ts +2 -0
  6. package/dist/api/export-stl.d.ts +2 -0
  7. package/dist/api/export.d.ts +160 -0
  8. package/dist/api/geometry.d.ts +7 -7
  9. package/dist/api/index.d.ts +85 -35
  10. package/dist/api/mesh.d.ts +35 -6
  11. package/dist/docs/guides/concepts.md +32 -535
  12. package/dist/docs/guides/fonts.md +4 -4
  13. package/dist/docs/guides/generation.md +52 -45
  14. package/dist/docs/guides/geometry-values.md +193 -0
  15. package/dist/docs/guides/hosting.md +53 -30
  16. package/dist/docs/guides/profiles-and-extrusion.md +252 -0
  17. package/dist/docs/guides/recipes.md +33 -780
  18. package/dist/docs/guides/resolution-and-inspection.md +133 -0
  19. package/dist/docs/guides/solid-joins.md +126 -0
  20. package/dist/docs/guides/standalone-model.md +1 -1
  21. package/dist/docs/guides/svg-and-text.md +215 -0
  22. package/dist/docs/guides/sweeps-and-lofts.md +179 -0
  23. package/dist/docs/guides/transforms-and-placement.md +313 -0
  24. package/dist/docs/manifest.json +2818 -5862
  25. package/dist/docs/reference/engine/GenerationOptions.md +10 -4
  26. package/dist/docs/reference/engine/GeometryResource.md +8 -2
  27. package/dist/docs/reference/engine/ModelDependencies.md +9 -3
  28. package/dist/docs/reference/engine/ModelEngine.md +9 -3
  29. package/dist/docs/reference/engine/ModelEngineOptions.md +9 -3
  30. package/dist/docs/reference/engine/ModelPart.md +9 -3
  31. package/dist/docs/reference/engine/ModelResult.md +8 -2
  32. package/dist/docs/reference/engine/ModelRunArguments.md +7 -1
  33. package/dist/docs/reference/engine/ModelRunOptions.md +10 -4
  34. package/dist/docs/reference/engine/ModelSession.md +7 -1
  35. package/dist/docs/reference/engine/SessionOptions.md +10 -4
  36. package/dist/docs/reference/engine/categories/host-lifecycle.md +3 -8
  37. package/dist/docs/reference/engine/checkModel.md +7 -1
  38. package/dist/docs/reference/engine/createModelEngine.md +10 -3
  39. package/dist/docs/reference/engine/defaultModelingLimits.md +9 -3
  40. package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
  41. package/dist/docs/reference/engine.md +7 -7
  42. package/dist/docs/reference/export/Export3mfOptions.md +24 -0
  43. package/dist/docs/reference/export/ExportDiagnostic.md +59 -0
  44. package/dist/docs/reference/export/ExportFormat.md +25 -0
  45. package/dist/docs/reference/export/ExportGeometry.md +39 -0
  46. package/dist/docs/reference/export/ExportGlbOptions.md +118 -0
  47. package/dist/docs/reference/export/ExportLimits.md +83 -0
  48. package/dist/docs/reference/export/ExportMaterial.md +47 -0
  49. package/dist/docs/reference/export/ExportOptions.md +94 -0
  50. package/dist/docs/reference/export/ExportPart.md +88 -0
  51. package/dist/docs/reference/export/ExportReport.md +82 -0
  52. package/dist/docs/reference/export/ExportSink.md +39 -0
  53. package/dist/docs/reference/export/ExportStlOptions.md +24 -0
  54. package/dist/docs/reference/export/ExportedFile.md +110 -0
  55. package/dist/docs/reference/export/categories/mesh-serialization.md +47 -0
  56. package/dist/docs/reference/export/defaultExportLimits.md +20 -0
  57. package/dist/docs/reference/export/export3mf.md +64 -0
  58. package/dist/docs/reference/export/exportGlb.md +68 -0
  59. package/dist/docs/reference/export/exportStl.md +64 -0
  60. package/dist/docs/reference/export/write3mf.md +71 -0
  61. package/dist/docs/reference/export/writeGlb.md +75 -0
  62. package/dist/docs/reference/export/writeStl.md +71 -0
  63. package/dist/docs/reference/export.md +21 -0
  64. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +16 -2
  65. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +7 -1
  66. package/dist/docs/reference/geometry/Anchor3-type.md +13 -3
  67. package/dist/docs/reference/geometry/ArcCurve2.md +8 -2
  68. package/dist/docs/reference/geometry/ArcCurve3.md +8 -2
  69. package/dist/docs/reference/geometry/AttachOptions.md +13 -3
  70. package/dist/docs/reference/geometry/AxisAngleRotation3.md +9 -3
  71. package/dist/docs/reference/geometry/Bevel.md +16 -2
  72. package/dist/docs/reference/geometry/BevelSize.md +16 -2
  73. package/dist/docs/reference/geometry/Bounds2-type.md +18 -4
  74. package/dist/docs/reference/geometry/Bounds2Data.md +22 -4
  75. package/dist/docs/reference/geometry/Bounds2Input.md +18 -4
  76. package/dist/docs/reference/geometry/Bounds2Options.md +14 -4
  77. package/dist/docs/reference/geometry/Bounds3-type.md +18 -4
  78. package/dist/docs/reference/geometry/Bounds3Data.md +18 -4
  79. package/dist/docs/reference/geometry/Bounds3Input.md +18 -4
  80. package/dist/docs/reference/geometry/Bounds3Options.md +14 -4
  81. package/dist/docs/reference/geometry/BoundsFit2.md +10 -4
  82. package/dist/docs/reference/geometry/BoundsFit3.md +10 -4
  83. package/dist/docs/reference/geometry/BoundsFitOptions.md +10 -4
  84. package/dist/docs/reference/geometry/BoxAnchorFace.md +9 -3
  85. package/dist/docs/reference/geometry/BoxAnchorOptions.md +9 -3
  86. package/dist/docs/reference/geometry/BoxEdge.md +11 -1
  87. package/dist/docs/reference/geometry/BoxEdgeSelection.md +11 -1
  88. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +11 -1
  89. package/dist/docs/reference/geometry/BoxOptions.md +11 -1
  90. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +16 -2
  91. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +16 -2
  92. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +11 -1
  93. package/dist/docs/reference/geometry/CircleContourOptions.md +12 -2
  94. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +15 -1
  95. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -1
  96. package/dist/docs/reference/geometry/CircularSampling.md +7 -1
  97. package/dist/docs/reference/geometry/CircularSamplingOptions.md +7 -1
  98. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +8 -2
  99. package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -2
  100. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +8 -2
  101. package/dist/docs/reference/geometry/Contour.md +12 -2
  102. package/dist/docs/reference/geometry/ContourCurve.md +8 -2
  103. package/dist/docs/reference/geometry/ContourPoint.md +8 -2
  104. package/dist/docs/reference/geometry/ContourSegment.md +8 -2
  105. package/dist/docs/reference/geometry/CorrespondingComponent.md +12 -2
  106. package/dist/docs/reference/geometry/CorrespondingContour.md +12 -2
  107. package/dist/docs/reference/geometry/CorrespondingProfile.md +12 -2
  108. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +12 -2
  109. package/dist/docs/reference/geometry/CubicBezierCurve2.md +8 -2
  110. package/dist/docs/reference/geometry/CubicBezierCurve3.md +8 -2
  111. package/dist/docs/reference/geometry/Curve2.md +8 -2
  112. package/dist/docs/reference/geometry/Curve3.md +8 -2
  113. package/dist/docs/reference/geometry/CurveSamplingOptions.md +16 -2
  114. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +16 -2
  115. package/dist/docs/reference/geometry/CylinderAnchorFace.md +9 -3
  116. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +9 -3
  117. package/dist/docs/reference/geometry/CylinderOptions.md +11 -1
  118. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +8 -2
  119. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -2
  120. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +8 -2
  121. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +8 -2
  122. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +8 -2
  123. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +8 -2
  124. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +8 -2
  125. package/dist/docs/reference/geometry/CylindricalGearSpec.md +8 -2
  126. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -1
  127. package/dist/docs/reference/geometry/EdgeTreatment.md +11 -1
  128. package/dist/docs/reference/geometry/EllipseContourOptions.md +12 -2
  129. package/dist/docs/reference/geometry/EndTreatments.md +12 -2
  130. package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +16 -2
  131. package/dist/docs/reference/geometry/ExtrudeOptions.md +13 -3
  132. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +16 -2
  133. package/dist/docs/reference/geometry/FittedTextLayout.md +8 -2
  134. package/dist/docs/reference/geometry/Frame3.md +16 -2
  135. package/dist/docs/reference/geometry/GeometryError.md +11 -1
  136. package/dist/docs/reference/geometry/GeometryErrorCode.md +11 -1
  137. package/dist/docs/reference/geometry/GeometryErrorContext.md +11 -1
  138. package/dist/docs/reference/geometry/GeometryResolution.md +15 -1
  139. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +16 -2
  140. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +15 -1
  141. package/dist/docs/reference/geometry/GridPatternOptions.md +12 -2
  142. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +12 -2
  143. package/dist/docs/reference/geometry/HeightfieldOptions.md +16 -2
  144. package/dist/docs/reference/geometry/HeightfieldPreflight.md +12 -2
  145. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +9 -3
  146. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +16 -14
  147. package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +17 -3
  148. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +12 -2
  149. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +12 -2
  150. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +8 -2
  151. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +8 -2
  152. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +12 -2
  153. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +12 -2
  154. package/dist/docs/reference/geometry/LineCurve2.md +8 -2
  155. package/dist/docs/reference/geometry/LineCurve3.md +8 -2
  156. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -2
  157. package/dist/docs/reference/geometry/LoftCorrespondence.md +16 -2
  158. package/dist/docs/reference/geometry/LoftMeshStation.md +12 -2
  159. package/dist/docs/reference/geometry/LoftOptions.md +16 -2
  160. package/dist/docs/reference/geometry/LoftPlacement.md +16 -2
  161. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +8 -2
  162. package/dist/docs/reference/geometry/MatchProfilesOptions.md +12 -2
  163. package/dist/docs/reference/geometry/MetricFastenerSize.md +8 -2
  164. package/dist/docs/reference/geometry/MetricFastenerStandard.md +8 -2
  165. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +8 -2
  166. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +8 -2
  167. package/dist/docs/reference/geometry/ModelingLimits.md +19 -1
  168. package/dist/docs/reference/geometry/NumericArray.md +16 -2
  169. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +8 -2
  170. package/dist/docs/reference/geometry/Path2-type.md +16 -2
  171. package/dist/docs/reference/geometry/Path2Data.md +16 -2
  172. package/dist/docs/reference/geometry/Path2Input.md +16 -2
  173. package/dist/docs/reference/geometry/Path3-type.md +16 -2
  174. package/dist/docs/reference/geometry/Path3Data.md +16 -2
  175. package/dist/docs/reference/geometry/Path3Input.md +16 -2
  176. package/dist/docs/reference/geometry/PathFrame.md +8 -2
  177. package/dist/docs/reference/geometry/PathLocation.md +16 -2
  178. package/dist/docs/reference/geometry/PathNormalGuide.md +16 -2
  179. package/dist/docs/reference/geometry/PathOptions.md +12 -2
  180. package/dist/docs/reference/geometry/PathPatternOptions.md +12 -2
  181. package/dist/docs/reference/geometry/PathPlacement.md +8 -2
  182. package/dist/docs/reference/geometry/PathResamplingOptions.md +16 -2
  183. package/dist/docs/reference/geometry/Pivot2Options.md +17 -3
  184. package/dist/docs/reference/geometry/Pivot3Options.md +17 -3
  185. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +12 -2
  186. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +12 -2
  187. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +12 -2
  188. package/dist/docs/reference/geometry/PlanarPatchQuality.md +12 -2
  189. package/dist/docs/reference/geometry/PolygonData.md +12 -2
  190. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -2
  191. package/dist/docs/reference/geometry/PrimitiveAttachment.md +11 -1
  192. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +11 -1
  193. package/dist/docs/reference/geometry/PrintableThreadFit.md +12 -2
  194. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +12 -2
  195. package/dist/docs/reference/geometry/Profile.md +8 -2
  196. package/dist/docs/reference/geometry/ProfileComponent2.md +12 -2
  197. package/dist/docs/reference/geometry/ProfileContour2.md +12 -2
  198. package/dist/docs/reference/geometry/ProfileSpan2.md +12 -2
  199. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +11 -1
  200. package/dist/docs/reference/geometry/RackPitchDimensions.md +8 -2
  201. package/dist/docs/reference/geometry/RackPitchSpec.md +8 -2
  202. package/dist/docs/reference/geometry/RadialPatternOptions.md +12 -2
  203. package/dist/docs/reference/geometry/RadialSizing.md +11 -1
  204. package/dist/docs/reference/geometry/RadialSizingOptions.md +11 -1
  205. package/dist/docs/reference/geometry/RectangleContourOptions.md +12 -2
  206. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +12 -2
  207. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +12 -2
  208. package/dist/docs/reference/geometry/RectangleProfileOptions.md +8 -2
  209. package/dist/docs/reference/geometry/RegionData.md +12 -2
  210. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +8 -2
  211. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +7 -1
  212. package/dist/docs/reference/geometry/RevolveOptions.md +16 -2
  213. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +11 -1
  214. package/dist/docs/reference/geometry/RowLayoutOptions.md +10 -4
  215. package/dist/docs/reference/geometry/SampleContourOptions.md +8 -2
  216. package/dist/docs/reference/geometry/SampleHelixOptions.md +8 -2
  217. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +8 -2
  218. package/dist/docs/reference/geometry/SampledCurve2.md +8 -2
  219. package/dist/docs/reference/geometry/SampledCurve3.md +8 -2
  220. package/dist/docs/reference/geometry/SampledThreadHelices.md +8 -2
  221. package/dist/docs/reference/geometry/SideProfileCurve.md +8 -2
  222. package/dist/docs/reference/geometry/SideProfilePoint.md +8 -2
  223. package/dist/docs/reference/geometry/SideProfileSegment.md +8 -2
  224. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +11 -1
  225. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +12 -2
  226. package/dist/docs/reference/geometry/SphereOptions.md +11 -1
  227. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +16 -2
  228. package/dist/docs/reference/geometry/StarContourOptions.md +12 -2
  229. package/dist/docs/reference/geometry/StrokeCap.md +12 -2
  230. package/dist/docs/reference/geometry/StrokeJoin.md +12 -2
  231. package/dist/docs/reference/geometry/StrokeOptions.md +12 -2
  232. package/dist/docs/reference/geometry/SvgImportOptions.md +8 -2
  233. package/dist/docs/reference/geometry/SvgRegionPreflight.md +8 -2
  234. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +8 -2
  235. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +8 -2
  236. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +8 -2
  237. package/dist/docs/reference/geometry/SweepOptions.md +16 -2
  238. package/dist/docs/reference/geometry/SweepOrientation.md +16 -2
  239. package/dist/docs/reference/geometry/ThreadBevelOptions.md +12 -2
  240. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +8 -2
  241. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +8 -2
  242. package/dist/docs/reference/geometry/ThreadEndStyle.md +16 -2
  243. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +16 -2
  244. package/dist/docs/reference/geometry/ThreadHandedness.md +16 -2
  245. package/dist/docs/reference/geometry/ThreadHelixOptions.md +8 -2
  246. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +16 -2
  247. package/dist/docs/reference/geometry/ThreadLeadInShape.md +16 -2
  248. package/dist/docs/reference/geometry/ThreadProfile-type.md +16 -2
  249. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +16 -2
  250. package/dist/docs/reference/geometry/ThreadProfileSpec.md +16 -2
  251. package/dist/docs/reference/geometry/ThreadRidgeOptions.md +16 -2
  252. package/dist/docs/reference/geometry/ThreadRole.md +8 -2
  253. package/dist/docs/reference/geometry/ThreadSolidOptions.md +12 -2
  254. package/dist/docs/reference/geometry/ThreadSolidPreflight.md +16 -2
  255. package/dist/docs/reference/geometry/ThreadedNutOptions.md +12 -2
  256. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +12 -2
  257. package/dist/docs/reference/geometry/ThreadedNutShape.md +12 -2
  258. package/dist/docs/reference/geometry/ThreadedRodOptions.md +12 -2
  259. package/dist/docs/reference/geometry/TorusOptions.md +11 -1
  260. package/dist/docs/reference/geometry/Transform2-type.md +17 -3
  261. package/dist/docs/reference/geometry/Transform2Data.md +17 -3
  262. package/dist/docs/reference/geometry/Transform2Input.md +17 -3
  263. package/dist/docs/reference/geometry/Transform3-type.md +17 -3
  264. package/dist/docs/reference/geometry/Transform3Data.md +17 -3
  265. package/dist/docs/reference/geometry/Transform3Input.md +17 -3
  266. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +16 -2
  267. package/dist/docs/reference/geometry/TriangleMesh.md +20 -2
  268. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +16 -2
  269. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +12 -2
  270. package/dist/docs/reference/geometry/TriangleMeshInput.md +12 -2
  271. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +16 -2
  272. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +12 -2
  273. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +12 -2
  274. package/dist/docs/reference/geometry/TriangleMeshSignature.md +12 -2
  275. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +12 -2
  276. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +12 -2
  277. package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +16 -2
  278. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +12 -2
  279. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +16 -2
  280. package/dist/docs/reference/geometry/TubeOptions.md +11 -1
  281. package/dist/docs/reference/geometry/Vector2-type.md +17 -3
  282. package/dist/docs/reference/geometry/Vector2Data.md +21 -3
  283. package/dist/docs/reference/geometry/Vector2Input.md +17 -3
  284. package/dist/docs/reference/geometry/Vector3-type.md +17 -3
  285. package/dist/docs/reference/geometry/Vector3Data.md +17 -3
  286. package/dist/docs/reference/geometry/Vector3Input.md +17 -3
  287. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +12 -2
  288. package/dist/docs/reference/geometry/VectorTextLayout.md +16 -2
  289. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +12 -2
  290. package/dist/docs/reference/geometry/VectorTextMetrics.md +16 -2
  291. package/dist/docs/reference/geometry/VectorTextOptions.md +12 -2
  292. package/dist/docs/reference/geometry/add2.md +9 -3
  293. package/dist/docs/reference/geometry/add3.md +9 -3
  294. package/dist/docs/reference/geometry/anchor3.md +9 -3
  295. package/dist/docs/reference/geometry/anchorFrame3.md +8 -2
  296. package/dist/docs/reference/geometry/applyTransformDirection3.md +9 -3
  297. package/dist/docs/reference/geometry/applyTransformPoint3.md +9 -3
  298. package/dist/docs/reference/geometry/attachmentTransform3.md +9 -3
  299. package/dist/docs/reference/geometry/bounds2.md +16 -6
  300. package/dist/docs/reference/geometry/bounds3.md +16 -6
  301. package/dist/docs/reference/geometry/boundsCenter.md +10 -4
  302. package/dist/docs/reference/geometry/boundsSize.md +10 -4
  303. package/dist/docs/reference/geometry/boxAnchor3.md +9 -3
  304. package/dist/docs/reference/geometry/categories/bounds-layout.md +4 -4
  305. package/dist/docs/reference/geometry/categories/curves-paths.md +2 -2
  306. package/dist/docs/reference/geometry/categories/mechanical.md +2 -2
  307. package/dist/docs/reference/geometry/categories/meshes.md +3 -3
  308. package/dist/docs/reference/geometry/categories/pattern-placement.md +2 -2
  309. package/dist/docs/reference/geometry/categories/primitive-options.md +2 -2
  310. package/dist/docs/reference/geometry/categories/profiles-regions.md +2 -2
  311. package/dist/docs/reference/geometry/categories/resolution-errors.md +1 -1
  312. package/dist/docs/reference/geometry/categories/transforms-math.md +3 -3
  313. package/dist/docs/reference/geometry/categories/vector-import.md +2 -2
  314. package/dist/docs/reference/geometry/circleContour.md +8 -2
  315. package/dist/docs/reference/geometry/closeToAxis.md +8 -2
  316. package/dist/docs/reference/geometry/compensateThreadDiameters.md +8 -2
  317. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +8 -2
  318. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +8 -2
  319. package/dist/docs/reference/geometry/composeTransform3.md +9 -3
  320. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +8 -2
  321. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -2
  322. package/dist/docs/reference/geometry/contourContainsPoint.md +8 -2
  323. package/dist/docs/reference/geometry/cross2.md +9 -3
  324. package/dist/docs/reference/geometry/cross3.md +9 -3
  325. package/dist/docs/reference/geometry/cylinderAnchor3.md +9 -3
  326. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +8 -2
  327. package/dist/docs/reference/geometry/distance2.md +9 -3
  328. package/dist/docs/reference/geometry/distance3.md +9 -3
  329. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -2
  330. package/dist/docs/reference/geometry/dot2.md +9 -3
  331. package/dist/docs/reference/geometry/dot3.md +9 -3
  332. package/dist/docs/reference/geometry/ellipseContour.md +8 -2
  333. package/dist/docs/reference/geometry/eulerTransform3.md +9 -3
  334. package/dist/docs/reference/geometry/fitBounds.md +10 -4
  335. package/dist/docs/reference/geometry/fitTextLayout.md +8 -2
  336. package/dist/docs/reference/geometry/frameTransform3.md +9 -3
  337. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +8 -2
  338. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +8 -2
  339. package/dist/docs/reference/geometry/gridPatternTransforms.md +8 -2
  340. package/dist/docs/reference/geometry/immutableBuffer.md +12 -2
  341. package/dist/docs/reference/geometry/inverseTransform3.md +9 -3
  342. package/dist/docs/reference/geometry/isGeometryError.md +11 -1
  343. package/dist/docs/reference/geometry/layoutRow.md +10 -4
  344. package/dist/docs/reference/geometry/length2.md +9 -3
  345. package/dist/docs/reference/geometry/length3.md +9 -3
  346. package/dist/docs/reference/geometry/lerp2.md +9 -3
  347. package/dist/docs/reference/geometry/lerp3.md +9 -3
  348. package/dist/docs/reference/geometry/linearPatternTransforms.md +8 -2
  349. package/dist/docs/reference/geometry/matchProfiles.md +8 -2
  350. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +8 -2
  351. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +8 -2
  352. package/dist/docs/reference/geometry/normalize2.md +9 -3
  353. package/dist/docs/reference/geometry/normalize3.md +9 -3
  354. package/dist/docs/reference/geometry/normalizeContour.md +8 -2
  355. package/dist/docs/reference/geometry/normalizePolygon.md +8 -2
  356. package/dist/docs/reference/geometry/normalizeRegion.md +8 -2
  357. package/dist/docs/reference/geometry/path2.md +12 -2
  358. package/dist/docs/reference/geometry/path3.md +12 -2
  359. package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -2
  360. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +8 -2
  361. package/dist/docs/reference/geometry/preflightSvgRegion.md +8 -2
  362. package/dist/docs/reference/geometry/preflightThreadedNut.md +8 -2
  363. package/dist/docs/reference/geometry/preflightThreadedRod.md +8 -2
  364. package/dist/docs/reference/geometry/projectOntoPlane3.md +9 -3
  365. package/dist/docs/reference/geometry/radialPatternTransforms.md +8 -2
  366. package/dist/docs/reference/geometry/rectangleContour.md +8 -2
  367. package/dist/docs/reference/geometry/rectangleProfile.md +8 -2
  368. package/dist/docs/reference/geometry/regionArea.md +8 -2
  369. package/dist/docs/reference/geometry/regionBounds.md +8 -2
  370. package/dist/docs/reference/geometry/regularPolygonContour.md +8 -2
  371. package/dist/docs/reference/geometry/resamplePolyline2.md +8 -2
  372. package/dist/docs/reference/geometry/resamplePolyline3.md +8 -2
  373. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +7 -1
  374. package/dist/docs/reference/geometry/resolveArcSegments.md +7 -1
  375. package/dist/docs/reference/geometry/resolveCircularSampling.md +7 -1
  376. package/dist/docs/reference/geometry/resolveCircularSegments.md +7 -1
  377. package/dist/docs/reference/geometry/resolveCylindricalGear.md +8 -2
  378. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +8 -2
  379. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +8 -2
  380. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +8 -2
  381. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +7 -1
  382. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +8 -2
  383. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +8 -2
  384. package/dist/docs/reference/geometry/resolveRackPitch.md +8 -2
  385. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +8 -2
  386. package/dist/docs/reference/geometry/rotate2.md +9 -3
  387. package/dist/docs/reference/geometry/rotationTransform3.md +9 -3
  388. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -2
  389. package/dist/docs/reference/geometry/sampleContour.md +8 -2
  390. package/dist/docs/reference/geometry/sampleCurve2.md +8 -2
  391. package/dist/docs/reference/geometry/sampleCurve3.md +8 -2
  392. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +8 -2
  393. package/dist/docs/reference/geometry/sampleHelix.md +8 -2
  394. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +8 -2
  395. package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -2
  396. package/dist/docs/reference/geometry/sampleSideProfile.md +8 -2
  397. package/dist/docs/reference/geometry/sampleTextContours.md +8 -2
  398. package/dist/docs/reference/geometry/sampleThreadHelices.md +8 -2
  399. package/dist/docs/reference/geometry/scale2.md +9 -3
  400. package/dist/docs/reference/geometry/scale3.md +9 -3
  401. package/dist/docs/reference/geometry/scaleTransform3.md +9 -3
  402. package/dist/docs/reference/geometry/signedContourArea.md +8 -2
  403. package/dist/docs/reference/geometry/starContour.md +8 -2
  404. package/dist/docs/reference/geometry/strokeRegionData.md +8 -2
  405. package/dist/docs/reference/geometry/subtract2.md +9 -3
  406. package/dist/docs/reference/geometry/subtract3.md +9 -3
  407. package/dist/docs/reference/geometry/threadProfile.md +8 -2
  408. package/dist/docs/reference/geometry/transform2.md +13 -3
  409. package/dist/docs/reference/geometry/transform3.md +13 -3
  410. package/dist/docs/reference/geometry/transformDeterminant3.md +9 -3
  411. package/dist/docs/reference/geometry/transformRegionData.md +8 -2
  412. package/dist/docs/reference/geometry/translationTransform3.md +9 -3
  413. package/dist/docs/reference/geometry/triangulateContour.md +8 -2
  414. package/dist/docs/reference/geometry/validateRigidTransform3.md +9 -3
  415. package/dist/docs/reference/geometry/validateTransform3.md +9 -3
  416. package/dist/docs/reference/geometry/vector2.md +13 -3
  417. package/dist/docs/reference/geometry/vector3.md +13 -3
  418. package/dist/docs/reference/geometry.md +2 -2
  419. package/dist/docs/reference/mesh/MeshRenderOptions.md +28 -0
  420. package/dist/docs/reference/mesh/RenderMesh.md +68 -0
  421. package/dist/docs/reference/mesh/analyze.md +12 -6
  422. package/dist/docs/reference/mesh/analyzeQuality.md +11 -5
  423. package/dist/docs/reference/mesh/bounds.md +10 -4
  424. package/dist/docs/reference/mesh/categories/operations.md +5 -95
  425. package/dist/docs/reference/mesh/centroid.md +10 -4
  426. package/dist/docs/reference/mesh/extrude.md +11 -5
  427. package/dist/docs/reference/mesh/heightfield.md +11 -5
  428. package/dist/docs/reference/mesh/immutable.md +13 -9
  429. package/dist/docs/reference/mesh/join.md +10 -4
  430. package/dist/docs/reference/mesh/loft.md +11 -5
  431. package/dist/docs/reference/mesh/optimizePlanarPatches.md +11 -5
  432. package/dist/docs/reference/mesh/preflightHeightfield.md +11 -5
  433. package/dist/docs/reference/mesh/preflightThreadSolid.md +10 -4
  434. package/dist/docs/reference/mesh/render.md +57 -0
  435. package/dist/docs/reference/mesh/reverse.md +10 -4
  436. package/dist/docs/reference/mesh/revolve.md +11 -5
  437. package/dist/docs/reference/mesh/signature.md +11 -5
  438. package/dist/docs/reference/mesh/sweep.md +12 -6
  439. package/dist/docs/reference/mesh/threadRidge.md +10 -4
  440. package/dist/docs/reference/mesh/threadSolid.md +10 -4
  441. package/dist/docs/reference/mesh/transform.md +11 -5
  442. package/dist/docs/reference/mesh/validate.md +10 -4
  443. package/dist/docs/reference/mesh/validateSolid.md +10 -4
  444. package/dist/docs/reference/mesh.md +1 -1
  445. package/dist/docs/reference/model/CircleOptions.md +13 -7
  446. package/dist/docs/reference/model/DiagnosticOptions.md +7 -1
  447. package/dist/docs/reference/model/EllipseOptions.md +13 -7
  448. package/dist/docs/reference/model/GenerateCallback.md +7 -1
  449. package/dist/docs/reference/model/GenerateContext.md +14 -39
  450. package/dist/docs/reference/model/GenerationDiagnostic.md +7 -1
  451. package/dist/docs/reference/model/GenerationError.md +8 -2
  452. package/dist/docs/reference/model/HoleCutterOptions.md +17 -10
  453. package/dist/docs/reference/model/HoleCutterOverrun.md +10 -3
  454. package/dist/docs/reference/model/HoleCutterRecess.md +10 -3
  455. package/dist/docs/reference/model/HullOptions.md +13 -6
  456. package/dist/docs/reference/model/ImmutableValue.md +7 -1
  457. package/dist/docs/reference/model/ImplicitOptions.md +12 -6
  458. package/dist/docs/reference/model/JoinOptions.md +76 -0
  459. package/dist/docs/reference/model/JoinTransition.md +54 -0
  460. package/dist/docs/reference/model/KnuckleHinge-type.md +9 -3
  461. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +7 -1
  462. package/dist/docs/reference/model/KnuckleHingeOptions.md +10 -4
  463. package/dist/docs/reference/model/KnuckleHingeWeb.md +7 -1
  464. package/dist/docs/reference/model/LoftStation.md +16 -9
  465. package/dist/docs/reference/model/Memo.md +54 -0
  466. package/dist/docs/reference/model/ModelProgram.md +7 -1
  467. package/dist/docs/reference/model/PartDeclaration.md +11 -6
  468. package/dist/docs/reference/model/PartGeometry.md +10 -4
  469. package/dist/docs/reference/model/PartOptions.md +11 -6
  470. package/dist/docs/reference/model/PatternSource.md +10 -4
  471. package/dist/docs/reference/model/PlaneOptions.md +11 -4
  472. package/dist/docs/reference/model/PolygonOptions.md +20 -14
  473. package/dist/docs/reference/model/Profile.md +10 -4
  474. package/dist/docs/reference/model/RectangleOptions.md +28 -22
  475. package/dist/docs/reference/model/RegularPolygonOptions.md +13 -7
  476. package/dist/docs/reference/model/Section.md +68 -74
  477. package/dist/docs/reference/model/SectionHullOptions.md +13 -6
  478. package/dist/docs/reference/model/SectionInspection.md +10 -4
  479. package/dist/docs/reference/model/SectionOffsetJoin.md +10 -4
  480. package/dist/docs/reference/model/SectionOffsetOptions.md +12 -6
  481. package/dist/docs/reference/model/Solid.md +101 -53
  482. package/dist/docs/reference/model/SolidInspection.md +10 -4
  483. package/dist/docs/reference/model/SolidSegmentHit.md +11 -5
  484. package/dist/docs/reference/model/StarOptions.md +24 -18
  485. package/dist/docs/reference/model/SvgOrigin.md +10 -4
  486. package/dist/docs/reference/model/SvgPathSectionOptions.md +14 -8
  487. package/dist/docs/reference/model/SvgSectionOptions.md +16 -10
  488. package/dist/docs/reference/model/TextSectionOptions.md +14 -8
  489. package/dist/docs/reference/model/box.md +18 -11
  490. package/dist/docs/reference/model/categories/boolean-operations.md +8 -2
  491. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -7
  492. package/dist/docs/reference/model/categories/explicit-profiles.md +1 -14
  493. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +6 -20
  494. package/dist/docs/reference/model/categories/generation.md +5 -10
  495. package/dist/docs/reference/model/categories/hinges.md +1 -4
  496. package/dist/docs/reference/model/categories/mesh-inspection.md +2 -6
  497. package/dist/docs/reference/model/categories/primitives.md +5 -21
  498. package/dist/docs/reference/model/categories/sections.md +4 -15
  499. package/dist/docs/reference/model/categories/threads.md +2 -39
  500. package/dist/docs/reference/model/categories/transforms-placement.md +4 -33
  501. package/dist/docs/reference/model/circle.md +10 -4
  502. package/dist/docs/reference/model/cylinder.md +13 -6
  503. package/dist/docs/reference/model/ellipse.md +10 -4
  504. package/dist/docs/reference/model/extrude.md +26 -19
  505. package/dist/docs/reference/model/generate.md +8 -2
  506. package/dist/docs/reference/model/gridPattern.md +15 -9
  507. package/dist/docs/reference/model/heightfield.md +10 -4
  508. package/dist/docs/reference/model/holeCutter.md +10 -3
  509. package/dist/docs/reference/model/hull.md +9 -2
  510. package/dist/docs/reference/model/implicit.md +9 -3
  511. package/dist/docs/reference/model/internalThreadCutter.md +23 -17
  512. package/dist/docs/reference/model/intersect.md +9 -2
  513. package/dist/docs/reference/model/join.md +89 -0
  514. package/dist/docs/reference/model/knuckleHinge.md +7 -1
  515. package/dist/docs/reference/model/linearPattern.md +15 -9
  516. package/dist/docs/reference/model/loft.md +31 -24
  517. package/dist/docs/reference/model/matchProfiles.md +14 -8
  518. package/dist/docs/reference/model/minkowskiSum.md +9 -2
  519. package/dist/docs/reference/model/pathPattern.md +25 -19
  520. package/dist/docs/reference/model/polygon.md +13 -7
  521. package/dist/docs/reference/model/preflightInternalThreadCutter.md +25 -19
  522. package/dist/docs/reference/model/preflightThreadedNut.md +29 -23
  523. package/dist/docs/reference/model/preflightThreadedRod.md +25 -19
  524. package/dist/docs/reference/model/radialPattern.md +15 -9
  525. package/dist/docs/reference/model/rectangle.md +14 -8
  526. package/dist/docs/reference/model/regularPolygon.md +10 -4
  527. package/dist/docs/reference/model/revolve.md +22 -15
  528. package/dist/docs/reference/model/solidFromMesh.md +12 -6
  529. package/dist/docs/reference/model/sphere.md +13 -6
  530. package/dist/docs/reference/model/star.md +12 -6
  531. package/dist/docs/reference/model/stroke.md +21 -15
  532. package/dist/docs/reference/model/svgPathSection.md +12 -6
  533. package/dist/docs/reference/model/svgSection.md +13 -7
  534. package/dist/docs/reference/model/sweep.md +27 -20
  535. package/dist/docs/reference/model/textSection.md +15 -9
  536. package/dist/docs/reference/model/threadRidge.md +21 -15
  537. package/dist/docs/reference/model/threadedNut.md +27 -21
  538. package/dist/docs/reference/model/threadedRod.md +23 -17
  539. package/dist/docs/reference/model/torus.md +20 -13
  540. package/dist/docs/reference/model/tube.md +13 -6
  541. package/dist/docs/reference/model/union.md +9 -2
  542. package/dist/docs/reference/model.md +3 -8
  543. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -1
  544. package/dist/docs/reference/text/VectorFont.md +39 -33
  545. package/dist/docs/reference/text/VectorFontOptions.md +7 -1
  546. package/dist/docs/reference/text/categories/font-preparation.md +1 -13
  547. package/dist/docs/reference/text/prepareVectorFont.md +7 -1
  548. package/dist/docs/reference/text.md +1 -1
  549. package/dist/engine/finalization.js +2 -74
  550. package/dist/engine/index.js +2 -2
  551. package/dist/engine/native/construction-mesh.js +41 -0
  552. package/dist/engine/native/material-components.js +2 -51
  553. package/dist/engine/native/mesh-observation.js +55 -0
  554. package/dist/engine/native/regions.js +2 -1
  555. package/dist/engine/operations/context.js +2 -0
  556. package/dist/engine/operations/extrusion-finishing.js +17 -16
  557. package/dist/engine/operations/join-collar-profile.js +120 -0
  558. package/dist/engine/operations/join.js +508 -0
  559. package/dist/engine/recipe-realization.js +1 -1
  560. package/dist/engine/session/dependencies.js +89 -42
  561. package/dist/engine/session/graph.js +319 -342
  562. package/dist/engine/session/native-cache.js +1 -1
  563. package/dist/engine/session/session.js +5 -5
  564. package/dist/engine/session/snapshot-cache.js +2 -2
  565. package/dist/export/3mf.js +190 -0
  566. package/dist/export/capture.js +178 -0
  567. package/dist/export/glb.js +209 -0
  568. package/dist/export/index.js +5 -0
  569. package/dist/export/limits.js +18 -0
  570. package/dist/export/stl.js +105 -0
  571. package/dist/export/types.js +1 -0
  572. package/dist/export/writer.js +54 -0
  573. package/dist/geometry/bounds-value.js +4 -4
  574. package/dist/geometry/immutable-buffer.js +4 -6
  575. package/dist/geometry/join-geometry.js +839 -0
  576. package/dist/geometry/mesh/mesh-render.js +205 -0
  577. package/dist/geometry/mesh/mesh-solid-intersections.js +43 -17
  578. package/dist/geometry/mesh/mesh-solid.js +6 -2
  579. package/dist/geometry/mesh-api.js +1 -0
  580. package/dist/geometry/region-offset.js +278 -0
  581. package/dist/geometry/regions.js +11 -1
  582. package/dist/model/execution-binding.js +3 -3
  583. package/dist/model/generation.js +2 -2
  584. package/dist/model/immutable-generation-data.js +13 -13
  585. package/dist/model/join.js +1 -0
  586. package/dist/model/operations.js +20 -0
  587. package/dist/model/recipe-declaration.js +1 -0
  588. package/dist/model/shape-handles.js +1 -0
  589. package/package.json +18 -1
  590. package/dist/docs/reference/engine/Export3mfOptions.md +0 -46
  591. package/dist/docs/reference/engine/ExportMeshPart.md +0 -31
  592. package/dist/docs/reference/engine/ModelingLimits.md +0 -121
  593. package/dist/docs/reference/engine/export3mf.md +0 -55
  594. package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +0 -79
  595. package/dist/docs/reference/mesh/Bevel.md +0 -18
  596. package/dist/docs/reference/mesh/BevelSize.md +0 -14
  597. package/dist/docs/reference/mesh/Bounds2.md +0 -125
  598. package/dist/docs/reference/mesh/Bounds2Data.md +0 -43
  599. package/dist/docs/reference/mesh/Bounds2Input.md +0 -19
  600. package/dist/docs/reference/mesh/Bounds3.md +0 -125
  601. package/dist/docs/reference/mesh/Bounds3Data.md +0 -43
  602. package/dist/docs/reference/mesh/Bounds3Input.md +0 -19
  603. package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +0 -14
  604. package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +0 -97
  605. package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +0 -60
  606. package/dist/docs/reference/mesh/CurveSamplingOptions.md +0 -69
  607. package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +0 -77
  608. package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +0 -129
  609. package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +0 -81
  610. package/dist/docs/reference/mesh/Frame3.md +0 -62
  611. package/dist/docs/reference/mesh/GeometryResolution.md +0 -74
  612. package/dist/docs/reference/mesh/GeometrySamplingLimits.md +0 -66
  613. package/dist/docs/reference/mesh/GeometryToleranceOptions.md +0 -46
  614. package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +0 -18
  615. package/dist/docs/reference/mesh/HeightfieldOptions.md +0 -72
  616. package/dist/docs/reference/mesh/HeightfieldPreflight.md +0 -58
  617. package/dist/docs/reference/mesh/ImmutableBuffer.md +0 -108
  618. package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +0 -43
  619. package/dist/docs/reference/mesh/LoftCorrespondence.md +0 -24
  620. package/dist/docs/reference/mesh/LoftMeshStation.md +0 -31
  621. package/dist/docs/reference/mesh/LoftOptions.md +0 -88
  622. package/dist/docs/reference/mesh/LoftPlacement.md +0 -70
  623. package/dist/docs/reference/mesh/ModelingLimits.md +0 -130
  624. package/dist/docs/reference/mesh/NumericArray.md +0 -14
  625. package/dist/docs/reference/mesh/Path2.md +0 -197
  626. package/dist/docs/reference/mesh/Path2Data.md +0 -50
  627. package/dist/docs/reference/mesh/Path2Input.md +0 -20
  628. package/dist/docs/reference/mesh/Path3.md +0 -197
  629. package/dist/docs/reference/mesh/Path3Data.md +0 -50
  630. package/dist/docs/reference/mesh/Path3Input.md +0 -20
  631. package/dist/docs/reference/mesh/PathLocation.md +0 -69
  632. package/dist/docs/reference/mesh/PathNormalGuide.md +0 -43
  633. package/dist/docs/reference/mesh/PathResamplingOptions.md +0 -84
  634. package/dist/docs/reference/mesh/Pivot2Options.md +0 -26
  635. package/dist/docs/reference/mesh/Pivot3Options.md +0 -26
  636. package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +0 -14
  637. package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +0 -160
  638. package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +0 -124
  639. package/dist/docs/reference/mesh/PlanarPatchQuality.md +0 -194
  640. package/dist/docs/reference/mesh/RevolveOptions.md +0 -91
  641. package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +0 -38
  642. package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +0 -79
  643. package/dist/docs/reference/mesh/SweepOptions.md +0 -113
  644. package/dist/docs/reference/mesh/SweepOrientation.md +0 -113
  645. package/dist/docs/reference/mesh/ThreadEndStyle.md +0 -14
  646. package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +0 -117
  647. package/dist/docs/reference/mesh/ThreadHandedness.md +0 -14
  648. package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +0 -14
  649. package/dist/docs/reference/mesh/ThreadLeadInShape.md +0 -14
  650. package/dist/docs/reference/mesh/ThreadProfile.md +0 -86
  651. package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +0 -53
  652. package/dist/docs/reference/mesh/ThreadProfileSpec.md +0 -23
  653. package/dist/docs/reference/mesh/ThreadRidgeOptions.md +0 -145
  654. package/dist/docs/reference/mesh/ThreadSolidOptions.md +0 -222
  655. package/dist/docs/reference/mesh/ThreadSolidPreflight.md +0 -58
  656. package/dist/docs/reference/mesh/Transform2.md +0 -256
  657. package/dist/docs/reference/mesh/Transform2Data.md +0 -14
  658. package/dist/docs/reference/mesh/Transform2Input.md +0 -19
  659. package/dist/docs/reference/mesh/Transform3.md +0 -296
  660. package/dist/docs/reference/mesh/Transform3Data.md +0 -17
  661. package/dist/docs/reference/mesh/Transform3Input.md +0 -19
  662. package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +0 -96
  663. package/dist/docs/reference/mesh/TriangleMesh.md +0 -34
  664. package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +0 -129
  665. package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +0 -79
  666. package/dist/docs/reference/mesh/TriangleMeshInput.md +0 -19
  667. package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +0 -79
  668. package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +0 -43
  669. package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +0 -194
  670. package/dist/docs/reference/mesh/TriangleMeshSignature.md +0 -111
  671. package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +0 -46
  672. package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +0 -34
  673. package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +0 -131
  674. package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +0 -55
  675. package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +0 -95
  676. package/dist/docs/reference/mesh/Vector2.md +0 -270
  677. package/dist/docs/reference/mesh/Vector2Data.md +0 -14
  678. package/dist/docs/reference/mesh/Vector2Input.md +0 -19
  679. package/dist/docs/reference/mesh/Vector3.md +0 -282
  680. package/dist/docs/reference/mesh/Vector3Data.md +0 -14
  681. package/dist/docs/reference/mesh/Vector3Input.md +0 -19
  682. package/dist/docs/reference/model/AcmeThreadProfileSpec.md +0 -80
  683. package/dist/docs/reference/model/Anchor3.md +0 -55
  684. package/dist/docs/reference/model/AttachOptions.md +0 -69
  685. package/dist/docs/reference/model/Bevel.md +0 -19
  686. package/dist/docs/reference/model/BevelSize.md +0 -15
  687. package/dist/docs/reference/model/Bounds2-type.md +0 -125
  688. package/dist/docs/reference/model/Bounds2Data.md +0 -44
  689. package/dist/docs/reference/model/Bounds2Input.md +0 -19
  690. package/dist/docs/reference/model/Bounds2Options.md +0 -110
  691. package/dist/docs/reference/model/Bounds3-type.md +0 -125
  692. package/dist/docs/reference/model/Bounds3Data.md +0 -44
  693. package/dist/docs/reference/model/Bounds3Input.md +0 -19
  694. package/dist/docs/reference/model/Bounds3Options.md +0 -110
  695. package/dist/docs/reference/model/BoxEdge.md +0 -15
  696. package/dist/docs/reference/model/BoxEdgeSelection.md +0 -19
  697. package/dist/docs/reference/model/BoxEdgeTreatments.md +0 -20
  698. package/dist/docs/reference/model/BoxOptions.md +0 -92
  699. package/dist/docs/reference/model/ButtressPressureFlankSide.md +0 -15
  700. package/dist/docs/reference/model/ButtressThreadProfileSpec.md +0 -98
  701. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +0 -35
  702. package/dist/docs/reference/model/CircleContourOptions.md +0 -21
  703. package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -62
  704. package/dist/docs/reference/model/Computed.md +0 -44
  705. package/dist/docs/reference/model/ComputedValue.md +0 -24
  706. package/dist/docs/reference/model/Contour.md +0 -24
  707. package/dist/docs/reference/model/CorrespondingComponent.md +0 -46
  708. package/dist/docs/reference/model/CorrespondingContour.md +0 -46
  709. package/dist/docs/reference/model/CorrespondingProfile.md +0 -22
  710. package/dist/docs/reference/model/CorrespondingProfileStation.md +0 -27
  711. package/dist/docs/reference/model/CurveSamplingOptions.md +0 -68
  712. package/dist/docs/reference/model/CustomThreadProfileSpec.md +0 -78
  713. package/dist/docs/reference/model/CylinderOptions.md +0 -58
  714. package/dist/docs/reference/model/EdgeTreatment.md +0 -22
  715. package/dist/docs/reference/model/EllipseContourOptions.md +0 -21
  716. package/dist/docs/reference/model/EndTreatments.md +0 -39
  717. package/dist/docs/reference/model/ExtrudeMeshOptions.md +0 -133
  718. package/dist/docs/reference/model/ExtrudeOptions.md +0 -149
  719. package/dist/docs/reference/model/ExtrusionSamplingOptions.md +0 -84
  720. package/dist/docs/reference/model/Frame3.md +0 -63
  721. package/dist/docs/reference/model/GeometryError.md +0 -102
  722. package/dist/docs/reference/model/GeometryErrorCode.md +0 -15
  723. package/dist/docs/reference/model/GeometryErrorContext.md +0 -35
  724. package/dist/docs/reference/model/GeometryResolution.md +0 -70
  725. package/dist/docs/reference/model/GeometrySamplingLimits.md +0 -62
  726. package/dist/docs/reference/model/GeometryToleranceOptions.md +0 -46
  727. package/dist/docs/reference/model/GridPatternOptions.md +0 -50
  728. package/dist/docs/reference/model/HeightfieldOptions.md +0 -68
  729. package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -108
  730. package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -43
  731. package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -216
  732. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +0 -77
  733. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +0 -47
  734. package/dist/docs/reference/model/KnuckleHingeSpec.md +0 -18
  735. package/dist/docs/reference/model/LinearPatternOptions.md +0 -39
  736. package/dist/docs/reference/model/LoftCorrespondence.md +0 -27
  737. package/dist/docs/reference/model/LoftOptions.md +0 -91
  738. package/dist/docs/reference/model/LoftPlacement.md +0 -73
  739. package/dist/docs/reference/model/MatchProfilesOptions.md +0 -35
  740. package/dist/docs/reference/model/ModelingLimits.md +0 -126
  741. package/dist/docs/reference/model/NumericArray.md +0 -14
  742. package/dist/docs/reference/model/Path2-type.md +0 -196
  743. package/dist/docs/reference/model/Path2Data.md +0 -50
  744. package/dist/docs/reference/model/Path2Input.md +0 -20
  745. package/dist/docs/reference/model/Path3-type.md +0 -196
  746. package/dist/docs/reference/model/Path3Data.md +0 -50
  747. package/dist/docs/reference/model/Path3Input.md +0 -20
  748. package/dist/docs/reference/model/PathLocation.md +0 -69
  749. package/dist/docs/reference/model/PathNormalGuide.md +0 -46
  750. package/dist/docs/reference/model/PathOptions.md +0 -38
  751. package/dist/docs/reference/model/PathPatternOptions.md +0 -48
  752. package/dist/docs/reference/model/PathResamplingOptions.md +0 -84
  753. package/dist/docs/reference/model/Pivot2Options.md +0 -28
  754. package/dist/docs/reference/model/Pivot3Options.md +0 -28
  755. package/dist/docs/reference/model/PolygonData.md +0 -44
  756. package/dist/docs/reference/model/PrimitiveAttachment.md +0 -39
  757. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +0 -110
  758. package/dist/docs/reference/model/PrintableThreadFit.md +0 -15
  759. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +0 -51
  760. package/dist/docs/reference/model/ProfileComponent2.md +0 -46
  761. package/dist/docs/reference/model/ProfileContour2.md +0 -36
  762. package/dist/docs/reference/model/ProfileSpan2.md +0 -47
  763. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +0 -41
  764. package/dist/docs/reference/model/RadialPatternOptions.md +0 -59
  765. package/dist/docs/reference/model/RadialSizing.md +0 -15
  766. package/dist/docs/reference/model/RadialSizingOptions.md +0 -40
  767. package/dist/docs/reference/model/RectangleContourOptions.md +0 -72
  768. package/dist/docs/reference/model/RectangleCornerTreatment.md +0 -40
  769. package/dist/docs/reference/model/RectangleCornerTreatments.md +0 -20
  770. package/dist/docs/reference/model/RegionData.md +0 -19
  771. package/dist/docs/reference/model/RevolveOptions.md +0 -94
  772. package/dist/docs/reference/model/RoundedEdgeTreatment.md +0 -96
  773. package/dist/docs/reference/model/SmoothEdgeTreatment.md +0 -76
  774. package/dist/docs/reference/model/SphereOptions.md +0 -20
  775. package/dist/docs/reference/model/SquareThreadProfileSpec.md +0 -80
  776. package/dist/docs/reference/model/StarContourOptions.md +0 -81
  777. package/dist/docs/reference/model/StrokeCap.md +0 -16
  778. package/dist/docs/reference/model/StrokeJoin.md +0 -16
  779. package/dist/docs/reference/model/StrokeOptions.md +0 -91
  780. package/dist/docs/reference/model/SweepOptions.md +0 -116
  781. package/dist/docs/reference/model/SweepOrientation.md +0 -116
  782. package/dist/docs/reference/model/ThreadBevelOptions.md +0 -35
  783. package/dist/docs/reference/model/ThreadEndStyle.md +0 -15
  784. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +0 -118
  785. package/dist/docs/reference/model/ThreadHandedness.md +0 -15
  786. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +0 -15
  787. package/dist/docs/reference/model/ThreadLeadInShape.md +0 -15
  788. package/dist/docs/reference/model/ThreadProfile.md +0 -87
  789. package/dist/docs/reference/model/ThreadProfileBaseSpec.md +0 -54
  790. package/dist/docs/reference/model/ThreadProfileSpec.md +0 -24
  791. package/dist/docs/reference/model/ThreadRidgeOptions.md +0 -141
  792. package/dist/docs/reference/model/ThreadSolidPreflight.md +0 -59
  793. package/dist/docs/reference/model/ThreadedNutOptions.md +0 -263
  794. package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -111
  795. package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
  796. package/dist/docs/reference/model/ThreadedRodOptions.md +0 -216
  797. package/dist/docs/reference/model/TorusOptions.md +0 -110
  798. package/dist/docs/reference/model/Transform2-type.md +0 -257
  799. package/dist/docs/reference/model/Transform2Data.md +0 -16
  800. package/dist/docs/reference/model/Transform2Input.md +0 -21
  801. package/dist/docs/reference/model/Transform3-type.md +0 -297
  802. package/dist/docs/reference/model/Transform3Data.md +0 -19
  803. package/dist/docs/reference/model/Transform3Input.md +0 -21
  804. package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +0 -97
  805. package/dist/docs/reference/model/TriangleMesh.md +0 -34
  806. package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -129
  807. package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
  808. package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +0 -131
  809. package/dist/docs/reference/model/TriangularThreadProfileSpec.md +0 -96
  810. package/dist/docs/reference/model/TubeOptions.md +0 -67
  811. package/dist/docs/reference/model/Vector2-type.md +0 -271
  812. package/dist/docs/reference/model/Vector2Data.md +0 -15
  813. package/dist/docs/reference/model/Vector2Input.md +0 -21
  814. package/dist/docs/reference/model/Vector3-type.md +0 -283
  815. package/dist/docs/reference/model/Vector3Data.md +0 -15
  816. package/dist/docs/reference/model/Vector3Input.md +0 -21
  817. package/dist/docs/reference/model/VectorTextLayout.md +0 -40
  818. package/dist/docs/reference/model/VectorTextMetrics.md +0 -100
  819. package/dist/docs/reference/model/bounds2.md +0 -37
  820. package/dist/docs/reference/model/bounds3.md +0 -37
  821. package/dist/docs/reference/model/categories/bounds.md +0 -38
  822. package/dist/docs/reference/model/categories/contracts.md +0 -16
  823. package/dist/docs/reference/model/categories/core-values-errors.md +0 -44
  824. package/dist/docs/reference/model/categories/paths.md +0 -42
  825. package/dist/docs/reference/model/categories/resolution.md +0 -20
  826. package/dist/docs/reference/model/immutableBuffer.md +0 -49
  827. package/dist/docs/reference/model/isGeometryError.md +0 -34
  828. package/dist/docs/reference/model/path2.md +0 -54
  829. package/dist/docs/reference/model/path3.md +0 -49
  830. package/dist/docs/reference/model/transform2.md +0 -46
  831. package/dist/docs/reference/model/transform3.md +0 -48
  832. package/dist/docs/reference/model/vector2.md +0 -40
  833. package/dist/docs/reference/model/vector3.md +0 -47
  834. package/dist/docs/reference/text/Bounds2Data.md +0 -34
  835. package/dist/docs/reference/text/Vector2Data.md +0 -7
  836. package/dist/docs/reference/text/VectorTextArcBaseline.md +0 -53
  837. package/dist/docs/reference/text/VectorTextLayout.md +0 -34
  838. package/dist/docs/reference/text/VectorTextLayoutOptions.md +0 -111
  839. package/dist/docs/reference/text/VectorTextMetrics.md +0 -94
  840. package/dist/docs/reference/text/VectorTextOptions.md +0 -50
  841. package/dist/engine/export-3mf.js +0 -23
  842. package/dist/engine/serialize-3mf.js +0 -116
  843. /package/dist/{engine → geometry/mesh}/mesh-view-cache.js +0 -0
@@ -1,332 +1,309 @@
1
1
  import { GeometryError } from "../../geometry/errors.js";
2
2
  import { captureDiagnosticPath } from "../../model/diagnostic-path.js";
3
3
  import { GenerationError, } from "../../model/generation.js";
4
- import { captureGenerationDependencies, captureGenerationValue, compareGenerationValues, generationDataEntries, isImmutableGenerationValue, } from "../../model/immutable-generation-data.js";
4
+ import { captureGenerationArguments, captureGenerationValue, compareGenerationValues, generationDataEntries, generationValueBytes, isImmutableGenerationValue, } from "../../model/immutable-generation-data.js";
5
5
  import { assertSynchronousScopeResult } from "../native/ownership.js";
6
- import { createModelDependencies } from "./dependencies.js";
7
- function reusableEntry(node) {
8
- if (node.state.kind === "ready")
9
- return node.state.entry;
10
- if (node.state.kind === "pending")
11
- return node.previous;
12
- return undefined;
13
- }
14
- const parameterKeys = Symbol("parameter-keys");
15
- const emptyInputs = Object.freeze([]);
16
- const isArray = (value) => Array.isArray(value);
6
+ import { createMemoProvenance } from "./dependencies.js";
7
+ const maxEntries = 100_000;
8
+ const maxVersions = 8;
9
+ const source = Symbol("params-source"), contextSource = Symbol("model-context-source"), keys = Symbol("parameter-keys"), negativeZero = Symbol("negative-zero");
17
10
  const canonicalId = (id) => typeof id === "string" && id.length <= 64 && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id);
18
11
  function invalid(message) {
19
- throw new GeometryError("INVALID_ARGUMENT", message, { operation: "generate" });
20
- }
21
- const sameInputs = (left, right) => left.length === right.length && left.every((value, index) => Object.is(value, right[index]));
22
- function evaluateComputed(callback) {
23
- const result = callback();
24
- assertSynchronousScopeResult(result, () => new GeometryError("INVALID_ARGUMENT", "Computed callbacks must be synchronous.", {
25
- operation: "computed",
26
- }));
27
- return captureGenerationValue(result);
12
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation: "memo" });
28
13
  }
29
- /** Reuse immutable captures only when the host supplies the same input value. */
30
- function captureParameters(input, previousInput, previousSnapshot) {
31
- return Object.freeze(Object.fromEntries(Array.from(generationDataEntries(input), ([key, value]) => {
32
- if (Object.is(value, previousInput[key]) &&
33
- Object.hasOwn(previousSnapshot, key) &&
34
- isImmutableGenerationValue(value))
35
- return [key, previousSnapshot[key]];
36
- return [key, captureGenerationValue(value)];
37
- })));
38
- }
39
- /**
40
- * Owns one revision's lazy computations and dynamic read sets. A failed read stays failed for the
41
- * attempt; only the surrounding generation revision can promote successful entries to the cache.
42
- */
43
- class ComputationRevision {
44
- options;
45
- parameterSnapshot;
46
- committed;
47
- readerIds;
48
- validatedInputs;
49
- assertActive;
50
- assertNoFailedAssertion;
51
- nodes = new Map();
52
- keySignature;
53
- stack = [];
54
- constructor(options, parameterSnapshot, committed, readerIds, validatedInputs, assertActive, assertNoFailedAssertion) {
55
- this.options = options;
56
- this.parameterSnapshot = parameterSnapshot;
57
- this.committed = committed;
58
- this.readerIds = readerIds;
59
- this.validatedInputs = validatedInputs;
60
- this.assertActive = assertActive;
61
- this.assertNoFailedAssertion = assertNoFailedAssertion;
62
- // Structural reads share one unambiguous signature, even when parameter names contain NUL.
63
- this.keySignature = JSON.stringify(Object.keys(parameterSnapshot));
64
- }
65
- get evaluating() {
66
- return this.stack.length > 0;
67
- }
68
- currentEvaluation() {
69
- const current = this.stack.at(-1);
70
- if (current === undefined)
14
+ function locate(index, fn, inputs, create = false) {
15
+ let node = index.get(fn);
16
+ if (node === undefined && create)
17
+ index.set(fn, (node = { children: new Map() }));
18
+ for (const input of inputs) {
19
+ if (node === undefined)
71
20
  return undefined;
72
- const state = this.nodes.get(current)?.state;
73
- return state?.kind === "evaluating" ? state : undefined;
74
- }
75
- dispose() {
76
- // Retained numerical callbacks may keep an expired parameter guard alive. That guard must
77
- // not retain unrelated callbacks or chain together every previous computation cache.
78
- this.nodes.clear();
79
- this.committed = new Map();
80
- }
81
- register(id, callback, dependencies = emptyInputs) {
82
- if (!canonicalId(id) || this.nodes.has(id))
83
- invalid("Computed IDs must be unique canonical lowercase identifiers of at most 64 characters.");
84
- if (this.nodes.size >= 100_000)
85
- throw new GeometryError("COMPLEXITY_LIMIT", "Too many declared computations.", {
86
- operation: "computed",
87
- });
88
- if (typeof callback !== "function" || !Array.isArray(dependencies))
89
- invalid("Use computed(id, callback, dependencies?) with an optional dependency array.");
90
- const inputs = dependencies === emptyInputs
91
- ? emptyInputs
92
- : captureGenerationDependencies(dependencies, (value) => this.readerIds.has(value), this.validatedInputs);
93
- const previous = this.committed.get(id);
94
- this.nodes.set(id, {
95
- callback,
96
- inputs,
97
- previous,
98
- state: { kind: "pending" },
99
- });
100
- }
101
- /** A handled dependency failure must still prevent the caller's fallback from becoming reusable. */
102
- read = (id) => {
103
- this.assertActive();
104
- const parent = this.currentEvaluation();
105
- try {
106
- const node = this.nodes.get(id);
107
- if (node === undefined)
108
- invalid(`Computed '${id}' must be declared before it is read.`);
109
- const cycle = this.stack.indexOf(id);
110
- if (cycle >= 0)
111
- invalid(`Computed dependency cycle: ${[...this.stack.slice(cycle), id].join(" -> ")}.`);
112
- if (node.state.kind === "failed")
113
- throw node.state.error;
114
- const entry = node.state.kind === "ready" ? node.state.entry : this.evaluateNode(id, node);
115
- if (parent !== undefined) {
116
- parent.dependencies.set(id, entry.token);
117
- if (!entry.cacheable)
118
- parent.cacheable = false;
119
- }
120
- return entry.value;
121
- }
122
- catch (error) {
123
- if (parent !== undefined)
124
- parent.cacheable = false;
125
- throw error;
126
- }
127
- };
128
- /** Validate old reads, evaluate or reuse the output, and publish exactly one local outcome. */
129
- evaluateNode(id, node) {
130
- const evaluation = {
131
- kind: "evaluating",
132
- parameters: new Map(),
133
- dependencies: new Map(),
134
- cacheable: true,
135
- };
136
- node.state = evaluation;
137
- this.stack.push(id);
138
- try {
139
- const previous = node.previous;
140
- const reusable = previous !== undefined && this.canReuse(node, previous);
141
- let entry;
142
- if (reusable && this.options.verifyCache !== true) {
143
- entry = evaluation.cacheable ? previous : Object.freeze({ ...previous, cacheable: false });
144
- }
145
- else {
146
- entry = this.evaluateCallback(id, node, evaluation, reusable);
147
- }
148
- node.state = { kind: "ready", entry };
149
- return entry;
150
- }
151
- catch (error) {
152
- // Neither partial dependencies nor an earlier value may escape a failed evaluation.
153
- node.state = { kind: "failed", error };
154
- throw error;
155
- }
156
- finally {
157
- this.stack.pop();
158
- }
159
- }
160
- canReuse(node, previous) {
161
- if (this.options.cache === false || !sameInputs(node.inputs, previous.inputs))
162
- return false;
163
- for (const [key, value] of previous.parameters) {
164
- const current = key === parameterKeys ? this.keySignature : Reflect.get(this.parameterSnapshot, key);
165
- if (!Object.is(current, value))
166
- return false;
167
- }
168
- for (const [dependency, token] of previous.dependencies) {
169
- if (!this.nodes.has(dependency))
170
- return false;
171
- try {
172
- this.read(dependency);
173
- }
174
- catch {
175
- // Let the callback decide whether a failed dependency propagates or uses a fallback.
176
- return false;
177
- }
178
- const state = this.nodes.get(dependency).state;
179
- if (state.kind !== "ready" || state.entry.token !== token)
180
- return false;
181
- }
182
- return true;
183
- }
184
- evaluateCallback(id, node, evaluation, reusable) {
185
- // Validation may read old branches. Only callback reads describe the successful output,
186
- // whether this is a cache miss or a development verification.
187
- evaluation.parameters.clear();
188
- evaluation.dependencies.clear();
189
- evaluation.cacheable = true;
190
- // Declared readers depend on their output, not just their stable callable identity.
191
- for (const input of node.inputs) {
192
- const dependency = typeof input === "function" ? this.readerIds.get(input) : undefined;
193
- if (dependency !== undefined) {
194
- try {
195
- this.read(dependency);
196
- }
197
- catch {
198
- // Failed reads already prevent reuse; the callback owns propagation or fallback.
199
- }
200
- }
201
- }
202
- const result = evaluateComputed(node.callback);
203
- this.assertNoFailedAssertion();
204
- const previous = node.previous;
205
- let value = result;
206
- if (reusable && previous !== undefined) {
207
- const comparison = compareGenerationValues(previous.value, result);
208
- if (comparison === "different")
209
- invalid(`Cache verification for '${id}' found a changed result without a tracked dependency. Add changing outer values to the dependency array.`);
210
- if (comparison === "unsupported")
211
- invalid(`Cache verification for '${id}' cannot compare this result within its bounded data/recipe probe. Use cache: false for a full output equivalence check.`);
212
- value = previous.value;
213
- }
214
- return Object.freeze({
215
- inputs: node.inputs,
216
- parameters: evaluation.parameters,
217
- dependencies: evaluation.dependencies,
218
- value,
219
- cacheable: evaluation.cacheable,
220
- // Tokens identify successful outputs, including new registrations of removed IDs. A per-node
221
- // counter could repeat an old dependency's version and serve stale data.
222
- token: previous !== undefined && Object.is(previous.value, value) ? previous.token : {},
223
- });
21
+ const key = Object.is(input, -0) ? negativeZero : input;
22
+ let child = node.children.get(key);
23
+ if (child === undefined && create)
24
+ node.children.set(key, (child = { children: new Map() }));
25
+ node = child;
224
26
  }
27
+ return node;
28
+ }
29
+ /** Conservative map/trie bookkeeping, including read keys; calculated once per successful entry. */
30
+ function entryOverhead(inputs, parameters) {
31
+ let bytes = 192 + inputs.length * 128;
32
+ for (const key of parameters.keys())
33
+ bytes += 48 + (typeof key === "string" ? key.length * 2 : 8);
34
+ return bytes;
35
+ }
36
+ function captureParameters(input, previous, snapshot) {
37
+ return Object.freeze(Object.fromEntries(Array.from(generationDataEntries(input), ([key, value]) => [
38
+ key,
39
+ Object.is(value, previous[key]) &&
40
+ Object.hasOwn(snapshot, key) &&
41
+ isImmutableGenerationValue(value)
42
+ ? snapshot[key]
43
+ : captureGenerationValue(value),
44
+ ])));
225
45
  }
226
- /** Owns computed identities and per-revision reads; the session commits only successful revisions. */
46
+ /** Owns bounded successful memo histories and provisional per-revision evaluation. */
227
47
  export function createGenerationGraph(options, maxParts) {
228
- let committed = new Map();
229
- const readers = new Map();
230
- const readerIds = new WeakMap();
231
- const validatedInputs = new WeakSet();
232
- let activeRead;
233
- let previousInput = {};
234
- let previousParameterSnapshot = {};
235
- // Build stable readers outside registration's lexical scope so they cannot retain a revision's
236
- // callback, captured locals, or dependency inputs after that revision closes.
237
- const createReader = (id) => (() => {
238
- if (activeRead === undefined)
239
- return invalid("Computed readers can only be used during their active model session revision.");
240
- return activeRead(id);
241
- });
48
+ let committed = new WeakMap();
49
+ let retained = [];
50
+ let clock = 0;
51
+ let previousInput = {}, previousSnapshot = {};
52
+ const validated = new WeakSet();
53
+ const provenance = createMemoProvenance();
242
54
  return {
243
55
  begin(input, checkReactiveRead) {
244
- let active = true;
245
- let declaring = true;
246
- let assertionFailure;
247
- const diagnostics = [];
248
- const partIds = new Set();
249
- const declaredParts = new WeakSet();
250
- const modelParameters = new Set();
56
+ let active = true, declaring = true, assertionFailure;
57
+ let checkAccess = checkReactiveRead, previousEntries = committed, pending = new WeakMap();
58
+ let previousRetained = retained, revisionClock = clock, selected;
251
59
  const inputValues = input;
252
- const parameterSnapshot = captureParameters(inputValues, previousInput, previousParameterSnapshot);
60
+ const snapshot = captureParameters(inputValues, previousInput, previousSnapshot);
61
+ const keySignature = JSON.stringify(Object.keys(snapshot));
62
+ const stack = [], calls = [], diagnostics = [];
63
+ let boundContext;
64
+ const completed = [];
65
+ const reported = new WeakSet();
66
+ const declaredParts = new WeakSet(), partIds = new Set(), outerReads = new Set();
253
67
  const assertActive = () => {
254
68
  if (!active)
255
69
  invalid("The generation context has expired.");
256
- checkReactiveRead();
70
+ checkAccess();
257
71
  };
258
72
  const assertNoFailedAssertion = () => {
259
73
  if (assertionFailure !== undefined)
260
74
  throw assertionFailure;
261
75
  };
262
- const computations = new ComputationRevision(options, parameterSnapshot, committed, readerIds, validatedInputs, assertActive, assertNoFailedAssertion);
263
- const params = new Proxy(parameterSnapshot, {
264
- get: (target, key) => {
76
+ const record = (key, value) => {
77
+ if (stack.length !== 0)
78
+ for (const current of stack)
79
+ current.parameters.set(key, value);
80
+ else if (typeof key === "string")
81
+ outerReads.add(key);
82
+ };
83
+ const publish = (entry, node) => {
84
+ if (!reported.has(node)) {
85
+ reported.add(node);
86
+ completed.push({
87
+ id: `memo-${completed.length + 1}`,
88
+ inputs: entry.inputs,
89
+ parameters: entry.parameters,
90
+ value: entry.value,
91
+ });
92
+ }
93
+ for (const parent of stack) {
94
+ for (const [key, value] of entry.parameters)
95
+ parent.parameters.set(key, value);
96
+ if (!entry.cacheable)
97
+ parent.cacheable = false;
98
+ }
99
+ return entry.value;
100
+ };
101
+ const roots = (entries) => [
102
+ snapshot,
103
+ inputValues,
104
+ ...entries.flatMap((entry) => [entry, ...entry.entry.parameters.values()]),
105
+ ];
106
+ // Current tuples take priority. Unused successful tuples stay ordered by last use;
107
+ // weak callable keys allow collected functions to be pruned on later revisions.
108
+ const prepareRetention = (extra, ceiling) => {
109
+ const current = [];
110
+ for (const { fn, inputs, node } of calls)
111
+ if (node.state?.kind === "ready" && node.state.entry.cacheable)
112
+ current.push({
113
+ fn: new WeakRef(fn),
114
+ inputs,
115
+ entry: node.state.entry,
116
+ usedAt: node.usedAt,
117
+ });
118
+ current.sort((left, right) => right.usedAt - left.usedAt);
119
+ const dormant = [];
120
+ if (options.cache !== false)
121
+ for (const entry of previousRetained) {
122
+ const fn = entry.fn.deref();
123
+ if (fn === undefined)
124
+ continue;
125
+ const touched = locate(pending, fn, entry.inputs)?.state;
126
+ if (touched?.kind === "failed" ||
127
+ (touched?.kind === "ready" &&
128
+ (!touched.entry.cacheable || sameReads(touched.entry, entry.entry))))
129
+ continue;
130
+ dormant.push(entry);
131
+ }
132
+ const candidates = [];
133
+ const overhead = [0];
134
+ // The trie interns validated argument tuples, so their immutable array identity is a
135
+ // stable bucket key across parameter versions. Keep only the newest bounded history.
136
+ const versions = new Map();
137
+ if (options.cache !== false)
138
+ for (const entry of [...current, ...dormant]) {
139
+ const count = versions.get(entry.inputs) ?? 0;
140
+ if (count >= maxVersions)
141
+ continue;
142
+ versions.set(entry.inputs, count + 1);
143
+ candidates.push(entry);
144
+ overhead.push(overhead.at(-1) + entry.entry.overheadBytes);
145
+ if (candidates.length >= maxEntries)
146
+ break;
147
+ }
148
+ const cost = (count) => overhead[count] +
149
+ generationValueBytes([...roots(candidates.slice(0, count)), ...extra], ceiling - overhead[count]);
150
+ const fullCost = cost(candidates.length);
151
+ if (fullCost <= ceiling) {
152
+ selected = candidates;
153
+ return fullCost;
154
+ }
155
+ else {
156
+ // Prefix search preserves priority while using logarithmic budget probes rather
157
+ // than repeatedly walking a progressively shortened large cache one entry at a time.
158
+ let low = 0, high = candidates.length;
159
+ let selectedCost = cost(0);
160
+ if (selectedCost > ceiling) {
161
+ selected = [];
162
+ return selectedCost;
163
+ }
164
+ while (low < high) {
165
+ const middle = Math.ceil((low + high) / 2);
166
+ const bytes = cost(middle);
167
+ if (bytes <= ceiling) {
168
+ low = middle;
169
+ selectedCost = bytes;
170
+ }
171
+ else
172
+ high = middle - 1;
173
+ }
174
+ selected = candidates.slice(0, low);
175
+ return selectedCost;
176
+ }
177
+ };
178
+ const retainedEntries = () => {
179
+ if (selected === undefined)
180
+ prepareRetention([], Infinity);
181
+ return selected;
182
+ };
183
+ const sameReads = (left, right) => left === right ||
184
+ (left.parameters.size === right.parameters.size &&
185
+ [...left.parameters].every(([key, value]) => right.parameters.has(key) && Object.is(value, right.parameters.get(key))));
186
+ // One snapshot-backed proxy is shared by outer generation and every call. It is NEVER
187
+ // redirected to another revision, so identity/aliasing within a call remain ordinary JS.
188
+ const params = new Proxy(snapshot, {
189
+ get(target, key) {
265
190
  assertActive();
266
191
  const value = Reflect.get(target, key);
267
- const current = computations.currentEvaluation();
268
- if (current !== undefined && typeof key === "string")
269
- current.parameters.set(key, value);
270
- else if (typeof key === "string" && Object.hasOwn(target, key))
271
- modelParameters.add(key);
192
+ if (typeof key === "string")
193
+ record(key, value);
272
194
  return value;
273
195
  },
274
196
  set: () => invalid("Parameters are immutable."),
275
197
  deleteProperty: () => invalid("Parameters are immutable."),
276
- ownKeys: (target) => {
198
+ ownKeys(target) {
277
199
  assertActive();
278
- const current = computations.currentEvaluation();
279
- if (current !== undefined)
280
- current.parameters.set(parameterKeys, computations.keySignature);
281
- else
282
- for (const key of Object.keys(target))
283
- modelParameters.add(key);
200
+ record(keys, keySignature);
284
201
  return Reflect.ownKeys(target);
285
202
  },
286
- has: (target, key) => {
203
+ has(target, key) {
287
204
  assertActive();
288
- const current = computations.currentEvaluation();
289
- if (current !== undefined)
290
- current.parameters.set(parameterKeys, computations.keySignature);
291
- else if (typeof key === "string")
292
- modelParameters.add(key);
205
+ record(keys, keySignature);
293
206
  return Reflect.has(target, key);
294
207
  },
295
- getOwnPropertyDescriptor: (target, key) => {
208
+ getOwnPropertyDescriptor(target, key) {
296
209
  assertActive();
210
+ record(keys, keySignature);
297
211
  const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
298
- const current = computations.currentEvaluation();
299
- if (current !== undefined) {
300
- const dependencies = current.parameters;
301
- dependencies.set(parameterKeys, computations.keySignature);
302
- if (typeof key === "string")
303
- dependencies.set(key, descriptor?.value);
304
- }
305
- else if (typeof key === "string")
306
- modelParameters.add(key);
212
+ if (typeof key === "string")
213
+ record(key, descriptor?.value);
307
214
  return descriptor;
308
215
  },
309
216
  });
310
- activeRead = computations.read;
311
- const computed = ((id, callback, dependencies) => {
217
+ const memo = ((fn, ...args) => {
312
218
  assertActive();
313
- if (!declaring || computations.evaluating)
314
- invalid("Declare computations only in the outer generation callback.");
315
- computations.register(id, callback, dependencies);
316
- let reader = readers.get(id);
317
- if (reader === undefined) {
318
- reader = createReader(id);
319
- readers.set(id, reader);
320
- readerIds.set(reader, id);
219
+ const parent = stack.at(-1);
220
+ try {
221
+ if (!declaring || typeof fn !== "function")
222
+ invalid("Use memo(fn, ...args) during generation.");
223
+ // Normal immutable args compare by identity. Only the explicitly passed current params
224
+ // object is keyed by source + observed field values instead of revision proxy identity.
225
+ const normalized = args.map((arg) => arg === params
226
+ ? source
227
+ : arg === boundContext && boundContext !== undefined
228
+ ? contextSource
229
+ : arg);
230
+ const known = locate(pending, fn, normalized);
231
+ const history = options.cache === false ? undefined : locate(previousEntries, fn, normalized)?.history;
232
+ // A hit names the same already-validated immutable argument identities. Only a
233
+ // genuinely new tuple needs another deep validation/capture traversal.
234
+ const inputs = known?.state?.kind === "ready"
235
+ ? known.state.entry.inputs
236
+ : history !== undefined && history.length !== 0
237
+ ? history[0].inputs
238
+ : captureGenerationArguments(normalized, validated);
239
+ if (known === undefined && calls.length >= maxEntries)
240
+ throw new GeometryError("COMPLEXITY_LIMIT", "Too many memo calls.");
241
+ const node = known ?? locate(pending, fn, inputs, true);
242
+ node.usedAt = ++revisionClock;
243
+ selected = undefined;
244
+ if (node.state?.kind === "evaluating")
245
+ invalid("Memo dependency cycle.");
246
+ if (node.state?.kind === "failed")
247
+ throw node.state.error;
248
+ if (node.state?.kind === "ready") {
249
+ return publish(node.state.entry, node);
250
+ }
251
+ calls.push({ fn, inputs, node });
252
+ const previous = history?.find((entry) => [...entry.parameters].every(([key, value]) => Object.is(value, key === keys ? keySignature : Reflect.get(snapshot, key))));
253
+ if (previous !== undefined && options.verifyCache !== true) {
254
+ node.state = { kind: "ready", entry: previous };
255
+ return publish(previous, node);
256
+ }
257
+ const evaluation = {
258
+ kind: "evaluating",
259
+ parameters: new Map(),
260
+ cacheable: true,
261
+ };
262
+ node.state = evaluation;
263
+ stack.push(evaluation);
264
+ try {
265
+ const result = Reflect.apply(fn, undefined, args);
266
+ assertSynchronousScopeResult(result, () => new GeometryError("INVALID_ARGUMENT", "Memo functions must be synchronous."));
267
+ assertNoFailedAssertion();
268
+ // Capture is inside the tracked scope: returning/spreading params records all fields.
269
+ let value = captureGenerationValue(result);
270
+ if (previous !== undefined) {
271
+ const comparison = compareGenerationValues(previous.value, value);
272
+ if (comparison !== "equal")
273
+ invalid(comparison === "different"
274
+ ? "Memo verification found changed output for unchanged inputs."
275
+ : "Memo verification cannot compare this output within its bounded probe.");
276
+ value = previous.value;
277
+ }
278
+ const entry = Object.freeze({
279
+ inputs,
280
+ parameters: evaluation.parameters,
281
+ value,
282
+ cacheable: evaluation.cacheable,
283
+ overheadBytes: entryOverhead(inputs, evaluation.parameters),
284
+ });
285
+ node.state = { kind: "ready", entry };
286
+ return publish(entry, node);
287
+ }
288
+ catch (error) {
289
+ node.state = { kind: "failed", error };
290
+ throw error;
291
+ }
292
+ finally {
293
+ stack.pop();
294
+ }
295
+ }
296
+ catch (error) {
297
+ if (parent !== undefined)
298
+ parent.cacheable = false;
299
+ throw error;
321
300
  }
322
- return reader;
323
301
  });
324
302
  const issue = (severity, message, metadata) => {
325
303
  assertActive();
326
304
  if (typeof message !== "string" || message.length === 0)
327
305
  invalid("Diagnostics require a nonempty message.");
328
- if (metadata?.parameterId !== undefined &&
329
- !Object.hasOwn(parameterSnapshot, metadata.parameterId))
306
+ if (metadata?.parameterId !== undefined && !Object.hasOwn(snapshot, metadata.parameterId))
330
307
  invalid("Diagnostic parameterId must name an existing parameter.");
331
308
  diagnostics.push(Object.freeze({
332
309
  severity,
@@ -341,19 +318,18 @@ export function createGenerationGraph(options, maxParts) {
341
318
  };
342
319
  const part = ((id, value) => {
343
320
  assertActive();
344
- if (!declaring || computations.evaluating)
345
- invalid("Declare parts only in the outer generation callback.");
321
+ if (!declaring || stack.length !== 0)
322
+ invalid("Declare parts only in outer generation.");
346
323
  if (!canonicalId(id) || partIds.has(id))
347
- invalid("Part IDs must be unique canonical lowercase identifiers of at most 64 characters.");
324
+ invalid("Part IDs must be unique canonical identifiers.");
348
325
  partIds.add(id);
349
326
  const configuration = typeof value === "object" && value !== null && "geometry" in value
350
327
  ? value
351
328
  : { geometry: value };
352
329
  if ("position" in configuration || "rotation" in configuration)
353
- invalid("Part placement uses transform; position and rotation are not supported.");
354
- for (const value of [configuration.geometry, configuration.transform])
355
- if (typeof value === "function" && !readerIds.has(value))
356
- invalid("Part readers must belong to this model session.");
330
+ invalid("Part placement uses transform.");
331
+ if ([configuration.geometry, configuration.transform].some((item) => typeof item === "function"))
332
+ invalid("Parts require ordinary geometry and transform values.");
357
333
  const descriptor = Object.freeze({ ...configuration, id });
358
334
  declaredParts.add(descriptor);
359
335
  return descriptor;
@@ -365,87 +341,88 @@ export function createGenerationGraph(options, maxParts) {
365
341
  if (!condition)
366
342
  issue("error", message, metadata);
367
343
  }
344
+ const context = {
345
+ params,
346
+ memo,
347
+ part,
348
+ assert,
349
+ warn: (message, metadata) => {
350
+ if (!declaring || stack.length !== 0)
351
+ invalid("Warnings must be emitted in outer generation.");
352
+ issue("warning", message, metadata);
353
+ },
354
+ };
368
355
  return {
369
- context: {
370
- params,
371
- computed,
372
- part,
373
- assert,
374
- warn: (message, metadata) => {
375
- if (!declaring || computations.evaluating)
376
- invalid("Warnings must be emitted in the outer generation callback.");
377
- issue("warning", message, metadata);
378
- },
356
+ context,
357
+ withServices(services) {
358
+ const supplied = Object.freeze({ ...context, services });
359
+ boundContext = supplied;
360
+ return supplied;
379
361
  },
380
362
  assertActive,
381
363
  diagnostics,
382
364
  finish(output) {
383
- assertSynchronousScopeResult(output, () => new GeometryError("INVALID_ARGUMENT", "Generation callbacks must be synchronous.", {
384
- operation: "generate",
385
- }));
386
- // Catching an assertion does not turn its revision into a successful snapshot.
365
+ assertSynchronousScopeResult(output, () => new GeometryError("INVALID_ARGUMENT", "Generation callbacks must be synchronous."));
387
366
  assertNoFailedAssertion();
388
367
  declaring = false;
389
- const parts = isArray(output) ? output : [output];
368
+ const parts = Array.isArray(output)
369
+ ? output
370
+ : [output];
390
371
  if (parts.length === 0)
391
372
  invalid("Generation must return at least one declared part.");
392
373
  if (parts.length > maxParts)
393
- throw new GeometryError("COMPLEXITY_LIMIT", `Output exceeds ${maxParts} parts.`, {
394
- operation: "generate",
395
- });
396
- const returnedIds = new Set();
374
+ throw new GeometryError("COMPLEXITY_LIMIT", `Output exceeds ${maxParts} parts.`);
375
+ const ids = new Set();
397
376
  for (const descriptor of parts) {
398
- if (!declaredParts.has(descriptor) || returnedIds.has(descriptor.id))
377
+ if (!declaredParts.has(descriptor) || ids.has(descriptor.id))
399
378
  invalid("Return each declared output part at most once.");
400
- returnedIds.add(descriptor.id);
379
+ ids.add(descriptor.id);
401
380
  }
402
381
  return parts;
403
382
  },
404
383
  dependencies(output) {
405
- return createModelDependencies(output, modelParameters, new Map([...computations.nodes].map(([id, node]) => [id, reusableEntry(node)])), readerIds);
406
- },
407
- computedValues() {
408
- return [...computations.nodes.values()].map((node) => reusableEntry(node)?.value);
384
+ return provenance(output, outerReads, completed);
409
385
  },
410
- retainedValues() {
411
- const retained = [];
412
- for (const node of computations.nodes.values()) {
413
- const entry = reusableEntry(node);
414
- if (entry !== undefined)
415
- retained.push(entry.value, entry.inputs, ...entry.parameters.values());
416
- }
417
- return [...retained, parameterSnapshot, inputValues];
386
+ prepareRetention,
387
+ memoValues() {
388
+ return retainedEntries().map((entry) => entry.entry.value);
418
389
  },
419
390
  commit() {
420
- const accepted = new Map();
421
- for (const [id, node] of computations.nodes) {
422
- const entry = reusableEntry(node);
423
- if (entry?.cacheable)
424
- accepted.set(id, entry);
391
+ const next = new WeakMap();
392
+ const accepted = [];
393
+ for (const entry of retainedEntries()) {
394
+ const fn = entry.fn.deref();
395
+ if (fn === undefined)
396
+ continue;
397
+ const bucket = locate(next, fn, entry.inputs, true);
398
+ (bucket.history ??= []).push(entry.entry);
399
+ accepted.push(entry);
425
400
  }
426
- committed = accepted;
401
+ committed = next;
402
+ retained = accepted;
403
+ clock = revisionClock;
427
404
  previousInput = { ...inputValues };
428
- previousParameterSnapshot = parameterSnapshot;
429
- for (const id of readers.keys())
430
- if (!computations.nodes.has(id))
431
- readers.delete(id);
405
+ previousSnapshot = snapshot;
432
406
  },
433
407
  close() {
434
408
  active = false;
435
- activeRead = undefined;
436
- computations.dispose();
437
- // Failed edits and validation probes cannot retain newly registered readers.
438
- for (const id of readers.keys())
439
- if (!committed.has(id))
440
- readers.delete(id);
409
+ calls.length = 0;
410
+ pending = new WeakMap();
411
+ previousEntries = new WeakMap();
412
+ previousRetained = [];
413
+ selected = [];
414
+ completed.length = 0;
415
+ checkAccess = () => { };
416
+ boundContext = undefined;
441
417
  },
442
418
  };
443
419
  },
444
420
  clear() {
445
- committed.clear();
446
- readers.clear();
421
+ committed = new WeakMap();
422
+ retained = [];
423
+ clock = 0;
447
424
  previousInput = {};
448
- previousParameterSnapshot = {};
425
+ previousSnapshot = {};
449
426
  },
450
427
  };
451
428
  }