@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.
- package/CHANGELOG.md +33 -0
- package/README.md +73 -57
- package/dist/api/engine.d.ts +7 -47
- package/dist/api/export-3mf.d.ts +2 -0
- package/dist/api/export-glb.d.ts +2 -0
- package/dist/api/export-stl.d.ts +2 -0
- package/dist/api/export.d.ts +160 -0
- package/dist/api/geometry.d.ts +7 -7
- package/dist/api/index.d.ts +85 -35
- package/dist/api/mesh.d.ts +35 -6
- package/dist/docs/guides/concepts.md +32 -535
- package/dist/docs/guides/fonts.md +4 -4
- package/dist/docs/guides/generation.md +52 -45
- package/dist/docs/guides/geometry-values.md +193 -0
- package/dist/docs/guides/hosting.md +53 -30
- package/dist/docs/guides/profiles-and-extrusion.md +252 -0
- package/dist/docs/guides/recipes.md +33 -780
- package/dist/docs/guides/resolution-and-inspection.md +133 -0
- package/dist/docs/guides/solid-joins.md +126 -0
- package/dist/docs/guides/standalone-model.md +1 -1
- package/dist/docs/guides/svg-and-text.md +215 -0
- package/dist/docs/guides/sweeps-and-lofts.md +179 -0
- package/dist/docs/guides/transforms-and-placement.md +313 -0
- package/dist/docs/manifest.json +2818 -5862
- package/dist/docs/reference/engine/GenerationOptions.md +10 -4
- package/dist/docs/reference/engine/GeometryResource.md +8 -2
- package/dist/docs/reference/engine/ModelDependencies.md +9 -3
- package/dist/docs/reference/engine/ModelEngine.md +9 -3
- package/dist/docs/reference/engine/ModelEngineOptions.md +9 -3
- package/dist/docs/reference/engine/ModelPart.md +9 -3
- package/dist/docs/reference/engine/ModelResult.md +8 -2
- package/dist/docs/reference/engine/ModelRunArguments.md +7 -1
- package/dist/docs/reference/engine/ModelRunOptions.md +10 -4
- package/dist/docs/reference/engine/ModelSession.md +7 -1
- package/dist/docs/reference/engine/SessionOptions.md +10 -4
- package/dist/docs/reference/engine/categories/host-lifecycle.md +3 -8
- package/dist/docs/reference/engine/checkModel.md +7 -1
- package/dist/docs/reference/engine/createModelEngine.md +10 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +9 -3
- package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
- package/dist/docs/reference/engine.md +7 -7
- package/dist/docs/reference/export/Export3mfOptions.md +24 -0
- package/dist/docs/reference/export/ExportDiagnostic.md +59 -0
- package/dist/docs/reference/export/ExportFormat.md +25 -0
- package/dist/docs/reference/export/ExportGeometry.md +39 -0
- package/dist/docs/reference/export/ExportGlbOptions.md +118 -0
- package/dist/docs/reference/export/ExportLimits.md +83 -0
- package/dist/docs/reference/export/ExportMaterial.md +47 -0
- package/dist/docs/reference/export/ExportOptions.md +94 -0
- package/dist/docs/reference/export/ExportPart.md +88 -0
- package/dist/docs/reference/export/ExportReport.md +82 -0
- package/dist/docs/reference/export/ExportSink.md +39 -0
- package/dist/docs/reference/export/ExportStlOptions.md +24 -0
- package/dist/docs/reference/export/ExportedFile.md +110 -0
- package/dist/docs/reference/export/categories/mesh-serialization.md +47 -0
- package/dist/docs/reference/export/defaultExportLimits.md +20 -0
- package/dist/docs/reference/export/export3mf.md +64 -0
- package/dist/docs/reference/export/exportGlb.md +68 -0
- package/dist/docs/reference/export/exportStl.md +64 -0
- package/dist/docs/reference/export/write3mf.md +71 -0
- package/dist/docs/reference/export/writeGlb.md +75 -0
- package/dist/docs/reference/export/writeStl.md +71 -0
- package/dist/docs/reference/export.md +21 -0
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +7 -1
- package/dist/docs/reference/geometry/Anchor3-type.md +13 -3
- package/dist/docs/reference/geometry/ArcCurve2.md +8 -2
- package/dist/docs/reference/geometry/ArcCurve3.md +8 -2
- package/dist/docs/reference/geometry/AttachOptions.md +13 -3
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +9 -3
- package/dist/docs/reference/geometry/Bevel.md +16 -2
- package/dist/docs/reference/geometry/BevelSize.md +16 -2
- package/dist/docs/reference/geometry/Bounds2-type.md +18 -4
- package/dist/docs/reference/geometry/Bounds2Data.md +22 -4
- package/dist/docs/reference/geometry/Bounds2Input.md +18 -4
- package/dist/docs/reference/geometry/Bounds2Options.md +14 -4
- package/dist/docs/reference/geometry/Bounds3-type.md +18 -4
- package/dist/docs/reference/geometry/Bounds3Data.md +18 -4
- package/dist/docs/reference/geometry/Bounds3Input.md +18 -4
- package/dist/docs/reference/geometry/Bounds3Options.md +14 -4
- package/dist/docs/reference/geometry/BoundsFit2.md +10 -4
- package/dist/docs/reference/geometry/BoundsFit3.md +10 -4
- package/dist/docs/reference/geometry/BoundsFitOptions.md +10 -4
- package/dist/docs/reference/geometry/BoxAnchorFace.md +9 -3
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +9 -3
- package/dist/docs/reference/geometry/BoxEdge.md +11 -1
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +11 -1
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +11 -1
- package/dist/docs/reference/geometry/BoxOptions.md +11 -1
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +16 -2
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/CircleContourOptions.md +12 -2
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +15 -1
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -1
- package/dist/docs/reference/geometry/CircularSampling.md +7 -1
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +7 -1
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +8 -2
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -2
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +8 -2
- package/dist/docs/reference/geometry/Contour.md +12 -2
- package/dist/docs/reference/geometry/ContourCurve.md +8 -2
- package/dist/docs/reference/geometry/ContourPoint.md +8 -2
- package/dist/docs/reference/geometry/ContourSegment.md +8 -2
- package/dist/docs/reference/geometry/CorrespondingComponent.md +12 -2
- package/dist/docs/reference/geometry/CorrespondingContour.md +12 -2
- package/dist/docs/reference/geometry/CorrespondingProfile.md +12 -2
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +12 -2
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +8 -2
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +8 -2
- package/dist/docs/reference/geometry/Curve2.md +8 -2
- package/dist/docs/reference/geometry/Curve3.md +8 -2
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +16 -2
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +9 -3
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +9 -3
- package/dist/docs/reference/geometry/CylinderOptions.md +11 -1
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +8 -2
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -1
- package/dist/docs/reference/geometry/EdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/EllipseContourOptions.md +12 -2
- package/dist/docs/reference/geometry/EndTreatments.md +12 -2
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +16 -2
- package/dist/docs/reference/geometry/ExtrudeOptions.md +13 -3
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +16 -2
- package/dist/docs/reference/geometry/FittedTextLayout.md +8 -2
- package/dist/docs/reference/geometry/Frame3.md +16 -2
- package/dist/docs/reference/geometry/GeometryError.md +11 -1
- package/dist/docs/reference/geometry/GeometryErrorCode.md +11 -1
- package/dist/docs/reference/geometry/GeometryErrorContext.md +11 -1
- package/dist/docs/reference/geometry/GeometryResolution.md +15 -1
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +16 -2
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +15 -1
- package/dist/docs/reference/geometry/GridPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +12 -2
- package/dist/docs/reference/geometry/HeightfieldOptions.md +16 -2
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +12 -2
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +9 -3
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +16 -14
- package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +17 -3
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +12 -2
- package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +12 -2
- package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +8 -2
- package/dist/docs/reference/geometry/KnuckleHingeInterval.md +8 -2
- package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +12 -2
- package/dist/docs/reference/geometry/KnuckleHingeSpec.md +12 -2
- package/dist/docs/reference/geometry/LineCurve2.md +8 -2
- package/dist/docs/reference/geometry/LineCurve3.md +8 -2
- package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/LoftCorrespondence.md +16 -2
- package/dist/docs/reference/geometry/LoftMeshStation.md +12 -2
- package/dist/docs/reference/geometry/LoftOptions.md +16 -2
- package/dist/docs/reference/geometry/LoftPlacement.md +16 -2
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +8 -2
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +12 -2
- package/dist/docs/reference/geometry/MetricFastenerSize.md +8 -2
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +8 -2
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +8 -2
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +8 -2
- package/dist/docs/reference/geometry/ModelingLimits.md +19 -1
- package/dist/docs/reference/geometry/NumericArray.md +16 -2
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +8 -2
- package/dist/docs/reference/geometry/Path2-type.md +16 -2
- package/dist/docs/reference/geometry/Path2Data.md +16 -2
- package/dist/docs/reference/geometry/Path2Input.md +16 -2
- package/dist/docs/reference/geometry/Path3-type.md +16 -2
- package/dist/docs/reference/geometry/Path3Data.md +16 -2
- package/dist/docs/reference/geometry/Path3Input.md +16 -2
- package/dist/docs/reference/geometry/PathFrame.md +8 -2
- package/dist/docs/reference/geometry/PathLocation.md +16 -2
- package/dist/docs/reference/geometry/PathNormalGuide.md +16 -2
- package/dist/docs/reference/geometry/PathOptions.md +12 -2
- package/dist/docs/reference/geometry/PathPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/PathPlacement.md +8 -2
- package/dist/docs/reference/geometry/PathResamplingOptions.md +16 -2
- package/dist/docs/reference/geometry/Pivot2Options.md +17 -3
- package/dist/docs/reference/geometry/Pivot3Options.md +17 -3
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +12 -2
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +12 -2
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +12 -2
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +12 -2
- package/dist/docs/reference/geometry/PolygonData.md +12 -2
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -2
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +11 -1
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +11 -1
- package/dist/docs/reference/geometry/PrintableThreadFit.md +12 -2
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +12 -2
- package/dist/docs/reference/geometry/Profile.md +8 -2
- package/dist/docs/reference/geometry/ProfileComponent2.md +12 -2
- package/dist/docs/reference/geometry/ProfileContour2.md +12 -2
- package/dist/docs/reference/geometry/ProfileSpan2.md +12 -2
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/RackPitchDimensions.md +8 -2
- package/dist/docs/reference/geometry/RackPitchSpec.md +8 -2
- package/dist/docs/reference/geometry/RadialPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/RadialSizing.md +11 -1
- package/dist/docs/reference/geometry/RadialSizingOptions.md +11 -1
- package/dist/docs/reference/geometry/RectangleContourOptions.md +12 -2
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +12 -2
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +12 -2
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +8 -2
- package/dist/docs/reference/geometry/RegionData.md +12 -2
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +8 -2
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +7 -1
- package/dist/docs/reference/geometry/RevolveOptions.md +16 -2
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/RowLayoutOptions.md +10 -4
- package/dist/docs/reference/geometry/SampleContourOptions.md +8 -2
- package/dist/docs/reference/geometry/SampleHelixOptions.md +8 -2
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +8 -2
- package/dist/docs/reference/geometry/SampledCurve2.md +8 -2
- package/dist/docs/reference/geometry/SampledCurve3.md +8 -2
- package/dist/docs/reference/geometry/SampledThreadHelices.md +8 -2
- package/dist/docs/reference/geometry/SideProfileCurve.md +8 -2
- package/dist/docs/reference/geometry/SideProfilePoint.md +8 -2
- package/dist/docs/reference/geometry/SideProfileSegment.md +8 -2
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +12 -2
- package/dist/docs/reference/geometry/SphereOptions.md +11 -1
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/StarContourOptions.md +12 -2
- package/dist/docs/reference/geometry/StrokeCap.md +12 -2
- package/dist/docs/reference/geometry/StrokeJoin.md +12 -2
- package/dist/docs/reference/geometry/StrokeOptions.md +12 -2
- package/dist/docs/reference/geometry/SvgImportOptions.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +8 -2
- package/dist/docs/reference/geometry/SweepOptions.md +16 -2
- package/dist/docs/reference/geometry/SweepOrientation.md +16 -2
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +12 -2
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +8 -2
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +8 -2
- package/dist/docs/reference/geometry/ThreadEndStyle.md +16 -2
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +16 -2
- package/dist/docs/reference/geometry/ThreadHandedness.md +16 -2
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +8 -2
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +16 -2
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +16 -2
- package/dist/docs/reference/geometry/ThreadProfile-type.md +16 -2
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +16 -2
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/ThreadRidgeOptions.md +16 -2
- package/dist/docs/reference/geometry/ThreadRole.md +8 -2
- package/dist/docs/reference/geometry/ThreadSolidOptions.md +12 -2
- package/dist/docs/reference/geometry/ThreadSolidPreflight.md +16 -2
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +12 -2
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +12 -2
- package/dist/docs/reference/geometry/ThreadedNutShape.md +12 -2
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +12 -2
- package/dist/docs/reference/geometry/TorusOptions.md +11 -1
- package/dist/docs/reference/geometry/Transform2-type.md +17 -3
- package/dist/docs/reference/geometry/Transform2Data.md +17 -3
- package/dist/docs/reference/geometry/Transform2Input.md +17 -3
- package/dist/docs/reference/geometry/Transform3-type.md +17 -3
- package/dist/docs/reference/geometry/Transform3Data.md +17 -3
- package/dist/docs/reference/geometry/Transform3Input.md +17 -3
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/TriangleMesh.md +20 -2
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +16 -2
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshInput.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +16 -2
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +16 -2
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/TubeOptions.md +11 -1
- package/dist/docs/reference/geometry/Vector2-type.md +17 -3
- package/dist/docs/reference/geometry/Vector2Data.md +21 -3
- package/dist/docs/reference/geometry/Vector2Input.md +17 -3
- package/dist/docs/reference/geometry/Vector3-type.md +17 -3
- package/dist/docs/reference/geometry/Vector3Data.md +17 -3
- package/dist/docs/reference/geometry/Vector3Input.md +17 -3
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +12 -2
- package/dist/docs/reference/geometry/VectorTextLayout.md +16 -2
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +12 -2
- package/dist/docs/reference/geometry/VectorTextMetrics.md +16 -2
- package/dist/docs/reference/geometry/VectorTextOptions.md +12 -2
- package/dist/docs/reference/geometry/add2.md +9 -3
- package/dist/docs/reference/geometry/add3.md +9 -3
- package/dist/docs/reference/geometry/anchor3.md +9 -3
- package/dist/docs/reference/geometry/anchorFrame3.md +8 -2
- package/dist/docs/reference/geometry/applyTransformDirection3.md +9 -3
- package/dist/docs/reference/geometry/applyTransformPoint3.md +9 -3
- package/dist/docs/reference/geometry/attachmentTransform3.md +9 -3
- package/dist/docs/reference/geometry/bounds2.md +16 -6
- package/dist/docs/reference/geometry/bounds3.md +16 -6
- package/dist/docs/reference/geometry/boundsCenter.md +10 -4
- package/dist/docs/reference/geometry/boundsSize.md +10 -4
- package/dist/docs/reference/geometry/boxAnchor3.md +9 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +4 -4
- package/dist/docs/reference/geometry/categories/curves-paths.md +2 -2
- package/dist/docs/reference/geometry/categories/mechanical.md +2 -2
- package/dist/docs/reference/geometry/categories/meshes.md +3 -3
- package/dist/docs/reference/geometry/categories/pattern-placement.md +2 -2
- package/dist/docs/reference/geometry/categories/primitive-options.md +2 -2
- package/dist/docs/reference/geometry/categories/profiles-regions.md +2 -2
- package/dist/docs/reference/geometry/categories/resolution-errors.md +1 -1
- package/dist/docs/reference/geometry/categories/transforms-math.md +3 -3
- package/dist/docs/reference/geometry/categories/vector-import.md +2 -2
- package/dist/docs/reference/geometry/circleContour.md +8 -2
- package/dist/docs/reference/geometry/closeToAxis.md +8 -2
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +8 -2
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +8 -2
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +8 -2
- package/dist/docs/reference/geometry/composeTransform3.md +9 -3
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +8 -2
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -2
- package/dist/docs/reference/geometry/contourContainsPoint.md +8 -2
- package/dist/docs/reference/geometry/cross2.md +9 -3
- package/dist/docs/reference/geometry/cross3.md +9 -3
- package/dist/docs/reference/geometry/cylinderAnchor3.md +9 -3
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +8 -2
- package/dist/docs/reference/geometry/distance2.md +9 -3
- package/dist/docs/reference/geometry/distance3.md +9 -3
- package/dist/docs/reference/geometry/distributeAlongPath.md +8 -2
- package/dist/docs/reference/geometry/dot2.md +9 -3
- package/dist/docs/reference/geometry/dot3.md +9 -3
- package/dist/docs/reference/geometry/ellipseContour.md +8 -2
- package/dist/docs/reference/geometry/eulerTransform3.md +9 -3
- package/dist/docs/reference/geometry/fitBounds.md +10 -4
- package/dist/docs/reference/geometry/fitTextLayout.md +8 -2
- package/dist/docs/reference/geometry/frameTransform3.md +9 -3
- package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +8 -2
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +8 -2
- package/dist/docs/reference/geometry/gridPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/immutableBuffer.md +12 -2
- package/dist/docs/reference/geometry/inverseTransform3.md +9 -3
- package/dist/docs/reference/geometry/isGeometryError.md +11 -1
- package/dist/docs/reference/geometry/layoutRow.md +10 -4
- package/dist/docs/reference/geometry/length2.md +9 -3
- package/dist/docs/reference/geometry/length3.md +9 -3
- package/dist/docs/reference/geometry/lerp2.md +9 -3
- package/dist/docs/reference/geometry/lerp3.md +9 -3
- package/dist/docs/reference/geometry/linearPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/matchProfiles.md +8 -2
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +8 -2
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +8 -2
- package/dist/docs/reference/geometry/normalize2.md +9 -3
- package/dist/docs/reference/geometry/normalize3.md +9 -3
- package/dist/docs/reference/geometry/normalizeContour.md +8 -2
- package/dist/docs/reference/geometry/normalizePolygon.md +8 -2
- package/dist/docs/reference/geometry/normalizeRegion.md +8 -2
- package/dist/docs/reference/geometry/path2.md +12 -2
- package/dist/docs/reference/geometry/path3.md +12 -2
- package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +8 -2
- package/dist/docs/reference/geometry/preflightSvgRegion.md +8 -2
- package/dist/docs/reference/geometry/preflightThreadedNut.md +8 -2
- package/dist/docs/reference/geometry/preflightThreadedRod.md +8 -2
- package/dist/docs/reference/geometry/projectOntoPlane3.md +9 -3
- package/dist/docs/reference/geometry/radialPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/rectangleContour.md +8 -2
- package/dist/docs/reference/geometry/rectangleProfile.md +8 -2
- package/dist/docs/reference/geometry/regionArea.md +8 -2
- package/dist/docs/reference/geometry/regionBounds.md +8 -2
- package/dist/docs/reference/geometry/regularPolygonContour.md +8 -2
- package/dist/docs/reference/geometry/resamplePolyline2.md +8 -2
- package/dist/docs/reference/geometry/resamplePolyline3.md +8 -2
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +7 -1
- package/dist/docs/reference/geometry/resolveArcSegments.md +7 -1
- package/dist/docs/reference/geometry/resolveCircularSampling.md +7 -1
- package/dist/docs/reference/geometry/resolveCircularSegments.md +7 -1
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +8 -2
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +8 -2
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +8 -2
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +8 -2
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +7 -1
- package/dist/docs/reference/geometry/resolveKnuckleHinge.md +8 -2
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +8 -2
- package/dist/docs/reference/geometry/resolveRackPitch.md +8 -2
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +8 -2
- package/dist/docs/reference/geometry/rotate2.md +9 -3
- package/dist/docs/reference/geometry/rotationTransform3.md +9 -3
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -2
- package/dist/docs/reference/geometry/sampleContour.md +8 -2
- package/dist/docs/reference/geometry/sampleCurve2.md +8 -2
- package/dist/docs/reference/geometry/sampleCurve3.md +8 -2
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +8 -2
- package/dist/docs/reference/geometry/sampleHelix.md +8 -2
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +8 -2
- package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -2
- package/dist/docs/reference/geometry/sampleSideProfile.md +8 -2
- package/dist/docs/reference/geometry/sampleTextContours.md +8 -2
- package/dist/docs/reference/geometry/sampleThreadHelices.md +8 -2
- package/dist/docs/reference/geometry/scale2.md +9 -3
- package/dist/docs/reference/geometry/scale3.md +9 -3
- package/dist/docs/reference/geometry/scaleTransform3.md +9 -3
- package/dist/docs/reference/geometry/signedContourArea.md +8 -2
- package/dist/docs/reference/geometry/starContour.md +8 -2
- package/dist/docs/reference/geometry/strokeRegionData.md +8 -2
- package/dist/docs/reference/geometry/subtract2.md +9 -3
- package/dist/docs/reference/geometry/subtract3.md +9 -3
- package/dist/docs/reference/geometry/threadProfile.md +8 -2
- package/dist/docs/reference/geometry/transform2.md +13 -3
- package/dist/docs/reference/geometry/transform3.md +13 -3
- package/dist/docs/reference/geometry/transformDeterminant3.md +9 -3
- package/dist/docs/reference/geometry/transformRegionData.md +8 -2
- package/dist/docs/reference/geometry/translationTransform3.md +9 -3
- package/dist/docs/reference/geometry/triangulateContour.md +8 -2
- package/dist/docs/reference/geometry/validateRigidTransform3.md +9 -3
- package/dist/docs/reference/geometry/validateTransform3.md +9 -3
- package/dist/docs/reference/geometry/vector2.md +13 -3
- package/dist/docs/reference/geometry/vector3.md +13 -3
- package/dist/docs/reference/geometry.md +2 -2
- package/dist/docs/reference/mesh/MeshRenderOptions.md +28 -0
- package/dist/docs/reference/mesh/RenderMesh.md +68 -0
- package/dist/docs/reference/mesh/analyze.md +12 -6
- package/dist/docs/reference/mesh/analyzeQuality.md +11 -5
- package/dist/docs/reference/mesh/bounds.md +10 -4
- package/dist/docs/reference/mesh/categories/operations.md +5 -95
- package/dist/docs/reference/mesh/centroid.md +10 -4
- package/dist/docs/reference/mesh/extrude.md +11 -5
- package/dist/docs/reference/mesh/heightfield.md +11 -5
- package/dist/docs/reference/mesh/immutable.md +13 -9
- package/dist/docs/reference/mesh/join.md +10 -4
- package/dist/docs/reference/mesh/loft.md +11 -5
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +11 -5
- package/dist/docs/reference/mesh/preflightHeightfield.md +11 -5
- package/dist/docs/reference/mesh/preflightThreadSolid.md +10 -4
- package/dist/docs/reference/mesh/render.md +57 -0
- package/dist/docs/reference/mesh/reverse.md +10 -4
- package/dist/docs/reference/mesh/revolve.md +11 -5
- package/dist/docs/reference/mesh/signature.md +11 -5
- package/dist/docs/reference/mesh/sweep.md +12 -6
- package/dist/docs/reference/mesh/threadRidge.md +10 -4
- package/dist/docs/reference/mesh/threadSolid.md +10 -4
- package/dist/docs/reference/mesh/transform.md +11 -5
- package/dist/docs/reference/mesh/validate.md +10 -4
- package/dist/docs/reference/mesh/validateSolid.md +10 -4
- package/dist/docs/reference/mesh.md +1 -1
- package/dist/docs/reference/model/CircleOptions.md +13 -7
- package/dist/docs/reference/model/DiagnosticOptions.md +7 -1
- package/dist/docs/reference/model/EllipseOptions.md +13 -7
- package/dist/docs/reference/model/GenerateCallback.md +7 -1
- package/dist/docs/reference/model/GenerateContext.md +14 -39
- package/dist/docs/reference/model/GenerationDiagnostic.md +7 -1
- package/dist/docs/reference/model/GenerationError.md +8 -2
- package/dist/docs/reference/model/HoleCutterOptions.md +17 -10
- package/dist/docs/reference/model/HoleCutterOverrun.md +10 -3
- package/dist/docs/reference/model/HoleCutterRecess.md +10 -3
- package/dist/docs/reference/model/HullOptions.md +13 -6
- package/dist/docs/reference/model/ImmutableValue.md +7 -1
- package/dist/docs/reference/model/ImplicitOptions.md +12 -6
- package/dist/docs/reference/model/JoinOptions.md +76 -0
- package/dist/docs/reference/model/JoinTransition.md +54 -0
- package/dist/docs/reference/model/KnuckleHinge-type.md +9 -3
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +7 -1
- package/dist/docs/reference/model/KnuckleHingeOptions.md +10 -4
- package/dist/docs/reference/model/KnuckleHingeWeb.md +7 -1
- package/dist/docs/reference/model/LoftStation.md +16 -9
- package/dist/docs/reference/model/Memo.md +54 -0
- package/dist/docs/reference/model/ModelProgram.md +7 -1
- package/dist/docs/reference/model/PartDeclaration.md +11 -6
- package/dist/docs/reference/model/PartGeometry.md +10 -4
- package/dist/docs/reference/model/PartOptions.md +11 -6
- package/dist/docs/reference/model/PatternSource.md +10 -4
- package/dist/docs/reference/model/PlaneOptions.md +11 -4
- package/dist/docs/reference/model/PolygonOptions.md +20 -14
- package/dist/docs/reference/model/Profile.md +10 -4
- package/dist/docs/reference/model/RectangleOptions.md +28 -22
- package/dist/docs/reference/model/RegularPolygonOptions.md +13 -7
- package/dist/docs/reference/model/Section.md +68 -74
- package/dist/docs/reference/model/SectionHullOptions.md +13 -6
- package/dist/docs/reference/model/SectionInspection.md +10 -4
- package/dist/docs/reference/model/SectionOffsetJoin.md +10 -4
- package/dist/docs/reference/model/SectionOffsetOptions.md +12 -6
- package/dist/docs/reference/model/Solid.md +101 -53
- package/dist/docs/reference/model/SolidInspection.md +10 -4
- package/dist/docs/reference/model/SolidSegmentHit.md +11 -5
- package/dist/docs/reference/model/StarOptions.md +24 -18
- package/dist/docs/reference/model/SvgOrigin.md +10 -4
- package/dist/docs/reference/model/SvgPathSectionOptions.md +14 -8
- package/dist/docs/reference/model/SvgSectionOptions.md +16 -10
- package/dist/docs/reference/model/TextSectionOptions.md +14 -8
- package/dist/docs/reference/model/box.md +18 -11
- package/dist/docs/reference/model/categories/boolean-operations.md +8 -2
- package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -7
- package/dist/docs/reference/model/categories/explicit-profiles.md +1 -14
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +6 -20
- package/dist/docs/reference/model/categories/generation.md +5 -10
- package/dist/docs/reference/model/categories/hinges.md +1 -4
- package/dist/docs/reference/model/categories/mesh-inspection.md +2 -6
- package/dist/docs/reference/model/categories/primitives.md +5 -21
- package/dist/docs/reference/model/categories/sections.md +4 -15
- package/dist/docs/reference/model/categories/threads.md +2 -39
- package/dist/docs/reference/model/categories/transforms-placement.md +4 -33
- package/dist/docs/reference/model/circle.md +10 -4
- package/dist/docs/reference/model/cylinder.md +13 -6
- package/dist/docs/reference/model/ellipse.md +10 -4
- package/dist/docs/reference/model/extrude.md +26 -19
- package/dist/docs/reference/model/generate.md +8 -2
- package/dist/docs/reference/model/gridPattern.md +15 -9
- package/dist/docs/reference/model/heightfield.md +10 -4
- package/dist/docs/reference/model/holeCutter.md +10 -3
- package/dist/docs/reference/model/hull.md +9 -2
- package/dist/docs/reference/model/implicit.md +9 -3
- package/dist/docs/reference/model/internalThreadCutter.md +23 -17
- package/dist/docs/reference/model/intersect.md +9 -2
- package/dist/docs/reference/model/join.md +89 -0
- package/dist/docs/reference/model/knuckleHinge.md +7 -1
- package/dist/docs/reference/model/linearPattern.md +15 -9
- package/dist/docs/reference/model/loft.md +31 -24
- package/dist/docs/reference/model/matchProfiles.md +14 -8
- package/dist/docs/reference/model/minkowskiSum.md +9 -2
- package/dist/docs/reference/model/pathPattern.md +25 -19
- package/dist/docs/reference/model/polygon.md +13 -7
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +25 -19
- package/dist/docs/reference/model/preflightThreadedNut.md +29 -23
- package/dist/docs/reference/model/preflightThreadedRod.md +25 -19
- package/dist/docs/reference/model/radialPattern.md +15 -9
- package/dist/docs/reference/model/rectangle.md +14 -8
- package/dist/docs/reference/model/regularPolygon.md +10 -4
- package/dist/docs/reference/model/revolve.md +22 -15
- package/dist/docs/reference/model/solidFromMesh.md +12 -6
- package/dist/docs/reference/model/sphere.md +13 -6
- package/dist/docs/reference/model/star.md +12 -6
- package/dist/docs/reference/model/stroke.md +21 -15
- package/dist/docs/reference/model/svgPathSection.md +12 -6
- package/dist/docs/reference/model/svgSection.md +13 -7
- package/dist/docs/reference/model/sweep.md +27 -20
- package/dist/docs/reference/model/textSection.md +15 -9
- package/dist/docs/reference/model/threadRidge.md +21 -15
- package/dist/docs/reference/model/threadedNut.md +27 -21
- package/dist/docs/reference/model/threadedRod.md +23 -17
- package/dist/docs/reference/model/torus.md +20 -13
- package/dist/docs/reference/model/tube.md +13 -6
- package/dist/docs/reference/model/union.md +9 -2
- package/dist/docs/reference/model.md +3 -8
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -1
- package/dist/docs/reference/text/VectorFont.md +39 -33
- package/dist/docs/reference/text/VectorFontOptions.md +7 -1
- package/dist/docs/reference/text/categories/font-preparation.md +1 -13
- package/dist/docs/reference/text/prepareVectorFont.md +7 -1
- package/dist/docs/reference/text.md +1 -1
- package/dist/engine/finalization.js +2 -74
- package/dist/engine/index.js +2 -2
- package/dist/engine/native/construction-mesh.js +41 -0
- package/dist/engine/native/material-components.js +2 -51
- package/dist/engine/native/mesh-observation.js +55 -0
- package/dist/engine/native/regions.js +2 -1
- package/dist/engine/operations/context.js +2 -0
- package/dist/engine/operations/extrusion-finishing.js +17 -16
- package/dist/engine/operations/join-collar-profile.js +120 -0
- package/dist/engine/operations/join.js +508 -0
- package/dist/engine/recipe-realization.js +1 -1
- package/dist/engine/session/dependencies.js +89 -42
- package/dist/engine/session/graph.js +319 -342
- package/dist/engine/session/native-cache.js +1 -1
- package/dist/engine/session/session.js +5 -5
- package/dist/engine/session/snapshot-cache.js +2 -2
- package/dist/export/3mf.js +190 -0
- package/dist/export/capture.js +178 -0
- package/dist/export/glb.js +209 -0
- package/dist/export/index.js +5 -0
- package/dist/export/limits.js +18 -0
- package/dist/export/stl.js +105 -0
- package/dist/export/types.js +1 -0
- package/dist/export/writer.js +54 -0
- package/dist/geometry/bounds-value.js +4 -4
- package/dist/geometry/immutable-buffer.js +4 -6
- package/dist/geometry/join-geometry.js +839 -0
- package/dist/geometry/mesh/mesh-render.js +205 -0
- package/dist/geometry/mesh/mesh-solid-intersections.js +43 -17
- package/dist/geometry/mesh/mesh-solid.js +6 -2
- package/dist/geometry/mesh-api.js +1 -0
- package/dist/geometry/region-offset.js +278 -0
- package/dist/geometry/regions.js +11 -1
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +2 -2
- package/dist/model/immutable-generation-data.js +13 -13
- package/dist/model/join.js +1 -0
- package/dist/model/operations.js +20 -0
- package/dist/model/recipe-declaration.js +1 -0
- package/dist/model/shape-handles.js +1 -0
- package/package.json +18 -1
- package/dist/docs/reference/engine/Export3mfOptions.md +0 -46
- package/dist/docs/reference/engine/ExportMeshPart.md +0 -31
- package/dist/docs/reference/engine/ModelingLimits.md +0 -121
- package/dist/docs/reference/engine/export3mf.md +0 -55
- package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +0 -79
- package/dist/docs/reference/mesh/Bevel.md +0 -18
- package/dist/docs/reference/mesh/BevelSize.md +0 -14
- package/dist/docs/reference/mesh/Bounds2.md +0 -125
- package/dist/docs/reference/mesh/Bounds2Data.md +0 -43
- package/dist/docs/reference/mesh/Bounds2Input.md +0 -19
- package/dist/docs/reference/mesh/Bounds3.md +0 -125
- package/dist/docs/reference/mesh/Bounds3Data.md +0 -43
- package/dist/docs/reference/mesh/Bounds3Input.md +0 -19
- package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +0 -14
- package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +0 -97
- package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +0 -60
- package/dist/docs/reference/mesh/CurveSamplingOptions.md +0 -69
- package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +0 -77
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +0 -129
- package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +0 -81
- package/dist/docs/reference/mesh/Frame3.md +0 -62
- package/dist/docs/reference/mesh/GeometryResolution.md +0 -74
- package/dist/docs/reference/mesh/GeometrySamplingLimits.md +0 -66
- package/dist/docs/reference/mesh/GeometryToleranceOptions.md +0 -46
- package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +0 -18
- package/dist/docs/reference/mesh/HeightfieldOptions.md +0 -72
- package/dist/docs/reference/mesh/HeightfieldPreflight.md +0 -58
- package/dist/docs/reference/mesh/ImmutableBuffer.md +0 -108
- package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +0 -43
- package/dist/docs/reference/mesh/LoftCorrespondence.md +0 -24
- package/dist/docs/reference/mesh/LoftMeshStation.md +0 -31
- package/dist/docs/reference/mesh/LoftOptions.md +0 -88
- package/dist/docs/reference/mesh/LoftPlacement.md +0 -70
- package/dist/docs/reference/mesh/ModelingLimits.md +0 -130
- package/dist/docs/reference/mesh/NumericArray.md +0 -14
- package/dist/docs/reference/mesh/Path2.md +0 -197
- package/dist/docs/reference/mesh/Path2Data.md +0 -50
- package/dist/docs/reference/mesh/Path2Input.md +0 -20
- package/dist/docs/reference/mesh/Path3.md +0 -197
- package/dist/docs/reference/mesh/Path3Data.md +0 -50
- package/dist/docs/reference/mesh/Path3Input.md +0 -20
- package/dist/docs/reference/mesh/PathLocation.md +0 -69
- package/dist/docs/reference/mesh/PathNormalGuide.md +0 -43
- package/dist/docs/reference/mesh/PathResamplingOptions.md +0 -84
- package/dist/docs/reference/mesh/Pivot2Options.md +0 -26
- package/dist/docs/reference/mesh/Pivot3Options.md +0 -26
- package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +0 -14
- package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +0 -160
- package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +0 -124
- package/dist/docs/reference/mesh/PlanarPatchQuality.md +0 -194
- package/dist/docs/reference/mesh/RevolveOptions.md +0 -91
- package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +0 -38
- package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +0 -79
- package/dist/docs/reference/mesh/SweepOptions.md +0 -113
- package/dist/docs/reference/mesh/SweepOrientation.md +0 -113
- package/dist/docs/reference/mesh/ThreadEndStyle.md +0 -14
- package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +0 -117
- package/dist/docs/reference/mesh/ThreadHandedness.md +0 -14
- package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +0 -14
- package/dist/docs/reference/mesh/ThreadLeadInShape.md +0 -14
- package/dist/docs/reference/mesh/ThreadProfile.md +0 -86
- package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +0 -53
- package/dist/docs/reference/mesh/ThreadProfileSpec.md +0 -23
- package/dist/docs/reference/mesh/ThreadRidgeOptions.md +0 -145
- package/dist/docs/reference/mesh/ThreadSolidOptions.md +0 -222
- package/dist/docs/reference/mesh/ThreadSolidPreflight.md +0 -58
- package/dist/docs/reference/mesh/Transform2.md +0 -256
- package/dist/docs/reference/mesh/Transform2Data.md +0 -14
- package/dist/docs/reference/mesh/Transform2Input.md +0 -19
- package/dist/docs/reference/mesh/Transform3.md +0 -296
- package/dist/docs/reference/mesh/Transform3Data.md +0 -17
- package/dist/docs/reference/mesh/Transform3Input.md +0 -19
- package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +0 -96
- package/dist/docs/reference/mesh/TriangleMesh.md +0 -34
- package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +0 -129
- package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +0 -79
- package/dist/docs/reference/mesh/TriangleMeshInput.md +0 -19
- package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +0 -79
- package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +0 -43
- package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +0 -194
- package/dist/docs/reference/mesh/TriangleMeshSignature.md +0 -111
- package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +0 -46
- package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +0 -34
- package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +0 -131
- package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +0 -55
- package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +0 -95
- package/dist/docs/reference/mesh/Vector2.md +0 -270
- package/dist/docs/reference/mesh/Vector2Data.md +0 -14
- package/dist/docs/reference/mesh/Vector2Input.md +0 -19
- package/dist/docs/reference/mesh/Vector3.md +0 -282
- package/dist/docs/reference/mesh/Vector3Data.md +0 -14
- package/dist/docs/reference/mesh/Vector3Input.md +0 -19
- package/dist/docs/reference/model/AcmeThreadProfileSpec.md +0 -80
- package/dist/docs/reference/model/Anchor3.md +0 -55
- package/dist/docs/reference/model/AttachOptions.md +0 -69
- package/dist/docs/reference/model/Bevel.md +0 -19
- package/dist/docs/reference/model/BevelSize.md +0 -15
- package/dist/docs/reference/model/Bounds2-type.md +0 -125
- package/dist/docs/reference/model/Bounds2Data.md +0 -44
- package/dist/docs/reference/model/Bounds2Input.md +0 -19
- package/dist/docs/reference/model/Bounds2Options.md +0 -110
- package/dist/docs/reference/model/Bounds3-type.md +0 -125
- package/dist/docs/reference/model/Bounds3Data.md +0 -44
- package/dist/docs/reference/model/Bounds3Input.md +0 -19
- package/dist/docs/reference/model/Bounds3Options.md +0 -110
- package/dist/docs/reference/model/BoxEdge.md +0 -15
- package/dist/docs/reference/model/BoxEdgeSelection.md +0 -19
- package/dist/docs/reference/model/BoxEdgeTreatments.md +0 -20
- package/dist/docs/reference/model/BoxOptions.md +0 -92
- package/dist/docs/reference/model/ButtressPressureFlankSide.md +0 -15
- package/dist/docs/reference/model/ButtressThreadProfileSpec.md +0 -98
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +0 -35
- package/dist/docs/reference/model/CircleContourOptions.md +0 -21
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -62
- package/dist/docs/reference/model/Computed.md +0 -44
- package/dist/docs/reference/model/ComputedValue.md +0 -24
- package/dist/docs/reference/model/Contour.md +0 -24
- package/dist/docs/reference/model/CorrespondingComponent.md +0 -46
- package/dist/docs/reference/model/CorrespondingContour.md +0 -46
- package/dist/docs/reference/model/CorrespondingProfile.md +0 -22
- package/dist/docs/reference/model/CorrespondingProfileStation.md +0 -27
- package/dist/docs/reference/model/CurveSamplingOptions.md +0 -68
- package/dist/docs/reference/model/CustomThreadProfileSpec.md +0 -78
- package/dist/docs/reference/model/CylinderOptions.md +0 -58
- package/dist/docs/reference/model/EdgeTreatment.md +0 -22
- package/dist/docs/reference/model/EllipseContourOptions.md +0 -21
- package/dist/docs/reference/model/EndTreatments.md +0 -39
- package/dist/docs/reference/model/ExtrudeMeshOptions.md +0 -133
- package/dist/docs/reference/model/ExtrudeOptions.md +0 -149
- package/dist/docs/reference/model/ExtrusionSamplingOptions.md +0 -84
- package/dist/docs/reference/model/Frame3.md +0 -63
- package/dist/docs/reference/model/GeometryError.md +0 -102
- package/dist/docs/reference/model/GeometryErrorCode.md +0 -15
- package/dist/docs/reference/model/GeometryErrorContext.md +0 -35
- package/dist/docs/reference/model/GeometryResolution.md +0 -70
- package/dist/docs/reference/model/GeometrySamplingLimits.md +0 -62
- package/dist/docs/reference/model/GeometryToleranceOptions.md +0 -46
- package/dist/docs/reference/model/GridPatternOptions.md +0 -50
- package/dist/docs/reference/model/HeightfieldOptions.md +0 -68
- package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -108
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -43
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -216
- package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +0 -77
- package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +0 -47
- package/dist/docs/reference/model/KnuckleHingeSpec.md +0 -18
- package/dist/docs/reference/model/LinearPatternOptions.md +0 -39
- package/dist/docs/reference/model/LoftCorrespondence.md +0 -27
- package/dist/docs/reference/model/LoftOptions.md +0 -91
- package/dist/docs/reference/model/LoftPlacement.md +0 -73
- package/dist/docs/reference/model/MatchProfilesOptions.md +0 -35
- package/dist/docs/reference/model/ModelingLimits.md +0 -126
- package/dist/docs/reference/model/NumericArray.md +0 -14
- package/dist/docs/reference/model/Path2-type.md +0 -196
- package/dist/docs/reference/model/Path2Data.md +0 -50
- package/dist/docs/reference/model/Path2Input.md +0 -20
- package/dist/docs/reference/model/Path3-type.md +0 -196
- package/dist/docs/reference/model/Path3Data.md +0 -50
- package/dist/docs/reference/model/Path3Input.md +0 -20
- package/dist/docs/reference/model/PathLocation.md +0 -69
- package/dist/docs/reference/model/PathNormalGuide.md +0 -46
- package/dist/docs/reference/model/PathOptions.md +0 -38
- package/dist/docs/reference/model/PathPatternOptions.md +0 -48
- package/dist/docs/reference/model/PathResamplingOptions.md +0 -84
- package/dist/docs/reference/model/Pivot2Options.md +0 -28
- package/dist/docs/reference/model/Pivot3Options.md +0 -28
- package/dist/docs/reference/model/PolygonData.md +0 -44
- package/dist/docs/reference/model/PrimitiveAttachment.md +0 -39
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +0 -110
- package/dist/docs/reference/model/PrintableThreadFit.md +0 -15
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +0 -51
- package/dist/docs/reference/model/ProfileComponent2.md +0 -46
- package/dist/docs/reference/model/ProfileContour2.md +0 -36
- package/dist/docs/reference/model/ProfileSpan2.md +0 -47
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +0 -41
- package/dist/docs/reference/model/RadialPatternOptions.md +0 -59
- package/dist/docs/reference/model/RadialSizing.md +0 -15
- package/dist/docs/reference/model/RadialSizingOptions.md +0 -40
- package/dist/docs/reference/model/RectangleContourOptions.md +0 -72
- package/dist/docs/reference/model/RectangleCornerTreatment.md +0 -40
- package/dist/docs/reference/model/RectangleCornerTreatments.md +0 -20
- package/dist/docs/reference/model/RegionData.md +0 -19
- package/dist/docs/reference/model/RevolveOptions.md +0 -94
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +0 -96
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +0 -76
- package/dist/docs/reference/model/SphereOptions.md +0 -20
- package/dist/docs/reference/model/SquareThreadProfileSpec.md +0 -80
- package/dist/docs/reference/model/StarContourOptions.md +0 -81
- package/dist/docs/reference/model/StrokeCap.md +0 -16
- package/dist/docs/reference/model/StrokeJoin.md +0 -16
- package/dist/docs/reference/model/StrokeOptions.md +0 -91
- package/dist/docs/reference/model/SweepOptions.md +0 -116
- package/dist/docs/reference/model/SweepOrientation.md +0 -116
- package/dist/docs/reference/model/ThreadBevelOptions.md +0 -35
- package/dist/docs/reference/model/ThreadEndStyle.md +0 -15
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +0 -118
- package/dist/docs/reference/model/ThreadHandedness.md +0 -15
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +0 -15
- package/dist/docs/reference/model/ThreadLeadInShape.md +0 -15
- package/dist/docs/reference/model/ThreadProfile.md +0 -87
- package/dist/docs/reference/model/ThreadProfileBaseSpec.md +0 -54
- package/dist/docs/reference/model/ThreadProfileSpec.md +0 -24
- package/dist/docs/reference/model/ThreadRidgeOptions.md +0 -141
- package/dist/docs/reference/model/ThreadSolidPreflight.md +0 -59
- package/dist/docs/reference/model/ThreadedNutOptions.md +0 -263
- package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -111
- package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
- package/dist/docs/reference/model/ThreadedRodOptions.md +0 -216
- package/dist/docs/reference/model/TorusOptions.md +0 -110
- package/dist/docs/reference/model/Transform2-type.md +0 -257
- package/dist/docs/reference/model/Transform2Data.md +0 -16
- package/dist/docs/reference/model/Transform2Input.md +0 -21
- package/dist/docs/reference/model/Transform3-type.md +0 -297
- package/dist/docs/reference/model/Transform3Data.md +0 -19
- package/dist/docs/reference/model/Transform3Input.md +0 -21
- package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +0 -97
- package/dist/docs/reference/model/TriangleMesh.md +0 -34
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -129
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
- package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +0 -131
- package/dist/docs/reference/model/TriangularThreadProfileSpec.md +0 -96
- package/dist/docs/reference/model/TubeOptions.md +0 -67
- package/dist/docs/reference/model/Vector2-type.md +0 -271
- package/dist/docs/reference/model/Vector2Data.md +0 -15
- package/dist/docs/reference/model/Vector2Input.md +0 -21
- package/dist/docs/reference/model/Vector3-type.md +0 -283
- package/dist/docs/reference/model/Vector3Data.md +0 -15
- package/dist/docs/reference/model/Vector3Input.md +0 -21
- package/dist/docs/reference/model/VectorTextLayout.md +0 -40
- package/dist/docs/reference/model/VectorTextMetrics.md +0 -100
- package/dist/docs/reference/model/bounds2.md +0 -37
- package/dist/docs/reference/model/bounds3.md +0 -37
- package/dist/docs/reference/model/categories/bounds.md +0 -38
- package/dist/docs/reference/model/categories/contracts.md +0 -16
- package/dist/docs/reference/model/categories/core-values-errors.md +0 -44
- package/dist/docs/reference/model/categories/paths.md +0 -42
- package/dist/docs/reference/model/categories/resolution.md +0 -20
- package/dist/docs/reference/model/immutableBuffer.md +0 -49
- package/dist/docs/reference/model/isGeometryError.md +0 -34
- package/dist/docs/reference/model/path2.md +0 -54
- package/dist/docs/reference/model/path3.md +0 -49
- package/dist/docs/reference/model/transform2.md +0 -46
- package/dist/docs/reference/model/transform3.md +0 -48
- package/dist/docs/reference/model/vector2.md +0 -40
- package/dist/docs/reference/model/vector3.md +0 -47
- package/dist/docs/reference/text/Bounds2Data.md +0 -34
- package/dist/docs/reference/text/Vector2Data.md +0 -7
- package/dist/docs/reference/text/VectorTextArcBaseline.md +0 -53
- package/dist/docs/reference/text/VectorTextLayout.md +0 -34
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +0 -111
- package/dist/docs/reference/text/VectorTextMetrics.md +0 -94
- package/dist/docs/reference/text/VectorTextOptions.md +0 -50
- package/dist/engine/export-3mf.js +0 -23
- package/dist/engine/serialize-3mf.js +0 -116
- /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 {
|
|
4
|
+
import { captureGenerationArguments, captureGenerationValue, compareGenerationValues, generationDataEntries, generationValueBytes, isImmutableGenerationValue, } from "../../model/immutable-generation-data.js";
|
|
5
5
|
import { assertSynchronousScopeResult } from "../native/ownership.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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: "
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
|
46
|
+
/** Owns bounded successful memo histories and provisional per-revision evaluation. */
|
|
227
47
|
export function createGenerationGraph(options, maxParts) {
|
|
228
|
-
let committed = new
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
|
246
|
-
let
|
|
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
|
|
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
|
-
|
|
70
|
+
checkAccess();
|
|
257
71
|
};
|
|
258
72
|
const assertNoFailedAssertion = () => {
|
|
259
73
|
if (assertionFailure !== undefined)
|
|
260
74
|
throw assertionFailure;
|
|
261
75
|
};
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
|
|
268
|
-
|
|
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
|
|
198
|
+
ownKeys(target) {
|
|
277
199
|
assertActive();
|
|
278
|
-
|
|
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
|
|
203
|
+
has(target, key) {
|
|
287
204
|
assertActive();
|
|
288
|
-
|
|
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
|
|
208
|
+
getOwnPropertyDescriptor(target, key) {
|
|
296
209
|
assertActive();
|
|
210
|
+
record(keys, keySignature);
|
|
297
211
|
const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
|
|
298
|
-
|
|
299
|
-
|
|
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
|
-
|
|
311
|
-
const computed = ((id, callback, dependencies) => {
|
|
217
|
+
const memo = ((fn, ...args) => {
|
|
312
218
|
assertActive();
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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 ||
|
|
345
|
-
invalid("Declare parts only in
|
|
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
|
|
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
|
|
354
|
-
|
|
355
|
-
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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)
|
|
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
|
-
|
|
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) ||
|
|
377
|
+
if (!declaredParts.has(descriptor) || ids.has(descriptor.id))
|
|
399
378
|
invalid("Return each declared output part at most once.");
|
|
400
|
-
|
|
379
|
+
ids.add(descriptor.id);
|
|
401
380
|
}
|
|
402
381
|
return parts;
|
|
403
382
|
},
|
|
404
383
|
dependencies(output) {
|
|
405
|
-
return
|
|
406
|
-
},
|
|
407
|
-
computedValues() {
|
|
408
|
-
return [...computations.nodes.values()].map((node) => reusableEntry(node)?.value);
|
|
384
|
+
return provenance(output, outerReads, completed);
|
|
409
385
|
},
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
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
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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 =
|
|
401
|
+
committed = next;
|
|
402
|
+
retained = accepted;
|
|
403
|
+
clock = revisionClock;
|
|
427
404
|
previousInput = { ...inputValues };
|
|
428
|
-
|
|
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
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
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
|
|
446
|
-
|
|
421
|
+
committed = new WeakMap();
|
|
422
|
+
retained = [];
|
|
423
|
+
clock = 0;
|
|
447
424
|
previousInput = {};
|
|
448
|
-
|
|
425
|
+
previousSnapshot = {};
|
|
449
426
|
},
|
|
450
427
|
};
|
|
451
428
|
}
|