@forgeax/engine-assets-runtime 0.1.3 → 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 +2 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +317 -3
- package/dist/internal.mjs.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 +2 -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,9 @@
|
|
|
1
|
+
export declare class MaterialDependencyGraph {
|
|
2
|
+
#private;
|
|
3
|
+
link(materialGuid: string, dependencies: readonly string[]): void;
|
|
4
|
+
dependentsOf(dependency: string): readonly string[];
|
|
5
|
+
invalidate(dependencies: readonly string[]): readonly string[];
|
|
6
|
+
isInvalidated(materialGuid: string): boolean;
|
|
7
|
+
clear(materialGuid: string): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=dependency-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../src/material/dependency-graph.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAuB;;IAKlC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAYjE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IAInD,UAAU,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE;IAiB9D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAI5C,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CAGlC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type MaterialErrorFor, type MaterialGenerationVector, type Result } from '@forgeax/engine-types';
|
|
2
|
+
export type { MaterialGenerationVector } from '@forgeax/engine-types';
|
|
3
|
+
export interface MaterialCachedArtifact {
|
|
4
|
+
readonly bytes: Uint8Array;
|
|
5
|
+
}
|
|
6
|
+
export type MaterialStaleGenerationError = MaterialErrorFor<'material-specialization-stale-generation'>;
|
|
7
|
+
export declare class MaterialGenerationCache {
|
|
8
|
+
#private;
|
|
9
|
+
resolve<T>(materialGuid: string, specializationKey: string, load: () => Promise<T>, publicationGeneration?: number): Promise<T>;
|
|
10
|
+
linkResolved(materialGuid: string, specializationKey: string): void;
|
|
11
|
+
getResolvedKey(materialGuid: string): string | undefined;
|
|
12
|
+
storeArtifact(key: string, artifact: MaterialCachedArtifact): void;
|
|
13
|
+
getArtifact(key: string): MaterialCachedArtifact | undefined;
|
|
14
|
+
bump(dependency: string): number;
|
|
15
|
+
generationError(materialGuid: string): MaterialStaleGenerationError | undefined;
|
|
16
|
+
loadWithGeneration<T>(materialGuid: string, dependencies: readonly string[], load: (generation: MaterialGenerationVector) => Promise<{
|
|
17
|
+
readonly generation: MaterialGenerationVector;
|
|
18
|
+
readonly value: T;
|
|
19
|
+
}>): Promise<Result<T, MaterialStaleGenerationError>>;
|
|
20
|
+
private trackDependencies;
|
|
21
|
+
private removeResolved;
|
|
22
|
+
private vector;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=generation-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generation-cache.d.ts","sourceRoot":"","sources":["../../src/material/generation-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAE7B,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,MAAM,4BAA4B,GACtC,gBAAgB,CAAC,0CAA0C,CAAC,CAAC;AAO/D,qBAAa,uBAAuB;;IAUlC,OAAO,CAAC,CAAC,EACP,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,qBAAqB,SAAI,GACxB,OAAO,CAAC,CAAC,CAAC;IAkBb,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAInE,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAIlE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAI5D,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAYhC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,4BAA4B,GAAG,SAAS;IAIzE,kBAAkB,CAAC,CAAC,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,IAAI,EAAE,CACJ,UAAU,EAAE,wBAAwB,KACjC,OAAO,CAAC;QAAE,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,GACjF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAsBnD,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,MAAM;CAOf"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MaterialReady } from './loader.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-only facts for one GUID after the MaterialReady gate succeeds.
|
|
4
|
+
* `status` is retained for the existing runtime API; `readiness` is the
|
|
5
|
+
* machine-readable first-level field for inspection consumers. This owner
|
|
6
|
+
* does not invent transport provenance or compare transport URLs.
|
|
7
|
+
*/
|
|
8
|
+
export interface MaterialRuntimeInfo {
|
|
9
|
+
readonly materialGuid: string;
|
|
10
|
+
readonly readiness: 'ready';
|
|
11
|
+
readonly publicationGeneration: number;
|
|
12
|
+
readonly specializationKey: string;
|
|
13
|
+
readonly artifactDigest: string;
|
|
14
|
+
readonly layoutIdentity: string;
|
|
15
|
+
readonly dependencies: readonly string[];
|
|
16
|
+
readonly profile: string;
|
|
17
|
+
readonly sourceClosure: readonly string[];
|
|
18
|
+
readonly parameterContract: MaterialReady['parameterContract'];
|
|
19
|
+
readonly refs: MaterialReady['record']['refs'];
|
|
20
|
+
readonly receipt: MaterialReady['record']['receipt'];
|
|
21
|
+
readonly status: 'Ready';
|
|
22
|
+
}
|
|
23
|
+
export declare function inspectMaterialRuntime(ready: MaterialReady): MaterialRuntimeInfo;
|
|
24
|
+
//# sourceMappingURL=inspection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspection.d.ts","sourceRoot":"","sources":["../../src/material/inspection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC/D,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,mBAAmB,CAqBhF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type CookedMaterialRecord } from '@forgeax/engine-pack';
|
|
2
|
+
export interface MaterialLoadRequest {
|
|
3
|
+
readonly guid: string;
|
|
4
|
+
readonly specializationKey: string;
|
|
5
|
+
}
|
|
6
|
+
export interface MaterialReady {
|
|
7
|
+
readonly status: 'Ready';
|
|
8
|
+
readonly guid: string;
|
|
9
|
+
readonly materialGuid: string;
|
|
10
|
+
readonly publicationGeneration: number;
|
|
11
|
+
readonly specializationKey: string;
|
|
12
|
+
readonly artifactDigest: string;
|
|
13
|
+
readonly sourceClosure: readonly string[];
|
|
14
|
+
readonly parameterContract: NonNullable<CookedMaterialRecord['parameterContract']>;
|
|
15
|
+
readonly record: CookedMaterialRecord;
|
|
16
|
+
readonly artifact: CookedMaterialRecord['artifact'];
|
|
17
|
+
}
|
|
18
|
+
export interface MaterialPublication {
|
|
19
|
+
readonly guid: string;
|
|
20
|
+
readonly record: unknown;
|
|
21
|
+
readonly artifactError?: {
|
|
22
|
+
readonly code: 'asset-artifact-missing' | 'asset-artifact-integrity-mismatch';
|
|
23
|
+
readonly expected: string;
|
|
24
|
+
readonly actual?: string;
|
|
25
|
+
};
|
|
26
|
+
readonly artifact?: {
|
|
27
|
+
readonly bytes: Uint8Array;
|
|
28
|
+
readonly digest?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export type MaterialLoadErrorCode = 'material-specialization-not-cooked' | 'asset-artifact-missing' | 'asset-artifact-integrity-mismatch' | 'material-cook-record-invalid' | 'material-reference-not-ready';
|
|
32
|
+
export interface MaterialLoadErrorDetail {
|
|
33
|
+
readonly guid: string;
|
|
34
|
+
readonly specializationKey: string;
|
|
35
|
+
readonly publicationGeneration?: number;
|
|
36
|
+
readonly field?: string;
|
|
37
|
+
readonly missing?: readonly string[];
|
|
38
|
+
readonly expected?: string;
|
|
39
|
+
readonly actual?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface MaterialLoadError {
|
|
42
|
+
readonly status: 'Error';
|
|
43
|
+
readonly error: {
|
|
44
|
+
readonly code: MaterialLoadErrorCode;
|
|
45
|
+
readonly expected: string;
|
|
46
|
+
readonly hint: string;
|
|
47
|
+
readonly retryable: boolean;
|
|
48
|
+
readonly recoveryActions: readonly string[];
|
|
49
|
+
readonly detail: MaterialLoadErrorDetail;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface MaterialLoaderOptions {
|
|
53
|
+
readonly loadPublication: (guid: string, specializationKey: string) => Promise<MaterialPublication | undefined>;
|
|
54
|
+
readonly loadReference?: (guid: string) => Promise<boolean>;
|
|
55
|
+
}
|
|
56
|
+
export declare function createMaterialLoader(options: MaterialLoaderOptions): {
|
|
57
|
+
load(request: MaterialLoadRequest): Promise<MaterialReady | MaterialLoadError>;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/material/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ShaderRegistry } from '@forgeax/engine-shader';
|
|
2
|
+
import type { MaterialParameter, ParamSchemaEntry } from '@forgeax/engine-types';
|
|
3
|
+
import type { MaterialReady } from './loader';
|
|
4
|
+
/** Project authored MaterialAsset parameters into the runtime shader schema. */
|
|
5
|
+
export declare function materialParametersToParamSchema(parameters: readonly MaterialParameter[], shaderId: string | undefined): readonly ParamSchemaEntry[];
|
|
6
|
+
/** Project authored pass module ids onto the renderer's canonical ids. */
|
|
7
|
+
export declare function runtimeMaterialShaderId(module: string | undefined, passName?: string): string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Install every authored pass module from one validated MaterialReady tuple.
|
|
10
|
+
* The publication artifact is the only runtime shader source; no host entry
|
|
11
|
+
* point is allowed to assemble or register the material separately.
|
|
12
|
+
*/
|
|
13
|
+
export declare function installMaterialReadyShaders(shaderRegistry: ShaderRegistry, readiness: MaterialReady): void;
|
|
14
|
+
//# sourceMappingURL=runtime-shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-shader.d.ts","sourceRoot":"","sources":["../../src/material/runtime-shader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAY9C,gFAAgF;AAChF,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,SAAS,gBAAgB,EAAE,CA0B7B;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAsBpB;AAuBD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,aAAa,GACvB,IAAI,CA6BN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh-bin.d.ts","sourceRoot":"","sources":["../src/mesh-bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,KAAK,eAAe,EACpB,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { type Result, RhiError } from '@forgeax/engine-rhi';
|
|
2
|
+
/**
|
|
3
|
+
* Subset of `RhiDevice` consumed by the mipmap utility (charter F2: only
|
|
4
|
+
* the methods the algorithm actually invokes; the dawn integration tests
|
|
5
|
+
* pass a real `RhiDevice` and the unit cache tests pass a hand-rolled stub).
|
|
6
|
+
*
|
|
7
|
+
* Four entry-points (all synchronous Result):
|
|
8
|
+
* - createSampler (default linear / linear / linear)
|
|
9
|
+
* - createBindGroupLayout
|
|
10
|
+
* - createPipelineLayout
|
|
11
|
+
* - createRenderPipeline (per-format pipeline cache miss)
|
|
12
|
+
*
|
|
13
|
+
* Shader module is NOT an entry-point here; it is supplied by an injected
|
|
14
|
+
* `MipmapShaderModuleFactory` (bug-20260518 D-1) so the utility does not
|
|
15
|
+
* reach into the rhi-webgpu shim package from the runtime layer.
|
|
16
|
+
*
|
|
17
|
+
* Plus `createCommandEncoder` + `queue.submit` are added once the upload
|
|
18
|
+
* call-site (T-M3-05) wires generateMipmaps in; the cache-only public hooks
|
|
19
|
+
* exercised by T-M3-01 do not need them, so they live behind an extended
|
|
20
|
+
* MipmapDeviceForBlit alias.
|
|
21
|
+
*/
|
|
22
|
+
export type MipmapDevice = {
|
|
23
|
+
createSampler(desc?: any): Result<any, any>;
|
|
24
|
+
createBindGroupLayout(desc: any): Result<any, any>;
|
|
25
|
+
createPipelineLayout(desc: any): Result<any, any>;
|
|
26
|
+
createRenderPipeline(desc: any): Result<any, any>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Async shader-module factory injected through the call-chain
|
|
30
|
+
* `createRenderer.ts` -> `AssetRegistry.configureGpuDevice` ->
|
|
31
|
+
* `generateMipmaps` -> `getOrCreateMipmapPipeline` -> `ensureDeviceCache`
|
|
32
|
+
* (bug-20260518 D-1 / D-4).
|
|
33
|
+
*
|
|
34
|
+
* Signature mirrors the top-level async `createShaderModule(device, desc)`
|
|
35
|
+
* exposed by the rhi-webgpu shim (and the rhi-wgpu shim) so the
|
|
36
|
+
* call-site in createRenderer can pass `pack.createShaderModule` directly
|
|
37
|
+
* without a structural cast. The opaque module value is typed `unknown`
|
|
38
|
+
* here -- callers do not introspect it; they hand the value back to
|
|
39
|
+
* `createRenderPipeline` descriptors via the cached `MipmapPipelineCache`.
|
|
40
|
+
*/
|
|
41
|
+
export type MipmapShaderModuleFactory = (device: MipmapDevice, desc: {
|
|
42
|
+
code: string;
|
|
43
|
+
label?: string;
|
|
44
|
+
}) => Promise<Result<unknown, RhiError>>;
|
|
45
|
+
/**
|
|
46
|
+
* Compute mip-level count for a 2D texture (research F-1 SSOT formula).
|
|
47
|
+
*
|
|
48
|
+
* Spec-anchor: WebGPU §3.6 texture-creation says `mipLevelCount` defaults
|
|
49
|
+
* to 1; the runtime utility opts AI users into a full chain via
|
|
50
|
+
* `floor(log2(max(width, height))) + 1` -- the same formula greggman /
|
|
51
|
+
* toji / webgpufundamentals all converge on.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* numMipLevels({ width: 256, height: 256 }) // 9
|
|
55
|
+
* numMipLevels({ width: 1, height: 1 }) // 1
|
|
56
|
+
*/
|
|
57
|
+
export declare function numMipLevels(size: {
|
|
58
|
+
width: number;
|
|
59
|
+
height: number;
|
|
60
|
+
}): number;
|
|
61
|
+
/**
|
|
62
|
+
* Number of cached pipelines for the device (introspection hook used by
|
|
63
|
+
* T-M3-01 (c) cache-hit / (d) per-device-isolation tests; charter P3
|
|
64
|
+
* explicit failure: a cache size of 0 on a fresh device is a witnessed
|
|
65
|
+
* pre-condition rather than a swept-under hint).
|
|
66
|
+
*/
|
|
67
|
+
export declare function mipmapCacheSize(device: MipmapDevice): number;
|
|
68
|
+
/**
|
|
69
|
+
* Get the existing per-format render pipeline or build a fresh one.
|
|
70
|
+
*
|
|
71
|
+
* Per-device WeakMap + per-format `Map<GPUTextureFormat, RenderPipeline>`
|
|
72
|
+
* (greggman 36-44 + 119-122). The shared sampler / shader-module /
|
|
73
|
+
* bind-group-layout are constructed lazily on the first cache miss for a
|
|
74
|
+
* given device and reused across all formats on that device.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getOrCreateMipmapPipeline(device: MipmapDevice, format: GPUTextureFormat, asyncCreateShaderModule: MipmapShaderModuleFactory): Promise<Result<any, unknown>>;
|
|
77
|
+
/**
|
|
78
|
+
* Extended device shape used by `generateMipmaps` (call-site T-M3-05).
|
|
79
|
+
* Adds command-encoder + bind-group + texture-view + queue surfaces beyond
|
|
80
|
+
* the cache-only `MipmapDevice` so the pipeline-cache unit tests still
|
|
81
|
+
* compile against the smaller surface.
|
|
82
|
+
*/
|
|
83
|
+
export type MipmapBlitDevice = MipmapDevice & {
|
|
84
|
+
createTexture(desc: any): Result<any, any>;
|
|
85
|
+
createBindGroup(desc: any): Result<any, any>;
|
|
86
|
+
createTextureView(texture: any, desc: any): Result<any, any>;
|
|
87
|
+
createCommandEncoder(desc?: any): Result<any, any>;
|
|
88
|
+
readonly queue: {
|
|
89
|
+
submit(buffers: ReadonlyArray<any>): Result<void, any>;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Per-mip render-pass blit-loop (research F-1 SSOT main template).
|
|
94
|
+
*
|
|
95
|
+
* For mip levels 1..levels-1: source view = previous mip {baseMipLevel:i-1,
|
|
96
|
+
* mipLevelCount:1}; destination view = current mip {baseMipLevel:i,
|
|
97
|
+
* mipLevelCount:1, usage: RENDER_ATTACHMENT}; oversized-triangle pipeline
|
|
98
|
+
* draws 3 vertices, fragment shader samples source via linear sampler.
|
|
99
|
+
*
|
|
100
|
+
* Spec sRGB correctness (F-3): when format is `*-srgb`, both views inherit
|
|
101
|
+
* the sRGB encoding so hardware decode -> bilinear in linear -> encode back
|
|
102
|
+
* happens automatically; no special-casing required.
|
|
103
|
+
*
|
|
104
|
+
* `levels` defaults to `numMipLevels({ width, height })`. AI users that
|
|
105
|
+
* already created the texture with explicit `mipLevelCount` should pass the
|
|
106
|
+
* same value here.
|
|
107
|
+
*/
|
|
108
|
+
export declare function generateMipmaps(device: MipmapBlitDevice, texture: any, descriptor: {
|
|
109
|
+
readonly format: GPUTextureFormat;
|
|
110
|
+
readonly width: number;
|
|
111
|
+
readonly height: number;
|
|
112
|
+
readonly levels?: number;
|
|
113
|
+
}, asyncCreateShaderModule: MipmapShaderModuleFactory): Promise<Result<void, unknown>>;
|
|
114
|
+
/**
|
|
115
|
+
* Synchronous sibling of `generateMipmaps` (feat-20260601-gpu-resource-store
|
|
116
|
+
* -extraction D-9). Identical per-mip blit loop, but reads the per-format
|
|
117
|
+
* pipeline + shared sampler / layout from the prewarmed device cache instead
|
|
118
|
+
* of building them. The pipeline MUST already be present (via a prior
|
|
119
|
+
* `getOrCreateMipmapPipeline` / `prewarmMipmapPipeline` async call) -- an
|
|
120
|
+
* un-prewarmed device or format returns a structured `RhiError` rather than
|
|
121
|
+
* awaiting a build, so the synchronous `draw(world)` frame contract is never
|
|
122
|
+
* broken. The async build itself does not affect the written bytes (same
|
|
123
|
+
* shader, same encoder sequence), so prewarm + sync blit reproduces the
|
|
124
|
+
* pre-extraction async `generateMipmaps` byte-for-byte (D-9 sub-contract 5).
|
|
125
|
+
*/
|
|
126
|
+
export declare function blitMipmapsSync(device: MipmapBlitDevice, texture: any, descriptor: {
|
|
127
|
+
readonly format: GPUTextureFormat;
|
|
128
|
+
readonly width: number;
|
|
129
|
+
readonly height: number;
|
|
130
|
+
readonly levels?: number;
|
|
131
|
+
}): Result<void, RhiError>;
|
|
132
|
+
//# sourceMappingURL=mipmap-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mipmap-generator.d.ts","sourceRoot":"","sources":["../src/mipmap-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Asset, TilesetAsset } from '@forgeax/engine-types';
|
|
2
|
+
import { AssetError } from '@forgeax/engine-types';
|
|
3
|
+
/**
|
|
4
|
+
* Register-stage fail-fast for `kind: 'mesh'` payloads whose vertices buffer
|
|
5
|
+
* is not the canonical 12-floats-per-vertex layout.
|
|
6
|
+
*
|
|
7
|
+
* Validation spec (plan-strategy D-3):
|
|
8
|
+
* (a) asset.kind !== 'mesh' -> return null immediately
|
|
9
|
+
* (b) vertices.length === 0 && indices.length === 0 -> return null (empty mesh legal)
|
|
10
|
+
* (c) vertices.length % PROCEDURAL_FLOATS_PER_VERTEX !== 0 -> `AssetError` with
|
|
11
|
+
* code='mesh-vertex-stride-mismatch', detail = { vertexCount: 0,
|
|
12
|
+
* floatsPerVertex: vertices.length / PROCEDURAL_FLOATS_PER_VERTEX } (non-integer)
|
|
13
|
+
* (d) otherwise compute vertexCount = vertices.length / PROCEDURAL_FLOATS_PER_VERTEX;
|
|
14
|
+
* scan indices for maxIndex;
|
|
15
|
+
* if maxIndex + 1 !== vertexCount -> same AssetError shape with
|
|
16
|
+
* detail = { vertexCount: maxIndex + 1, floatsPerVertex: vertices.length / (maxIndex + 1) }
|
|
17
|
+
*
|
|
18
|
+
* Isomorphic with `validateMaterialPayload` — both are private module-level helpers,
|
|
19
|
+
* both return `AssetError | null`, and both are called from `register()` at entry.
|
|
20
|
+
*
|
|
21
|
+
* Anchors: charter P3 (structured failure); plan-strategy D-2 (gate at register stage);
|
|
22
|
+
* plan-strategy D-3 (three-branch validation: empty / non-divisible-12 / maxIndex mismatch);
|
|
23
|
+
* plan-strategy D-5 (physical location co-located with validateMaterialPayload).
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateMeshPayload(asset: Asset): AssetError | null;
|
|
26
|
+
/**
|
|
27
|
+
* Optional atlas extent for `validateTilesetPayload`. When omitted, the
|
|
28
|
+
* region-rectangle bounds-check is skipped — only the
|
|
29
|
+
* `tiles[].regionIndex` in `[0, regions.length)` invariant runs.
|
|
30
|
+
*/
|
|
31
|
+
export interface TilesetValidateOptions {
|
|
32
|
+
readonly atlasWidth?: number;
|
|
33
|
+
readonly atlasHeight?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate a `TilesetAsset` payload at register time (M0 baseline rebuild
|
|
37
|
+
* + M1 schema extension). Returns `null` on success or an `AssetError`
|
|
38
|
+
* carrying the first-error details (charter P3 fail-fast). R-6 ordering:
|
|
39
|
+
*
|
|
40
|
+
* 1. `atlases.length >= 1` -- 'tileset-tile-entry-malformed' .field='atlases'.
|
|
41
|
+
* 2. Region rectangle escapes atlas extent (when extent is supplied) --
|
|
42
|
+
* M0 code 'tileset-region-index-out-of-range'.
|
|
43
|
+
* 3. `regions[i].atlasIndex` in `[0, atlases.length)` -- 'tileset-tile-entry-malformed'
|
|
44
|
+
* .field='atlasIndex'.
|
|
45
|
+
* 4. `tiles[i].regionIndex` in `[0, regions.length)` -- M0 code.
|
|
46
|
+
* 5. Per-tile-entry boundaries -- 'tileset-tile-entry-malformed'
|
|
47
|
+
* .field=widthCells | heightCells | pivotX | pivotY | collider,
|
|
48
|
+
* in that order, .scope='tile-entry' .tileEntryIndex=i.
|
|
49
|
+
*/
|
|
50
|
+
export declare function validateTilesetPayload(asset: TilesetAsset, opts?: TilesetValidateOptions): AssetError | null;
|
|
51
|
+
/**
|
|
52
|
+
* Compute the implicit atlas extent of a `TilesetAsset` from its grid metadata
|
|
53
|
+
* (`columns * tileWidth` x `rows * tileHeight`). Used by the register-time
|
|
54
|
+
* region-bounds check when the caller does not supply explicit extents.
|
|
55
|
+
*/
|
|
56
|
+
export declare function inferAtlasExtent(asset: TilesetAsset): {
|
|
57
|
+
atlasWidth: number;
|
|
58
|
+
atlasHeight: number;
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=payload-validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-validate.d.ts","sourceRoot":"","sources":["../src/payload-validate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,KAAK,EAEL,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAqB,UAAU,EAAoB,MAAM,uBAAuB,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,CAqMnE;AAoBD;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AA6ID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,IAAI,GAAE,sBAA2B,GAChC,UAAU,GAAG,IAAI,CA6InB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAKjG"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Plugin } from '@forgeax/engine-plugin';
|
|
2
|
+
import type { Loader } from '@forgeax/engine-types';
|
|
3
|
+
import type { AssetRegistry } from './asset-registry';
|
|
4
|
+
import type { PackLoader } from './loader-registry';
|
|
5
|
+
declare module '@forgeax/engine-plugin' {
|
|
6
|
+
interface EngineContextServices {
|
|
7
|
+
assets?: AssetRegistry;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** Provide one renderer-owned asset registry to the current Cordis realm. */
|
|
11
|
+
export declare function assetsPlugin(assets: AssetRegistry): Plugin;
|
|
12
|
+
/** Reversibly register one runtime asset loader. */
|
|
13
|
+
export declare function assetLoaderPlugin(loader: Loader<unknown>): Plugin;
|
|
14
|
+
/** Reversibly register one pack loader. */
|
|
15
|
+
export declare function packLoaderPlugin(loader: PackLoader): Plugin;
|
|
16
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,qBAAqB;QAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB;CACF;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQ1D;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAUjE;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAU3D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ArtifactDescriptor, AssetArtifactError } from '@forgeax/engine-types';
|
|
2
|
+
import { type Result } from '@forgeax/engine-types';
|
|
3
|
+
export interface ArtifactReadRequest {
|
|
4
|
+
readonly packageUrl: string;
|
|
5
|
+
readonly guid: string;
|
|
6
|
+
readonly artifactKey: string;
|
|
7
|
+
readonly descriptor: ArtifactDescriptor;
|
|
8
|
+
}
|
|
9
|
+
export type ArtifactFetcher = (url: string) => Promise<Response>;
|
|
10
|
+
export declare function readArtifact(request: ArtifactReadRequest, fetcher?: ArtifactFetcher): Promise<Result<Uint8Array, AssetArtifactError>>;
|
|
11
|
+
export declare class ArtifactReadCache {
|
|
12
|
+
private readonly cache;
|
|
13
|
+
read(key: string, reader: () => Promise<Result<Uint8Array, AssetArtifactError>>): Promise<Result<Uint8Array, AssetArtifactError>>;
|
|
14
|
+
clear(key?: string): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=artifact-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-io.d.ts","sourceRoot":"","sources":["../../src/registry/artifact-io.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACzC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAgJjE,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,eAAgD,GACxD,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CA4EjD;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsE;IAE5F,IAAI,CACF,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAWlD,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAI1B"}
|
|
@@ -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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"}
|