@descix/frqtl-node 0.6.0-p4.1 → 0.6.0
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/CLAUDE.md +2 -2
- package/README.md +5 -3
- package/dist/dist-manifest.json +58 -54
- package/dist/fat/pkg-node/package.json +2 -10
- package/dist/frqtl/compat/providers/wasm-engine.js +3 -4
- package/dist/frqtl/compat/renderer/providers/p5-provider.js +1 -1
- package/dist/frqtl/objects/FrqtlApp.js +5 -5
- package/dist/frqtl/objects/RecipeContext.js +106 -1
- package/dist/frqtl/objects/constants/WallBehaviors.js +1 -1
- package/dist/frqtl/objects/instruments/capture.js +1 -24
- package/dist/frqtl/objects/instruments/hosted-eyes.js +17 -1
- package/dist/frqtl/objects/objects/makeControlsForObject.js +5 -5
- package/dist/frqtl/objects/record/Record.js +25 -5
- package/dist/frqtl/objects/schema/engine-scopes.js +2 -2
- package/dist/frqtl/objects/schema/scopes.js +2 -2
- package/dist/frqtl/objects/setup/_worldInit.js +1 -2
- package/dist/frqtl/objects/setup/setupBlackbodySubstrate.js +1 -2
- package/dist/frqtl/parts/CameraControls.js +8 -0
- package/dist/frqtl/parts/DetectorWall.js +1 -1
- package/dist/frqtl/parts/GraphingDetectorWall.js +7 -7
- package/dist/frqtl/parts/LargeObject.js +2 -2
- package/dist/frqtl/parts/LiveChart.js +2 -2
- package/dist/frqtl/parts/LogicGate.js +3 -3
- package/dist/frqtl/parts/OvenBox.js +1 -1
- package/dist/frqtl/parts/PointSource.js +1 -1
- package/dist/frqtl/parts/SlitLightSource.js +1 -1
- package/dist/frqtl/parts/SlitScreen.js +1 -1
- package/dist/frqtl/parts/SphereEmitter.js +12 -12
- package/dist/frqtl/parts/Trace.js +1 -1
- package/dist/frqtl/parts/Tunnel.js +11 -11
- package/dist/frqtl/parts/Wall.js +20 -10
- package/dist/frqtl/scenes/circuit-sat.js +1 -0
- package/dist/frqtl/scenes/dse-one-emitter.js +32 -34
- package/dist/frqtl/scenes/dse-two-emitters.js +33 -34
- package/dist/frqtl/scenes/mirror-route.js +96 -79
- package/dist/shim/bundle/index.js +6 -0
- package/dist/shim/controls/index.js +1 -1
- package/dist/shim/engine/artifact-shell.js +1 -1
- package/dist/shim/engine/router.js +3 -3
- package/dist/shim/host/host-view.js +228 -0
- package/dist/shim/host/index.js +18 -0
- package/dist/shim/index.js +2 -4
- package/dist/shim/notebook/kernel.js +1 -1
- package/dist/shim/notebook/setup-builder.js +2 -2
- package/dist/shim/package.json +1 -0
- package/dist/shim/page-params/index.js +2 -30
- package/dist/shim/project/fork.js +293 -0
- package/dist/shim/project/identity.js +3 -1
- package/dist/shim/project/link.js +43 -3
- package/dist/shim/project/parts-writer.js +62 -5
- package/dist/shim/project/read-text.js +43 -0
- package/dist/shim/project/specifiers.js +104 -15
- package/dist/shim/registry/exhibits.js +15 -34
- package/dist/shim/registry/index.js +2 -2
- package/dist/shim/registry/scene-roster.js +35 -0
- package/dist/shim/registry/scene-source.js +6 -36
- package/dist/shim/registry/walkthrough.js +2 -3
- package/dist/shim/render-state/apply.js +66 -31
- package/dist/shim/render-state/index.js +6 -2
- package/dist/shim/runtime/index.js +4 -4
- package/llms.txt +4 -3
- package/package.json +19 -1
- package/dist/shim/registry/experiments.js +0 -215
package/CLAUDE.md
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
A discrete cellular-automata physics engine (compiled Rust → WASM) for node: the same modules as
|
|
4
4
|
`@descix/frqtl-web` (one source, built twice), plus the node engine door `bootNode` and the hosted eyes.
|
|
5
|
-
|
|
5
|
+
`0.6.0` (npm dist-tag `latest`). Node ≥ 22.12.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
|
-
npm install @descix/frqtl-node
|
|
8
|
+
npm install @descix/frqtl-node
|
|
9
9
|
|
|
10
10
|
## Rung 0 — the seven primitives
|
|
11
11
|
```js
|
package/README.md
CHANGED
|
@@ -4,11 +4,11 @@ FRQTL for node: a discrete cellular-automata physics engine (compiled Rust → W
|
|
|
4
4
|
local per-pixel rules — a frame moves one pixel per tick, single occupancy, momentum — rather than force
|
|
5
5
|
equations. Interference, blackbody spectra and atom-like binding emerge from the automaton.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
`0.6.0` (npm dist-tag `latest`). Node ≥ 22.12.
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
11
|
-
npm install @descix/frqtl-node
|
|
11
|
+
npm install @descix/frqtl-node
|
|
12
12
|
|
|
13
13
|
## Rung 0 — the seven primitives
|
|
14
14
|
|
|
@@ -32,10 +32,12 @@ const tick = u.doTick(); // TickData: fr
|
|
|
32
32
|
| `./eyes` | `openHostedEyes` — a `composite` still through the REAL renderer, in a managed headless browser (pulls the pinned `playwright`) |
|
|
33
33
|
| `./parts`, `./parts/*` | the parts barrel; one part = one file |
|
|
34
34
|
| `./project` | `FRQTL_WEB_SPECIFIERS`, `libPathOf`, `importMapFor`, `pageImportMapFor`, `FRQTL_WEB_HOST_SPECIFIERS`, `linkProject`, `sketchProject`, `SKETCH_ENTRY`, `projectIdentity`, `MANIFEST_FILE`, `MANIFEST_KEYS`, `normalizeManifest`, `parseManifest`, `serializeManifest`, `manifestFor`, `RECORD_FILES`, `RECORD_KEYS`, `CHANGE_KEYS`, `OPS`, `BY`, `CLIP_SECONDS`, `CLIP_NAME`, `clipName`, `jsonText`, `recordFolderFaults` |
|
|
35
|
-
| `./registry` | the walk-through rungs, the showcase roster, the
|
|
35
|
+
| `./registry` | the walk-through rungs, the showcase roster, the scene list (`sceneGroups`), `projectOf` |
|
|
36
36
|
| `./kinds` | `registerKind`, `kindNamed`, `kindOf`, `registeredKinds` |
|
|
37
|
+
| `./host-view` | `declareHostView`, `HOST_VIEW_OUTCOMES`, `CONTRACT_VIOLATIONS`, `HOST_SDK_SCRIPT` — the DeSciX host-view declarer (pure: a node test can drive a call site with a stub SDK) |
|
|
37
38
|
| `./register` | installs the resolve hook for a sketch's `@descix/frqtl-web/...` imports (`node --import @descix/frqtl-node/register`) |
|
|
38
39
|
| `./shim/controls/registry.js`, `./shim/render/sun-look.js`, `./compat/renderer/display-slot.js`, `./compat/renderer/orbit-bag.js`, `./objects/setup/_collisionMatrixLanes.js`, `./compat/engine.js` | the six non-part modules a scene may import (the rows of `FRQTL_WEB_SPECIFIERS`) |
|
|
40
|
+
| `./objects/objects/tagger.js`, `./objects/schema/index.js`, `./shim/render/heat-colormap.js`, `./objects/schema/valueNormalizer.js`, `./objects/objects/Box.js`, `./objects/objects/QuantumEmitter.js`, `./shim/expr/ast-schema.js`, `./objects/objects/actionCompiler.js`, `./objects/v1-replacements.js`, `./objects/objects/slitLinerScatter.js`, `./objects/setup/setupSphereEmitter3D.js`, `./objects/objects/directedRedirectProgram.js`, `./compat/renderer/lo-drawn-center.js`, `./objects/setup/setupTunnelPointExit.js`, `./objects/constants/WallBehaviors.js`, `./objects/objects/absorbRadiation.js`, `./objects/geometry/SlabFace.js` | the 17 part-internal modules a forked part file imports (the `tier: 'part-internal'` rows of `FRQTL_WEB_SPECIFIERS`): not a scene API — the linker admits them only from a `parts/*.js` file — and they move with the parts |
|
|
39
41
|
| `./dist-manifest.json` | sha256 of every dist file |
|
|
40
42
|
|
|
41
43
|
These modules are the same files `@descix/frqtl-web` ships (one source, built twice).
|
package/dist/dist-manifest.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descix/frqtl-node",
|
|
3
|
-
"version": "0.6.0
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"files": {
|
|
5
5
|
"eyes/index.js": "b3563421030bb7fdd277eb697959fbe9107463cbb5478160edc7d887daa67be3",
|
|
6
6
|
"fat/pkg-node/egpt_wasm.js": "5e6af1f6725c93c0e9ad7386f1785cbe639ce596a4caa19ca85729c1f2bea04d",
|
|
7
7
|
"fat/pkg-node/egpt_wasm_bg.wasm": "e204498ac7439c294653476c0d214345713e6170819281b27bbbcba217a5a5e9",
|
|
8
|
-
"fat/pkg-node/package.json": "
|
|
8
|
+
"fat/pkg-node/package.json": "82d346be94b2d9f7e30b1b679c8a5e795cec838764d28727919f85a982d9911f",
|
|
9
9
|
"frqtl/assets/vendor/acorn.LICENSE": "76a876cf886ff9be2a8b5e2e86514fed06223c8c9f0c1e9ee9606e93841e00b7",
|
|
10
10
|
"frqtl/assets/vendor/acorn.PINNED.json": "52d5c4cf628a586aec54f780ab6b8d22ae7c22cfb290d0d86c2f589f3106b101",
|
|
11
11
|
"frqtl/assets/vendor/acorn.mjs": "efb0124a960b34d53f9928c4926bfcfd300bb6a3d7ab64ee949b3a8bed1c7e5f",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"frqtl/compat/boot-node.js": "7cfd4645f965fa3e3d3072688b268a8aa5b8b4d727c7d842d3bad841dacd1194",
|
|
14
14
|
"frqtl/compat/engine.js": "a849144e80f93694290f4567fa78d09c88b277162be9f1c15ab820328690c3a4",
|
|
15
15
|
"frqtl/compat/package-root.js": "9ff4b6bc958c524b5084f849c811f1491a788afc99cab81cd281add02316ff83",
|
|
16
|
-
"frqtl/compat/providers/wasm-engine.js": "
|
|
16
|
+
"frqtl/compat/providers/wasm-engine.js": "37c91b5a42c14ad82c0cf10d46e4a10bb8d1e2e553aee59052b6267d1b03fe79",
|
|
17
17
|
"frqtl/compat/providers/wasm-load-browser.js": "990a8e22f365f3d32ee8d448965a23cc85ebf62b321ee55417e500bfd5ad7f2d",
|
|
18
18
|
"frqtl/compat/providers/wasm-load-node.js": "0ec1d50e204bf073caac5218b3007eff65c480a94c8d87ad567a6d80b6b6c435",
|
|
19
19
|
"frqtl/compat/renderer/FieldBuilder.js": "af30df8b04ee05a006882eb8cb56ff84e76142348339d039296304877770c519",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"frqtl/compat/renderer/orbit-bag.js": "b6671d3b35fcf5f79e228934a8032e729309e62b66920602f34c834f3f911681",
|
|
29
29
|
"frqtl/compat/renderer/providers/godrays-layer.js": "be76fb8e69c74dd9bd0fb9aa6189a816d0ed29b9f4e04b60277be375b93d606c",
|
|
30
30
|
"frqtl/compat/renderer/providers/index.js": "fa669158a082a0081125c81694ca79962639caf86a575ee198a815f3e13a19e7",
|
|
31
|
-
"frqtl/compat/renderer/providers/p5-provider.js": "
|
|
31
|
+
"frqtl/compat/renderer/providers/p5-provider.js": "39aa68c2232b123ed52ca235f264cfb57993f46a41d4b0ed8139bffbac2f64ac",
|
|
32
32
|
"frqtl/compat/renderer/providers/three-camera-contract.js": "644c1cc5e381cd2af897e69762216f84716808eeb5948efb989f48c47696bc60",
|
|
33
33
|
"frqtl/compat/renderer/providers/three-camera-geometry.js": "a741f72c34005fc47fb4d53cc7ef2d2df4bfa7e8eecc9a0252b1083b3d5e301a",
|
|
34
34
|
"frqtl/compat/renderer/providers/three-provider.js": "08410c488dcf3290d0a950331f33d8ba6882a391308d4d4598d9cb9aa96a4c9a",
|
|
@@ -38,15 +38,15 @@
|
|
|
38
38
|
"frqtl/compat/vendor.js": "2393ada71cdbe750d409174e1ba9b098148796efdff746b315d706a0b32e58e8",
|
|
39
39
|
"frqtl/experiments/_shared/boot-failure.js": "1a92e85b06acdefede5613f2fac7cd4e61d2aba590820f1bfa92f6829fcbbdd4",
|
|
40
40
|
"frqtl/node-entry.js": "a401039b4fcf53ac620edbd80985aa4448122f2e3caaeaf4d5595f5e9d512b60",
|
|
41
|
-
"frqtl/objects/FrqtlApp.js": "
|
|
41
|
+
"frqtl/objects/FrqtlApp.js": "e3232b09eb576427df2a52393a5603b4c084d6edba5667b03afb161fd6d76b9b",
|
|
42
42
|
"frqtl/objects/ObjectFactory.js": "a8f050ce61b7ab9c9b4f81e9eeaebf05c3cc0b532c741ce93d6e952489772b11",
|
|
43
|
-
"frqtl/objects/RecipeContext.js": "
|
|
43
|
+
"frqtl/objects/RecipeContext.js": "c8614d30b785b333c44a59f0a6bdd15a595dd0023f85ef9385f40eda5802eba8",
|
|
44
44
|
"frqtl/objects/collectors/DataCollector.js": "8736d6cb77eec36ce2adcf2bc3b0d2436eeb70a73b77182ff053efdc6ca071df",
|
|
45
|
-
"frqtl/objects/constants/WallBehaviors.js": "
|
|
45
|
+
"frqtl/objects/constants/WallBehaviors.js": "a05c6e06923962e2cc2cf7204131e5d20bf83c5c8e85fbb13867872040345e40",
|
|
46
46
|
"frqtl/objects/geometry/SlabFace.js": "847921b124d3bc1692e88c363c087d392a1baa7c652a3a61e381d0f8a8342e57",
|
|
47
47
|
"frqtl/objects/instruments/capture-host.js": "ba5001afa2d8f4e438c5eacb2a5456d903401de8584d170c0b02ff3014794edd",
|
|
48
|
-
"frqtl/objects/instruments/capture.js": "
|
|
49
|
-
"frqtl/objects/instruments/hosted-eyes.js": "
|
|
48
|
+
"frqtl/objects/instruments/capture.js": "6bee2bc3928f0c12d1c87b30ce461ca5ba74cbedb4c36d43f0a3061021753f83",
|
|
49
|
+
"frqtl/objects/instruments/hosted-eyes.js": "fc99fa3f5f1780b7f2fe66a2a3f1f6db35d5d60f1c0a5a8b36a56e49c2b4efac",
|
|
50
50
|
"frqtl/objects/kinds-entry.js": "a7818357864dc900bd93350635016f938c3dca8dcb665a62df802ba5cd0b3c93",
|
|
51
51
|
"frqtl/objects/kinds.js": "107b166c96c93fd517f173fdbe7006d6f0b2694d5f799f7ec9d4f695313f1832",
|
|
52
52
|
"frqtl/objects/objects/Box.js": "0c08fa4753b78ef56d07aae3393a6268647b550ead58e409cff13eabc8b34b5d",
|
|
@@ -68,22 +68,22 @@
|
|
|
68
68
|
"frqtl/objects/objects/frqtl-control-sync.js": "88de12d2ec1643b4afc2ef56ea8cc44e1213e4a73a0ad6876d59e988125c3789",
|
|
69
69
|
"frqtl/objects/objects/frqtl-control-widgets.js": "73dd1e4481af66430601a105d375749c6db0bc9d736e47bd0edea9a4f9e6871c",
|
|
70
70
|
"frqtl/objects/objects/frqtl-control-write-queue.js": "994d0e736f240c453fd8ab52ea6d1eed05ac27a160806037d751f4a6a6ce6295",
|
|
71
|
-
"frqtl/objects/objects/makeControlsForObject.js": "
|
|
71
|
+
"frqtl/objects/objects/makeControlsForObject.js": "a3e51c526228f99ddfd10f7902fbb4dc67979726257bff131bb1d061425dbf51",
|
|
72
72
|
"frqtl/objects/objects/makeControlsForRenderSurface.js": "0ba99a4106ad92c0fe9366d6610c31d60ebfa232b3552c05f68f9c5aa56c03a0",
|
|
73
73
|
"frqtl/objects/objects/slitLinerScatter.js": "9413cc7efa2132c68d7b4d5030af28d92e8d085e127d5c8e1568d0028da2fc13",
|
|
74
74
|
"frqtl/objects/objects/sustainedSource.js": "0c324cef1583226d090b4d1014c2576ef8237f1bad47c1511bed3c3f81e04206",
|
|
75
75
|
"frqtl/objects/objects/tagger.js": "e2a5ef9ae68466afb6b157ca6d7ce03a6f126d8c91c9f9d4be6dba8e928535eb",
|
|
76
|
-
"frqtl/objects/record/Record.js": "
|
|
76
|
+
"frqtl/objects/record/Record.js": "5555c62e278654d1d54e2e3d89da4100de2d0ccae9563e62dfe4082ec7b543ba",
|
|
77
77
|
"frqtl/objects/record/open-record.js": "2da2abcccd3ad5bc39eb7fcfb764601cd031dd0afa9b3c9cb96b0669621827df",
|
|
78
|
-
"frqtl/objects/schema/engine-scopes.js": "
|
|
78
|
+
"frqtl/objects/schema/engine-scopes.js": "d9d07914f748f9e7f86cc68e4d49da3b07d2bce37fea5280a88e6862ef3bb619",
|
|
79
79
|
"frqtl/objects/schema/index.js": "74ba0b6a6e057cfd40edf2ce41fcce7206c0204e90eeee4a8db3b711f10ffd33",
|
|
80
|
-
"frqtl/objects/schema/scopes.js": "
|
|
80
|
+
"frqtl/objects/schema/scopes.js": "11c17ea958fd1cc1107d83284148fa45faa803af4b239440b56c0705f700569e",
|
|
81
81
|
"frqtl/objects/schema/validate-descriptor.js": "32572a7c7f5262a46d13bcd05424555151287c4438e3e081ab2f3884fd5a2f10",
|
|
82
82
|
"frqtl/objects/schema/valueNormalizer.js": "00dc4eb188f23964336d45de021846b63a3603c423b5444f132bf470c73c4354",
|
|
83
83
|
"frqtl/objects/setup/_collisionMatrixLanes.js": "e5184a9e690e677bc941cce113f2d3d5c51de41d8322515fc707f5414c7b81be",
|
|
84
84
|
"frqtl/objects/setup/_setupOptions.js": "bc9bff3c647418db452976b54e9f91474c59abf5acbde1d62747a11a9501cca0",
|
|
85
|
-
"frqtl/objects/setup/_worldInit.js": "
|
|
86
|
-
"frqtl/objects/setup/setupBlackbodySubstrate.js": "
|
|
85
|
+
"frqtl/objects/setup/_worldInit.js": "636eb9610f0d446d7c8d660c322d31cdaaae2a35546549f92572751414ad604b",
|
|
86
|
+
"frqtl/objects/setup/setupBlackbodySubstrate.js": "c23b397dca46e0c30dfb50148f545a3d634e43452e3aa4d29188327d3d730705",
|
|
87
87
|
"frqtl/objects/setup/setupCircuitBasic.js": "8204f7d42f8dd888e6a4e1175b16a6e67b69fb2d943af6c2b40c900b905dd453",
|
|
88
88
|
"frqtl/objects/setup/setupCollisionMatrix.js": "5df3b6c93a5b1fc5f8c0a443c1d3e0003ef170bb39b6101e60b4f3017ec26f60",
|
|
89
89
|
"frqtl/objects/setup/setupConeEmitter3D.js": "284d5353857817e5821d6c3897ba15b22f32388971ae149094e1353f15f0a4d6",
|
|
@@ -105,49 +105,49 @@
|
|
|
105
105
|
"frqtl/objects/setup/setupWaveInterference.js": "b74e1406580a0bd2749686f87f9eec929e3e33c2fe6a7648cdaa2a26449e4fc1",
|
|
106
106
|
"frqtl/objects/v1-replacements.js": "7be6910430fcfbbe39db2a60b991b9c0b3ded9a8c05295060107042cee6bc201",
|
|
107
107
|
"frqtl/package-core.js": "4e645a91edf27f9631dd97aeafc72b11c06a7fbfc0f435d194f4635da872f6d7",
|
|
108
|
-
"frqtl/parts/CameraControls.js": "
|
|
108
|
+
"frqtl/parts/CameraControls.js": "c31a42296256703c5d06098b1dfb548d2ad5b39de0485fb9cff71ea777a5cc7f",
|
|
109
109
|
"frqtl/parts/CameraPath.js": "bf5d620b2789c76b5a79c092ae0a3dc802fa6ef28a05df2ed1935481d4bba636",
|
|
110
110
|
"frqtl/parts/CollisionActions.js": "c14c7257fa8bf2add3784dfff0e78a4098640a5a8cec4b40c7cb60ba3197f3a2",
|
|
111
111
|
"frqtl/parts/CollisionTypes.js": "3290b8caf557c2801d3e0a8400d7cfd0cc9cbd14ae4247707747dc109a658789",
|
|
112
|
-
"frqtl/parts/DetectorWall.js": "
|
|
112
|
+
"frqtl/parts/DetectorWall.js": "d39ab88056fa28c322863430f8bad9704879e5d8149f1ac65adf1add057996f5",
|
|
113
113
|
"frqtl/parts/FrqtlControlOverlay.js": "f862b1529265224aa96878b56b0c1c6e65683ba3fd6b517df86e17e92147f9c4",
|
|
114
114
|
"frqtl/parts/FrqtlControlsPanel.js": "792d03dea218bdc335ba7e04362be620edbfa331bed9de087d61942299728cc1",
|
|
115
115
|
"frqtl/parts/FrqtlVision.js": "118d0874249fa55783b196fd01297b3347951267a4add93381433a72c46e8622",
|
|
116
|
-
"frqtl/parts/GraphingDetectorWall.js": "
|
|
117
|
-
"frqtl/parts/LargeObject.js": "
|
|
116
|
+
"frqtl/parts/GraphingDetectorWall.js": "83aba36a6a6c15f92c99bbe5d7e63b12b38e07be65e02e89020c065514ef5b3d",
|
|
117
|
+
"frqtl/parts/LargeObject.js": "d6cae738b30965f3eba4be4399fb4410f17afc3267b51e3ad9e1ba7423e17922",
|
|
118
118
|
"frqtl/parts/LightColor.js": "8637e5a09bbad3a4fdd2034ccb44dfc1fda743e29b12b4c685a64b9e1df28daa",
|
|
119
|
-
"frqtl/parts/LiveChart.js": "
|
|
120
|
-
"frqtl/parts/LogicGate.js": "
|
|
121
|
-
"frqtl/parts/OvenBox.js": "
|
|
122
|
-
"frqtl/parts/PointSource.js": "
|
|
119
|
+
"frqtl/parts/LiveChart.js": "8bd0b862d2f7a4e818ae9cfc47e5e0f56eb97ea0a00fb836bba3f2374c12a1ce",
|
|
120
|
+
"frqtl/parts/LogicGate.js": "05716711db1794ce9e29027ea16af083e5a1cc8b0657dce853cb6d2f6ee1fc02",
|
|
121
|
+
"frqtl/parts/OvenBox.js": "7e393dd736c6ae410d85e5fe3edbea8677e5834bd1fe7b19d4e8f46af13764ac",
|
|
122
|
+
"frqtl/parts/PointSource.js": "57b3b8353cba8c5ebfff6653e39948c9f0ee240449b4af08247687d3d9d9f092",
|
|
123
123
|
"frqtl/parts/Rectangle.js": "8be4cae13135c3cb185d025dfd10d3a03b21d5627bfa92363c2faa021f751571",
|
|
124
|
-
"frqtl/parts/SlitLightSource.js": "
|
|
125
|
-
"frqtl/parts/SlitScreen.js": "
|
|
126
|
-
"frqtl/parts/SphereEmitter.js": "
|
|
127
|
-
"frqtl/parts/Trace.js": "
|
|
128
|
-
"frqtl/parts/Tunnel.js": "
|
|
129
|
-
"frqtl/parts/Wall.js": "
|
|
124
|
+
"frqtl/parts/SlitLightSource.js": "89a17aaade03e2e961af4181e6c3fd479d31c2c3298c46abc477a13f26d7a07a",
|
|
125
|
+
"frqtl/parts/SlitScreen.js": "bdcaa761d0aa68c415a06ab2c523a8d4553a4c48cee00fe33d5df994adcf599a",
|
|
126
|
+
"frqtl/parts/SphereEmitter.js": "645664f5a20924b777d9b4ad6fef6338e7de251d62c7f8a4c93e6b0f97b47d4a",
|
|
127
|
+
"frqtl/parts/Trace.js": "f9d91bb9435bc5fabfd7bfdbfbf3f3ae34e2338090251d9e9d6c11abc2ed25fb",
|
|
128
|
+
"frqtl/parts/Tunnel.js": "66bfca3d3d88ebf9a8cb7aa248b92cfc7d78a278449830b03e6b2700a21df891",
|
|
129
|
+
"frqtl/parts/Wall.js": "7dcb520daee3facad8698b363bb49557003439dc5841706b105bd1acabc2e0bf",
|
|
130
130
|
"frqtl/parts/index.js": "70b8e227e09663889f4c7942d385f843d977579765723f829880fd6e9868ac53",
|
|
131
131
|
"frqtl/scenes/absorbing-wall-3d.js": "722bb433142833f03150052b95039686aba0d9db510a5ff13fad95b5f17e0cf8",
|
|
132
132
|
"frqtl/scenes/absorbing-wall.js": "0a47ca64e56481841339cd5882cf0e54ec7c14d87a4306d016ead1ff26591197",
|
|
133
133
|
"frqtl/scenes/atomic-model.js": "1b484ba37d90af9c06d9bf6a114b8867c914d12cc0a0dbeec27dd96230829fac",
|
|
134
134
|
"frqtl/scenes/big-bang.js": "e0807d81f4bcc6626080f81d472c6ead9c8d8f7d97bd67c6da76a476868b25f4",
|
|
135
135
|
"frqtl/scenes/blackbody.js": "bdd6ee3c628f0cf1161eeb855a4a582902ab56174da937bf0d5180d930ef8278",
|
|
136
|
-
"frqtl/scenes/circuit-sat.js": "
|
|
136
|
+
"frqtl/scenes/circuit-sat.js": "db69468352e955b4ff9c36e8d3cf03cc3e88d368b6d3cc485d664bb5cb085d57",
|
|
137
137
|
"frqtl/scenes/collision-matrix-3d.js": "8a0c1189d5e2f23092b216515608319643bc010ff837aadffdf84b2078c96793",
|
|
138
138
|
"frqtl/scenes/counting-wall-3d.js": "1d08e60d58faeed4315400a2d0fbc10460d7869babc72a8dd7f906b5dff6ba54",
|
|
139
139
|
"frqtl/scenes/counting-wall.js": "35b617a20c154f89c63d4a60a205f5d67ba8bb3342730e269528f884a522f131",
|
|
140
140
|
"frqtl/scenes/double-slit.js": "d37aff36667783fe5991b8219439803facb730bd0abe9219483f2ef42056e988",
|
|
141
|
-
"frqtl/scenes/dse-one-emitter.js": "
|
|
141
|
+
"frqtl/scenes/dse-one-emitter.js": "619892663838e0f018b9ade83c9994fb0709b9ed9904c92e41470a7b7fdd396f",
|
|
142
142
|
"frqtl/scenes/dse-one-slit.js": "7bf299e3cc64dd3d1f8df805eec63d98d36b8592d55e3ef478d46c38bf674812",
|
|
143
143
|
"frqtl/scenes/dse-photoelectric.js": "e0402c4508a4d97d3d9461f889b10a49da82ef5f232d81455c5e482db8b0bda6",
|
|
144
144
|
"frqtl/scenes/dse-tunnel-rebuild.js": "c662bff31fb66c1f136b6f35d18943c58e97456b61fbab9f4cdb812e3acb2630",
|
|
145
|
-
"frqtl/scenes/dse-two-emitters.js": "
|
|
145
|
+
"frqtl/scenes/dse-two-emitters.js": "74cf1d4b226b0ce4e337697a0327de9b95190159b2554f53e629d89525321877",
|
|
146
146
|
"frqtl/scenes/dse-two-slits.js": "f303a848d9c463a5a9443c380b257795b19127b122bdd2fcb28855841b219939",
|
|
147
147
|
"frqtl/scenes/empty.js": "f3c2161f7bbc1be2d7fba0f117ac16b9e60966d9448877ead4037e3cb4fee678",
|
|
148
148
|
"frqtl/scenes/laser-buildup.js": "f4b29b2eeeca730642f5adf2f499f6594b73f6e51ba6aa9a237f4ee643c5cf23",
|
|
149
149
|
"frqtl/scenes/mirror-3d.js": "79ac794dfbc608037936908a9fe58ca34be93be6263d5940bb38129d55bb7943",
|
|
150
|
-
"frqtl/scenes/mirror-route.js": "
|
|
150
|
+
"frqtl/scenes/mirror-route.js": "007af9eb382a1392eb22b6d81f7c3e40bffe7ba6ac53363ce7726ccb62b838c4",
|
|
151
151
|
"frqtl/scenes/mirror.js": "c7bcd440e9a78e333fd81d906b3788a62342910f46cf98de860098fcc1e0ba91",
|
|
152
152
|
"frqtl/scenes/omni-3d.js": "d420a7aae9fdfd394b9288ce1f0256416e1b07f70bc570a928a4592c32a47c27",
|
|
153
153
|
"frqtl/scenes/omni-source.js": "4f9aaa0e0ccbf4d18908d1628688dbeae376b535318f0cf969d61d8ea8f90b83",
|
|
@@ -157,65 +157,69 @@
|
|
|
157
157
|
"frqtl/scenes/sun.js": "fa06cac429af5a2ad4fe846969a7bf763f2a76d9d9b169328cd1f45bad6bda8f",
|
|
158
158
|
"frqtl/scenes/two-source.js": "1444a0e503f4a5e349d4364e31e698bc67d723a4b2864f262603e75ba5f9f088",
|
|
159
159
|
"frqtl/scenes/wave.js": "cabbece84daceca9199bbea22be610281bdf3137c8c5724bc601758e711f111f",
|
|
160
|
-
"shim/bundle/index.js": "
|
|
160
|
+
"shim/bundle/index.js": "edc501a039ce47102657604df71fbc17ba3e4760ca087055351231c7469f5c50",
|
|
161
161
|
"shim/bundle/indexHtml.js": "2c4fbc502bb33fce93596cee19e143a58bb63c18d0b18ea597f81610e3a9a027",
|
|
162
162
|
"shim/bundle/zip.js": "00f7b5fb5f36ff40a59d86758c503d9d7fb43949c1b5a4f2e7367c43d92786f9",
|
|
163
163
|
"shim/bus.js": "dac2eeccd8774268c51014be4c46c00b9985fdf49ebb44355aa370e949c8c5bc",
|
|
164
|
-
"shim/controls/index.js": "
|
|
164
|
+
"shim/controls/index.js": "206f2f9cdb19e122e650517e09ef1e858f962b4ebe555174aee3bea4ae938dff",
|
|
165
165
|
"shim/controls/registry.js": "3df843d774968d18e012624f2aba2fb09b08ede9e21b6c1f6687d4f3e9b46d3e",
|
|
166
|
-
"shim/engine/artifact-shell.js": "
|
|
166
|
+
"shim/engine/artifact-shell.js": "f23c327500f8174b12d464868f6ec9c1701e7a9a5faa1c43a2ddafc3191dc38c",
|
|
167
167
|
"shim/engine/boot-phases.js": "c6e12e12824bcf6f1a289f46e41c898a5416c80c131594525145aae9a3eefbfa",
|
|
168
168
|
"shim/engine/engine-stack-boot.js": "0abf57dcff2ca2bb025c787a17875d49d54d9218ac08c78cb9c678dbb6118d08",
|
|
169
|
-
"shim/engine/router.js": "
|
|
169
|
+
"shim/engine/router.js": "bd6a6e7b8b670ea146e8789f333c88c8eb62cf40aeab1eec21706d76fbb3e02a",
|
|
170
170
|
"shim/experiment-frame/index.js": "5a0219aaa225d8f808c405b08623ce85ada37d83fb4f55f983db3303e431e47f",
|
|
171
171
|
"shim/expr/ast-schema.js": "4f1133b887639bbd86fab976292323bf4a955cdc873ff7ca8e8a8eb3b416923f",
|
|
172
172
|
"shim/field-descriptor/index.js": "6647d57d1523519114adc0a5cb66335ec5121c39ab294b9c97bdfb9e5d7f61e0",
|
|
173
173
|
"shim/frame-data/index.js": "df6957b0b4a8e0ee0035bc970647b90089b421ae7f05911cc047d48457164be6",
|
|
174
|
-
"shim/
|
|
174
|
+
"shim/host/host-view.js": "e13619d3340118f81cde6d035dcb689fd72d9341c98c3e95afba911e978dda63",
|
|
175
|
+
"shim/host/index.js": "67691951a7ff35b4baf7332987d0128d1eefd0ad185d2989674bea90b17c02f3",
|
|
176
|
+
"shim/index.js": "96165c6161ffddbace0be0cde0b3a83943298531537dd2cc9c6e281b8274ff19",
|
|
175
177
|
"shim/notebook/canvas-guard.js": "b19d3a86df3835bd617c7130cde997b6f8a8a0c140f95338b733115d5947ed7b",
|
|
176
178
|
"shim/notebook/catalog.js": "68243a154e12bf36a76598aa554119f6e3b8b5363c8452d157c8a562b9c38dc1",
|
|
177
179
|
"shim/notebook/format.js": "f8b1da9eb37da3a9609f7721426e2242f1279780ea212ea08d9f3c50bb18b578",
|
|
178
180
|
"shim/notebook/frqtl-setups-importmap.js": "df86defa90cb85675564e7bb269451684b5cc7679f2c6b1884c07c8272e8ff1c",
|
|
179
|
-
"shim/notebook/kernel.js": "
|
|
181
|
+
"shim/notebook/kernel.js": "95b8efe960927d8cda0896eea8995f5df5972a471e0217916c32881913bddfcd",
|
|
180
182
|
"shim/notebook/knob.js": "f07e9ac9697c7178aa68e4b2f4300145f8e2d2dc41b64aa0afede7e2d68705b1",
|
|
181
183
|
"shim/notebook/module-resolver.js": "0bcf6ca4954e198dd77ce61b502cebed6d2c118926fd0d2dd0816991b8334b7a",
|
|
182
184
|
"shim/notebook/notebook-knobs.js": "891cd6a24ed70256ed723844918866ba162dd71f839cd06ff4d8fc92a0a17452",
|
|
183
185
|
"shim/notebook/produced-bindings.js": "3d46038ec541a9ff896abae4f62d25780633cdc952e4c9d0d90d917298471090",
|
|
184
186
|
"shim/notebook/realm-registry.js": "ffee52e7c93447c8b82bfc0784b51346686b4373766da298f50a759d3443ab6a",
|
|
185
187
|
"shim/notebook/realm-transport.js": "5173676a94211f85122e0581a16abba925e9c4b5900b5891911bfaec5ea02daf",
|
|
186
|
-
"shim/notebook/setup-builder.js": "
|
|
188
|
+
"shim/notebook/setup-builder.js": "60fac546fe7895e68d1b982c377d9ced2558ba0769c4a5560ed92a239a7bce2a",
|
|
187
189
|
"shim/notebook/store.js": "fe34d31907e7a8f303dfcc35b9c0439faf2c32fbc5c0bb4f899692c25bef9a4d",
|
|
188
190
|
"shim/notebook/vendor-importmap.js": "0c6578567980225593690e06fb4d32f0b50c47fe87a7467741a03846f6da68ed",
|
|
189
191
|
"shim/notebook/view-builder.js": "1961962be16ef526934c43193828473447f2ec9ac0144f39bc5108c327d9069a",
|
|
190
192
|
"shim/notebook/view-ctx.js": "6287aee366104bece827eecccf675540571d6db2b6833bff837be49eb60ce111",
|
|
191
193
|
"shim/notebook/view-handle.js": "fe0d1530e3311cb96bb22f5cded35b9f25a0a4ef002588f3e47d9eef8089664d",
|
|
192
194
|
"shim/notebook/warmup.js": "453b9e8b4969bcc704e1fbc636c3ada869ebf692651cfbf950107fd1cb662e25",
|
|
193
|
-
"shim/package.json": "
|
|
194
|
-
"shim/page-params/index.js": "
|
|
195
|
-
"shim/project/
|
|
195
|
+
"shim/package.json": "5937639b55f56f715ea32a010ddd17e631c548c16b8fcba65adbc6d9c802116b",
|
|
196
|
+
"shim/page-params/index.js": "c58732b8127da8c2b4ecfd922bf46a6c9a5e9ab7017f41c095a6ec937011f0fa",
|
|
197
|
+
"shim/project/fork.js": "07555f24c7e6d1bbe723853bc09ad570b9cd36cef248a07e98e7398d41ac70da",
|
|
198
|
+
"shim/project/identity.js": "8d3e0bb9df75eecf7d11a1ea7948ff66c559973a891574d0b208c9e8f8faf504",
|
|
196
199
|
"shim/project/index.js": "81d1a5d84c8bd5f31de8d9849d385509a73582e2ec6db4f779b018fe1b25404f",
|
|
197
|
-
"shim/project/link.js": "
|
|
200
|
+
"shim/project/link.js": "0e3fc878bc45d9916baacd7cf129687ec6e82efd4f6f5036e4697180b3d0f87a",
|
|
198
201
|
"shim/project/manifest.js": "442267af07ae1b977ff6aeaca49d98ce82b77f548cfdd1ed0f258b3429d75f31",
|
|
199
202
|
"shim/project/node-specifier-hook.mjs": "8601edf762bd9cd011632bc681d0589dfc77368cda0e994125d0eb123fea89d0",
|
|
200
203
|
"shim/project/parts-module.js": "b08e0149f086640692e1b2ff8e0d7ae0379c2bc934a0891418de5c2b8c0e8e60",
|
|
201
|
-
"shim/project/parts-writer.js": "
|
|
204
|
+
"shim/project/parts-writer.js": "121fa67261d6f366190c9ac4961fceed2f26ca7f35cf3fbffc767829afc69978",
|
|
205
|
+
"shim/project/read-text.js": "b89bd70e3a271e1f42c8ce9427a20cdd9a4c4c9c31b64c49ff1f56b095620136",
|
|
202
206
|
"shim/project/record-format.js": "b680c3752f20535c08be832c6808fae000c2d2325f8caee57f98351043d091be",
|
|
203
207
|
"shim/project/register-node.mjs": "9b408da7dc1b11d16237cd62caca281c823ea80173d386ad35e41ea17c34857f",
|
|
204
|
-
"shim/project/specifiers.js": "
|
|
208
|
+
"shim/project/specifiers.js": "6a5ba9f91f97902d7b7911ecf9933dab743a99271b30ec4fb50a5d439d344add",
|
|
205
209
|
"shim/registry/copy-gate.js": "cfbf52669c849b8837b326f2743458f1ead0720cad51a6c6d409c9bd6c7f9495",
|
|
206
|
-
"shim/registry/exhibits.js": "
|
|
207
|
-
"shim/registry/
|
|
208
|
-
"shim/registry/
|
|
209
|
-
"shim/registry/scene-source.js": "
|
|
210
|
-
"shim/registry/walkthrough.js": "
|
|
211
|
-
"shim/render-state/apply.js": "
|
|
212
|
-
"shim/render-state/index.js": "
|
|
210
|
+
"shim/registry/exhibits.js": "7ee132589bb4c003a06815f78d9e917ba81fd806111d1cee538345b7e5cc6345",
|
|
211
|
+
"shim/registry/index.js": "f59357c81c4045c41bfd266a74931e5c21b2c6650ad60b80e8e21bc23699ca34",
|
|
212
|
+
"shim/registry/scene-roster.js": "318fe373f71b1c58d05425693f2fad4bd5368f6095b65817c6d637430a0bfb73",
|
|
213
|
+
"shim/registry/scene-source.js": "c9c4b48c24d4b1ebee1549a7891a1ba708909b94b9403ce28eefbd902cacf49f",
|
|
214
|
+
"shim/registry/walkthrough.js": "8f8b6f59e9e81c67c9c62f8fb271eee2e4d6e1fba6e116b227a2f1e3f9930230",
|
|
215
|
+
"shim/render-state/apply.js": "94a9e60cb1722c9a82aa00f2f161fd65e6f438147333856a786e42a4ad5b7064",
|
|
216
|
+
"shim/render-state/index.js": "72a6a3dcd8037893cb8fbd7ef32b126770e7efaec70847f8e4f2915ddb690b43",
|
|
213
217
|
"shim/render/capture-envelope.js": "2667a355169bb124fd8117e9cbf1d630085257b9f6fa537362f12d0aa649da2d",
|
|
214
218
|
"shim/render/heat-colormap.js": "0eadc758179024734c45eaeffd8f5b44e7c4102b7042767a4a5b66541b3bbd7c",
|
|
215
219
|
"shim/render/render-stages.js": "baf674c205df7638af53e51ac77152a448fe6bf6d4ea51d58ac565556cd38da7",
|
|
216
220
|
"shim/render/sun-look.js": "f8f23f0853a9c22459fff866ccf59ab00332697d48fd529fca5c2e8554a2d83d",
|
|
217
221
|
"shim/rpc/index.js": "56af3afeed22e8d718cd2f7a8ad70db8745f54dbc139af9d71f1d73e2ca37698",
|
|
218
|
-
"shim/runtime/index.js": "
|
|
222
|
+
"shim/runtime/index.js": "92bb4d8b5f203f949e441781b864efe5c6748df14a3a8f306e4c0bc11c7f6d35",
|
|
219
223
|
"shim/storage/boot.js": "689504e15dc075e32d08abf61c75a45b1d565c09f086b42400dae40d8186c411",
|
|
220
224
|
"shim/storage/codec-chains.js": "6eab30c3ab7d8bd26059f386f91f9e43a87a6a20980d36bf7271eb72b6d109c0",
|
|
221
225
|
"shim/storage/folders.js": "9d69b6fcbdc8ae6da561acd42946933ac2d453d5d0659fcaf1cfba410a47a45a",
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"version": "0.1.0",
|
|
5
|
-
"files": [
|
|
6
|
-
"egpt_wasm_bg.wasm",
|
|
7
|
-
"egpt_wasm.js",
|
|
8
|
-
"egpt_wasm.d.ts"
|
|
9
|
-
],
|
|
10
|
-
"main": "egpt_wasm.js",
|
|
11
|
-
"types": "egpt_wasm.d.ts"
|
|
2
|
+
"private": true,
|
|
3
|
+
"license": "SEE LICENSE IN LICENSE.md"
|
|
12
4
|
}
|
|
@@ -743,8 +743,7 @@ import { Rectangle } from '../../parts/Rectangle.js';
|
|
|
743
743
|
// can parent — density clustering). ENGINE TRUTH, ASKED ON EVERY READ: init() ferries the
|
|
744
744
|
// mode in the CONFIG BAG (`frame_gen_mode`), the ENGINE holds it, and this getter asks the
|
|
745
745
|
// running universe what it actually HOLDS. A JS copy would go stale the moment a re-init
|
|
746
|
-
// changed the mode —
|
|
747
|
-
// was not using.
|
|
746
|
+
// changed the mode — and a writer that read it would write a mode the run was not using.
|
|
748
747
|
//
|
|
749
748
|
// `_frameGenMode` survives for exactly ONE read: the window between create() and init(),
|
|
750
749
|
// when there is no engine to ask. It is NOT an input to init() — init() takes its own
|
|
@@ -1007,8 +1006,8 @@ import { Rectangle } from '../../parts/Rectangle.js';
|
|
|
1007
1006
|
}
|
|
1008
1007
|
// READ-BACK of the RESOLVED axes (what this run actually uses, including the
|
|
1009
1008
|
// engine's serde default when the sketch omitted them). Truth-in-labeling: any
|
|
1010
|
-
// consumer that must re-declare this world (
|
|
1011
|
-
//
|
|
1009
|
+
// consumer that must re-declare this world (a host re-stating the sketch's world step)
|
|
1010
|
+
// DERIVES it from here rather than guessing.
|
|
1012
1011
|
this.activeAxes = config.active_axes
|
|
1013
1012
|
? { x: config.active_axes.x, y: config.active_axes.y, z: config.active_axes.z }
|
|
1014
1013
|
: { x: true, y: true, z: false };
|
|
@@ -803,7 +803,7 @@ import * as RendererProviderContract from '../renderer-provider-contract.js';
|
|
|
803
803
|
setPreset: function (name) {
|
|
804
804
|
// A preset is a FULL framing reset — the reliable way back. A name this
|
|
805
805
|
// camera does not offer THROWS (a silent no-op would leave a saved or
|
|
806
|
-
//
|
|
806
|
+
// written preset doing nothing with no signal).
|
|
807
807
|
var all = _presets(), p = all[name];
|
|
808
808
|
if (!p) {
|
|
809
809
|
throw new Error('[p5-provider camera] setPreset("' + name + '"): this camera offers ' +
|
|
@@ -248,7 +248,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
|
|
|
248
248
|
// experiment pages). When true (STUDIO authoring), the renderer DRAWS the
|
|
249
249
|
// Design-only markers (a manipulable emitter's visual circle, `lo._designMarker`).
|
|
250
250
|
// A render toggle at the output boundary (zero physics): it filters ONLY the
|
|
251
|
-
// renderTick view; the pick, the aim, Layers and
|
|
251
|
+
// renderTick view; the pick, the aim, Layers and the parts writer read the census and the
|
|
252
252
|
// declared registry directly, so an emitter stays selectable even when its marker
|
|
253
253
|
// circle is suppressed.
|
|
254
254
|
this._designMode = false;
|
|
@@ -814,7 +814,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
|
|
|
814
814
|
// is manipulable, so only what the user proactively declares is registered.
|
|
815
815
|
//
|
|
816
816
|
// `declared` is the ordered list of the handles the user's DECLARING calls produced
|
|
817
|
-
// (`exp.addObject`, a palette drop, a
|
|
817
|
+
// (`exp.addObject`, a palette drop, a parts entry replayed — all three funnel through
|
|
818
818
|
// `ObjectFactory.create`, the registry's ONE writer). It is a different fact from the world
|
|
819
819
|
// census (`largeObjects` — everything the world draws and collides): a part's composition is
|
|
820
820
|
// in the census but never declared. "Which declared object does this drawn thing belong to"
|
|
@@ -990,7 +990,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
|
|
|
990
990
|
* undeclaredTickFunctions() → the host tick-functions running in the world that NO declared
|
|
991
991
|
* object owns: a setup factory's emitter, a page's own regulation fn, a sketch's
|
|
992
992
|
* exp.addTickFunction. They are behaviour the registry cannot write down, so whatever writes the
|
|
993
|
-
* world as declarations
|
|
993
|
+
* world as declarations refuses while any exists.
|
|
994
994
|
* @returns {Function[]}
|
|
995
995
|
*/
|
|
996
996
|
FrqtlApp.prototype.undeclaredTickFunctions = function () {
|
|
@@ -1056,7 +1056,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
|
|
|
1056
1056
|
* getObjectByName(name, predicate?) → the DECLARED object of that name (passing `predicate` when
|
|
1057
1057
|
* given), else null — the lazy by-name reference every cross-object link that must survive a
|
|
1058
1058
|
* Restart uses (an emitter's gateCounter, a LiveChart source). Handles are fresh at registration
|
|
1059
|
-
* and never survive
|
|
1059
|
+
* and never survive a re-link, so the reference is a NAME resolved against the registry at use
|
|
1060
1060
|
* time. The CALLER decides whether null is FAIL-LOUD (the emission gate throws; a LiveChart
|
|
1061
1061
|
* retries next scan).
|
|
1062
1062
|
* @param {string} name @param {Function} [predicate] @returns {Object|null}
|
|
@@ -2393,7 +2393,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
|
|
|
2393
2393
|
var msg = 'FrqtlApp: the DISPLAY SLOT is empty (FrqtlDisplay.get() === null).\n\n' +
|
|
2394
2394
|
'The boot module (lib/frqtl/experiments/_shared/boot.js) must select a renderer\n' +
|
|
2395
2395
|
'BEFORE the draw loop fires. This is a page configuration error.\n\n' +
|
|
2396
|
-
'P5Renderer has been removed
|
|
2396
|
+
'P5Renderer has been removed. All experiment pages\n' +
|
|
2397
2397
|
'boot the canonical RendererProvider stack through bootPage().';
|
|
2398
2398
|
if (typeof document === 'undefined') {
|
|
2399
2399
|
// No DOM to paint the overlay into — the message is still LOUD, on the console
|
|
@@ -74,7 +74,10 @@ import { ObjectSchema } from './schema/index.js';
|
|
|
74
74
|
import { kindOf } from './kinds.js';
|
|
75
75
|
import { linkProject } from '../../shim/project/link.js';
|
|
76
76
|
import { patchParts, PARTS_EXPORT, entryKeys, entryLiteral } from '../../shim/project/parts-writer.js';
|
|
77
|
-
import { moduleOfKind } from '../../shim/project/parts-module.js';
|
|
77
|
+
import { moduleOfKind, PARTS_SPECIFIER } from '../../shim/project/parts-module.js';
|
|
78
|
+
import { forkPartText, FORK_REFUSED } from '../../shim/project/fork.js';
|
|
79
|
+
import { readText } from '../../shim/project/read-text.js';
|
|
80
|
+
import { packageRoot } from '../compat/package-root.js';
|
|
78
81
|
import { MANIFEST_FILE } from '../../shim/project/manifest.js';
|
|
79
82
|
import { Record, openRecordOf } from './record/Record.js';
|
|
80
83
|
|
|
@@ -463,6 +466,7 @@ import { Record, openRecordOf } from './record/Record.js';
|
|
|
463
466
|
_requireWorld(this);
|
|
464
467
|
_requireHeld(this, 'toSketch');
|
|
465
468
|
var by = this._record ? Record.requireBy(opts && opts.by, 'RecipeContext.toSketch') : null;
|
|
469
|
+
if (this._record) { this._record._admit('RecipeContext.toSketch'); }
|
|
466
470
|
var self = this;
|
|
467
471
|
var runner = this._runner;
|
|
468
472
|
var declared = runner.declared;
|
|
@@ -654,6 +658,7 @@ import { Record, openRecordOf } from './record/Record.js';
|
|
|
654
658
|
_requireWorld(this);
|
|
655
659
|
_requireHeld(this, 'setDeclared');
|
|
656
660
|
var by = this._record ? Record.requireBy(opts && opts.by, 'RecipeContext.setDeclared') : null;
|
|
661
|
+
if (this._record) { this._record._admit('RecipeContext.setDeclared'); }
|
|
657
662
|
var runner = this._runner;
|
|
658
663
|
var obj = null;
|
|
659
664
|
this._parts.forEach(function (row, o) { if (row.key === name) { obj = o; } });
|
|
@@ -724,6 +729,106 @@ import { Record, openRecordOf } from './record/Record.js';
|
|
|
724
729
|
return { set: name, from: from, to: to, tick: 0, kept: kept, files: Object.assign({}, files) };
|
|
725
730
|
};
|
|
726
731
|
|
|
732
|
+
/**
|
|
733
|
+
* exp.fork(name, NewKind[, { by }]) → Promise<{ fork, file, from, files }> — copy the part file of `inParts` object
|
|
734
|
+
* `name`'s kind into the project as `parts/<NewKind>.js` (lib/shim/project/fork.js forkPartText: the class renamed,
|
|
735
|
+
* its imports rewritten to package specifiers, every other byte the source's), point the entry at the fork (the
|
|
736
|
+
* parts writer's `kind` edit: the Kind identifier and one import line), and re-run the scene IN THIS DOCUMENT
|
|
737
|
+
* through the one restart door, as setDeclared does: the seed and the camera pose are kept, the loop's run state
|
|
738
|
+
* is kept. The source text is the exact bytes the kind's `from` names: a package part's file (read through
|
|
739
|
+
* read-text.js readText), or a project fork's held file. The held project is updated BEFORE the re-run, so an open
|
|
740
|
+
* Record stays open; with one open, `by` is required and its `fork` row ({ from: <kind>, to: { kind, file } }) is
|
|
741
|
+
* written after the re-run. REFUSES (throws, the held text unchanged): a name that is not an `inParts` object, a
|
|
742
|
+
* hand made since the last toSketch that is unwritten, a kind with no file a fork can copy, every forkPartText
|
|
743
|
+
* refusal, a writer refusal, and a re-run whose entry is not the fork.
|
|
744
|
+
*/
|
|
745
|
+
/**
|
|
746
|
+
* The fork's plan for `inParts` object `name`, before any read: { obj, from, row, module }. THROWS the refusal
|
|
747
|
+
* fork() and forkRefusal() both name: not an `inParts` object, an unwritten hand, a kind FORK_REFUSED names
|
|
748
|
+
* (lib/shim/project/fork.js, the census reason), a kind with no part file a fork can copy.
|
|
749
|
+
*/
|
|
750
|
+
function _forkPlan(self, name) {
|
|
751
|
+
var runner = self._runner;
|
|
752
|
+
var obj = null;
|
|
753
|
+
self._parts.forEach(function (row, o) { if (row.key === name) { obj = o; } });
|
|
754
|
+
if (!obj || runner.declared.indexOf(obj) === -1) {
|
|
755
|
+
throw new Error('[RecipeContext.fork] "' + name + '" is not an object of this sketch\'s `parts` block' +
|
|
756
|
+
(self._code.size ? ' (code declarations: ' + Array.from(self._code.keys()).map(function (o) { return o.name; }).join(', ') +
|
|
757
|
+
' — ' + OUTSIDE_PARTS + ')' : '') + '. (FAIL-LOUD.)');
|
|
758
|
+
}
|
|
759
|
+
var unwritten = _unwrittenHands(self);
|
|
760
|
+
if (unwritten.length) {
|
|
761
|
+
throw new Error('[RecipeContext.fork] "' + unwritten.join('", "') + '" carries a hand the sketch text does ' +
|
|
762
|
+
'not hold yet — write the hand first: await exp.toSketch(). (FAIL-LOUD.)');
|
|
763
|
+
}
|
|
764
|
+
var from = runner.kindOf(obj);
|
|
765
|
+
if (Object.prototype.hasOwnProperty.call(FORK_REFUSED, from)) {
|
|
766
|
+
throw new Error('[RecipeContext.fork] ' + from + ' (the kind of "' + name + '") is not forkable — ' + FORK_REFUSED[from] + '. (FAIL-LOUD.)');
|
|
767
|
+
}
|
|
768
|
+
var row = kindOf(from);
|
|
769
|
+
var module = row ? moduleOfKind(row.from, self._urls) : null;
|
|
770
|
+
if (module !== PARTS_SPECIFIER && !(module && Object.prototype.hasOwnProperty.call(self._project.files, module))) {
|
|
771
|
+
throw new Error('[RecipeContext.fork] ' + from + ' (the kind of "' + name + '") has no part file a fork can copy — a fork ' +
|
|
772
|
+
'copies a part of @descix/frqtl-web/parts or a part file of this project. (FAIL-LOUD.)');
|
|
773
|
+
}
|
|
774
|
+
return { obj: obj, from: from, row: row, module: module };
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
/**
|
|
778
|
+
* exp.forkRefusal(name) → null when exp.fork(name, …) may run, else the refusal it would throw (one sentence). A
|
|
779
|
+
* host's "Fork into project" control reads it for its disabled state and title; fork() runs the same plan.
|
|
780
|
+
*/
|
|
781
|
+
RecipeContext.prototype.forkRefusal = function (name) {
|
|
782
|
+
_requireWorld(this);
|
|
783
|
+
_requireHeld(this, 'forkRefusal');
|
|
784
|
+
try { _forkPlan(this, name); return null; }
|
|
785
|
+
catch (err) { return String(err && err.message).replace(/^\[RecipeContext\.fork\] /, '').replace(/ \(FAIL-LOUD\.\)$/, ''); }
|
|
786
|
+
};
|
|
787
|
+
|
|
788
|
+
RecipeContext.prototype.fork = async function (name, NewKind, opts) {
|
|
789
|
+
_requireWorld(this);
|
|
790
|
+
_requireHeld(this, 'fork');
|
|
791
|
+
var by = this._record ? Record.requireBy(opts && opts.by, 'RecipeContext.fork') : null;
|
|
792
|
+
if (this._record) { this._record._admit('RecipeContext.fork'); }
|
|
793
|
+
var runner = this._runner;
|
|
794
|
+
var plan = _forkPlan(this, name);
|
|
795
|
+
var from = plan.from, row = plan.row, module = plan.module;
|
|
796
|
+
var text, libPath;
|
|
797
|
+
if (module === PARTS_SPECIFIER) {
|
|
798
|
+
libPath = row.from.slice(packageRoot().length);
|
|
799
|
+
try { text = await readText(row.from); }
|
|
800
|
+
catch (err) { throw new Error('[RecipeContext.fork] the part file of ' + from + ': ' + ((err && err.message) || err) + '. (FAIL-LOUD.)'); }
|
|
801
|
+
} else {
|
|
802
|
+
libPath = module;
|
|
803
|
+
text = this._project.files[module];
|
|
804
|
+
}
|
|
805
|
+
var forked = forkPartText(text, { from: from, to: NewKind, libPath: libPath, files: this._project.files });
|
|
806
|
+
var file = 'parts/' + NewKind + '.js';
|
|
807
|
+
var entry = this._project.entry;
|
|
808
|
+
var r = patchParts(this._project.files[entry], [{ op: 'kind', name: name, Kind: NewKind, module: file }], { entry: entry });
|
|
809
|
+
if (r.refused.length) {
|
|
810
|
+
throw new Error('[RecipeContext.fork] the sketch text refused the fork: ' +
|
|
811
|
+
r.refused.map(function (x) { return x.reason; }).join('; ') + ' (FAIL-LOUD.)');
|
|
812
|
+
}
|
|
813
|
+
var files = Object.assign({}, this._project.files);
|
|
814
|
+
files[file] = forked.text;
|
|
815
|
+
files[entry] = r.text;
|
|
816
|
+
this._project = Object.assign({}, this._project, { files: files });
|
|
817
|
+
var pose = _cameraPose(runner);
|
|
818
|
+
var wasRunning = !!runner._isLooping;
|
|
819
|
+
await runner.restart();
|
|
820
|
+
if (!wasRunning) { runner.stop(); }
|
|
821
|
+
if (pose && runner.cameraControl && typeof runner.cameraControl.setOrbit === 'function') { runner.cameraControl.setOrbit(pose); }
|
|
822
|
+
var rebuilt = null;
|
|
823
|
+
this._parts.forEach(function (row2, o) { if (row2.key === name) { rebuilt = o; } });
|
|
824
|
+
if (!rebuilt || runner.kindOf(rebuilt) !== NewKind) {
|
|
825
|
+
throw new Error('[RecipeContext.fork] the re-run declared "' + name + '" as ' + (rebuilt ? runner.kindOf(rebuilt) : 'nothing') +
|
|
826
|
+
', not the fork ' + NewKind + '. (FAIL-LOUD.)');
|
|
827
|
+
}
|
|
828
|
+
if (this._record) { this._record._row({ name: name, op: 'fork', by: by, from: from, to: { kind: NewKind, file: file } }); }
|
|
829
|
+
return { fork: NewKind, file: file, from: from, files: Object.assign({}, files) };
|
|
830
|
+
};
|
|
831
|
+
|
|
727
832
|
RecipeContext.prototype.addTickFunction = function (fn) {
|
|
728
833
|
_requireWorld(this);
|
|
729
834
|
var fns = this._runner.universe.experimentTickFunctions;
|
|
@@ -128,7 +128,7 @@ import { compileWallV2 } from '../objects/actionCompiler.js';
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
// ── Presets (B6) — pure CONSTRUCTION sugar expanding to the v2 descriptor fields.
|
|
131
|
-
// The
|
|
131
|
+
// The parts writer captures the EXPANDED fields (never the preset name).
|
|
132
132
|
//
|
|
133
133
|
// THE NAMING RULE: a preset's NAME MUST ASSERT ITS BEHAVIOR.
|
|
134
134
|
// `collisionBehavior:'nothing'` (pass-through) belongs ONLY on a preset whose name SAYS
|
|
@@ -71,29 +71,6 @@ import { loadedWasmSha256 } from '../../compat/providers/wasm-load-browser.js';
|
|
|
71
71
|
import * as FrqtlDisplay from '../../compat/renderer/display-slot.js';
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
/**
|
|
75
|
-
* The experiment identity the page ALREADY carries, ferried — not a second authority.
|
|
76
|
-
*
|
|
77
|
-
* The experiments registry DEFINES an experiment id as "the directory name under
|
|
78
|
-
* experiments/" (`experimentById`), and a canonical page is served from
|
|
79
|
-
* `…/experiments/<id>/index.html`. So the path segment IS the registry id, and reading it
|
|
80
|
-
* ferries the existing identity rather than minting a parallel one. The registry module
|
|
81
|
-
* is a registry, not a page fact, which is why the id is taken from the URL the registry's
|
|
82
|
-
* own ids are defined by.
|
|
83
|
-
*
|
|
84
|
-
* Fails SOFT to null (no DOM, a notebook realm, an ad-hoc page): `sourceRef: null` is the
|
|
85
|
-
* honest "this scene has no authored identity" value, and the corpus row then carries the
|
|
86
|
-
* code itself. A caller with a better identity overrides via `setSourceRef()`.
|
|
87
|
-
* @private
|
|
88
|
-
*/
|
|
89
|
-
function _defaultSourceRef() {
|
|
90
|
-
try {
|
|
91
|
-
if (typeof location === 'undefined' || !location) { return null; }
|
|
92
|
-
var m = String(location.pathname).match(/\/experiments\/([^/]+)\//);
|
|
93
|
-
return (m && m[1]) ? m[1] : null;
|
|
94
|
-
} catch (e) { return null; }
|
|
95
|
-
}
|
|
96
|
-
|
|
97
74
|
/**
|
|
98
75
|
* The RASTER PATH pin — which GL backend this browser actually rasters with.
|
|
99
76
|
*
|
|
@@ -207,7 +184,7 @@ import * as FrqtlDisplay from '../../compat/renderer/display-slot.js';
|
|
|
207
184
|
// harness via setSourceRef(). null is HONEST (an ad-hoc universe); the corpus row then
|
|
208
185
|
// carries the code itself. Never per-capture caller-supplied provenance.
|
|
209
186
|
this._sourceRef = (identity.sourceRef === undefined || identity.sourceRef === null)
|
|
210
|
-
?
|
|
187
|
+
? null : String(identity.sourceRef);
|
|
211
188
|
// The code identity (setSourceSha256) — null until a door that linked a project registers it.
|
|
212
189
|
this._sourceSha256 = null;
|
|
213
190
|
// Memo for the content-addressed SceneRecord — see sceneRecord().
|