@hatiolab/figure-model 0.1.92 → 0.1.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -12
- package/README.md +25 -25
- package/dist/{v3-asset-types.d.ts → asset-types.d.ts} +67 -67
- package/dist/asset-types.d.ts.map +1 -0
- package/dist/asset-types.js +2 -0
- package/dist/asset-types.js.map +1 -0
- package/dist/asset.d.ts +8 -0
- package/dist/asset.d.ts.map +1 -0
- package/dist/{v3-asset.js → asset.js} +23 -23
- package/dist/asset.js.map +1 -0
- package/dist/{v3-authoring-actions.d.ts → authoring-actions.d.ts} +66 -66
- package/dist/authoring-actions.d.ts.map +1 -0
- package/dist/{v3-authoring-actions.js → authoring-actions.js} +77 -77
- package/dist/authoring-actions.js.map +1 -0
- package/dist/{v3-authoring-session.d.ts → authoring-session.d.ts} +21 -21
- package/dist/authoring-session.d.ts.map +1 -0
- package/dist/{v3-authoring-session.js → authoring-session.js} +4 -4
- package/dist/authoring-session.js.map +1 -0
- package/dist/capabilities.d.ts +3 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/{v3-capabilities.js → capabilities.js} +8 -8
- package/dist/capabilities.js.map +1 -0
- package/dist/contract.d.ts +7 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +12 -0
- package/dist/contract.js.map +1 -0
- package/dist/{v3-cost.d.ts → cost.d.ts} +5 -5
- package/dist/cost.d.ts.map +1 -0
- package/dist/{v3-cost.js → cost.js} +11 -11
- package/dist/cost.js.map +1 -0
- package/dist/{v3-create.d.ts → create.d.ts} +8 -8
- package/dist/{v3-create.d.ts.map → create.d.ts.map} +1 -1
- package/dist/{v3-create.js → create.js} +26 -26
- package/dist/create.js.map +1 -0
- package/dist/document.d.ts +5 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +31 -0
- package/dist/document.js.map +1 -0
- package/dist/{v3-driver.d.ts → driver.d.ts} +10 -10
- package/dist/driver.d.ts.map +1 -0
- package/dist/{v3-driver.js → driver.js} +10 -10
- package/dist/driver.js.map +1 -0
- package/dist/{v3-editor-workspace.d.ts → editor-workspace.d.ts} +73 -73
- package/dist/editor-workspace.d.ts.map +1 -0
- package/dist/{v3-editor-workspace.js → editor-workspace.js} +29 -29
- package/dist/editor-workspace.js.map +1 -0
- package/dist/{v3-examples.d.ts → examples.d.ts} +5 -5
- package/dist/examples.d.ts.map +1 -0
- package/dist/{v3-examples.js → examples.js} +11 -11
- package/dist/examples.js.map +1 -0
- package/dist/{v3-follow.d.ts → follow.d.ts} +5 -5
- package/dist/follow.d.ts.map +1 -0
- package/dist/{v3-follow.js → follow.js} +2 -2
- package/dist/follow.js.map +1 -0
- package/dist/{v3-gate.d.ts → gate.d.ts} +28 -28
- package/dist/gate.d.ts.map +1 -0
- package/dist/{v3-gate.js → gate.js} +42 -42
- package/dist/gate.js.map +1 -0
- package/dist/{v3-graph-types.d.ts → graph-types.d.ts} +33 -33
- package/dist/graph-types.d.ts.map +1 -0
- package/dist/graph-types.js +2 -0
- package/dist/graph-types.js.map +1 -0
- package/dist/{v3-graph.d.ts → graph.d.ts} +14 -14
- package/dist/graph.d.ts.map +1 -0
- package/dist/{v3-graph.js → graph.js} +16 -16
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +33 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -33
- package/dist/index.js.map +1 -1
- package/dist/{v3-instance-size.d.ts → instance-size.d.ts} +14 -14
- package/dist/instance-size.d.ts.map +1 -0
- package/dist/{v3-instance-size.js → instance-size.js} +13 -13
- package/dist/instance-size.js.map +1 -0
- package/dist/json.d.ts +12 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/{v3-json.js → json.js} +13 -13
- package/dist/json.js.map +1 -0
- package/dist/kernel-version.d.ts +8 -0
- package/dist/kernel-version.d.ts.map +1 -0
- package/dist/{v3-kernel-version.js → kernel-version.js} +4 -4
- package/dist/kernel-version.js.map +1 -0
- package/dist/{v3-part-edit.d.ts → part-edit.d.ts} +10 -10
- package/dist/part-edit.d.ts.map +1 -0
- package/dist/{v3-part-edit.js → part-edit.js} +65 -65
- package/dist/part-edit.js.map +1 -0
- package/dist/proposal.d.ts +42 -0
- package/dist/proposal.d.ts.map +1 -0
- package/dist/{v3-proposal.js → proposal.js} +21 -21
- package/dist/proposal.js.map +1 -0
- package/dist/{v3-public-inputs.d.ts → public-inputs.d.ts} +4 -4
- package/dist/public-inputs.d.ts.map +1 -0
- package/dist/{v3-public-inputs.js → public-inputs.js} +3 -3
- package/dist/public-inputs.js.map +1 -0
- package/dist/recipe-build.d.ts +27 -0
- package/dist/recipe-build.d.ts.map +1 -0
- package/dist/{v3-recipe-build.js → recipe-build.js} +9 -9
- package/dist/recipe-build.js.map +1 -0
- package/dist/recipe-from-parts.d.ts +8 -0
- package/dist/recipe-from-parts.d.ts.map +1 -0
- package/dist/{v3-recipe-from-parts.js → recipe-from-parts.js} +9 -9
- package/dist/recipe-from-parts.js.map +1 -0
- package/dist/{v3-recipe.d.ts → recipe.d.ts} +25 -25
- package/dist/recipe.d.ts.map +1 -0
- package/dist/{v3-recipe.js → recipe.js} +30 -30
- package/dist/recipe.js.map +1 -0
- package/dist/release-contract.d.ts +19 -0
- package/dist/release-contract.d.ts.map +1 -0
- package/dist/{v3-release-contract.js → release-contract.js} +5 -5
- package/dist/release-contract.js.map +1 -0
- package/dist/{v3-render-batches.d.ts → render-batches.d.ts} +8 -8
- package/dist/render-batches.d.ts.map +1 -0
- package/dist/{v3-render-batches.js → render-batches.js} +4 -4
- package/dist/render-batches.js.map +1 -0
- package/dist/{v3-score.d.ts → score.d.ts} +19 -19
- package/dist/score.d.ts.map +1 -0
- package/dist/{v3-score.js → score.js} +32 -32
- package/dist/score.js.map +1 -0
- package/dist/{v3-shape-sampling.d.ts → shape-sampling.d.ts} +4 -4
- package/dist/shape-sampling.d.ts.map +1 -0
- package/dist/{v3-shape-sampling.js → shape-sampling.js} +3 -3
- package/dist/shape-sampling.js.map +1 -0
- package/dist/{v3-surface.d.ts → surface.d.ts} +5 -5
- package/dist/surface.d.ts.map +1 -0
- package/dist/{v3-surface.js → surface.js} +7 -7
- package/dist/surface.js.map +1 -0
- package/dist/{v3-words.d.ts → words.d.ts} +3 -3
- package/dist/words.d.ts.map +1 -0
- package/dist/{v3-words.js → words.js} +3 -3
- package/dist/words.js.map +1 -0
- package/docs/{assembly-constraints-v3.md → assembly-constraints.md} +1 -1
- package/docs/{v3-asset-persistence.md → asset-persistence.md} +8 -8
- package/docs/{v3-authoring-transactions.md → authoring-transactions.md} +2 -2
- package/docs/{v3-capability-bindings.md → capability-bindings.md} +8 -8
- package/docs/{v3-common-kernel-experiment.md → common-kernel-experiment.md} +4 -4
- package/docs/{v3-core-semantics.md → core-semantics.md} +5 -5
- package/docs/{v3-cutover.md → cutover.md} +4 -4
- package/docs/{v3-design.md → design.md} +11 -11
- package/docs/{v3-document-contract.md → document-contract.md} +9 -9
- package/docs/{v3-dryroom-profile-validation.md → dryroom-profile-validation.md} +4 -4
- package/docs/{v3-editor-integration.md → editor-integration.md} +6 -6
- package/docs/{v3-full-conveyor-validation.md → full-conveyor-validation.md} +4 -4
- package/docs/{v3-full-dryroom-validation.md → full-dryroom-validation.md} +4 -4
- package/docs/{v3-full-forklift-validation.md → full-forklift-validation.md} +5 -5
- package/docs/{v3-full-robot-validation.md → full-robot-validation.md} +4 -4
- package/docs/{v3-layout-system.md → layout-system.md} +4 -4
- package/docs/{v3-legacy-risk-audit-2026-09-23.md → legacy-risk-audit-2026-09-23.md} +5 -5
- package/docs/{v3-minimal-model.md → minimal-model.md} +6 -6
- package/docs/{v3-motion-contract.md → motion-contract.md} +3 -3
- package/docs/{v3-openusd-review.md → openusd-review.md} +8 -8
- package/docs/{v3-operator-contracts.md → operator-contracts.md} +6 -6
- package/docs/{v3-payload-collision-validation.md → payload-collision-validation.md} +4 -4
- package/docs/{v3-payload-contact-validation.md → payload-contact-validation.md} +5 -5
- package/docs/prototypes/README.md +10 -10
- package/docs/prototypes/{v3-asset-samples.mjs → asset-samples.mjs} +6 -6
- package/docs/prototypes/{v3-asset-store.mjs → asset-store.mjs} +3 -3
- package/docs/prototypes/{v3-asset-store.test.mjs → asset-store.test.mjs} +6 -6
- package/docs/prototypes/asset.mjs +1 -0
- package/docs/prototypes/{v3-asset.schema.json → asset.schema.json} +2 -2
- package/docs/prototypes/{v3-asset.test.mjs → asset.test.mjs} +10 -10
- package/docs/prototypes/authoring-session.mjs +1 -0
- package/docs/prototypes/{v3-authoring-session.test.mjs → authoring-session.test.mjs} +6 -6
- package/docs/prototypes/capability-plan.mjs +1 -0
- package/docs/prototypes/{v3-capability-plan.test.mjs → capability-plan.test.mjs} +5 -5
- package/docs/prototypes/{v3-capability-samples.mjs → capability-samples.mjs} +2 -2
- package/docs/prototypes/document.mjs +2 -0
- package/docs/prototypes/{v3-document.schema.json → document.schema.json} +1 -1
- package/docs/prototypes/{v3-document.test.mjs → document.test.mjs} +7 -7
- package/docs/prototypes/{v3-dryroom-mesh.mjs → dryroom-mesh.mjs} +1 -1
- package/docs/prototypes/{v3-dryroom-mesh.test.mjs → dryroom-mesh.test.mjs} +1 -1
- package/docs/prototypes/{v3-editor-browser.mjs → editor-browser.mjs} +13 -13
- package/docs/prototypes/editor-workspace.mjs +1 -0
- package/docs/prototypes/{v3-editor-workspace.test.mjs → editor-workspace.test.mjs} +3 -3
- package/docs/prototypes/{v3-feature-pattern.test.mjs → feature-pattern.test.mjs} +1 -1
- package/docs/prototypes/{v3-full-conveyor.mjs → full-conveyor.mjs} +2 -2
- package/docs/prototypes/{v3-full-conveyor.test.mjs → full-conveyor.test.mjs} +3 -3
- package/docs/prototypes/{v3-full-dryroom.mjs → full-dryroom.mjs} +2 -2
- package/docs/prototypes/{v3-full-dryroom.test.mjs → full-dryroom.test.mjs} +3 -3
- package/docs/prototypes/{v3-full-forklift.mjs → full-forklift.mjs} +2 -2
- package/docs/prototypes/{v3-full-forklift.test.mjs → full-forklift.test.mjs} +3 -3
- package/docs/prototypes/{v3-full-robot.mjs → full-robot.mjs} +2 -2
- package/docs/prototypes/{v3-full-robot.test.mjs → full-robot.test.mjs} +4 -4
- package/docs/prototypes/{v3-kernel.test.mjs → kernel.test.mjs} +1 -1
- package/docs/prototypes/{v3-layout.test.mjs → layout.test.mjs} +1 -1
- package/docs/prototypes/{v3-more-samples.test.mjs → more-samples.test.mjs} +2 -2
- package/docs/prototypes/{v3-payload-collision.mjs → payload-collision.mjs} +2 -2
- package/docs/prototypes/{v3-payload-collision.test.mjs → payload-collision.test.mjs} +3 -3
- package/docs/prototypes/{v3-payload-fit.mjs → payload-fit.mjs} +2 -2
- package/docs/prototypes/{v3-payload-fit.test.mjs → payload-fit.test.mjs} +4 -4
- package/docs/prototypes/render-full-dryroom.mjs +12 -12
- package/docs/prototypes/{v3-repeated-binding.mjs → repeated-binding.mjs} +1 -1
- package/docs/prototypes/{v3-repeated-binding.test.mjs → repeated-binding.test.mjs} +6 -6
- package/docs/prototypes/{v3-runtime-browser.mjs → runtime-browser.mjs} +26 -26
- package/docs/prototypes/{v3-samples.test.mjs → samples.test.mjs} +1 -1
- package/docs/prototypes/{v3-spatial-plan.test.mjs → spatial-plan.test.mjs} +1 -1
- package/docs/prototypes/typed-plan.mjs +3 -0
- package/docs/prototypes/{v3-typed-plan.test.mjs → typed-plan.test.mjs} +1 -1
- package/docs/prototypes/{v3-typed-repeat.test.mjs → typed-repeat.test.mjs} +2 -2
- package/docs/{v3-repeated-binding-validation.md → repeated-binding-validation.md} +4 -4
- package/docs/{v3-research-review.md → research-review.md} +2 -2
- package/docs/{v3-review-2026-09-22.md → review-2026-09-22.md} +10 -10
- package/docs/{v3-runtime-extraction.md → runtime-extraction.md} +16 -16
- package/docs/{v3-sample-validation-expanded.md → sample-validation-expanded.md} +5 -5
- package/docs/{v3-sample-validation.md → sample-validation.md} +3 -3
- package/docs/{v3-shape-dimension-contract.md → shape-dimension-contract.md} +12 -12
- package/docs/{v3-shapeassembly-reproduction.md → shapeassembly-reproduction.md} +4 -4
- package/docs/{v3-spatial-contracts.md → spatial-contracts.md} +5 -5
- package/docs/status.md +12 -0
- package/docs/{v3-storage-integration.md → storage-integration.md} +5 -5
- package/docs/{v3-typed-repeat-contracts.md → typed-repeat-contracts.md} +3 -3
- package/package.json +3 -3
- package/dist/v3-asset-types.d.ts.map +0 -1
- package/dist/v3-asset-types.js +0 -2
- package/dist/v3-asset-types.js.map +0 -1
- package/dist/v3-asset.d.ts +0 -8
- package/dist/v3-asset.d.ts.map +0 -1
- package/dist/v3-asset.js.map +0 -1
- package/dist/v3-authoring-actions.d.ts.map +0 -1
- package/dist/v3-authoring-actions.js.map +0 -1
- package/dist/v3-authoring-session.d.ts.map +0 -1
- package/dist/v3-authoring-session.js.map +0 -1
- package/dist/v3-capabilities.d.ts +0 -3
- package/dist/v3-capabilities.d.ts.map +0 -1
- package/dist/v3-capabilities.js.map +0 -1
- package/dist/v3-contract.d.ts +0 -7
- package/dist/v3-contract.d.ts.map +0 -1
- package/dist/v3-contract.js +0 -12
- package/dist/v3-contract.js.map +0 -1
- package/dist/v3-cost.d.ts.map +0 -1
- package/dist/v3-cost.js.map +0 -1
- package/dist/v3-create.js.map +0 -1
- package/dist/v3-document.d.ts +0 -5
- package/dist/v3-document.d.ts.map +0 -1
- package/dist/v3-document.js +0 -31
- package/dist/v3-document.js.map +0 -1
- package/dist/v3-driver.d.ts.map +0 -1
- package/dist/v3-driver.js.map +0 -1
- package/dist/v3-editor-workspace.d.ts.map +0 -1
- package/dist/v3-editor-workspace.js.map +0 -1
- package/dist/v3-examples.d.ts.map +0 -1
- package/dist/v3-examples.js.map +0 -1
- package/dist/v3-follow.d.ts.map +0 -1
- package/dist/v3-follow.js.map +0 -1
- package/dist/v3-gate.d.ts.map +0 -1
- package/dist/v3-gate.js.map +0 -1
- package/dist/v3-graph-types.d.ts.map +0 -1
- package/dist/v3-graph-types.js +0 -2
- package/dist/v3-graph-types.js.map +0 -1
- package/dist/v3-graph.d.ts.map +0 -1
- package/dist/v3-graph.js.map +0 -1
- package/dist/v3-instance-size.d.ts.map +0 -1
- package/dist/v3-instance-size.js.map +0 -1
- package/dist/v3-json.d.ts +0 -12
- package/dist/v3-json.d.ts.map +0 -1
- package/dist/v3-json.js.map +0 -1
- package/dist/v3-kernel-version.d.ts +0 -8
- package/dist/v3-kernel-version.d.ts.map +0 -1
- package/dist/v3-kernel-version.js.map +0 -1
- package/dist/v3-part-edit.d.ts.map +0 -1
- package/dist/v3-part-edit.js.map +0 -1
- package/dist/v3-proposal.d.ts +0 -42
- package/dist/v3-proposal.d.ts.map +0 -1
- package/dist/v3-proposal.js.map +0 -1
- package/dist/v3-public-inputs.d.ts.map +0 -1
- package/dist/v3-public-inputs.js.map +0 -1
- package/dist/v3-recipe-build.d.ts +0 -27
- package/dist/v3-recipe-build.d.ts.map +0 -1
- package/dist/v3-recipe-build.js.map +0 -1
- package/dist/v3-recipe-from-parts.d.ts +0 -8
- package/dist/v3-recipe-from-parts.d.ts.map +0 -1
- package/dist/v3-recipe-from-parts.js.map +0 -1
- package/dist/v3-recipe.d.ts.map +0 -1
- package/dist/v3-recipe.js.map +0 -1
- package/dist/v3-release-contract.d.ts +0 -19
- package/dist/v3-release-contract.d.ts.map +0 -1
- package/dist/v3-release-contract.js.map +0 -1
- package/dist/v3-render-batches.d.ts.map +0 -1
- package/dist/v3-render-batches.js.map +0 -1
- package/dist/v3-score.d.ts.map +0 -1
- package/dist/v3-score.js.map +0 -1
- package/dist/v3-shape-sampling.d.ts.map +0 -1
- package/dist/v3-shape-sampling.js.map +0 -1
- package/dist/v3-surface.d.ts.map +0 -1
- package/dist/v3-surface.js.map +0 -1
- package/dist/v3-words.d.ts.map +0 -1
- package/dist/v3-words.js.map +0 -1
- package/docs/prototypes/v3-asset.mjs +0 -1
- package/docs/prototypes/v3-authoring-session.mjs +0 -1
- package/docs/prototypes/v3-capability-plan.mjs +0 -1
- package/docs/prototypes/v3-document.mjs +0 -2
- package/docs/prototypes/v3-editor-workspace.mjs +0 -1
- package/docs/prototypes/v3-typed-plan.mjs +0 -3
- package/docs/v3-status.md +0 -50
- /package/docs/prototypes/{v3-kernel.mjs → kernel.mjs} +0 -0
- /package/docs/prototypes/{v3-linear-comparison.py → linear-comparison.py} +0 -0
- /package/docs/prototypes/{v3-semantics.test.mjs → semantics.test.mjs} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FigureAsset } from './asset-types.ts';
|
|
2
2
|
/**
|
|
3
3
|
* Why a board may not be given this input to set, or null when it may: it must be a design input of the model, not the
|
|
4
4
|
* size (a board sets that from the instance's bounds), with a range to hold a board's value to (ADR-0096). One rule for
|
|
@@ -21,7 +21,7 @@ export declare function checkPublicInput(inputs: ReadonlyArray<{
|
|
|
21
21
|
role?: string;
|
|
22
22
|
}>, id: string, path: string): void;
|
|
23
23
|
/** The list after a part was renamed: an input the part owned (`<part>.…`) is followed to its new name. */
|
|
24
|
-
export declare function renamePublicInputs(asset:
|
|
24
|
+
export declare function renamePublicInputs(asset: FigureAsset, from: string, to: string): void;
|
|
25
25
|
/** The list without entries whose input is no longer a design input of the model. */
|
|
26
|
-
export declare function keepPublicInputs(asset:
|
|
27
|
-
//# sourceMappingURL=
|
|
26
|
+
export declare function keepPublicInputs(asset: FigureAsset): void;
|
|
27
|
+
//# sourceMappingURL=public-inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-inputs.d.ts","sourceRoot":"","sources":["../src/public-inputs.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASvK;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAG/I;AAED,2GAA2G;AAC3G,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAIrF;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAKzD"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* renamed with them, and an entry whose input is gone dropped with it, as the joint records are kept with their parts
|
|
7
7
|
* (chief architect's condition, 2026-09-26).
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { FigureContractError } from "./contract.js";
|
|
10
10
|
/**
|
|
11
11
|
* Why a board may not be given this input to set, or null when it may: it must be a design input of the model, not the
|
|
12
12
|
* size (a board sets that from the instance's bounds), with a range to hold a board's value to (ADR-0096). One rule for
|
|
@@ -30,7 +30,7 @@ export function publicInputRefusal(inputs, id) {
|
|
|
30
30
|
export function checkPublicInput(inputs, id, path) {
|
|
31
31
|
const refusal = publicInputRefusal(inputs, id);
|
|
32
32
|
if (refusal)
|
|
33
|
-
throw new
|
|
33
|
+
throw new FigureContractError(refusal.code, path, refusal.message);
|
|
34
34
|
}
|
|
35
35
|
/** The list after a part was renamed: an input the part owned (`<part>.…`) is followed to its new name. */
|
|
36
36
|
export function renamePublicInputs(asset, from, to) {
|
|
@@ -48,4 +48,4 @@ export function keepPublicInputs(asset) {
|
|
|
48
48
|
if (!asset.publicInputs.length)
|
|
49
49
|
delete asset.publicInputs;
|
|
50
50
|
}
|
|
51
|
-
//# sourceMappingURL=
|
|
51
|
+
//# sourceMappingURL=public-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-inputs.js","sourceRoot":"","sources":["../src/public-inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type FigureRecipe, type FigureRecipeParam, type FigureRecipeValue } from './recipe.ts';
|
|
2
|
+
import type { FigureAsset } from './asset-types.ts';
|
|
3
|
+
/** Where a numeric parameter lands: the steps that match `step` (every key given, equal), at `path` (dot separated). */
|
|
4
|
+
export interface FigureRecipeBinding {
|
|
5
|
+
step: Record<string, unknown>;
|
|
6
|
+
path: string;
|
|
7
|
+
}
|
|
8
|
+
export interface FigureRecipeSpec {
|
|
9
|
+
name: string;
|
|
10
|
+
title: Record<string, string>;
|
|
11
|
+
description?: Record<string, string>;
|
|
12
|
+
category?: string;
|
|
13
|
+
tags?: string[];
|
|
14
|
+
params: Array<FigureRecipeParam & {
|
|
15
|
+
bind?: FigureRecipeBinding[];
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
export interface FigureRecipeModel {
|
|
19
|
+
/** The choices this model shows: a value for every choice and flag parameter. */
|
|
20
|
+
values: Record<string, FigureRecipeValue>;
|
|
21
|
+
asset: FigureAsset;
|
|
22
|
+
}
|
|
23
|
+
export declare function buildFigureRecipe(spec: FigureRecipeSpec, models: readonly FigureRecipeModel[], host?: string): FigureRecipe & {
|
|
24
|
+
category?: string;
|
|
25
|
+
tags?: string[];
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=recipe-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-build.d.ts","sourceRoot":"","sources":["../src/recipe-build.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAClH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,wHAAwH;AACxH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,KAAK,CAAC,iBAAiB,GAAG;QAAE,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC,CAAA;CACpE;AAED,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACzC,KAAK,EAAE,WAAW,CAAA;CACnB;AAaD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,iBAAiB,EAAE,EAAE,IAAI,SAAS,GAAG,YAAY,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAuFpK"}
|
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A template is authored as figures -- a `host` box and the template's parts fastened to it -- one figure for each
|
|
5
5
|
* combination of its choices (one leaf or two, a lamp or none). Each model is written as a command list
|
|
6
|
-
* (`
|
|
6
|
+
* (`figureRecipeFromParts`, the host becoming `{target}`), and the lists are merged into one recipe: a command in every model
|
|
7
7
|
* stays as it is; a command in some is kept with the one `when` that says which. The numbers a person sets are then
|
|
8
8
|
* bound: the spec names the command and the value, and the value becomes `{ param, times }` against its default.
|
|
9
9
|
*
|
|
10
10
|
* So what the recipe does is exactly what the models did -- the build refuses a model set it cannot say that way.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
12
|
+
import { FigureContractError } from "./contract.js";
|
|
13
|
+
import { figureRecipeFromParts } from "./recipe-from-parts.js";
|
|
14
|
+
import { parseFigureRecipe } from "./recipe.js";
|
|
15
15
|
const fail = (path, message) => {
|
|
16
|
-
throw new
|
|
16
|
+
throw new FigureContractError('RECIPE_BUILD', path, message);
|
|
17
17
|
};
|
|
18
18
|
const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
19
19
|
/** Whether a value carries every key the pattern gives, all the way down; anything else equal. */
|
|
20
20
|
const matches = (value, pattern) => pattern && typeof pattern === 'object' && !Array.isArray(pattern)
|
|
21
21
|
? !!value && typeof value === 'object' && Object.entries(pattern).every(([k, v]) => matches(value[k], v))
|
|
22
22
|
: same(value, pattern);
|
|
23
|
-
export function
|
|
23
|
+
export function buildFigureRecipe(spec, models, host = 'host') {
|
|
24
24
|
if (!models.length)
|
|
25
25
|
fail('models', 'one model or more');
|
|
26
26
|
const choosers = spec.params.filter(p => p.kind === 'choice' || p.kind === 'flag');
|
|
@@ -45,7 +45,7 @@ export function buildV3Recipe(spec, models, host = 'host') {
|
|
|
45
45
|
if (!m.asset.appearance.some(a => a.target === host))
|
|
46
46
|
fail(`models.${key(values)}`, `the model has no ${host} part to stand for the part it is put onto`);
|
|
47
47
|
const parts = m.asset.appearance.map(a => a.target).filter(t => t !== host);
|
|
48
|
-
const recipe =
|
|
48
|
+
const recipe = figureRecipeFromParts(m.asset, parts, { name: spec.name, title: spec.title });
|
|
49
49
|
if (recipe.target !== 'part')
|
|
50
50
|
fail(`models.${key(values)}`, `the template's parts are not fastened to ${host}`);
|
|
51
51
|
return { values, steps: recipe.steps };
|
|
@@ -119,7 +119,7 @@ export function buildV3Recipe(spec, models, host = 'host') {
|
|
|
119
119
|
params,
|
|
120
120
|
steps
|
|
121
121
|
};
|
|
122
|
-
|
|
122
|
+
parseFigureRecipe(recipe);
|
|
123
123
|
return recipe;
|
|
124
124
|
}
|
|
125
|
-
//# sourceMappingURL=
|
|
125
|
+
//# sourceMappingURL=recipe-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-build.js","sourceRoot":"","sources":["../src/recipe-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FigureAsset } from './asset-types.ts';
|
|
2
|
+
import type { FigureRecipe } from './recipe.ts';
|
|
3
|
+
export declare function figureRecipeFromParts(asset: FigureAsset, parts: readonly string[], meta: {
|
|
4
|
+
name: string;
|
|
5
|
+
title: Record<string, string>;
|
|
6
|
+
description?: Record<string, string>;
|
|
7
|
+
}): FigureRecipe;
|
|
8
|
+
//# sourceMappingURL=recipe-from-parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-from-parts.d.ts","sourceRoot":"","sources":["../src/recipe-from-parts.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA0C/C,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1F,YAAY,CA4Gd"}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
* them as a recipe -- no command list typed by hand.
|
|
4
4
|
*
|
|
5
5
|
* What is written is what the kernel already holds as canon: each part's shape at its measures now, its fastening and
|
|
6
|
-
* motion as the joint record says (ADR-0093), each measure that follows something as the link it is (`
|
|
6
|
+
* motion as the joint record says (ADR-0093), each measure that follows something as the link it is (`figureFollowOf`), its
|
|
7
7
|
* material and when it is shown. Names are the recipe's own: a chosen part becomes `{id}-<its name>`, the one part they
|
|
8
8
|
* hang from outside the choice becomes `{target}`, and a control of theirs `{id}-<its name>`. The common beginning of
|
|
9
9
|
* the chosen names (`sliding-door-1-`) is left off, so a recipe made of a recipe's parts does not stack names.
|
|
10
10
|
*
|
|
11
11
|
* It has no parameters: which numbers are left open is the person's to say afterwards, in the source.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
13
|
+
import { FigureContractError } from "./contract.js";
|
|
14
|
+
import { compileFigureGraph } from "./graph.js";
|
|
15
|
+
import { figureFollowOf } from "./follow.js";
|
|
16
16
|
const AXES = ['x', 'y', 'z'];
|
|
17
17
|
/**
|
|
18
18
|
* A shape the recipe can make again: its create kind, its measures in order, and the axes they lie along. `linked` is
|
|
@@ -30,7 +30,7 @@ const SHAPES = {
|
|
|
30
30
|
'frustum-shape@1': { kind: 'frustum', keys: ['radiusTop', 'radiusBottom', 'height'], along: [], linked: ['x', 'y', 'z'] }
|
|
31
31
|
};
|
|
32
32
|
const fail = (path, message) => {
|
|
33
|
-
throw new
|
|
33
|
+
throw new FigureContractError('RECIPE_FROM_PARTS', path, message);
|
|
34
34
|
};
|
|
35
35
|
/** The keys whose value is a name: a part's, a joint's, a control's. A face or an axis is a word, never renamed. */
|
|
36
36
|
const NAMED = new Set(['part', 'id', 'joint', 'input']);
|
|
@@ -50,7 +50,7 @@ function renamed(value, names) {
|
|
|
50
50
|
};
|
|
51
51
|
return walk(value);
|
|
52
52
|
}
|
|
53
|
-
export function
|
|
53
|
+
export function figureRecipeFromParts(asset, parts, meta) {
|
|
54
54
|
const chosen = new Set(parts);
|
|
55
55
|
if (!chosen.size)
|
|
56
56
|
fail('parts', 'choose the parts to keep as a recipe');
|
|
@@ -74,7 +74,7 @@ export function v3RecipeFromParts(asset, parts, meta) {
|
|
|
74
74
|
fail('parts', `the parts hang from ${[...outside].join(' and ')}; a recipe is put onto one part -- choose parts that hang from one`);
|
|
75
75
|
const target = [...outside][0];
|
|
76
76
|
/* A chosen part's measure following a part outside the choice other than the target has nothing to follow when put in. */
|
|
77
|
-
const values =
|
|
77
|
+
const values = compileFigureGraph(asset.document.model).evaluate({ ...asset.designInputs, ...asset.stateDefaults }).values;
|
|
78
78
|
/* The names: the chosen parts' common beginning left off. */
|
|
79
79
|
const list = [...chosen];
|
|
80
80
|
let common = list.length > 1 ? list.reduce((a, b) => {
|
|
@@ -126,7 +126,7 @@ export function v3RecipeFromParts(asset, parts, meta) {
|
|
|
126
126
|
for (const p of order) {
|
|
127
127
|
const shape = model.nodes.find(n => n.id === `${p}.shape`);
|
|
128
128
|
for (const axis of SHAPES[shape.op].linked ?? SHAPES[shape.op].along) {
|
|
129
|
-
const f =
|
|
129
|
+
const f = figureFollowOf(asset, p, axis);
|
|
130
130
|
if (f.of === 'own' || f.of === 'expression' || f.of === 'input')
|
|
131
131
|
continue;
|
|
132
132
|
const scale = { ...(f.times !== undefined && f.times !== 1 ? { times: f.times } : {}), ...(f.plus ? { plus: f.plus } : {}) };
|
|
@@ -180,4 +180,4 @@ export function v3RecipeFromParts(asset, parts, meta) {
|
|
|
180
180
|
steps
|
|
181
181
|
};
|
|
182
182
|
}
|
|
183
|
-
//# sourceMappingURL=
|
|
183
|
+
//# sourceMappingURL=recipe-from-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-from-parts.js","sourceRoot":"","sources":["../src/recipe-from-parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import type {
|
|
3
|
-
export type
|
|
4
|
-
export type
|
|
5
|
-
export interface
|
|
1
|
+
import { type FigureProposalStep } from './proposal.ts';
|
|
2
|
+
import type { FigureAsset } from './asset-types.ts';
|
|
3
|
+
export type FigureRecipeParamKind = 'face' | 'ratio' | 'mm' | 'choice' | 'flag';
|
|
4
|
+
export type FigureRecipeValue = number | string | boolean;
|
|
5
|
+
export interface FigureRecipeParam {
|
|
6
6
|
name: string;
|
|
7
|
-
kind:
|
|
8
|
-
default:
|
|
7
|
+
kind: FigureRecipeParamKind;
|
|
8
|
+
default: FigureRecipeValue;
|
|
9
9
|
/** `ratio` and `mm`: the values it takes. */
|
|
10
10
|
min?: number;
|
|
11
11
|
max?: number;
|
|
12
12
|
/** `face` and `choice`: the values it takes. */
|
|
13
|
-
options?:
|
|
13
|
+
options?: FigureRecipeValue[];
|
|
14
14
|
label?: Record<string, string>;
|
|
15
15
|
/** What the value does, in a few words per language: shown beside the field and in the catalog. */
|
|
16
16
|
hint?: Record<string, string>;
|
|
17
17
|
}
|
|
18
|
-
export interface
|
|
18
|
+
export interface FigureRecipe {
|
|
19
19
|
name: string;
|
|
20
20
|
title: Record<string, string>;
|
|
21
21
|
description?: Record<string, string>;
|
|
22
22
|
/** `part`: inserted onto a part the person has chosen (`{target}`); `figure`: onto the figure as a whole. */
|
|
23
23
|
target: 'part' | 'figure';
|
|
24
|
-
params:
|
|
24
|
+
params: FigureRecipeParam[];
|
|
25
25
|
/** Proposal steps, each with an optional `when`. */
|
|
26
26
|
steps: Array<Record<string, unknown>>;
|
|
27
27
|
}
|
|
28
28
|
/** A recipe as stored, checked for its own form: its parameters, its steps' `when`, its placeholders' names. */
|
|
29
|
-
export declare function
|
|
29
|
+
export declare function parseFigureRecipe(value: unknown): FigureRecipe;
|
|
30
30
|
/** Whether a step's `when` holds for these values: its one value (`is`), or any of several (`in`). */
|
|
31
|
-
export declare function
|
|
31
|
+
export declare function holdsFigureWhen(when: unknown, values: Record<string, FigureRecipeValue>): boolean;
|
|
32
32
|
/** The name a recipe's parts take in this figure: the recipe's name and the first number no part or input uses. */
|
|
33
|
-
export declare function
|
|
33
|
+
export declare function figureRecipeIdFor(asset: FigureAsset, recipe: Pick<FigureRecipe, 'name'>): string;
|
|
34
34
|
/**
|
|
35
35
|
* The proposal a recipe makes with these values: the defaults filled in, the values checked (ADR-0095 condition 3),
|
|
36
36
|
* the steps whose `when` does not hold left out, and the placeholders and linear forms resolved. A string that is only
|
|
37
37
|
* `{<param>}` takes the value itself (a number stays a number); inside a longer string it is written in.
|
|
38
38
|
*/
|
|
39
|
-
export declare function
|
|
39
|
+
export declare function resolveFigureRecipe(recipe: FigureRecipe, use: {
|
|
40
40
|
id: string;
|
|
41
41
|
target?: string;
|
|
42
|
-
values?: Record<string,
|
|
43
|
-
}):
|
|
42
|
+
values?: Record<string, FigureRecipeValue>;
|
|
43
|
+
}): FigureProposalStep[];
|
|
44
44
|
/** A recipe put into a figure: resolved, then applied as one proposal (ADR-0094). The parts it made are named `id`. */
|
|
45
|
-
export declare function
|
|
45
|
+
export declare function applyFigureRecipe(asset: FigureAsset, recipe: FigureRecipe, use?: {
|
|
46
46
|
target?: string;
|
|
47
|
-
values?: Record<string,
|
|
47
|
+
values?: Record<string, FigureRecipeValue>;
|
|
48
48
|
}): {
|
|
49
|
-
asset:
|
|
49
|
+
asset: FigureAsset;
|
|
50
50
|
id: string;
|
|
51
51
|
};
|
|
52
52
|
/** The room a recipe is tried in when it is saved: a 4 x 3 x 6 m box on the floor that follows the figure's size. */
|
|
53
|
-
export declare function
|
|
54
|
-
asset:
|
|
53
|
+
export declare function figureRecipeTestRoom(): {
|
|
54
|
+
asset: FigureAsset;
|
|
55
55
|
target: string;
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
58
58
|
* A recipe's test (ADR-0095): parsed, put into the test room with its defaults, and the result, with its room declared,
|
|
59
59
|
* passing the release gate. Throws the kernel's refusal, or `RECIPE_GATE` with the gate's findings.
|
|
60
60
|
*/
|
|
61
|
-
export declare function
|
|
61
|
+
export declare function checkFigureRecipe(value: unknown): FigureRecipe;
|
|
62
62
|
/** What a recipe adds, worked out from its steps: for a catalog, so what it says is what the recipe does. */
|
|
63
|
-
export interface
|
|
63
|
+
export interface FigureRecipeDescription {
|
|
64
64
|
/** How many parts it adds: fewest and most over its choices. */
|
|
65
65
|
parts: {
|
|
66
66
|
min: number;
|
|
@@ -79,5 +79,5 @@ export interface V3RecipeDescription {
|
|
|
79
79
|
/** The parts laid as a row of copies. */
|
|
80
80
|
rows: string[];
|
|
81
81
|
}
|
|
82
|
-
export declare function
|
|
83
|
-
//# sourceMappingURL=
|
|
82
|
+
export declare function describeFigureRecipe(recipe: FigureRecipe): FigureRecipeDescription;
|
|
83
|
+
//# sourceMappingURL=recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../src/recipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,22 +5,22 @@
|
|
|
5
5
|
* open. The cases are data, not code: a recipe adds to the proposal grammar only three placeholders (`{id}`, `{target}`,
|
|
6
6
|
* `{<param>}`), a number as a one-parameter linear form (`{ param, times?, plus? }`) and one condition per step
|
|
7
7
|
* (`when: { param, is }`, or `{ param, in: [..] }` for any of several values). There is no expression language. Applied, it is resolved into a proposal and handed to
|
|
8
|
-
* `
|
|
8
|
+
* `applyFigureProposal`: the first step the kernel refuses stops it, with the kernel's own sentence. Inserted, it is ordinary
|
|
9
9
|
* parts -- nothing ties them back to the recipe.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
11
|
+
import { FigureContractError } from "./contract.js";
|
|
12
|
+
import { applyFigureProposal } from "./proposal.js";
|
|
13
|
+
import { addFigureBox, createFigureAsset } from "./create.js";
|
|
14
|
+
import { applyFigureAuthoring } from "./authoring-actions.js";
|
|
15
|
+
import { inspectFigureAsset } from "./gate.js";
|
|
16
16
|
const KINDS = ['face', 'ratio', 'mm', 'choice', 'flag'];
|
|
17
17
|
const NAME = /^[a-z][a-z0-9-]*$/;
|
|
18
18
|
const fail = (path, message) => {
|
|
19
|
-
throw new
|
|
19
|
+
throw new FigureContractError('RECIPE_SCHEMA', path, message);
|
|
20
20
|
};
|
|
21
21
|
const isObject = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
22
22
|
/** A recipe as stored, checked for its own form: its parameters, its steps' `when`, its placeholders' names. */
|
|
23
|
-
export function
|
|
23
|
+
export function parseFigureRecipe(value) {
|
|
24
24
|
if (!isObject(value))
|
|
25
25
|
return fail('recipe', 'a recipe is an object');
|
|
26
26
|
const r = value;
|
|
@@ -78,7 +78,7 @@ export function parseV3Recipe(value) {
|
|
|
78
78
|
return r;
|
|
79
79
|
}
|
|
80
80
|
/** Whether a step's `when` holds for these values: its one value (`is`), or any of several (`in`). */
|
|
81
|
-
export function
|
|
81
|
+
export function holdsFigureWhen(when, values) {
|
|
82
82
|
if (!when)
|
|
83
83
|
return true;
|
|
84
84
|
const w = when;
|
|
@@ -122,7 +122,7 @@ function walk(v, path, onString, onLinear) {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
/** The name a recipe's parts take in this figure: the recipe's name and the first number no part or input uses. */
|
|
125
|
-
export function
|
|
125
|
+
export function figureRecipeIdFor(asset, recipe) {
|
|
126
126
|
const taken = [...asset.appearance.map(a => a.target), ...asset.document.model.inputs.map(i => i.id), ...(asset.joints ?? []).map(j => j.id)];
|
|
127
127
|
for (let n = 1;; n++) {
|
|
128
128
|
const id = `${recipe.name}-${n}`;
|
|
@@ -135,7 +135,7 @@ export function v3RecipeIdFor(asset, recipe) {
|
|
|
135
135
|
* the steps whose `when` does not hold left out, and the placeholders and linear forms resolved. A string that is only
|
|
136
136
|
* `{<param>}` takes the value itself (a number stays a number); inside a longer string it is written in.
|
|
137
137
|
*/
|
|
138
|
-
export function
|
|
138
|
+
export function resolveFigureRecipe(recipe, use) {
|
|
139
139
|
const values = {};
|
|
140
140
|
for (const p of recipe.params) {
|
|
141
141
|
const v = use.values && Object.hasOwn(use.values, p.name) ? use.values[p.name] : p.default;
|
|
@@ -166,7 +166,7 @@ export function resolveV3Recipe(recipe, use) {
|
|
|
166
166
|
};
|
|
167
167
|
return recipe.steps
|
|
168
168
|
.filter(step => {
|
|
169
|
-
return
|
|
169
|
+
return holdsFigureWhen(step.when, values);
|
|
170
170
|
})
|
|
171
171
|
.map(step => {
|
|
172
172
|
const { when: _when, ...rest } = step;
|
|
@@ -174,33 +174,33 @@ export function resolveV3Recipe(recipe, use) {
|
|
|
174
174
|
});
|
|
175
175
|
}
|
|
176
176
|
/** A recipe put into a figure: resolved, then applied as one proposal (ADR-0094). The parts it made are named `id`. */
|
|
177
|
-
export function
|
|
178
|
-
const checked =
|
|
177
|
+
export function applyFigureRecipe(asset, recipe, use = {}) {
|
|
178
|
+
const checked = parseFigureRecipe(recipe);
|
|
179
179
|
if (use.target && !asset.appearance.some(a => a.target === use.target))
|
|
180
|
-
throw new
|
|
181
|
-
const id =
|
|
182
|
-
return { asset:
|
|
180
|
+
throw new FigureContractError('TARGET_ABSENT', 'target', `${use.target} is not a part`);
|
|
181
|
+
const id = figureRecipeIdFor(asset, checked);
|
|
182
|
+
return { asset: applyFigureProposal(asset, resolveFigureRecipe(checked, { id, ...use })), id };
|
|
183
183
|
}
|
|
184
184
|
/** The room a recipe is tried in when it is saved: a 4 x 3 x 6 m box on the floor that follows the figure's size. */
|
|
185
|
-
export function
|
|
186
|
-
let asset =
|
|
187
|
-
asset =
|
|
188
|
-
return { asset:
|
|
185
|
+
export function figureRecipeTestRoom() {
|
|
186
|
+
let asset = addFigureBox(createFigureAsset('Recipe check'), { id: 'room', size: { x: 4000, y: 3000, z: 6000 }, position: { x: 0, y: 1500, z: 0 } });
|
|
187
|
+
asset = applyFigureAuthoring(asset, { kind: 'attach', part: 'room', face: 'bottom', to: { plane: 'mounting-plane' } });
|
|
188
|
+
return { asset: applyFigureAuthoring(asset, { kind: 'follow-size', part: 'room' }), target: 'room' };
|
|
189
189
|
}
|
|
190
190
|
/**
|
|
191
191
|
* A recipe's test (ADR-0095): parsed, put into the test room with its defaults, and the result, with its room declared,
|
|
192
192
|
* passing the release gate. Throws the kernel's refusal, or `RECIPE_GATE` with the gate's findings.
|
|
193
193
|
*/
|
|
194
|
-
export function
|
|
195
|
-
const recipe =
|
|
196
|
-
const room =
|
|
197
|
-
const { asset } =
|
|
198
|
-
const findings =
|
|
194
|
+
export function checkFigureRecipe(value) {
|
|
195
|
+
const recipe = parseFigureRecipe(value);
|
|
196
|
+
const room = figureRecipeTestRoom();
|
|
197
|
+
const { asset } = applyFigureRecipe(room.asset, recipe, recipe.target === 'part' ? { target: room.target } : {});
|
|
198
|
+
const findings = inspectFigureAsset(applyFigureProposal(asset, [{ kind: 'fit-room', placement: 'floor' }])).violations;
|
|
199
199
|
if (findings.length)
|
|
200
|
-
throw new
|
|
200
|
+
throw new FigureContractError('RECIPE_GATE', recipe.name, findings.map(f => `${f.code}: ${f.detail}`).join('; '));
|
|
201
201
|
return recipe;
|
|
202
202
|
}
|
|
203
|
-
export function
|
|
203
|
+
export function describeFigureRecipe(recipe) {
|
|
204
204
|
const choosers = recipe.params.filter(p => p.kind === 'choice' || p.kind === 'flag');
|
|
205
205
|
/* Every combination of the choices: a handful, as a recipe has few. */
|
|
206
206
|
let combos = [{}];
|
|
@@ -209,7 +209,7 @@ export function describeV3Recipe(recipe) {
|
|
|
209
209
|
combos = combos.flatMap(c => values.map(v => ({ ...c, [p.name]: v })));
|
|
210
210
|
}
|
|
211
211
|
const holds = (step, values) => {
|
|
212
|
-
return
|
|
212
|
+
return holdsFigureWhen(step.when, values);
|
|
213
213
|
};
|
|
214
214
|
const counts = combos.map(values => recipe.steps.filter(s => s.kind === 'add-part' && holds(s, values)).length);
|
|
215
215
|
const moves = [];
|
|
@@ -239,4 +239,4 @@ export function describeV3Recipe(recipe) {
|
|
|
239
239
|
];
|
|
240
240
|
return { parts: { min: Math.min(...counts), max: Math.max(...counts) }, moves, controls, shownByControl, rows };
|
|
241
241
|
}
|
|
242
|
-
//# sourceMappingURL=
|
|
242
|
+
//# sourceMappingURL=recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.js","sourceRoot":"","sources":["../src/recipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FigureAsset } from './asset-types.ts';
|
|
2
|
+
export type FigureContractChangeCode = 'placement-changed' | 'size-inputs-gone' | 'size-inputs-added' | 'size-range-narrowed' | 'authored-size-changed' | 'state-input-gone' | 'state-unit-changed' | 'state-range-narrowed' | 'state-input-added' | 'clip-gone' | 'clip-added' | 'binding-gone' | 'binding-role-changed' | 'binding-capacity-reduced' | 'binding-accepts-narrowed' | 'binding-added' | 'capability-gone' | 'capability-added';
|
|
3
|
+
export interface FigureContractChange {
|
|
4
|
+
code: FigureContractChangeCode;
|
|
5
|
+
/** True refuses the release. */
|
|
6
|
+
blocking: boolean;
|
|
7
|
+
/** The input id, clip name, binding id or capability name. Absent for the figure as a whole. */
|
|
8
|
+
subject?: string;
|
|
9
|
+
/** What was measured, for the sentence the service makes. */
|
|
10
|
+
values: Record<string, string | number>;
|
|
11
|
+
/** English, for logs and as the fallback sentence. */
|
|
12
|
+
detail: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The previous release against this one. Both must be assets that parse; the caller checks the new one first and
|
|
16
|
+
* the previous one passed when it was released. An empty list means placed instances are untouched.
|
|
17
|
+
*/
|
|
18
|
+
export declare function figureContractChanges(before: FigureAsset, after: FigureAsset): FigureContractChange[];
|
|
19
|
+
//# sourceMappingURL=release-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-contract.d.ts","sourceRoot":"","sources":["../src/release-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,kBAAkB,CAAA;AA+B7E,MAAM,MAAM,wBAAwB,GAChC,mBAAmB,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,qBAAqB,GACrB,uBAAuB,GACvB,kBAAkB,GAClB,oBAAoB,GACpB,sBAAsB,GACtB,mBAAmB,GACnB,WAAW,GACX,YAAY,GACZ,cAAc,GACd,sBAAsB,GACtB,0BAA0B,GAC1B,0BAA0B,GAC1B,eAAe,GACf,iBAAiB,GACjB,kBAAkB,CAAA;AAEtB,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,wBAAwB,CAAA;IAC9B,gCAAgC;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;IACvC,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;CACf;AAuBD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,oBAAoB,EAAE,CAqJrG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FIGURE_SIZE_INPUTS } from "./words.js";
|
|
2
2
|
const stateInputs = (asset) => new Map(asset.document.model.inputs.filter(i => i.role === 'state').map(i => [i.id, i]));
|
|
3
3
|
const sizeInputs = (asset) => {
|
|
4
|
-
const ids = Object.values(
|
|
4
|
+
const ids = Object.values(FIGURE_SIZE_INPUTS);
|
|
5
5
|
const found = asset.document.model.inputs.filter(i => ids.includes(i.id));
|
|
6
6
|
const allStored = ids.every(id => typeof asset.designInputs[id] === 'number');
|
|
7
7
|
return found.length === ids.length && allStored ? new Map(found.map(i => [i.id, i])) : null;
|
|
@@ -18,7 +18,7 @@ const range = (i) => `${i.min}…${i.max} ${i.unit}`;
|
|
|
18
18
|
* The previous release against this one. Both must be assets that parse; the caller checks the new one first and
|
|
19
19
|
* the previous one passed when it was released. An empty list means placed instances are untouched.
|
|
20
20
|
*/
|
|
21
|
-
export function
|
|
21
|
+
export function figureContractChanges(before, after) {
|
|
22
22
|
const changes = [];
|
|
23
23
|
const push = (change) => changes.push(change);
|
|
24
24
|
/* ── placement ─────────────────────────────────────────────────────────── */
|
|
@@ -59,7 +59,7 @@ export function v3ContractChanges(before, after) {
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
const authored = (a) => Object.values(
|
|
62
|
+
const authored = (a) => Object.values(FIGURE_SIZE_INPUTS).map(id => a.designInputs[id]);
|
|
63
63
|
const [bx, by, bz] = authored(before);
|
|
64
64
|
const [ax, ay, az] = authored(after);
|
|
65
65
|
if (bx !== ax || by !== ay || bz !== az) {
|
|
@@ -176,4 +176,4 @@ function acceptsDropped(was, now) {
|
|
|
176
176
|
return [];
|
|
177
177
|
return was.accepts.filter(type => !now.accepts.includes(type));
|
|
178
178
|
}
|
|
179
|
-
//# sourceMappingURL=
|
|
179
|
+
//# sourceMappingURL=release-contract.js.map
|