@forgeax/engine-assets-runtime 0.0.0-dev.8d955ade1c79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +491 -0
- package/dist/.tsbuildinfo +1 -0
- 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__/decode-image-mime-owner.test.d.ts +2 -0
- package/dist/__tests__/decode-image-mime-owner.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-kind.d.ts +4 -0
- package/dist/asset-kind.d.ts.map +1 -0
- package/dist/asset-registry.d.ts +554 -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 +24 -0
- package/dist/catalog-source.d.ts.map +1 -0
- 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 +143 -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 +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +8359 -0
- package/dist/index.mjs.map +1 -0
- package/dist/internal/artifact-cache.d.ts +17 -0
- package/dist/internal/artifact-cache.d.ts.map +1 -0
- package/dist/internal/asset-graph.d.ts +70 -0
- package/dist/internal/asset-graph.d.ts.map +1 -0
- package/dist/internal/catalog-session.d.ts +60 -0
- package/dist/internal/catalog-session.d.ts.map +1 -0
- package/dist/internal/decoder-registry.d.ts +19 -0
- package/dist/internal/decoder-registry.d.ts.map +1 -0
- package/dist/internal/immutable-payload.d.ts +9 -0
- package/dist/internal/immutable-payload.d.ts.map +1 -0
- package/dist/internal/load-asset.d.ts +31 -0
- package/dist/internal/load-asset.d.ts.map +1 -0
- package/dist/internal/pack-reader.d.ts +18 -0
- package/dist/internal/pack-reader.d.ts.map +1 -0
- package/dist/internal/validate-runtime-row.d.ts +7 -0
- package/dist/internal/validate-runtime-row.d.ts.map +1 -0
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.mjs +329 -0
- package/dist/internal.mjs.map +1 -0
- 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 +76 -0
- 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.unit.test.ts +14 -0
- 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 +38 -0
- 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 +508 -0
- package/src/__tests__/material-stale-generation.unit.test.ts +147 -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 +27 -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-kind.ts +6 -0
- package/src/asset-registry.ts +2045 -0
- package/src/builtin-asset-registry.ts +164 -0
- package/src/catalog-source.ts +89 -0
- 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 +186 -0
- package/src/image-error.ts +45 -0
- package/src/index.ts +189 -0
- package/src/internal/artifact-cache.ts +65 -0
- package/src/internal/asset-graph.ts +420 -0
- package/src/internal/catalog-session.ts +345 -0
- package/src/internal/decoder-registry.ts +175 -0
- package/src/internal/immutable-payload.ts +20 -0
- package/src/internal/load-asset.ts +254 -0
- package/src/internal/pack-reader.ts +183 -0
- package/src/internal/validate-runtime-row.ts +51 -0
- package/src/internal.ts +6 -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 +385 -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
|
@@ -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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { CookedMaterialRecord } from '@forgeax/engine-pack';
|
|
2
|
+
import { AssetError, type MaterialAsset, type MaterialError } from '@forgeax/engine-types';
|
|
3
|
+
import type { AssetRegistry } from '../asset-registry';
|
|
4
|
+
/**
|
|
5
|
+
* Validate a MaterialAsset's passes[] against the ShaderRegistry's
|
|
6
|
+
* paramSchema (union semantics: all declared params across all passes
|
|
7
|
+
* must be satisfiable from values).
|
|
8
|
+
*
|
|
9
|
+
* - Empty / undefined passes[] → error
|
|
10
|
+
* - Each pass's shader must exist in ShaderRegistry
|
|
11
|
+
* - Union of all pass paramSchemas: params without `default` must
|
|
12
|
+
* appear in values with matching type
|
|
13
|
+
* - Extra keys in values are silently ignored (D-5)
|
|
14
|
+
*
|
|
15
|
+
* @returns AssetError on failure, null on success
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateMaterialPasses(registry: AssetRegistry, asset: MaterialAsset): AssetError | null;
|
|
18
|
+
export interface MaterialEffectiveRootIdentity {
|
|
19
|
+
readonly guid: string;
|
|
20
|
+
readonly layoutIdentity: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function validateMaterialCookIdentity(record: Pick<CookedMaterialRecord, 'guid' | 'receipt'>, root: MaterialEffectiveRootIdentity): MaterialError | null;
|
|
23
|
+
/**
|
|
24
|
+
* Sprite 9-slice values fail-fast validation
|
|
25
|
+
* (feat-20260527-sprite-nineslice M2 / w8, plan-strategy §D-1 + AC-08).
|
|
26
|
+
*
|
|
27
|
+
* Fires when:
|
|
28
|
+
* - asset.kind === 'material'
|
|
29
|
+
* - first pass shader === 'forgeax::sprite'
|
|
30
|
+
* - values.slices is present
|
|
31
|
+
*
|
|
32
|
+
* Six fail-fast branches (1:1 with w4 test):
|
|
33
|
+
* (1) any component is negative
|
|
34
|
+
* (2) slices.x + slices.z >= region.zw[0] (X-axis overlap)
|
|
35
|
+
* (3) slices.y + slices.w >= region.zw[1] (Y-axis overlap)
|
|
36
|
+
* (4) any component is NaN
|
|
37
|
+
* (5) any component is Infinity
|
|
38
|
+
* (6) length !== 4
|
|
39
|
+
*
|
|
40
|
+
* Reuses the existing 'asset-invalid-value' member of the closed
|
|
41
|
+
* `AssetErrorCode` 13-member union (no new code added per
|
|
42
|
+
* AGENTS.md §Error model). The `.expected` literal mirrors the AI-User
|
|
43
|
+
* Charter §3 string; `.hint` inlines the offending sum + the relevant
|
|
44
|
+
* `region.zw` numeral so AI users can copy-paste the prompt straight
|
|
45
|
+
* back into the IDE for self-recovery (plan-strategy §R-4).
|
|
46
|
+
*
|
|
47
|
+
* @returns AssetError on failure, null on success.
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateSpriteSlices(_registry: AssetRegistry, asset: MaterialAsset): AssetError | null;
|
|
50
|
+
export declare function validateParamType(_registry: AssetRegistry, _name: string, type: string, value: unknown): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* feat-20260527-sprite-nineslice M4 / w18 (D-9): register-time soft-warn
|
|
53
|
+
* for sliceMode=1 (tile) bound to a sampler whose addressMode is not
|
|
54
|
+
* 'repeat'. Bumps `nineslice.tile-needs-repeat-sampler` once per offending
|
|
55
|
+
* catalogue call. Never throws -- the counter is the sole AI-user-facing
|
|
56
|
+
* signal (charter P3 machine-readable; AC-08 closed, never extends
|
|
57
|
+
* AssetErrorCode).
|
|
58
|
+
*
|
|
59
|
+
* feat-20260614 M8 (D-19): `values.sampler` is now an embedded GUID
|
|
60
|
+
* string (dash-form), resolved against the catalogue rather than a handle.
|
|
61
|
+
*/
|
|
62
|
+
export declare function detectTileNeedsRepeatSampler(registry: AssetRegistry, asset: MaterialAsset): void;
|
|
63
|
+
/**
|
|
64
|
+
* feat-20260613-material-paramschema-driven-binding M4 / w23 (D-5 graceful):
|
|
65
|
+
* Return the texture-field name set for the given material-shader id,
|
|
66
|
+
* derived from the registered shader's paramSchema via `derive(paramSchema)
|
|
67
|
+
* .textureFieldNames`. Returns `undefined` when the shader is not yet
|
|
68
|
+
* registered (cross-worktree shader-late-register, plan R-4).
|
|
69
|
+
*
|
|
70
|
+
* Used by `extractFrame` to know which values fields the shader
|
|
71
|
+
* declares as texture handles; the extract layer validates handle-vs-
|
|
72
|
+
* scalar typing and drops misclassified slots so the record stage's
|
|
73
|
+
* MISSING_TEXTURE_HANDLE fallback can take over (white default texture)
|
|
74
|
+
* rather than letting a stray handle reach `device.createBindGroup`.
|
|
75
|
+
*/
|
|
76
|
+
export declare function materialShaderTextureFieldNames(registry: AssetRegistry, shaderId: string): ReadonlySet<string> | undefined;
|
|
77
|
+
//# sourceMappingURL=validate-material.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-material.d.ts","sourceRoot":"","sources":["../../src/registry/validate-material.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,UAAU,EAEV,KAAK,aAAa,EAClB,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,aAAa,GACnB,UAAU,GAAG,IAAI,CAoFnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC,EACtD,IAAI,EAAE,6BAA6B,GAClC,aAAa,GAAG,IAAI,CAiBtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,aAAa,GACnB,UAAU,GAAG,IAAI,CA8GnB;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,OAAO,CAgCT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CA8BhG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,MAAM,GACf,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAIjC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { SharedRefStaleError, UniqueRefStaleError, World } from '@forgeax/engine-ecs';
|
|
2
|
+
import type { AssetGuid } from '@forgeax/engine-pack/guid';
|
|
3
|
+
import { type Result } from '@forgeax/engine-rhi';
|
|
4
|
+
import type { Asset, AssetError as AssetErrorType, Handle, MaterialAsset, MaterialError, MaterialPass } from '@forgeax/engine-types';
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a handle to its asset payload with two-tier slot-range dispatch.
|
|
7
|
+
*
|
|
8
|
+
* slot < BUILTIN_BASE -> BuiltinAssetRegistry.resolve(handle) (process-static)
|
|
9
|
+
* slot >= BUILTIN_BASE -> world.sharedRefs.resolve(handle) (user-tier RC)
|
|
10
|
+
*
|
|
11
|
+
* Callers must specify the expected asset type explicitly:
|
|
12
|
+
* `resolveAssetHandle<MeshAsset>(world, handle)`. The type parameter is an
|
|
13
|
+
* assertion -- the runtime dispatch returns the correct payload based on slot
|
|
14
|
+
* range; the type parameter mirrors the caller's expectation.
|
|
15
|
+
*
|
|
16
|
+
* @param world - The World owning the per-World SharedRefStore (user-tier).
|
|
17
|
+
* @param handle - The branded handle to resolve.
|
|
18
|
+
* @returns `Result.ok(payload)` on hit, `Result.err(AssetError)` on miss.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveAssetHandle<T extends Asset>(world: World, handle: Handle<string, 'shared'>): Result<T, AssetErrorType | SharedRefStaleError | UniqueRefStaleError>;
|
|
21
|
+
/**
|
|
22
|
+
* Walk a MaterialAsset parent chain to produce the inherited passes +
|
|
23
|
+
* shallow-merged values (W-1..W-7 semantics). feat-20260614 M8 (D-19):
|
|
24
|
+
* the starting material is resolved from a column `handle` via
|
|
25
|
+
* {@link resolveAssetHandle} (builtin / user-tier world.sharedRefs); each
|
|
26
|
+
* ancestor `material.parent` is an embedded GUID (AssetGuid) resolved through
|
|
27
|
+
* the AssetRegistry catalogue ({@link AssetRegistry.lookup}). The registry
|
|
28
|
+
* holds no handles -- it is the GUID->payload SSOT for parent resolution.
|
|
29
|
+
*
|
|
30
|
+
* Zero-cache (AC-04): every call builds the same table-shaped input and delegates
|
|
31
|
+
* inheritance semantics to the MaterialAsset resolver in `@forgeax/engine-types`.
|
|
32
|
+
* Compiler and runtime therefore share root-contract ownership and child-value
|
|
33
|
+
* override semantics instead of maintaining two subtly different walks.
|
|
34
|
+
*/
|
|
35
|
+
export declare function walkMaterialPassesOverSharedRefs(world: World, handle: Handle<'MaterialAsset', 'shared'>, registry: {
|
|
36
|
+
lookup(guid: AssetGuid | string): Asset | undefined;
|
|
37
|
+
}): Result<{
|
|
38
|
+
passes: MaterialPass[];
|
|
39
|
+
parameters: MaterialAsset['parameters'];
|
|
40
|
+
values: NonNullable<MaterialAsset['values']>;
|
|
41
|
+
colorSpace: MaterialAsset['colorSpace'];
|
|
42
|
+
}, AssetErrorType | MaterialError | SharedRefStaleError | UniqueRefStaleError>;
|
|
43
|
+
//# sourceMappingURL=resolve-asset-handle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-asset-handle.d.ts","sourceRoot":"","sources":["../src/resolve-asset-handle.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EACV,KAAK,EACL,UAAU,IAAI,cAAc,EAC5B,MAAM,EACN,aAAa,EACb,aAAa,EACb,YAAY,EACb,MAAM,uBAAuB,CAAC;AAW/B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAChD,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAC/B,MAAM,CAAC,CAAC,EAAE,cAAc,GAAG,mBAAmB,GAAG,mBAAmB,CAAC,CAiCvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,EACzC,QAAQ,EAAE;IAAE,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;CAAE,GAChE,MAAM,CACP;IACE,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACzC,EACD,cAAc,GAAG,aAAa,GAAG,mBAAmB,GAAG,mBAAmB,CAC3E,CA+BA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { World } from '@forgeax/engine-ecs';
|
|
2
|
+
import type { Asset, Handle, Result, TextureAsset } from '@forgeax/engine-types';
|
|
3
|
+
export type TilesetRuntimeErrorCode = 'tileset-atlas-not-found' | 'tileset-atlas-stale' | 'tileset-atlas-kind-mismatch';
|
|
4
|
+
export interface TilesetRuntimeError {
|
|
5
|
+
readonly code: TilesetRuntimeErrorCode;
|
|
6
|
+
readonly expected: string;
|
|
7
|
+
readonly hint: string;
|
|
8
|
+
readonly detail: {
|
|
9
|
+
readonly guid: string;
|
|
10
|
+
readonly actualKind?: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface ResolvedTilesetRuntime {
|
|
14
|
+
readonly guid: string;
|
|
15
|
+
readonly payload: TextureAsset;
|
|
16
|
+
readonly handle: Handle<'TextureAsset', 'shared'>;
|
|
17
|
+
}
|
|
18
|
+
export type TilesetAtlasLookup = Asset | {
|
|
19
|
+
readonly code: 'stale';
|
|
20
|
+
} | undefined;
|
|
21
|
+
/** Project one durable atlas GUID into the current World at the tilemap owner. */
|
|
22
|
+
export declare function resolveTilesetRuntime(world: World, guid: string, lookup: (guid: string) => TilesetAtlasLookup): Result<ResolvedTilesetRuntime, TilesetRuntimeError>;
|
|
23
|
+
//# sourceMappingURL=resolve-tileset-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-tileset-runtime.d.ts","sourceRoot":"","sources":["../src/resolve-tileset-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGjF,MAAM,MAAM,uBAAuB,GAC/B,yBAAyB,GACzB,qBAAqB,GACrB,6BAA6B,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;CACnD;AAED,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC;AAEhF,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,GAC3C,MAAM,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAuCrD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { Component } from '@forgeax/engine-ecs';
|
|
2
|
+
import type { MountOverride } from '@forgeax/engine-types';
|
|
3
|
+
/**
|
|
4
|
+
* A single handle-field reference extracted from a SceneAsset entity.
|
|
5
|
+
*
|
|
6
|
+
* `entityLocalId` is the `node.localId`; `componentName` and `fieldName`
|
|
7
|
+
* identify the schema field whose `fieldType` starts with `shared\<` or
|
|
8
|
+
* `array\<shared\<`. `guidString` is the raw GUID string value from the
|
|
9
|
+
* entity's component data (NOT a parsed `AssetGuid` — callers parse or
|
|
10
|
+
* resolve as needed).
|
|
11
|
+
*
|
|
12
|
+
* `arrayIndex` is `undefined` for plain `handle<T>` fields; for
|
|
13
|
+
* `array<handle<T>>` fields it is the 0-based index into the array.
|
|
14
|
+
*/
|
|
15
|
+
export interface SceneHandleFieldEntry {
|
|
16
|
+
readonly entityLocalId: number;
|
|
17
|
+
readonly componentName: string;
|
|
18
|
+
readonly fieldName: string;
|
|
19
|
+
readonly guidString: string;
|
|
20
|
+
/** 0-based index for `array<handle<T>>` elements; `undefined` for plain `handle<T>` fields. */
|
|
21
|
+
readonly arrayIndex?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Shape of a single entity passed to {@link extractSceneEntityHandleGuids}.
|
|
25
|
+
*
|
|
26
|
+
* Compatible with both `SceneEntity` (from `@forgeax/engine-types`, where
|
|
27
|
+
* `components` is `Partial<ComponentValuesMap>`) and test-side plain objects.
|
|
28
|
+
*/
|
|
29
|
+
interface SceneEntityLike {
|
|
30
|
+
readonly localId: number;
|
|
31
|
+
readonly components: Record<string, Record<string, unknown>>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Walk every `SceneEntityLike` in `entities` and extract all GUID strings
|
|
35
|
+
* bound to schema fields with `handle<...>` or `array<handle<...>>` fieldType.
|
|
36
|
+
*
|
|
37
|
+
* Unknown component names (absent from the supplied World-local catalog) are
|
|
38
|
+
* silently skipped — the ecs layer's `additionalProperties` check will catch
|
|
39
|
+
* unknowns at spawn time if appropriate.
|
|
40
|
+
*
|
|
41
|
+
* Values that are already numbers (resolved Handles) or non-strings are
|
|
42
|
+
* skipped (they are not GUID refs).
|
|
43
|
+
*
|
|
44
|
+
* @internal Shared by {@link AssetRegistry._resolveSceneGuids} and
|
|
45
|
+
* `buildSceneChildContext` as the entity-walk fallback used when the structured
|
|
46
|
+
* `envelope.refs` edges are unavailable or carry no per-entity detail.
|
|
47
|
+
*/
|
|
48
|
+
export declare function extractSceneEntityHandleGuids(components: ReadonlyMap<string, Component>, entities: ReadonlyArray<SceneEntityLike>): SceneHandleFieldEntry[];
|
|
49
|
+
/**
|
|
50
|
+
* One handle-field GUID reference extracted from a {@link MountOverride}'s value
|
|
51
|
+
* (feat-20260713 M3 / w12). Mirrors {@link SceneHandleFieldEntry} but keys on the
|
|
52
|
+
* override's array index (there is no entity `localId` — an override targets a
|
|
53
|
+
* mount member by its own `localId`, resolved by the ecs apply loop, not here).
|
|
54
|
+
*
|
|
55
|
+
* `fieldName` is the schema field the GUID binds to: the override's own `field`
|
|
56
|
+
* for the patch form, or a key of the component-add value map for the add form.
|
|
57
|
+
*/
|
|
58
|
+
export interface MountOverrideHandleFieldEntry {
|
|
59
|
+
/** 0-based index into the `overrides[]` array passed to the extractor. */
|
|
60
|
+
readonly overrideIndex: number;
|
|
61
|
+
readonly componentName: string;
|
|
62
|
+
readonly fieldName: string;
|
|
63
|
+
readonly guidString: string;
|
|
64
|
+
/** 0-based index for `array<shared<T>>` elements; `undefined` for scalar `shared<T>`. */
|
|
65
|
+
readonly arrayIndex?: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Walk `overrides` and extract every GUID string bound to a `shared<...>` /
|
|
69
|
+
* `array<shared<...>>` schema field inside each override's value (feat-20260713
|
|
70
|
+
* M3 / w12, plan-strategy D-2). This is the apply-side counterpart to
|
|
71
|
+
* {@link extractSceneEntityHandleGuids}: it feeds `resolveMountsRec`'s
|
|
72
|
+
* GUID→handle down-drill so a `mounts[].overrides[].value` carrying a raw GUID
|
|
73
|
+
* (e.g. an `AnimationPlayer.clips` clip GUID) resolves to a live handle before
|
|
74
|
+
* the ecs apply loop, which only ever sees numeric handles (D-2: the GUID domain
|
|
75
|
+
* stays sealed in assets-runtime).
|
|
76
|
+
*
|
|
77
|
+
* The `{comp, field?, value}` discriminant is normalized to `(fieldName, value)`
|
|
78
|
+
* pairs: the patch form (`field` present) yields one pair; the component-add form
|
|
79
|
+
* (`field` absent, `value` is a per-field map) yields one pair per value key.
|
|
80
|
+
* Field type is judged from the supplied catalog token schema, the same
|
|
81
|
+
* schema SSOT the entity walk uses. Unknown components / non-shared fields /
|
|
82
|
+
* non-string (already-resolved number) values are skipped (D-8 number pass-through).
|
|
83
|
+
*
|
|
84
|
+
* @internal Shared identification core; resolution lives in `resolveMountsRec`.
|
|
85
|
+
*/
|
|
86
|
+
export declare function extractMountOverrideHandleGuids(components: ReadonlyMap<string, Component>, overrides: ReadonlyArray<MountOverride>): MountOverrideHandleFieldEntry[];
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=scene-handle-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-handle-fields.d.ts","sourceRoot":"","sources":["../src/scene-handle-fields.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1C,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,qBAAqB,EAAE,CAmCzB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,6BAA6B;IAC5C,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1C,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,GACtC,6BAA6B,EAAE,CAwBjC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SceneAsset } from '@forgeax/engine-types';
|
|
2
|
+
/**
|
|
3
|
+
* Structured error returned by parseScenePayload when a refs index is
|
|
4
|
+
* out of bounds (F-2 / AC-02).
|
|
5
|
+
*/
|
|
6
|
+
interface ParseSceneError {
|
|
7
|
+
readonly localId: number;
|
|
8
|
+
readonly component: string;
|
|
9
|
+
readonly field: string;
|
|
10
|
+
readonly index: number;
|
|
11
|
+
readonly refsLength: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function parseScenePayload(payload: Record<string, unknown>, refs?: string[]): SceneAsset | ParseSceneError | undefined;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=scene-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-payload.d.ts","sourceRoot":"","sources":["../src/scene-payload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAG/B;;;GAGG;AACH,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAsBD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE,MAAM,EAAE,GACd,UAAU,GAAG,eAAe,GAAG,SAAS,CAoG1C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Loader } from '@forgeax/engine-types';
|
|
2
|
+
import { LoaderRegistry } from './loader-registry';
|
|
3
|
+
/**
|
|
4
|
+
* Wire the engine's default loader set (16 ordinary kinds plus UI) plus any
|
|
5
|
+
* `extraLoaders` onto `registry` in
|
|
6
|
+
* one call. Returns the same `registry` for chaining (so `wireDefaultLoaders(new
|
|
7
|
+
* LoaderRegistry())` is a one-expression wired registry). The `extraLoaders` are
|
|
8
|
+
* appended after the defaults and must use kinds outside the ordinary set.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { LoaderRegistry, wireDefaultLoaders } from '@forgeax/engine-assets-runtime';
|
|
13
|
+
* const loaders = wireDefaultLoaders(new LoaderRegistry());
|
|
14
|
+
* // loaders.get('mesh') / .get('texture') / .get('font') / .get('video') are
|
|
15
|
+
* // non-undefined; all ordinary Asset kinds share this same owner table.
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function wireDefaultLoaders(registry: LoaderRegistry, extraLoaders?: readonly Loader[]): LoaderRegistry;
|
|
19
|
+
/**
|
|
20
|
+
* Convenience factory: a fresh `LoaderRegistry` pre-wired with the default
|
|
21
|
+
* loader set (plus any `extraLoaders`). The production assembly point
|
|
22
|
+
* (`createRenderer`) and tests pass the result into `new LoaderRegistry()` (D-7
|
|
23
|
+
* constructor-injection; loaders always wired at construction -- used by
|
|
24
|
+
* `AssetRegistry` internally via `createDefaultLoaderRegistry(extraLoaders)` and
|
|
25
|
+
* by host code / tests independently) -- no setter / no illegal intermediate
|
|
26
|
+
* state).
|
|
27
|
+
*/
|
|
28
|
+
export declare function createDefaultLoaderRegistry(extraLoaders?: readonly Loader[]): LoaderRegistry;
|
|
29
|
+
//# sourceMappingURL=wire-default-loaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-default-loaders.d.ts","sourceRoot":"","sources":["../src/wire-default-loaders.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAanD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,cAAc,CAahB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,cAAc,CAEhG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@forgeax/engine-assets-runtime",
|
|
3
|
+
"version": "0.0.0-dev.8d955ade1c79",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"description": "Asset registry, loader registry, GUID resolution, and default loader wiring for forgeax-engine (Tier 2.1 -- extracted from @forgeax/engine-runtime).",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs"
|
|
13
|
+
},
|
|
14
|
+
"./internal": {
|
|
15
|
+
"types": "./dist/internal.d.ts",
|
|
16
|
+
"import": "./dist/internal.mjs"
|
|
17
|
+
},
|
|
18
|
+
"./package.json": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
"main": "./dist/index.mjs",
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"src",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@forgeax/engine-codec": "0.0.0-dev.8d955ade1c79",
|
|
30
|
+
"@forgeax/engine-ecs": "0.0.0-dev.8d955ade1c79",
|
|
31
|
+
"@forgeax/engine-geometry": "0.0.0-dev.8d955ade1c79",
|
|
32
|
+
"@forgeax/engine-graphics-extras": "0.0.0-dev.8d955ade1c79",
|
|
33
|
+
"@forgeax/engine-image": "0.0.0-dev.8d955ade1c79",
|
|
34
|
+
"@forgeax/engine-pack": "0.0.0-dev.8d955ade1c79",
|
|
35
|
+
"@forgeax/engine-plugin": "0.0.0-dev.8d955ade1c79",
|
|
36
|
+
"@forgeax/engine-rhi": "0.0.0-dev.8d955ade1c79",
|
|
37
|
+
"@forgeax/engine-scene": "0.0.0-dev.8d955ade1c79",
|
|
38
|
+
"@forgeax/engine-shader": "0.0.0-dev.8d955ade1c79",
|
|
39
|
+
"@forgeax/engine-types": "0.0.0-dev.8d955ade1c79",
|
|
40
|
+
"@forgeax/engine-ui": "0.0.0-dev.8d955ade1c79",
|
|
41
|
+
"@webgpu/types": "^0.1.71"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@forgeax/engine-skinning": "0.0.0-dev.8d955ade1c79",
|
|
45
|
+
"@webgpu/types": "^0.1.71"
|
|
46
|
+
},
|
|
47
|
+
"forgeax": {
|
|
48
|
+
"metrics": {
|
|
49
|
+
"bundle-size": {
|
|
50
|
+
"enabled": true,
|
|
51
|
+
"path": "dist/index.mjs",
|
|
52
|
+
"compression": "gzip"
|
|
53
|
+
},
|
|
54
|
+
"fps": {
|
|
55
|
+
"enabled": false,
|
|
56
|
+
"reason": "asset registry / loader library, no runtime canvas; fps reported by hello-* apps that consume it"
|
|
57
|
+
},
|
|
58
|
+
"bench": {
|
|
59
|
+
"enabled": false,
|
|
60
|
+
"reason": "asset catalogue + load pipeline run at asset-load time, not per-frame; no CI micro-benchmark warranted"
|
|
61
|
+
},
|
|
62
|
+
"gate": {
|
|
63
|
+
"enabled": false,
|
|
64
|
+
"reason": "no package-level binary gate; smoke gate covered by hello-* / learn-render apps that load assets by GUID"
|
|
65
|
+
},
|
|
66
|
+
"spike-report": {
|
|
67
|
+
"enabled": false,
|
|
68
|
+
"reason": "not a spike package; asset cluster extracted from runtime in feat-20260705-runtime-tier2-decomposition"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "tsup",
|
|
74
|
+
"test": "vitest run"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// @forgeax/engine-assets-runtime -- withMeshAabb / computeAABB coverage
|
|
2
|
+
// (fix issue #709: assets-runtime src entered the coverage pool via the
|
|
3
|
+
// package's own tests importing `../` relative paths -> src; before this the
|
|
4
|
+
// module was only exercised through the compiled dist by runtime-project
|
|
5
|
+
// tests, which are excluded from the coverage denominator).
|
|
6
|
+
|
|
7
|
+
import type { MeshAsset } from '@forgeax/engine-types';
|
|
8
|
+
import { describe, expect, it } from 'vitest';
|
|
9
|
+
import { withMeshAabb } from '../aabb';
|
|
10
|
+
|
|
11
|
+
const EMPTY_BOX = [Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity];
|
|
12
|
+
|
|
13
|
+
function meshWith(position: Float32Array | ArrayBuffer | undefined): MeshAsset {
|
|
14
|
+
return {
|
|
15
|
+
kind: 'mesh',
|
|
16
|
+
vertices: new Float32Array(0),
|
|
17
|
+
attributes: position === undefined ? {} : { position },
|
|
18
|
+
submeshes: [
|
|
19
|
+
{ indexOffset: 0, indexCount: 0, vertexCount: 0, topology: 'triangle-list', materialSlot: 0 },
|
|
20
|
+
],
|
|
21
|
+
materialSlots: [{ slotName: 'Default' }],
|
|
22
|
+
} as MeshAsset;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
describe('withMeshAabb', () => {
|
|
26
|
+
it('computes [min, max] over every (x, y, z) triple of the position attribute', () => {
|
|
27
|
+
const position = Float32Array.of(
|
|
28
|
+
-1,
|
|
29
|
+
-2,
|
|
30
|
+
-3, //
|
|
31
|
+
4,
|
|
32
|
+
5,
|
|
33
|
+
6, //
|
|
34
|
+
0,
|
|
35
|
+
0,
|
|
36
|
+
0,
|
|
37
|
+
);
|
|
38
|
+
const out = withMeshAabb(meshWith(position));
|
|
39
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual([-1, -2, -3, 4, 5, 6]);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('handles a single-vertex mesh (min === max === that vertex)', () => {
|
|
43
|
+
const out = withMeshAabb(meshWith(Float32Array.of(7, 8, 9)));
|
|
44
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual([7, 8, 9, 7, 8, 9]);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('re-wraps an ArrayBuffer position buffer as Float32Array', () => {
|
|
48
|
+
const buf = Float32Array.of(1, 1, 1, 2, 3, 4).buffer;
|
|
49
|
+
const out = withMeshAabb(meshWith(buf));
|
|
50
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual([1, 1, 1, 2, 3, 4]);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('returns the inverted-infinity empty box when position is absent', () => {
|
|
54
|
+
const out = withMeshAabb(meshWith(undefined));
|
|
55
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual(EMPTY_BOX);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('returns the empty box when position has fewer than 3 floats', () => {
|
|
59
|
+
const out = withMeshAabb(meshWith(Float32Array.of(1, 2)));
|
|
60
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual(EMPTY_BOX);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('returns the empty box for a Uint16Array position (treated as absent)', () => {
|
|
64
|
+
const mesh = {
|
|
65
|
+
kind: 'mesh',
|
|
66
|
+
vertices: new Float32Array(0),
|
|
67
|
+
attributes: { position: Uint16Array.of(1, 2, 3) },
|
|
68
|
+
submeshes: [{ indexOffset: 0, indexCount: 0, vertexCount: 0, topology: 'triangle-list' }],
|
|
69
|
+
} as unknown as MeshAsset;
|
|
70
|
+
const out = withMeshAabb(mesh);
|
|
71
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual(EMPTY_BOX);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('preserves a packed AABB when the binary path omits position attributes', () => {
|
|
75
|
+
const mesh = {
|
|
76
|
+
...meshWith(undefined),
|
|
77
|
+
aabb: Float32Array.of(-2, 0, -1, 3, 4, 5),
|
|
78
|
+
};
|
|
79
|
+
const out = withMeshAabb(mesh);
|
|
80
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual([-2, 0, -1, 3, 4, 5]);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('mutates the mesh in place when it is extensible (returns same reference)', () => {
|
|
84
|
+
const mesh = meshWith(Float32Array.of(0, 0, 0, 1, 1, 1));
|
|
85
|
+
const out = withMeshAabb(mesh);
|
|
86
|
+
expect(out).toBe(mesh);
|
|
87
|
+
expect(mesh.aabb).toBeInstanceOf(Float32Array);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('returns a shallow copy carrying the aabb when the mesh is frozen', () => {
|
|
91
|
+
const mesh = Object.freeze(meshWith(Float32Array.of(0, 0, 0, 2, 2, 2)));
|
|
92
|
+
const out = withMeshAabb(mesh);
|
|
93
|
+
expect(out).not.toBe(mesh);
|
|
94
|
+
expect(Array.from(out.aabb as Float32Array)).toEqual([0, 0, 0, 2, 2, 2]);
|
|
95
|
+
expect(mesh.aabb).toBeUndefined();
|
|
96
|
+
});
|
|
97
|
+
});
|