@forgeax/engine-assets-runtime 0.1.4 → 0.1.7
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 +453 -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 +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 +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 +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 +32 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +7233 -114
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/loader-registry.d.ts +63 -0
- package/dist/loader-registry.d.ts.map +1 -0
- package/dist/loaders/inline-pack.d.ts +72 -0
- package/dist/loaders/inline-pack.d.ts.map +1 -0
- package/dist/loaders/mesh-bin.d.ts +21 -0
- package/dist/loaders/mesh-bin.d.ts.map +1 -0
- package/dist/loaders/pack-artifact.d.ts +20 -0
- package/dist/loaders/pack-artifact.d.ts.map +1 -0
- package/dist/material/dependency-graph.d.ts +9 -0
- package/dist/material/dependency-graph.d.ts.map +1 -0
- package/dist/material/generation-cache.d.ts +24 -0
- package/dist/material/generation-cache.d.ts.map +1 -0
- package/dist/material/inspection.d.ts +24 -0
- package/dist/material/inspection.d.ts.map +1 -0
- package/dist/material/loader.d.ts +59 -0
- package/dist/material/loader.d.ts.map +1 -0
- package/dist/material/runtime-shader.d.ts +14 -0
- package/dist/material/runtime-shader.d.ts.map +1 -0
- package/dist/mesh-bin.d.ts +3 -0
- package/dist/mesh-bin.d.ts.map +1 -0
- package/dist/mipmap-generator.d.ts +132 -0
- package/dist/mipmap-generator.d.ts.map +1 -0
- package/dist/payload-validate.d.ts +60 -0
- package/dist/payload-validate.d.ts.map +1 -0
- package/dist/plugin.d.ts +16 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/registry/artifact-io.d.ts +16 -0
- package/dist/registry/artifact-io.d.ts.map +1 -0
- package/dist/registry/asset-evidence.d.ts +13 -0
- package/dist/registry/asset-evidence.d.ts.map +1 -0
- package/dist/registry/catalog-state.d.ts +47 -0
- package/dist/registry/catalog-state.d.ts.map +1 -0
- package/dist/registry/catalog.d.ts +48 -0
- package/dist/registry/catalog.d.ts.map +1 -0
- package/dist/registry/instantiate.d.ts +153 -0
- package/dist/registry/instantiate.d.ts.map +1 -0
- package/dist/registry/load-by-guid.d.ts +247 -0
- package/dist/registry/load-by-guid.d.ts.map +1 -0
- package/dist/registry/load-state.d.ts +26 -0
- package/dist/registry/load-state.d.ts.map +1 -0
- package/dist/registry/runtime-projection.d.ts +16 -0
- package/dist/registry/runtime-projection.d.ts.map +1 -0
- package/dist/registry/scene-publication-fence.d.ts +38 -0
- package/dist/registry/scene-publication-fence.d.ts.map +1 -0
- package/dist/registry/validate-material.d.ts +77 -0
- package/dist/registry/validate-material.d.ts.map +1 -0
- package/dist/resolve-asset-handle.d.ts +43 -0
- package/dist/resolve-asset-handle.d.ts.map +1 -0
- package/dist/resolve-tileset-runtime.d.ts +23 -0
- package/dist/resolve-tileset-runtime.d.ts.map +1 -0
- package/dist/scene-handle-fields.d.ts +88 -0
- package/dist/scene-handle-fields.d.ts.map +1 -0
- package/dist/scene-payload.d.ts +15 -0
- package/dist/scene-payload.d.ts.map +1 -0
- package/dist/wire-default-loaders.d.ts +29 -0
- package/dist/wire-default-loaders.d.ts.map +1 -0
- package/package.json +22 -9
- package/src/__tests__/aabb.unit.test.ts +97 -0
- package/src/__tests__/artifact-integrity.unit.test.ts +99 -0
- package/src/__tests__/artifact-io.unit.test.ts +127 -0
- package/src/__tests__/asset-evidence-sdk.integration.test.ts +32 -0
- package/src/__tests__/asset-evidence.unit.test.ts +32 -0
- package/src/__tests__/{asset-kind.test.ts → asset-kind.unit.test.ts} +1 -1
- package/src/__tests__/asset-registry-catalog-reconcile.integration.test.ts +74 -0
- package/src/__tests__/asset-registry-catalog-reconcile.unit.test.ts +89 -0
- package/src/__tests__/asset-registry-catalog.unit.test.ts +170 -0
- package/src/__tests__/asset-registry.pack-cache.test.ts +96 -0
- package/src/__tests__/asset-registry.unit.test.ts +511 -0
- package/src/__tests__/asset-runtime-error-code-owner.test-d.ts +63 -0
- package/src/__tests__/catalog-replica.unit.test.ts +196 -0
- package/src/__tests__/catalog-source-v2.unit.test.ts +158 -0
- package/src/__tests__/catalog-source.unit.test.ts +126 -0
- package/src/__tests__/catalog-subscription-order.unit.test.ts +65 -0
- package/src/__tests__/catalog-subscription.unit.test.ts +28 -0
- package/src/__tests__/decode-image-bytes-pass-through.test.ts +34 -0
- package/src/__tests__/decode-image-bytes.browser.test.ts +102 -0
- package/src/__tests__/decode-image-bytes.test-d.ts +108 -0
- package/src/__tests__/decode-image-bytes.test.ts +90 -0
- package/src/__tests__/decode-image-mime-owner.test.ts +2 -5
- package/src/__tests__/dynamic-texture-store.unit.test.ts +115 -0
- package/src/__tests__/errors-asset.unit.test.ts +92 -0
- package/src/__tests__/inline-pack-loaders.unit.test.ts +548 -0
- package/src/__tests__/instantiate-context.unit.test.ts +65 -0
- package/src/__tests__/instantiate-publication-fence.unit.test.ts +158 -0
- package/src/__tests__/instantiate.unit.test.ts +684 -0
- package/src/__tests__/loader-input-contract.unit.test.ts +89 -0
- package/src/__tests__/loader-registry.unit.test.ts +101 -0
- package/src/__tests__/material-dependency-invalidation.unit.test.ts +14 -0
- package/src/__tests__/material-generation-cache.unit.test.ts +46 -0
- package/src/__tests__/material-load-consumer.test-d.ts +42 -0
- package/src/__tests__/material-ready.integration.test.ts +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-registry.ts +2045 -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 +186 -0
- package/src/image-error.ts +45 -0
- package/src/index.ts +183 -16
- package/src/internal.ts +1 -0
- package/src/loader-registry.ts +157 -0
- package/src/loaders/inline-pack.ts +837 -0
- package/src/loaders/mesh-bin.ts +304 -0
- package/src/loaders/pack-artifact.ts +665 -0
- package/src/material/dependency-graph.ts +46 -0
- package/src/material/generation-cache.ts +177 -0
- package/src/material/inspection.ts +46 -0
- package/src/material/loader.ts +326 -0
- package/src/material/runtime-shader.ts +133 -0
- package/src/mesh-bin.ts +5 -0
- package/src/mipmap-generator.ts +450 -0
- package/src/payload-validate.ts +573 -0
- package/src/plugin.ts +48 -0
- package/src/registry/artifact-io.ts +259 -0
- package/src/registry/asset-evidence.ts +51 -0
- package/src/registry/catalog-state.ts +409 -0
- package/src/registry/catalog.ts +369 -0
- package/src/registry/instantiate.ts +1056 -0
- package/src/registry/load-by-guid.ts +1657 -0
- package/src/registry/load-state.ts +115 -0
- package/src/registry/runtime-projection.ts +63 -0
- package/src/registry/scene-publication-fence.ts +256 -0
- package/src/registry/validate-material.ts +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
- 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
package/dist/internal.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { CatalogSession } from './internal/catalog-session.js';
|
|
2
|
-
export { type AssetRegistryResolver, getAssetRegistryResolver, } from './internal/load-asset.js';
|
|
2
|
+
export { type AssetRegistry, type AssetRegistryResolver, getAssetRegistryResolver, } from './internal/load-asset.js';
|
|
3
3
|
//# sourceMappingURL=internal.d.ts.map
|
package/dist/internal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,KAAK,qBAAqB,EAC1B,wBAAwB,GACzB,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,wBAAwB,GACzB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ArtifactDescriptor, LoadContext, Loader } from '@forgeax/engine-types';
|
|
2
|
+
export interface PackArtifactInput {
|
|
3
|
+
readonly descriptor: ArtifactDescriptor;
|
|
4
|
+
readonly bytes: Uint8Array;
|
|
5
|
+
}
|
|
6
|
+
export interface PackLoaderInput {
|
|
7
|
+
readonly guid: string;
|
|
8
|
+
readonly kind: string;
|
|
9
|
+
readonly payload: Record<string, unknown>;
|
|
10
|
+
readonly refs: readonly string[];
|
|
11
|
+
readonly artifacts: Readonly<Record<string, PackArtifactInput>>;
|
|
12
|
+
}
|
|
13
|
+
export interface PackLoader {
|
|
14
|
+
readonly kind: string;
|
|
15
|
+
load(input: PackLoaderInput, ctx: LoadContext): unknown;
|
|
16
|
+
}
|
|
17
|
+
export type PackLoadResult = {
|
|
18
|
+
readonly ok: true;
|
|
19
|
+
readonly value: unknown;
|
|
20
|
+
} | {
|
|
21
|
+
readonly ok: false;
|
|
22
|
+
readonly error: unknown;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Injectable `asset.kind` -> {@link Loader} table held by `AssetRegistry`.
|
|
26
|
+
*
|
|
27
|
+
* @example Wire + dispatch (host side)
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { LoaderRegistry, wireDefaultLoaders } from '@forgeax/engine-assets-runtime';
|
|
30
|
+
* const loaders = new LoaderRegistry();
|
|
31
|
+
* wireDefaultLoaders(loaders);
|
|
32
|
+
* const meshLoader = loaders.get('mesh'); // Loader | undefined
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class LoaderRegistry {
|
|
36
|
+
private readonly loaders;
|
|
37
|
+
private readonly packLoaders;
|
|
38
|
+
/**
|
|
39
|
+
* Register a loader for its `loader.kind`. Fail-fast on a malformed loader
|
|
40
|
+
* (charter P3); rejects a repeated kind so the canonical owner cannot be replaced.
|
|
41
|
+
*
|
|
42
|
+
* @param loader the `{ kind, load }` object to register.
|
|
43
|
+
* @throws TypeError when `loader.kind` is empty or `loader.load` is not a
|
|
44
|
+
* function — a wire-time misconfiguration the host must fix.
|
|
45
|
+
*/
|
|
46
|
+
register(loader: Loader<unknown>): () => void;
|
|
47
|
+
registerPackLoader(loader: PackLoader): () => void;
|
|
48
|
+
loadPack(input: PackLoaderInput, ctx: LoadContext): Promise<PackLoadResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Look up the loader registered for `kind`. Returns `undefined` when no
|
|
51
|
+
* loader is wired — the `AssetRegistry` consumer maps that to a structured
|
|
52
|
+
* `AssetError(code='loader-not-registered')` with the registered kinds in
|
|
53
|
+
* `.detail` (charter P3).
|
|
54
|
+
*/
|
|
55
|
+
get(kind: string): Loader<unknown> | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* The kinds currently wired, in insertion order. Fed into the
|
|
58
|
+
* `loader-not-registered` error `.detail.registeredKinds` so AI users see
|
|
59
|
+
* exactly what is injectable.
|
|
60
|
+
*/
|
|
61
|
+
registeredKinds(): readonly string[];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=loader-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-registry.d.ts","sourceRoot":"","sources":["../src/loader-registry.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAErF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC;CACzD;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAE7D;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI;IAoB7C,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI;IAoB5C,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAqBjF;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS;IAI9C;;;;OAIG;IACH,eAAe,IAAI,SAAS,MAAM,EAAE;CAGrC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Loader } from '@forgeax/engine-types';
|
|
2
|
+
/** mesh loader — Float32Array / Uint16Array | Uint32Array normalisation -> MeshAsset.
|
|
3
|
+
*
|
|
4
|
+
* feat-20260611: skinIndex (Uint16Array) and skinWeight (Float32Array) accept
|
|
5
|
+
* both their native typed-array shape (in-memory: dawn smoke / direct
|
|
6
|
+
* `register` test) AND `number[]` (post-`JSON.stringify` shape produced by the
|
|
7
|
+
* dev-server / build-mode pack-body round-trip — `JSON.stringify(pack) -> fetch
|
|
8
|
+
* -> JSON.parse` flattens every typed array to a plain Array). Same dual
|
|
9
|
+
* contract `skeletonLoader` / `animationClipLoader` already honour (PR #350);
|
|
10
|
+
* without the array arm, every Fox.glb / Khronos skinned glTF surfaces as
|
|
11
|
+
* `asset-parse-failed` on the browser path while dawn smoke stays green.
|
|
12
|
+
*/
|
|
13
|
+
export declare const meshLoader: Loader;
|
|
14
|
+
/** scene loader — delegates to parseScenePayload; routes structured ref error via ctx. */
|
|
15
|
+
export declare const sceneLoader: Loader;
|
|
16
|
+
/** material loader — passes + values + serialized parent GUID -> parentGuid. */
|
|
17
|
+
export declare const materialLoader: Loader;
|
|
18
|
+
/** sampler loader — preserve the serialised SamplerAsset descriptor. */
|
|
19
|
+
export declare const samplerLoader: Loader;
|
|
20
|
+
/** skeleton loader — inverseBindMatrices stride validation.
|
|
21
|
+
*
|
|
22
|
+
* bug-20260611: accept both `Float32Array` (in-memory: dawn smoke / direct
|
|
23
|
+
* `register` test) AND `number[]` (post-`JSON.stringify` shape: `normaliseForPack`
|
|
24
|
+
* in @forgeax/engine-import flattens every typed array to a plain Array so
|
|
25
|
+
* `JSON.stringify(pack)` survives the dev-server / build-mode round-trip --
|
|
26
|
+
* the same dual contract `meshLoader` already honours). Without the array arm
|
|
27
|
+
* the .pack.json -> fetch -> JSON.parse path lands a plain object whose
|
|
28
|
+
* `instanceof Float32Array` check fails, surfacing as `asset-parse-failed`
|
|
29
|
+
* for any glTF carrying a Skin (e.g. Khronos Fox.glb).
|
|
30
|
+
*/
|
|
31
|
+
export declare const skeletonLoader: Loader;
|
|
32
|
+
/** skin loader — skeletonGuid + jointPaths validation. */
|
|
33
|
+
export declare const skinLoader: Loader;
|
|
34
|
+
/** animation-clip loader — channels / sampler validation.
|
|
35
|
+
*
|
|
36
|
+
* bug-20260611: sampler.input / sampler.output accept both `Float32Array`
|
|
37
|
+
* (in-memory) and `number[]` (post-`JSON.stringify` shape produced by
|
|
38
|
+
* `normaliseForPack`). Same dual contract as `skeletonLoader` /
|
|
39
|
+
* `meshLoader`; without it the dev `.pack.json` round-trip surfaces every
|
|
40
|
+
* skinned-with-animation glTF as `asset-parse-failed`.
|
|
41
|
+
*/
|
|
42
|
+
export declare const animationClipLoader: Loader;
|
|
43
|
+
/** animation-graph loader — pack payload -> AnimationGraph POD.
|
|
44
|
+
*
|
|
45
|
+
* feat-20260713-animation-state-machine-plugin M4 / w30 (plan D-4 landing (3)):
|
|
46
|
+
* the inverse of `serializeAnimationGraph` (runtime). Each Clip leaf's `clip`
|
|
47
|
+
* field arrives as a `refs[]` index (small int); the loader resolves it back to
|
|
48
|
+
* the GUID string verbatim, leaving GUID -> handle re-resolution to the ECS/use
|
|
49
|
+
* time (the same "GUID at load, handle at use" contract materialLoader honours
|
|
50
|
+
* for parentGuid / values texture fields, asset-registry D-19). Blend/Add
|
|
51
|
+
* node references + `root` are intra-graph node indices, validated against the
|
|
52
|
+
* node count. A malformed payload (out-of-range refs / node index, bad node
|
|
53
|
+
* shape, non-finite weight) returns `undefined` so the load-by-guid path
|
|
54
|
+
* surfaces the existing `asset-parse-failed` error code (AC-14).
|
|
55
|
+
*
|
|
56
|
+
* OOS-7: reconstructs only an engine-authored graph's topology; no DCC-import
|
|
57
|
+
* metadata is consumed.
|
|
58
|
+
*/
|
|
59
|
+
export declare const animationGraphLoader: Loader;
|
|
60
|
+
/** audio loader -- restore the durable descriptor; host decode stays elsewhere. */
|
|
61
|
+
export declare const audioLoader: Loader;
|
|
62
|
+
/** particle loader -- restore the complete cooked program without a GPU device. */
|
|
63
|
+
export declare const particleEffectLoader: Loader;
|
|
64
|
+
export { renderPipelineLoader, tilesetLoader } from './pack-artifact';
|
|
65
|
+
/**
|
|
66
|
+
* The eight inline pack-payload loaders, in the historical `if`-chain order
|
|
67
|
+
* (the animation-graph loader, feat-20260713 M4 / w30, appends after the clip
|
|
68
|
+
* loader). `wireDefaultLoaders` (w5) registers these plus the texture / font /
|
|
69
|
+
* equirect loaders (w6) and the audio placeholder (w8).
|
|
70
|
+
*/
|
|
71
|
+
export declare const INLINE_PACK_LOADERS: readonly Loader[];
|
|
72
|
+
//# sourceMappingURL=inline-pack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-pack.d.ts","sourceRoot":"","sources":["../../src/loaders/inline-pack.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAWV,MAAM,EAOP,MAAM,uBAAuB,CAAC;AAoB/B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,EAAE,MA8OxB,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,WAAW,EAAE,MAazB,CAAC;AAiFF,gFAAgF;AAChF,eAAO,MAAM,cAAc,EAAE,MAsI5B,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,aAAa,EAAE,MAiE3B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,MAoB5B,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,UAAU,EAAE,MAcxB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,MA0DjC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAgDlC,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,WAAW,EAAE,MAqBzB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,MASlC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAahD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type VertexLayoutProjection } from '@forgeax/engine-geometry';
|
|
2
|
+
import { type Result, type VertexAttributeMap } from '@forgeax/engine-types';
|
|
3
|
+
import { MeshBinAssetError } from '../errors/asset';
|
|
4
|
+
export interface UnpackedMeshBin {
|
|
5
|
+
readonly version: 4;
|
|
6
|
+
readonly projection: VertexLayoutProjection;
|
|
7
|
+
readonly vertices: Float32Array;
|
|
8
|
+
readonly attributes: VertexAttributeMap;
|
|
9
|
+
readonly indices?: Uint16Array | Uint32Array;
|
|
10
|
+
readonly submeshes: ReadonlyArray<Record<string, unknown>>;
|
|
11
|
+
readonly materialSlots: readonly {
|
|
12
|
+
readonly slotName: string;
|
|
13
|
+
readonly sourceKey?: string;
|
|
14
|
+
readonly defaultMaterialRef?: number;
|
|
15
|
+
}[];
|
|
16
|
+
readonly aabb?: Float32Array;
|
|
17
|
+
readonly morphTargets?: ReadonlyArray<Record<string, Float32Array>>;
|
|
18
|
+
readonly morphWeights?: Float32Array;
|
|
19
|
+
}
|
|
20
|
+
export declare function unpackMeshBinV4(bytes: Uint8Array, sourceKey: string): Result<UnpackedMeshBin, MeshBinAssetError>;
|
|
21
|
+
//# sourceMappingURL=mesh-bin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh-bin.d.ts","sourceRoot":"","sources":["../../src/loaders/mesh-bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAW,KAAK,MAAM,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,SAAS;QAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;KACtC,EAAE,CAAC;IACJ,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAmDD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CA8N5C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Loader } from '@forgeax/engine-types';
|
|
2
|
+
export type CodecContextFailure = {
|
|
3
|
+
readonly code: 'basis-profile-unsupported';
|
|
4
|
+
readonly detail: {
|
|
5
|
+
readonly profile: string;
|
|
6
|
+
};
|
|
7
|
+
} | {
|
|
8
|
+
readonly code: 'ktx2-color-space-mismatch';
|
|
9
|
+
readonly detail: {
|
|
10
|
+
readonly authoredColorSpace: 'srgb' | 'linear';
|
|
11
|
+
readonly dfdColorSpace: 'srgb' | 'linear' | 'unknown';
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare const textureLoader: Loader;
|
|
15
|
+
export declare const equirectLoader: Loader;
|
|
16
|
+
export declare const fontLoader: Loader;
|
|
17
|
+
export declare const renderPipelineLoader: Loader;
|
|
18
|
+
export declare const tilesetLoader: Loader;
|
|
19
|
+
export declare const PACK_ARTIFACT_LOADERS: readonly Loader[];
|
|
20
|
+
//# sourceMappingURL=pack-artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-artifact.d.ts","sourceRoot":"","sources":["../../src/loaders/pack-artifact.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMV,MAAM,EAKP,MAAM,uBAAuB,CAAC;AA+L/B,MAAM,MAAM,mBAAmB,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,QAAQ,CAAC;QAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;KACvD,CAAC;CACH,CAAC;AAyXN,eAAO,MAAM,aAAa,EAAE,MAI3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAI5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAIxB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAkBlC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MA0B3B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAMlD,CAAC"}
|
|
@@ -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":"AA+CA,OAAO,EAAW,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,YAAY,GAAG;IAEzB,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE5C,qBAAqB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnD,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAElD,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;CACnD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,yBAAyB,GAAG,CACtC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACnC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAgExC;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAI5E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAG5D;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,gBAAgB,EACxB,uBAAuB,EAAE,yBAAyB,GAEjD,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CA0B/B;AAgDD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG;IAE5C,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE3C,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE7C,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE7D,oBAAoB,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE;QAEd,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACxD,CAAC;CACH,CAAC;AA8DF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EAExB,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE;IACV,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,EACD,uBAAuB,EAAE,yBAAyB,GACjD,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAehC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,EAExB,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE;IACV,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CA0BxB"}
|
|
@@ -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"}
|