@faicad/faijs 0.33.2 → 0.35.8
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/dist/api/api-namespace.d.ts +14 -14
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +40 -14
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/appearance.d.ts +47 -6
- package/dist/api/appearance.d.ts.map +1 -1
- package/dist/api/appearance.js.map +1 -1
- package/dist/api/assembly/entities.js +14 -4
- package/dist/api/assembly/entities.js.map +1 -1
- package/dist/api/assembly/solve-tree.d.ts +1 -0
- package/dist/api/assembly/solve-tree.d.ts.map +1 -1
- package/dist/api/assembly/solve-tree.js +42 -17
- package/dist/api/assembly/solve-tree.js.map +1 -1
- package/dist/api/assembly/solve.d.ts +1 -0
- package/dist/api/assembly/solve.d.ts.map +1 -1
- package/dist/api/assembly/solve.js.map +1 -1
- package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
- package/dist/api/assembly/solvers/global-solver.js +130 -23
- package/dist/api/assembly/solvers/global-solver.js.map +1 -1
- package/dist/api/assembly/solvers/pose-from-delta.d.ts +9 -0
- package/dist/api/assembly/solvers/pose-from-delta.d.ts.map +1 -1
- package/dist/api/assembly/solvers/pose-from-delta.js +23 -0
- package/dist/api/assembly/solvers/pose-from-delta.js.map +1 -1
- package/dist/api/assembly/solvers/types.d.ts +20 -2
- package/dist/api/assembly/solvers/types.d.ts.map +1 -1
- package/dist/api/assembly/solvers/types.js.map +1 -1
- package/dist/api/chamfer.d.ts +7 -4
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +57 -13
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/draft.d.ts +7 -4
- package/dist/api/draft.d.ts.map +1 -1
- package/dist/api/draft.js +11 -6
- package/dist/api/draft.js.map +1 -1
- package/dist/api/edge-ref.d.ts +4 -4
- package/dist/api/edge-ref.js +4 -4
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/extrude.d.ts +10 -6
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +54 -26
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.d.ts +4 -4
- package/dist/api/face-ref.js +4 -4
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/feature-repair.d.ts +6 -3
- package/dist/api/feature-repair.d.ts.map +1 -1
- package/dist/api/feature-repair.js +12 -7
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +6 -2
- package/dist/api/fillet-variable.d.ts.map +1 -1
- package/dist/api/fillet-variable.js +24 -6
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +7 -4
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +92 -12
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/script-face-manifest.js +1 -1
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/topology.js +1 -1
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/helix.d.ts +13 -13
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +19 -24
- package/dist/api/helix.js.map +1 -1
- package/dist/api/import-brep.d.ts +10 -18
- package/dist/api/import-brep.d.ts.map +1 -1
- package/dist/api/import-brep.js +17 -25
- package/dist/api/import-brep.js.map +1 -1
- package/dist/api/import-step.d.ts +10 -15
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +24 -29
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.js +2 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/export-members.js.map +1 -1
- package/dist/api/loft-advanced.d.ts +4 -0
- package/dist/api/loft-advanced.d.ts.map +1 -1
- package/dist/api/loft-advanced.js +4 -0
- package/dist/api/loft-advanced.js.map +1 -1
- package/dist/api/loft.d.ts +5 -3
- package/dist/api/loft.d.ts.map +1 -1
- package/dist/api/loft.js +5 -3
- package/dist/api/loft.js.map +1 -1
- package/dist/api/meta.d.ts +42 -6
- package/dist/api/meta.d.ts.map +1 -1
- package/dist/api/meta.js.map +1 -1
- package/dist/api/primitives.d.ts +3 -2
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +3 -2
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/punch-hole.d.ts +5 -2
- package/dist/api/punch-hole.d.ts.map +1 -1
- package/dist/api/punch-hole.js +4 -1
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/replicate.d.ts +4 -5
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +4 -5
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/selectors-to-refs.d.ts +83 -0
- package/dist/api/selectors-to-refs.d.ts.map +1 -0
- package/dist/api/selectors-to-refs.js +211 -0
- package/dist/api/selectors-to-refs.js.map +1 -0
- package/dist/api/shell.d.ts +17 -8
- package/dist/api/shell.d.ts.map +1 -1
- package/dist/api/shell.js +45 -15
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.d.ts +12 -6
- package/dist/api/sketch-on-face.d.ts.map +1 -1
- package/dist/api/sketch-on-face.js +31 -4
- package/dist/api/sketch-on-face.js.map +1 -1
- package/dist/api/sketch-on-plane.d.ts +3 -0
- package/dist/api/sketch-on-plane.d.ts.map +1 -1
- package/dist/api/sketch-on-plane.js +3 -0
- package/dist/api/sketch-on-plane.js.map +1 -1
- package/dist/api/sketch-on-surface.d.ts +4 -1
- package/dist/api/sketch-on-surface.d.ts.map +1 -1
- package/dist/api/sketch-on-surface.js +4 -1
- package/dist/api/sketch-on-surface.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +5 -6
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/topo-resolve.d.ts.map +1 -1
- package/dist/api/topo-resolve.js +24 -5
- package/dist/api/topo-resolve.js.map +1 -1
- package/dist/api/view/view-projection.d.ts.map +1 -1
- package/dist/api/view/view-projection.js +9 -2
- package/dist/api/view/view-projection.js.map +1 -1
- package/dist/brep/brep-chain.js +2 -2
- package/dist/brep/brep-chain.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +1 -1
- package/dist/brep/brep-ops.js +1 -1
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +45 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +87 -3
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/registry.d.ts +33 -7
- package/dist/brep/engine/registry.d.ts.map +1 -1
- package/dist/brep/engine/registry.js +47 -16
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +14 -15
- package/dist/brep/handle-bridge.d.ts.map +1 -1
- package/dist/brep/handle-bridge.js +35 -15
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/primitives-brep.js +2 -2
- package/dist/brep/primitives-brep.js.map +1 -1
- package/dist/brep/text/text-to-solid.d.ts +40 -3
- package/dist/brep/text/text-to-solid.d.ts.map +1 -1
- package/dist/brep/text/text-to-solid.js +104 -24
- package/dist/brep/text/text-to-solid.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +2 -2
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +328 -38
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts +3 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.js +13 -9
- package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
- package/dist/brepkit-kernel/multi-version-test.d.ts +2 -2
- package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -1
- package/dist/brepkit-kernel/multi-version-test.js +6 -6
- package/dist/brepkit-kernel/multi-version-test.js.map +1 -1
- package/dist/browser.d.ts +2 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -2
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +9 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +11 -1
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.d.ts +16 -11
- package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js +16 -8
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts +62 -5
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +617 -42
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/interp/closure.d.ts +3 -2
- package/dist/cad-runtime/interp/closure.d.ts.map +1 -1
- package/dist/cad-runtime/interp/closure.js.map +1 -1
- package/dist/cad-runtime/interp/env.d.ts +9 -6
- package/dist/cad-runtime/interp/env.d.ts.map +1 -1
- package/dist/cad-runtime/interp/env.js +4 -2
- package/dist/cad-runtime/interp/env.js.map +1 -1
- package/dist/cad-runtime/lib-decl.d.ts +121 -0
- package/dist/cad-runtime/lib-decl.d.ts.map +1 -0
- package/dist/cad-runtime/lib-decl.js +100 -0
- package/dist/cad-runtime/lib-decl.js.map +1 -0
- package/dist/cad-runtime/ports.d.ts +12 -0
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +59 -5
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +252 -20
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/extra/browser.d.ts +9 -0
- package/dist/extra/browser.d.ts.map +1 -0
- package/dist/extra/browser.js +9 -0
- package/dist/extra/browser.js.map +1 -0
- package/dist/extra/editor-ops.d.ts +22 -0
- package/dist/extra/editor-ops.d.ts.map +1 -0
- package/dist/extra/editor-ops.js +21 -0
- package/dist/extra/editor-ops.js.map +1 -0
- package/dist/extra/extras/svg-extrude.d.ts +45 -0
- package/dist/extra/extras/svg-extrude.d.ts.map +1 -0
- package/dist/extra/extras/svg-extrude.js +110 -0
- package/dist/extra/extras/svg-extrude.js.map +1 -0
- package/dist/extra/extras/text-cjk.d.ts +36 -0
- package/dist/extra/extras/text-cjk.d.ts.map +1 -0
- package/dist/extra/extras/text-cjk.js +86 -0
- package/dist/extra/extras/text-cjk.js.map +1 -0
- package/dist/extra/extras/text-geometry.d.ts +69 -0
- package/dist/extra/extras/text-geometry.d.ts.map +1 -0
- package/dist/extra/extras/text-geometry.js +188 -0
- package/dist/extra/extras/text-geometry.js.map +1 -0
- package/dist/extra/index.d.ts +40 -0
- package/dist/extra/index.d.ts.map +1 -0
- package/dist/extra/index.js +40 -0
- package/dist/extra/index.js.map +1 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts +94 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts.map +1 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.js +282 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.js.map +1 -0
- package/dist/extra/mesh/drill-hole/drill-types.d.ts +34 -0
- package/dist/extra/mesh/drill-hole/drill-types.d.ts.map +1 -0
- package/dist/extra/mesh/drill-hole/drill-types.js +7 -0
- package/dist/extra/mesh/drill-hole/drill-types.js.map +1 -0
- package/dist/extra/mesh/engrave-decoration.d.ts +42 -0
- package/dist/extra/mesh/engrave-decoration.d.ts.map +1 -0
- package/dist/extra/mesh/engrave-decoration.js +39 -0
- package/dist/extra/mesh/engrave-decoration.js.map +1 -0
- package/dist/extra/mesh/fai_drill.d.ts +21 -0
- package/dist/extra/mesh/fai_drill.d.ts.map +1 -0
- package/dist/extra/mesh/fai_drill.js +89 -0
- package/dist/extra/mesh/fai_drill.js.map +1 -0
- package/dist/extra/mesh/fai_extrude.d.ts +24 -0
- package/dist/extra/mesh/fai_extrude.d.ts.map +1 -0
- package/dist/extra/mesh/fai_extrude.js +42 -0
- package/dist/extra/mesh/fai_extrude.js.map +1 -0
- package/dist/extra/mesh/fai_split.d.ts +164 -0
- package/dist/extra/mesh/fai_split.d.ts.map +1 -0
- package/dist/extra/mesh/fai_split.js +269 -0
- package/dist/extra/mesh/fai_split.js.map +1 -0
- package/dist/extra/mesh/primitives.d.ts +29 -0
- package/dist/extra/mesh/primitives.d.ts.map +1 -0
- package/dist/extra/mesh/primitives.js +41 -0
- package/dist/extra/mesh/primitives.js.map +1 -0
- package/dist/extra/op-names.d.ts +37 -0
- package/dist/extra/op-names.d.ts.map +1 -0
- package/dist/extra/op-names.js +46 -0
- package/dist/extra/op-names.js.map +1 -0
- package/dist/extra/ops/compound.d.ts +140 -0
- package/dist/extra/ops/compound.d.ts.map +1 -0
- package/dist/extra/ops/compound.js +167 -0
- package/dist/extra/ops/compound.js.map +1 -0
- package/dist/extra/ops/copy.d.ts +40 -0
- package/dist/extra/ops/copy.d.ts.map +1 -0
- package/dist/extra/ops/copy.js +83 -0
- package/dist/extra/ops/copy.js.map +1 -0
- package/dist/extra/ops/fai_drill.d.ts +51 -0
- package/dist/extra/ops/fai_drill.d.ts.map +1 -0
- package/dist/extra/ops/fai_drill.js +233 -0
- package/dist/extra/ops/fai_drill.js.map +1 -0
- package/dist/extra/ops/fai_extrude.d.ts +36 -0
- package/dist/extra/ops/fai_extrude.d.ts.map +1 -0
- package/dist/extra/ops/fai_extrude.js +84 -0
- package/dist/extra/ops/fai_extrude.js.map +1 -0
- package/dist/extra/ops/fai_split.d.ts +46 -0
- package/dist/extra/ops/fai_split.d.ts.map +1 -0
- package/dist/extra/ops/fai_split.js +235 -0
- package/dist/extra/ops/fai_split.js.map +1 -0
- package/dist/extra/ops/load.d.ts +49 -0
- package/dist/extra/ops/load.d.ts.map +1 -0
- package/dist/extra/ops/load.js +423 -0
- package/dist/extra/ops/load.js.map +1 -0
- package/dist/extra/ops/svg-extrude.d.ts +32 -0
- package/dist/extra/ops/svg-extrude.d.ts.map +1 -0
- package/dist/extra/ops/svg-extrude.js +74 -0
- package/dist/extra/ops/svg-extrude.js.map +1 -0
- package/dist/extra/ops/text.d.ts +34 -0
- package/dist/extra/ops/text.d.ts.map +1 -0
- package/dist/extra/ops/text.js +100 -0
- package/dist/extra/ops/text.js.map +1 -0
- package/dist/geometry2d/bridge/lift-on-plane.d.ts +8 -5
- package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
- package/dist/geometry2d/bridge/lift-on-plane.js +8 -5
- package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/lang/symbol-table.d.ts +3 -3
- package/dist/lang/symbol-table.generated.d.ts +10 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +10 -0
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/lang/symbol-table.js +3 -3
- package/dist/lang/symbol-table.js.map +1 -1
- package/dist/math3d/index.d.ts +1 -1
- package/dist/math3d/index.js +1 -1
- package/dist/math3d/index.js.map +1 -1
- package/dist/mesh/engrave.d.ts +2 -3
- package/dist/mesh/engrave.d.ts.map +1 -1
- package/dist/mesh/engrave.js +4 -11
- package/dist/mesh/engrave.js.map +1 -1
- package/dist/mesh/index.d.ts +0 -2
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +0 -2
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/primitives.d.ts +7 -5
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +16 -9
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/types.d.ts +4 -3
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/node-host/cli.d.ts +11 -4
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +53 -28
- package/dist/node-host/cli.js.map +1 -1
- package/dist/node-host/execute-script.d.ts.map +1 -1
- package/dist/node-host/execute-script.js +3 -4
- package/dist/node-host/execute-script.js.map +1 -1
- package/dist/node-host/lib-package-json.d.ts +36 -0
- package/dist/node-host/lib-package-json.d.ts.map +1 -0
- package/dist/node-host/lib-package-json.js +73 -0
- package/dist/node-host/lib-package-json.js.map +1 -0
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +41 -0
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts +1 -1
- package/dist/occt-kernel/occtKernel.js +1 -1
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/primitives/brep-primitives.d.ts.map +1 -1
- package/dist/primitives/brep-primitives.js +39 -12
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/runtime-state.d.ts +28 -1
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +14 -1
- package/dist/runtime-state.js.map +1 -1
- package/dist/sdk.d.ts +2 -2
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +11 -2
- package/dist/sdk.js.map +1 -1
- package/dist/sketch/bspline.d.ts +58 -0
- package/dist/sketch/bspline.d.ts.map +1 -0
- package/dist/sketch/bspline.js +104 -0
- package/dist/sketch/bspline.js.map +1 -0
- package/dist/sketch/canonical.d.ts +239 -0
- package/dist/sketch/canonical.d.ts.map +1 -0
- package/dist/sketch/canonical.js +17 -0
- package/dist/sketch/canonical.js.map +1 -0
- package/dist/sketch/contour.d.ts +43 -0
- package/dist/sketch/contour.d.ts.map +1 -0
- package/dist/sketch/contour.js +202 -0
- package/dist/sketch/contour.js.map +1 -0
- package/dist/sketch/dim-spec.d.ts +32 -0
- package/dist/sketch/dim-spec.d.ts.map +1 -0
- package/dist/sketch/dim-spec.js +112 -0
- package/dist/sketch/dim-spec.js.map +1 -0
- package/dist/sketch/faces.d.ts +45 -0
- package/dist/sketch/faces.d.ts.map +1 -0
- package/dist/sketch/faces.js +108 -0
- package/dist/sketch/faces.js.map +1 -0
- package/dist/sketch/fcstd-types.d.ts +194 -0
- package/dist/sketch/fcstd-types.d.ts.map +1 -0
- package/dist/sketch/fcstd-types.js +67 -0
- package/dist/sketch/fcstd-types.js.map +1 -0
- package/dist/sketch/index.d.ts +46 -0
- package/dist/sketch/index.d.ts.map +1 -0
- package/dist/sketch/index.js +39 -0
- package/dist/sketch/index.js.map +1 -0
- package/dist/sketch/node.d.ts +14 -0
- package/dist/sketch/node.d.ts.map +1 -0
- package/dist/sketch/node.js +43 -0
- package/dist/sketch/node.js.map +1 -0
- package/dist/sketch/op.d.ts +111 -0
- package/dist/sketch/op.d.ts.map +1 -0
- package/dist/sketch/op.js +185 -0
- package/dist/sketch/op.js.map +1 -0
- package/dist/sketch/planegcs-backend.d.ts +69 -0
- package/dist/sketch/planegcs-backend.d.ts.map +1 -0
- package/dist/sketch/planegcs-backend.js +812 -0
- package/dist/sketch/planegcs-backend.js.map +1 -0
- package/dist/sketch/project.d.ts +176 -0
- package/dist/sketch/project.d.ts.map +1 -0
- package/dist/sketch/project.js +656 -0
- package/dist/sketch/project.js.map +1 -0
- package/dist/sketch/shapes.d.ts +370 -0
- package/dist/sketch/shapes.d.ts.map +1 -0
- package/dist/sketch/shapes.js +959 -0
- package/dist/sketch/shapes.js.map +1 -0
- package/dist/sketch/solve.d.ts +21 -0
- package/dist/sketch/solve.d.ts.map +1 -0
- package/dist/sketch/solve.js +144 -0
- package/dist/sketch/solve.js.map +1 -0
- package/dist/sketch/solver-loader.d.ts +47 -0
- package/dist/sketch/solver-loader.d.ts.map +1 -0
- package/dist/sketch/solver-loader.js +77 -0
- package/dist/sketch/solver-loader.js.map +1 -0
- package/dist/sketch/solver.d.ts +63 -0
- package/dist/sketch/solver.d.ts.map +1 -0
- package/dist/sketch/solver.js +28 -0
- package/dist/sketch/solver.js.map +1 -0
- package/dist/sketch/verify.d.ts +53 -0
- package/dist/sketch/verify.d.ts.map +1 -0
- package/dist/sketch/verify.js +71 -0
- package/dist/sketch/verify.js.map +1 -0
- package/dist/topology/naming/geom-hint.d.ts +12 -0
- package/dist/topology/naming/geom-hint.d.ts.map +1 -1
- package/dist/topology/naming/geom-hint.js +1 -1
- package/dist/topology/naming/geom-hint.js.map +1 -1
- package/dist/topology/naming/lineage.d.ts +1 -0
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js +37 -1
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/topology/naming/resolve-face.d.ts +13 -2
- package/dist/topology/naming/resolve-face.d.ts.map +1 -1
- package/dist/topology/naming/resolve-face.js +18 -2
- package/dist/topology/naming/resolve-face.js.map +1 -1
- package/dist/weapp.d.ts +1 -1
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +1 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +43 -11
|
@@ -31,9 +31,11 @@ import { type PartName } from '../identity.js';
|
|
|
31
31
|
import type { ExecBackendChoice } from './exec-backend.js';
|
|
32
32
|
import { type OpDimMap } from '../lang/metadata-extractor.js';
|
|
33
33
|
import { type LibNamespace, type AssemblyKinematicsPose, type TessellationDensity } from '../runtime-state.js';
|
|
34
|
+
import { type LibDescription, type LibsUnderEngine } from './lib-decl.js';
|
|
34
35
|
export { computeContentKey } from './content-key.js';
|
|
35
36
|
export { stableFingerprint } from './content-key.js';
|
|
36
37
|
import { type CompoundShape } from '../shape.js';
|
|
38
|
+
import type { AssemblyDecl } from '../extra/ops/compound.js';
|
|
37
39
|
import type { PartNaming } from '../topology/naming/types.js';
|
|
38
40
|
import { type DeterminismPolicy } from '../lang/determinism-scanner.js';
|
|
39
41
|
/**
|
|
@@ -135,6 +137,16 @@ export interface ExecutionResult {
|
|
|
135
137
|
* key 为 compound 变量名(PartName),value 为成员变量名列表。
|
|
136
138
|
*/
|
|
137
139
|
compounds?: Map<PartName, PartName[]>;
|
|
140
|
+
/**
|
|
141
|
+
* F3(2026-10-15):`cad.assembly` 声明面 — 脚本里每个 assembly 语句的声明
|
|
142
|
+
* (name / memberNames / constraints / joints / solver + compound 引用)。
|
|
143
|
+
*
|
|
144
|
+
* 此前的缺口:约束/关节声明只存在 compound 的 behavior 槽,而 `getSlot` 未公开
|
|
145
|
+
* 导出 → 宿主持不到声明。本字段把声明面提到结果一级,宿主据此做**纯求解**
|
|
146
|
+
* (禁烘焙:不调 asm.solve()/do_assemble(),位姿只以 transform 数据在宿主侧
|
|
147
|
+
* 流动)。`group` 产物(无约束/关节)不进本字段;无 assembly 语句时为 undefined。
|
|
148
|
+
*/
|
|
149
|
+
assemblies?: AssemblyDecl[];
|
|
138
150
|
/** 被 touch 声明的原地修改 Shape 的持有变量名(装配变换后 collectResult 填充,去重) */
|
|
139
151
|
changed?: PartName[];
|
|
140
152
|
/**
|
|
@@ -317,12 +329,22 @@ export declare class CadRuntime {
|
|
|
317
329
|
private readonly determinismPolicy;
|
|
318
330
|
/** warn 档位下收集的确定性警告,合并进最终 ExecutionResult.infos。 */
|
|
319
331
|
private determinismWarnings;
|
|
332
|
+
/**
|
|
333
|
+
* Reserved binding names — only `'cad'`. Once the engine registers `cad`
|
|
334
|
+
* (inside `createRuntime`), any subsequent `registerLib('cad', ...)` from
|
|
335
|
+
* the host is rejected. The `_cadReserved` flag is set by `createRuntime`
|
|
336
|
+
* immediately after the internal registration so the guard can distinguish
|
|
337
|
+
* the engine's own first registration from a host's attempt to override.
|
|
338
|
+
*/
|
|
339
|
+
private static readonly RESERVED_BINDINGS;
|
|
320
340
|
/** 宿主注册库(含 cad:由根门面 createRuntime 包装注入;注入编译产物 fn 的第二参 ns) */
|
|
321
341
|
private readonly libs;
|
|
322
342
|
/** 库内容身份表 (binding → content hash),增量 key 用(B2,§7.3) */
|
|
323
343
|
private readonly libIds;
|
|
324
344
|
/** import specifier → binding 映射(registerLib 的 packageName 声明;check ①.5 校验 specifier) */
|
|
325
345
|
private readonly specifierToBinding;
|
|
346
|
+
/** 库级定位声明与来源(binding → { packageName, decl }),describeLib / libsUnder 读。 */
|
|
347
|
+
private readonly libDecls;
|
|
326
348
|
private readonly namespaces;
|
|
327
349
|
/** 默认命名空间绑定名(U10/R2):根门面经 registerLib(binding, ns, {default: true}) 显式声明;
|
|
328
350
|
* 缺省 'cad'(与 parser 缺省 defaultNs 一致)。namespace 字段缺省的语句归属该绑定。 */
|
|
@@ -358,15 +380,46 @@ export declare class CadRuntime {
|
|
|
358
380
|
* @param options - registration hints. `packageName` declares the npm package
|
|
359
381
|
* backing this binding so `check()` can validate script import specifiers
|
|
360
382
|
* against registered libraries (specifier mismatch = hard check error).
|
|
361
|
-
|
|
383
|
+
* `lib` / `peers` carry the library-level `faijs.lib` declaration (定位属性)
|
|
384
|
+
* and its `peerDependencies`; they are validated at assembly time
|
|
385
|
+
* (`assertLibDecl`) and feed `fn.engines ?? lib.platform` resolution.
|
|
386
|
+
* Engine constraints are resolved at admission, i.e. only on the lifted path,
|
|
387
|
+
* so two unhonourable shapes are rejected: (a) any declaration while admitted
|
|
388
|
+
* WITHOUT lifting, (b) a non-empty `lib.platform` when the library also
|
|
389
|
+
* exports a dual-op without its own `engines`.
|
|
362
390
|
*/
|
|
363
391
|
registerLib(binding: string, ns: LibNamespace, options?: {
|
|
364
392
|
default?: boolean;
|
|
365
393
|
autoLift?: boolean;
|
|
366
394
|
packageName?: string;
|
|
395
|
+
lib?: unknown;
|
|
396
|
+
peers?: Readonly<Record<string, string>>;
|
|
367
397
|
}): void;
|
|
368
398
|
/** The runtime's default namespace binding name (host-declared; 'cad' by default). */
|
|
369
399
|
get defaultNs(): string;
|
|
400
|
+
/**
|
|
401
|
+
* 库调用方查询面(2026-10-14 §3.3 第 3 项):回答「这个库需要什么内核」。
|
|
402
|
+
*
|
|
403
|
+
* 返回该库的库级定位(`role` / `conformsTo` / `platform`)+ 逐函数的**有效**引擎
|
|
404
|
+
* 与产物名。`engines` 是装配期已解析的值(`fn.engines ?? lib.platform ?? 中立`),
|
|
405
|
+
* 所以「未写 `fn.engines` 的函数回报继承来的库级平台」是自动成立的——同一份声明
|
|
406
|
+
* 只有一个视图,不存在两处各自维护。
|
|
407
|
+
*
|
|
408
|
+
* @param binding - the statement-level binding name used at registration.
|
|
409
|
+
* @returns the library description, or `undefined` when no such binding is registered.
|
|
410
|
+
*/
|
|
411
|
+
describeLib(binding: string): LibDescription | undefined;
|
|
412
|
+
/**
|
|
413
|
+
* 库调用方查询面(2026-10-14 §3.3 第 3 项):回答「给定引擎,这个库的哪些函数可以调用」。
|
|
414
|
+
*
|
|
415
|
+
* 判定与 `backend-dispatch.ts#decidePath` 的静态规则同源(中立 op = 全引擎可调;
|
|
416
|
+
* 声明了 `engines` 的 op 只在该集合内可调),因此拒绝项与实际执行前的拒绝**必然一致**。
|
|
417
|
+
* 只在确实被拒时给出 `reason`,可调项不带噪音字段。
|
|
418
|
+
*
|
|
419
|
+
* @param engineId - the BREP engine id to test against (e.g. `'occt'` / `'brepkit'`).
|
|
420
|
+
* @returns callable / statically-rejected split for the given engine.
|
|
421
|
+
*/
|
|
422
|
+
libsUnder(engineId: string): LibsUnderEngine;
|
|
370
423
|
/**
|
|
371
424
|
* P4/P6 (unit-system D8): 汇总已注册 op 的量纲声明(callee → { paramDims, retDim }),
|
|
372
425
|
* 供 extractMetadata 的 dimension pass 消费。键 = 脚本面 callee 名(含命名空间内成员名,
|
|
@@ -692,15 +745,16 @@ export declare class CadRuntime {
|
|
|
692
745
|
* default library.
|
|
693
746
|
*
|
|
694
747
|
* This is the single public `createRuntime` entry point. Hosts get "engine +
|
|
695
|
-
* standard library" in one call.
|
|
696
|
-
*
|
|
748
|
+
* standard library" in one call. The `cad` binding name is **reserved** —
|
|
749
|
+
* passing `libs.cad` throws (cad is engine-built-in and cannot be overridden).
|
|
750
|
+
* Hosts may still register third-party libraries under any other name.
|
|
697
751
|
*
|
|
698
752
|
* @param ports - the host-injected environment capabilities.
|
|
699
753
|
* @param mode - the execution mode (default 'auto').
|
|
700
|
-
* @param libs - the host-injected library namespaces.
|
|
701
|
-
* the built-in cad namespace is auto-registered as the default lib.
|
|
754
|
+
* @param libs - the host-injected library namespaces. Must NOT contain `cad`.
|
|
702
755
|
* @param options - optional runtime options (e.g. `execBackend`, `tessellation`).
|
|
703
756
|
* @returns a new CadRuntime with `cad` registered as the default namespace.
|
|
757
|
+
* @throws if `libs.cad` is present (cad is a reserved binding name).
|
|
704
758
|
*/
|
|
705
759
|
export declare function createRuntime(ports: HostPorts, mode?: ExecutionMode, libs?: Record<string, LibNamespace>, options?: CadRuntimeOptions): CadRuntime;
|
|
706
760
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAc,KAAK,QAAQ,EAAe,MAAM,aAAa,CAAA;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAIvD,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC5F,OAAO,EAEkB,KAAK,YAAY,EACxC,KAAK,sBAAsB,EACJ,KAAK,mBAAmB,EAChD,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* - group/assembly 重建
|
|
17
17
|
* - window.dispatchEvent / toast
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { getActiveBrepEngine, hasBrepEngine, getActiveBrepEngineId, getMeshSolidBackend } from '../brep/engine/registry.js';
|
|
20
20
|
import { ensureOcctDefaultEngine } from '../brep/engine/adapters/occt.js';
|
|
21
21
|
import { MeshSolidRegistry } from '../brep/mesh-solid.js';
|
|
22
22
|
import { ParseError } from '../lang/parse-error.js';
|
|
@@ -29,13 +29,14 @@ import { computeLiveShapes, lineConsumes, blockConsumes } from './live-shapes.js
|
|
|
29
29
|
import { extractMetadata } from '../lang/metadata-extractor.js';
|
|
30
30
|
import { configureBackends, CONTRACT_VERSION, assertContractVersion, configureTessellation, } from '../runtime-state.js';
|
|
31
31
|
import { admitCompatLib } from './admit-compat-lib.js';
|
|
32
|
+
import { assertLibDecl, } from './lib-decl.js';
|
|
32
33
|
import { hasDualOp, dualOpMetaOf } from '../define-op.js';
|
|
33
34
|
import { computeLibId } from './lib-id.js';
|
|
34
35
|
import { computeContentKey, stableFingerprint } from './content-key.js';
|
|
35
36
|
import { SCRIPT_UNIT_CONSTANTS } from '../units.js';
|
|
36
37
|
export { computeContentKey } from './content-key.js';
|
|
37
38
|
export { stableFingerprint } from './content-key.js';
|
|
38
|
-
import { isCompoundLike, getSlot, ensureSlot } from '../shape.js';
|
|
39
|
+
import { isCompoundLike, brepOf, getSlot, ensureSlot } from '../shape.js';
|
|
39
40
|
import { buildPartNaming } from '../topology/naming/build-naming.js';
|
|
40
41
|
import { faceRowToHint } from '../topology/naming/geom-hint.js';
|
|
41
42
|
import { HASH_UPPER_BOUND } from '../brep/face-evolution.js';
|
|
@@ -158,12 +159,28 @@ export class CadRuntime {
|
|
|
158
159
|
determinismPolicy;
|
|
159
160
|
/** warn 档位下收集的确定性警告,合并进最终 ExecutionResult.infos。 */
|
|
160
161
|
determinismWarnings = [];
|
|
162
|
+
/**
|
|
163
|
+
* Reserved binding names — only `'cad'`. Once the engine registers `cad`
|
|
164
|
+
* (inside `createRuntime`), any subsequent `registerLib('cad', ...)` from
|
|
165
|
+
* the host is rejected. The `_cadReserved` flag is set by `createRuntime`
|
|
166
|
+
* immediately after the internal registration so the guard can distinguish
|
|
167
|
+
* the engine's own first registration from a host's attempt to override.
|
|
168
|
+
*/
|
|
169
|
+
static RESERVED_BINDINGS = new Set(['cad']);
|
|
170
|
+
/**
|
|
171
|
+
* Reserved marker for the `cad` binding: set right after the engine's own
|
|
172
|
+
* registration so the guard can tell it apart from a host override attempt.
|
|
173
|
+
* @internal
|
|
174
|
+
*/
|
|
175
|
+
_cadReserved = false;
|
|
161
176
|
/** 宿主注册库(含 cad:由根门面 createRuntime 包装注入;注入编译产物 fn 的第二参 ns) */
|
|
162
177
|
libs;
|
|
163
178
|
/** 库内容身份表 (binding → content hash),增量 key 用(B2,§7.3) */
|
|
164
179
|
libIds = new Map();
|
|
165
180
|
/** import specifier → binding 映射(registerLib 的 packageName 声明;check ①.5 校验 specifier) */
|
|
166
181
|
specifierToBinding = new Map();
|
|
182
|
+
/** 库级定位声明与来源(binding → { packageName, decl }),describeLib / libsUnder 读。 */
|
|
183
|
+
libDecls = new Map();
|
|
167
184
|
namespaces;
|
|
168
185
|
/** 默认命名空间绑定名(U10/R2):根门面经 registerLib(binding, ns, {default: true}) 显式声明;
|
|
169
186
|
* 缺省 'cad'(与 parser 缺省 defaultNs 一致)。namespace 字段缺省的语句归属该绑定。 */
|
|
@@ -199,10 +216,37 @@ export class CadRuntime {
|
|
|
199
216
|
* @param options - registration hints. `packageName` declares the npm package
|
|
200
217
|
* backing this binding so `check()` can validate script import specifiers
|
|
201
218
|
* against registered libraries (specifier mismatch = hard check error).
|
|
202
|
-
|
|
219
|
+
* `lib` / `peers` carry the library-level `faijs.lib` declaration (定位属性)
|
|
220
|
+
* and its `peerDependencies`; they are validated at assembly time
|
|
221
|
+
* (`assertLibDecl`) and feed `fn.engines ?? lib.platform` resolution.
|
|
222
|
+
* Engine constraints are resolved at admission, i.e. only on the lifted path,
|
|
223
|
+
* so two unhonourable shapes are rejected: (a) any declaration while admitted
|
|
224
|
+
* WITHOUT lifting, (b) a non-empty `lib.platform` when the library also
|
|
225
|
+
* exports a dual-op without its own `engines`.
|
|
203
226
|
*/
|
|
204
227
|
registerLib(binding, ns, options) {
|
|
228
|
+
// Reserved binding guard (2026-10-13): `cad` is the only reserved name.
|
|
229
|
+
// The engine's own first registration (from `createRuntime`) sets the
|
|
230
|
+
// `_cadReserved` flag; any subsequent attempt to register or override
|
|
231
|
+
// `cad` from the host is rejected.
|
|
232
|
+
if (CadRuntime.RESERVED_BINDINGS.has(binding) && this._cadReserved) {
|
|
233
|
+
throw new Error(`E_CAD_RESERVED: "${binding}" is an engine-built-in reserved namespace. ` +
|
|
234
|
+
'Hosts cannot register or override it. Use a different binding name ' +
|
|
235
|
+
'for your custom library.');
|
|
236
|
+
}
|
|
205
237
|
assertContractVersion(ns);
|
|
238
|
+
// 库级定位声明:装配期校验(形态 / 引擎 id / 单向 peer 约束)后再解析函数级有效引擎。
|
|
239
|
+
//
|
|
240
|
+
// 来源两条:调用方显式传入(`lib` / `peers`),或按 `packageName` 走 loader 的既有
|
|
241
|
+
// 读盘通道(`libMetaFor`,与自动装载同源同一次读盘)。显式传入优先——那是宿主覆盖
|
|
242
|
+
// 声明的手段。少了这条回落,`registerLib(ns, { packageName })` 这条同样合法的装配
|
|
243
|
+
// 路径会静默丢掉库自身 `package.json` 里的定位声明,`describeLib` 于是对调用方撒谎
|
|
244
|
+
// ——「声明了却不生效」正是本批要消灭的那类 bug。
|
|
245
|
+
const pkgName = options?.packageName;
|
|
246
|
+
const fromLoader = options?.lib === undefined && pkgName !== undefined
|
|
247
|
+
? this.ports.libLoader?.libMetaFor?.(pkgName)
|
|
248
|
+
: undefined;
|
|
249
|
+
const decl = assertLibDecl(options?.lib ?? fromLoader?.lib, options?.peers ?? fromLoader?.peers, options?.packageName ?? binding);
|
|
206
250
|
// B4: admit bare (non-dual-op) library functions through compatOp when
|
|
207
251
|
// autoLift is true (or inferred true — the library has no dual-op).
|
|
208
252
|
// Hard ordering: assertLibConforms runs inside admitCompatLib BEFORE
|
|
@@ -213,10 +257,62 @@ export class CadRuntime {
|
|
|
213
257
|
// bare function is admitted with the default unmodeled provenance (see
|
|
214
258
|
// admit-compat-lib.ts).
|
|
215
259
|
const lift = options?.autoLift ?? !hasDualOp(ns);
|
|
260
|
+
// 引擎约束(库级 `faijs.lib.platform` 与函数级 `fn.engines`)只在**提升通路**上落地:
|
|
261
|
+
// admitCompatLib 包装裸函数并把解析后的有效引擎写进 op 元数据,分派侧只读元数据。
|
|
262
|
+
// 于是有两种「声明了却无法兑现」的形态,都在装配期当场拒绝——静默放行会让声明变成
|
|
263
|
+
// 空话,而这正是本批要消灭的那类 bug。
|
|
264
|
+
const nsEntries = Object.entries(ns);
|
|
265
|
+
/**
|
|
266
|
+
* **裸函数**上的 `fn.engines`(`typeof v === 'function'` 且不带 `DUAL_OP_META`)。
|
|
267
|
+
*
|
|
268
|
+
* dual-op 的引擎声明长在 op 自己的元数据里,由分派侧直接读——它**不经过**提升
|
|
269
|
+
* 通路,所以与本开关无关,不能算进下面的「死声明」判定。把两者混在一起会误拒
|
|
270
|
+
* 自带元数据的宿主命名空间:内置 `cad` 正是这种形态(46 个平台 op 各有
|
|
271
|
+
* `engines`,而它以 `autoLift=false` 注册)。
|
|
272
|
+
*/
|
|
273
|
+
const bareDeclared = nsEntries
|
|
274
|
+
.filter(([, v]) => {
|
|
275
|
+
if (typeof v !== 'function' || dualOpMetaOf(v) !== undefined)
|
|
276
|
+
return false;
|
|
277
|
+
const e = v.engines;
|
|
278
|
+
return e !== undefined && e.length > 0;
|
|
279
|
+
})
|
|
280
|
+
.map(([name]) => name);
|
|
281
|
+
const libPlatform = decl?.platform ?? [];
|
|
282
|
+
if (!lift) {
|
|
283
|
+
// 不提升 ⇒ 裸函数不是 op,没有元数据可挂 ⇒ 它的 `fn.engines` 与库级 `platform`
|
|
284
|
+
// 都是死声明(dual-op 不在此列,见上)。
|
|
285
|
+
if (libPlatform.length > 0 || bareDeclared.length > 0) {
|
|
286
|
+
const what = [
|
|
287
|
+
...(libPlatform.length > 0 ? [`faijs.lib.platform = [${libPlatform.join('/')}]`] : []),
|
|
288
|
+
...(bareDeclared.length > 0 ? [`fn.engines on ${bareDeclared.join(', ')}`] : []),
|
|
289
|
+
].join(' and ');
|
|
290
|
+
throw new Error(`[faijs] lib '${options?.packageName ?? binding}': ${what} declared, but the library is admitted ` +
|
|
291
|
+
'WITHOUT lifting (autoLift=false) — the effective engine set is resolved at admission, which only ' +
|
|
292
|
+
'exists on the lifted path. Register with autoLift: true (or declare faijs.autoLift: true), or drop ' +
|
|
293
|
+
'the engine declarations.');
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
else if (libPlatform.length > 0) {
|
|
297
|
+
// 提升通路只包装裸函数:dual-op 自带元数据、注入不进去,所以它们必须自己声明 engines。
|
|
298
|
+
const uncovered = nsEntries
|
|
299
|
+
.filter(([, v]) => {
|
|
300
|
+
const meta = dualOpMetaOf(v);
|
|
301
|
+
return meta !== undefined && meta.engines === undefined;
|
|
302
|
+
})
|
|
303
|
+
.map(([name]) => name);
|
|
304
|
+
if (uncovered.length > 0) {
|
|
305
|
+
throw new Error(`[faijs] lib '${options?.packageName ?? binding}': faijs.lib.platform = [${libPlatform.join('/')}] ` +
|
|
306
|
+
`cannot cover dual-op function(s) ${uncovered.join(', ')} — a library-level platform is injected ` +
|
|
307
|
+
'at admission, which only wraps bare functions; ops keep their own metadata. Declare `engines` ' +
|
|
308
|
+
'on those ops (or drop the library-level platform).');
|
|
309
|
+
}
|
|
310
|
+
}
|
|
216
311
|
const admitted = lift
|
|
217
|
-
? admitCompatLib(ns)
|
|
312
|
+
? admitCompatLib(ns, decl?.platform)
|
|
218
313
|
: ns;
|
|
219
314
|
this.libs[binding] = admitted;
|
|
315
|
+
this.libDecls.set(binding, { packageName: options?.packageName, decl });
|
|
220
316
|
this.libIds.set(binding, computeLibId(binding, ns));
|
|
221
317
|
if (options?.packageName) {
|
|
222
318
|
this.specifierToBinding.set(options.packageName, binding);
|
|
@@ -230,6 +326,74 @@ export class CadRuntime {
|
|
|
230
326
|
get defaultNs() {
|
|
231
327
|
return this.defaultNsName;
|
|
232
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* 库调用方查询面(2026-10-14 §3.3 第 3 项):回答「这个库需要什么内核」。
|
|
331
|
+
*
|
|
332
|
+
* 返回该库的库级定位(`role` / `conformsTo` / `platform`)+ 逐函数的**有效**引擎
|
|
333
|
+
* 与产物名。`engines` 是装配期已解析的值(`fn.engines ?? lib.platform ?? 中立`),
|
|
334
|
+
* 所以「未写 `fn.engines` 的函数回报继承来的库级平台」是自动成立的——同一份声明
|
|
335
|
+
* 只有一个视图,不存在两处各自维护。
|
|
336
|
+
*
|
|
337
|
+
* @param binding - the statement-level binding name used at registration.
|
|
338
|
+
* @returns the library description, or `undefined` when no such binding is registered.
|
|
339
|
+
*/
|
|
340
|
+
describeLib(binding) {
|
|
341
|
+
const ns = this.libs[binding];
|
|
342
|
+
if (!ns)
|
|
343
|
+
return undefined;
|
|
344
|
+
const meta = this.libDecls.get(binding);
|
|
345
|
+
const functions = [];
|
|
346
|
+
for (const [name, value] of Object.entries(ns)) {
|
|
347
|
+
if (typeof value !== 'function')
|
|
348
|
+
continue;
|
|
349
|
+
const opMeta = dualOpMetaOf(value);
|
|
350
|
+
functions.push({
|
|
351
|
+
name,
|
|
352
|
+
engines: opMeta?.engines,
|
|
353
|
+
outputs: opMeta?.outputs,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
return {
|
|
357
|
+
binding,
|
|
358
|
+
packageName: meta?.packageName,
|
|
359
|
+
role: meta?.decl?.role ?? 'library',
|
|
360
|
+
conformsTo: meta?.decl?.conformsTo,
|
|
361
|
+
platform: meta?.decl?.platform ?? [],
|
|
362
|
+
functions,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* 库调用方查询面(2026-10-14 §3.3 第 3 项):回答「给定引擎,这个库的哪些函数可以调用」。
|
|
367
|
+
*
|
|
368
|
+
* 判定与 `backend-dispatch.ts#decidePath` 的静态规则同源(中立 op = 全引擎可调;
|
|
369
|
+
* 声明了 `engines` 的 op 只在该集合内可调),因此拒绝项与实际执行前的拒绝**必然一致**。
|
|
370
|
+
* 只在确实被拒时给出 `reason`,可调项不带噪音字段。
|
|
371
|
+
*
|
|
372
|
+
* @param engineId - the BREP engine id to test against (e.g. `'occt'` / `'brepkit'`).
|
|
373
|
+
* @returns callable / statically-rejected split for the given engine.
|
|
374
|
+
*/
|
|
375
|
+
libsUnder(engineId) {
|
|
376
|
+
const callable = [];
|
|
377
|
+
const rejected = [];
|
|
378
|
+
for (const [binding, ns] of Object.entries(this.libs)) {
|
|
379
|
+
for (const [name, value] of Object.entries(ns ?? {})) {
|
|
380
|
+
if (typeof value !== 'function')
|
|
381
|
+
continue;
|
|
382
|
+
const engines = dualOpMetaOf(value)?.engines;
|
|
383
|
+
if (engines === undefined || engines.length === 0 || engines.includes(engineId)) {
|
|
384
|
+
callable.push({ binding, name });
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
rejected.push({
|
|
388
|
+
binding,
|
|
389
|
+
name,
|
|
390
|
+
reason: `requires engine ${engines.join('/')} (requested=${engineId})`,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return { engineId, callable, rejected };
|
|
396
|
+
}
|
|
233
397
|
/**
|
|
234
398
|
* P4/P6 (unit-system D8): 汇总已注册 op 的量纲声明(callee → { paramDims, retDim }),
|
|
235
399
|
* 供 extractMetadata 的 dimension pass 消费。键 = 脚本面 callee 名(含命名空间内成员名,
|
|
@@ -364,7 +528,7 @@ export class CadRuntime {
|
|
|
364
528
|
}
|
|
365
529
|
const engine = this.mode === 'mesh' || !hasBrepEngine()
|
|
366
530
|
? null
|
|
367
|
-
: await
|
|
531
|
+
: await getActiveBrepEngine();
|
|
368
532
|
const kernel = engine?.primitives ?? null;
|
|
369
533
|
this.kernel = kernel;
|
|
370
534
|
this.brepChain = {
|
|
@@ -719,6 +883,8 @@ export class CadRuntime {
|
|
|
719
883
|
const outputs = new Map();
|
|
720
884
|
const shapeVarNames = new Set();
|
|
721
885
|
const compounds = new Map();
|
|
886
|
+
// F3:cad.assembly 声明面(behavior.kind === 'assembly' 的 compound)
|
|
887
|
+
const assemblies = [];
|
|
722
888
|
for (const name of de.listCtxKeys()) {
|
|
723
889
|
const v = de.getCtxVar(name);
|
|
724
890
|
if (!isShapeLike(v) && !isCompoundLike(v))
|
|
@@ -728,6 +894,17 @@ export class CadRuntime {
|
|
|
728
894
|
if (isCompoundLike(v)) {
|
|
729
895
|
const behavior = getSlot(v)?.behavior;
|
|
730
896
|
compounds.set(asPartName(name), (behavior?.memberNames ?? []).map(asPartName));
|
|
897
|
+
// F3:只收 assembly 声明(group 无约束/关节,进声明面会让消费方对空约束集求解)
|
|
898
|
+
if (behavior?.kind === 'assembly') {
|
|
899
|
+
assemblies.push({
|
|
900
|
+
...(behavior.name !== undefined ? { name: behavior.name } : {}),
|
|
901
|
+
memberNames: behavior.memberNames,
|
|
902
|
+
constraints: behavior.constraints,
|
|
903
|
+
joints: behavior.joints ?? [],
|
|
904
|
+
...(behavior.solver !== undefined ? { solver: behavior.solver } : {}),
|
|
905
|
+
compound: v,
|
|
906
|
+
});
|
|
907
|
+
}
|
|
731
908
|
}
|
|
732
909
|
}
|
|
733
910
|
// statementCache 同步(E8 getCachedOutput):direct 无语句 key——用行级身份键填
|
|
@@ -812,8 +989,21 @@ export class CadRuntime {
|
|
|
812
989
|
return;
|
|
813
990
|
}
|
|
814
991
|
const rt = this.buildBrepTopology(partName);
|
|
815
|
-
if (rt)
|
|
816
|
-
|
|
992
|
+
if (rt) {
|
|
993
|
+
const data = runtimeToData(rt);
|
|
994
|
+
topology.set(partName, { partName, source: 'brep', data });
|
|
995
|
+
// §3.6 行 hint 快照:与 `setTopology` 同构,但从「宿主调才写」改为
|
|
996
|
+
// 「执行时自写」。原因:BREP 路径宿主不一定调 setTopology(实测
|
|
997
|
+
// weapp worker / animation 都不调),槽里 faceHints 就是空的 → 解析侧
|
|
998
|
+
// (buildShapeResolutionContext 的 BREP 分支)只能拿 kernel 现场,而
|
|
999
|
+
// brepkit 的 uvBounds 对平面返回 ±1e6 哨兵、surfaceCenterOfMass 退化
|
|
1000
|
+
// 成参数原点求值 → 非居中模型上 center 全错 → 兜底打分全拒 →
|
|
1001
|
+
// `topo ref (face) not found in the current shape`。
|
|
1002
|
+
// 行数据与 handle 同一次 execute 产出,同帧不陈旧。
|
|
1003
|
+
if (v && typeof v === 'object') {
|
|
1004
|
+
ensureSlot(v).faceHints = (data.faces ?? []).map((f) => faceRowToHint(f));
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
817
1007
|
};
|
|
818
1008
|
if (topoMode === 'brep') {
|
|
819
1009
|
for (const name of shapeVarNames) {
|
|
@@ -849,6 +1039,7 @@ export class CadRuntime {
|
|
|
849
1039
|
topology: topology.size > 0 ? topology : undefined,
|
|
850
1040
|
naming: naming.size > 0 ? naming : undefined,
|
|
851
1041
|
compounds: compounds.size > 0 ? compounds : undefined,
|
|
1042
|
+
assemblies: assemblies.length > 0 ? assemblies : undefined,
|
|
852
1043
|
kinematics: de.kinematicsSnapshot.size > 0 ? de.kinematicsSnapshot : undefined,
|
|
853
1044
|
detectedUnits: de.detectedUnitsSnapshot.size > 0 ? de.detectedUnitsSnapshot : undefined,
|
|
854
1045
|
multiPartCounts: de.multiPartCountSnapshot.size > 0 ? de.multiPartCountSnapshot : undefined,
|
|
@@ -959,7 +1150,8 @@ export class CadRuntime {
|
|
|
959
1150
|
* import 表(UiMetadata.imports)驱动的自动装载。
|
|
960
1151
|
*/
|
|
961
1152
|
async autoLoadLibsFromImports(imports) {
|
|
962
|
-
|
|
1153
|
+
const loader = this.ports.libLoader;
|
|
1154
|
+
if (!loader)
|
|
963
1155
|
return undefined;
|
|
964
1156
|
for (const imp of imports) {
|
|
965
1157
|
if (imp.kind !== 'namespace')
|
|
@@ -974,7 +1166,7 @@ export class CadRuntime {
|
|
|
974
1166
|
continue; // 已注册(宿主注入或此前自动装载)→ 不覆盖
|
|
975
1167
|
let ns;
|
|
976
1168
|
try {
|
|
977
|
-
ns = await
|
|
1169
|
+
ns = await loader.loadLib(imp.packageName ?? imp.specifier ?? '');
|
|
978
1170
|
}
|
|
979
1171
|
catch (err) {
|
|
980
1172
|
return {
|
|
@@ -990,9 +1182,16 @@ export class CadRuntime {
|
|
|
990
1182
|
};
|
|
991
1183
|
}
|
|
992
1184
|
const resolved = imp.packageName ?? imp.specifier ?? '';
|
|
1185
|
+
// 库级定位声明(§3.3 第 1 项):来源是库自身 package.json 的 `faijs.lib` +
|
|
1186
|
+
// `peerDependencies`,与下面逐函数的实现事实是**两个不同维度**(`autoLiftFor`
|
|
1187
|
+
// 与 `libMetaFor` 同源同一次读盘)。此处只搬运原始值,校验与解析在
|
|
1188
|
+
// registerLib → assertLibDecl / admitCompatLib 里做,装配期一次完成。
|
|
1189
|
+
const libMeta = loader.libMetaFor?.(resolved);
|
|
993
1190
|
this.registerLib(imp.localName, ns, {
|
|
994
|
-
autoLift:
|
|
1191
|
+
autoLift: loader.options?.autoLiftFor?.(resolved) ?? loader.options?.autoLift ?? !hasDualOp(ns),
|
|
995
1192
|
packageName: imp.packageName,
|
|
1193
|
+
lib: libMeta?.lib,
|
|
1194
|
+
peers: libMeta?.peers,
|
|
996
1195
|
});
|
|
997
1196
|
}
|
|
998
1197
|
return undefined;
|
|
@@ -1015,6 +1214,27 @@ export class CadRuntime {
|
|
|
1015
1214
|
if (solid !== undefined && this.kernel) {
|
|
1016
1215
|
ordinalToHash = Array.from(this.kernel.subShapeHashes(solid, 'face', HASH_UPPER_BOUND));
|
|
1017
1216
|
}
|
|
1217
|
+
else if (this.kernel) {
|
|
1218
|
+
// compound 终端(多零件 load / 装配):无单一 solidCache 键——按 children
|
|
1219
|
+
// 声明序逐成员 subShapeHashes 拼接(与 buildCompoundTopologyRuntime 的合并
|
|
1220
|
+
// 面序同源:buildAssemblySelectorManifest 按 parts 数组序拼 face 行,序号
|
|
1221
|
+
// 对齐合并拓扑的 ordinal)。任一成员无 BREP solid → 放弃(保持 undefined,
|
|
1222
|
+
// 面/边行 role 显式 null,不伪造)。
|
|
1223
|
+
const v = this.directExecutor.getCtxVar(partName);
|
|
1224
|
+
if (isCompoundLike(v)) {
|
|
1225
|
+
const merged = [];
|
|
1226
|
+
for (const child of v.children ?? []) {
|
|
1227
|
+
const cs = brepOf(child);
|
|
1228
|
+
if (cs === undefined) {
|
|
1229
|
+
merged.length = 0;
|
|
1230
|
+
break;
|
|
1231
|
+
}
|
|
1232
|
+
merged.push(...Array.from(this.kernel.subShapeHashes(cs, 'face', HASH_UPPER_BOUND)));
|
|
1233
|
+
}
|
|
1234
|
+
if (merged.length > 0)
|
|
1235
|
+
ordinalToHash = merged;
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1018
1238
|
return {
|
|
1019
1239
|
source: 'brep',
|
|
1020
1240
|
partName,
|
|
@@ -1513,24 +1733,31 @@ import { createApiNamespace } from '../api/api-namespace.js';
|
|
|
1513
1733
|
* default library.
|
|
1514
1734
|
*
|
|
1515
1735
|
* This is the single public `createRuntime` entry point. Hosts get "engine +
|
|
1516
|
-
* standard library" in one call.
|
|
1517
|
-
*
|
|
1736
|
+
* standard library" in one call. The `cad` binding name is **reserved** —
|
|
1737
|
+
* passing `libs.cad` throws (cad is engine-built-in and cannot be overridden).
|
|
1738
|
+
* Hosts may still register third-party libraries under any other name.
|
|
1518
1739
|
*
|
|
1519
1740
|
* @param ports - the host-injected environment capabilities.
|
|
1520
1741
|
* @param mode - the execution mode (default 'auto').
|
|
1521
|
-
* @param libs - the host-injected library namespaces.
|
|
1522
|
-
* the built-in cad namespace is auto-registered as the default lib.
|
|
1742
|
+
* @param libs - the host-injected library namespaces. Must NOT contain `cad`.
|
|
1523
1743
|
* @param options - optional runtime options (e.g. `execBackend`, `tessellation`).
|
|
1524
1744
|
* @returns a new CadRuntime with `cad` registered as the default namespace.
|
|
1745
|
+
* @throws if `libs.cad` is present (cad is a reserved binding name).
|
|
1525
1746
|
*/
|
|
1526
1747
|
export function createRuntime(ports, mode, libs, options) {
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
packageName: '@faicad/faijs',
|
|
1532
|
-
});
|
|
1748
|
+
if (libs && 'cad' in libs) {
|
|
1749
|
+
throw new Error('E_CAD_RESERVED: "cad" is an engine-built-in reserved namespace. ' +
|
|
1750
|
+
'Hosts cannot override or replace it. Use a different name for your ' +
|
|
1751
|
+
'custom library, or omit libs.cad to use the built-in cad namespace.');
|
|
1533
1752
|
}
|
|
1753
|
+
const rt = new CadRuntime(ports, mode, libs, options);
|
|
1754
|
+
rt.registerLib('cad', createApiNamespace(), {
|
|
1755
|
+
default: true,
|
|
1756
|
+
packageName: '@faicad/faijs',
|
|
1757
|
+
});
|
|
1758
|
+
// Mark `cad` as reserved — any subsequent `registerLib('cad', ...)` from the
|
|
1759
|
+
// host will be rejected by the guard at the top of registerLib.
|
|
1760
|
+
rt._cadReserved = true;
|
|
1534
1761
|
return rt;
|
|
1535
1762
|
}
|
|
1536
1763
|
/**
|
|
@@ -1548,6 +1775,11 @@ export function createRuntime(ports, mode, libs, options) {
|
|
|
1548
1775
|
* @returns a new CadRuntime without cad registered.
|
|
1549
1776
|
*/
|
|
1550
1777
|
export function createBareRuntime(ports, mode, libs, options) {
|
|
1778
|
+
if (libs && 'cad' in libs) {
|
|
1779
|
+
throw new Error('E_CAD_RESERVED: "cad" is an engine-built-in reserved namespace. ' +
|
|
1780
|
+
'Hosts cannot register or override it. Use a different name for your ' +
|
|
1781
|
+
'custom library, or use createRuntime() to get the built-in cad namespace.');
|
|
1782
|
+
}
|
|
1551
1783
|
return new CadRuntime(ports, mode, libs, options);
|
|
1552
1784
|
}
|
|
1553
1785
|
//# sourceMappingURL=runtime.js.map
|