@faicad/faijs 0.29.3 → 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 +136 -0
- package/dist/api/appearance.d.ts.map +1 -0
- package/dist/api/appearance.js +228 -0
- package/dist/api/appearance.js.map +1 -0
- 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/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +28 -0
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.d.ts +19 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +31 -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 +91 -0
- package/dist/api/meta.d.ts.map +1 -0
- package/dist/api/meta.js +97 -0
- package/dist/api/meta.js.map +1 -0
- 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 +124 -8
- 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 +204 -13
- 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 +8 -8
- 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/export/export-model.d.ts +40 -0
- package/dist/brep/export/export-model.d.ts.map +1 -1
- package/dist/brep/export/export-model.js +268 -25
- package/dist/brep/export/export-model.js.map +1 -1
- package/dist/brep/export/step-meta-header.d.ts +102 -0
- package/dist/brep/export/step-meta-header.d.ts.map +1 -0
- package/dist/brep/export/step-meta-header.js +225 -0
- package/dist/brep/export/step-meta-header.js.map +1 -0
- package/dist/brep/export/step.d.ts +5 -1
- package/dist/brep/export/step.d.ts.map +1 -1
- package/dist/brep/export/step.js +11 -2
- package/dist/brep/export/step.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 +65 -3
- 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 +90 -29
- 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/lang/types.d.ts +5 -6
- package/dist/lang/types.d.ts.map +1 -1
- package/dist/lang/types.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 +39 -16
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +151 -22
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +42 -7
- 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 +37 -1
- package/dist/mesh/threemf-loader.d.ts.map +1 -1
- package/dist/mesh/threemf-loader.js +205 -14
- 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 +43 -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/highLevelApi.d.ts +4 -1
- package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
- package/dist/occt-kernel/highLevelApi.js +4 -2
- package/dist/occt-kernel/highLevelApi.js.map +1 -1
- 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 +32 -5
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts +1 -1
- package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
- package/dist/occt-kernel/occtKernel.js +19 -1
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/occt-kernel/stepMetaParser.d.ts +44 -0
- package/dist/occt-kernel/stepMetaParser.d.ts.map +1 -0
- package/dist/occt-kernel/stepMetaParser.js +166 -0
- package/dist/occt-kernel/stepMetaParser.js.map +1 -0
- 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 +35 -3
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +44 -2
- package/dist/shape.js.map +1 -1
- package/dist/step/stepMetaParser.d.ts +55 -0
- package/dist/step/stepMetaParser.d.ts.map +1 -0
- package/dist/step/stepMetaParser.js +177 -0
- package/dist/step/stepMetaParser.js.map +1 -0
- 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 +9 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * faijs-cli — CLI 逻辑(可导入、可测试)。第三方调用入口:packages/core/scripts/faijs-cli.ts。\n * (仓库自用 doc/ci/开发脚本在根 scripts/ 与 packages/core/scripts/gen-*,见 scripts/README.md。)\n *\n *\n * 命令:\n * check <file.fai.js> — dryRun:parse + schema + 引用预检\n * run <file.fai.js> --out <file> — 执行并导出 STL/STEP\n * view <file.fai.js> --out <x.svg> — 执行并投影输出视图 SVG(三视图/等轴测)\n *\n * 选项:\n * --mode <auto|brep|mesh> — 执行模式(默认 auto;view 需要 BREP 路径)\n * --assets <dir> — 资产目录\n * --fonts <dir> — 额外字体目录\n * --part <name> — (view) 指定投影的 shape 变量名;缺省按终端自动选择\n * --view <front|back|top|bottom|left|right|iso|\"x,y,z\">\n * — (view) 单视图方向(默认 front)\n * --sheet <front,top,right,iso> — (view) 多视图图纸(projectSheet;与 --view 互斥)\n */\n\nimport { readFileSync, writeFileSync, existsSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { resolve, extname, dirname, join } from 'node:path'\nimport { createRuntime } from '../cad-runtime/runtime'\nimport type { CadRuntime } from '../cad-runtime/runtime'\nimport type { LibNamespace } from '../runtime-state'\nimport type { ExecutionMode, HostPorts, LibLoader } from '../cad-runtime/ports'\nimport { createNodePorts } from './index'\nimport { createFsProjectLoader, findProjectRoot, projectKeyOf } from './fs-project-loader'\nimport { exportModelSync } from '../brep/export/export-model'\nimport { exportStepFromSolids, type StepExportEntry } from '../brep/export/step'\nimport { solidToShape } from '../brep/brep-ops'\nimport { registerOcctBrepEngine } from '../brep/engine/adapters/occt'\nimport type { Shape } from '../mesh/types'\nimport type { CompoundShape } from '../shape'\nimport { ensureSlot } from '../shape'\nimport { brepOf } from '../shape'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { asPartName } from '../identity'\nimport { symbolTableNames } from '../lang/symbol-table'\nimport { projectView, projectSheet } from '../api/view'\nimport type { ViewSpec } from '../api/view/view-camera'\n\n// ── P 四(4.4):Node CLI 自动装载(D3-Node,§9.4)──\n// 脚本 import 的第三方库按 specifier 动态解析,host 不再写死任何包清单:\n// - scoped 包名(`@faicad/...`)直接动态 import;\n// - 短名(如 `sheetmetal`)先归一为 scoped 全名再装载(避免误装同名陌生人包)。\n// 包未安装 → 动态 import 抛 ERR_MODULE_NOT_FOUND,由 runtime 报明确装载失败信息。\n/** scoped 包名前缀:CLI 允许动态装载的库范围。 */\nconst CLI_SCOPED_PREFIX = '@faicad/'\n/** 已登记短名 → scoped 全名归一表(仅收录 `@faicad/` 范围内的库,防同名陌生人包)。 */\nconst CLI_SHORT_NAMES: Record<string, string> = {\n 'sheetmetal': '@faicad/sheetmetal',\n 'faijs-cadquery': '@faicad/faijs-cadquery',\n 'faijs-gears': '@faicad/faijs-gears',\n 'faijs-fasteners': '@faicad/faijs-fasteners',\n}\n\n/**\n * 读库 package.json 的 `faijs.autoLift` 字段(D3-autoLift 外置,§9.4):\n * 逐库 autoLift 约定从 host 写死改为由各库自身 package.json 声明,loader 此处读取。\n * 未声明 → 返回 undefined(回落到 runtime 的推断式 `!hasDualOp(ns)`);\n * 声明为布尔 → 直接采用(如 cq-compat 声明 false,因其函数以 faijs Shape 为受众,\n * 被 compat 边界整体提升会破坏内部借面逻辑)。\n */\nconst requireNode = createRequire(import.meta.url)\nfunction readLibAutoLift(pkg: string): boolean | undefined {\n try {\n const pjPath = requireNode.resolve(`${pkg}/package.json`)\n const pj = JSON.parse(readFileSync(pjPath, 'utf8')) as { faijs?: { autoLift?: boolean } }\n const v = pj.faijs?.autoLift\n return typeof v === 'boolean' ? v : undefined\n } catch {\n return undefined\n }\n}\n\n/** specifier → scoped 全名归一:scoped 名原样,已登记短名映射,其余原样交 import 解析。 */\nfunction normalizeCliSpecifier(name: string): string {\n return CLI_SHORT_NAMES[name] ?? name\n}\n\nconst cliPortsLibLoader: LibLoader = {\n loadLib: async (name) => {\n const pkg = normalizeCliSpecifier(name)\n if (!pkg.startsWith(CLI_SCOPED_PREFIX)) {\n throw new Error(`package \"${name}\" is not a scoped @faicad/ library`)\n }\n return (await import(pkg)) as LibNamespace\n },\n listLibs: () => [...Object.keys(CLI_SHORT_NAMES), '@faicad/'],\n loadSource: async (name) => {\n const pkg = normalizeCliSpecifier(name)\n if (!pkg.startsWith(CLI_SCOPED_PREFIX)) return undefined\n try {\n const req = createRequire(import.meta.url)\n const pkgJsonPath = req.resolve(`${pkg}/package.json`)\n const pkgDir = dirname(pkgJsonPath)\n for (const p of [join(pkgDir, 'src', 'index.ts'), join(pkgDir, 'dist', 'index.js'), join(pkgDir, 'src', 'index.js')]) {\n if (existsSync(p)) return readFileSync(p, 'utf-8')\n }\n return undefined\n } catch {\n return undefined\n }\n },\n // 默认不提升(与历史 CLI 行为一致);各库用 package.json \"faijs.autoLift\" 逐库覆盖。\n options: {\n autoLift: false,\n autoLiftFor: (name) => {\n const pkg = normalizeCliSpecifier(name)\n return pkg.startsWith(CLI_SCOPED_PREFIX) ? readLibAutoLift(pkg) : undefined\n },\n },\n}\n\n/** 注入 libLoader 到 node ports(CLI 宿主白名单装载)。 */\nfunction withCliLibLoader(ports: HostPorts): HostPorts {\n return { ...ports, libLoader: cliPortsLibLoader }\n}\n\n/**\n * 注入 projectLoader 到 node ports(多文件 §4.5)。\n *\n * 项目根缺省由 `findProjectRoot` 从入口文件向上找最近的 `package.json`;\n * 宿主可用 `--project-root` 覆盖。未提供根(不应发生)时不注入,单文件行为不变。\n */\nfunction withCliProjectLoader(ports: HostPorts, root: string | undefined): HostPorts {\n if (!root) return ports\n return { ...ports, projectLoader: createFsProjectLoader(root) }\n}\n\n/** Options accepted by the `check` command. */\nexport interface CliCheckOptions {\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /**\n * Extra cad-namespace entries the host merges at run time (`cad.sketch`\n * from @faicad/faijs-sketch).\n *\n * I-group (2026-10-03): the unknown-op guard compares the script's callees\n * against `symbolTableNames()`, which knows only the STATIC table. A host\n * that merges those libraries and passes them to {@link cliRun} therefore\n * got `unknown op: cad.sketch is not in the cad namespace` from every check\n * of a perfectly runnable script — `rebased-sweep.ts` reported it for every\n * product in a corpus sweep. Check and run must see the same namespace, so\n * the caller states its merged entries here.\n */\n libs?: Record<string, unknown>\n}\n\n/** Options accepted by the `run` command. */\nexport interface CliRunOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad — the CLI entry faijs-cli.ts passes createApiNamespace; core does not assemble it by default). */\n libs?: Record<string, LibNamespace>\n /**\n * 项目根(多文件 §4.5):相对 import 的解析基准,moduleKey = 相对它的路径。\n * 缺省由入口文件向上找最近的 package.json。\n */\n projectRoot?: string\n /**\n * 连带导出隐藏终端(默认 false)。keep / keepHidden 保留的源几何默认不产出\n * (隐藏的语义即\"保留但不出现在产物里\");置 true 恢复旧行为,把 hidden 终端\n * 也一并写盘(多为诊断用途)。\n */\n includeHidden?: boolean\n}\n\n/** Result of the `check` (dry-run validation) command. */\nexport interface CliCheckResult {\n /** Whether the validation passed. */\n ok: boolean\n /** Validation errors found, one per stage. */\n errors: Array<{ stage: string; message: string; line?: number; stmtId?: string }>\n /** Non-fatal warnings reported during validation. */\n warnings: string[]\n /** Script-level summary when the script parsed successfully. */\n script?: { statements: number; callees: string[] }\n}\n\n/** Result of the `run` (execute and export) command. */\nexport interface CliRunResult {\n /** Whether execution and export succeeded. */\n ok: boolean\n /** The written output file path. */\n outputFile?: string\n /** The written output format ('stl' | 'step'). */\n outputFormat?: string\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/** Options accepted by the `view` command. */\nexport interface CliViewOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). view 需要 BREP 路径(mesh-only 无投影)。 */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad). */\n libs?: Record<string, LibNamespace>\n /** Project root for relative .fai.js imports. */\n projectRoot?: string\n /** Shape variable name to project; default resolves terminals like `run`. */\n part?: string\n /** Single view direction (default 'front'); mutually exclusive with sheet. */\n view?: ViewSpec\n /** Multi-view sheet list (projectSheet); mutually exclusive with view. */\n sheet?: ViewSpec[]\n}\n\n/** Result of the `view` (execute and project SVG) command. */\nexport interface CliViewResult {\n /** Whether execution and projection succeeded. */\n ok: boolean\n /** The written SVG file path(s). */\n outputFiles?: string[]\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/**\n * Execute the `check` command: dry-run validate a .fai.js file.\n *\n * @param filePath - path to the .fai.js file to validate\n * @param _opts - optional CLI check options (assets and fonts directories)\n * @returns the check result with any validation errors\n */\nexport function cliCheck(filePath: string, _opts?: CliCheckOptions): CliCheckResult {\n const code = readFileSync(filePath, 'utf-8')\n const ports = withCliLibLoader(createNodePorts({\n assetsDir: _opts?.assetsDir,\n fontsDir: _opts?.fontsDir,\n }))\n const runtime = createRuntime(ports)\n const result = runtime.check(code)\n const errors = result.errors.map((e) => ({\n stage: e.stage,\n message: e.message,\n line: e.line,\n stmtId: e.stmtId,\n }))\n // D11 (2026-09-28): unknown-op guard. check() is syntax+reference only — an\n // op the cad namespace doesn't have used to pass `check` clean and die at\n // runtime (e.g. `cad.sketch is not a function` when a host forgets to merge\n // the sketch library). Compare the script's callees against the\n // symbol-table union view (platform + registered library entries) and fail\n // the check on any unknown callee.\n if (result.ok && result.script) {\n const known = new Set(symbolTableNames())\n // Ops the host merges at run time are not in the static table; accept the\n // names it declares as known so check agrees with the run that follows.\n for (const ns of Object.values(_opts?.libs ?? {})) {\n if (ns && typeof ns === 'object') {\n for (const key of Object.keys(ns as Record<string, unknown>)) known.add(key)\n }\n }\n const unknown = [...new Set(result.script.callees)].filter((n) => !known.has(n))\n for (const name of unknown) {\n errors.push({\n stage: 'symbol',\n message: `unknown op: cad.${name} is not in the cad namespace (host library not merged or op name misspelled)`,\n line: undefined,\n stmtId: undefined,\n })\n }\n }\n return {\n ok: result.ok && errors.length === 0,\n errors,\n warnings: result.warnings,\n script: result.script,\n }\n}\n\n/**\n * Execute the `run` command: execute a .fai.js file and export STL/STEP.\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output file path for the exported result (extension determines format)\n * @param opts - optional run options (mode, assets/fonts directories, injected libs)\n * @returns the run result describing success or failure\n */\nexport async function cliRun(\n filePath: string,\n outPath: string,\n opts?: CliRunOptions,\n): Promise<CliRunResult> {\n const code = readFileSync(filePath, 'utf-8')\n // 多文件(§4.5):项目根缺省向上找 package.json;入口自身也有 key(相对根的路径),\n // 否则入口在子目录时它的 `./parts/x.fai.js` 会以根为基准解析而错位。\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT and bind the vendored brepjs kernel registry (D10) so that\n // cq-compat parts (which project ops through compatFn) run end-to-end under\n // the CLI. registerOcctBrepEngine is idempotent and itself boots initOcctWasm.\n await registerOcctBrepEngine()\n\n // Create runtime with node ports\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n // Part 1.4:cad 经 registerLib 声明 packageName(脚本可 `import * as cad from\n // '@faicad/faijs'`,check ①.5 据此校验 specifier——不 declare 则 import 被拒)。\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n // Execute(T5 后:direct 路径,源码文本直通执行)\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n // Determine output format from extension\n const ext = extname(outPath).toLowerCase().slice(1)\n const terminals = execResult.terminals ?? []\n\n // E1 (H12): export-side failures must surface as a structured result, not an\n // exception — the census and batch driver treat a throw as a process crash,\n // while `{ ok: false, error }` keeps it a per-file, classifiable failure.\n try {\n return await exportExecutionResult(outPath, ext, execResult, terminals, opts?.includeHidden ?? false)\n } catch (e) {\n return {\n ok: false,\n error: `Export failed: ${String((e as Error)?.message ?? e)}`,\n infos: execResult.infos,\n }\n }\n}\n\n/**\n * 选出「可导出」的终端:默认剔除 hidden。\n *\n * 隐藏终端 = 「保留但不产出」(`keep` / `keepHidden` 语义,R5)。导出层必须默认跳过,\n * 否则布尔运算保留的源几何会对每个 hidden 终端各写一个 `out.step_<i>_<name>` 产物,\n * 让一个逻辑形状看起来像 N 个(FCStd port 的 `solids 1vsN` 失配即由此而来)。\n * 需要旧行为(连同隐藏源一起写出,多用于诊断)时显式传 `includeHidden=true`。\n *\n * @param terminals - 存活终端集合(含 `hidden` 标记)\n * @param includeHidden - 是否连同隐藏终端一起导出,缺省 false\n * @returns `exportable`(可导出终端)与 `hiddenCount`(被剔除的隐藏终端数)\n */\nexport function selectExportableTerminals<T extends { hidden?: boolean }>(\n terminals: readonly T[],\n includeHidden = false,\n): { exportable: T[]; hiddenCount: number } {\n const hiddenCount = terminals.reduce((n, t) => (t.hidden ? n + 1 : n), 0)\n const exportable = includeHidden ? [...terminals] : terminals.filter((t) => !t.hidden)\n return { exportable, hiddenCount }\n}\n\n/** Export an executed result to `outPath` (shared body of cliRun's export path). */\nasync function exportExecutionResult(\n outPath: string,\n ext: string,\n execResult: Awaited<ReturnType<CadRuntime['execute']>>,\n terminals: NonNullable<Awaited<ReturnType<CadRuntime['execute']>>['terminals']>,\n includeHidden = false,\n): Promise<{ ok: boolean; error?: string; outputFile?: string; outputFormat?: string; infos?: string[] }> {\n const { exportable, hiddenCount } = selectExportableTerminals(terminals, includeHidden)\n // 装配导出(writeAssemblyStep 的兜底路径)同样不得带出隐藏终端;includeHidden 时传 undefined。\n const hiddenTerminals = includeHidden\n ? undefined\n : new Set(terminals.filter((t) => t.hidden).map((t) => String(t.id)))\n // 有终端但全部隐藏 → 明确报错(不静默回退到「最后一个 output」,那等于把隐藏源漏出去)。\n if (!includeHidden && exportable.length === 0 && hiddenCount > 0) {\n return {\n ok: false,\n error: `All ${hiddenCount} live terminal(s) are hidden — nothing to export (pass includeHidden to export them)`,\n }\n }\n\n if (exportable.length === 0) {\n // No terminals — use last output\n const outputNames = [...execResult.outputs.keys()]\n if (outputNames.length === 0) {\n return { ok: false, error: 'No statements to export' }\n }\n const lastPartName = outputNames[outputNames.length - 1]\n const shape = execResult.outputs.get(asPartName(lastPartName))\n if (!shape) {\n return { ok: false, error: `No output for part \"${lastPartName}\"` }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(lastPartName))\n return writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n }\n\n // Single terminal\n if (exportable.length === 1) {\n const terminal = exportable[0]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) {\n return { ok: false, error: `No output for terminal \"${terminal.id}\"` }\n }\n // Assembly (compound with behavior) → expand members with colors\n if (!('positions' in shape) || !('indices' in shape)) {\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult, hiddenTerminals)\n if (asmResult) return asmResult\n }\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n return writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n }\n\n // Multiple terminals — write each to a separate file\n // First, check if any terminal is a compound (assembly) — export it as a single STEP\n for (let i = 0; i < exportable.length; i++) {\n const terminal = exportable[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) {\n // Compound terminal — try assembly STEP export\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult, hiddenTerminals)\n if (asmResult) return asmResult\n }\n }\n // Then export non-compound terminals\n for (let i = 0; i < exportable.length; i++) {\n const terminal = exportable[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) continue // skip compounds\n\n const name = terminal.meta?.name ?? terminal.id\n const sep = outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'\n const terminalOutPath = `${outPath}${sep}${i}_${name}.${ext}`\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n const result = writeOutput(terminalOutPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n if (!result.ok) return result\n }\n\n return { ok: true, outputFormat: ext }\n}\n\n/**\n * 解析 `--view` 参数:三数字逗号串 → 方向对象(\"1,-1,1\" → { dir: [1,-1,1] }),\n * 否则按视图名字符串处理(未知名由 viewCamera 抛错)。\n */\nfunction parseViewArg(v: string): ViewSpec {\n const parts = v.split(',').map((s) => s.trim())\n if (parts.length === 3) {\n const nums = parts.map(Number)\n if (nums.every((n) => Number.isFinite(n))) return { dir: nums as [number, number, number] }\n }\n // 视图名字符串('front'|'iso'|…):类型上 CLI 接受任意名称,未知名由 viewCamera 抛错。\n return v as ViewSpec\n}\n\n/**\n * 选出待投影的 shape 列表(`--part` 指定,或按终端自动选择,与 `run` 一致):\n * 只保留带 mesh 的 shape(compound/assembly 无 mesh,无法投影,跳过)。\n * 隐藏终端(keep/keepHidden 保留的源几何)默认不投影——与 `run` 同口径。\n */\nfunction selectViewShapes(\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n terminals?: Array<{ id: unknown; hidden?: boolean; meta?: { name?: string } }>\n },\n part?: string,\n): Array<{ name: string; shape: Shape }> {\n const outputs = execResult.outputs\n const viewable = (s: Shape | CompoundShape | undefined): s is Shape =>\n !!s && 'positions' in s && 'indices' in s\n\n if (part) {\n const shape = outputs.get(asPartName(part)) ?? outputs.get(part)\n if (viewable(shape)) return [{ name: part, shape }]\n return []\n }\n\n // 隐藏终端默认不投影。全部终端皆隐藏 → 空集(**不**回退到「所有 outputs」,\n // 否则会把全部中间量也画出来,与 run 的「全隐藏即无可导出」语义相悖)。\n const allTerminals = execResult.terminals ?? []\n const { exportable: terminals } = selectExportableTerminals(allTerminals)\n const ids: unknown[] = allTerminals.length > 0 ? terminals.map((t) => t.id) : [...outputs.keys()]\n const out: Array<{ name: string; shape: Shape }> = []\n for (const id of ids) {\n const shape = outputs.get(id) ?? outputs.get(asPartName(String(id)))\n if (viewable(shape)) {\n const metaName = terminals.find((t) => t.id === id)?.meta?.name\n out.push({ name: metaName ?? String(id), shape })\n }\n }\n return out\n}\n\n/**\n * Execute the `view` command: execute a .fai.js file and write view SVG(s).\n *\n * 投影在宿主侧进行:脚本只需建模(shape 变量或终端),CLI 调 projectView(--view,\n * 缺省 front)或 projectSheet(--sheet)把 SVG 字符串写盘。view 需要 BREP 路径——\n * mesh-only 的 shape 无 brep 槽,projectView 抛 E_BREP_ONLY_INPUT(提示 --mode brep/auto)。\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output SVG path (multiple shapes get `<out>_<i>_<name>.svg` suffixes)\n * @param opts - optional view options (mode, part, view/sheet, assets/fonts dirs, libs)\n * @returns the view result describing success or failure\n */\nexport async function cliView(\n filePath: string,\n outPath: string,\n opts?: CliViewOptions,\n): Promise<CliViewResult> {\n const code = readFileSync(filePath, 'utf-8')\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT(投影 HLR 依赖 brep 内核)。registerOcctBrepEngine is\n // idempotent and itself boots initOcctWasm, and also binds the vendored\n // brepjs kernel registry (D10) — same boot path as cliRun above.\n await registerOcctBrepEngine()\n\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n const shapes = selectViewShapes(execResult, opts?.part)\n if (shapes.length === 0) {\n return {\n ok: false,\n error: opts?.part\n ? `No output for part \"${opts.part}\"`\n : 'No viewable (mesh-bearing) shapes to project',\n infos: execResult.infos,\n }\n }\n\n const outFiles: string[] = []\n const single = shapes.length === 1\n for (let i = 0; i < shapes.length; i++) {\n const { name, shape } = shapes[i]\n const target = single\n ? outPath\n : `${outPath}${outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'}${i}_${name}.svg`\n try {\n const svg = opts?.sheet\n ? projectSheet(shape, opts.sheet)\n : projectView(shape, opts?.view ?? 'front')\n writeFileSync(target, svg, 'utf-8')\n outFiles.push(target)\n } catch (e) {\n return {\n ok: false,\n error: `Projection failed for \"${name}\": ${(e as Error).message}`,\n infos: execResult.infos,\n }\n }\n }\n return { ok: true, outputFiles: outFiles, infos: execResult.infos }\n}\n\n/**\n * 写出输出文件。\n *\n * 按零件类型分别处理导出:\n * - STL:取网格载荷(BREP 零件先经内核三角化),无重建。\n * - STEP:有 BREP solid → 精确 STEP(ADVANCED_FACE);无 BREP solid → 该零件的\n * 三角网格经重建管线导出(exportModelSync 内的 mesh 条目通路)。\n *\n * keep-syntax §5.1:outputs 现含 compound(group/assembly 产物,无 mesh);\n * compound 无法导出,给出明确错误(此前\"不在 outputs 中\"是静默失败)。\n */\nfunction writeOutput(\n outPath: string,\n ext: string,\n shape: Shape | CompoundShape,\n brepSolid?: { solid: BrepHandle; kernel: BrepEngineApi },\n): CliRunResult {\n if (!('positions' in shape) || !('indices' in shape)) {\n return {\n ok: false,\n error: `Output \"${outPath}\" is a compound (group/assembly) with no exportable mesh; export a member shape instead`,\n }\n }\n // 统一导出入口(R11):坐标换算与单位声明由 exportModel 同源产出。\n // CLI 无单位选项 → 缺省 mm(与既有行为一致)。\n const fmt = ext === 'stp' ? 'step' : ext\n if (fmt !== 'stl' && fmt !== 'step') {\n return { ok: false, error: `Unsupported output format: .${ext} (supported: .stl, .step)` }\n }\n // STL 只吃 mesh(export-model §10.6:solid 条目由调用方先三角化)。auto 模式下\n // 形状可能是 BREP solid → 导出 STL 前必须先用内核三角化,否则「no mesh entries」。\n // STEP 则直接走 solid 条目保留 ADVANCED_FACE 拓扑。\n let entry: { solid?: BrepHandle; mesh?: { positions: Float32Array; indices: Uint32Array } }\n if (brepSolid) {\n if (fmt === 'stl') {\n const tri = solidToShape(brepSolid.kernel, brepSolid.solid)\n entry = { mesh: { positions: tri.positions, indices: tri.indices } }\n } else {\n entry = { solid: brepSolid.solid }\n }\n } else {\n entry = { mesh: { positions: shape.positions, indices: shape.indices } }\n }\n const buffer = exportModelSync([entry], fmt)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: fmt }\n}\n\n/**\n * Export an assembly (compound with AssemblyBehavior) as a multi-entity STEP\n * file, preserving member names and colors (from behavior.memberColors).\n *\n * Returns null if the compound has no assembly behavior (falls through to\n * regular writeOutput), or a CliRunResult on success/failure.\n */\nfunction writeAssemblyStep(\n outPath: string,\n ext: string,\n compound: CompoundShape,\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n brepSolids?: Map<unknown, { solid: BrepHandle; kernel: BrepEngineApi }>\n },\n hiddenTerminals?: ReadonlySet<string>,\n): CliRunResult | null {\n if (ext !== 'step' && ext !== 'stp') return null\n const slot = ensureSlot(compound)\n const behavior = slot.behavior as\n | { memberNames?: string[]; memberColors?: Record<string, [number, number, number]> }\n | undefined\n\n // Find a kernel and collect all exportable solids\n let kernel: BrepEngineApi | null = null\n const entries: StepExportEntry[] = []\n\n // Preferred path: use behavior.memberNames to match colors.\n // Member name lookup tries (1) the explicit member name, then (2) the kept\n // script-variable name of the compound's i-th child — cq-compat's\n // buildAssembly passes CadQuery-style part names (\"axk\") while the shapes\n // are registered under their .fai.js variable names (\"shape_axk\").\n if (behavior?.memberNames && behavior.memberNames.length > 0) {\n // Member Shape list (same order as memberNames) — when a member name\n // misses in brepSolids (e.g. cq libs register short names like 'axk' while\n // the statement variable is 'shape_axk'), resolve the member shape by index\n // and extract its BREP solid, keeping the member name and color.\n const children = (compound as { children?: Shape[] }).children ?? []\n for (let i = 0; i < behavior.memberNames.length; i++) {\n const memberName = behavior.memberNames[i]\n // Preferred: read the member's LIVE identity slot (brepOf) — assembly\n // transforms are baked into slot.solid by the executor's\n // applyPendingAssemblyTransforms AFTER this statement, so the brepSolids\n // snapshot (registered at member creation) may hold the PRE-transform\n // handle. GOTCHA: don't reorder — brepSolids entries are stale for\n // transformed members.\n const child = children[i]\n const liveSolid = child ? (brepOf(child) as BrepHandle | undefined) : undefined\n if (liveSolid) {\n if (!kernel) kernel = execResult.brepSolids?.values().next().value?.kernel ?? null\n if (kernel) {\n entries.push({\n solid: liveSolid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n continue\n }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(memberName))\n if (solidEntry) {\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n }\n }\n }\n\n // Fallback: export all brepSolids (covers compounds where memberNames wasn't propagated)\n if (entries.length === 0 && execResult.brepSolids) {\n for (const [key, solidEntry] of execResult.brepSolids) {\n // 隐藏终端(keep/keepHidden 保留的源几何)不得借这条兜底路径落盘——\n // 与主导出路径同一判据(includeHidden 时 hiddenTerminals 传 undefined,不过滤)。\n if (hiddenTerminals?.has(String(key))) continue\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: typeof key === 'string' ? key : `part_${entries.length}`,\n })\n }\n }\n\n if (!kernel || entries.length === 0) {\n return null // Let writeOutput handle the error\n }\n\n const buffer = exportStepFromSolids(kernel, entries)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n}\n\n/**\n * Parse command-line arguments.\n *\n * @param argv - the raw process argument list (index 0 = node, 1 = script)\n * @returns the parsed command, file, and option values (command is null when unusable)\n */\nexport function parseArgs(argv: string[]): {\n command: 'check' | 'run' | 'view' | null\n file?: string\n out?: string\n mode?: ExecutionMode\n assetsDir?: string\n fontsDir?: string\n projectRoot?: string\n view?: string\n sheet?: string\n part?: string\n includeHidden?: boolean\n} {\n const args = argv.slice(2) // skip node + script\n if (args.length === 0) return { command: null }\n\n const command = args[0] as 'check' | 'run' | 'view' | null\n if (command !== 'check' && command !== 'run' && command !== 'view') return { command: null }\n\n let file: string | undefined\n let out: string | undefined\n let mode: ExecutionMode | undefined\n let assetsDir: string | undefined\n let fontsDir: string | undefined\n let projectRoot: string | undefined\n let view: string | undefined\n let sheet: string | undefined\n let part: string | undefined\n let includeHidden: boolean | undefined\n\n for (let i = 1; i < args.length; i++) {\n const arg = args[i]\n if (arg === '--out' || arg === '-o') {\n out = args[++i]\n } else if (arg === '--mode' || arg === '-m') {\n const m = args[++i] as ExecutionMode\n if (m === 'auto' || m === 'brep' || m === 'mesh') {\n mode = m\n }\n } else if (arg === '--assets') {\n assetsDir = args[++i]\n } else if (arg === '--fonts') {\n fontsDir = args[++i]\n } else if (arg === '--project-root') {\n projectRoot = args[++i]\n } else if (arg === '--view') {\n view = args[++i]\n } else if (arg === '--sheet') {\n sheet = args[++i]\n } else if (arg === '--part') {\n part = args[++i]\n } else if (arg === '--include-hidden') {\n includeHidden = true\n } else if (!file && !arg.startsWith('-')) {\n file = arg\n }\n }\n\n return { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part, includeHidden }\n}\n\n/**\n * CLI main entry point (called by scripts/faijs-cli.ts).\n *\n * @param argv - the raw process argument list\n * @param libs - host-injected library namespace (includes cad — faijs-cli.ts passes createApiNamespace; core does not assemble it by default)\n * @returns the process exit code (0 on success, non-zero on failure)\n */\nexport async function cliMain(argv: string[], libs?: Record<string, LibNamespace>): Promise<number> {\n const { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part, includeHidden } = parseArgs(argv)\n\n if (!command) {\n process.stderr.write('Usage: faijs-cli <check|run|view> <file.fai.js> [options]\\n')\n process.stderr.write(' check <file> DryRun validation\\n')\n process.stderr.write(' run <file> --out <file> Execute and export STL/STEP\\n')\n process.stderr.write(' view <file> --out <svg> Execute and project view SVG (三视图/等轴测)\\n')\n process.stderr.write(' --mode <auto|brep|mesh> Execution mode (view 需要 BREP 路径)\\n')\n process.stderr.write(' --assets <dir> Asset directory\\n')\n process.stderr.write(' --fonts <dir> Extra fonts directory\\n')\n process.stderr.write(' --project-root <dir> Project root for relative .fai.js imports\\n')\n process.stderr.write(' --include-hidden (run) also export hidden terminals (keep/keepHidden sources; default off)\\n')\n process.stderr.write(' --part <name> (view) shape variable to project (default: terminals)\\n')\n process.stderr.write(' --view <dir> (view) single view: front|back|top|bottom|left|right|iso|\"x,y,z\" (default front)\\n')\n process.stderr.write(' --sheet <a,b,c> (view) multi-view sheet: front,top,right,iso (mutually exclusive with --view)\\n')\n return 1\n }\n\n if (!file) {\n process.stderr.write(`Error: missing file argument for \"${command}\"\\n`)\n return 1\n }\n\n const filePath = resolve(file)\n\n if (command === 'check') {\n const result = cliCheck(filePath, { assetsDir, fontsDir })\n if (result.ok) {\n process.stdout.write(`✓ ${filePath}: OK\\n`)\n if (result.script) {\n process.stdout.write(` statements: ${result.script.statements}\\n`)\n process.stdout.write(` callees: ${result.script.callees.join(', ')}\\n`)\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.errors.length} error(s)\\n`)\n for (const err of result.errors) {\n const loc = err.line ? ` (line ${err.line})` : err.stmtId ? ` (stmt: ${err.stmtId})` : ''\n process.stderr.write(` [${err.stage}] ${err.message}${loc}\\n`)\n }\n return 1\n }\n }\n\n if (command === 'run') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"run\" command\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const result = await cliRun(filePath, outPath, { mode, assetsDir, fontsDir, projectRoot, libs, includeHidden })\n\n if (result.ok) {\n process.stdout.write(`✓ ${filePath} → ${outPath} (${result.outputFormat})\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n if (command === 'view') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"view\" command\\n')\n return 1\n }\n if (view && sheet) {\n process.stderr.write('Error: --view and --sheet are mutually exclusive\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const viewSpec = view ? parseViewArg(view) : undefined\n const sheetSpec = sheet\n ? (sheet\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean) as ViewSpec[])\n : undefined\n const result = await cliView(filePath, outPath, {\n mode,\n assetsDir,\n fontsDir,\n projectRoot,\n libs,\n part,\n view: viewSpec,\n sheet: sheetSpec,\n })\n\n if (result.ok) {\n for (const f of result.outputFiles ?? []) {\n process.stdout.write(`✓ ${filePath} → ${f} (svg)\\n`)\n }\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n return 1\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * faijs-cli — CLI 逻辑(可导入、可测试)。第三方调用入口:packages/core/scripts/faijs-cli.ts。\n * (仓库自用 doc/ci/开发脚本在根 scripts/ 与 packages/core/scripts/gen-*,见 scripts/README.md。)\n *\n *\n * 命令:\n * check <file.fai.js> — dryRun:parse + schema + 引用预检\n * run <file.fai.js> --out <file> — 执行并导出 STL/STEP\n * view <file.fai.js> --out <x.svg> — 执行并投影输出视图 SVG(三视图/等轴测)\n *\n * 选项:\n * --mode <auto|brep|mesh> — 执行模式(默认 auto;view 需要 BREP 路径)\n * --assets <dir> — 资产目录\n * --fonts <dir> — 额外字体目录\n * --part <name> — (view) 指定投影的 shape 变量名;缺省按终端自动选择\n * --view <front|back|top|bottom|left|right|iso|\"x,y,z\">\n * — (view) 单视图方向(默认 front)\n * --sheet <front,top,right,iso> — (view) 多视图图纸(projectSheet;与 --view 互斥)\n */\n\nimport { readFileSync, writeFileSync, existsSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { resolve, extname, dirname, join } from 'node:path'\nimport { createRuntime } from '../cad-runtime/runtime'\nimport type { CadRuntime } from '../cad-runtime/runtime'\nimport type { LibNamespace } from '../runtime-state'\nimport type { ExecutionMode, HostPorts, LibLoader } from '../cad-runtime/ports'\nimport { createNodePorts } from './index'\nimport { createFsProjectLoader, findProjectRoot, projectKeyOf } from './fs-project-loader'\nimport { exportModelSync } from '../brep/export/export-model'\nimport { exportStepFromSolids, type StepExportEntry } from '../brep/export/step'\nimport { solidToShape } from '../brep/brep-ops'\nimport { registerOcctBrepEngine } from '../brep/engine/adapters/occt'\nimport type { Shape } from '../mesh/types'\nimport type { CompoundShape } from '../shape'\nimport { ensureSlot } from '../shape'\nimport { brepOf } from '../shape'\nimport type { BrepHandle, BrepSubShapeType } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { asPartName } from '../identity'\nimport { symbolTableNames } from '../lang/symbol-table'\nimport { projectView, projectSheet } from '../api/view'\nimport type { ViewSpec } from '../api/view/view-camera'\n\n// ── P 四(4.4):Node CLI 自动装载(D3-Node,§9.4)──\n// 脚本 import 的第三方库按 specifier 动态解析,host 不再写死任何包清单:\n// - scoped 包名(`@faicad/...`)直接动态 import;\n// - 短名(如 `sheetmetal`)先归一为 scoped 全名再装载(避免误装同名陌生人包)。\n// 包未安装 → 动态 import 抛 ERR_MODULE_NOT_FOUND,由 runtime 报明确装载失败信息。\n/** scoped 包名前缀:CLI 允许动态装载的库范围。 */\nconst CLI_SCOPED_PREFIX = '@faicad/'\n/** 已登记短名 → scoped 全名归一表(仅收录 `@faicad/` 范围内的库,防同名陌生人包)。 */\nconst CLI_SHORT_NAMES: Record<string, string> = {\n 'sheetmetal': '@faicad/sheetmetal',\n 'faijs-cadquery': '@faicad/faijs-cadquery',\n 'faijs-gears': '@faicad/faijs-gears',\n 'faijs-fasteners': '@faicad/faijs-fasteners',\n}\n\n/**\n * 读库 package.json 的 `faijs.autoLift` 字段(D3-autoLift 外置,§9.4):\n * 逐库 autoLift 约定从 host 写死改为由各库自身 package.json 声明,loader 此处读取。\n * 未声明 → 返回 undefined(回落到 runtime 的推断式 `!hasDualOp(ns)`);\n * 声明为布尔 → 直接采用(如 cq-compat 声明 false,因其函数以 faijs Shape 为受众,\n * 被 compat 边界整体提升会破坏内部借面逻辑)。\n */\nconst requireNode = createRequire(import.meta.url)\nfunction readLibAutoLift(pkg: string): boolean | undefined {\n try {\n const pjPath = requireNode.resolve(`${pkg}/package.json`)\n const pj = JSON.parse(readFileSync(pjPath, 'utf8')) as { faijs?: { autoLift?: boolean } }\n const v = pj.faijs?.autoLift\n return typeof v === 'boolean' ? v : undefined\n } catch {\n return undefined\n }\n}\n\n/** specifier → scoped 全名归一:scoped 名原样,已登记短名映射,其余原样交 import 解析。 */\nfunction normalizeCliSpecifier(name: string): string {\n return CLI_SHORT_NAMES[name] ?? name\n}\n\nconst cliPortsLibLoader: LibLoader = {\n loadLib: async (name) => {\n const pkg = normalizeCliSpecifier(name)\n if (!pkg.startsWith(CLI_SCOPED_PREFIX)) {\n throw new Error(`package \"${name}\" is not a scoped @faicad/ library`)\n }\n return (await import(pkg)) as LibNamespace\n },\n listLibs: () => [...Object.keys(CLI_SHORT_NAMES), '@faicad/'],\n loadSource: async (name) => {\n const pkg = normalizeCliSpecifier(name)\n if (!pkg.startsWith(CLI_SCOPED_PREFIX)) return undefined\n try {\n const req = createRequire(import.meta.url)\n const pkgJsonPath = req.resolve(`${pkg}/package.json`)\n const pkgDir = dirname(pkgJsonPath)\n for (const p of [join(pkgDir, 'src', 'index.ts'), join(pkgDir, 'dist', 'index.js'), join(pkgDir, 'src', 'index.js')]) {\n if (existsSync(p)) return readFileSync(p, 'utf-8')\n }\n return undefined\n } catch {\n return undefined\n }\n },\n // 默认不提升(与历史 CLI 行为一致);各库用 package.json \"faijs.autoLift\" 逐库覆盖。\n options: {\n autoLift: false,\n autoLiftFor: (name) => {\n const pkg = normalizeCliSpecifier(name)\n return pkg.startsWith(CLI_SCOPED_PREFIX) ? readLibAutoLift(pkg) : undefined\n },\n },\n}\n\n/**\n * 注入 libLoader 到 node ports(CLI 宿主白名单装载)。Exported for executeScript (B6).\n * @param ports - Node host ports to augment with the CLI lib loader.\n * @returns The augmented ports (`libLoader` set to the CLI scoped-package loader).\n */\nexport function withCliLibLoader(ports: HostPorts): HostPorts {\n return { ...ports, libLoader: cliPortsLibLoader }\n}\n\n/**\n * 注入 projectLoader 到 node ports(多文件 §4.5)。\n *\n * 项目根缺省由 `findProjectRoot` 从入口文件向上找最近的 `package.json`;\n * 宿主可用 `--project-root` 覆盖。未提供根(不应发生)时不注入,单文件行为不变。\n */\nfunction withCliProjectLoader(ports: HostPorts, root: string | undefined): HostPorts {\n if (!root) return ports\n return { ...ports, projectLoader: createFsProjectLoader(root) }\n}\n\n/** Options accepted by the `check` command. */\nexport interface CliCheckOptions {\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /**\n * Extra cad-namespace entries the host merges at run time (`cad.sketch`\n * from @faicad/faijs-sketch).\n *\n * I-group (2026-10-03): the unknown-op guard compares the script's callees\n * against `symbolTableNames()`, which knows only the STATIC table. A host\n * that merges those libraries and passes them to {@link cliRun} therefore\n * got `unknown op: cad.sketch is not in the cad namespace` from every check\n * of a perfectly runnable script — `rebased-sweep.ts` reported it for every\n * product in a corpus sweep. Check and run must see the same namespace, so\n * the caller states its merged entries here.\n */\n libs?: Record<string, unknown>\n}\n\n/** Options accepted by the `run` command. */\nexport interface CliRunOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad — the CLI entry faijs-cli.ts passes createApiNamespace; core does not assemble it by default). */\n libs?: Record<string, LibNamespace>\n /**\n * 项目根(多文件 §4.5):相对 import 的解析基准,moduleKey = 相对它的路径。\n * 缺省由入口文件向上找最近的 package.json。\n */\n projectRoot?: string\n /**\n * 连带导出隐藏终端(默认 false)。keep / keepHidden 保留的源几何默认不产出\n * (隐藏的语义即\"保留但不出现在产物里\");置 true 恢复旧行为,把 hidden 终端\n * 也一并写盘(多为诊断用途)。\n */\n includeHidden?: boolean\n}\n\n/** Result of the `check` (dry-run validation) command. */\nexport interface CliCheckResult {\n /** Whether the validation passed. */\n ok: boolean\n /** Validation errors found, one per stage. */\n errors: Array<{ stage: string; message: string; line?: number; stmtId?: string }>\n /** Non-fatal warnings reported during validation. */\n warnings: string[]\n /** Script-level summary when the script parsed successfully. */\n script?: { statements: number; callees: string[] }\n}\n\n/** Result of the `run` (execute and export) command. */\nexport interface CliRunResult {\n /** Whether execution and export succeeded. */\n ok: boolean\n /** The written output file path. */\n outputFile?: string\n /** The written output format ('stl' | 'step'). */\n outputFormat?: string\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/** Options accepted by the `view` command. */\nexport interface CliViewOptions {\n /** Execution mode ('auto' | 'brep' | 'mesh'). view 需要 BREP 路径(mesh-only 无投影)。 */\n mode?: ExecutionMode\n /** Asset directory used by the node ports. */\n assetsDir?: string\n /** Extra fonts directory used by the node ports. */\n fontsDir?: string\n /** Default font path used by the node ports. */\n defaultFontPath?: string\n /** Host-injected library namespace (includes cad). */\n libs?: Record<string, LibNamespace>\n /** Project root for relative .fai.js imports. */\n projectRoot?: string\n /** Shape variable name to project; default resolves terminals like `run`. */\n part?: string\n /** Single view direction (default 'front'); mutually exclusive with sheet. */\n view?: ViewSpec\n /** Multi-view sheet list (projectSheet); mutually exclusive with view. */\n sheet?: ViewSpec[]\n}\n\n/** Result of the `view` (execute and project SVG) command. */\nexport interface CliViewResult {\n /** Whether execution and projection succeeded. */\n ok: boolean\n /** The written SVG file path(s). */\n outputFiles?: string[]\n /** A human-readable error message when the command failed. */\n error?: string\n /** Informational messages collected during execution. */\n infos?: string[]\n}\n\n/**\n * Execute the `check` command: dry-run validate a .fai.js file.\n *\n * @param filePath - path to the .fai.js file to validate\n * @param _opts - optional CLI check options (assets and fonts directories)\n * @returns the check result with any validation errors\n */\nexport function cliCheck(filePath: string, _opts?: CliCheckOptions): CliCheckResult {\n const code = readFileSync(filePath, 'utf-8')\n const ports = withCliLibLoader(createNodePorts({\n assetsDir: _opts?.assetsDir,\n fontsDir: _opts?.fontsDir,\n }))\n const runtime = createRuntime(ports)\n const result = runtime.check(code)\n const errors = result.errors.map((e) => ({\n stage: e.stage,\n message: e.message,\n line: e.line,\n stmtId: e.stmtId,\n }))\n // D11 (2026-09-28): unknown-op guard. check() is syntax+reference only — an\n // op the cad namespace doesn't have used to pass `check` clean and die at\n // runtime (e.g. `cad.sketch is not a function` when a host forgets to merge\n // the sketch library). Compare the script's callees against the\n // symbol-table union view (platform + registered library entries) and fail\n // the check on any unknown callee.\n if (result.ok && result.script) {\n const known = new Set(symbolTableNames())\n // Ops the host merges at run time are not in the static table; accept the\n // names it declares as known so check agrees with the run that follows.\n for (const ns of Object.values(_opts?.libs ?? {})) {\n if (ns && typeof ns === 'object') {\n for (const key of Object.keys(ns as Record<string, unknown>)) known.add(key)\n }\n }\n const unknown = [...new Set(result.script.callees)].filter((n) => !known.has(n))\n for (const name of unknown) {\n errors.push({\n stage: 'symbol',\n message: `unknown op: cad.${name} is not in the cad namespace (host library not merged or op name misspelled)`,\n line: undefined,\n stmtId: undefined,\n })\n }\n }\n return {\n ok: result.ok && errors.length === 0,\n errors,\n warnings: result.warnings,\n script: result.script,\n }\n}\n\n/**\n * Execute the `run` command: execute a .fai.js file and export STL/STEP.\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output file path for the exported result (extension determines format)\n * @param opts - optional run options (mode, assets/fonts directories, injected libs)\n * @returns the run result describing success or failure\n */\nexport async function cliRun(\n filePath: string,\n outPath: string,\n opts?: CliRunOptions,\n): Promise<CliRunResult> {\n const code = readFileSync(filePath, 'utf-8')\n // 多文件(§4.5):项目根缺省向上找 package.json;入口自身也有 key(相对根的路径),\n // 否则入口在子目录时它的 `./parts/x.fai.js` 会以根为基准解析而错位。\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT and bind the brep engine registry (D10) so that\n // cq-compat parts (which project ops through compatFn) run end-to-end under\n // the CLI. registerOcctBrepEngine is idempotent and itself boots initOcctWasm.\n await registerOcctBrepEngine()\n\n // Create runtime with node ports\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n // Part 1.4:cad 经 registerLib 声明 packageName(脚本可 `import * as cad from\n // '@faicad/faijs'`,check ①.5 据此校验 specifier——不 declare 则 import 被拒)。\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n // Execute(T5 后:direct 路径,源码文本直通执行)\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n // Determine output format from extension\n const ext = extname(outPath).toLowerCase().slice(1)\n const terminals = execResult.terminals ?? []\n\n // E1 (H12): export-side failures must surface as a structured result, not an\n // exception — the census and batch driver treat a throw as a process crash,\n // while `{ ok: false, error }` keeps it a per-file, classifiable failure.\n try {\n return await exportExecutionResult(outPath, ext, execResult, terminals, opts?.includeHidden ?? false)\n } catch (e) {\n return {\n ok: false,\n error: `Export failed: ${String((e as Error)?.message ?? e)}`,\n infos: execResult.infos,\n }\n }\n}\n\n/**\n * 选出「可导出」的终端:默认剔除 hidden。\n *\n * 隐藏终端 = 「保留但不产出」(`keep` / `keepHidden` 语义,R5)。导出层必须默认跳过,\n * 否则布尔运算保留的源几何会对每个 hidden 终端各写一个 `out.step_<i>_<name>` 产物,\n * 让一个逻辑形状看起来像 N 个(FCStd port 的 `solids 1vsN` 失配即由此而来)。\n * 需要旧行为(连同隐藏源一起写出,多用于诊断)时显式传 `includeHidden=true`。\n *\n * @param terminals - 存活终端集合(含 `hidden` 标记)\n * @param includeHidden - 是否连同隐藏终端一起导出,缺省 false\n * @returns `exportable`(可导出终端)与 `hiddenCount`(被剔除的隐藏终端数)\n */\nexport function selectExportableTerminals<T extends { hidden?: boolean }>(\n terminals: readonly T[],\n includeHidden = false,\n): { exportable: T[]; hiddenCount: number } {\n const hiddenCount = terminals.reduce((n, t) => (t.hidden ? n + 1 : n), 0)\n const exportable = includeHidden ? [...terminals] : terminals.filter((t) => !t.hidden)\n return { exportable, hiddenCount }\n}\n\n/** 判据取 shapeType/getSubShapes 的最小接口面(用真 kernel 时即 BrepEngineApi 的这两个方法)。 */\nexport interface ShapeTypeProbe {\n shapeType(shape: BrepHandle): string\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[]\n}\n\n/**\n * 终端 BREP 句柄是否「可落成零件」——即含至少一个三维实体。\n *\n * **为什么需要它**:终端集合(`live-shapes.ts`)只回答「谁该被看见」,未消费的 2D 草图\n * 同样是顶层未消费变量 ⇒ 也是终端 ⇒ 会走到导出层落一个 `.step`。而 2D 面片(实测厚度\n * 2e-07、solids=0)一旦落盘,`fcstd-port` 的 `parity-judge.py merge_parts` 会把它的 area\n * 加进真实件(5.04e+06 vs 5.50e+06 ⇒ ~91% 误差),parity 必 FAIL。所以「谁该被看见」与\n * 「什么能落成零件」是两件事:本判据只管后者,不去动终端集合。\n *\n * **判决表**(实测标定,2026-10-06):\n * | shapeType | 判决 | 依据 |\n * |---|---|---|\n * | `SOLID` / `COMPSOLID` | 导出 | 真零件 |\n * | `COMPOUND` | 含 ≥1 solid → 导出;否则跳过 | 装配体是 compound;`getSubShapes` 递归取子实体 |\n * | `SHELL` | 含 ≥1 solid → 导出;否则跳过 | 旧栈基线 9/9 真实件皆 solid/compound;实测 8 个游离草图中 5 个顶层恰是 SHELL |\n * | `FACE`/`WIRE`/`EDGE`/`VERTEX` | 跳过 | 无实体的 2D 片面 / 1D 线框 |\n * | 其它(`SHAPE` 枚举兜底、空串) | 导出 | 保守,零回归 |\n * | 无句柄(纯 mesh 终端) | 导出 | mesh 零件导出 STEP 是既有能力,不借本批收紧 |\n *\n * **`SHELL` 的裁决**:方案 §3 初稿把 shell 判为「导出(保留现状)」,理由是\"面模型是合法\n * 产物的先例存在\"。但 2026-10-06 的 E-1 探针推翻了该前提:\n * ① 旧栈 parity 基线(A 组 9 个真实件)顶层全为 `SOLID`/`COMPOUND`、`solids ≥ 1`,无一面模型;\n * ② 新栈多出的 8 个游离草图中 **5 个顶层就是 `SHELL`** ⇒ 按初稿判决**根本拦不住**,方案失效;\n * ③ `cli.ts` 改动前 0 处 shell 逻辑,不存在需要兼容的既有行为。\n * ⇒ 改判为 **`SHELL` 且无子实体 → 跳过**。若日后语料真出现「合法的 2D 面模型产物」需求,\n * 应由脚本侧或显式开关承接,而不是让导出层无法区分草图与零件(登记于相邻缺陷 D-2)。\n *\n * 实现上不分层递归:内核 `getSubShapes`(OCCT `TopExp_Explorer` 语义)对任意嵌套深度的\n * compound **一次即可取到全部子实体**(E-1 探针:顶层 COMPOUND 的草图也能数出 solids=0)。\n * 探针抛错 → **保守放行**(宁可多导一个,不可误删真零件)。\n *\n * @param shape - 终端 BREP 句柄(无句柄传 undefined)\n * @param probe - shapeType/getSubShapes 提供者(生产用 `brepSolids` 条目的 kernel;测试可注入假 kernel)\n * @returns 该句柄是否含至少一个实体(可落成零件)\n */\nexport function isExportableSolid(shape: BrepHandle | undefined, probe: ShapeTypeProbe | undefined): boolean {\n // 无 BREP 句柄(纯 mesh 终端)→ 导出(既有能力,零回归)。\n if (!shape || !probe) return true\n let type: string\n try {\n type = probe.shapeType(shape).toUpperCase()\n } catch {\n // 探针抛错(异常句柄)→ 保守放行。\n return true\n }\n switch (type) {\n case 'SOLID':\n case 'COMPSOLID':\n return true\n case 'COMPOUND':\n case 'SHELL':\n // 无实体的 compound / shell = 2D 面片(游离草图)。`getSubShapes('solid')` 递归取子实体。\n try {\n return probe.getSubShapes(shape, 'solid').length > 0\n } catch {\n return true\n }\n case 'FACE':\n case 'WIRE':\n case 'EDGE':\n case 'VERTEX':\n return false\n default:\n // 枚举兜底('SHAPE' / 空串 / 未知方言)→ 保守导出。\n return true\n }\n}\n\n/** Export an executed result to `outPath` (shared body of cliRun's export path). */\nasync function exportExecutionResult(\n outPath: string,\n ext: string,\n execResult: Awaited<ReturnType<CadRuntime['execute']>>,\n terminals: NonNullable<Awaited<ReturnType<CadRuntime['execute']>>['terminals']>,\n includeHidden = false,\n): Promise<{ ok: boolean; error?: string; outputFile?: string; outputFormat?: string; infos?: string[] }> {\n const { exportable, hiddenCount } = selectExportableTerminals(terminals, includeHidden)\n // 装配导出(writeAssemblyStep 的兜底路径)同样不得带出隐藏终端;includeHidden 时传 undefined。\n const hiddenTerminals = includeHidden\n ? undefined\n : new Set(terminals.filter((t) => t.hidden).map((t) => String(t.id)))\n // 有终端但全部隐藏 → 明确报错(不静默回退到「最后一个 output」,那等于把隐藏源漏出去)。\n if (!includeHidden && exportable.length === 0 && hiddenCount > 0) {\n return {\n ok: false,\n error: `All ${hiddenCount} live terminal(s) are hidden — nothing to export (pass includeHidden to export them)`,\n }\n }\n\n // ── 二维终端过滤(G0-D)──:终端集合回答「谁该被看见」,导出层回答「什么能落成零件」。\n // 未消费的 2D 草图同样是顶层未消费变量 ⇒ 也是终端,但落成 `.step` 会污染 parity 的 area。\n // 过滤后**不得**回退到「最后一个 output」,否则等于把刚剔除的草图从后门写回去。\n const skipped2d: string[] = []\n let solidExportable = exportable\n if (!includeHidden) {\n solidExportable = []\n for (const t of exportable) {\n const entry = execResult.brepSolids?.get(t.id)\n if (isExportableSolid(entry?.solid, entry?.kernel)) {\n solidExportable.push(t)\n } else {\n skipped2d.push(String(t.meta?.name ?? t.id))\n }\n }\n if (solidExportable.length === 0 && exportable.length > 0) {\n return {\n ok: false,\n error:\n `All ${exportable.length} live terminal(s) are 2D (no solid) — nothing to export as a 3D part` +\n (skipped2d.length > 0 ? ` (skipped: ${skipped2d.join(', ')})` : ''),\n }\n }\n }\n const solidInfos = skipped2d.length > 0 ? [`Skipped ${skipped2d.length} 2D terminal(s): ${skipped2d.join(', ')}`] : []\n\n if (solidExportable.length === 0) {\n // No terminals — use last output\n const outputNames = [...execResult.outputs.keys()]\n if (outputNames.length === 0) {\n return { ok: false, error: 'No statements to export' }\n }\n const lastPartName = outputNames[outputNames.length - 1]\n const shape = execResult.outputs.get(asPartName(lastPartName))\n if (!shape) {\n return { ok: false, error: `No output for part \"${lastPartName}\"` }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(lastPartName))\n const r = writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n return solidInfos.length > 0 ? { ...r, infos: [...(r.infos ?? []), ...solidInfos] } : r\n }\n\n // Single terminal\n if (solidExportable.length === 1) {\n const terminal = solidExportable[0]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) {\n return { ok: false, error: `No output for terminal \"${terminal.id}\"` }\n }\n // Assembly (compound with behavior) → expand members with colors\n if (!('positions' in shape) || !('indices' in shape)) {\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult, hiddenTerminals)\n if (asmResult) {\n return solidInfos.length > 0 ? { ...asmResult, infos: [...(asmResult.infos ?? []), ...solidInfos] } : asmResult\n }\n }\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n const r = writeOutput(outPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n return solidInfos.length > 0 ? { ...r, infos: [...(r.infos ?? []), ...solidInfos] } : r\n }\n\n // Multiple terminals — write each to a separate file\n // First, check if any terminal is a compound (assembly) — export it as a single STEP\n for (let i = 0; i < solidExportable.length; i++) {\n const terminal = solidExportable[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) {\n // Compound terminal — try assembly STEP export\n const asmResult = writeAssemblyStep(outPath, ext, shape as CompoundShape, execResult, hiddenTerminals)\n if (asmResult) {\n return solidInfos.length > 0 ? { ...asmResult, infos: [...(asmResult.infos ?? []), ...solidInfos] } : asmResult\n }\n }\n }\n // Then export non-compound terminals\n for (let i = 0; i < solidExportable.length; i++) {\n const terminal = solidExportable[i]\n const shape = execResult.outputs.get(terminal.id)\n if (!shape) continue\n if (!('positions' in shape) || !('indices' in shape)) continue // skip compounds\n\n const name = terminal.meta?.name ?? terminal.id\n const sep = outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'\n const terminalOutPath = `${outPath}${sep}${i}_${name}.${ext}`\n const solidEntry = execResult.brepSolids?.get(terminal.id)\n const result = writeOutput(terminalOutPath, ext, shape, solidEntry ? { solid: solidEntry.solid, kernel: solidEntry.kernel } : undefined)\n if (!result.ok) return result\n }\n\n return { ok: true, outputFormat: ext, ...(solidInfos.length > 0 ? { infos: solidInfos } : {}) }\n}\n\n/**\n * 解析 `--view` 参数:三数字逗号串 → 方向对象(\"1,-1,1\" → { dir: [1,-1,1] }),\n * 否则按视图名字符串处理(未知名由 viewCamera 抛错)。\n */\nfunction parseViewArg(v: string): ViewSpec {\n const parts = v.split(',').map((s) => s.trim())\n if (parts.length === 3) {\n const nums = parts.map(Number)\n if (nums.every((n) => Number.isFinite(n))) return { dir: nums as [number, number, number] }\n }\n // 视图名字符串('front'|'iso'|…):类型上 CLI 接受任意名称,未知名由 viewCamera 抛错。\n return v as ViewSpec\n}\n\n/**\n * 选出待投影的 shape 列表(`--part` 指定,或按终端自动选择,与 `run` 一致):\n * 只保留带 mesh 的 shape(compound/assembly 无 mesh,无法投影,跳过)。\n * 隐藏终端(keep/keepHidden 保留的源几何)默认不投影——与 `run` 同口径。\n */\nfunction selectViewShapes(\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n terminals?: Array<{ id: unknown; hidden?: boolean; meta?: { name?: string } }>\n },\n part?: string,\n): Array<{ name: string; shape: Shape }> {\n const outputs = execResult.outputs\n const viewable = (s: Shape | CompoundShape | undefined): s is Shape =>\n !!s && 'positions' in s && 'indices' in s\n\n if (part) {\n const shape = outputs.get(asPartName(part)) ?? outputs.get(part)\n if (viewable(shape)) return [{ name: part, shape }]\n return []\n }\n\n // 隐藏终端默认不投影。全部终端皆隐藏 → 空集(**不**回退到「所有 outputs」,\n // 否则会把全部中间量也画出来,与 run 的「全隐藏即无可导出」语义相悖)。\n const allTerminals = execResult.terminals ?? []\n const { exportable: terminals } = selectExportableTerminals(allTerminals)\n const ids: unknown[] = allTerminals.length > 0 ? terminals.map((t) => t.id) : [...outputs.keys()]\n const out: Array<{ name: string; shape: Shape }> = []\n for (const id of ids) {\n const shape = outputs.get(id) ?? outputs.get(asPartName(String(id)))\n if (viewable(shape)) {\n const metaName = terminals.find((t) => t.id === id)?.meta?.name\n out.push({ name: metaName ?? String(id), shape })\n }\n }\n return out\n}\n\n/**\n * Execute the `view` command: execute a .fai.js file and write view SVG(s).\n *\n * 投影在宿主侧进行:脚本只需建模(shape 变量或终端),CLI 调 projectView(--view,\n * 缺省 front)或 projectSheet(--sheet)把 SVG 字符串写盘。view 需要 BREP 路径——\n * mesh-only 的 shape 无 brep 槽,projectView 抛 E_BREP_ONLY_INPUT(提示 --mode brep/auto)。\n *\n * @param filePath - path to the .fai.js file to execute\n * @param outPath - output SVG path (multiple shapes get `<out>_<i>_<name>.svg` suffixes)\n * @param opts - optional view options (mode, part, view/sheet, assets/fonts dirs, libs)\n * @returns the view result describing success or failure\n */\nexport async function cliView(\n filePath: string,\n outPath: string,\n opts?: CliViewOptions,\n): Promise<CliViewResult> {\n const code = readFileSync(filePath, 'utf-8')\n const projectRoot = opts?.projectRoot ? resolve(opts.projectRoot) : findProjectRoot(filePath)\n const entryKey = projectKeyOf(projectRoot, filePath)\n\n // Initialize OCCT(投影 HLR 依赖 brep 内核)。registerOcctBrepEngine is\n // idempotent and itself boots initOcctWasm, and also binds the\n // brep engine registry (D10) — same boot path as cliRun above.\n await registerOcctBrepEngine()\n\n const ports = withCliProjectLoader(\n withCliLibLoader(createNodePorts({\n assetsDir: opts?.assetsDir,\n fontsDir: opts?.fontsDir,\n defaultFontPath: opts?.defaultFontPath,\n })),\n projectRoot,\n )\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, {\n default: true,\n packageName: '@faicad/faijs',\n })\n }\n\n const execResult = await runtime.execute(code, { entryKey })\n\n if (execResult.failedAt) {\n return {\n ok: false,\n error: `Execution failed at statement ${execResult.failedAt.index} (callee: ${execResult.failedAt.callee}): ${execResult.failedAt.message}`,\n infos: execResult.infos,\n }\n }\n\n const shapes = selectViewShapes(execResult, opts?.part)\n if (shapes.length === 0) {\n return {\n ok: false,\n error: opts?.part\n ? `No output for part \"${opts.part}\"`\n : 'No viewable (mesh-bearing) shapes to project',\n infos: execResult.infos,\n }\n }\n\n const outFiles: string[] = []\n const single = shapes.length === 1\n for (let i = 0; i < shapes.length; i++) {\n const { name, shape } = shapes[i]\n const target = single\n ? outPath\n : `${outPath}${outPath.endsWith('/') || outPath.endsWith('\\\\') ? '' : '_'}${i}_${name}.svg`\n try {\n const svg = opts?.sheet\n ? projectSheet(shape, opts.sheet)\n : projectView(shape, opts?.view ?? 'front')\n writeFileSync(target, svg, 'utf-8')\n outFiles.push(target)\n } catch (e) {\n return {\n ok: false,\n error: `Projection failed for \"${name}\": ${(e as Error).message}`,\n infos: execResult.infos,\n }\n }\n }\n return { ok: true, outputFiles: outFiles, infos: execResult.infos }\n}\n\n/**\n * 写出输出文件。\n *\n * 按零件类型分别处理导出:\n * - STL:取网格载荷(BREP 零件先经内核三角化),无重建。\n * - STEP:有 BREP solid → 精确 STEP(ADVANCED_FACE);无 BREP solid → 该零件的\n * 三角网格经重建管线导出(exportModelSync 内的 mesh 条目通路)。\n *\n * keep-syntax §5.1:outputs 现含 compound(group/assembly 产物,无 mesh);\n * compound 无法导出,给出明确错误(此前\"不在 outputs 中\"是静默失败)。\n */\nfunction writeOutput(\n outPath: string,\n ext: string,\n shape: Shape | CompoundShape,\n brepSolid?: { solid: BrepHandle; kernel: BrepEngineApi },\n): CliRunResult {\n if (!('positions' in shape) || !('indices' in shape)) {\n return {\n ok: false,\n error: `Output \"${outPath}\" is a compound (group/assembly) with no exportable mesh; export a member shape instead`,\n }\n }\n // 统一导出入口(R11):坐标换算与单位声明由 exportModel 同源产出。\n // CLI 无单位选项 → 缺省 mm(与既有行为一致)。\n const fmt = ext === 'stp' ? 'step' : ext\n if (fmt !== 'stl' && fmt !== 'step') {\n return { ok: false, error: `Unsupported output format: .${ext} (supported: .stl, .step)` }\n }\n // STL 只吃 mesh(export-model §10.6:solid 条目由调用方先三角化)。auto 模式下\n // 形状可能是 BREP solid → 导出 STL 前必须先用内核三角化,否则「no mesh entries」。\n // STEP 则直接走 solid 条目保留 ADVANCED_FACE 拓扑。\n let entry: { solid?: BrepHandle; mesh?: { positions: Float32Array; indices: Uint32Array } }\n if (brepSolid) {\n if (fmt === 'stl') {\n const tri = solidToShape(brepSolid.kernel, brepSolid.solid)\n entry = { mesh: { positions: tri.positions, indices: tri.indices } }\n } else {\n entry = { solid: brepSolid.solid }\n }\n } else {\n entry = { mesh: { positions: shape.positions, indices: shape.indices } }\n }\n const buffer = exportModelSync([entry], fmt)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: fmt }\n}\n\n/**\n * Export an assembly (compound with AssemblyBehavior) as a multi-entity STEP\n * file, preserving member names and colors (from behavior.memberColors).\n *\n * Returns null if the compound has no assembly behavior (falls through to\n * regular writeOutput), or a CliRunResult on success/failure.\n */\nfunction writeAssemblyStep(\n outPath: string,\n ext: string,\n compound: CompoundShape,\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n brepSolids?: Map<unknown, { solid: BrepHandle; kernel: BrepEngineApi }>\n },\n hiddenTerminals?: ReadonlySet<string>,\n): CliRunResult | null {\n if (ext !== 'step' && ext !== 'stp') return null\n const slot = ensureSlot(compound)\n const behavior = slot.behavior as\n | { memberNames?: string[]; memberColors?: Record<string, [number, number, number]> }\n | undefined\n\n // Find a kernel and collect all exportable solids\n let kernel: BrepEngineApi | null = null\n const entries: StepExportEntry[] = []\n\n // Preferred path: use behavior.memberNames to match colors.\n // Member name lookup tries (1) the explicit member name, then (2) the kept\n // script-variable name of the compound's i-th child — cq-compat's\n // buildAssembly passes CadQuery-style part names (\"axk\") while the shapes\n // are registered under their .fai.js variable names (\"shape_axk\").\n if (behavior?.memberNames && behavior.memberNames.length > 0) {\n // Member Shape list (same order as memberNames) — when a member name\n // misses in brepSolids (e.g. cq libs register short names like 'axk' while\n // the statement variable is 'shape_axk'), resolve the member shape by index\n // and extract its BREP solid, keeping the member name and color.\n const children = (compound as { children?: Shape[] }).children ?? []\n for (let i = 0; i < behavior.memberNames.length; i++) {\n const memberName = behavior.memberNames[i]\n // Preferred: read the member's LIVE identity slot (brepOf) — assembly\n // transforms are baked into slot.solid by the executor's\n // applyPendingAssemblyTransforms AFTER this statement, so the brepSolids\n // snapshot (registered at member creation) may hold the PRE-transform\n // handle. GOTCHA: don't reorder — brepSolids entries are stale for\n // transformed members.\n const child = children[i]\n const liveSolid = child ? (brepOf(child) as BrepHandle | undefined) : undefined\n if (liveSolid) {\n if (!kernel) kernel = execResult.brepSolids?.values().next().value?.kernel ?? null\n if (kernel) {\n entries.push({\n solid: liveSolid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n continue\n }\n }\n const solidEntry = execResult.brepSolids?.get(asPartName(memberName))\n if (solidEntry) {\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: memberName,\n color: behavior.memberColors?.[memberName],\n })\n }\n }\n }\n\n // Fallback: export all brepSolids (covers compounds where memberNames wasn't propagated)\n if (entries.length === 0 && execResult.brepSolids) {\n for (const [key, solidEntry] of execResult.brepSolids) {\n // 隐藏终端(keep/keepHidden 保留的源几何)不得借这条兜底路径落盘——\n // 与主导出路径同一判据(includeHidden 时 hiddenTerminals 传 undefined,不过滤)。\n if (hiddenTerminals?.has(String(key))) continue\n // 同一 3D 判据:兜底路径直接遍历全体 brepSolids,2D 草图句柄同样会进这里(G0-D I-4)。\n if (!isExportableSolid(solidEntry.solid, solidEntry.kernel)) continue\n if (!kernel) kernel = solidEntry.kernel\n entries.push({\n solid: solidEntry.solid,\n name: typeof key === 'string' ? key : `part_${entries.length}`,\n })\n }\n }\n\n if (!kernel || entries.length === 0) {\n return null // Let writeOutput handle the error\n }\n\n const buffer = exportStepFromSolids(kernel, entries)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n}\n\n/**\n * Parse command-line arguments.\n *\n * @param argv - the raw process argument list (index 0 = node, 1 = script)\n * @returns the parsed command, file, and option values (command is null when unusable)\n */\nexport function parseArgs(argv: string[]): {\n command: 'check' | 'run' | 'view' | null\n file?: string\n out?: string\n mode?: ExecutionMode\n assetsDir?: string\n fontsDir?: string\n projectRoot?: string\n view?: string\n sheet?: string\n part?: string\n includeHidden?: boolean\n} {\n const args = argv.slice(2) // skip node + script\n if (args.length === 0) return { command: null }\n\n const command = args[0] as 'check' | 'run' | 'view' | null\n if (command !== 'check' && command !== 'run' && command !== 'view') return { command: null }\n\n let file: string | undefined\n let out: string | undefined\n let mode: ExecutionMode | undefined\n let assetsDir: string | undefined\n let fontsDir: string | undefined\n let projectRoot: string | undefined\n let view: string | undefined\n let sheet: string | undefined\n let part: string | undefined\n let includeHidden: boolean | undefined\n\n for (let i = 1; i < args.length; i++) {\n const arg = args[i]\n if (arg === '--out' || arg === '-o') {\n out = args[++i]\n } else if (arg === '--mode' || arg === '-m') {\n const m = args[++i] as ExecutionMode\n if (m === 'auto' || m === 'brep' || m === 'mesh') {\n mode = m\n }\n } else if (arg === '--assets') {\n assetsDir = args[++i]\n } else if (arg === '--fonts') {\n fontsDir = args[++i]\n } else if (arg === '--project-root') {\n projectRoot = args[++i]\n } else if (arg === '--view') {\n view = args[++i]\n } else if (arg === '--sheet') {\n sheet = args[++i]\n } else if (arg === '--part') {\n part = args[++i]\n } else if (arg === '--include-hidden') {\n includeHidden = true\n } else if (!file && !arg.startsWith('-')) {\n file = arg\n }\n }\n\n return { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part, includeHidden }\n}\n\n/**\n * CLI main entry point (called by scripts/faijs-cli.ts).\n *\n * @param argv - the raw process argument list\n * @param libs - host-injected library namespace (includes cad — faijs-cli.ts passes createApiNamespace; core does not assemble it by default)\n * @returns the process exit code (0 on success, non-zero on failure)\n */\nexport async function cliMain(argv: string[], libs?: Record<string, LibNamespace>): Promise<number> {\n const { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part, includeHidden } = parseArgs(argv)\n\n if (!command) {\n process.stderr.write('Usage: faijs-cli <check|run|view> <file.fai.js> [options]\\n')\n process.stderr.write(' check <file> DryRun validation\\n')\n process.stderr.write(' run <file> --out <file> Execute and export STL/STEP\\n')\n process.stderr.write(' view <file> --out <svg> Execute and project view SVG (三视图/等轴测)\\n')\n process.stderr.write(' --mode <auto|brep|mesh> Execution mode (view 需要 BREP 路径)\\n')\n process.stderr.write(' --assets <dir> Asset directory\\n')\n process.stderr.write(' --fonts <dir> Extra fonts directory\\n')\n process.stderr.write(' --project-root <dir> Project root for relative .fai.js imports\\n')\n process.stderr.write(' --include-hidden (run) also export hidden terminals (keep/keepHidden sources; default off)\\n')\n process.stderr.write(' --part <name> (view) shape variable to project (default: terminals)\\n')\n process.stderr.write(' --view <dir> (view) single view: front|back|top|bottom|left|right|iso|\"x,y,z\" (default front)\\n')\n process.stderr.write(' --sheet <a,b,c> (view) multi-view sheet: front,top,right,iso (mutually exclusive with --view)\\n')\n return 1\n }\n\n if (!file) {\n process.stderr.write(`Error: missing file argument for \"${command}\"\\n`)\n return 1\n }\n\n const filePath = resolve(file)\n\n if (command === 'check') {\n const result = cliCheck(filePath, { assetsDir, fontsDir })\n if (result.ok) {\n process.stdout.write(`✓ ${filePath}: OK\\n`)\n if (result.script) {\n process.stdout.write(` statements: ${result.script.statements}\\n`)\n process.stdout.write(` callees: ${result.script.callees.join(', ')}\\n`)\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.errors.length} error(s)\\n`)\n for (const err of result.errors) {\n const loc = err.line ? ` (line ${err.line})` : err.stmtId ? ` (stmt: ${err.stmtId})` : ''\n process.stderr.write(` [${err.stage}] ${err.message}${loc}\\n`)\n }\n return 1\n }\n }\n\n if (command === 'run') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"run\" command\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const result = await cliRun(filePath, outPath, { mode, assetsDir, fontsDir, projectRoot, libs, includeHidden })\n\n if (result.ok) {\n process.stdout.write(`✓ ${filePath} → ${outPath} (${result.outputFormat})\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n if (command === 'view') {\n if (!out) {\n process.stderr.write('Error: --out is required for \"view\" command\\n')\n return 1\n }\n if (view && sheet) {\n process.stderr.write('Error: --view and --sheet are mutually exclusive\\n')\n return 1\n }\n\n const outPath = resolve(out)\n const viewSpec = view ? parseViewArg(view) : undefined\n const sheetSpec = sheet\n ? (sheet\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean) as ViewSpec[])\n : undefined\n const result = await cliView(filePath, outPath, {\n mode,\n assetsDir,\n fontsDir,\n projectRoot,\n libs,\n part,\n view: viewSpec,\n sheet: sheetSpec,\n })\n\n if (result.ok) {\n for (const f of result.outputFiles ?? []) {\n process.stdout.write(`✓ ${filePath} → ${f} (svg)\\n`)\n }\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 0\n } else {\n process.stderr.write(`✗ ${filePath}: ${result.error}\\n`)\n if (result.infos && result.infos.length > 0) {\n for (const info of result.infos) {\n process.stderr.write(` ℹ ${info}\\n`)\n }\n }\n return 1\n }\n }\n\n return 1\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* execute-script — 一等「代码字符串 → 产物」执行 API(计划 B6,2026-10-06)。
|
|
3
|
+
*
|
|
4
|
+
* 动机:
|
|
5
|
+
* 发布 tarball 不含 `scripts/`,此前没有「给 `.fai.js` 源码字符串 → 直接拿到产物」的
|
|
6
|
+
* 公开函数,每个下游各自内联 CLI 包装器,并各自重复踩 Host 装配的三个坑
|
|
7
|
+
* (不 registerOcctBrepEngine → BREP engine API not available;configureBackends 漏
|
|
8
|
+
* brepCapabilities → E_BREP_UNSUPPORTED;把 defineOp 返回的 Promise<Shape> 当 Result 判)。
|
|
9
|
+
* 本函数把装配知识固化在一处(与 cliRun 同一套装配)。
|
|
10
|
+
*
|
|
11
|
+
* 仅 Node.js:经 `@faicad/faijs/node` 导入,不要进浏览器构建(依赖 node-host)。
|
|
12
|
+
*/
|
|
13
|
+
import type { ExecutionMode, LibLoader } from '../cad-runtime/ports.js';
|
|
14
|
+
import type { TerminalShape } from '../lang/types.js';
|
|
15
|
+
import type { LibNamespace } from '../runtime-state.js';
|
|
16
|
+
/** executeScript 的选项。 */
|
|
17
|
+
export interface ExecuteScriptOptions {
|
|
18
|
+
/** 执行模式(缺省 `auto`)。 */
|
|
19
|
+
mode?: ExecutionMode;
|
|
20
|
+
/** 第三方库装载器(缺省:`@faicad/*` scoped 包动态 import,与 CLI 相同)。 */
|
|
21
|
+
libLoader?: LibLoader;
|
|
22
|
+
/**
|
|
23
|
+
* 额外登记的库命名空间(如 cad 面的 sketch 扩展)。key 为 specifier 短名。
|
|
24
|
+
* `cad` 项以 default 命名空间登记(脚本可免 import 使用)。
|
|
25
|
+
*/
|
|
26
|
+
libs?: Record<string, LibNamespace>;
|
|
27
|
+
}
|
|
28
|
+
/** executeScript 的产物。 */
|
|
29
|
+
export interface ExecuteScriptResult {
|
|
30
|
+
/** 终端形状(几何产物;失败时为空数组)。 */
|
|
31
|
+
terminals: TerminalShape[];
|
|
32
|
+
/** 确定性警告等诊断信息。 */
|
|
33
|
+
diagnostics: string[];
|
|
34
|
+
/** 失败时的语句定位(与 ExecutionResult.failedAt 一致);成功为 undefined。 */
|
|
35
|
+
failedAt?: {
|
|
36
|
+
index: number;
|
|
37
|
+
callee: string;
|
|
38
|
+
message: string;
|
|
39
|
+
lineNo?: number;
|
|
40
|
+
code?: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 执行一段 `.fai.js` 源码字符串并返回产物。
|
|
45
|
+
*
|
|
46
|
+
* 内部完成完整 Host 装配(node ports + libLoader + OCCT BREP 引擎注册),
|
|
47
|
+
* 调用方无需再自行装配——这正是 B4 三个装配坑的固化出口。
|
|
48
|
+
*
|
|
49
|
+
* @param code `.fai.js` 源码字符串
|
|
50
|
+
* @param opts 可选:执行模式、库装载器、额外库命名空间
|
|
51
|
+
* @returns 终端形状、诊断信息与失败定位(`Promise<ExecuteScriptResult>`);
|
|
52
|
+
* 执行失败以 `failedAt` 结构化返回,不抛异常。
|
|
53
|
+
*/
|
|
54
|
+
export declare function executeScript(code: string, opts?: ExecuteScriptOptions): Promise<ExecuteScriptResult>;
|
|
55
|
+
//# sourceMappingURL=execute-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-script.d.ts","sourceRoot":"","sources":["../../src/node-host/execute-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAKpD,yBAAyB;AACzB,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CACpC;AAED,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAClC,0BAA0B;IAC1B,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,kBAAkB;IAClB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9F;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,oBAAoB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAkB9B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* execute-script — 一等「代码字符串 → 产物」执行 API(计划 B6,2026-10-06)。
|
|
3
|
+
*
|
|
4
|
+
* 动机:
|
|
5
|
+
* 发布 tarball 不含 `scripts/`,此前没有「给 `.fai.js` 源码字符串 → 直接拿到产物」的
|
|
6
|
+
* 公开函数,每个下游各自内联 CLI 包装器,并各自重复踩 Host 装配的三个坑
|
|
7
|
+
* (不 registerOcctBrepEngine → BREP engine API not available;configureBackends 漏
|
|
8
|
+
* brepCapabilities → E_BREP_UNSUPPORTED;把 defineOp 返回的 Promise<Shape> 当 Result 判)。
|
|
9
|
+
* 本函数把装配知识固化在一处(与 cliRun 同一套装配)。
|
|
10
|
+
*
|
|
11
|
+
* 仅 Node.js:经 `@faicad/faijs/node` 导入,不要进浏览器构建(依赖 node-host)。
|
|
12
|
+
*/
|
|
13
|
+
// The facade-level createRuntime (cad-runtime/createRuntimeWithCad) self-registers
|
|
14
|
+
// the built-in cad namespace; the bare cad-runtime/runtime one does not (D1).
|
|
15
|
+
import { createRuntime } from '../cad-runtime/createRuntimeWithCad.js';
|
|
16
|
+
import { registerOcctBrepEngine } from '../brep/engine/adapters/occt.js';
|
|
17
|
+
import { createNodePorts } from './index.js';
|
|
18
|
+
import { withCliLibLoader } from './cli.js';
|
|
19
|
+
/**
|
|
20
|
+
* 执行一段 `.fai.js` 源码字符串并返回产物。
|
|
21
|
+
*
|
|
22
|
+
* 内部完成完整 Host 装配(node ports + libLoader + OCCT BREP 引擎注册),
|
|
23
|
+
* 调用方无需再自行装配——这正是 B4 三个装配坑的固化出口。
|
|
24
|
+
*
|
|
25
|
+
* @param code `.fai.js` 源码字符串
|
|
26
|
+
* @param opts 可选:执行模式、库装载器、额外库命名空间
|
|
27
|
+
* @returns 终端形状、诊断信息与失败定位(`Promise<ExecuteScriptResult>`);
|
|
28
|
+
* 执行失败以 `failedAt` 结构化返回,不抛异常。
|
|
29
|
+
*/
|
|
30
|
+
export async function executeScript(code, opts) {
|
|
31
|
+
// registerOcctBrepEngine is idempotent and itself boots initOcctWasm (same as cliRun).
|
|
32
|
+
await registerOcctBrepEngine();
|
|
33
|
+
const ports = withCliLibLoader(createNodePorts());
|
|
34
|
+
const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs);
|
|
35
|
+
// cad 经 registerLib 声明 packageName,脚本可 `import * as cad from '@faicad/faijs'`。
|
|
36
|
+
if (opts?.libs?.cad) {
|
|
37
|
+
runtime.registerLib('cad', opts.libs.cad, { default: true, packageName: '@faicad/faijs' });
|
|
38
|
+
}
|
|
39
|
+
const execResult = await runtime.execute(code);
|
|
40
|
+
return {
|
|
41
|
+
terminals: execResult.terminals ?? [],
|
|
42
|
+
diagnostics: execResult.infos ?? [],
|
|
43
|
+
failedAt: execResult.failedAt,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=execute-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-script.js","sourceRoot":"","sources":["../../src/node-host/execute-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,mFAAmF;AACnF,8EAA8E;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAKnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAyBxC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,IAA2B;IAE3B,uFAAuF;IACvF,MAAM,sBAAsB,EAAE,CAAA;IAE9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAEtE,+EAA+E;IAC/E,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAA;IAC5F,CAAC;IAED,MAAM,UAAU,GAAoB,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,OAAO;QACL,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE;QACrC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE;QACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;KAC9B,CAAA;AACH,CAAC","sourcesContent":["/**\n * execute-script — 一等「代码字符串 → 产物」执行 API(计划 B6,2026-10-06)。\n *\n * 动机:\n * 发布 tarball 不含 `scripts/`,此前没有「给 `.fai.js` 源码字符串 → 直接拿到产物」的\n * 公开函数,每个下游各自内联 CLI 包装器,并各自重复踩 Host 装配的三个坑\n * (不 registerOcctBrepEngine → BREP engine API not available;configureBackends 漏\n * brepCapabilities → E_BREP_UNSUPPORTED;把 defineOp 返回的 Promise<Shape> 当 Result 判)。\n * 本函数把装配知识固化在一处(与 cliRun 同一套装配)。\n *\n * 仅 Node.js:经 `@faicad/faijs/node` 导入,不要进浏览器构建(依赖 node-host)。\n */\n\n// The facade-level createRuntime (cad-runtime/createRuntimeWithCad) self-registers\n// the built-in cad namespace; the bare cad-runtime/runtime one does not (D1).\nimport { createRuntime } from '../cad-runtime/createRuntimeWithCad'\nimport type { ExecutionResult } from '../cad-runtime/runtime'\nimport type { ExecutionMode, LibLoader } from '../cad-runtime/ports'\nimport type { TerminalShape } from '../lang/types'\nimport type { LibNamespace } from '../runtime-state'\nimport { registerOcctBrepEngine } from '../brep/engine/adapters/occt'\nimport { createNodePorts } from './index'\nimport { withCliLibLoader } from './cli'\n\n/** executeScript 的选项。 */\nexport interface ExecuteScriptOptions {\n /** 执行模式(缺省 `auto`)。 */\n mode?: ExecutionMode\n /** 第三方库装载器(缺省:`@faicad/*` scoped 包动态 import,与 CLI 相同)。 */\n libLoader?: LibLoader\n /**\n * 额外登记的库命名空间(如 cad 面的 sketch 扩展)。key 为 specifier 短名。\n * `cad` 项以 default 命名空间登记(脚本可免 import 使用)。\n */\n libs?: Record<string, LibNamespace>\n}\n\n/** executeScript 的产物。 */\nexport interface ExecuteScriptResult {\n /** 终端形状(几何产物;失败时为空数组)。 */\n terminals: TerminalShape[]\n /** 确定性警告等诊断信息。 */\n diagnostics: string[]\n /** 失败时的语句定位(与 ExecutionResult.failedAt 一致);成功为 undefined。 */\n failedAt?: { index: number; callee: string; message: string; lineNo?: number; code?: string }\n}\n\n/**\n * 执行一段 `.fai.js` 源码字符串并返回产物。\n *\n * 内部完成完整 Host 装配(node ports + libLoader + OCCT BREP 引擎注册),\n * 调用方无需再自行装配——这正是 B4 三个装配坑的固化出口。\n *\n * @param code `.fai.js` 源码字符串\n * @param opts 可选:执行模式、库装载器、额外库命名空间\n * @returns 终端形状、诊断信息与失败定位(`Promise<ExecuteScriptResult>`);\n * 执行失败以 `failedAt` 结构化返回,不抛异常。\n */\nexport async function executeScript(\n code: string,\n opts?: ExecuteScriptOptions,\n): Promise<ExecuteScriptResult> {\n // registerOcctBrepEngine is idempotent and itself boots initOcctWasm (same as cliRun).\n await registerOcctBrepEngine()\n\n const ports = withCliLibLoader(createNodePorts())\n const runtime = createRuntime(ports, opts?.mode ?? 'auto', opts?.libs)\n\n // cad 经 registerLib 声明 packageName,脚本可 `import * as cad from '@faicad/faijs'`。\n if (opts?.libs?.cad) {\n runtime.registerLib('cad', opts.libs.cad, { default: true, packageName: '@faicad/faijs' })\n }\n\n const execResult: ExecutionResult = await runtime.execute(code)\n return {\n terminals: execResult.terminals ?? [],\n diagnostics: execResult.infos ?? [],\n failedAt: execResult.failedAt,\n }\n}\n"]}
|
package/dist/node.d.ts
CHANGED
|
@@ -20,5 +20,7 @@ export { readFileArrayBuffer } from './io/bytes-node.js';
|
|
|
20
20
|
export { CliEventSink } from './node-host/cli-event-sink.js';
|
|
21
21
|
export { cliCheck, cliRun, cliMain, parseArgs } from './node-host/cli.js';
|
|
22
22
|
export type { CliCheckResult, CliRunResult, CliRunOptions } from './node-host/cli.js';
|
|
23
|
+
export { executeScript } from './node-host/execute-script.js';
|
|
24
|
+
export type { ExecuteScriptOptions, ExecuteScriptResult } from './node-host/execute-script.js';
|
|
23
25
|
export * from './topology/naming/index.js';
|
|
24
26
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,YAAY,GACb,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAGlF,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,YAAY,GACb,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAGlF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAG3F,cAAc,mBAAmB,CAAA"}
|
package/dist/node.js
CHANGED
|
@@ -19,6 +19,9 @@ export { FsAssetResolver } from './node-host/fs-asset-resolver.js';
|
|
|
19
19
|
export { readFileArrayBuffer } from './io/bytes-node.js';
|
|
20
20
|
export { CliEventSink } from './node-host/cli-event-sink.js';
|
|
21
21
|
export { cliCheck, cliRun, cliMain, parseArgs } from './node-host/cli.js';
|
|
22
|
+
// B6 (2026-10-06): first-class "code string → outputs" execution API — host
|
|
23
|
+
// assembly (node ports + libLoader + OCCT BREP engine) is done internally.
|
|
24
|
+
export { executeScript } from './node-host/execute-script.js';
|
|
22
25
|
// ── TopoRef 命名层(§3.7/§3.8:命名属于核心公共能力,随 browser/node 走)──
|
|
23
26
|
export * from './topology/naming/index.js';
|
|
24
27
|
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,YAAY,GACb,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,YAAY,GACb,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEtE,4EAA4E;AAC5E,2EAA2E;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG1D,0DAA0D;AAC1D,cAAc,mBAAmB,CAAA","sourcesContent":["/**\n * Node.js 入口 — 仅在 Node.js 环境中使用\n *\n * 这个文件单独导出 node-host 相关的模块,避免主入口 index.ts\n * 静态 import node-host 模块(在浏览器环境中会导致 404)。\n *\n * 消费者在 Node.js 环境中应从 @faicad/faijs/node 导入:\n * import { createNodePorts } from '@faicad/faijs/node'\n */\n\n// D1(2026-09-19):/node 入口与 /.、/browser 同源暴露 createRuntime(自带 cad 注册)。\nexport * from './index'\n\nexport { createNodePorts } from './node-host'\nexport {\n createFsProjectLoader,\n findProjectRoot,\n projectKeyOf,\n} from './node-host/fs-project-loader'\nexport type { ProjectLoader } from './cad-runtime/ports'\nexport { setManifoldWasmUrl, getManifoldWasmUrl, getManifoldModule } from './mesh/manifold-loader'\nexport { InlineCsgBackend } from './browser-host/inline-csg-backend'\nexport { InlineSdfBackend } from './browser-host/inline-sdf-backend'\nexport { NodeFontProvider } from './node-host/node-font-provider'\nexport { FsAssetResolver } from './node-host/fs-asset-resolver'\nexport { readFileArrayBuffer } from './io/bytes-node'\nexport { CliEventSink } from './node-host/cli-event-sink'\nexport { cliCheck, cliRun, cliMain, parseArgs } from './node-host/cli'\nexport type { CliCheckResult, CliRunResult, CliRunOptions } from './node-host/cli'\n// B6 (2026-10-06): first-class \"code string → outputs\" execution API — host\n// assembly (node ports + libLoader + OCCT BREP engine) is done internally.\nexport { executeScript } from './node-host/execute-script'\nexport type { ExecuteScriptOptions, ExecuteScriptResult } from './node-host/execute-script'\n\n// ── TopoRef 命名层(§3.7/§3.8:命名属于核心公共能力,随 browser/node 走)──\nexport * from './topology/naming'\n"]}
|