@faicad/faijs 0.19.0 → 0.29.3
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/LICENSE +202 -28
- package/dist/api/api-namespace.d.ts +5 -5
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +4 -4
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/assert.d.ts +2 -2
- package/dist/api/assert.js +8 -8
- package/dist/api/assert.js.map +1 -1
- package/dist/api/asset.d.ts +1 -1
- package/dist/api/asset.js +2 -2
- package/dist/api/asset.js.map +1 -1
- package/dist/api/boolean.d.ts +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +128 -16
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-mirror/joinery-brep.d.ts.map +1 -1
- package/dist/api/brep-mirror/joinery-brep.js +3 -1
- package/dist/api/brep-mirror/joinery-brep.js.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.d.ts +14 -0
- package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/borrow-bridge.js +52 -0
- package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -0
- package/dist/api/cadquery-selectors/edge.d.ts +40 -0
- package/dist/api/cadquery-selectors/edge.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/edge.js +70 -0
- package/dist/api/cadquery-selectors/edge.js.map +1 -0
- package/dist/api/cadquery-selectors/entity.d.ts +121 -0
- package/dist/api/cadquery-selectors/entity.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/entity.js +167 -0
- package/dist/api/cadquery-selectors/entity.js.map +1 -0
- package/dist/api/cadquery-selectors/face.d.ts +33 -0
- package/dist/api/cadquery-selectors/face.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/face.js +353 -0
- package/dist/api/cadquery-selectors/face.js.map +1 -0
- package/dist/api/cadquery-selectors/grammar.d.ts +50 -0
- package/dist/api/cadquery-selectors/grammar.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/grammar.js +345 -0
- package/dist/api/cadquery-selectors/grammar.js.map +1 -0
- package/dist/api/cadquery-selectors/index.d.ts +18 -0
- package/dist/api/cadquery-selectors/index.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/index.js +17 -0
- package/dist/api/cadquery-selectors/index.js.map +1 -0
- package/dist/api/cadquery-selectors/predicates.d.ts +76 -0
- package/dist/api/cadquery-selectors/predicates.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/predicates.js +85 -0
- package/dist/api/cadquery-selectors/predicates.js.map +1 -0
- package/dist/api/cadquery-selectors/resolve.d.ts +41 -0
- package/dist/api/cadquery-selectors/resolve.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/resolve.js +243 -0
- package/dist/api/cadquery-selectors/resolve.js.map +1 -0
- package/dist/api/cadquery-selectors/types.d.ts +96 -0
- package/dist/api/cadquery-selectors/types.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/types.js +11 -0
- package/dist/api/cadquery-selectors/types.js.map +1 -0
- package/dist/api/chamfer.d.ts +13 -5
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +63 -7
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/compound-geom.d.ts +1 -1
- package/dist/api/compound-geom.js +1 -1
- package/dist/api/compound-geom.js.map +1 -1
- package/dist/api/draft.d.ts +1 -1
- package/dist/api/draft.js +1 -1
- package/dist/api/draft.js.map +1 -1
- package/dist/api/edge-ref.d.ts +1 -1
- package/dist/api/edge-ref.d.ts.map +1 -1
- package/dist/api/edge-ref.js +11 -3
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/engrave.d.ts +1 -1
- package/dist/api/engrave.js +7 -7
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/extrude.d.ts +6 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +59 -5
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.d.ts +1 -1
- package/dist/api/face-ref.js +1 -1
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/feature-repair.d.ts +1 -1
- package/dist/api/feature-repair.js +1 -1
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +1 -1
- package/dist/api/fillet-variable.js +1 -1
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +28 -8
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +64 -9
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/script-face-manifest.d.ts +4 -0
- package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/geom.d.ts +1 -1
- package/dist/api/geom.js +1 -1
- package/dist/api/geom.js.map +1 -1
- package/dist/api/helix.d.ts +1 -1
- package/dist/api/helix.js +1 -1
- package/dist/api/helix.js.map +1 -1
- package/dist/api/import-brep.d.ts +20 -2
- package/dist/api/import-brep.d.ts.map +1 -1
- package/dist/api/import-brep.js +28 -3
- package/dist/api/import-brep.js.map +1 -1
- package/dist/api/import-step.d.ts +17 -2
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +23 -3
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.d.ts +2 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +5 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.js +1 -1
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/internal/mesh-solid-op.d.ts +236 -0
- package/dist/api/internal/mesh-solid-op.d.ts.map +1 -0
- package/dist/api/internal/mesh-solid-op.js +352 -0
- package/dist/api/internal/mesh-solid-op.js.map +1 -0
- package/dist/api/internal/svg-asset-resolver.d.ts +1 -1
- package/dist/api/internal/svg-asset-resolver.js +1 -1
- package/dist/api/internal/svg-asset-resolver.js.map +1 -1
- package/dist/api/knurl.d.ts +1 -1
- package/dist/api/knurl.d.ts.map +1 -1
- package/dist/api/knurl.js +3 -2
- package/dist/api/knurl.js.map +1 -1
- package/dist/api/loft.d.ts +1 -1
- package/dist/api/loft.js +1 -1
- package/dist/api/loft.js.map +1 -1
- package/dist/api/measurement/index.d.ts +9 -5
- package/dist/api/measurement/index.d.ts.map +1 -1
- package/dist/api/measurement/index.js +47 -20
- package/dist/api/measurement/index.js.map +1 -1
- package/dist/api/pattern.d.ts +5 -3
- package/dist/api/pattern.d.ts.map +1 -1
- package/dist/api/pattern.js +32 -4
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/place.d.ts +1 -1
- package/dist/api/place.js +1 -1
- package/dist/api/place.js.map +1 -1
- package/dist/api/primitives.d.ts +5 -4
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +11 -5
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/profile.d.ts +64 -8
- package/dist/api/profile.d.ts.map +1 -1
- package/dist/api/profile.js +61 -10
- package/dist/api/profile.js.map +1 -1
- package/dist/api/punch-hole.d.ts +3 -0
- package/dist/api/punch-hole.d.ts.map +1 -1
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/reconcile.d.ts +1 -1
- package/dist/api/reconcile.js +1 -1
- package/dist/api/reconcile.js.map +1 -1
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +122 -1
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/screw.d.ts +1 -1
- package/dist/api/screw.js +3 -3
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts +1 -1
- package/dist/api/sdf.js +2 -2
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/section-by-plane.d.ts +1 -1
- package/dist/api/section-by-plane.d.ts.map +1 -1
- package/dist/api/section-by-plane.js +2 -1
- package/dist/api/section-by-plane.js.map +1 -1
- package/dist/api/shell.d.ts +11 -4
- package/dist/api/shell.d.ts.map +1 -1
- package/dist/api/shell.js +53 -7
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.d.ts +41 -0
- package/dist/api/sketch-on-face.d.ts.map +1 -1
- package/dist/api/sketch-on-face.js +100 -1
- package/dist/api/sketch-on-face.js.map +1 -1
- package/dist/api/sketch-on-plane.d.ts +17 -9
- package/dist/api/sketch-on-plane.d.ts.map +1 -1
- package/dist/api/sketch-on-plane.js +12 -10
- package/dist/api/sketch-on-plane.js.map +1 -1
- package/dist/api/split-by-plane.d.ts +1 -1
- package/dist/api/split-by-plane.d.ts.map +1 -1
- package/dist/api/split-by-plane.js +2 -1
- package/dist/api/split-by-plane.js.map +1 -1
- package/dist/api/split.d.ts +1 -1
- package/dist/api/split.js +2 -2
- package/dist/api/split.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts +8 -0
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/sweep.d.ts +1 -1
- package/dist/api/sweep.js +1 -1
- 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/topo-resolve.d.ts +74 -1
- package/dist/api/topo-resolve.d.ts.map +1 -1
- package/dist/api/topo-resolve.js +180 -2
- package/dist/api/topo-resolve.js.map +1 -1
- package/dist/api/transform.d.ts +10 -6
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +74 -21
- package/dist/api/transform.js.map +1 -1
- package/dist/api/wire.d.ts +1 -1
- package/dist/api/wire.js +1 -1
- package/dist/api/wire.js.map +1 -1
- package/dist/api/xml-dom.d.ts +27 -0
- package/dist/api/xml-dom.d.ts.map +1 -0
- package/dist/api/xml-dom.js +45 -0
- package/dist/api/xml-dom.js.map +1 -0
- package/dist/brep/brep-ops.d.ts +13 -11
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +31 -30
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/brep-topology.d.ts +5 -4
- package/dist/brep/brep-topology.d.ts.map +1 -1
- package/dist/brep/brep-topology.js +9 -6
- package/dist/brep/brep-topology.js.map +1 -1
- package/dist/brep/effective-deflection.d.ts +35 -0
- package/dist/brep/effective-deflection.d.ts.map +1 -0
- package/dist/brep/effective-deflection.js +49 -0
- package/dist/brep/effective-deflection.js.map +1 -0
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +27 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/adapters/brepkit.d.ts +18 -0
- package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brepkit.js +46 -1
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -1
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +3 -1
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +29 -7
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/registry.d.ts +24 -1
- package/dist/brep/engine/registry.d.ts.map +1 -1
- package/dist/brep/engine/registry.js +24 -0
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/engine/types.d.ts +54 -3
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js +10 -0
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/export/export-model.d.ts +79 -0
- package/dist/brep/export/export-model.d.ts.map +1 -0
- package/dist/brep/export/export-model.js +336 -0
- package/dist/brep/export/export-model.js.map +1 -0
- package/dist/brep/face-evolution.d.ts +1 -1
- package/dist/brep/face-evolution.d.ts.map +1 -1
- package/dist/brep/face-evolution.js +20 -1
- package/dist/brep/face-evolution.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +1 -1
- package/dist/brep/handle-bridge.js +1 -1
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/mesh-solid.d.ts +218 -0
- package/dist/brep/mesh-solid.d.ts.map +1 -0
- package/dist/brep/mesh-solid.js +229 -0
- package/dist/brep/mesh-solid.js.map +1 -0
- package/dist/brep/primitives-brep.d.ts.map +1 -1
- package/dist/brep/primitives-brep.js +3 -1
- package/dist/brep/primitives-brep.js.map +1 -1
- package/dist/brep/text/fontRegistry.d.ts +32 -1
- package/dist/brep/text/fontRegistry.d.ts.map +1 -1
- package/dist/brep/text/fontRegistry.js +51 -1
- package/dist/brep/text/fontRegistry.js.map +1 -1
- package/dist/brep/text/text-to-solid.d.ts.map +1 -1
- package/dist/brep/text/text-to-solid.js +8 -3
- package/dist/brep/text/text-to-solid.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +18 -2
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +453 -125
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts +8 -0
- package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.js +10 -0
- package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
- package/dist/browser-host/browser-font-provider.d.ts +12 -0
- package/dist/browser-host/browser-font-provider.d.ts.map +1 -1
- package/dist/browser-host/browser-font-provider.js +25 -0
- package/dist/browser-host/browser-font-provider.js.map +1 -1
- package/dist/browser.d.ts +6 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +10 -3
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.d.ts +28 -3
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +119 -4
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts +19 -3
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +49 -1
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +3 -3
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/preview-exec.d.ts +4 -4
- package/dist/cad-runtime/preview-exec.js +2 -2
- package/dist/cad-runtime/preview-exec.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +66 -8
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +121 -8
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +37 -1
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +25 -1
- package/dist/define-op.js.map +1 -1
- package/dist/env-agnostic.d.ts +7 -7
- package/dist/env-agnostic.d.ts.map +1 -1
- package/dist/env-agnostic.js +3 -3
- package/dist/env-agnostic.js.map +1 -1
- package/dist/geometry2d/adapt.d.ts +39 -4
- package/dist/geometry2d/adapt.d.ts.map +1 -1
- package/dist/geometry2d/adapt.js +14 -3
- package/dist/geometry2d/adapt.js.map +1 -1
- package/dist/geometry2d/blueprint.d.ts +2 -2
- package/dist/geometry2d/blueprint.js +2 -2
- package/dist/geometry2d/blueprint.js.map +1 -1
- package/dist/geometry2d/bridge/lift-on-plane.d.ts +18 -8
- package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
- package/dist/geometry2d/bridge/lift-on-plane.js +71 -12
- package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
- package/dist/geometry2d/bridge/plane.d.ts +17 -0
- package/dist/geometry2d/bridge/plane.d.ts.map +1 -1
- package/dist/geometry2d/bridge/plane.js +22 -0
- package/dist/geometry2d/bridge/plane.js.map +1 -1
- package/dist/geometry2d/curve2d.d.ts +25 -0
- package/dist/geometry2d/curve2d.d.ts.map +1 -1
- package/dist/geometry2d/curve2d.js +41 -5
- package/dist/geometry2d/curve2d.js.map +1 -1
- package/dist/geometry2d/pen-sketcher.d.ts +25 -0
- package/dist/geometry2d/pen-sketcher.d.ts.map +1 -1
- package/dist/geometry2d/pen-sketcher.js +43 -0
- package/dist/geometry2d/pen-sketcher.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/io/bytes-node.d.ts +11 -0
- package/dist/io/bytes-node.d.ts.map +1 -0
- package/dist/io/bytes-node.js +28 -0
- package/dist/io/bytes-node.js.map +1 -0
- package/dist/io/bytes.d.ts +33 -0
- package/dist/io/bytes.d.ts.map +1 -0
- package/dist/io/bytes.js +41 -0
- package/dist/io/bytes.js.map +1 -0
- package/dist/io/fai-zip/container-read.d.ts +102 -0
- package/dist/io/fai-zip/container-read.d.ts.map +1 -0
- package/dist/io/fai-zip/container-read.js +305 -0
- package/dist/io/fai-zip/container-read.js.map +1 -0
- package/dist/io/fai-zip/container-write.d.ts +70 -0
- package/dist/io/fai-zip/container-write.d.ts.map +1 -0
- package/dist/io/fai-zip/container-write.js +186 -0
- package/dist/io/fai-zip/container-write.js.map +1 -0
- package/dist/io/fai-zip/container.d.ts +107 -0
- package/dist/io/fai-zip/container.d.ts.map +1 -0
- package/dist/io/fai-zip/container.js +89 -0
- package/dist/io/fai-zip/container.js.map +1 -0
- package/dist/io/fai-zip/index.d.ts +18 -0
- package/dist/io/fai-zip/index.d.ts.map +1 -0
- package/dist/io/fai-zip/index.js +4 -0
- package/dist/io/fai-zip/index.js.map +1 -0
- package/dist/io/index.d.ts +10 -0
- package/dist/io/index.d.ts.map +1 -0
- package/dist/io/index.js +13 -0
- package/dist/io/index.js.map +1 -0
- package/dist/io/zip.d.ts +68 -0
- package/dist/io/zip.d.ts.map +1 -0
- package/dist/io/zip.js +147 -0
- package/dist/io/zip.js.map +1 -0
- package/dist/lang/code-to-args.d.ts +30 -4
- package/dist/lang/code-to-args.d.ts.map +1 -1
- package/dist/lang/code-to-args.js +42 -3
- package/dist/lang/code-to-args.js.map +1 -1
- package/dist/lang/codegen.d.ts +45 -1
- package/dist/lang/codegen.d.ts.map +1 -1
- package/dist/lang/codegen.js +135 -6
- package/dist/lang/codegen.js.map +1 -1
- package/dist/lang/host-arg.d.ts +6 -0
- package/dist/lang/host-arg.d.ts.map +1 -1
- package/dist/lang/host-arg.js.map +1 -1
- package/dist/lang/metadata-extractor.d.ts +25 -0
- package/dist/lang/metadata-extractor.d.ts.map +1 -1
- package/dist/lang/metadata-extractor.js +289 -25
- package/dist/lang/metadata-extractor.js.map +1 -1
- package/dist/lang/parse-error.d.ts +7 -1
- 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 +9 -1
- package/dist/lang/security-scanner.d.ts.map +1 -1
- package/dist/lang/security-scanner.js +38 -1
- package/dist/lang/security-scanner.js.map +1 -1
- package/dist/lang/statement-summary.d.ts +1 -1
- package/dist/lang/statement-summary.js +1 -1
- package/dist/lang/statement-summary.js.map +1 -1
- package/dist/lang/types.d.ts +1 -1
- package/dist/lang/types.js +1 -1
- package/dist/lang/types.js.map +1 -1
- package/dist/mesh/index.d.ts +2 -1
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +2 -1
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +69 -9
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +121 -17
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/reconcile.d.ts +1 -1
- package/dist/mesh/reconcile.js +1 -1
- package/dist/mesh/reconcile.js.map +1 -1
- package/dist/mesh/rigid-transform.d.ts +3 -3
- package/dist/mesh/rigid-transform.js +3 -3
- package/dist/mesh/rigid-transform.js.map +1 -1
- package/dist/mesh/stl-unit.d.ts +24 -0
- package/dist/mesh/stl-unit.d.ts.map +1 -0
- package/dist/mesh/stl-unit.js +17 -0
- package/dist/mesh/stl-unit.js.map +1 -0
- package/dist/mesh/threemf-bambu.d.ts +142 -0
- package/dist/mesh/threemf-bambu.d.ts.map +1 -0
- package/dist/mesh/threemf-bambu.js +334 -0
- package/dist/mesh/threemf-bambu.js.map +1 -0
- package/dist/mesh/threemf-loader.d.ts +50 -0
- package/dist/mesh/threemf-loader.d.ts.map +1 -0
- package/dist/mesh/threemf-loader.js +628 -0
- package/dist/mesh/threemf-loader.js.map +1 -0
- package/dist/mesh/threemf-view.d.ts +71 -0
- package/dist/mesh/threemf-view.d.ts.map +1 -0
- package/dist/mesh/threemf-view.js +100 -0
- package/dist/mesh/threemf-view.js.map +1 -0
- package/dist/mesh/transform.d.ts +2 -2
- package/dist/mesh/transform.d.ts.map +1 -1
- package/dist/mesh/transform.js +3 -3
- package/dist/mesh/transform.js.map +1 -1
- package/dist/mesh/types.d.ts +1 -1
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/node-host/cli.d.ts +44 -6
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +127 -50
- package/dist/node-host/cli.js.map +1 -1
- package/dist/node-host/font-family-index.d.ts +93 -0
- package/dist/node-host/font-family-index.d.ts.map +1 -0
- package/dist/node-host/font-family-index.js +273 -0
- package/dist/node-host/font-family-index.js.map +1 -0
- package/dist/node-host/fs-asset-resolver.d.ts +8 -3
- package/dist/node-host/fs-asset-resolver.d.ts.map +1 -1
- package/dist/node-host/fs-asset-resolver.js +13 -5
- package/dist/node-host/fs-asset-resolver.js.map +1 -1
- package/dist/node-host/index.d.ts +8 -0
- package/dist/node-host/index.d.ts.map +1 -1
- package/dist/node-host/index.js +1 -0
- package/dist/node-host/index.js.map +1 -1
- package/dist/node-host/node-font-provider.d.ts +28 -0
- package/dist/node-host/node-font-provider.d.ts.map +1 -1
- package/dist/node-host/node-font-provider.js +49 -0
- package/dist/node-host/node-font-provider.js.map +1 -1
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -0
- package/dist/node.js.map +1 -1
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +35 -2
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts +18 -13
- package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
- package/dist/occt-kernel/occtKernel.js +20 -31
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/occt-kernel/stepColorParser.d.ts +18 -0
- package/dist/occt-kernel/stepColorParser.d.ts.map +1 -1
- package/dist/occt-kernel/stepColorParser.js +38 -0
- package/dist/occt-kernel/stepColorParser.js.map +1 -1
- package/dist/occt-kernel/topologyExt.d.ts +1 -1
- package/dist/occt-kernel/topologyExt.d.ts.map +1 -1
- package/dist/occt-kernel/topologyExt.js +8 -6
- package/dist/occt-kernel/topologyExt.js.map +1 -1
- package/dist/primitives/text/cjk-font.d.ts +2 -15
- package/dist/primitives/text/cjk-font.d.ts.map +1 -1
- package/dist/primitives/text/cjk-font.js +13 -1
- package/dist/primitives/text/cjk-font.js.map +1 -1
- package/dist/runtime-state.d.ts +103 -9
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +95 -2
- package/dist/runtime-state.js.map +1 -1
- package/dist/sdk.d.ts +4 -4
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +6 -6
- package/dist/sdk.js.map +1 -1
- package/dist/shape.d.ts +97 -2
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +126 -1
- package/dist/shape.js.map +1 -1
- package/dist/tolerance.d.ts +38 -0
- package/dist/tolerance.d.ts.map +1 -0
- package/dist/tolerance.js +40 -0
- package/dist/tolerance.js.map +1 -0
- package/dist/topology/naming/lineage.d.ts +6 -0
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js +8 -0
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/topology/naming/resolve-edge.d.ts +20 -1
- package/dist/topology/naming/resolve-edge.d.ts.map +1 -1
- package/dist/topology/naming/resolve-edge.js +54 -20
- package/dist/topology/naming/resolve-edge.js.map +1 -1
- package/dist/topology/naming/score.js +3 -3
- package/dist/topology/naming/score.js.map +1 -1
- package/dist/units.d.ts +248 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +397 -0
- package/dist/units.js.map +1 -0
- package/dist/weapp.d.ts +6 -2
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +7 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +28 -3
|
@@ -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 { StdlibNamespace } 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 { buildStlBufferFromMesh } from '../brep/export/stl'\nimport { exportStepFromSolid, exportStepFromSolids, type StepExportEntry } from '../brep/export/step'\nimport { exportStep } from '../occt-kernel/highLevelApi'\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 { 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 'cq-compat': '@faicad/cq-compat',\n 'fai-cq-gears': '@faicad/fai-cq-gears',\n 'fai-cq-warehouse': '@faicad/fai-cq-warehouse',\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 StdlibNamespace\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\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 createInternalStdlib; core does not assemble it by default). */\n libs?: Record<string, StdlibNamespace>\n /**\n * 项目根(多文件 §4.5):相对 import 的解析基准,moduleKey = 相对它的路径。\n * 缺省由入口文件向上找最近的 package.json。\n */\n projectRoot?: string\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, StdlibNamespace>\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 return {\n ok: result.ok,\n errors: result.errors.map((e) => ({\n stage: e.stage,\n message: e.message,\n line: e.line,\n stmtId: e.stmtId,\n })),\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)\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/** 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): Promise<{ ok: boolean; error?: string; outputFile?: string; outputFormat?: string; infos?: string[] }> {\n if (terminals.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 (terminals.length === 1) {\n const terminal = terminals[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)\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 < terminals.length; i++) {\n const terminal = terminals[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)\n if (asmResult) return asmResult\n }\n }\n // Then export non-compound terminals\n for (let i = 0; i < terminals.length; i++) {\n const terminal = terminals[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 */\nfunction selectViewShapes(\n execResult: {\n outputs: Map<unknown, Shape | CompoundShape>\n terminals?: Array<{ id: unknown; 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 const terminals = execResult.terminals ?? []\n const ids: unknown[] = terminals.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 * 按零件类型分别处理 STEP 导出:\n * - 有 BREP solid → 精确 STEP(exportStepFromSolid,ADVANCED_FACE)\n * - 无 BREP solid → 三角化 STEP(exportStep/meshesToStep,faceted)\n * - STL:无论是否 BREP,都取 mesh Shape 导出\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 if (ext === 'stl') {\n const buffer = buildStlBufferFromMesh(shape.positions, shape.indices)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'stl' }\n }\n\n if (ext === 'step' || ext === 'stp') {\n if (brepSolid) {\n // 有 BREP solid → 精确 STEP\n const buffer = exportStepFromSolid(brepSolid.solid, brepSolid.kernel)\n writeFileSync(outPath, Buffer.from(buffer))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n }\n // 无 BREP solid → 三角化 STEP(mesh 也可以导出 STEP,只是三角化的)\n const stepContent = exportStep(shape)\n writeFileSync(outPath, Buffer.from(stepContent, 'utf-8'))\n return { ok: true, outputFile: outPath, outputFormat: 'step' }\n }\n\n return { ok: false, error: `Unsupported output format: .${ext} (supported: .stl, .step)` }\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): 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 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} {\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\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 (!file && !arg.startsWith('-')) {\n file = arg\n }\n }\n\n return { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part }\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 createInternalStdlib; 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, StdlibNamespace>): Promise<number> {\n const { command, file, out, mode, assetsDir, fontsDir, projectRoot, view, sheet, part } = 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(' --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 })\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 } 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"]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System-font family index (Node host only).
|
|
3
|
+
*
|
|
4
|
+
* CadQuery resolves `font="Arial"` through OCC's `Font_FontMgr`, which consults
|
|
5
|
+
* the operating system's installed fonts. faijs has no such service, so a
|
|
6
|
+
* name-based `font=` cannot be honoured unless the *host* provides one. This
|
|
7
|
+
* module is that provider for the Node host: it walks the OS font directories
|
|
8
|
+
* and maps a normalised family name to the font file, so
|
|
9
|
+
* `NodeFontProvider.resolveFont('Arial')` can return the bytes.
|
|
10
|
+
*
|
|
11
|
+
* Design notes
|
|
12
|
+
* ------------
|
|
13
|
+
* - **Only the `name` table is read.** Parsing a font with opentype.js costs
|
|
14
|
+
* milliseconds; a system font directory holds hundreds to thousands of files,
|
|
15
|
+
* so a full parse per file would add seconds to every first text call. The
|
|
16
|
+
* `name` table sits a few hundred bytes into the file, so a small `readSync`
|
|
17
|
+
* per file is enough.
|
|
18
|
+
* - **`.ttc`/`.woff`/`.woff2` are skipped**: TrueType collections need a
|
|
19
|
+
* per-face offset table and the WOFF formats are compressed — neither is a
|
|
20
|
+
* plain `name` table read.
|
|
21
|
+
* - Nothing here runs unless a caller explicitly asks for a font *by name*;
|
|
22
|
+
* the bundled default font stays the single source of truth for `default`.
|
|
23
|
+
*/
|
|
24
|
+
/** Names of one font file. */
|
|
25
|
+
export interface FontFileNames {
|
|
26
|
+
/** Typographic family (name ID 16) when present, else family (name ID 1). */
|
|
27
|
+
family: string;
|
|
28
|
+
/** Subfamily (name ID 17 when present, else name ID 2), e.g. "Regular". */
|
|
29
|
+
subfamily: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Normalise a font name for matching: lower-case, letters/digits only.
|
|
33
|
+
*
|
|
34
|
+
* `"DejaVu Sans"`, `"DejaVuSans"` and `"dejavu-sans"` all collapse to
|
|
35
|
+
* `"dejavusans"`, which is what makes file-name based keys and real family
|
|
36
|
+
* names interchangeable.
|
|
37
|
+
*
|
|
38
|
+
* @param name - raw font name
|
|
39
|
+
* @returns the normalised comparison key
|
|
40
|
+
*/
|
|
41
|
+
export declare function normalizeFontName(name: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Parse a `name` table that starts at `base` inside `buf`.
|
|
44
|
+
*
|
|
45
|
+
* Windows (platform 3) and Unicode (platform 0) records are UTF-16BE; Macintosh
|
|
46
|
+
* (platform 1) records are single-byte. Windows/en records win when a name is
|
|
47
|
+
* present more than once. Typographic names (16/17) win over legacy (1/2).
|
|
48
|
+
*
|
|
49
|
+
* @param buf - buffer containing the table
|
|
50
|
+
* @param base - offset of the table inside `buf`
|
|
51
|
+
* @returns the names, or null when the table is unreadable
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseNameTable(buf: Buffer, base: number): FontFileNames | null;
|
|
54
|
+
/**
|
|
55
|
+
* Read the family/subfamily names out of a complete font file buffer.
|
|
56
|
+
*
|
|
57
|
+
* @param buf - the whole font file
|
|
58
|
+
* @returns the names, or null when the file has no readable `name` table
|
|
59
|
+
*/
|
|
60
|
+
export declare function readFontFileNames(buf: Buffer): FontFileNames | null;
|
|
61
|
+
/** Locate a font file whose `name` table names it `family`. */
|
|
62
|
+
export interface FontFamilyMatch {
|
|
63
|
+
/** Absolute path of the best (Regular-preferred) file for the family. */
|
|
64
|
+
path: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The OS font directories to scan, in search order (Windows / macOS / Linux).
|
|
68
|
+
*
|
|
69
|
+
* @returns the platform's standard font directories present in the environment,
|
|
70
|
+
* with unavailable ones filtered out (may be empty on a stripped-down host)
|
|
71
|
+
*/
|
|
72
|
+
export declare function defaultSystemFontDirs(): string[];
|
|
73
|
+
/** normalized family name -> best file path found so far. */
|
|
74
|
+
export type FontFamilyIndex = Map<string, string>;
|
|
75
|
+
/**
|
|
76
|
+
* Build a normalised-family → file-path index for the given directories.
|
|
77
|
+
*
|
|
78
|
+
* When a family has several files (Regular/Bold/Italic…), the Regular one wins;
|
|
79
|
+
* otherwise the first file seen is kept. Also indexes each file's *file stem*,
|
|
80
|
+
* so a host pointed at a bare directory of renamed files still resolves them.
|
|
81
|
+
*
|
|
82
|
+
* @param dirs - font directories to scan (missing directories are skipped)
|
|
83
|
+
* @returns the index (empty when nothing readable was found)
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildFontFamilyIndex(dirs: readonly string[]): FontFamilyIndex;
|
|
86
|
+
/**
|
|
87
|
+
* PATH-style helper: split a user-supplied directory list.
|
|
88
|
+
*
|
|
89
|
+
* @param dirs - a path-delimiter-separated directory list (`;` on Windows, `:` elsewhere)
|
|
90
|
+
* @returns the non-empty entries, in the order given
|
|
91
|
+
*/
|
|
92
|
+
export declare function splitDirList(dirs: string): string[];
|
|
93
|
+
//# sourceMappingURL=font-family-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font-family-index.d.ts","sourceRoot":"","sources":["../../src/node-host/font-family-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAWH,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAkCD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAyC9E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAInE;AA6BD,+DAA+D;AAC/D,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAwBhD;AA2BD,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEjD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAgB7E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD"}
|