@forgeax/engine-assets-runtime 0.1.4 → 0.1.6
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/README.md +442 -175
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/aabb.unit.test.d.ts +2 -0
- package/dist/__tests__/aabb.unit.test.d.ts.map +1 -0
- package/dist/__tests__/artifact-integrity.unit.test.d.ts +2 -0
- package/dist/__tests__/artifact-integrity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/artifact-io.unit.test.d.ts +2 -0
- package/dist/__tests__/artifact-io.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts +2 -0
- package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts.map +1 -0
- package/dist/__tests__/asset-evidence.unit.test.d.ts +2 -0
- package/dist/__tests__/asset-evidence.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-kind.unit.test.d.ts +2 -0
- package/dist/__tests__/asset-kind.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-catalog.unit.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-catalog.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts +2 -0
- package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/catalog-replica.unit.test.d.ts +2 -0
- package/dist/__tests__/catalog-replica.unit.test.d.ts.map +1 -0
- package/dist/__tests__/catalog-source-v2.unit.test.d.ts +2 -0
- package/dist/__tests__/catalog-source-v2.unit.test.d.ts.map +1 -0
- package/dist/__tests__/catalog-source.unit.test.d.ts +2 -0
- package/dist/__tests__/catalog-source.unit.test.d.ts.map +1 -0
- package/dist/__tests__/catalog-subscription-order.unit.test.d.ts +2 -0
- package/dist/__tests__/catalog-subscription-order.unit.test.d.ts.map +1 -0
- package/dist/__tests__/catalog-subscription.unit.test.d.ts +2 -0
- package/dist/__tests__/catalog-subscription.unit.test.d.ts.map +1 -0
- package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts +2 -0
- package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts.map +1 -0
- package/dist/__tests__/decode-image-bytes.browser.test.d.ts +2 -0
- package/dist/__tests__/decode-image-bytes.browser.test.d.ts.map +1 -0
- package/dist/__tests__/decode-image-bytes.test-d.d.ts +2 -0
- package/dist/__tests__/decode-image-bytes.test-d.d.ts.map +1 -0
- package/dist/__tests__/decode-image-bytes.test.d.ts +2 -0
- package/dist/__tests__/decode-image-bytes.test.d.ts.map +1 -0
- package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
- package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/errors-asset.unit.test.d.ts +2 -0
- package/dist/__tests__/errors-asset.unit.test.d.ts.map +1 -0
- package/dist/__tests__/inline-pack-loaders.unit.test.d.ts +2 -0
- package/dist/__tests__/inline-pack-loaders.unit.test.d.ts.map +1 -0
- package/dist/__tests__/instantiate-context.unit.test.d.ts +2 -0
- package/dist/__tests__/instantiate-context.unit.test.d.ts.map +1 -0
- package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts +2 -0
- package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts.map +1 -0
- package/dist/__tests__/instantiate.unit.test.d.ts +2 -0
- package/dist/__tests__/instantiate.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loader-input-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/loader-input-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loader-registry.unit.test.d.ts +2 -0
- package/dist/__tests__/loader-registry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts +2 -0
- package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-generation-cache.unit.test.d.ts +2 -0
- package/dist/__tests__/material-generation-cache.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-load-consumer.test-d.d.ts +2 -0
- package/dist/__tests__/material-load-consumer.test-d.d.ts.map +1 -0
- package/dist/__tests__/material-ready.integration.test.d.ts +2 -0
- package/dist/__tests__/material-ready.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-stale-generation.unit.test.d.ts +2 -0
- package/dist/__tests__/material-stale-generation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin-morph-v3.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin-morph-v3.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mipmap-generator.unit.test.d.ts +2 -0
- package/dist/__tests__/mipmap-generator.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts +2 -0
- package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts.map +1 -0
- package/dist/__tests__/pack-basis-load.integration.test.d.ts +2 -0
- package/dist/__tests__/pack-basis-load.integration.test.d.ts.map +1 -0
- package/dist/__tests__/payload-validate.unit.test.d.ts +2 -0
- package/dist/__tests__/payload-validate.unit.test.d.ts.map +1 -0
- package/dist/__tests__/plugin.test.d.ts +2 -0
- package/dist/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/__tests__/registry-concurrency.bench.test.d.ts +2 -0
- package/dist/__tests__/registry-concurrency.bench.test.d.ts.map +1 -0
- package/dist/__tests__/registry-failure-retry.integration.test.d.ts +2 -0
- package/dist/__tests__/registry-failure-retry.integration.test.d.ts.map +1 -0
- package/dist/__tests__/registry-load-graph.integration.test.d.ts +2 -0
- package/dist/__tests__/registry-load-graph.integration.test.d.ts.map +1 -0
- package/dist/__tests__/registry-load-state.unit.test.d.ts +2 -0
- package/dist/__tests__/registry-load-state.unit.test.d.ts.map +1 -0
- package/dist/__tests__/registry-package-cache.unit.test.d.ts +2 -0
- package/dist/__tests__/registry-package-cache.unit.test.d.ts.map +1 -0
- package/dist/__tests__/registry-public-ready.unit.test.d.ts +2 -0
- package/dist/__tests__/registry-public-ready.unit.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
- package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scene-handle-fields.unit.test.d.ts +2 -0
- package/dist/__tests__/scene-handle-fields.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scene-payload.unit.test.d.ts +2 -0
- package/dist/__tests__/scene-payload.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scene-publication-fence.test.d.ts +2 -0
- package/dist/__tests__/scene-publication-fence.test.d.ts.map +1 -0
- package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/static-rig.integration.test.d.ts +2 -0
- package/dist/__tests__/static-rig.integration.test.d.ts.map +1 -0
- package/dist/__tests__/validate-material.unit.test.d.ts +2 -0
- package/dist/__tests__/validate-material.unit.test.d.ts.map +1 -0
- package/dist/__tests__/video-pack-loader.integration.test.d.ts +2 -0
- package/dist/__tests__/video-pack-loader.integration.test.d.ts.map +1 -0
- package/dist/aabb.d.ts +3 -0
- package/dist/aabb.d.ts.map +1 -0
- package/dist/asset-registry.d.ts +552 -0
- package/dist/asset-registry.d.ts.map +1 -0
- package/dist/builtin-asset-registry.d.ts +22 -0
- package/dist/builtin-asset-registry.d.ts.map +1 -0
- package/dist/catalog-source.d.ts +2 -1
- package/dist/catalog-source.d.ts.map +1 -1
- package/dist/decode-image-bytes.d.ts +57 -0
- package/dist/decode-image-bytes.d.ts.map +1 -0
- package/dist/dynamic-texture-store.d.ts +89 -0
- package/dist/dynamic-texture-store.d.ts.map +1 -0
- package/dist/errors/asset.d.ts +201 -0
- package/dist/errors/asset.d.ts.map +1 -0
- package/dist/handles.d.ts +141 -0
- package/dist/handles.d.ts.map +1 -0
- package/dist/image-error.d.ts +6 -0
- package/dist/image-error.d.ts.map +1 -0
- package/dist/index.d.ts +32 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +7218 -114
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/loader-registry.d.ts +63 -0
- package/dist/loader-registry.d.ts.map +1 -0
- package/dist/loaders/inline-pack.d.ts +72 -0
- package/dist/loaders/inline-pack.d.ts.map +1 -0
- package/dist/loaders/mesh-bin.d.ts +21 -0
- package/dist/loaders/mesh-bin.d.ts.map +1 -0
- package/dist/loaders/pack-artifact.d.ts +20 -0
- package/dist/loaders/pack-artifact.d.ts.map +1 -0
- package/dist/material/dependency-graph.d.ts +9 -0
- package/dist/material/dependency-graph.d.ts.map +1 -0
- package/dist/material/generation-cache.d.ts +24 -0
- package/dist/material/generation-cache.d.ts.map +1 -0
- package/dist/material/inspection.d.ts +24 -0
- package/dist/material/inspection.d.ts.map +1 -0
- package/dist/material/loader.d.ts +59 -0
- package/dist/material/loader.d.ts.map +1 -0
- package/dist/material/runtime-shader.d.ts +14 -0
- package/dist/material/runtime-shader.d.ts.map +1 -0
- package/dist/mesh-bin.d.ts +3 -0
- package/dist/mesh-bin.d.ts.map +1 -0
- package/dist/mipmap-generator.d.ts +132 -0
- package/dist/mipmap-generator.d.ts.map +1 -0
- package/dist/payload-validate.d.ts +60 -0
- package/dist/payload-validate.d.ts.map +1 -0
- package/dist/plugin.d.ts +16 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/registry/artifact-io.d.ts +16 -0
- package/dist/registry/artifact-io.d.ts.map +1 -0
- package/dist/registry/asset-evidence.d.ts +13 -0
- package/dist/registry/asset-evidence.d.ts.map +1 -0
- package/dist/registry/catalog-state.d.ts +47 -0
- package/dist/registry/catalog-state.d.ts.map +1 -0
- package/dist/registry/catalog.d.ts +48 -0
- package/dist/registry/catalog.d.ts.map +1 -0
- package/dist/registry/instantiate.d.ts +153 -0
- package/dist/registry/instantiate.d.ts.map +1 -0
- package/dist/registry/load-by-guid.d.ts +247 -0
- package/dist/registry/load-by-guid.d.ts.map +1 -0
- package/dist/registry/load-state.d.ts +26 -0
- package/dist/registry/load-state.d.ts.map +1 -0
- package/dist/registry/runtime-projection.d.ts +16 -0
- package/dist/registry/runtime-projection.d.ts.map +1 -0
- package/dist/registry/scene-publication-fence.d.ts +38 -0
- package/dist/registry/scene-publication-fence.d.ts.map +1 -0
- package/dist/registry/validate-material.d.ts +77 -0
- package/dist/registry/validate-material.d.ts.map +1 -0
- package/dist/resolve-asset-handle.d.ts +43 -0
- package/dist/resolve-asset-handle.d.ts.map +1 -0
- package/dist/resolve-tileset-runtime.d.ts +23 -0
- package/dist/resolve-tileset-runtime.d.ts.map +1 -0
- package/dist/scene-handle-fields.d.ts +88 -0
- package/dist/scene-handle-fields.d.ts.map +1 -0
- package/dist/scene-payload.d.ts +15 -0
- package/dist/scene-payload.d.ts.map +1 -0
- package/dist/wire-default-loaders.d.ts +29 -0
- package/dist/wire-default-loaders.d.ts.map +1 -0
- package/package.json +22 -9
- package/src/__tests__/aabb.unit.test.ts +97 -0
- package/src/__tests__/artifact-integrity.unit.test.ts +99 -0
- package/src/__tests__/artifact-io.unit.test.ts +127 -0
- package/src/__tests__/asset-evidence-sdk.integration.test.ts +32 -0
- package/src/__tests__/asset-evidence.unit.test.ts +32 -0
- package/src/__tests__/{asset-kind.test.ts → asset-kind.unit.test.ts} +1 -1
- package/src/__tests__/asset-registry-catalog-reconcile.integration.test.ts +74 -0
- package/src/__tests__/asset-registry-catalog-reconcile.unit.test.ts +89 -0
- package/src/__tests__/asset-registry-catalog.unit.test.ts +170 -0
- package/src/__tests__/asset-registry.pack-cache.test.ts +96 -0
- package/src/__tests__/asset-registry.unit.test.ts +511 -0
- package/src/__tests__/asset-runtime-error-code-owner.test-d.ts +63 -0
- package/src/__tests__/catalog-replica.unit.test.ts +196 -0
- package/src/__tests__/catalog-source-v2.unit.test.ts +158 -0
- package/src/__tests__/catalog-source.unit.test.ts +126 -0
- package/src/__tests__/catalog-subscription-order.unit.test.ts +65 -0
- package/src/__tests__/catalog-subscription.unit.test.ts +28 -0
- package/src/__tests__/decode-image-bytes-pass-through.test.ts +34 -0
- package/src/__tests__/decode-image-bytes.browser.test.ts +102 -0
- package/src/__tests__/decode-image-bytes.test-d.ts +108 -0
- package/src/__tests__/decode-image-bytes.test.ts +90 -0
- package/src/__tests__/decode-image-mime-owner.test.ts +2 -5
- package/src/__tests__/dynamic-texture-store.unit.test.ts +115 -0
- package/src/__tests__/errors-asset.unit.test.ts +92 -0
- package/src/__tests__/inline-pack-loaders.unit.test.ts +548 -0
- package/src/__tests__/instantiate-context.unit.test.ts +65 -0
- package/src/__tests__/instantiate-publication-fence.unit.test.ts +158 -0
- package/src/__tests__/instantiate.unit.test.ts +684 -0
- package/src/__tests__/loader-input-contract.unit.test.ts +89 -0
- package/src/__tests__/loader-registry.unit.test.ts +101 -0
- package/src/__tests__/material-dependency-invalidation.unit.test.ts +14 -0
- package/src/__tests__/material-generation-cache.unit.test.ts +46 -0
- package/src/__tests__/material-load-consumer.test-d.ts +42 -0
- package/src/__tests__/material-ready.integration.test.ts +492 -0
- package/src/__tests__/material-stale-generation.unit.test.ts +152 -0
- package/src/__tests__/mesh-bin-morph-v3.test.ts +22 -0
- package/src/__tests__/mesh-bin.unit.test.ts +152 -0
- package/src/__tests__/mipmap-generator.unit.test.ts +202 -0
- package/src/__tests__/pack-artifact-transcode-model-owner.test.ts +32 -0
- package/src/__tests__/pack-basis-load.integration.test.ts +168 -0
- package/src/__tests__/payload-validate.unit.test.ts +285 -0
- package/src/__tests__/plugin.test.ts +55 -0
- package/src/__tests__/registry-concurrency.bench.test.ts +40 -0
- package/src/__tests__/registry-failure-retry.integration.test.ts +69 -0
- package/src/__tests__/registry-load-graph.integration.test.ts +246 -0
- package/src/__tests__/registry-load-state.unit.test.ts +35 -0
- package/src/__tests__/registry-package-cache.unit.test.ts +53 -0
- package/src/__tests__/registry-public-ready.unit.test.ts +38 -0
- package/src/__tests__/resolve-asset-handle.unit.test.ts +238 -0
- package/src/__tests__/scene-handle-fields.unit.test.ts +129 -0
- package/src/__tests__/scene-payload.unit.test.ts +151 -0
- package/src/__tests__/scene-publication-fence.test.ts +129 -0
- package/src/__tests__/scriptable-pack-public-surface.test-d.ts +16 -0
- package/src/__tests__/static-rig.integration.test.ts +8 -0
- package/src/__tests__/validate-material.unit.test.ts +359 -0
- package/src/__tests__/video-pack-loader.integration.test.ts +83 -0
- package/src/aabb.ts +107 -0
- package/src/asset-registry.ts +2040 -0
- package/src/builtin-asset-registry.ts +164 -0
- package/src/catalog-source.ts +14 -70
- package/src/decode-image-bytes.ts +126 -0
- package/src/dynamic-texture-store.ts +234 -0
- package/src/errors/asset.ts +347 -0
- package/src/handles.ts +180 -0
- package/src/image-error.ts +45 -0
- package/src/index.ts +177 -19
- package/src/internal.ts +1 -0
- package/src/loader-registry.ts +157 -0
- package/src/loaders/inline-pack.ts +837 -0
- package/src/loaders/mesh-bin.ts +304 -0
- package/src/loaders/pack-artifact.ts +665 -0
- package/src/material/dependency-graph.ts +46 -0
- package/src/material/generation-cache.ts +177 -0
- package/src/material/inspection.ts +46 -0
- package/src/material/loader.ts +326 -0
- package/src/material/runtime-shader.ts +133 -0
- package/src/mesh-bin.ts +5 -0
- package/src/mipmap-generator.ts +450 -0
- package/src/payload-validate.ts +573 -0
- package/src/plugin.ts +48 -0
- package/src/registry/artifact-io.ts +259 -0
- package/src/registry/asset-evidence.ts +51 -0
- package/src/registry/catalog-state.ts +409 -0
- package/src/registry/catalog.ts +369 -0
- package/src/registry/instantiate.ts +1056 -0
- package/src/registry/load-by-guid.ts +1657 -0
- package/src/registry/load-state.ts +115 -0
- package/src/registry/runtime-projection.ts +63 -0
- package/src/registry/scene-publication-fence.ts +256 -0
- package/src/registry/validate-material.ts +386 -0
- package/src/resolve-asset-handle.ts +147 -0
- package/src/resolve-tileset-runtime.ts +72 -0
- package/src/scene-handle-fields.ts +221 -0
- package/src/scene-payload.ts +207 -0
- package/src/wire-default-loaders.ts +79 -0
- package/dist/__tests__/asset-graph-red.integration.test.d.ts +0 -2
- package/dist/__tests__/asset-graph-red.integration.test.d.ts.map +0 -1
- package/dist/__tests__/asset-kind.test.d.ts +0 -2
- package/dist/__tests__/asset-kind.test.d.ts.map +0 -1
- package/dist/__tests__/asset-registry-core.integration.test.d.ts +0 -2
- package/dist/__tests__/asset-registry-core.integration.test.d.ts.map +0 -1
- package/dist/__tests__/asset-registry-public-api.test-d.d.ts +0 -2
- package/dist/__tests__/asset-registry-public-api.test-d.d.ts.map +0 -1
- package/dist/__tests__/asset-runtime-core-lifecycle.integration.test.d.ts +0 -2
- package/dist/__tests__/asset-runtime-core-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/__tests__/asset-runtime-snapshot.unit.test.d.ts +0 -2
- package/dist/__tests__/asset-runtime-snapshot.unit.test.d.ts.map +0 -1
- package/dist/__tests__/catalog-session-red.unit.test.d.ts +0 -2
- package/dist/__tests__/catalog-session-red.unit.test.d.ts.map +0 -1
- package/dist/__tests__/registry-lifecycle-red.integration.test.d.ts +0 -2
- package/dist/__tests__/registry-lifecycle-red.integration.test.d.ts.map +0 -1
- package/src/__tests__/asset-graph-red.integration.test.ts +0 -113
- package/src/__tests__/asset-registry-core.integration.test.ts +0 -161
- package/src/__tests__/asset-registry-public-api.test-d.ts +0 -31
- package/src/__tests__/asset-runtime-core-lifecycle.integration.test.ts +0 -79
- package/src/__tests__/asset-runtime-snapshot.unit.test.ts +0 -23
- package/src/__tests__/catalog-session-red.unit.test.ts +0 -276
- package/src/__tests__/registry-lifecycle-red.integration.test.ts +0 -80
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AssetEvidence, type AssetEvidenceError, type AssetEvidenceInputs, type Result } from '@forgeax/engine-types';
|
|
2
|
+
/** Host-injected runtime bridge; the adapter never imports CLI, Vite, or Node policy. */
|
|
3
|
+
export interface RuntimeEvidenceSource {
|
|
4
|
+
readonly evidence: (guid: string) => Promise<AssetEvidenceInputs | Result<AssetEvidenceInputs, AssetEvidenceError>>;
|
|
5
|
+
}
|
|
6
|
+
/** Runtime SDK view over the shared AssetEvidence projector. */
|
|
7
|
+
export interface RuntimeAssetEvidenceAdapter {
|
|
8
|
+
readonly inspect: (guid: string) => Promise<Result<AssetEvidence, AssetEvidenceError>>;
|
|
9
|
+
readonly verifyByGuid: (guid: string) => Promise<Result<AssetEvidence, AssetEvidenceError>>;
|
|
10
|
+
}
|
|
11
|
+
/** Create an adapter; omitted source intentionally returns capability-missing errors. */
|
|
12
|
+
export declare function createRuntimeAssetEvidenceAdapter(source?: RuntimeEvidenceSource): RuntimeAssetEvidenceAdapter;
|
|
13
|
+
//# sourceMappingURL=asset-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-evidence.d.ts","sourceRoot":"","sources":["../../src/registry/asset-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGxB,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAE/B,yFAAyF;AACzF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,CACjB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,CAAC;CACrF;AAED,gEAAgE;AAChE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACvF,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAC7F;AAuBD,yFAAyF;AACzF,wBAAgB,iCAAiC,CAC/C,MAAM,CAAC,EAAE,qBAAqB,GAC7B,2BAA2B,CAI7B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-rhi';
|
|
2
|
+
import type { AssetError, CatalogDelta, CatalogDiagnostic, CatalogEntry } from '@forgeax/engine-types';
|
|
3
|
+
import type { CatalogSource } from '../catalog-source';
|
|
4
|
+
export interface CatalogReplicaSnapshot {
|
|
5
|
+
readonly version: number;
|
|
6
|
+
readonly entries: readonly CatalogEntry[];
|
|
7
|
+
readonly stale: boolean;
|
|
8
|
+
readonly diagnostics: readonly CatalogDiagnostic[];
|
|
9
|
+
}
|
|
10
|
+
type SnapshotResult = Result<CatalogReplicaSnapshot, AssetError>;
|
|
11
|
+
type CatalogDeltaListener = (delta: CatalogDelta) => void;
|
|
12
|
+
/**
|
|
13
|
+
* One authoritative catalog read model owned by AssetRegistry.
|
|
14
|
+
*
|
|
15
|
+
* The source subscription is installed before the first enumeration. Deltas
|
|
16
|
+
* observed during that baseline read are buffered and folded afterwards, so
|
|
17
|
+
* an early publication cannot disappear between the two operations.
|
|
18
|
+
*/
|
|
19
|
+
export declare class CatalogReplica {
|
|
20
|
+
private readonly source;
|
|
21
|
+
private readonly listeners;
|
|
22
|
+
private readonly entries;
|
|
23
|
+
private pendingBeforeBaseline;
|
|
24
|
+
private pendingDuringReconcile;
|
|
25
|
+
private unsubscribe;
|
|
26
|
+
private startPromise;
|
|
27
|
+
private baselineReady;
|
|
28
|
+
private version;
|
|
29
|
+
private stale;
|
|
30
|
+
private diagnostics;
|
|
31
|
+
private currentSnapshot;
|
|
32
|
+
private readonly expectedScope;
|
|
33
|
+
constructor(source: CatalogSource);
|
|
34
|
+
subscribe(listener: CatalogDeltaListener): () => void;
|
|
35
|
+
snapshot(): CatalogReplicaSnapshot;
|
|
36
|
+
dispose(): void;
|
|
37
|
+
start(): Promise<SnapshotResult>;
|
|
38
|
+
reconcile(): Promise<SnapshotResult>;
|
|
39
|
+
private loadBaseline;
|
|
40
|
+
private receive;
|
|
41
|
+
private fold;
|
|
42
|
+
private safeDelta;
|
|
43
|
+
private publish;
|
|
44
|
+
private makeSnapshot;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=catalog-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-state.d.ts","sourceRoot":"","sources":["../../src/registry/catalog-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACpD;AAED,KAAK,cAAc,GAAG,MAAM,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;AACjE,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAmM1D;;;;;;GAMG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,sBAAsB,CAA6B;IAC3D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkE;gBAEpF,MAAM,EAAE,aAAa;IAWjC,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAKrD,QAAQ,IAAI,sBAAsB;IAIlC,OAAO,IAAI,IAAI;IAST,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;IAahC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;YAQ5B,YAAY;IAuB1B,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,IAAI;IAiCZ,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,YAAY;CAYrB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-rhi';
|
|
2
|
+
import { type Asset, type AssetEnvelope, AssetError, type AssetPublicationEnvelope, type AssetRelation, type CatalogDiagnostic, type CatalogLifecycle, type CatalogProjection, type CatalogSubject, type CookExecution, type ProviderProvenance, type ResourceRevision, type RuntimeAssetBinding, type SourceOverrideDescriptor, type SourceOverrideMap } from '@forgeax/engine-types';
|
|
3
|
+
import type { AssetRegistry } from '../asset-registry';
|
|
4
|
+
/** Runtime catalog row parsed from the shared pack-index POD shape. */
|
|
5
|
+
export interface CatalogRecord {
|
|
6
|
+
readonly packageUrl: string;
|
|
7
|
+
readonly kind: string;
|
|
8
|
+
readonly authoring?: import('@forgeax/engine-types').AssetAuthoringCapability;
|
|
9
|
+
readonly name?: string;
|
|
10
|
+
readonly refs?: readonly string[];
|
|
11
|
+
readonly sourcePath?: string;
|
|
12
|
+
readonly cookReceiptUrl?: string;
|
|
13
|
+
readonly packageId?: string;
|
|
14
|
+
readonly provenance?: ProviderProvenance;
|
|
15
|
+
readonly revision?: ResourceRevision;
|
|
16
|
+
readonly sourceKey?: string;
|
|
17
|
+
readonly sourceIndex?: number;
|
|
18
|
+
readonly sourceOverrides?: SourceOverrideMap;
|
|
19
|
+
readonly sourceOverrideDescriptors?: readonly SourceOverrideDescriptor[];
|
|
20
|
+
readonly relations?: readonly AssetRelation[];
|
|
21
|
+
readonly diagnostics?: readonly CatalogDiagnostic[];
|
|
22
|
+
/** Producer-owned projection axes; never infer these from locators. */
|
|
23
|
+
readonly subject?: CatalogSubject;
|
|
24
|
+
readonly execution?: CookExecution;
|
|
25
|
+
readonly lifecycle?: CatalogLifecycle;
|
|
26
|
+
readonly projection?: CatalogProjection;
|
|
27
|
+
/** Complete producer publication tuple used by Scene publication fences. */
|
|
28
|
+
readonly publication?: AssetPublicationEnvelope;
|
|
29
|
+
}
|
|
30
|
+
/** Build the canonical row for an inline asset without inventing producer facts. */
|
|
31
|
+
export declare function createInlineCatalogRecord(envelope: AssetEnvelope<Asset>, name: string): CatalogRecord;
|
|
32
|
+
type CatalogFetch = (input: string, init?: {
|
|
33
|
+
readonly cache?: 'no-store';
|
|
34
|
+
}) => PromiseLike<{
|
|
35
|
+
readonly ok: boolean;
|
|
36
|
+
json(): Promise<unknown>;
|
|
37
|
+
}>;
|
|
38
|
+
/** Resolve a catalog entry URL against the configured pack-index URL. */
|
|
39
|
+
export declare function resolveCatalogAssetUrl(registry: AssetRegistry, packageUrl: string): string;
|
|
40
|
+
/** Parse the shared pack-index/catalog wire shape without loading payloads. */
|
|
41
|
+
export declare function parseCatalog(raw: unknown, resolveUrl?: (packageUrl: string) => string, expectedRevision?: ResourceRevision, expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>): Result<Map<string, CatalogRecord>, AssetError>;
|
|
42
|
+
/** Fetch and parse a catalog using the shared JSON/error boundary. */
|
|
43
|
+
export declare function fetchCatalog(url: string, fetch: CatalogFetch, resolveUrl?: (packageUrl: string) => string, expectedRevision?: ResourceRevision, expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>, requestInit?: {
|
|
44
|
+
readonly cache?: 'no-store';
|
|
45
|
+
}): Promise<Result<Map<string, CatalogRecord>, AssetError>>;
|
|
46
|
+
export declare function fetchPackIndex(registry: AssetRegistry): Promise<Result<Map<string, CatalogRecord>, AssetError>>;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/registry/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { EcsError, EntityHandle, World } from '@forgeax/engine-ecs';
|
|
2
|
+
import type { PackError } from '@forgeax/engine-pack/errors';
|
|
3
|
+
import { type Result } from '@forgeax/engine-rhi';
|
|
4
|
+
import { type Asset, AssetError, type Handle, type SceneAsset, type SceneInstanceMount, type SkinAsset, type TagOf } from '@forgeax/engine-types';
|
|
5
|
+
import type { AssetRegistry } from '../asset-registry';
|
|
6
|
+
import { type ScenePublicationFence, type ScenePublicationFenceError } from './scene-publication-fence';
|
|
7
|
+
/**
|
|
8
|
+
* Resolver contract consumed by {@link postSpawnResolveJoints} (D-1: relocated
|
|
9
|
+
* here from scene-instances/post-spawn-resolve-joints.ts so the hook contract
|
|
10
|
+
* travels with the instantiate cluster into @forgeax/engine-assets-runtime).
|
|
11
|
+
*/
|
|
12
|
+
export interface SkinJointResolver {
|
|
13
|
+
resolveSkinAsset(skeletonHandleRaw: number): SkinAsset | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Post-spawn hook contract (D-1). A hook runs after instantiate spawns the
|
|
17
|
+
* scene subtree; the shipped implementation is runtime's `postSpawnResolveJoints`
|
|
18
|
+
* (auto-wire Skin.joints). Injected at the sole production assembly point
|
|
19
|
+
* (createRenderer) in w9/w10; when absent, instantiate skips joint wiring.
|
|
20
|
+
*/
|
|
21
|
+
export type PostSpawnHook = (world: World, resolver: SkinJointResolver, root: EntityHandle) => {
|
|
22
|
+
ok: true;
|
|
23
|
+
} | {
|
|
24
|
+
ok: false;
|
|
25
|
+
error: unknown;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Materialise a `SceneAsset` into an existing `World` and return the
|
|
29
|
+
* synthetic root `Entity` (feat-20260514 w31 sugar wrapper; AC-03 +
|
|
30
|
+
* requirements §IN-3; M3: returns Entity not SceneInstanceId).
|
|
31
|
+
*
|
|
32
|
+
* Before spawning, handle-type component fields (e.g. `assetHandle`,
|
|
33
|
+
* `material`, `skeleton`) containing GUID strings are resolved to fresh
|
|
34
|
+
* user-tier `Handle` numbers via `world.allocSharedRef` (feat-20260614 M8
|
|
35
|
+
* D-19 instantiate-time GUID->handle mint; supersedes the pre-D-17
|
|
36
|
+
* `resolveGuid` map). GUIDs that fail to parse or are not catalogued return
|
|
37
|
+
* `AssetError(code='asset-not-found')` with a hint containing the GUID,
|
|
38
|
+
* node localId, and field name.
|
|
39
|
+
*
|
|
40
|
+
* Errors propagate verbatim through the closed
|
|
41
|
+
* `AssetError | PackError | EcsError` union so AI users that already
|
|
42
|
+
* narrow `loadByGuid<SceneAsset>` results reuse the same `switch
|
|
43
|
+
* (err.code)` exhaustively (charter proposition 3 machine-readable
|
|
44
|
+
* union; plan-strategy §3.3 closed-union transparency).
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const sceneRes = await engine.assets.loadByGuid<SceneAsset>(roomGuid); // payload (D-17)
|
|
49
|
+
* if (!sceneRes.ok) return;
|
|
50
|
+
* const handle = world.allocSharedRef('SceneAsset', sceneRes.value); // mint column handle
|
|
51
|
+
* const r = engine.assets.instantiate(handle, world);
|
|
52
|
+
* if (!r.ok) {
|
|
53
|
+
* switch (r.error.code) {
|
|
54
|
+
* case 'asset-not-found':
|
|
55
|
+
* case 'pack-cyclic-reference':
|
|
56
|
+
* // ... AssetErrorCode | PackErrorCode | EcsErrorCode exhaustive
|
|
57
|
+
* }
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function instantiate<T extends SceneAsset>(registry: AssetRegistry, handle: Handle<TagOf<T>, 'shared'>, world: World, parent?: EntityHandle, expectedPublication?: ScenePublicationFence): Result<EntityHandle, AssetError | PackError | EcsError | ScenePublicationFenceError>;
|
|
62
|
+
/**
|
|
63
|
+
* Materialise a `SceneAsset` FLAT into an existing `World` — the "edit the
|
|
64
|
+
* scene itself" registry entry (#655). Shares the GUID-resolution + shared-ref +
|
|
65
|
+
* SceneAssetResolver prelude with {@link instantiate}, but calls
|
|
66
|
+
* `worldInstantiateSceneFlat` instead of `worldInstantiateScene`: NO synthetic
|
|
67
|
+
* SceneInstance root, NO forced `ChildOf` on top-level members. The scene's own
|
|
68
|
+
* entities become plain top-level world entities; nested prefabs (`mounts[]`)
|
|
69
|
+
* still become their own SceneInstance anchors. Returns the set of top-level
|
|
70
|
+
* entity handles.
|
|
71
|
+
*
|
|
72
|
+
* Use this to OPEN a scene for authoring; use {@link instantiate} (anchor) at
|
|
73
|
+
* runtime / Play and for nested prefabs.
|
|
74
|
+
*
|
|
75
|
+
* The post-spawn Skin.joints hook (when wired via `registry.postSpawnHook`)
|
|
76
|
+
* runs once per top-level root: each GLB root keeps its own `ChildOf` subtree,
|
|
77
|
+
* so joint resolution is scoped to each subtree exactly as the anchor path
|
|
78
|
+
* scopes it to the single synthetic root.
|
|
79
|
+
*/
|
|
80
|
+
export declare function instantiateFlat<T extends SceneAsset>(registry: AssetRegistry, handle: Handle<TagOf<T>, 'shared'>, world: World, expectedPublication?: ScenePublicationFence): Result<EntityHandle[], AssetError | PackError | EcsError | ScenePublicationFenceError>;
|
|
81
|
+
/**
|
|
82
|
+
* m3-i2: Recursively resolve mounts[].source GUID strings.
|
|
83
|
+
* Returns a PackError-shaped object on cycle (R-9) or AssetError
|
|
84
|
+
* on child resolution failure.
|
|
85
|
+
*
|
|
86
|
+
* feat-20260713 M3 / w13: also down-drills `mounts[].overrides[].value`,
|
|
87
|
+
* resolving any GUID string bound to a `shared<...>` / `array<shared<...>>`
|
|
88
|
+
* schema field to a live handle (D-2). `guidToHandle` is the caller's per-scene
|
|
89
|
+
* dedup map (shared with the entity-field resolution in `_resolveSceneGuids`) so
|
|
90
|
+
* the same catalogued GUID mints exactly one user-tier handle across entity
|
|
91
|
+
* fields and override values (D-15/D-17 dedup contract); it defaults to a fresh
|
|
92
|
+
* map so standalone callers keep working. Override resolution runs for every
|
|
93
|
+
* mount regardless of `source` branch — an unresolvable GUID fail-fasts here,
|
|
94
|
+
* before any spawn (P3: no half-initialized member).
|
|
95
|
+
*/
|
|
96
|
+
export declare function resolveMountsRec(registry: AssetRegistry, mounts: readonly SceneInstanceMount[], world: World, visited: Set<string>, guidToHandle?: Map<string, number>, resolvedSceneHandles?: Map<string, number>): Result<SceneInstanceMount[], AssetError | {
|
|
97
|
+
readonly code: 'pack-cyclic-reference';
|
|
98
|
+
readonly expected: string;
|
|
99
|
+
readonly hint: string;
|
|
100
|
+
readonly detail: {
|
|
101
|
+
readonly code: 'pack-cyclic-reference';
|
|
102
|
+
readonly kind: 'mount-asset';
|
|
103
|
+
readonly cycle: readonly string[];
|
|
104
|
+
};
|
|
105
|
+
} | ScenePublicationFenceError>;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve one GUID string to a live user-tier handle (feat-20260713 M3 / w13
|
|
108
|
+
* SSOT). Parses the GUID, uses `guidToHandle` as the per-resolution fast path,
|
|
109
|
+
* and on a miss looks the envelope up in the catalog + interns its shared ref
|
|
110
|
+
* by `(target, payload identity)` in the World. An unparseable / uncatalogued
|
|
111
|
+
* GUID returns `AssetError(code='asset-not-found')` with a breadcrumb hint
|
|
112
|
+
* (`fieldPath` + `location`) for AI-user debuggability (P3). Shared by the
|
|
113
|
+
* entity-field fallback in `_resolveSceneGuids` and the override-value down-drill
|
|
114
|
+
* in {@link resolveMountOverrides} so the parse/dedup/lookup/mint idiom has one
|
|
115
|
+
* home (architecture-principles §1 SSOT).
|
|
116
|
+
*/
|
|
117
|
+
export declare function resolveHandleGuid(registry: AssetRegistry, world: World, guidString: string, guidToHandle: Map<string, number>, fieldPath: string, location: string): Result<number, AssetError>;
|
|
118
|
+
/**
|
|
119
|
+
* tweak-20260609 M1 helper: build the per-sub-ref parent context for a
|
|
120
|
+
* SceneAsset child. feat-20260622 M3 / w9: re-sourced to lookup in the
|
|
121
|
+
* scene envelope's ``refs[]`` edges instead of walking entity components
|
|
122
|
+
* via extractSceneEntityHandleGuids (D-7). When the scene envelope is not
|
|
123
|
+
* found in the catalog, falls back to the entity-walk path (backward compat
|
|
124
|
+
* for call sites that lack a catalogued envelope).
|
|
125
|
+
*
|
|
126
|
+
* Texture edges (sourceField=undefined) produce ``componentField:
|
|
127
|
+
* undefined`` — the breadcrumb will show GUID+kind only, no per-entity
|
|
128
|
+
* detail (D-2: texture has no per-entity origin).
|
|
129
|
+
*/
|
|
130
|
+
export declare function buildSceneChildContext(registry: AssetRegistry, scene: Asset & {
|
|
131
|
+
kind: 'scene';
|
|
132
|
+
}, subGuidKey: string, sceneGuidKey?: string): {
|
|
133
|
+
sceneEntityId?: number;
|
|
134
|
+
componentField?: string;
|
|
135
|
+
sourceField?: {
|
|
136
|
+
componentName?: string;
|
|
137
|
+
fieldName: string;
|
|
138
|
+
arrayIndex?: number;
|
|
139
|
+
};
|
|
140
|
+
} | undefined;
|
|
141
|
+
/**
|
|
142
|
+
* tweak-20260609 M1 helper: build the error-hint breadcrumb string
|
|
143
|
+
* containing the parent asset's GUID + kind, enriched with the
|
|
144
|
+
* caller-provided `parentContext` (entity localId + component.field).
|
|
145
|
+
*
|
|
146
|
+
* Per D-7 / B-8: the breadcrumb appears before the sub-asset's own hint,
|
|
147
|
+
* separated by " / ".
|
|
148
|
+
*/
|
|
149
|
+
export declare function buildBreadcrumbHint(parentGuidKey: string, parentKind: string, subGuidKey: string, parentContext?: {
|
|
150
|
+
sceneEntityId?: number;
|
|
151
|
+
componentField?: string;
|
|
152
|
+
}): string;
|
|
153
|
+
//# sourceMappingURL=instantiate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instantiate.d.ts","sourceRoot":"","sources":["../../src/registry/instantiate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { AssetGuid } from '@forgeax/engine-pack/guid';
|
|
2
|
+
import { type Result, type RhiError } from '@forgeax/engine-rhi';
|
|
3
|
+
import { type Asset, type AssetCompression, AssetError, type AssetErrorCode, type AssetRef, type CatalogSubject, type ImageError, type ImageMetadata, type LoadContext, type ParseErrorDetail } from '@forgeax/engine-types';
|
|
4
|
+
import type { AssetRegistry } from '../asset-registry';
|
|
5
|
+
import { type MaterialLoadError, type MaterialLoadRequest, type MaterialReady } from '../material/loader';
|
|
6
|
+
/**
|
|
7
|
+
* Load an asset and all its transitively referenced sub-assets by GUID;
|
|
8
|
+
* returns `ok(handle)` only when the asset and every sub-asset are in the
|
|
9
|
+
* registry.
|
|
10
|
+
*
|
|
11
|
+
* **Post-condition:** `ok(payload)` is returned ONLY when the asset AND every
|
|
12
|
+
* transitively referenced sub-asset (per the asset envelope's `refs[]`) are
|
|
13
|
+
* present in this registry. The implementation walks `envelope.refs` and
|
|
14
|
+
* recursively calls `loadByGuid` on each ref before cataloguing the top-level
|
|
15
|
+
* asset. The resolved value is the PAYLOAD `T`
|
|
16
|
+
* (D-17), never a handle -- mint a column handle with
|
|
17
|
+
* `world.allocSharedRef('Kind', payload)` when one is needed (e.g. before
|
|
18
|
+
* `instantiate`).
|
|
19
|
+
*
|
|
20
|
+
* Two paths:
|
|
21
|
+
* - **Dev / fallback** (no `configurePackIndex` call): synchronous catalogue
|
|
22
|
+
* lookup wrapped in `Promise.resolve`. Returns `Err(asset-not-found)` if not
|
|
23
|
+
* catalogued.
|
|
24
|
+
* - **Prod** (after `configurePackIndex(url)`): fetches `pack-index.json`
|
|
25
|
+
* on the first call (cached as a `Map<guid, {packageUrl, kind}>`), then
|
|
26
|
+
* fetches the individual resource URL and parses the asset payload, then
|
|
27
|
+
* catalogues it (GUID -> payload) and returns the payload.
|
|
28
|
+
*
|
|
29
|
+
* Error union: `AssetError | PackError | ImageError | RhiError` (closed -- no
|
|
30
|
+
* new codes were introduced by the recursive walk; every code is pre-existing).
|
|
31
|
+
*
|
|
32
|
+
* An in-flight `Map` (D-5) deduplicates concurrent calls for the same GUID and
|
|
33
|
+
* prevents stack overflow on cycles (A->B->A).
|
|
34
|
+
*
|
|
35
|
+
* **Breaking-change classification:** this is a semantic strengthening, not a
|
|
36
|
+
* shape change. Sub-assets catalogued by a prior `catalog(guid, payload)` /
|
|
37
|
+
* `loadByGuid` call are protected by the catalogue fast-path: the recursive
|
|
38
|
+
* walk hits cache on every node and incurs zero additional fetch.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const res = await engine.assets.loadByGuid<SceneAsset>(sceneGuid);
|
|
43
|
+
* if (!res.ok) {
|
|
44
|
+
* switch (res.error.code) {
|
|
45
|
+
* case 'asset-not-found':
|
|
46
|
+
* // top GUID or any sub-asset GUID is missing from the catalog
|
|
47
|
+
* break;
|
|
48
|
+
* case 'asset-fetch-failed':
|
|
49
|
+
* // network / CORS
|
|
50
|
+
* break;
|
|
51
|
+
* case 'asset-parse-failed':
|
|
52
|
+
* // payload malformed
|
|
53
|
+
* break;
|
|
54
|
+
* // ... AssetErrorCode | PackErrorCode | ImageErrorCode | RhiErrorCode exhaustive
|
|
55
|
+
* }
|
|
56
|
+
* return;
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function loadByGuid<T = Asset>(registry: AssetRegistry, guid: AssetGuid, parentContext?: {
|
|
61
|
+
sceneEntityId?: number;
|
|
62
|
+
componentField?: string;
|
|
63
|
+
}): Promise<Result<T, AssetError | ImageError | RhiError>>;
|
|
64
|
+
export declare function loadMaterialReadyByGuid(registry: AssetRegistry, request: MaterialLoadRequest): Promise<MaterialReady | MaterialLoadError>;
|
|
65
|
+
/**
|
|
66
|
+
* feat-20260603-asset-import-loader-injection M1 / w6: load an
|
|
67
|
+
* upstream-branch kind (texture / font) straight from its catalog entry
|
|
68
|
+
* through the injected async loader, then register the produced POD. Replaces
|
|
69
|
+
* the bespoke `loadTextureFromEntry` / `loadFontFromEntry` methods; the decode
|
|
70
|
+
* / glyph-parse logic moved verbatim into the loader bodies (D-2 — loader is
|
|
71
|
+
* pure of `registerWithGuid`, which stays here).
|
|
72
|
+
*/
|
|
73
|
+
export declare function loadFromUpstreamEntry<T = Asset>(registry: AssetRegistry, guidKey: string, entry: {
|
|
74
|
+
packageUrl: string;
|
|
75
|
+
kind: string;
|
|
76
|
+
name?: string;
|
|
77
|
+
metadata?: ImageMetadata | undefined;
|
|
78
|
+
}): Promise<Result<T, AssetError | ImageError | RhiError>>;
|
|
79
|
+
/**
|
|
80
|
+
* Internal: prod fetch path for `loadByGuid`.
|
|
81
|
+
* Fetches pack-index.json (cached), then fetches the pack file, parses the
|
|
82
|
+
* asset payload, and registers it.
|
|
83
|
+
*/
|
|
84
|
+
export declare function loadByGuidProd<T = Asset>(registry: AssetRegistry, guid: AssetGuid, guidKey: string, parentContext?: {
|
|
85
|
+
sceneEntityId?: number;
|
|
86
|
+
componentField?: string;
|
|
87
|
+
}, ancestry?: ReadonlySet<string>): Promise<Result<T, AssetError | ImageError | RhiError>>;
|
|
88
|
+
/**
|
|
89
|
+
* Resolve the catalog entry for a GUID, lazily fetching the pack-index on
|
|
90
|
+
* first call. Returns `undefined` when the GUID is absent from the catalog.
|
|
91
|
+
*/
|
|
92
|
+
export declare function resolveCatalogEntry(registry: AssetRegistry, guidKey: string): Promise<{
|
|
93
|
+
packageUrl: string;
|
|
94
|
+
kind: string;
|
|
95
|
+
name?: string;
|
|
96
|
+
metadata?: ImageMetadata | undefined;
|
|
97
|
+
compression?: AssetCompression;
|
|
98
|
+
} | undefined>;
|
|
99
|
+
/**
|
|
100
|
+
* feat-20260618 M3 (D-2): once the pack-index is parsed, group every row by
|
|
101
|
+
* its `packageUrl` and register each package fully -- all of its GUIDs and
|
|
102
|
+
* their entry display names in one `registerPackage` call. Registering the
|
|
103
|
+
* whole package at once (rather than one GUID per load) means the package
|
|
104
|
+
* cardinality is known up front, so `resolveName` returns the basename for a
|
|
105
|
+
* genuinely single-asset package and the entry name for a multi-asset one,
|
|
106
|
+
* with no incremental 1->N promotion needed on the prod path. The name travels
|
|
107
|
+
* entry -> Package, never through the payload (Risk-3 JSON-roundtrip safety),
|
|
108
|
+
* and covers both the sync (parseAssetPayload) and async (texture/font) loads.
|
|
109
|
+
*/
|
|
110
|
+
export declare function registerPackagesFromIndex(registry: AssetRegistry, catalog: Map<string, {
|
|
111
|
+
packageUrl: string;
|
|
112
|
+
name?: string;
|
|
113
|
+
sourcePath?: string;
|
|
114
|
+
subject?: CatalogSubject;
|
|
115
|
+
}>): void;
|
|
116
|
+
/**
|
|
117
|
+
* Load an asset through the DDC (catalog entry -> fetch pack -> loader.load
|
|
118
|
+
* -> register). Returns `Err(asset-not-found)` or `Err(asset-fetch-failed)`
|
|
119
|
+
* on DDC miss (the caller then decides whether to route through the
|
|
120
|
+
* import transport).
|
|
121
|
+
*
|
|
122
|
+
* This path is IDENTICAL in studio and shipped forms -- the only difference
|
|
123
|
+
* between the two is whether `registry.importTransport` exists when the caller
|
|
124
|
+
* falls back to `transportOrFail` (AC-23 key invariant).
|
|
125
|
+
*/
|
|
126
|
+
export declare function ddcLoad<T = Asset>(registry: AssetRegistry, guid: AssetGuid, guidKey: string, entry: {
|
|
127
|
+
packageUrl: string;
|
|
128
|
+
kind: string;
|
|
129
|
+
name?: string;
|
|
130
|
+
metadata?: ImageMetadata | undefined;
|
|
131
|
+
compression?: AssetCompression;
|
|
132
|
+
}, parentContext?: {
|
|
133
|
+
sceneEntityId?: number;
|
|
134
|
+
componentField?: string;
|
|
135
|
+
}, ancestry?: ReadonlySet<string>): Promise<Result<T, AssetError | ImageError | RhiError>>;
|
|
136
|
+
/**
|
|
137
|
+
* M4 transport fallback: try the injected {@link ImportTransport} to lazily
|
|
138
|
+
* import a missing DDC, then re-enter the DDC load path. When no transport
|
|
139
|
+
* is wired (shipped form), fail fast with `asset-not-imported` (AC-22).
|
|
140
|
+
*/
|
|
141
|
+
export declare function transportOrFail<T = Asset>(registry: AssetRegistry, guid: AssetGuid, guidKey: string, _missReason: AssetErrorCode): Promise<Result<T, AssetError | ImageError | RhiError>>;
|
|
142
|
+
/**
|
|
143
|
+
* Register a parsed asset POD (the synchronous tail of the DDC load path:
|
|
144
|
+
* `registerWithGuid`). Material parent preload is handled asynchronously
|
|
145
|
+
* inside `ddcLoad` before calling this method; the registered asset is
|
|
146
|
+
* always fully resolved by the time it reaches here.
|
|
147
|
+
*
|
|
148
|
+
* Extracted from the old `loadByGuidProd` body so `ddcLoad` and
|
|
149
|
+
* `transportOrFail` share an identical load path (AC-23 key invariant).
|
|
150
|
+
*/
|
|
151
|
+
export declare function registerParsedAsset<T = Asset>(registry: AssetRegistry, guid: AssetGuid, asset: Asset, _guidKey: string, refs?: readonly AssetRef[]): Result<T, AssetError | ImageError | RhiError>;
|
|
152
|
+
/**
|
|
153
|
+
* Fetch a .pack.json file, find the asset entry matching guidKey, and
|
|
154
|
+
* reconstruct the Asset from its payload.
|
|
155
|
+
*/
|
|
156
|
+
/**
|
|
157
|
+
* bug-20260610: fetch one pack file and return the raw asset entry without
|
|
158
|
+
* parsing. Used by `loadByGuidProd` for material kinds so the caller can
|
|
159
|
+
* recursively preload `refs[]` (texture sub-assets) BEFORE the synchronous
|
|
160
|
+
* materialLoader runs and rewrites values handle fields to their refs[]
|
|
161
|
+
* GUID strings (feat-20260614 M8 / D-19: GUID verbatim, no handle minting).
|
|
162
|
+
*/
|
|
163
|
+
export declare function fetchPackEntry(_registry: AssetRegistry, packageUrl: string, guidKey: string): Promise<Result<{
|
|
164
|
+
kind: string;
|
|
165
|
+
payload: Record<string, unknown>;
|
|
166
|
+
refs?: string[];
|
|
167
|
+
}, AssetError>>;
|
|
168
|
+
/**
|
|
169
|
+
* Fetch one pack file, locate the requested asset entry, and either parse it
|
|
170
|
+
* inline or expose the entry to the caller (for kinds that need to preload
|
|
171
|
+
* `refs[]` BEFORE running the loader — currently 'material', whose
|
|
172
|
+
* values handle fields are rewritten to their refs[] GUID strings
|
|
173
|
+
* (feat-20260614 M8 / D-19: GUID verbatim, no handle minting at load time)).
|
|
174
|
+
*
|
|
175
|
+
* bug-20260610 Fix B (M3 / D-4): the fetch+parse result is cached per
|
|
176
|
+
* `packageUrl` in `packFileCache`; concurrent calls for the same URL share
|
|
177
|
+
* a single in-flight promise via `packFileInFlight`. Only the raw parsed
|
|
178
|
+
* body is cached — `parseAssetPayload` still runs per-call (CON-2).
|
|
179
|
+
*/
|
|
180
|
+
export declare function fetchPackFile(registry: AssetRegistry, packageUrl: string, guidKey: string, _kind: string): Promise<Result<{
|
|
181
|
+
asset: Asset;
|
|
182
|
+
refs: readonly string[];
|
|
183
|
+
}, AssetError>>;
|
|
184
|
+
/**
|
|
185
|
+
* Parse the asset payload from a pack-file entry and return the result.
|
|
186
|
+
* Extracted so cache-hit and in-flight-dedup paths share the same
|
|
187
|
+
* parseAssetPayload + error-wrapping logic.
|
|
188
|
+
*/
|
|
189
|
+
export declare function parseAndReturnAsset(registry: AssetRegistry, assetEntry: {
|
|
190
|
+
kind: string;
|
|
191
|
+
payload: Record<string, unknown>;
|
|
192
|
+
refs?: string[];
|
|
193
|
+
}): Result<{
|
|
194
|
+
asset: Asset;
|
|
195
|
+
refs: readonly string[];
|
|
196
|
+
}, AssetError>;
|
|
197
|
+
/**
|
|
198
|
+
* Fetch a pack file from the network, parse the JSON body, store the
|
|
199
|
+
* result in the cache, and return the requested asset entry.
|
|
200
|
+
*
|
|
201
|
+
* Registers the in-flight promise in `packFileInFlight` so concurrent
|
|
202
|
+
* callers share a single fetch. On success the body moves to
|
|
203
|
+
* `packFileCache`; on failure the in-flight entry is removed so
|
|
204
|
+
* subsequent retries re-fetch (D-7).
|
|
205
|
+
*/
|
|
206
|
+
export declare function fetchAndCachePackFile(registry: AssetRegistry, packageUrl: string, guidKey: string): Promise<Result<{
|
|
207
|
+
asset: Asset;
|
|
208
|
+
refs: readonly string[];
|
|
209
|
+
}, AssetError>>;
|
|
210
|
+
/**
|
|
211
|
+
* Reconstruct a typed `Asset` from a raw payload object.
|
|
212
|
+
*
|
|
213
|
+
* @param kind The asset kind discriminant (matches the pack entry or
|
|
214
|
+
* dev-register dispatch).
|
|
215
|
+
* @param payload The serialised asset payload (keys mirror the asset
|
|
216
|
+
* interface field names).
|
|
217
|
+
* @param refs Pack-file refs array for Handle fields — when a field
|
|
218
|
+
* value is `number` it resolves to `refs[N]` (glTF-style index).
|
|
219
|
+
* Optional to preserve compatibility with callers outside the pack
|
|
220
|
+
* ingestion path (e.g., direct `registerWithGuid`).
|
|
221
|
+
*/
|
|
222
|
+
export declare function parseAssetPayload(registry: AssetRegistry, kind: string, payload: Record<string, unknown>, refs?: string[]): Asset | Record<string, unknown> | undefined | {
|
|
223
|
+
readonly ok: false;
|
|
224
|
+
readonly error: ParseErrorDetail;
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Build the {@link LoadContext} passed to a loader's `load`.
|
|
228
|
+
* `fetchBinary` / `resolveRef` / `device` are wired for the async texture /
|
|
229
|
+
* font loaders (w6).
|
|
230
|
+
*/
|
|
231
|
+
export declare function makeLoadContext(registry: AssetRegistry): LoadContext;
|
|
232
|
+
/**
|
|
233
|
+
* Return a runtime snapshot of every catalogued asset. Each entry exposes
|
|
234
|
+
* `{ guid, kind, name }` where `kind` is the asset discriminant string
|
|
235
|
+
* from `payload.kind`. feat-20260614 M8 (D-15): the registry holds no
|
|
236
|
+
* handles -- entries are keyed by GUID (the catalogue key).
|
|
237
|
+
*
|
|
238
|
+
* AI-user narrowing flow (AC-11 + plan-strategy §7.4):
|
|
239
|
+
* ```ts
|
|
240
|
+
* for (const e of registry.inspect().assets) {
|
|
241
|
+
* if (e.kind === 'texture') {
|
|
242
|
+
* // re-query via registry.lookup(e.guid) to get the typed Asset value.
|
|
243
|
+
* }
|
|
244
|
+
* }
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
//# sourceMappingURL=load-by-guid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-by-guid.d.ts","sourceRoot":"","sources":["../../src/registry/load-by-guid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type LoadStatus = 'unloaded' | 'provisional' | 'ready' | 'failed';
|
|
2
|
+
export interface LoadRecord {
|
|
3
|
+
readonly status: LoadStatus;
|
|
4
|
+
readonly refs: readonly string[];
|
|
5
|
+
readonly value?: unknown;
|
|
6
|
+
readonly error?: unknown;
|
|
7
|
+
}
|
|
8
|
+
export declare class LoadStateStore {
|
|
9
|
+
private readonly records;
|
|
10
|
+
get(guid: string): LoadRecord | undefined;
|
|
11
|
+
getReady<T = unknown>(guid: string): T | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Return a provisional value only for the internal SCC back-edge bridge.
|
|
14
|
+
* Public callers must use getReady so promotion remains the visibility gate.
|
|
15
|
+
*/
|
|
16
|
+
getProvisional<T = unknown>(guid: string): T | undefined;
|
|
17
|
+
begin(guid: string, refs: readonly string[]): LoadRecord;
|
|
18
|
+
resolveAsset(guid: string, value: unknown): void;
|
|
19
|
+
registerReady(guid: string, value: unknown): void;
|
|
20
|
+
promoteReady(guid: string): void;
|
|
21
|
+
fail(guid: string, error: unknown): readonly string[];
|
|
22
|
+
remove(guid: string): void;
|
|
23
|
+
clear(): void;
|
|
24
|
+
private provisionalGroup;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=load-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-state.d.ts","sourceRoot":"","sources":["../../src/registry/load-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAEhE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKlD;;;OAGG;IACH,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKxD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU;IAYxD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAUhD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMjD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBhC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE;IAWrD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,gBAAgB;CAYzB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-rhi';
|
|
2
|
+
import { AssetError, type CatalogProjection } from '@forgeax/engine-types';
|
|
3
|
+
import type { CatalogRecord } from './catalog';
|
|
4
|
+
export interface RuntimeProjection {
|
|
5
|
+
readonly subject: CatalogProjection['subject'];
|
|
6
|
+
readonly execution: CatalogProjection['execution'];
|
|
7
|
+
readonly lifecycle: CatalogProjection['lifecycle'];
|
|
8
|
+
readonly packageUrl: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the producer-declared runtime projection. Legacy rows return
|
|
12
|
+
* undefined so inline/dev assets retain their existing registration path;
|
|
13
|
+
* rows that publish any projection axis must publish all three axes.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveRuntimeProjection(guid: string, record: CatalogRecord): Result<RuntimeProjection | undefined, AssetError>;
|
|
16
|
+
//# sourceMappingURL=runtime-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-projection.d.ts","sourceRoot":"","sources":["../../src/registry/runtime-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAqB,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAUD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,iBAAiB,GAAG,SAAS,EAAE,UAAU,CAAC,CAmCnD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-rhi';
|
|
2
|
+
import type { AssetPublicationEnvelope, CatalogEntry, ScenePublicationFence as EngineScenePublicationFence } from '@forgeax/engine-types';
|
|
3
|
+
export declare const SCENE_PUBLICATION_FENCE_SCHEMA: "scene-publication-fence/1";
|
|
4
|
+
export declare const SCENE_PUBLICATION_RECOVERY_ACTIONS: readonly ["continue-last-known-good", "retry-rebuild", "fresh-reopen"];
|
|
5
|
+
export type ScenePublicationFence = EngineScenePublicationFence;
|
|
6
|
+
export type ScenePublicationFencePhase = 'publication' | 'catalog' | 'observation' | 'instantiate';
|
|
7
|
+
export interface ScenePublicationFenceError {
|
|
8
|
+
readonly code: 'asset-generation-fence-mismatch';
|
|
9
|
+
readonly phase: ScenePublicationFencePhase;
|
|
10
|
+
readonly hint: string;
|
|
11
|
+
readonly sourcePath?: string;
|
|
12
|
+
readonly sourceRevision?: string;
|
|
13
|
+
readonly expected?: ScenePublicationFence;
|
|
14
|
+
readonly actual?: ScenePublicationFence;
|
|
15
|
+
readonly currentGeneration?: number;
|
|
16
|
+
readonly lastKnownGood?: ScenePublicationFence;
|
|
17
|
+
readonly retryable: boolean;
|
|
18
|
+
readonly recoveryActions: readonly string[];
|
|
19
|
+
}
|
|
20
|
+
export interface ScenePublicationObservation {
|
|
21
|
+
readonly fence: ScenePublicationFence;
|
|
22
|
+
readonly outputs: readonly string[];
|
|
23
|
+
}
|
|
24
|
+
/** Convert one complete Engine publication into the serializable Scene fence. */
|
|
25
|
+
export declare function createScenePublicationFence(publication: AssetPublicationEnvelope): Result<ScenePublicationFence, ScenePublicationFenceError>;
|
|
26
|
+
/** Parse the persisted fence without guessing legacy generation or identity. */
|
|
27
|
+
export declare function parseScenePublicationFence(value: unknown): Result<ScenePublicationFence, ScenePublicationFenceError>;
|
|
28
|
+
/** Compare all fence fields; no single generation or GUID may stand in for it. */
|
|
29
|
+
export declare function compareScenePublicationFences(expected: ScenePublicationFence, actual: ScenePublicationFence, lastKnownGood?: ScenePublicationFence): Result<ScenePublicationFence, ScenePublicationFenceError>;
|
|
30
|
+
/** Derive a fence only when every Catalog row for the source publication is present and aligned. */
|
|
31
|
+
export declare function scenePublicationFenceFromCatalog(entries: readonly CatalogEntry[], outputGuid: string): Result<ScenePublicationFence, ScenePublicationFenceError>;
|
|
32
|
+
export declare function observeScenePublication(input: {
|
|
33
|
+
readonly publication: AssetPublicationEnvelope;
|
|
34
|
+
readonly waitForOutput: (guid: string) => Promise<void>;
|
|
35
|
+
readonly timeoutMs?: number;
|
|
36
|
+
readonly lastKnownGood?: ScenePublicationFence;
|
|
37
|
+
}): Promise<Result<ScenePublicationObservation, ScenePublicationFenceError>>;
|
|
38
|
+
//# sourceMappingURL=scene-publication-fence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-publication-fence.d.ts","sourceRoot":"","sources":["../../src/registry/scene-publication-fence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EACV,wBAAwB,EACxB,YAAY,EACZ,qBAAqB,IAAI,2BAA2B,EACrD,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,8BAA8B,EAAG,2BAAoC,CAAC;AACnF,eAAO,MAAM,kCAAkC,wEAIpC,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAEhE,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEnG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,iCAAiC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAkDD,iFAAiF;AACjF,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,wBAAwB,GACpC,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CA4C3D;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CA0B3D;AAED,kFAAkF;AAClF,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,qBAAqB,EAC7B,aAAa,CAAC,EAAE,qBAAqB,GACpC,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAW3D;AAED,oGAAoG;AACpG,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAyB3D;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC;CAChD,GAAG,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,0BAA0B,CAAC,CAAC,CAoC3E"}
|