@faicad/faijs 0.29.5 → 0.30.9
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/NOTICE +6 -5
- package/dist/api/api-namespace.d.ts +1 -1
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +53 -1
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/appearance.d.ts +0 -2
- package/dist/api/appearance.d.ts.map +1 -1
- package/dist/api/appearance.js +0 -2
- package/dist/api/appearance.js.map +1 -1
- package/dist/api/assembly/entities.d.ts +1 -1
- package/dist/api/assembly/entities.js +1 -1
- package/dist/api/assembly/entities.js.map +1 -1
- package/dist/api/assembly/index.d.ts +1 -1
- package/dist/api/assembly/index.js +1 -1
- package/dist/api/assembly/index.js.map +1 -1
- package/dist/api/assembly/joints.d.ts +33 -15
- package/dist/api/assembly/joints.d.ts.map +1 -1
- package/dist/api/assembly/joints.js +31 -13
- package/dist/api/assembly/joints.js.map +1 -1
- package/dist/api/assembly/preview.d.ts +1 -1
- package/dist/api/assembly/preview.js +1 -1
- package/dist/api/assembly/preview.js.map +1 -1
- package/dist/api/assembly/solve.d.ts +1 -1
- package/dist/api/assembly/solve.js +1 -1
- package/dist/api/assembly/solve.js.map +1 -1
- package/dist/api/assembly/solvers/assembly-tree.d.ts +1 -1
- package/dist/api/assembly/solvers/assembly-tree.js +1 -1
- package/dist/api/assembly/solvers/assembly-tree.js.map +1 -1
- package/dist/api/assembly/solvers/chain-solver.d.ts +2 -2
- package/dist/api/assembly/solvers/chain-solver.js.map +1 -1
- package/dist/api/assembly/solvers/global-solver.d.ts +1 -2
- package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
- package/dist/api/assembly/solvers/global-solver.js +3 -4
- package/dist/api/assembly/solvers/global-solver.js.map +1 -1
- package/dist/api/assembly/solvers/joints-kinematics.js +1 -1
- package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -1
- package/dist/api/assembly/solvers/linalg.d.ts +2 -2
- package/dist/api/assembly/solvers/linalg.js +2 -2
- package/dist/api/assembly/solvers/linalg.js.map +1 -1
- package/dist/api/assembly/solvers/types.d.ts +2 -5
- package/dist/api/assembly/solvers/types.d.ts.map +1 -1
- package/dist/api/assembly/solvers/types.js +1 -4
- package/dist/api/assembly/solvers/types.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +7 -6
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-mirror/booleanFns.d.ts +3 -3
- package/dist/api/brep-mirror/booleanFns.js +5 -5
- package/dist/api/brep-mirror/booleanFns.js.map +1 -1
- package/dist/api/brep-mirror/compoundFns.d.ts +1 -1
- package/dist/api/brep-mirror/compoundFns.js +4 -4
- package/dist/api/brep-mirror/compoundFns.js.map +1 -1
- package/dist/api/brep-mirror/healingFns.d.ts +4 -4
- package/dist/api/brep-mirror/healingFns.js +4 -4
- package/dist/api/brep-mirror/healingFns.js.map +1 -1
- package/dist/api/brep-mirror/hullFns.d.ts +2 -2
- package/dist/api/brep-mirror/hullFns.js +2 -2
- package/dist/api/brep-mirror/hullFns.js.map +1 -1
- package/dist/api/brep-mirror/patternFns.d.ts +5 -5
- package/dist/api/brep-mirror/patternFns.js +10 -10
- package/dist/api/brep-mirror/patternFns.js.map +1 -1
- package/dist/api/brep-mirror/primitiveFns.d.ts +4 -4
- package/dist/api/brep-mirror/primitiveFns.js +4 -4
- package/dist/api/brep-mirror/primitiveFns.js.map +1 -1
- package/dist/api/brep-mirror/roofFns.d.ts +3 -3
- package/dist/api/brep-mirror/roofFns.js +7 -7
- package/dist/api/brep-mirror/roofFns.js.map +1 -1
- package/dist/api/brep-mirror/sweepFns.d.ts +7 -7
- package/dist/api/brep-mirror/sweepFns.js +14 -14
- package/dist/api/brep-mirror/sweepFns.js.map +1 -1
- package/dist/api/brep-mirror/threadFns.d.ts +1 -1
- package/dist/api/brep-mirror/threadFns.js +1 -1
- package/dist/api/brep-mirror/threadFns.js.map +1 -1
- package/dist/api/brep-mirror/topologyFns.d.ts +5 -5
- package/dist/api/brep-mirror/topologyFns.js +8 -8
- package/dist/api/brep-mirror/topologyFns.js.map +1 -1
- package/dist/api/brep-operations/booleanFns.d.ts +40 -0
- package/dist/api/brep-operations/booleanFns.d.ts.map +1 -0
- package/dist/api/brep-operations/booleanFns.js +104 -0
- package/dist/api/brep-operations/booleanFns.js.map +1 -0
- package/dist/api/brep-operations/brepHelpers.d.ts +55 -0
- package/dist/api/brep-operations/brepHelpers.d.ts.map +1 -0
- package/dist/api/brep-operations/brepHelpers.js +131 -0
- package/dist/api/brep-operations/brepHelpers.js.map +1 -0
- package/dist/api/brep-operations/compoundFns.d.ts +46 -0
- package/dist/api/brep-operations/compoundFns.d.ts.map +1 -0
- package/dist/api/brep-operations/compoundFns.js +299 -0
- package/dist/api/brep-operations/compoundFns.js.map +1 -0
- package/dist/api/brep-operations/healingFns.d.ts +78 -0
- package/dist/api/brep-operations/healingFns.d.ts.map +1 -0
- package/dist/api/brep-operations/healingFns.js +294 -0
- package/dist/api/brep-operations/healingFns.js.map +1 -0
- package/dist/api/brep-operations/hullFns.d.ts +20 -0
- package/dist/api/brep-operations/hullFns.d.ts.map +1 -0
- package/dist/api/brep-operations/hullFns.js +46 -0
- package/dist/api/brep-operations/hullFns.js.map +1 -0
- package/dist/api/brep-operations/joinery-brep.d.ts +172 -0
- package/dist/api/brep-operations/joinery-brep.d.ts.map +1 -0
- package/dist/api/brep-operations/joinery-brep.js +463 -0
- package/dist/api/brep-operations/joinery-brep.js.map +1 -0
- package/dist/api/brep-operations/patternFns.d.ts +43 -0
- package/dist/api/brep-operations/patternFns.d.ts.map +1 -0
- package/dist/api/brep-operations/patternFns.js +178 -0
- package/dist/api/brep-operations/patternFns.js.map +1 -0
- package/dist/api/brep-operations/primitiveFns.d.ts +42 -0
- package/dist/api/brep-operations/primitiveFns.d.ts.map +1 -0
- package/dist/api/brep-operations/primitiveFns.js +104 -0
- package/dist/api/brep-operations/primitiveFns.js.map +1 -0
- package/dist/api/brep-operations/roofFns.d.ts +24 -0
- package/dist/api/brep-operations/roofFns.d.ts.map +1 -0
- package/dist/api/brep-operations/roofFns.js +229 -0
- package/dist/api/brep-operations/roofFns.js.map +1 -0
- package/dist/api/brep-operations/straightSkeleton.d.ts +36 -0
- package/dist/api/brep-operations/straightSkeleton.d.ts.map +1 -0
- package/dist/api/brep-operations/straightSkeleton.js +431 -0
- package/dist/api/brep-operations/straightSkeleton.js.map +1 -0
- package/dist/api/brep-operations/sweepFns.d.ts +60 -0
- package/dist/api/brep-operations/sweepFns.d.ts.map +1 -0
- package/dist/api/brep-operations/sweepFns.js +323 -0
- package/dist/api/brep-operations/sweepFns.js.map +1 -0
- package/dist/api/brep-operations/threadFns.d.ts +83 -0
- package/dist/api/brep-operations/threadFns.d.ts.map +1 -0
- package/dist/api/brep-operations/threadFns.js +138 -0
- package/dist/api/brep-operations/threadFns.js.map +1 -0
- package/dist/api/brep-operations/topologyFns.d.ts +90 -0
- package/dist/api/brep-operations/topologyFns.d.ts.map +1 -0
- package/dist/api/brep-operations/topologyFns.js +276 -0
- package/dist/api/brep-operations/topologyFns.js.map +1 -0
- package/dist/api/brep-topology.d.ts +1 -1
- package/dist/api/brep-topology.d.ts.map +1 -1
- package/dist/api/brep-topology.js +1 -1
- package/dist/api/brep-topology.js.map +1 -1
- package/dist/api/brepjs-compat/index.d.ts +1 -1
- package/dist/api/brepjs-compat/index.js +3 -3
- package/dist/api/brepjs-compat/index.js.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.js +3 -4
- package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -1
- package/dist/api/curve-sketch/index.d.ts +235 -0
- package/dist/api/curve-sketch/index.d.ts.map +1 -0
- package/dist/api/curve-sketch/index.js +487 -0
- package/dist/api/curve-sketch/index.js.map +1 -0
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +3 -2
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/export-brep.d.ts +41 -0
- package/dist/api/export-brep.d.ts.map +1 -0
- package/dist/api/export-brep.js +58 -0
- package/dist/api/export-brep.js.map +1 -0
- package/dist/api/export-stl.d.ts +50 -0
- package/dist/api/export-stl.d.ts.map +1 -0
- package/dist/api/export-stl.js +99 -0
- package/dist/api/export-stl.js.map +1 -0
- package/dist/api/extrude.d.ts +8 -11
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +11 -14
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +2 -2
- package/dist/api/fillet-variable.js +2 -2
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +2 -4
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +2 -4
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/2d.d.ts +4 -0
- package/dist/api/generated/2d.d.ts.map +1 -1
- package/dist/api/generated/2d.js +4 -0
- package/dist/api/generated/2d.js.map +1 -1
- package/dist/api/generated/core.d.ts +4 -0
- package/dist/api/generated/core.d.ts.map +1 -1
- package/dist/api/generated/core.js +4 -0
- package/dist/api/generated/core.js.map +1 -1
- package/dist/api/generated/gear.d.ts +4 -0
- package/dist/api/generated/gear.d.ts.map +1 -1
- package/dist/api/generated/gear.js +4 -0
- package/dist/api/generated/gear.js.map +1 -1
- package/dist/api/generated/io.d.ts +4 -0
- package/dist/api/generated/io.d.ts.map +1 -1
- package/dist/api/generated/io.js +4 -0
- package/dist/api/generated/io.js.map +1 -1
- package/dist/api/generated/kernel.d.ts +4 -0
- package/dist/api/generated/kernel.d.ts.map +1 -1
- package/dist/api/generated/kernel.js +4 -0
- package/dist/api/generated/kernel.js.map +1 -1
- package/dist/api/generated/measurement.d.ts +21 -21
- package/dist/api/generated/measurement.d.ts.map +1 -1
- package/dist/api/generated/measurement.js +25 -21
- package/dist/api/generated/measurement.js.map +1 -1
- package/dist/api/generated/ns.d.ts +4 -0
- package/dist/api/generated/ns.d.ts.map +1 -1
- package/dist/api/generated/ns.js +4 -0
- package/dist/api/generated/ns.js.map +1 -1
- package/dist/api/generated/operations.d.ts +32 -32
- package/dist/api/generated/operations.d.ts.map +1 -1
- package/dist/api/generated/operations.js +52 -48
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/projection.d.ts +4 -0
- package/dist/api/generated/projection.d.ts.map +1 -1
- package/dist/api/generated/projection.js +4 -0
- package/dist/api/generated/projection.js.map +1 -1
- package/dist/api/generated/query.d.ts +4 -0
- package/dist/api/generated/query.d.ts.map +1 -1
- package/dist/api/generated/query.js +4 -0
- package/dist/api/generated/query.js.map +1 -1
- package/dist/api/generated/sketching.d.ts +2 -2
- package/dist/api/generated/sketching.d.ts.map +1 -1
- package/dist/api/generated/sketching.js +7 -3
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/text.d.ts +4 -0
- package/dist/api/generated/text.d.ts.map +1 -1
- package/dist/api/generated/text.js +4 -0
- package/dist/api/generated/text.js.map +1 -1
- package/dist/api/generated/topology.d.ts +45 -45
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +67 -63
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/generated/view.d.ts +4 -0
- package/dist/api/generated/view.d.ts.map +1 -1
- package/dist/api/generated/view.js +4 -0
- package/dist/api/generated/view.js.map +1 -1
- package/dist/api/geom-types/constants.d.ts +11 -0
- package/dist/api/geom-types/constants.d.ts.map +1 -0
- package/dist/api/geom-types/constants.js +11 -0
- package/dist/api/geom-types/constants.js.map +1 -0
- package/dist/api/geom-types/index.d.ts +21 -0
- package/dist/api/geom-types/index.d.ts.map +1 -0
- package/dist/api/geom-types/index.js +22 -0
- package/dist/api/geom-types/index.js.map +1 -0
- package/dist/api/geom-types/planeOps.d.ts +98 -0
- package/dist/api/geom-types/planeOps.d.ts.map +1 -0
- package/dist/api/geom-types/planeOps.js +170 -0
- package/dist/api/geom-types/planeOps.js.map +1 -0
- package/dist/api/geom-types/planeTypes.d.ts +24 -0
- package/dist/api/geom-types/planeTypes.d.ts.map +1 -0
- package/dist/api/geom-types/planeTypes.js +8 -0
- package/dist/api/geom-types/planeTypes.js.map +1 -0
- package/dist/api/geom-types/types.d.ts +64 -0
- package/dist/api/geom-types/types.d.ts.map +1 -0
- package/dist/api/geom-types/types.js +48 -0
- package/dist/api/geom-types/types.js.map +1 -0
- package/dist/api/geom-types/vecOps.d.ts +124 -0
- package/dist/api/geom-types/vecOps.d.ts.map +1 -0
- package/dist/api/geom-types/vecOps.js +202 -0
- package/dist/api/geom-types/vecOps.js.map +1 -0
- package/dist/api/geom.d.ts.map +1 -1
- package/dist/api/geom.js +6 -5
- package/dist/api/geom.js.map +1 -1
- package/dist/api/half-space.d.ts +56 -0
- package/dist/api/half-space.d.ts.map +1 -0
- package/dist/api/half-space.js +82 -0
- package/dist/api/half-space.js.map +1 -0
- package/dist/api/helix.d.ts +10 -1
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +19 -3
- package/dist/api/helix.js.map +1 -1
- package/dist/api/index.d.ts +15 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +29 -8
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.d.ts +4 -30
- package/dist/api/internal/compat-op.d.ts.map +1 -1
- package/dist/api/internal/compat-op.js +10 -42
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/internal/compat-projection.d.ts +5 -5
- package/dist/api/internal/compat-projection.js +5 -5
- package/dist/api/internal/compat-projection.js.map +1 -1
- package/dist/api/internal/dual-form-args.d.ts +0 -2
- package/dist/api/internal/dual-form-args.d.ts.map +1 -1
- package/dist/api/internal/dual-form-args.js +1 -3
- package/dist/api/internal/dual-form-args.js.map +1 -1
- package/dist/api/internal/l3-bridge.d.ts +5 -37
- package/dist/api/internal/l3-bridge.d.ts.map +1 -1
- package/dist/api/internal/l3-bridge.js +7 -76
- package/dist/api/internal/l3-bridge.js.map +1 -1
- package/dist/api/internal/profile-wire.d.ts +1 -1
- package/dist/api/internal/profile-wire.js +1 -1
- package/dist/api/internal/profile-wire.js.map +1 -1
- package/dist/api/internal/result-unwrap.d.ts +4 -6
- package/dist/api/internal/result-unwrap.d.ts.map +1 -1
- package/dist/api/internal/result-unwrap.js +4 -6
- package/dist/api/internal/result-unwrap.js.map +1 -1
- package/dist/api/knurl.d.ts.map +1 -1
- package/dist/api/knurl.js +5 -3
- package/dist/api/knurl.js.map +1 -1
- package/dist/api/loft.d.ts +2 -2
- package/dist/api/loft.d.ts.map +1 -1
- package/dist/api/loft.js +2 -2
- package/dist/api/loft.js.map +1 -1
- package/dist/api/measurement/index.d.ts +3 -3
- package/dist/api/measurement/index.js +3 -3
- package/dist/api/measurement/index.js.map +1 -1
- package/dist/api/meta.d.ts +0 -2
- package/dist/api/meta.d.ts.map +1 -1
- package/dist/api/meta.js +0 -2
- package/dist/api/meta.js.map +1 -1
- package/dist/api/offset2d.d.ts +49 -0
- package/dist/api/offset2d.d.ts.map +1 -0
- package/dist/api/offset2d.js +86 -0
- package/dist/api/offset2d.js.map +1 -0
- package/dist/api/pattern.js +3 -3
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +7 -6
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/replicate.d.ts +2 -2
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +12 -12
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/result.d.ts +1 -1
- package/dist/api/result.js +1 -1
- package/dist/api/result.js.map +1 -1
- package/dist/api/revolve.d.ts +2 -2
- package/dist/api/revolve.js +3 -3
- package/dist/api/revolve.js.map +1 -1
- package/dist/api/screw.d.ts +1 -1
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +5 -4
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts.map +1 -1
- package/dist/api/sdf.js +3 -2
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/shape-type/index.d.ts +141 -0
- package/dist/api/shape-type/index.d.ts.map +1 -0
- package/dist/api/shape-type/index.js +182 -0
- package/dist/api/shape-type/index.js.map +1 -0
- package/dist/api/shell.d.ts +2 -2
- package/dist/api/shell.js +2 -2
- package/dist/api/shell.js.map +1 -1
- package/dist/api/solid-from-faces.d.ts +45 -0
- package/dist/api/solid-from-faces.d.ts.map +1 -0
- package/dist/api/solid-from-faces.js +72 -0
- package/dist/api/solid-from-faces.js.map +1 -0
- package/dist/api/solid-offset/index.d.ts +67 -0
- package/dist/api/solid-offset/index.d.ts.map +1 -0
- package/dist/api/solid-offset/index.js +132 -0
- package/dist/api/solid-offset/index.js.map +1 -0
- package/dist/api/surface/arg-spec.d.ts +35 -33
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +222 -224
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface-face/index.d.ts +104 -0
- package/dist/api/surface-face/index.d.ts.map +1 -0
- package/dist/api/surface-face/index.js +217 -0
- package/dist/api/surface-face/index.js.map +1 -0
- package/dist/api/surface.d.ts +44 -0
- package/dist/api/surface.d.ts.map +1 -0
- package/dist/api/surface.js +66 -0
- package/dist/api/surface.js.map +1 -0
- package/dist/api/sweep.d.ts +59 -9
- package/dist/api/sweep.d.ts.map +1 -1
- package/dist/api/sweep.js +11 -6
- package/dist/api/sweep.js.map +1 -1
- package/dist/api/thicken.d.ts +1 -1
- package/dist/api/thicken.js +1 -1
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/transform.d.ts +5 -5
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +11 -10
- package/dist/api/transform.js.map +1 -1
- package/dist/api/view/cameraFns.d.ts +1 -1
- package/dist/api/view/cameraFns.d.ts.map +1 -1
- package/dist/api/view/cameraFns.js +1 -1
- package/dist/api/view/cameraFns.js.map +1 -1
- package/dist/api/view/index.d.ts +0 -2
- package/dist/api/view/index.d.ts.map +1 -1
- package/dist/api/view/index.js +0 -2
- package/dist/api/view/index.js.map +1 -1
- package/dist/api/view/projectionPlanes.d.ts +1 -1
- package/dist/api/view/projectionPlanes.d.ts.map +1 -1
- package/dist/api/view/projectionPlanes.js.map +1 -1
- package/dist/api/view/view-camera.d.ts +7 -9
- package/dist/api/view/view-camera.d.ts.map +1 -1
- package/dist/api/view/view-camera.js +4 -6
- package/dist/api/view/view-camera.js.map +1 -1
- package/dist/api/view/view-projection.d.ts +0 -2
- package/dist/api/view/view-projection.d.ts.map +1 -1
- package/dist/api/view/view-projection.js +0 -2
- package/dist/api/view/view-projection.js.map +1 -1
- package/dist/api/view/view-sheet.d.ts +0 -2
- package/dist/api/view/view-sheet.d.ts.map +1 -1
- package/dist/api/view/view-sheet.js +0 -2
- package/dist/api/view/view-sheet.js.map +1 -1
- package/dist/api/view-export/index.d.ts +97 -0
- package/dist/api/view-export/index.d.ts.map +1 -0
- package/dist/api/view-export/index.js +118 -0
- package/dist/api/view-export/index.js.map +1 -0
- package/dist/brep/brep-ops.d.ts +89 -1
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +176 -10
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/brep-topology.d.ts +20 -0
- package/dist/brep/brep-topology.d.ts.map +1 -1
- package/dist/brep/brep-topology.js +46 -0
- package/dist/brep/brep-topology.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -1
- package/dist/brep/engine/adapters/occt.js +7 -7
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +2 -3
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js +1 -2
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/registry.d.ts +1 -1
- package/dist/brep/engine/registry.js +1 -1
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/engine/types.d.ts +2 -2
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +2 -2
- package/dist/brep/handle-bridge.js +2 -2
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/index.d.ts +6 -3
- package/dist/brep/index.d.ts.map +1 -1
- package/dist/brep/index.js +6 -3
- package/dist/brep/index.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +2 -2
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/browser.d.ts +2 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -4
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +3 -10
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +3 -9
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +12 -3
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts +6 -3
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +31 -9
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/interp/env.d.ts +1 -1
- package/dist/cad-runtime/interp/env.js.map +1 -1
- package/dist/cad-runtime/lib-id.d.ts +0 -2
- package/dist/cad-runtime/lib-id.d.ts.map +1 -1
- package/dist/cad-runtime/lib-id.js +0 -2
- package/dist/cad-runtime/lib-id.js.map +1 -1
- package/dist/cad-runtime/live-shapes.d.ts +3 -5
- package/dist/cad-runtime/live-shapes.d.ts.map +1 -1
- package/dist/cad-runtime/live-shapes.js +8 -10
- package/dist/cad-runtime/live-shapes.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +3 -3
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +21 -7
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +45 -6
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +4 -3
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +2 -2
- package/dist/define-op.js.map +1 -1
- package/dist/geometry2d/bridge/plane.d.ts +1 -1
- package/dist/geometry2d/bridge/plane.js +1 -1
- package/dist/geometry2d/bridge/plane.js.map +1 -1
- package/dist/geometry2d/curve2d.d.ts +1 -1
- package/dist/geometry2d/curve2d.js +1 -1
- package/dist/geometry2d/curve2d.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/io/fai-zip/container-read.d.ts +16 -0
- package/dist/io/fai-zip/container-read.d.ts.map +1 -1
- package/dist/io/fai-zip/container-read.js +22 -0
- package/dist/io/fai-zip/container-read.js.map +1 -1
- package/dist/io/fai-zip/index.d.ts +1 -1
- package/dist/io/fai-zip/index.d.ts.map +1 -1
- package/dist/io/fai-zip/index.js +1 -1
- package/dist/io/fai-zip/index.js.map +1 -1
- package/dist/lang/code-to-args.d.ts.map +1 -1
- package/dist/lang/code-to-args.js +10 -1
- package/dist/lang/code-to-args.js.map +1 -1
- package/dist/lang/determinism-scanner.d.ts.map +1 -1
- package/dist/lang/determinism-scanner.js +22 -9
- package/dist/lang/determinism-scanner.js.map +1 -1
- package/dist/lang/metadata-extractor.d.ts +27 -6
- package/dist/lang/metadata-extractor.d.ts.map +1 -1
- package/dist/lang/metadata-extractor.js +88 -8
- package/dist/lang/metadata-extractor.js.map +1 -1
- package/dist/lang/parse-error.d.ts +4 -0
- package/dist/lang/parse-error.d.ts.map +1 -1
- package/dist/lang/parse-error.js.map +1 -1
- package/dist/lang/security-scanner.d.ts +27 -2
- package/dist/lang/security-scanner.d.ts.map +1 -1
- package/dist/lang/security-scanner.js +29 -2
- package/dist/lang/security-scanner.js.map +1 -1
- package/dist/lang/source-edit.d.ts +2 -2
- package/dist/lang/source-edit.js.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +36 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +36 -0
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/mesh/import-model.d.ts +94 -0
- package/dist/mesh/import-model.d.ts.map +1 -0
- package/dist/mesh/import-model.js +15 -0
- package/dist/mesh/import-model.js.map +1 -0
- package/dist/mesh/index.d.ts +19 -58
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +19 -70
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +33 -16
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +144 -39
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/primitives.js +1 -1
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/threemf-bambu.d.ts +12 -1
- package/dist/mesh/threemf-bambu.d.ts.map +1 -1
- package/dist/mesh/threemf-bambu.js +68 -16
- package/dist/mesh/threemf-bambu.js.map +1 -1
- package/dist/mesh/threemf-loader.d.ts +14 -1
- package/dist/mesh/threemf-loader.d.ts.map +1 -1
- package/dist/mesh/threemf-loader.js +24 -7
- package/dist/mesh/threemf-loader.js.map +1 -1
- package/dist/mesh/transform.d.ts +1 -1
- package/dist/mesh/transform.js +1 -1
- package/dist/mesh/transform.js.map +1 -1
- package/dist/mesh/types.d.ts +5 -5
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/node-host/cli.d.ts +49 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +125 -19
- package/dist/node-host/cli.js.map +1 -1
- package/dist/node-host/execute-script.d.ts +55 -0
- package/dist/node-host/execute-script.d.ts.map +1 -0
- package/dist/node-host/execute-script.js +46 -0
- package/dist/node-host/execute-script.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +3 -0
- package/dist/node.js.map +1 -1
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +260 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +1 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.js +875 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.js.map +1 -0
- package/dist/occt-kernel/hullGeometry.d.ts +2 -2
- package/dist/occt-kernel/hullGeometry.js +2 -3
- package/dist/occt-kernel/hullGeometry.js.map +1 -1
- package/dist/occt-kernel/hullOps.d.ts +3 -3
- package/dist/occt-kernel/hullOps.js +4 -4
- package/dist/occt-kernel/hullOps.js.map +1 -1
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +31 -4
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
- package/dist/occt-kernel/occtKernel.js +18 -0
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/occt-scan/recognize.d.ts +58 -0
- package/dist/occt-scan/recognize.d.ts.map +1 -0
- package/dist/occt-scan/recognize.js +216 -0
- package/dist/occt-scan/recognize.js.map +1 -0
- package/dist/primitives/brep-primitives.js +7 -7
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/result/bug.d.ts +1 -1
- package/dist/result/bug.js +1 -1
- package/dist/result/bug.js.map +1 -1
- package/dist/result/errors.d.ts +2 -2
- package/dist/result/errors.d.ts.map +1 -1
- package/dist/result/errors.js +1 -1
- package/dist/result/errors.js.map +1 -1
- package/dist/result/vec3.d.ts +1 -1
- package/dist/result/vec3.js +1 -1
- package/dist/result/vec3.js.map +1 -1
- package/dist/runtime-state.d.ts +16 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +27 -0
- package/dist/runtime-state.js.map +1 -1
- package/dist/script-globals.d.ts +24 -0
- package/dist/script-globals.d.ts.map +1 -0
- package/dist/script-globals.js +24 -0
- package/dist/script-globals.js.map +1 -0
- package/dist/shape.d.ts +24 -0
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +40 -0
- package/dist/shape.js.map +1 -1
- package/dist/topology/naming/lineage.d.ts +3 -2
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/weapp.d.ts +1 -1
- package/dist/weapp.js +1 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +8 -10
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal — occt-scan 识别层(仅供 `scripts/scan-occt-op-coverage.ts` 与回归测试使用,
|
|
3
|
+
* 不是 faijs 公开 API,勿从业务代码 import)。
|
|
4
|
+
*
|
|
5
|
+
* 识别「occt 原生内核直调」的源码分析。判据(方案 §7.2 缺陷 1 + §7.5 陷阱 1):
|
|
6
|
+
* 只有从 `getOcctKernel()` / `getKernel()` / `initOcctWasm()` 拿到的变量才是 occt 原生
|
|
7
|
+
* 句柄;`const kernel = getBrepApi()`(L1 契约句柄)的调用**不**算 occt 直调——把它的
|
|
8
|
+
* 方法调用算进去会把中立 op 全误判成平台 op。
|
|
9
|
+
*
|
|
10
|
+
* 用 TypeScript AST(ts.createSourceFile)做语法层分析,按符号声明位置判定,能穿透
|
|
11
|
+
* §7.2 要求的三类形态(正则在此处两头都错,见方案):
|
|
12
|
+
* - `const x = <handle>.<m>.bind(k)` → x(...) 与绑定点的 `<m>` 都计入
|
|
13
|
+
* - `(<cast>).<m>.call(k, ...)` → `<m>` 计入
|
|
14
|
+
* - `const { m } = <handle>` 解构 → 别名 m(...) 调用计入
|
|
15
|
+
* 以及最普通 `<handle>.<m>(...)` 链式直调。
|
|
16
|
+
*/
|
|
17
|
+
import ts from 'typescript';
|
|
18
|
+
/** 返回函数调用表达式的被调用名(裸标识符或属性名),否则 null。 */
|
|
19
|
+
function calleeName(callee) {
|
|
20
|
+
if (!callee)
|
|
21
|
+
return null;
|
|
22
|
+
if (ts.isIdentifier(callee))
|
|
23
|
+
return callee.text;
|
|
24
|
+
if (ts.isPropertyAccessExpression(callee))
|
|
25
|
+
return callee.name.text;
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
/** 去掉括号/类型断言/`as`/`!`/`satisfies`,拿到最内层表达式。 */
|
|
29
|
+
function unwrap(n) {
|
|
30
|
+
let x = n;
|
|
31
|
+
for (;;) {
|
|
32
|
+
if (ts.isParenthesizedExpression(x))
|
|
33
|
+
x = x.expression;
|
|
34
|
+
else if (ts.isAsExpression(x))
|
|
35
|
+
x = x.expression;
|
|
36
|
+
else if (ts.isTypeAssertionExpression(x))
|
|
37
|
+
x = x.expression;
|
|
38
|
+
else if (ts.isNonNullExpression(x))
|
|
39
|
+
x = x.expression;
|
|
40
|
+
else if (ts.isSatisfiesExpression?.(x)) {
|
|
41
|
+
x = x.expression;
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
return x;
|
|
47
|
+
}
|
|
48
|
+
function makeIsKernel(kernelIds) {
|
|
49
|
+
return (e) => {
|
|
50
|
+
const u = unwrap(e);
|
|
51
|
+
if (ts.isIdentifier(u))
|
|
52
|
+
return kernelIds.has(u.text);
|
|
53
|
+
if (ts.isCallExpression(u)) {
|
|
54
|
+
const nm = calleeName(u.expression);
|
|
55
|
+
return nm === 'getOcctKernel' || nm === 'getKernel' || nm === 'initOcctWasm';
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** 绑定模式里导出的名字。 */
|
|
61
|
+
function bindingNames(name) {
|
|
62
|
+
if (ts.isIdentifier(name))
|
|
63
|
+
return [name.text];
|
|
64
|
+
const out = [];
|
|
65
|
+
if (ts.isObjectBindingPattern(name)) {
|
|
66
|
+
for (const el of name.elements) {
|
|
67
|
+
if (ts.isBindingElement(el)) {
|
|
68
|
+
const prop = el.propertyName ? el.propertyName.getText() : el.name.getText();
|
|
69
|
+
out.push(prop);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (ts.isArrayBindingPattern(name)) {
|
|
74
|
+
for (const el of name.elements) {
|
|
75
|
+
if (ts.isBindingElement(el) && ts.isIdentifier(el.name))
|
|
76
|
+
out.push(el.name.text);
|
|
77
|
+
else if (ts.isBindingElement(el))
|
|
78
|
+
out.push(...bindingNames(el.name));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 收集文件里「持有 occt 内核」的标识符集合。
|
|
85
|
+
*
|
|
86
|
+
* - 直接获取:`const k = getOcctKernel()` / `await initOcctWasm()` / `getKernel()`。
|
|
87
|
+
* - 派生别名不动点:`const raw = k as unknown as T` 等其初始化式判定为内核派生者的
|
|
88
|
+
* 局部 const 也收为内核标识(覆盖层层 cast/别名)。
|
|
89
|
+
*
|
|
90
|
+
* 注意:`getBrepApi()` 不在内核获取器之列,故 `const kernel = getBrepApi()` 的 `kernel`
|
|
91
|
+
* 不会进入返回值——§7.5 陷阱 1 的防线。
|
|
92
|
+
*
|
|
93
|
+
* @param src 待扫描的 TS 源码文本。
|
|
94
|
+
* @returns 内核标识符(变量名)集合,按字典序排列。
|
|
95
|
+
*/
|
|
96
|
+
export function kernelIdentifiers(src) {
|
|
97
|
+
const sf = ts.createSourceFile('recognize.ts', src, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
98
|
+
const KERNEL_ACQUIRE = /(?:const|let|var)\s+([A-Za-z_$][\w$]*)[^;=\n]*?=\s*(?:await\s+)?[^;\n]*(?:getOcctKernel|getKernel|initOcctWasm)\s*\(\s*\)/g;
|
|
99
|
+
const kernelIds = new Set();
|
|
100
|
+
KERNEL_ACQUIRE.lastIndex = 0;
|
|
101
|
+
for (let m = KERNEL_ACQUIRE.exec(src); m; m = KERNEL_ACQUIRE.exec(src))
|
|
102
|
+
kernelIds.add(m[1]);
|
|
103
|
+
// 收集文件内所有变声明的「名 → 初始化式」。
|
|
104
|
+
const initByVar = new Map();
|
|
105
|
+
(function collect(n) {
|
|
106
|
+
if (ts.isVariableDeclaration(n) && n.initializer) {
|
|
107
|
+
for (const nm of bindingNames(n.name))
|
|
108
|
+
initByVar.set(nm, n.initializer);
|
|
109
|
+
}
|
|
110
|
+
ts.forEachChild(n, collect);
|
|
111
|
+
})(sf);
|
|
112
|
+
const isKernelInDecl = makeIsKernel(kernelIds);
|
|
113
|
+
let changed = true;
|
|
114
|
+
while (changed) {
|
|
115
|
+
changed = false;
|
|
116
|
+
for (const [name, init] of initByVar) {
|
|
117
|
+
if (!kernelIds.has(name) && isKernelInDecl(init)) {
|
|
118
|
+
kernelIds.add(name);
|
|
119
|
+
changed = true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return new Set([...kernelIds].sort());
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 收集「方法别名」:把 occt 方法绑定/解构到局部变量后,后续 `alias(...)` 调用要还原
|
|
127
|
+
* 成底层方法名。形态:
|
|
128
|
+
* - `const x = <内核值>.<m>.bind(k)` → x ⇒ m(覆盖 `raw.linearPattern.bind(k)` 后 `nativeLP(...)`)
|
|
129
|
+
* - `const { m } = <内核值>` / `{ m: mm }` → m ⇒ m / mm ⇒ m(解构)
|
|
130
|
+
* 只认内核派生基;`kernel = getBrepApi()` 的 .m 不作数(§7.5 陷阱 1)。
|
|
131
|
+
*
|
|
132
|
+
* @param src 待扫描的 TS 源码文本。
|
|
133
|
+
* @param kernelIds 内核标识符集合(来自 {@link kernelIdentifiers})。
|
|
134
|
+
* @returns 别名 → 底层 occt 方法名的映射。
|
|
135
|
+
*/
|
|
136
|
+
export function methodAliases(src, kernelIds) {
|
|
137
|
+
const sf = ts.createSourceFile('aliases.ts', src, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
138
|
+
const isKernelIdent = makeIsKernel(kernelIds);
|
|
139
|
+
const alias = new Map();
|
|
140
|
+
for (const stmt of sf.statements) {
|
|
141
|
+
if (!ts.isVariableStatement(stmt))
|
|
142
|
+
continue;
|
|
143
|
+
for (const d of stmt.declarationList.declarations) {
|
|
144
|
+
if (!d.initializer)
|
|
145
|
+
continue;
|
|
146
|
+
// 形态 1:`const x = <值>.<m>.bind(k)` / `<值>.<m>.call(k, …)` ,<值> 是内核
|
|
147
|
+
if (ts.isIdentifier(d.name) || ts.isObjectBindingPattern(d.name)) {
|
|
148
|
+
const names = bindingNames(d.name);
|
|
149
|
+
// 解构出别名:const { m: mm } = kernel
|
|
150
|
+
if (ts.isObjectBindingPattern(d.name)) {
|
|
151
|
+
for (const el of d.name.elements) {
|
|
152
|
+
if (ts.isBindingElement(el)) {
|
|
153
|
+
const mth = el.propertyName ? el.propertyName.getText() : el.name.getText();
|
|
154
|
+
alias.set(el.name.getText(), mth);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (names.length === 1 && ts.isCallExpression(d.initializer)) {
|
|
159
|
+
const init = d.initializer;
|
|
160
|
+
const outerName = calleeName(init.expression);
|
|
161
|
+
if (outerName === 'bind' || outerName === 'call') {
|
|
162
|
+
const prop = init.expression;
|
|
163
|
+
if (ts.isPropertyAccessExpression(prop) && ts.isPropertyAccessExpression(prop.expression) && isKernelIdent(prop.expression.expression)) {
|
|
164
|
+
alias.set(names[0], prop.name.text);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return alias;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* 返回 src 里被调用的、基类是内核派生的 occt 方法名(与 occtNames 交集)。
|
|
175
|
+
*
|
|
176
|
+
* 覆盖形态(§7.2 缺陷 1):
|
|
177
|
+
* - `<k>.method(` 普通直调(k 为内核标识)
|
|
178
|
+
* - `getOcctKernel().method(...)` 链式(调用表达式基即内核)→ 属性访问基命中
|
|
179
|
+
* - `raw.method.bind(k)` / `(<cast>).m.call(k,…)` 绑定点属性访问把 `<m>` 计入
|
|
180
|
+
* - `const x = k.m.bind(...); x(...)` const 绑定别名调用
|
|
181
|
+
* - `const { m } = k; m(...)` 解构别名调用
|
|
182
|
+
*
|
|
183
|
+
* @param src 待扫描的 TS 源码文本。
|
|
184
|
+
* @param occtNames occt 方法名全集(用于交集过滤)。
|
|
185
|
+
* @returns 被调用的 occt 方法名集合。
|
|
186
|
+
*/
|
|
187
|
+
export function kernelCallsIn(src, occtNames) {
|
|
188
|
+
const sf = ts.createSourceFile('scan.ts', src, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
189
|
+
const kernelIds = kernelIdentifiers(src);
|
|
190
|
+
const alias = methodAliases(src, kernelIds);
|
|
191
|
+
const isKernelIdent = makeIsKernel(kernelIds);
|
|
192
|
+
const out = new Set();
|
|
193
|
+
const visit = (n) => {
|
|
194
|
+
// 别名调用:`nativeLP(...)` / `lp(...)` / `m(...)` 还原底层方法名
|
|
195
|
+
if (ts.isCallExpression(n)) {
|
|
196
|
+
const nm = calleeName(n.expression);
|
|
197
|
+
if (nm && alias.has(nm)) {
|
|
198
|
+
const real = alias.get(nm);
|
|
199
|
+
if (occtNames.has(real))
|
|
200
|
+
out.add(real);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// 内核派生基 . 属性访问 → 属性是 occt 方法(属性访问即方法引用/调用)
|
|
204
|
+
if (ts.isPropertyAccessExpression(n)) {
|
|
205
|
+
if (isKernelIdent(n.expression)) {
|
|
206
|
+
const name = n.name.text;
|
|
207
|
+
if (occtNames.has(name))
|
|
208
|
+
out.add(name);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
ts.forEachChild(n, visit);
|
|
212
|
+
};
|
|
213
|
+
visit(sf);
|
|
214
|
+
return out;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=recognize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recognize.js","sourceRoot":"","sources":["../../src/occt-scan/recognize.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @internal — occt-scan 识别层(仅供 `scripts/scan-occt-op-coverage.ts` 与回归测试使用,\n * 不是 faijs 公开 API,勿从业务代码 import)。\n *\n * 识别「occt 原生内核直调」的源码分析。判据(方案 §7.2 缺陷 1 + §7.5 陷阱 1):\n * 只有从 `getOcctKernel()` / `getKernel()` / `initOcctWasm()` 拿到的变量才是 occt 原生\n * 句柄;`const kernel = getBrepApi()`(L1 契约句柄)的调用**不**算 occt 直调——把它的\n * 方法调用算进去会把中立 op 全误判成平台 op。\n *\n * 用 TypeScript AST(ts.createSourceFile)做语法层分析,按符号声明位置判定,能穿透\n * §7.2 要求的三类形态(正则在此处两头都错,见方案):\n * - `const x = <handle>.<m>.bind(k)` → x(...) 与绑定点的 `<m>` 都计入\n * - `(<cast>).<m>.call(k, ...)` → `<m>` 计入\n * - `const { m } = <handle>` 解构 → 别名 m(...) 调用计入\n * 以及最普通 `<handle>.<m>(...)` 链式直调。\n */\n\nimport ts from 'typescript'\n\n/** 返回函数调用表达式的被调用名(裸标识符或属性名),否则 null。 */\nfunction calleeName(callee: ts.Expression | undefined): string | null {\n if (!callee) return null\n if (ts.isIdentifier(callee)) return callee.text\n if (ts.isPropertyAccessExpression(callee)) return callee.name.text\n return null\n}\n\n/** 去掉括号/类型断言/`as`/`!`/`satisfies`,拿到最内层表达式。 */\nfunction unwrap(n: ts.Expression): ts.Expression {\n let x = n\n for (;;) {\n if (ts.isParenthesizedExpression(x)) x = x.expression\n else if (ts.isAsExpression(x)) x = x.expression\n else if (ts.isTypeAssertionExpression(x)) x = x.expression\n else if (ts.isNonNullExpression(x)) x = x.expression\n else if ((ts as unknown as { isSatisfiesExpression?: (x: ts.Node) => boolean }).isSatisfiesExpression?.(x)) {\n x = (x as ts.Expression & { expression: ts.Expression }).expression\n } else break\n }\n return x\n}\n\n/** 一个表达式是否「判定为 occt 内核派生句柄」(依据 kernelIds + 直接获取器)。 */\ntype IsKernel = (e: ts.Expression) => boolean\n\nfunction makeIsKernel(kernelIds: Set<string>): IsKernel {\n return (e) => {\n const u = unwrap(e)\n if (ts.isIdentifier(u)) return kernelIds.has(u.text)\n if (ts.isCallExpression(u)) {\n const nm = calleeName(u.expression)\n return nm === 'getOcctKernel' || nm === 'getKernel' || nm === 'initOcctWasm'\n }\n return false\n }\n}\n\n/** 绑定模式里导出的名字。 */\nfunction bindingNames(name: ts.BindingName): string[] {\n if (ts.isIdentifier(name)) return [name.text]\n const out: string[] = []\n if (ts.isObjectBindingPattern(name)) {\n for (const el of name.elements) {\n if (ts.isBindingElement(el)) {\n const prop = el.propertyName ? el.propertyName.getText() : el.name.getText()\n out.push(prop)\n }\n }\n } else if (ts.isArrayBindingPattern(name)) {\n for (const el of name.elements) {\n if (ts.isBindingElement(el) && ts.isIdentifier(el.name)) out.push(el.name.text)\n else if (ts.isBindingElement(el)) out.push(...bindingNames(el.name))\n }\n }\n return out\n}\n\n/**\n * 收集文件里「持有 occt 内核」的标识符集合。\n *\n * - 直接获取:`const k = getOcctKernel()` / `await initOcctWasm()` / `getKernel()`。\n * - 派生别名不动点:`const raw = k as unknown as T` 等其初始化式判定为内核派生者的\n * 局部 const 也收为内核标识(覆盖层层 cast/别名)。\n *\n * 注意:`getBrepApi()` 不在内核获取器之列,故 `const kernel = getBrepApi()` 的 `kernel`\n * 不会进入返回值——§7.5 陷阱 1 的防线。\n *\n * @param src 待扫描的 TS 源码文本。\n * @returns 内核标识符(变量名)集合,按字典序排列。\n */\nexport function kernelIdentifiers(src: string): Set<string> {\n const sf = ts.createSourceFile('recognize.ts', src, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS)\n\n const KERNEL_ACQUIRE =\n /(?:const|let|var)\\s+([A-Za-z_$][\\w$]*)[^;=\\n]*?=\\s*(?:await\\s+)?[^;\\n]*(?:getOcctKernel|getKernel|initOcctWasm)\\s*\\(\\s*\\)/g\n const kernelIds = new Set<string>()\n KERNEL_ACQUIRE.lastIndex = 0\n for (let m = KERNEL_ACQUIRE.exec(src); m; m = KERNEL_ACQUIRE.exec(src)) kernelIds.add(m[1])\n\n // 收集文件内所有变声明的「名 → 初始化式」。\n const initByVar = new Map<string, ts.Expression>()\n ;(function collect(n: ts.Node): void {\n if (ts.isVariableDeclaration(n) && n.initializer) {\n for (const nm of bindingNames(n.name)) initByVar.set(nm, n.initializer)\n }\n ts.forEachChild(n, collect)\n })(sf)\n\n const isKernelInDecl = makeIsKernel(kernelIds)\n let changed = true\n while (changed) {\n changed = false\n for (const [name, init] of initByVar) {\n if (!kernelIds.has(name) && isKernelInDecl(init)) {\n kernelIds.add(name)\n changed = true\n }\n }\n }\n return new Set([...kernelIds].sort())\n}\n\n/**\n * 收集「方法别名」:把 occt 方法绑定/解构到局部变量后,后续 `alias(...)` 调用要还原\n * 成底层方法名。形态:\n * - `const x = <内核值>.<m>.bind(k)` → x ⇒ m(覆盖 `raw.linearPattern.bind(k)` 后 `nativeLP(...)`)\n * - `const { m } = <内核值>` / `{ m: mm }` → m ⇒ m / mm ⇒ m(解构)\n * 只认内核派生基;`kernel = getBrepApi()` 的 .m 不作数(§7.5 陷阱 1)。\n *\n * @param src 待扫描的 TS 源码文本。\n * @param kernelIds 内核标识符集合(来自 {@link kernelIdentifiers})。\n * @returns 别名 → 底层 occt 方法名的映射。\n */\nexport function methodAliases(src: string, kernelIds: Set<string>): Map<string, string> {\n const sf = ts.createSourceFile('aliases.ts', src, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS)\n const isKernelIdent = makeIsKernel(kernelIds)\n const alias = new Map<string, string>()\n\n for (const stmt of sf.statements as unknown as ts.Node[]) {\n if (!ts.isVariableStatement(stmt)) continue\n for (const d of stmt.declarationList.declarations) {\n if (!d.initializer) continue\n // 形态 1:`const x = <值>.<m>.bind(k)` / `<值>.<m>.call(k, …)` ,<值> 是内核\n if (ts.isIdentifier(d.name) || ts.isObjectBindingPattern(d.name)) {\n const names = bindingNames(d.name)\n // 解构出别名:const { m: mm } = kernel\n if (ts.isObjectBindingPattern(d.name)) {\n for (const el of d.name.elements) {\n if (ts.isBindingElement(el)) {\n const mth = el.propertyName ? el.propertyName.getText() : el.name.getText()\n alias.set(el.name.getText(), mth)\n }\n }\n }\n if (names.length === 1 && ts.isCallExpression(d.initializer)) {\n const init = d.initializer\n const outerName = calleeName(init.expression)\n if (outerName === 'bind' || outerName === 'call') {\n const prop = init.expression as ts.PropertyAccessExpression\n if (ts.isPropertyAccessExpression(prop) && ts.isPropertyAccessExpression(prop.expression) && isKernelIdent(prop.expression.expression)) {\n alias.set(names[0]!, prop.name.text)\n }\n }\n }\n }\n }\n }\n return alias\n}\n\n/**\n * 返回 src 里被调用的、基类是内核派生的 occt 方法名(与 occtNames 交集)。\n *\n * 覆盖形态(§7.2 缺陷 1):\n * - `<k>.method(` 普通直调(k 为内核标识)\n * - `getOcctKernel().method(...)` 链式(调用表达式基即内核)→ 属性访问基命中\n * - `raw.method.bind(k)` / `(<cast>).m.call(k,…)` 绑定点属性访问把 `<m>` 计入\n * - `const x = k.m.bind(...); x(...)` const 绑定别名调用\n * - `const { m } = k; m(...)` 解构别名调用\n *\n * @param src 待扫描的 TS 源码文本。\n * @param occtNames occt 方法名全集(用于交集过滤)。\n * @returns 被调用的 occt 方法名集合。\n */\nexport function kernelCallsIn(src: string, occtNames: Set<string>): Set<string> {\n const sf = ts.createSourceFile('scan.ts', src, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS)\n const kernelIds = kernelIdentifiers(src)\n const alias = methodAliases(src, kernelIds)\n const isKernelIdent = makeIsKernel(kernelIds)\n const out = new Set<string>()\n\n const visit = (n: ts.Node): void => {\n // 别名调用:`nativeLP(...)` / `lp(...)` / `m(...)` 还原底层方法名\n if (ts.isCallExpression(n)) {\n const nm = calleeName(n.expression)\n if (nm && alias.has(nm)) {\n const real = alias.get(nm)!\n if (occtNames.has(real)) out.add(real)\n }\n }\n // 内核派生基 . 属性访问 → 属性是 occt 方法(属性访问即方法引用/调用)\n if (ts.isPropertyAccessExpression(n)) {\n if (isKernelIdent(n.expression)) {\n const name = n.name.text\n if (occtNames.has(name)) out.add(name)\n }\n }\n ts.forEachChild(n, visit)\n }\n visit(sf)\n return out\n}"]}
|
|
@@ -63,10 +63,10 @@ function applyCenter(kernel, solid, center) {
|
|
|
63
63
|
return translated;
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
* 用 OCCT 直接构造一个长方体 Solid
|
|
66
|
+
* 用 OCCT 直接构造一个长方体 Solid(原 brepjs `box(width, depth, height,
|
|
67
67
|
* {at?, centered?})` 契约,§4.1 A 决策;与 mesh 路径逐点对齐)。
|
|
68
68
|
*
|
|
69
|
-
*
|
|
69
|
+
* 几何语义与旧 `primitiveFns.box` 完全一致:
|
|
70
70
|
* 默认 min 角点在原点;`centered:true`(无 at 时)居中到原点;`at` 为中心
|
|
71
71
|
* 语义且优先于 `centered`。
|
|
72
72
|
*/
|
|
@@ -74,7 +74,7 @@ function cubeToCadSolid(kernel, params) {
|
|
|
74
74
|
const w = params.width;
|
|
75
75
|
const d = params.depth;
|
|
76
76
|
const h = params.height;
|
|
77
|
-
// brepjs box: center = at ?? (centered ? [0,0,0] : undefined);未给 center →
|
|
77
|
+
// 原 brepjs box: center = at ?? (centered ? [0,0,0] : undefined);未给 center →
|
|
78
78
|
// 构造角点实体不平移(这里统一中心构造 + 平移量,等价)。
|
|
79
79
|
const center = params.at !== undefined
|
|
80
80
|
? params.at
|
|
@@ -94,10 +94,10 @@ function sphereToCadSolid(kernel, params) {
|
|
|
94
94
|
return applyCenter(kernel, solid, params.center);
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
|
-
* 用 OCCT 直接构造一个圆柱体 Solid
|
|
97
|
+
* 用 OCCT 直接构造一个圆柱体 Solid(原 brepjs `cylinder(radius, height, {
|
|
98
98
|
* at, centered })` 契约,§4.3 A 决策;与 mesh 路径逐点对齐)。
|
|
99
99
|
*
|
|
100
|
-
*
|
|
100
|
+
* 锚点同旧 `primitiveFns.cylinder`:`at` 是底面轴心(BASE)语义(默认
|
|
101
101
|
* [0,0,0]),OCCT makeCylinder 原生从 z=0 沿 +Z 建高 → 无需重居中;`centered:true`
|
|
102
102
|
* 指底面沿轴下移 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。
|
|
103
103
|
*/
|
|
@@ -114,10 +114,10 @@ function cylinderToCadSolid(kernel, params) {
|
|
|
114
114
|
return solid;
|
|
115
115
|
}
|
|
116
116
|
/**
|
|
117
|
-
* 用 OCCT 直接构造一个圆锥体 Solid
|
|
117
|
+
* 用 OCCT 直接构造一个圆锥体 Solid(原 brepjs `cone(bottomRadius, topRadius,
|
|
118
118
|
* height, { at, centered })` 契约,§4.1 P 决策;与 mesh 路径逐点对齐)。
|
|
119
119
|
*
|
|
120
|
-
*
|
|
120
|
+
* 锚点同旧 `primitiveFns.cone`:`at` 是底面轴心(BASE)语义(默认
|
|
121
121
|
* [0,0,0]),OCCT makeCone 原生从 z=0 沿 +Z 建高 → 无需重居中;`centered:true`
|
|
122
122
|
* 指底面沿轴下移 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。
|
|
123
123
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brep-primitives.js","sourceRoot":"","sources":["../../src/primitives/brep-primitives.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Primitive → CAD 实体转换。\n *\n * @platform occt — 本文件 import occt-kernel(meshReconstruct):primitive 直接\n * 构造路径绑定 occt 构造函数(makeBox/makeSphere/...),平台原生面调用;\n * 守卫 R1 豁免、R2 无 defineOp 不适用。\n *\n * 将本项目的各种 primitive(cube, sphere, cylinder, cone, wedge, screw)\n * 转换为 OCCT CAD 实体(Solid),并支持导出为 BREP 格式的 STEP 文件。\n *\n * 两条路径:\n *\n * 1. **直接构造路径**(primitive path):\n * 对于有 OCCT 直接对应的基本体(cube, sphere, cylinder, cone, wedge),\n * 直接调用 OCCT 构造函数(makeBox, makeSphere, makeCylinder, makeCone)\n * 或用 extrude 从 2D 轮廓构造(wedge)。\n * 产出精确 BREP——平面是 PLANE,圆柱面是 CYLINDRICAL_SURFACE,等。\n *\n * 2. **Mesh 重建路径**(mesh path):\n * 对于无 OCCT 直接对应的复杂形状(screw, text),从 THREE.js BufferGeometry\n * 提取三角网格,经 meshReconstruct.ts 的多阶段愈合管线重建为 Solid。\n * 产出仍为 BREP,但曲面由多个小三角平面近似(faceted)。在本项目里,默认brep模型不包含此类近似的到的模型。\n *\n * 坐标系:本项目 primitive 为 Z-up(经过 ROT_Y_TO_Z 旋转),\n * OCCT 默认也是 Z-up,因此直接对应,无需额外轴转换。\n */\n\nimport type * as THREE from 'three'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type { PrimitiveType } from './types'\nimport { reconstructSolidFromMesh } from '../occt-kernel/meshReconstruct'\nimport type {\n BoxParams,\n SphereParams,\n CylinderParams,\n ConeParams,\n WedgeParams,\n} from '../mesh/types'\n\n// ─── 辅助:从 BufferGeometry 提取网格数据 ───\n\n/**\n * Extract positions + indices from a THREE.BufferGeometry for the mesh reconstruction path.\n *\n * Handles both indexed and non-indexed geometry.\n * Sequential indices are created automatically for non-indexed geometry.\n *\n * @param geo - the source THREE.BufferGeometry.\n * @returns the extracted positions and indices arrays.\n */\nexport function extractMeshData(geo: THREE.BufferGeometry): {\n positions: Float32Array\n indices: Uint32Array\n} {\n const posAttr = geo.getAttribute('position') as THREE.BufferAttribute\n if (!posAttr) throw new Error('Geometry has no position attribute')\n\n const positions = new Float32Array(posAttr.array)\n\n const idxAttr = geo.getIndex()\n let indices: Uint32Array\n if (idxAttr) {\n indices = new Uint32Array(idxAttr.array)\n } else {\n // Non-indexed: create sequential indices\n indices = new Uint32Array(posAttr.count)\n for (let i = 0; i < posAttr.count; i++) indices[i] = i\n }\n\n return { positions, indices }\n}\n\n// ─── 直接构造路径 ───\n\n/** 应用 center 偏移到 OCCT solid(如果有 center 参数)。 */\nfunction applyCenter(kernel: BrepEngineApi, solid: BrepHandle, center?: [number, number, number]): BrepHandle {\n if (!center) return solid\n const translated = kernel.translate(solid, center[0], center[1], center[2])\n kernel.release(solid)\n return translated\n}\n\n/**\n * 用 OCCT 直接构造一个长方体 Solid(brepjs `box(width, depth, height,\n * {at?, centered?})` 契约,§4.1 A 决策;与 mesh 路径逐点对齐)。\n *\n * 几何语义与 vendored `primitiveFns.box` 完全一致:\n * 默认 min 角点在原点;`centered:true`(无 at 时)居中到原点;`at` 为中心\n * 语义且优先于 `centered`。\n */\nfunction cubeToCadSolid(kernel: BrepEngineApi, params: BoxParams): BrepHandle {\n const w = params.width\n const d = params.depth\n const h = params.height\n // brepjs box: center = at ?? (centered ? [0,0,0] : undefined);未给 center →\n // 构造角点实体不平移(这里统一中心构造 + 平移量,等价)。\n const center = params.at !== undefined\n ? params.at\n : params.centered\n ? ([0, 0, 0] as [number, number, number])\n : ([w / 2, d / 2, h / 2] as [number, number, number])\n const solid = kernel.makeBoxFromCorners(\n { x: -w / 2, y: -d / 2, z: -h / 2 },\n { x: w / 2, y: d / 2, z: h / 2 },\n )\n return applyCenter(kernel, solid, center)\n}\n\n/**\n * 用 OCCT 直接构造一个球体 Solid。\n *\n * 接收完整 SphereParams:radius 是球体半径,segments 不影响 BREP(仅影响 mesh 离散化)。\n */\nfunction sphereToCadSolid(kernel: BrepEngineApi, params: SphereParams): BrepHandle {\n const solid = kernel.makeSphere(params.radius)\n return applyCenter(kernel, solid, params.center)\n}\n\n/**\n * 用 OCCT 直接构造一个圆柱体 Solid(brepjs `cylinder(radius, height, {\n * at, centered })` 契约,§4.3 A 决策;与 mesh 路径逐点对齐)。\n *\n * 锚点同 vendored `primitiveFns.cylinder`:`at` 是底面轴心(BASE)语义(默认\n * [0,0,0]),OCCT makeCylinder 原生从 z=0 沿 +Z 建高 → 无需重居中;`centered:true`\n * 指底面沿轴下移 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n */\nfunction cylinderToCadSolid(kernel: BrepEngineApi, params: CylinderParams): BrepHandle {\n const solid = kernel.makeCylinder(params.radius, params.height)\n const baseX = params.at?.[0] ?? 0\n const baseY = params.at?.[1] ?? 0\n const baseZ = (params.at?.[2] ?? 0) - (params.centered === true ? params.height / 2 : 0)\n if (baseX !== 0 || baseY !== 0 || baseZ !== 0) {\n const translated = kernel.translate(solid, baseX, baseY, baseZ)\n kernel.release(solid)\n return translated\n }\n return solid\n}\n\n/**\n * 用 OCCT 直接构造一个圆锥体 Solid(brepjs `cone(bottomRadius, topRadius,\n * height, { at, centered })` 契约,§4.1 P 决策;与 mesh 路径逐点对齐)。\n *\n * 锚点同 vendored `primitiveFns.cone`:`at` 是底面轴心(BASE)语义(默认\n * [0,0,0]),OCCT makeCone 原生从 z=0 沿 +Z 建高 → 无需重居中;`centered:true`\n * 指底面沿轴下移 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n */\nfunction coneToCadSolid(kernel: BrepEngineApi, params: ConeParams): BrepHandle {\n const solid = kernel.makeCone(params.radiusBottom, params.radiusTop, params.height)\n const baseX = params.at?.[0] ?? 0\n const baseY = params.at?.[1] ?? 0\n const baseZ = (params.at?.[2] ?? 0) - (params.centered === true ? params.height / 2 : 0)\n if (baseX !== 0 || baseY !== 0 || baseZ !== 0) {\n const translated = kernel.translate(solid, baseX, baseY, baseZ)\n kernel.release(solid)\n return translated\n }\n return solid\n}\n\n/**\n * 用 OCCT 从 2D 梯形轮廓拉伸构造楔形体 Solid。\n *\n * 支持全参数(width/height/angle/length),向后兼容旧式 { size: number }。\n *\n * 参数(来自 WedgePanel.buildWedgeGeometry):\n * - 底边宽度 width(沿 Y)\n * - 高度 height(沿 Z)\n * - 底边与斜边的夹角 angleDeg\n * - 拉伸总长 length(沿 X,从 -length/2 到 +length/2)\n *\n * 构造步骤:\n * 1. 在 YZ 平面创建梯形 wire(4 个顶点,4 条边)\n * 2. 从 wire 创建 planar face\n * 3. 沿 X 轴拉伸\n * 4. 平移使 X 方向居中\n */\nfunction wedgeToCadSolid(kernel: BrepEngineApi, params: WedgeParams): BrepHandle {\n const width = params.width // 底边长度(沿 Y)\n const height = params.height // 梯形高(沿 Z)\n const angleDeg = params.angle // 底边与斜边的夹角\n const length = params.length // 拉伸总长(沿 X)\n const angleRad = (angleDeg * Math.PI) / 180\n const halfExtrude = length / 2\n const hw = width / 2\n\n // 上边半宽 = 底边半宽 - 高 / tan(角度)\n const halfTopWidth = Math.max(0, hw - height / Math.tan(angleRad))\n\n // 在 YZ 平面创建梯形 wire(X=0)。顶边塌缩(halfTopWidth≈0,斜坡已在宽度内到顶)\n // 时退化为三角棱柱——不能再保留零长顶边(两个重合顶点会让 OCCT makeLineEdge\n // 报 CONSTRUCTION_FAILED,即 P23 实测的 wedge 退化参数失败)。\n const edges: BrepHandle[] = []\n if (halfTopWidth > 1e-12) {\n // 梯形:底边 (±hw,0) + 上边 (±halfTopWidth,height)\n edges.push(\n kernel.makeLineEdge({ x: 0, y: -hw, z: 0 }, { x: 0, y: hw, z: 0 }),\n kernel.makeLineEdge({ x: 0, y: hw, z: 0 }, { x: 0, y: halfTopWidth, z: height }),\n kernel.makeLineEdge({ x: 0, y: halfTopWidth, z: height }, { x: 0, y: -halfTopWidth, z: height }),\n kernel.makeLineEdge({ x: 0, y: -halfTopWidth, z: height }, { x: 0, y: -hw, z: 0 }),\n )\n } else {\n // 三角棱柱:(−hw,0) → (hw,0) → (0,height)\n edges.push(\n kernel.makeLineEdge({ x: 0, y: -hw, z: 0 }, { x: 0, y: hw, z: 0 }),\n kernel.makeLineEdge({ x: 0, y: hw, z: 0 }, { x: 0, y: 0, z: height }),\n kernel.makeLineEdge({ x: 0, y: 0, z: height }, { x: 0, y: -hw, z: 0 }),\n )\n }\n\n const wire = kernel.makeWire(edges)\n const face = kernel.makeFace(wire)\n const extruded = kernel.extrude(face, 2 * halfExtrude, 0, 0)\n // 平移使 X 方向居中\n const centered = kernel.translate(extruded, -halfExtrude, 0, 0)\n\n // 释放中间句柄\n for (const e of edges) kernel.release(e)\n kernel.release(wire)\n kernel.release(face)\n kernel.release(extruded)\n\n return applyCenter(kernel, centered, params.center)\n}\n\n// ─── 统一入口 ───\n\n/**\n * Conversion result: the CAD solid handle and the construction path used.\n */\nexport interface PrimitiveToBrepResult {\n /** CAD solid handle (the caller is responsible for releasing it). */\n solid: BrepHandle\n /** The construction path used. */\n path: 'primitive' | 'mesh'\n /** The primitive type. */\n type: PrimitiveType | 'screw' | 'text'\n}\n\n/** Union type of the primitive parameter objects. */\nexport type PrimitiveParams = BoxParams | SphereParams | CylinderParams | ConeParams | WedgeParams\n\n/**\n * 将旧的 size 数字转换为对应类型的完整 params(向后兼容)。\n *\n * - cube: { size: size }\n * - wedge: { width: size, height: size/2, angle: 60, length: 50 }\n * - sphere: { radius: size / 2 }\n * - cylinder: { radius: size / 2, height: size }\n * - cone: { radiusBottom: size / 2, radiusTop: 0, height: size }\n */\nfunction sizeToParams(type: PrimitiveType | 'screw' | 'text', size: number): PrimitiveParams {\n switch (type) {\n case 'cube':\n case 'box':\n return { width: size, depth: size, height: size }\n case 'sphere':\n return { radius: size / 2 }\n case 'cylinder':\n return { radius: size / 2, height: size }\n case 'cone':\n return { radiusBottom: size / 2, radiusTop: 0, height: size }\n case 'wedge':\n return { width: size, height: size / 2, angle: 60, length: 50 }\n default:\n throw new Error(`sizeToParams does not support primitive type \"${type}\" (use geometry data)`)\n }\n}\n\n/**\n * Convert a project primitive to an OCCT CAD solid.\n *\n * - cube, sphere, cylinder, cone, wedge: constructed directly with OCCT (exact BREP)\n * - screw, text: use the mesh reconstruction path (faceted BREP)\n *\n * @param kernel - the initialized OCCT kernel.\n * @param type - the primitive type.\n * @param params - a full parameter object (BoxParams etc.), or a size number (backwards-compatible, default 20mm).\n * @returns the CAD solid plus path information.\n */\nexport function primitiveToBrepSolid(\n kernel: BrepEngineApi,\n type: PrimitiveType | 'screw' | 'text',\n params?: PrimitiveParams | number,\n): PrimitiveToBrepResult {\n const fullParams = typeof params === 'number' || params === undefined\n ? sizeToParams(type, params ?? 20)\n : params\n\n switch (type) {\n case 'cube':\n case 'box':\n return { solid: cubeToCadSolid(kernel, fullParams as BoxParams), path: 'primitive', type }\n\n case 'sphere':\n return { solid: sphereToCadSolid(kernel, fullParams as SphereParams), path: 'primitive', type }\n\n case 'cylinder':\n return { solid: cylinderToCadSolid(kernel, fullParams as CylinderParams), path: 'primitive', type }\n\n case 'cone':\n return { solid: coneToCadSolid(kernel, fullParams as ConeParams), path: 'primitive', type }\n\n case 'wedge':\n return { solid: wedgeToCadSolid(kernel, fullParams as WedgeParams), path: 'primitive', type }\n\n case 'screw':\n case 'text': {\n // Mesh 重建路径:从 THREE.js 几何体提取网格数据\n // 对于 screw/text,调用方应使用 geometryToBrepSolid\n throw new Error(\n `${type} requires geometry data — use geometryToBrepSolid() instead`,\n )\n }\n\n default:\n throw new Error(`Unsupported primitive type: ${type}`)\n }\n}\n\n/**\n * Create a CAD solid from a THREE.BufferGeometry via the mesh reconstruction path.\n *\n * Suitable for complex shapes that cannot be constructed directly\n * (screw, text, SVG extrusion, etc.).\n *\n * @param kernel - the initialized OCCT kernel.\n * @param geo - the THREE.js BufferGeometry.\n * @returns the CAD solid plus path information.\n */\nexport function geometryToBrepSolid(\n kernel: BrepEngineApi,\n geo: THREE.BufferGeometry,\n): PrimitiveToBrepResult {\n const { positions, indices } = extractMeshData(geo)\n const solid = reconstructSolidFromMesh(kernel, positions, indices)\n return { solid, path: 'mesh', type: 'screw' }\n}\n\n/**\n * Export a CAD solid as a BREP-format STEP string.\n *\n * OCCT's exportStep produces a standard ISO-10303-21 STEP file using\n * ADVANCED_FACE with exact surfaces (PLANE, CYLINDRICAL_SURFACE, etc.)\n * rather than a faceted representation (POLYGONAL_FACE).\n *\n * @param kernel - the initialized OCCT kernel.\n * @param solid - the CAD solid handle.\n * @returns the STEP file content as a string.\n */\nexport function brepSolidToStep(kernel: BrepEngineApi, solid: BrepHandle): string {\n return kernel.exportStep(solid)\n}\n\n/**\n * Convenience method: convert a primitive directly to a STEP string.\n *\n * Internally calls primitiveToBrepSolid + brepSolidToStep and manages the\n * handle lifecycle automatically.\n *\n * @param kernel - the initialized OCCT kernel.\n * @param type - the primitive type.\n * @param params - a full parameter object, or a size number (backwards-compatible, default 20mm).\n * @returns the STEP file content string plus the path used.\n */\nexport function primitiveToBrepStep(\n kernel: BrepEngineApi,\n type: PrimitiveType,\n params?: PrimitiveParams | number,\n): { step: string; path: 'primitive' | 'mesh' } {\n const result = primitiveToBrepSolid(kernel, type, params)\n try {\n const step = brepSolidToStep(kernel, result.solid)\n return { step, path: result.path }\n } finally {\n kernel.release(result.solid)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"brep-primitives.js","sourceRoot":"","sources":["../../src/primitives/brep-primitives.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Primitive → CAD 实体转换。\n *\n * @platform occt — 本文件 import occt-kernel(meshReconstruct):primitive 直接\n * 构造路径绑定 occt 构造函数(makeBox/makeSphere/...),平台原生面调用;\n * 守卫 R1 豁免、R2 无 defineOp 不适用。\n *\n * 将本项目的各种 primitive(cube, sphere, cylinder, cone, wedge, screw)\n * 转换为 OCCT CAD 实体(Solid),并支持导出为 BREP 格式的 STEP 文件。\n *\n * 两条路径:\n *\n * 1. **直接构造路径**(primitive path):\n * 对于有 OCCT 直接对应的基本体(cube, sphere, cylinder, cone, wedge),\n * 直接调用 OCCT 构造函数(makeBox, makeSphere, makeCylinder, makeCone)\n * 或用 extrude 从 2D 轮廓构造(wedge)。\n * 产出精确 BREP——平面是 PLANE,圆柱面是 CYLINDRICAL_SURFACE,等。\n *\n * 2. **Mesh 重建路径**(mesh path):\n * 对于无 OCCT 直接对应的复杂形状(screw, text),从 THREE.js BufferGeometry\n * 提取三角网格,经 meshReconstruct.ts 的多阶段愈合管线重建为 Solid。\n * 产出仍为 BREP,但曲面由多个小三角平面近似(faceted)。在本项目里,默认brep模型不包含此类近似的到的模型。\n *\n * 坐标系:本项目 primitive 为 Z-up(经过 ROT_Y_TO_Z 旋转),\n * OCCT 默认也是 Z-up,因此直接对应,无需额外轴转换。\n */\n\nimport type * as THREE from 'three'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type { PrimitiveType } from './types'\nimport { reconstructSolidFromMesh } from '../occt-kernel/meshReconstruct'\nimport type {\n BoxParams,\n SphereParams,\n CylinderParams,\n ConeParams,\n WedgeParams,\n} from '../mesh/types'\n\n// ─── 辅助:从 BufferGeometry 提取网格数据 ───\n\n/**\n * Extract positions + indices from a THREE.BufferGeometry for the mesh reconstruction path.\n *\n * Handles both indexed and non-indexed geometry.\n * Sequential indices are created automatically for non-indexed geometry.\n *\n * @param geo - the source THREE.BufferGeometry.\n * @returns the extracted positions and indices arrays.\n */\nexport function extractMeshData(geo: THREE.BufferGeometry): {\n positions: Float32Array\n indices: Uint32Array\n} {\n const posAttr = geo.getAttribute('position') as THREE.BufferAttribute\n if (!posAttr) throw new Error('Geometry has no position attribute')\n\n const positions = new Float32Array(posAttr.array)\n\n const idxAttr = geo.getIndex()\n let indices: Uint32Array\n if (idxAttr) {\n indices = new Uint32Array(idxAttr.array)\n } else {\n // Non-indexed: create sequential indices\n indices = new Uint32Array(posAttr.count)\n for (let i = 0; i < posAttr.count; i++) indices[i] = i\n }\n\n return { positions, indices }\n}\n\n// ─── 直接构造路径 ───\n\n/** 应用 center 偏移到 OCCT solid(如果有 center 参数)。 */\nfunction applyCenter(kernel: BrepEngineApi, solid: BrepHandle, center?: [number, number, number]): BrepHandle {\n if (!center) return solid\n const translated = kernel.translate(solid, center[0], center[1], center[2])\n kernel.release(solid)\n return translated\n}\n\n/**\n * 用 OCCT 直接构造一个长方体 Solid(原 brepjs `box(width, depth, height,\n * {at?, centered?})` 契约,§4.1 A 决策;与 mesh 路径逐点对齐)。\n *\n * 几何语义与旧 `primitiveFns.box` 完全一致:\n * 默认 min 角点在原点;`centered:true`(无 at 时)居中到原点;`at` 为中心\n * 语义且优先于 `centered`。\n */\nfunction cubeToCadSolid(kernel: BrepEngineApi, params: BoxParams): BrepHandle {\n const w = params.width\n const d = params.depth\n const h = params.height\n // 原 brepjs box: center = at ?? (centered ? [0,0,0] : undefined);未给 center →\n // 构造角点实体不平移(这里统一中心构造 + 平移量,等价)。\n const center = params.at !== undefined\n ? params.at\n : params.centered\n ? ([0, 0, 0] as [number, number, number])\n : ([w / 2, d / 2, h / 2] as [number, number, number])\n const solid = kernel.makeBoxFromCorners(\n { x: -w / 2, y: -d / 2, z: -h / 2 },\n { x: w / 2, y: d / 2, z: h / 2 },\n )\n return applyCenter(kernel, solid, center)\n}\n\n/**\n * 用 OCCT 直接构造一个球体 Solid。\n *\n * 接收完整 SphereParams:radius 是球体半径,segments 不影响 BREP(仅影响 mesh 离散化)。\n */\nfunction sphereToCadSolid(kernel: BrepEngineApi, params: SphereParams): BrepHandle {\n const solid = kernel.makeSphere(params.radius)\n return applyCenter(kernel, solid, params.center)\n}\n\n/**\n * 用 OCCT 直接构造一个圆柱体 Solid(原 brepjs `cylinder(radius, height, {\n * at, centered })` 契约,§4.3 A 决策;与 mesh 路径逐点对齐)。\n *\n * 锚点同旧 `primitiveFns.cylinder`:`at` 是底面轴心(BASE)语义(默认\n * [0,0,0]),OCCT makeCylinder 原生从 z=0 沿 +Z 建高 → 无需重居中;`centered:true`\n * 指底面沿轴下移 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n */\nfunction cylinderToCadSolid(kernel: BrepEngineApi, params: CylinderParams): BrepHandle {\n const solid = kernel.makeCylinder(params.radius, params.height)\n const baseX = params.at?.[0] ?? 0\n const baseY = params.at?.[1] ?? 0\n const baseZ = (params.at?.[2] ?? 0) - (params.centered === true ? params.height / 2 : 0)\n if (baseX !== 0 || baseY !== 0 || baseZ !== 0) {\n const translated = kernel.translate(solid, baseX, baseY, baseZ)\n kernel.release(solid)\n return translated\n }\n return solid\n}\n\n/**\n * 用 OCCT 直接构造一个圆锥体 Solid(原 brepjs `cone(bottomRadius, topRadius,\n * height, { at, centered })` 契约,§4.1 P 决策;与 mesh 路径逐点对齐)。\n *\n * 锚点同旧 `primitiveFns.cone`:`at` 是底面轴心(BASE)语义(默认\n * [0,0,0]),OCCT makeCone 原生从 z=0 沿 +Z 建高 → 无需重居中;`centered:true`\n * 指底面沿轴下移 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n */\nfunction coneToCadSolid(kernel: BrepEngineApi, params: ConeParams): BrepHandle {\n const solid = kernel.makeCone(params.radiusBottom, params.radiusTop, params.height)\n const baseX = params.at?.[0] ?? 0\n const baseY = params.at?.[1] ?? 0\n const baseZ = (params.at?.[2] ?? 0) - (params.centered === true ? params.height / 2 : 0)\n if (baseX !== 0 || baseY !== 0 || baseZ !== 0) {\n const translated = kernel.translate(solid, baseX, baseY, baseZ)\n kernel.release(solid)\n return translated\n }\n return solid\n}\n\n/**\n * 用 OCCT 从 2D 梯形轮廓拉伸构造楔形体 Solid。\n *\n * 支持全参数(width/height/angle/length),向后兼容旧式 { size: number }。\n *\n * 参数(来自 WedgePanel.buildWedgeGeometry):\n * - 底边宽度 width(沿 Y)\n * - 高度 height(沿 Z)\n * - 底边与斜边的夹角 angleDeg\n * - 拉伸总长 length(沿 X,从 -length/2 到 +length/2)\n *\n * 构造步骤:\n * 1. 在 YZ 平面创建梯形 wire(4 个顶点,4 条边)\n * 2. 从 wire 创建 planar face\n * 3. 沿 X 轴拉伸\n * 4. 平移使 X 方向居中\n */\nfunction wedgeToCadSolid(kernel: BrepEngineApi, params: WedgeParams): BrepHandle {\n const width = params.width // 底边长度(沿 Y)\n const height = params.height // 梯形高(沿 Z)\n const angleDeg = params.angle // 底边与斜边的夹角\n const length = params.length // 拉伸总长(沿 X)\n const angleRad = (angleDeg * Math.PI) / 180\n const halfExtrude = length / 2\n const hw = width / 2\n\n // 上边半宽 = 底边半宽 - 高 / tan(角度)\n const halfTopWidth = Math.max(0, hw - height / Math.tan(angleRad))\n\n // 在 YZ 平面创建梯形 wire(X=0)。顶边塌缩(halfTopWidth≈0,斜坡已在宽度内到顶)\n // 时退化为三角棱柱——不能再保留零长顶边(两个重合顶点会让 OCCT makeLineEdge\n // 报 CONSTRUCTION_FAILED,即 P23 实测的 wedge 退化参数失败)。\n const edges: BrepHandle[] = []\n if (halfTopWidth > 1e-12) {\n // 梯形:底边 (±hw,0) + 上边 (±halfTopWidth,height)\n edges.push(\n kernel.makeLineEdge({ x: 0, y: -hw, z: 0 }, { x: 0, y: hw, z: 0 }),\n kernel.makeLineEdge({ x: 0, y: hw, z: 0 }, { x: 0, y: halfTopWidth, z: height }),\n kernel.makeLineEdge({ x: 0, y: halfTopWidth, z: height }, { x: 0, y: -halfTopWidth, z: height }),\n kernel.makeLineEdge({ x: 0, y: -halfTopWidth, z: height }, { x: 0, y: -hw, z: 0 }),\n )\n } else {\n // 三角棱柱:(−hw,0) → (hw,0) → (0,height)\n edges.push(\n kernel.makeLineEdge({ x: 0, y: -hw, z: 0 }, { x: 0, y: hw, z: 0 }),\n kernel.makeLineEdge({ x: 0, y: hw, z: 0 }, { x: 0, y: 0, z: height }),\n kernel.makeLineEdge({ x: 0, y: 0, z: height }, { x: 0, y: -hw, z: 0 }),\n )\n }\n\n const wire = kernel.makeWire(edges)\n const face = kernel.makeFace(wire)\n const extruded = kernel.extrude(face, 2 * halfExtrude, 0, 0)\n // 平移使 X 方向居中\n const centered = kernel.translate(extruded, -halfExtrude, 0, 0)\n\n // 释放中间句柄\n for (const e of edges) kernel.release(e)\n kernel.release(wire)\n kernel.release(face)\n kernel.release(extruded)\n\n return applyCenter(kernel, centered, params.center)\n}\n\n// ─── 统一入口 ───\n\n/**\n * Conversion result: the CAD solid handle and the construction path used.\n */\nexport interface PrimitiveToBrepResult {\n /** CAD solid handle (the caller is responsible for releasing it). */\n solid: BrepHandle\n /** The construction path used. */\n path: 'primitive' | 'mesh'\n /** The primitive type. */\n type: PrimitiveType | 'screw' | 'text'\n}\n\n/** Union type of the primitive parameter objects. */\nexport type PrimitiveParams = BoxParams | SphereParams | CylinderParams | ConeParams | WedgeParams\n\n/**\n * 将旧的 size 数字转换为对应类型的完整 params(向后兼容)。\n *\n * - cube: { size: size }\n * - wedge: { width: size, height: size/2, angle: 60, length: 50 }\n * - sphere: { radius: size / 2 }\n * - cylinder: { radius: size / 2, height: size }\n * - cone: { radiusBottom: size / 2, radiusTop: 0, height: size }\n */\nfunction sizeToParams(type: PrimitiveType | 'screw' | 'text', size: number): PrimitiveParams {\n switch (type) {\n case 'cube':\n case 'box':\n return { width: size, depth: size, height: size }\n case 'sphere':\n return { radius: size / 2 }\n case 'cylinder':\n return { radius: size / 2, height: size }\n case 'cone':\n return { radiusBottom: size / 2, radiusTop: 0, height: size }\n case 'wedge':\n return { width: size, height: size / 2, angle: 60, length: 50 }\n default:\n throw new Error(`sizeToParams does not support primitive type \"${type}\" (use geometry data)`)\n }\n}\n\n/**\n * Convert a project primitive to an OCCT CAD solid.\n *\n * - cube, sphere, cylinder, cone, wedge: constructed directly with OCCT (exact BREP)\n * - screw, text: use the mesh reconstruction path (faceted BREP)\n *\n * @param kernel - the initialized OCCT kernel.\n * @param type - the primitive type.\n * @param params - a full parameter object (BoxParams etc.), or a size number (backwards-compatible, default 20mm).\n * @returns the CAD solid plus path information.\n */\nexport function primitiveToBrepSolid(\n kernel: BrepEngineApi,\n type: PrimitiveType | 'screw' | 'text',\n params?: PrimitiveParams | number,\n): PrimitiveToBrepResult {\n const fullParams = typeof params === 'number' || params === undefined\n ? sizeToParams(type, params ?? 20)\n : params\n\n switch (type) {\n case 'cube':\n case 'box':\n return { solid: cubeToCadSolid(kernel, fullParams as BoxParams), path: 'primitive', type }\n\n case 'sphere':\n return { solid: sphereToCadSolid(kernel, fullParams as SphereParams), path: 'primitive', type }\n\n case 'cylinder':\n return { solid: cylinderToCadSolid(kernel, fullParams as CylinderParams), path: 'primitive', type }\n\n case 'cone':\n return { solid: coneToCadSolid(kernel, fullParams as ConeParams), path: 'primitive', type }\n\n case 'wedge':\n return { solid: wedgeToCadSolid(kernel, fullParams as WedgeParams), path: 'primitive', type }\n\n case 'screw':\n case 'text': {\n // Mesh 重建路径:从 THREE.js 几何体提取网格数据\n // 对于 screw/text,调用方应使用 geometryToBrepSolid\n throw new Error(\n `${type} requires geometry data — use geometryToBrepSolid() instead`,\n )\n }\n\n default:\n throw new Error(`Unsupported primitive type: ${type}`)\n }\n}\n\n/**\n * Create a CAD solid from a THREE.BufferGeometry via the mesh reconstruction path.\n *\n * Suitable for complex shapes that cannot be constructed directly\n * (screw, text, SVG extrusion, etc.).\n *\n * @param kernel - the initialized OCCT kernel.\n * @param geo - the THREE.js BufferGeometry.\n * @returns the CAD solid plus path information.\n */\nexport function geometryToBrepSolid(\n kernel: BrepEngineApi,\n geo: THREE.BufferGeometry,\n): PrimitiveToBrepResult {\n const { positions, indices } = extractMeshData(geo)\n const solid = reconstructSolidFromMesh(kernel, positions, indices)\n return { solid, path: 'mesh', type: 'screw' }\n}\n\n/**\n * Export a CAD solid as a BREP-format STEP string.\n *\n * OCCT's exportStep produces a standard ISO-10303-21 STEP file using\n * ADVANCED_FACE with exact surfaces (PLANE, CYLINDRICAL_SURFACE, etc.)\n * rather than a faceted representation (POLYGONAL_FACE).\n *\n * @param kernel - the initialized OCCT kernel.\n * @param solid - the CAD solid handle.\n * @returns the STEP file content as a string.\n */\nexport function brepSolidToStep(kernel: BrepEngineApi, solid: BrepHandle): string {\n return kernel.exportStep(solid)\n}\n\n/**\n * Convenience method: convert a primitive directly to a STEP string.\n *\n * Internally calls primitiveToBrepSolid + brepSolidToStep and manages the\n * handle lifecycle automatically.\n *\n * @param kernel - the initialized OCCT kernel.\n * @param type - the primitive type.\n * @param params - a full parameter object, or a size number (backwards-compatible, default 20mm).\n * @returns the STEP file content string plus the path used.\n */\nexport function primitiveToBrepStep(\n kernel: BrepEngineApi,\n type: PrimitiveType,\n params?: PrimitiveParams | number,\n): { step: string; path: 'primitive' | 'mesh' } {\n const result = primitiveToBrepSolid(kernel, type, params)\n try {\n const step = brepSolidToStep(kernel, result.solid)\n return { step, path: result.path }\n } finally {\n kernel.release(result.solid)\n }\n}\n"]}
|
package/dist/result/bug.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Bug / panic helper — these throw and should never be caught in normal code.
|
|
3
3
|
*
|
|
4
4
|
* 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs
|
|
5
|
-
* `src/utils/bug.ts
|
|
5
|
+
* `src/utils/bug.ts`(同源复制,签名不变;已内化为第一方代码,由本文件承担)。
|
|
6
6
|
*/
|
|
7
7
|
/** Error thrown for invariant violations / programmer bugs (should never be caught). */
|
|
8
8
|
export declare class BrepBugError extends Error {
|
package/dist/result/bug.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Bug / panic helper — these throw and should never be caught in normal code.
|
|
3
3
|
*
|
|
4
4
|
* 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs
|
|
5
|
-
* `src/utils/bug.ts
|
|
5
|
+
* `src/utils/bug.ts`(同源复制,签名不变;已内化为第一方代码,由本文件承担)。
|
|
6
6
|
*/
|
|
7
7
|
/** Error thrown for invariant violations / programmer bugs (should never be caught). */
|
|
8
8
|
export class BrepBugError extends Error {
|
package/dist/result/bug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bug.js","sourceRoot":"","sources":["../../src/result/bug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wFAAwF;AACxF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,gFAAgF;IACvE,QAAQ,CAAS;IAE1B,YAAY,QAAgB,EAAE,OAAe;QAC3C,KAAK,CAAC,UAAU,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAe;IACnD,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["/**\n * Bug / panic helper — these throw and should never be caught in normal code.\n *\n * 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs\n * `src/utils/bug.ts
|
|
1
|
+
{"version":3,"file":"bug.js","sourceRoot":"","sources":["../../src/result/bug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wFAAwF;AACxF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,gFAAgF;IACvE,QAAQ,CAAS;IAE1B,YAAY,QAAgB,EAAE,OAAe;QAC3C,KAAK,CAAC,UAAU,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAe;IACnD,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["/**\n * Bug / panic helper — these throw and should never be caught in normal code.\n *\n * 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs\n * `src/utils/bug.ts`(同源复制,签名不变;已内化为第一方代码,由本文件承担)。\n */\n\n/** Error thrown for invariant violations / programmer bugs (should never be caught). */\nexport class BrepBugError extends Error {\n /** The location (e.g. function name) where the invariant violation occurred. */\n readonly location: string;\n\n constructor(location: string, message: string) {\n super(`Bug in ${location}: ${message}`);\n this.name = 'BrepBugError';\n this.location = location;\n }\n}\n\n/**\n * Throws a BrepBugError for invariant violations / programmer errors.\n * Equivalent to Rust's panic!() — should never be caught in normal code.\n *\n * @param location - Where the violation occurred (e.g. function name).\n * @param message - Description of the violated invariant.\n * @returns Never returns; always throws.\n */\nexport function bug(location: string, message: string): never {\n throw new BrepBugError(location, message);\n}\n"]}
|
package/dist/result/errors.d.ts
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { bug, BrepBugError } from './bug.js';
|
|
9
9
|
export { bug, BrepBugError };
|
|
10
|
-
/** High-level category for a
|
|
10
|
+
/** High-level category for a BREP error. */
|
|
11
11
|
export type BrepErrorKind = 'KERNEL_OPERATION' | 'VALIDATION' | 'TYPE_CAST' | 'SKETCHER_STATE' | 'MODULE_INIT' | 'COMPUTATION' | 'IO' | 'QUERY' | 'UNSUPPORTED';
|
|
12
12
|
/**
|
|
13
|
-
* Typed string constants for all known
|
|
13
|
+
* Typed string constants for all known BREP error codes, grouped by category.
|
|
14
14
|
*
|
|
15
15
|
* Use these instead of raw strings so that typos are caught at compile time.
|
|
16
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/result/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AAM7B,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/result/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/result/errors.js
CHANGED
|
@@ -12,7 +12,7 @@ export { bug, BrepBugError };
|
|
|
12
12
|
// Error codes — typed constants for all known error code strings
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
14
14
|
/**
|
|
15
|
-
* Typed string constants for all known
|
|
15
|
+
* Typed string constants for all known BREP error codes, grouped by category.
|
|
16
16
|
*
|
|
17
17
|
* Use these instead of raw strings so that typos are caught at compile time.
|
|
18
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/result/errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Domain error types and constructors(第一方模块)。\n *\n * 2026-09-25 core-decouple Phase 1:复制自 brepjs `src/core/errors.ts`\n * (同源复制,签名不变);import 来源改为 core 第一方 `result/` 内模块。\n * Re-exports bug/BrepBugError(Layer 0)for convenience.\n */\n\nimport { bug, BrepBugError } from './bug';\nimport { wasmIndex } from './vec3';\nexport { bug, BrepBugError };\n\n// ---------------------------------------------------------------------------\n// Error kinds\n// ---------------------------------------------------------------------------\n\n/** High-level category for a brepjs error. */\nexport type BrepErrorKind =\n | 'KERNEL_OPERATION'\n | 'VALIDATION'\n | 'TYPE_CAST'\n | 'SKETCHER_STATE'\n | 'MODULE_INIT'\n | 'COMPUTATION'\n | 'IO'\n | 'QUERY'\n | 'UNSUPPORTED';\n\n// ---------------------------------------------------------------------------\n// Error codes — typed constants for all known error code strings\n// ---------------------------------------------------------------------------\n\n/**\n * Typed string constants for all known brepjs error codes, grouped by category.\n *\n * Use these instead of raw strings so that typos are caught at compile time.\n */\nexport const BrepErrorCode = {\n // kernel operation errors\n BSPLINE_FAILED: 'BSPLINE_FAILED',\n FACE_BUILD_FAILED: 'FACE_BUILD_FAILED',\n WIRE_BUILD_FAILED: 'WIRE_BUILD_FAILED',\n SWEEP_FAILED: 'SWEEP_FAILED',\n LOFT_FAILED: 'LOFT_FAILED',\n FUSE_FAILED: 'FUSE_FAILED',\n CUT_FAILED: 'CUT_FAILED',\n HEAL_NO_EFFECT: 'HEAL_NO_EFFECT',\n BOOLEAN_HAS_ERRORS: 'BOOLEAN_HAS_ERRORS',\n VARIABLE_FILLET_FAILED: 'VARIABLE_FILLET_FAILED',\n POSITION_ON_CURVE_FAILED: 'POSITION_ON_CURVE_FAILED',\n FIX_SHAPE_FAILED: 'FIX_SHAPE_FAILED',\n SOLID_FROM_SHELL_FAILED: 'SOLID_FROM_SHELL_FAILED',\n FIX_SELF_INTERSECTION_FAILED: 'FIX_SELF_INTERSECTION_FAILED',\n MESH_FAILED: 'MESH_FAILED',\n\n // Validation errors\n ELLIPSE_RADII: 'ELLIPSE_RADII',\n FUSE_ALL_EMPTY: 'FUSE_ALL_EMPTY',\n FILLET_NO_EDGES: 'FILLET_NO_EDGES',\n CHAMFER_NO_EDGES: 'CHAMFER_NO_EDGES',\n CHAMFER_ANGLE_NO_EDGES: 'CHAMFER_ANGLE_NO_EDGES',\n CHAMFER_ANGLE_BAD_DISTANCE: 'CHAMFER_ANGLE_BAD_DISTANCE',\n CHAMFER_ANGLE_BAD_ANGLE: 'CHAMFER_ANGLE_BAD_ANGLE',\n BEZIER_MIN_POINTS: 'BEZIER_MIN_POINTS',\n POLYGON_MIN_POINTS: 'POLYGON_MIN_POINTS',\n WIRE_NOT_CLOSED: 'WIRE_NOT_CLOSED',\n FACE_NOT_PLANAR: 'FACE_NOT_PLANAR',\n ZERO_LENGTH_EXTRUSION: 'ZERO_LENGTH_EXTRUSION',\n ZERO_TWIST_ANGLE: 'ZERO_TWIST_ANGLE',\n LOFT_EMPTY: 'LOFT_EMPTY',\n UNSUPPORTED_PROFILE: 'UNSUPPORTED_PROFILE',\n UNKNOWN_PLANE: 'UNKNOWN_PLANE',\n NULL_SHAPE_INPUT: 'NULL_SHAPE_INPUT',\n INVALID_FILLET_RADIUS: 'INVALID_FILLET_RADIUS',\n INVALID_CHAMFER_DISTANCE: 'INVALID_CHAMFER_DISTANCE',\n INVALID_THICKNESS: 'INVALID_THICKNESS',\n ZERO_OFFSET: 'ZERO_OFFSET',\n NO_EDGES: 'NO_EDGES',\n NO_FACES: 'NO_FACES',\n DRAFT_NO_FACES: 'DRAFT_NO_FACES',\n DRAFT_INVALID_ANGLE: 'DRAFT_INVALID_ANGLE',\n DRAFT_NOT_3D: 'DRAFT_NOT_3D',\n DRAFT_FAILED: 'DRAFT_FAILED',\n\n // Type cast errors\n FUSE_NOT_3D: 'FUSE_NOT_3D',\n CUT_NOT_3D: 'CUT_NOT_3D',\n INTERSECT_NOT_3D: 'INTERSECT_NOT_3D',\n FUSE_ALL_NOT_3D: 'FUSE_ALL_NOT_3D',\n CUT_ALL_NOT_3D: 'CUT_ALL_NOT_3D',\n LOFT_NOT_3D: 'LOFT_NOT_3D',\n SWEEP_NOT_3D: 'SWEEP_NOT_3D',\n REVOLUTION_NOT_3D: 'REVOLUTION_NOT_3D',\n FILLET_NOT_3D: 'FILLET_NOT_3D',\n CHAMFER_NOT_3D: 'CHAMFER_NOT_3D',\n CHAMFER_ANGLE_NOT_3D: 'CHAMFER_ANGLE_NOT_3D',\n CHAMFER_ANGLE_FAILED: 'CHAMFER_ANGLE_FAILED',\n CSG_NOT_3D: 'CSG_NOT_3D',\n SHELL_NOT_3D: 'SHELL_NOT_3D',\n OFFSET_NOT_3D: 'OFFSET_NOT_3D',\n NULL_SHAPE: 'NULL_SHAPE',\n NO_WRAPPER: 'NO_WRAPPER',\n WELD_NOT_SHELL: 'WELD_NOT_SHELL',\n SOLID_BUILD_FAILED: 'SOLID_BUILD_FAILED',\n OFFSET_NOT_WIRE: 'OFFSET_NOT_WIRE',\n UNKNOWN_SURFACE_TYPE: 'UNKNOWN_SURFACE_TYPE',\n UNKNOWN_CURVE_TYPE: 'UNKNOWN_CURVE_TYPE',\n SWEEP_START_NOT_WIRE: 'SWEEP_START_NOT_WIRE',\n SWEEP_END_NOT_WIRE: 'SWEEP_END_NOT_WIRE',\n\n // IO errors\n STEP_EXPORT_FAILED: 'STEP_EXPORT_FAILED',\n STEP_EXPORT_CONFIGURED_FAILED: 'STEP_EXPORT_CONFIGURED_FAILED',\n STEP_FILE_READ_ERROR: 'STEP_FILE_READ_ERROR',\n STEP_EXPORT_CRASHED: 'STEP_EXPORT_CRASHED',\n STEP_EXPORT_UNSERIALIZABLE: 'STEP_EXPORT_UNSERIALIZABLE',\n STL_EXPORT_FAILED: 'STL_EXPORT_FAILED',\n STL_FILE_READ_ERROR: 'STL_FILE_READ_ERROR',\n STL_EXPORT_CRASHED: 'STL_EXPORT_CRASHED',\n STL_EXPORT_UNSERIALIZABLE: 'STL_EXPORT_UNSERIALIZABLE',\n STEP_IMPORT_FAILED: 'STEP_IMPORT_FAILED',\n STL_IMPORT_FAILED: 'STL_IMPORT_FAILED',\n IGES_EXPORT_FAILED: 'IGES_EXPORT_FAILED',\n IGES_IMPORT_FAILED: 'IGES_IMPORT_FAILED',\n DXF_IMPORT_FAILED: 'DXF_IMPORT_FAILED',\n OBJ_IMPORT_FAILED: 'OBJ_IMPORT_FAILED',\n THREEMF_IMPORT_FAILED: 'THREEMF_IMPORT_FAILED',\n\n // Computation errors\n PARAMETER_NOT_FOUND: 'PARAMETER_NOT_FOUND',\n INTERSECTION_FAILED: 'INTERSECTION_FAILED',\n SELF_INTERSECTION_FAILED: 'SELF_INTERSECTION_FAILED',\n STRAIGHT_SKELETON_FAILED: 'STRAIGHT_SKELETON_FAILED',\n CENTER_OF_MASS_FAILED: 'CENTER_OF_MASS_FAILED',\n\n // Compound operation errors\n COMPOUND_NO_FACES: 'COMPOUND_NO_FACES',\n COMPOUND_FACE_NOT_FOUND: 'COMPOUND_FACE_NOT_FOUND',\n\n // Query errors\n FINDER_NOT_UNIQUE: 'FINDER_NOT_UNIQUE',\n\n // Hull errors\n HULL_EMPTY_INPUT: 'HULL_EMPTY_INPUT',\n HULL_FAILED: 'HULL_FAILED',\n HULL_DEGENERATE: 'HULL_DEGENERATE',\n HULL_NOT_3D: 'HULL_NOT_3D',\n\n // Minkowski errors\n MINKOWSKI_FAILED: 'MINKOWSKI_FAILED',\n MINKOWSKI_NULL_TOOL: 'MINKOWSKI_NULL_TOOL',\n MINKOWSKI_NOT_3D: 'MINKOWSKI_NOT_3D',\n\n // Polyhedron errors\n POLYHEDRON_INSUFFICIENT_POINTS: 'POLYHEDRON_INSUFFICIENT_POINTS',\n POLYHEDRON_INSUFFICIENT_FACES: 'POLYHEDRON_INSUFFICIENT_FACES',\n POLYHEDRON_INVALID_INDEX: 'POLYHEDRON_INVALID_INDEX',\n POLYHEDRON_FAILED: 'POLYHEDRON_FAILED',\n\n // General validation errors\n VALIDATION_FAILED: 'VALIDATION_FAILED',\n\n // Roof errors\n ROOF_FAILED: 'ROOF_FAILED',\n\n // Multi-section sweep errors\n MULTI_SWEEP_INSUFFICIENT_SECTIONS: 'MULTI_SWEEP_INSUFFICIENT_SECTIONS',\n MULTI_SWEEP_FAILED: 'MULTI_SWEEP_FAILED',\n\n // Guide curve sweep errors\n GUIDED_SWEEP_FAILED: 'GUIDED_SWEEP_FAILED',\n\n // Surface errors\n SURFACE_GRID_TOO_SMALL: 'SURFACE_GRID_TOO_SMALL',\n SURFACE_GRID_JAGGED: 'SURFACE_GRID_JAGGED',\n SURFACE_FAILED: 'SURFACE_FAILED',\n\n // Assembly mate errors\n ASSEMBLY_MATE_INVALID: 'ASSEMBLY_MATE_INVALID',\n ASSEMBLY_SOLVE_FAILED: 'ASSEMBLY_SOLVE_FAILED',\n ASSEMBLY_NOT_CONVERGED: 'ASSEMBLY_NOT_CONVERGED',\n\n // Blueprint / CompoundBlueprint errors\n BLUEPRINT_EMPTY_CURVES: 'BLUEPRINT_EMPTY_CURVES',\n COMPOUND_BLUEPRINT_EMPTY: 'COMPOUND_BLUEPRINT_EMPTY',\n\n // GLB/glTF import errors\n GLB_IMPORT_FAILED: 'GLB_IMPORT_FAILED',\n\n // Font/text errors\n FONT_FETCH_FAILED: 'FONT_FETCH_FAILED',\n FONT_PARSE_FAILED: 'FONT_PARSE_FAILED',\n NO_FONT_LOADED: 'NO_FONT_LOADED',\n\n // 2D curve geometry errors\n CURVE2D_CONSTRUCTION_FAILED: 'CURVE2D_CONSTRUCTION_FAILED',\n CURVE2D_INVALID_RADIUS: 'CURVE2D_INVALID_RADIUS',\n CURVE2D_TRANSFORM_FAILED: 'CURVE2D_TRANSFORM_FAILED',\n CURVE2D_QUERY_FAILED: 'CURVE2D_QUERY_FAILED',\n CURVE2D_INTERSECTION_FAILED: 'CURVE2D_INTERSECTION_FAILED',\n CURVE2D_BRIDGE_FAILED: 'CURVE2D_BRIDGE_FAILED',\n\n // Shape identity errors\n CLONE_FAILED: 'CLONE_FAILED',\n SIMPLIFY_FAILED: 'SIMPLIFY_FAILED',\n TO_BREP_FAILED: 'TO_BREP_FAILED',\n\n // Unsupported capability errors (ADR-0006 Phase 4)\n UNSUPPORTED_CAPABILITY: 'UNSUPPORTED_CAPABILITY',\n} as const;\n\n/** Union of all known error code string literals. */\nexport type BrepErrorCode = (typeof BrepErrorCode)[keyof typeof BrepErrorCode];\n\n// ---------------------------------------------------------------------------\n// Error interface\n// ---------------------------------------------------------------------------\n\n/**\n * Structured error returned inside `Result<T>` on failure.\n *\n * Every error carries a `kind` (category), a machine-readable `code`,\n * and a human-readable `message`. Optional `cause` preserves the\n * original exception, and `metadata` holds extra context.\n *\n * The optional `suggestion` field provides actionable recovery hints.\n */\nexport interface BrepError {\n readonly kind: BrepErrorKind;\n readonly code: string;\n readonly message: string;\n readonly suggestion?: string;\n readonly cause?: unknown;\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\n// ---------------------------------------------------------------------------\n// Constructors per kind\n// ---------------------------------------------------------------------------\n\nfunction makeError(\n kind: BrepErrorKind,\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n const base: BrepError = { kind, code, message, cause };\n if (suggestion) {\n const withSuggestion = { ...base, suggestion };\n if (metadata) return { ...withSuggestion, metadata };\n return withSuggestion;\n }\n if (metadata) return { ...base, metadata };\n return base;\n}\n\n/** Create an error for a failed kernel kernel operation.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function kernelError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('KERNEL_OPERATION', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for invalid input parameters.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function validationError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('VALIDATION', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a failed shape type cast or conversion.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function typeCastError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('TYPE_CAST', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for an invalid sketcher state transition.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function sketcherStateError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('SKETCHER_STATE', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a module initialisation failure.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function moduleInitError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('MODULE_INIT', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a failed geometric computation.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function computationError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('COMPUTATION', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a file import/export failure.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function ioError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('IO', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a shape query failure (e.g. finder not unique).\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function queryError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('QUERY', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a capability not supported by the current kernel (ADR-0006 Phase 4).\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function unsupportedError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('UNSUPPORTED', code, message, cause, metadata, suggestion);\n}\n\n// Re-export from kernelErrorTranslation for backward compatibility\nexport { translateKernelError, getSuggestionForCode } from './kernelErrorTranslation';\n\n// ---------------------------------------------------------------------------\n// Array safety helper\n// ---------------------------------------------------------------------------\n\n/**\n * Safe array index access that throws a descriptive {@link BrepBugError} instead\n * of returning `undefined` when the index is out of bounds.\n *\n * Use in place of `arr[i]!` when the caller can prove the index is valid by\n * construction but TypeScript's `noUncheckedIndexedAccess` still requires a guard.\n *\n * @param arr - The array to index into.\n * @param index - The index to access.\n * @param context - Optional caller context for the error message (e.g. function name).\n * @returns The array element at `index`.\n */\nexport function safeIndex<T>(arr: readonly T[], index: number, context?: string): T {\n if (index < 0 || index >= arr.length) {\n bug(context ?? 'safeIndex', `Index ${index} is out of bounds (array length ${arr.length})`);\n }\n return wasmIndex(arr, index);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/result/errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Domain error types and constructors(第一方模块)。\n *\n * 2026-09-25 core-decouple Phase 1:复制自 brepjs `src/core/errors.ts`\n * (同源复制,签名不变);import 来源改为 core 第一方 `result/` 内模块。\n * Re-exports bug/BrepBugError(Layer 0)for convenience.\n */\n\nimport { bug, BrepBugError } from './bug';\nimport { wasmIndex } from './vec3';\nexport { bug, BrepBugError };\n\n// ---------------------------------------------------------------------------\n// Error kinds\n// ---------------------------------------------------------------------------\n\n/** High-level category for a BREP error. */\nexport type BrepErrorKind =\n | 'KERNEL_OPERATION'\n | 'VALIDATION'\n | 'TYPE_CAST'\n | 'SKETCHER_STATE'\n | 'MODULE_INIT'\n | 'COMPUTATION'\n | 'IO'\n | 'QUERY'\n | 'UNSUPPORTED';\n\n// ---------------------------------------------------------------------------\n// Error codes — typed constants for all known error code strings\n// ---------------------------------------------------------------------------\n\n/**\n * Typed string constants for all known BREP error codes, grouped by category.\n *\n * Use these instead of raw strings so that typos are caught at compile time.\n */\nexport const BrepErrorCode = {\n // kernel operation errors\n BSPLINE_FAILED: 'BSPLINE_FAILED',\n FACE_BUILD_FAILED: 'FACE_BUILD_FAILED',\n WIRE_BUILD_FAILED: 'WIRE_BUILD_FAILED',\n SWEEP_FAILED: 'SWEEP_FAILED',\n LOFT_FAILED: 'LOFT_FAILED',\n FUSE_FAILED: 'FUSE_FAILED',\n CUT_FAILED: 'CUT_FAILED',\n HEAL_NO_EFFECT: 'HEAL_NO_EFFECT',\n BOOLEAN_HAS_ERRORS: 'BOOLEAN_HAS_ERRORS',\n VARIABLE_FILLET_FAILED: 'VARIABLE_FILLET_FAILED',\n POSITION_ON_CURVE_FAILED: 'POSITION_ON_CURVE_FAILED',\n FIX_SHAPE_FAILED: 'FIX_SHAPE_FAILED',\n SOLID_FROM_SHELL_FAILED: 'SOLID_FROM_SHELL_FAILED',\n FIX_SELF_INTERSECTION_FAILED: 'FIX_SELF_INTERSECTION_FAILED',\n MESH_FAILED: 'MESH_FAILED',\n\n // Validation errors\n ELLIPSE_RADII: 'ELLIPSE_RADII',\n FUSE_ALL_EMPTY: 'FUSE_ALL_EMPTY',\n FILLET_NO_EDGES: 'FILLET_NO_EDGES',\n CHAMFER_NO_EDGES: 'CHAMFER_NO_EDGES',\n CHAMFER_ANGLE_NO_EDGES: 'CHAMFER_ANGLE_NO_EDGES',\n CHAMFER_ANGLE_BAD_DISTANCE: 'CHAMFER_ANGLE_BAD_DISTANCE',\n CHAMFER_ANGLE_BAD_ANGLE: 'CHAMFER_ANGLE_BAD_ANGLE',\n BEZIER_MIN_POINTS: 'BEZIER_MIN_POINTS',\n POLYGON_MIN_POINTS: 'POLYGON_MIN_POINTS',\n WIRE_NOT_CLOSED: 'WIRE_NOT_CLOSED',\n FACE_NOT_PLANAR: 'FACE_NOT_PLANAR',\n ZERO_LENGTH_EXTRUSION: 'ZERO_LENGTH_EXTRUSION',\n ZERO_TWIST_ANGLE: 'ZERO_TWIST_ANGLE',\n LOFT_EMPTY: 'LOFT_EMPTY',\n UNSUPPORTED_PROFILE: 'UNSUPPORTED_PROFILE',\n UNKNOWN_PLANE: 'UNKNOWN_PLANE',\n NULL_SHAPE_INPUT: 'NULL_SHAPE_INPUT',\n INVALID_FILLET_RADIUS: 'INVALID_FILLET_RADIUS',\n INVALID_CHAMFER_DISTANCE: 'INVALID_CHAMFER_DISTANCE',\n INVALID_THICKNESS: 'INVALID_THICKNESS',\n ZERO_OFFSET: 'ZERO_OFFSET',\n NO_EDGES: 'NO_EDGES',\n NO_FACES: 'NO_FACES',\n DRAFT_NO_FACES: 'DRAFT_NO_FACES',\n DRAFT_INVALID_ANGLE: 'DRAFT_INVALID_ANGLE',\n DRAFT_NOT_3D: 'DRAFT_NOT_3D',\n DRAFT_FAILED: 'DRAFT_FAILED',\n\n // Type cast errors\n FUSE_NOT_3D: 'FUSE_NOT_3D',\n CUT_NOT_3D: 'CUT_NOT_3D',\n INTERSECT_NOT_3D: 'INTERSECT_NOT_3D',\n FUSE_ALL_NOT_3D: 'FUSE_ALL_NOT_3D',\n CUT_ALL_NOT_3D: 'CUT_ALL_NOT_3D',\n LOFT_NOT_3D: 'LOFT_NOT_3D',\n SWEEP_NOT_3D: 'SWEEP_NOT_3D',\n REVOLUTION_NOT_3D: 'REVOLUTION_NOT_3D',\n FILLET_NOT_3D: 'FILLET_NOT_3D',\n CHAMFER_NOT_3D: 'CHAMFER_NOT_3D',\n CHAMFER_ANGLE_NOT_3D: 'CHAMFER_ANGLE_NOT_3D',\n CHAMFER_ANGLE_FAILED: 'CHAMFER_ANGLE_FAILED',\n CSG_NOT_3D: 'CSG_NOT_3D',\n SHELL_NOT_3D: 'SHELL_NOT_3D',\n OFFSET_NOT_3D: 'OFFSET_NOT_3D',\n NULL_SHAPE: 'NULL_SHAPE',\n NO_WRAPPER: 'NO_WRAPPER',\n WELD_NOT_SHELL: 'WELD_NOT_SHELL',\n SOLID_BUILD_FAILED: 'SOLID_BUILD_FAILED',\n OFFSET_NOT_WIRE: 'OFFSET_NOT_WIRE',\n UNKNOWN_SURFACE_TYPE: 'UNKNOWN_SURFACE_TYPE',\n UNKNOWN_CURVE_TYPE: 'UNKNOWN_CURVE_TYPE',\n SWEEP_START_NOT_WIRE: 'SWEEP_START_NOT_WIRE',\n SWEEP_END_NOT_WIRE: 'SWEEP_END_NOT_WIRE',\n\n // IO errors\n STEP_EXPORT_FAILED: 'STEP_EXPORT_FAILED',\n STEP_EXPORT_CONFIGURED_FAILED: 'STEP_EXPORT_CONFIGURED_FAILED',\n STEP_FILE_READ_ERROR: 'STEP_FILE_READ_ERROR',\n STEP_EXPORT_CRASHED: 'STEP_EXPORT_CRASHED',\n STEP_EXPORT_UNSERIALIZABLE: 'STEP_EXPORT_UNSERIALIZABLE',\n STL_EXPORT_FAILED: 'STL_EXPORT_FAILED',\n STL_FILE_READ_ERROR: 'STL_FILE_READ_ERROR',\n STL_EXPORT_CRASHED: 'STL_EXPORT_CRASHED',\n STL_EXPORT_UNSERIALIZABLE: 'STL_EXPORT_UNSERIALIZABLE',\n STEP_IMPORT_FAILED: 'STEP_IMPORT_FAILED',\n STL_IMPORT_FAILED: 'STL_IMPORT_FAILED',\n IGES_EXPORT_FAILED: 'IGES_EXPORT_FAILED',\n IGES_IMPORT_FAILED: 'IGES_IMPORT_FAILED',\n DXF_IMPORT_FAILED: 'DXF_IMPORT_FAILED',\n OBJ_IMPORT_FAILED: 'OBJ_IMPORT_FAILED',\n THREEMF_IMPORT_FAILED: 'THREEMF_IMPORT_FAILED',\n\n // Computation errors\n PARAMETER_NOT_FOUND: 'PARAMETER_NOT_FOUND',\n INTERSECTION_FAILED: 'INTERSECTION_FAILED',\n SELF_INTERSECTION_FAILED: 'SELF_INTERSECTION_FAILED',\n STRAIGHT_SKELETON_FAILED: 'STRAIGHT_SKELETON_FAILED',\n CENTER_OF_MASS_FAILED: 'CENTER_OF_MASS_FAILED',\n\n // Compound operation errors\n COMPOUND_NO_FACES: 'COMPOUND_NO_FACES',\n COMPOUND_FACE_NOT_FOUND: 'COMPOUND_FACE_NOT_FOUND',\n\n // Query errors\n FINDER_NOT_UNIQUE: 'FINDER_NOT_UNIQUE',\n\n // Hull errors\n HULL_EMPTY_INPUT: 'HULL_EMPTY_INPUT',\n HULL_FAILED: 'HULL_FAILED',\n HULL_DEGENERATE: 'HULL_DEGENERATE',\n HULL_NOT_3D: 'HULL_NOT_3D',\n\n // Minkowski errors\n MINKOWSKI_FAILED: 'MINKOWSKI_FAILED',\n MINKOWSKI_NULL_TOOL: 'MINKOWSKI_NULL_TOOL',\n MINKOWSKI_NOT_3D: 'MINKOWSKI_NOT_3D',\n\n // Polyhedron errors\n POLYHEDRON_INSUFFICIENT_POINTS: 'POLYHEDRON_INSUFFICIENT_POINTS',\n POLYHEDRON_INSUFFICIENT_FACES: 'POLYHEDRON_INSUFFICIENT_FACES',\n POLYHEDRON_INVALID_INDEX: 'POLYHEDRON_INVALID_INDEX',\n POLYHEDRON_FAILED: 'POLYHEDRON_FAILED',\n\n // General validation errors\n VALIDATION_FAILED: 'VALIDATION_FAILED',\n\n // Roof errors\n ROOF_FAILED: 'ROOF_FAILED',\n\n // Multi-section sweep errors\n MULTI_SWEEP_INSUFFICIENT_SECTIONS: 'MULTI_SWEEP_INSUFFICIENT_SECTIONS',\n MULTI_SWEEP_FAILED: 'MULTI_SWEEP_FAILED',\n\n // Guide curve sweep errors\n GUIDED_SWEEP_FAILED: 'GUIDED_SWEEP_FAILED',\n\n // Surface errors\n SURFACE_GRID_TOO_SMALL: 'SURFACE_GRID_TOO_SMALL',\n SURFACE_GRID_JAGGED: 'SURFACE_GRID_JAGGED',\n SURFACE_FAILED: 'SURFACE_FAILED',\n\n // Assembly mate errors\n ASSEMBLY_MATE_INVALID: 'ASSEMBLY_MATE_INVALID',\n ASSEMBLY_SOLVE_FAILED: 'ASSEMBLY_SOLVE_FAILED',\n ASSEMBLY_NOT_CONVERGED: 'ASSEMBLY_NOT_CONVERGED',\n\n // Blueprint / CompoundBlueprint errors\n BLUEPRINT_EMPTY_CURVES: 'BLUEPRINT_EMPTY_CURVES',\n COMPOUND_BLUEPRINT_EMPTY: 'COMPOUND_BLUEPRINT_EMPTY',\n\n // GLB/glTF import errors\n GLB_IMPORT_FAILED: 'GLB_IMPORT_FAILED',\n\n // Font/text errors\n FONT_FETCH_FAILED: 'FONT_FETCH_FAILED',\n FONT_PARSE_FAILED: 'FONT_PARSE_FAILED',\n NO_FONT_LOADED: 'NO_FONT_LOADED',\n\n // 2D curve geometry errors\n CURVE2D_CONSTRUCTION_FAILED: 'CURVE2D_CONSTRUCTION_FAILED',\n CURVE2D_INVALID_RADIUS: 'CURVE2D_INVALID_RADIUS',\n CURVE2D_TRANSFORM_FAILED: 'CURVE2D_TRANSFORM_FAILED',\n CURVE2D_QUERY_FAILED: 'CURVE2D_QUERY_FAILED',\n CURVE2D_INTERSECTION_FAILED: 'CURVE2D_INTERSECTION_FAILED',\n CURVE2D_BRIDGE_FAILED: 'CURVE2D_BRIDGE_FAILED',\n\n // Shape identity errors\n CLONE_FAILED: 'CLONE_FAILED',\n SIMPLIFY_FAILED: 'SIMPLIFY_FAILED',\n TO_BREP_FAILED: 'TO_BREP_FAILED',\n\n // Unsupported capability errors (ADR-0006 Phase 4)\n UNSUPPORTED_CAPABILITY: 'UNSUPPORTED_CAPABILITY',\n} as const;\n\n/** Union of all known error code string literals. */\nexport type BrepErrorCode = (typeof BrepErrorCode)[keyof typeof BrepErrorCode];\n\n// ---------------------------------------------------------------------------\n// Error interface\n// ---------------------------------------------------------------------------\n\n/**\n * Structured error returned inside `Result<T>` on failure.\n *\n * Every error carries a `kind` (category), a machine-readable `code`,\n * and a human-readable `message`. Optional `cause` preserves the\n * original exception, and `metadata` holds extra context.\n *\n * The optional `suggestion` field provides actionable recovery hints.\n */\nexport interface BrepError {\n readonly kind: BrepErrorKind;\n readonly code: string;\n readonly message: string;\n readonly suggestion?: string;\n readonly cause?: unknown;\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\n// ---------------------------------------------------------------------------\n// Constructors per kind\n// ---------------------------------------------------------------------------\n\nfunction makeError(\n kind: BrepErrorKind,\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n const base: BrepError = { kind, code, message, cause };\n if (suggestion) {\n const withSuggestion = { ...base, suggestion };\n if (metadata) return { ...withSuggestion, metadata };\n return withSuggestion;\n }\n if (metadata) return { ...base, metadata };\n return base;\n}\n\n/** Create an error for a failed kernel kernel operation.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function kernelError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('KERNEL_OPERATION', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for invalid input parameters.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function validationError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('VALIDATION', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a failed shape type cast or conversion.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function typeCastError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('TYPE_CAST', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for an invalid sketcher state transition.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function sketcherStateError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('SKETCHER_STATE', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a module initialisation failure.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function moduleInitError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('MODULE_INIT', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a failed geometric computation.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function computationError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('COMPUTATION', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a file import/export failure.\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function ioError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('IO', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a shape query failure (e.g. finder not unique).\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function queryError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('QUERY', code, message, cause, metadata, suggestion);\n}\n\n/** Create an error for a capability not supported by the current kernel (ADR-0006 Phase 4).\n *\n * @param code - Error code identifying the failure.\n * @param message - Human-readable error message.\n * @param cause - Optional underlying cause of the error.\n * @param metadata - Optional structured metadata attached to the error.\n * @param suggestion - Optional actionable suggestion for resolving the error.\n * @returns The constructed {@link BrepError}.\n */\nexport function unsupportedError(\n code: string,\n message: string,\n cause?: unknown,\n metadata?: Record<string, unknown>,\n suggestion?: string\n): BrepError {\n return makeError('UNSUPPORTED', code, message, cause, metadata, suggestion);\n}\n\n// Re-export from kernelErrorTranslation for backward compatibility\nexport { translateKernelError, getSuggestionForCode } from './kernelErrorTranslation';\n\n// ---------------------------------------------------------------------------\n// Array safety helper\n// ---------------------------------------------------------------------------\n\n/**\n * Safe array index access that throws a descriptive {@link BrepBugError} instead\n * of returning `undefined` when the index is out of bounds.\n *\n * Use in place of `arr[i]!` when the caller can prove the index is valid by\n * construction but TypeScript's `noUncheckedIndexedAccess` still requires a guard.\n *\n * @param arr - The array to index into.\n * @param index - The index to access.\n * @param context - Optional caller context for the error message (e.g. function name).\n * @returns The array element at `index`.\n */\nexport function safeIndex<T>(arr: readonly T[], index: number, context?: string): T {\n if (index < 0 || index >= arr.length) {\n bug(context ?? 'safeIndex', `Index ${index} is out of bounds (array length ${arr.length})`);\n }\n return wasmIndex(arr, index);\n}\n"]}
|
package/dist/result/vec3.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 第一方模块(2026-09-25 core-decouple Phase 1):`wasmIndex` 复制自 brepjs
|
|
3
3
|
* `src/utils/vec3.ts`(同源复制,仅提取 errors.ts 依赖的最小符号)。
|
|
4
4
|
*/
|
|
5
|
-
/** Safe typed array index access
|
|
5
|
+
/** Safe typed array index access(原 brepjs 语义:`arr[i] as T`)。
|
|
6
6
|
*
|
|
7
7
|
* @param arr - The array to index into.
|
|
8
8
|
* @param i - The index to access.
|