@aura3d/assets 1.0.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 +17 -0
- package/dist/AdvancedAssetCorpus.d.ts +124 -0
- package/dist/AdvancedAssetCorpus.d.ts.map +1 -0
- package/dist/AdvancedAssetCorpus.js +266 -0
- package/dist/AdvancedAssetCorpus.js.map +1 -0
- package/dist/AssetBundleCacheFixtures.d.ts +62 -0
- package/dist/AssetBundleCacheFixtures.d.ts.map +1 -0
- package/dist/AssetBundleCacheFixtures.js +222 -0
- package/dist/AssetBundleCacheFixtures.js.map +1 -0
- package/dist/AssetCache.d.ts +21 -0
- package/dist/AssetCache.d.ts.map +1 -0
- package/dist/AssetCache.js +54 -0
- package/dist/AssetCache.js.map +1 -0
- package/dist/AssetCompatibility.d.ts +54 -0
- package/dist/AssetCompatibility.d.ts.map +1 -0
- package/dist/AssetCompatibility.js +122 -0
- package/dist/AssetCompatibility.js.map +1 -0
- package/dist/AssetCorpus.d.ts +88 -0
- package/dist/AssetCorpus.d.ts.map +1 -0
- package/dist/AssetCorpus.js +215 -0
- package/dist/AssetCorpus.js.map +1 -0
- package/dist/AssetDependencyGraph.d.ts +12 -0
- package/dist/AssetDependencyGraph.d.ts.map +1 -0
- package/dist/AssetDependencyGraph.js +66 -0
- package/dist/AssetDependencyGraph.js.map +1 -0
- package/dist/AssetHandle.d.ts +26 -0
- package/dist/AssetHandle.d.ts.map +1 -0
- package/dist/AssetHandle.js +53 -0
- package/dist/AssetHandle.js.map +1 -0
- package/dist/AssetImportPreflight.d.ts +43 -0
- package/dist/AssetImportPreflight.d.ts.map +1 -0
- package/dist/AssetImportPreflight.js +117 -0
- package/dist/AssetImportPreflight.js.map +1 -0
- package/dist/AssetInspection.d.ts +183 -0
- package/dist/AssetInspection.d.ts.map +1 -0
- package/dist/AssetInspection.js +397 -0
- package/dist/AssetInspection.js.map +1 -0
- package/dist/AssetLoader.d.ts +26 -0
- package/dist/AssetLoader.d.ts.map +1 -0
- package/dist/AssetLoader.js +12 -0
- package/dist/AssetLoader.js.map +1 -0
- package/dist/AssetManager.d.ts +37 -0
- package/dist/AssetManager.d.ts.map +1 -0
- package/dist/AssetManager.js +161 -0
- package/dist/AssetManager.js.map +1 -0
- package/dist/AssetRegistry.d.ts +10 -0
- package/dist/AssetRegistry.d.ts.map +1 -0
- package/dist/AssetRegistry.js +34 -0
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/AssetRenderDefaults.d.ts +13 -0
- package/dist/AssetRenderDefaults.d.ts.map +1 -0
- package/dist/AssetRenderDefaults.js +23 -0
- package/dist/AssetRenderDefaults.js.map +1 -0
- package/dist/AudioLoader.d.ts +17 -0
- package/dist/AudioLoader.d.ts.map +1 -0
- package/dist/AudioLoader.js +23 -0
- package/dist/AudioLoader.js.map +1 -0
- package/dist/BlenderExportValidation.d.ts +64 -0
- package/dist/BlenderExportValidation.d.ts.map +1 -0
- package/dist/BlenderExportValidation.js +143 -0
- package/dist/BlenderExportValidation.js.map +1 -0
- package/dist/CarConceptMaterialStability.d.ts +28 -0
- package/dist/CarConceptMaterialStability.d.ts.map +1 -0
- package/dist/CarConceptMaterialStability.js +1308 -0
- package/dist/CarConceptMaterialStability.js.map +1 -0
- package/dist/EXRLoader.d.ts +2 -0
- package/dist/EXRLoader.d.ts.map +1 -0
- package/dist/EXRLoader.js +2 -0
- package/dist/EXRLoader.js.map +1 -0
- package/dist/ExternalParityGLTFCorpus.d.ts +39 -0
- package/dist/ExternalParityGLTFCorpus.d.ts.map +1 -0
- package/dist/ExternalParityGLTFCorpus.js +32 -0
- package/dist/ExternalParityGLTFCorpus.js.map +1 -0
- package/dist/GLTFAnimationRuntime.d.ts +243 -0
- package/dist/GLTFAnimationRuntime.d.ts.map +1 -0
- package/dist/GLTFAnimationRuntime.js +954 -0
- package/dist/GLTFAnimationRuntime.js.map +1 -0
- package/dist/GLTFCompressionDecoders.d.ts +42 -0
- package/dist/GLTFCompressionDecoders.d.ts.map +1 -0
- package/dist/GLTFCompressionDecoders.js +99 -0
- package/dist/GLTFCompressionDecoders.js.map +1 -0
- package/dist/GLTFExtensionSupport.d.ts +33 -0
- package/dist/GLTFExtensionSupport.d.ts.map +1 -0
- package/dist/GLTFExtensionSupport.js +85 -0
- package/dist/GLTFExtensionSupport.js.map +1 -0
- package/dist/GLTFLoader.d.ts +361 -0
- package/dist/GLTFLoader.d.ts.map +1 -0
- package/dist/GLTFLoader.js +2735 -0
- package/dist/GLTFLoader.js.map +1 -0
- package/dist/GLTFRenderResources.d.ts +162 -0
- package/dist/GLTFRenderResources.d.ts.map +1 -0
- package/dist/GLTFRenderResources.js +1684 -0
- package/dist/GLTFRenderResources.js.map +1 -0
- package/dist/HDRLoader.d.ts +2 -0
- package/dist/HDRLoader.d.ts.map +1 -0
- package/dist/HDRLoader.js +2 -0
- package/dist/HDRLoader.js.map +1 -0
- package/dist/ImageLoader.d.ts +15 -0
- package/dist/ImageLoader.d.ts.map +1 -0
- package/dist/ImageLoader.js +36 -0
- package/dist/ImageLoader.js.map +1 -0
- package/dist/ImportPipeline.d.ts +39 -0
- package/dist/ImportPipeline.d.ts.map +1 -0
- package/dist/ImportPipeline.js +105 -0
- package/dist/ImportPipeline.js.map +1 -0
- package/dist/KTX2BasisTextureTranscoder.d.ts +9 -0
- package/dist/KTX2BasisTextureTranscoder.d.ts.map +1 -0
- package/dist/KTX2BasisTextureTranscoder.js +178 -0
- package/dist/KTX2BasisTextureTranscoder.js.map +1 -0
- package/dist/LoadContext.d.ts +20 -0
- package/dist/LoadContext.d.ts.map +1 -0
- package/dist/LoadContext.js +42 -0
- package/dist/LoadContext.js.map +1 -0
- package/dist/MaterialLoader.d.ts +17 -0
- package/dist/MaterialLoader.d.ts.map +1 -0
- package/dist/MaterialLoader.js +138 -0
- package/dist/MaterialLoader.js.map +1 -0
- package/dist/MeshOptimization.d.ts +20 -0
- package/dist/MeshOptimization.d.ts.map +1 -0
- package/dist/MeshOptimization.js +65 -0
- package/dist/MeshOptimization.js.map +1 -0
- package/dist/OBJLoader.d.ts +13 -0
- package/dist/OBJLoader.d.ts.map +1 -0
- package/dist/OBJLoader.js +492 -0
- package/dist/OBJLoader.js.map +1 -0
- package/dist/SceneAnalysisFixtures.d.ts +100 -0
- package/dist/SceneAnalysisFixtures.d.ts.map +1 -0
- package/dist/SceneAnalysisFixtures.js +331 -0
- package/dist/SceneAnalysisFixtures.js.map +1 -0
- package/dist/SceneLoader.d.ts +27 -0
- package/dist/SceneLoader.d.ts.map +1 -0
- package/dist/SceneLoader.js +40 -0
- package/dist/SceneLoader.js.map +1 -0
- package/dist/ShaderLoader.d.ts +12 -0
- package/dist/ShaderLoader.d.ts.map +1 -0
- package/dist/ShaderLoader.js +18 -0
- package/dist/ShaderLoader.js.map +1 -0
- package/dist/TextureLoader.d.ts +16 -0
- package/dist/TextureLoader.d.ts.map +1 -0
- package/dist/TextureLoader.js +17 -0
- package/dist/TextureLoader.js.map +1 -0
- package/dist/TexturePipeline.d.ts +24 -0
- package/dist/TexturePipeline.d.ts.map +1 -0
- package/dist/TexturePipeline.js +64 -0
- package/dist/TexturePipeline.js.map +1 -0
- package/dist/TextureStreaming.d.ts +10 -0
- package/dist/TextureStreaming.d.ts.map +1 -0
- package/dist/TextureStreaming.js +11 -0
- package/dist/TextureStreaming.js.map +1 -0
- package/dist/WorkerAssetJobs.d.ts +18 -0
- package/dist/WorkerAssetJobs.d.ts.map +1 -0
- package/dist/WorkerAssetJobs.js +37 -0
- package/dist/WorkerAssetJobs.js.map +1 -0
- package/dist/advanced-gallery/index.d.ts +3 -0
- package/dist/advanced-gallery/index.d.ts.map +1 -0
- package/dist/advanced-gallery/index.js +2 -0
- package/dist/advanced-gallery/index.js.map +1 -0
- package/dist/asset-corpus/GLTFSceneLoader.d.ts +3 -0
- package/dist/asset-corpus/GLTFSceneLoader.d.ts.map +1 -0
- package/dist/asset-corpus/GLTFSceneLoader.js +2 -0
- package/dist/asset-corpus/GLTFSceneLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionAssetCorpus.d.ts +89 -0
- package/dist/asset-corpus/ProductionAssetCorpus.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionAssetCorpus.js +116 -0
- package/dist/asset-corpus/ProductionAssetCorpus.js.map +1 -0
- package/dist/asset-corpus/ProductionAssetPipeline.d.ts +3 -0
- package/dist/asset-corpus/ProductionAssetPipeline.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionAssetPipeline.js +3 -0
- package/dist/asset-corpus/ProductionAssetPipeline.js.map +1 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts +65 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.js +110 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts +8 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts +7 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionTextureLoader.d.ts +7 -0
- package/dist/asset-corpus/ProductionTextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionTextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionTextureLoader.js.map +1 -0
- package/dist/asset-corpus/index.d.ts +10 -0
- package/dist/asset-corpus/index.d.ts.map +1 -0
- package/dist/asset-corpus/index.js +8 -0
- package/dist/asset-corpus/index.js.map +1 -0
- package/dist/browser-index.d.ts +48 -0
- package/dist/browser-index.d.ts.map +1 -0
- package/dist/browser-index.js +26 -0
- package/dist/browser-index.js.map +1 -0
- package/dist/createRenderableScene.d.ts +23 -0
- package/dist/createRenderableScene.d.ts.map +1 -0
- package/dist/createRenderableScene.js +94 -0
- package/dist/createRenderableScene.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/loadRenderableAsset.d.ts +16 -0
- package/dist/loadRenderableAsset.d.ts.map +1 -0
- package/dist/loadRenderableAsset.js +50 -0
- package/dist/loadRenderableAsset.js.map +1 -0
- package/dist/loaders/CubeTextureLoader.d.ts +4 -0
- package/dist/loaders/CubeTextureLoader.d.ts.map +1 -0
- package/dist/loaders/CubeTextureLoader.js +9 -0
- package/dist/loaders/CubeTextureLoader.js.map +1 -0
- package/dist/loaders/EXRLoader.d.ts +4 -0
- package/dist/loaders/EXRLoader.d.ts.map +1 -0
- package/dist/loaders/EXRLoader.js +10 -0
- package/dist/loaders/EXRLoader.js.map +1 -0
- package/dist/loaders/HDRLoader.d.ts +4 -0
- package/dist/loaders/HDRLoader.d.ts.map +1 -0
- package/dist/loaders/HDRLoader.js +7 -0
- package/dist/loaders/HDRLoader.js.map +1 -0
- package/dist/loaders/KTX2Loader.d.ts +4 -0
- package/dist/loaders/KTX2Loader.d.ts.map +1 -0
- package/dist/loaders/KTX2Loader.js +7 -0
- package/dist/loaders/KTX2Loader.js.map +1 -0
- package/dist/loaders/LoaderDiagnostics.d.ts +18 -0
- package/dist/loaders/LoaderDiagnostics.d.ts.map +1 -0
- package/dist/loaders/LoaderDiagnostics.js +18 -0
- package/dist/loaders/LoaderDiagnostics.js.map +1 -0
- package/dist/loaders/MTLLoader.d.ts +10 -0
- package/dist/loaders/MTLLoader.d.ts.map +1 -0
- package/dist/loaders/MTLLoader.js +14 -0
- package/dist/loaders/MTLLoader.js.map +1 -0
- package/dist/loaders/OBJLoader.d.ts +12 -0
- package/dist/loaders/OBJLoader.d.ts.map +1 -0
- package/dist/loaders/OBJLoader.js +16 -0
- package/dist/loaders/OBJLoader.js.map +1 -0
- package/dist/loaders/TextureLoader.d.ts +6 -0
- package/dist/loaders/TextureLoader.d.ts.map +1 -0
- package/dist/loaders/TextureLoader.js +11 -0
- package/dist/loaders/TextureLoader.js.map +1 -0
- package/dist/loaders/ThreeCompatGLTFLoader.d.ts +10 -0
- package/dist/loaders/ThreeCompatGLTFLoader.d.ts.map +1 -0
- package/dist/loaders/ThreeCompatGLTFLoader.js +13 -0
- package/dist/loaders/ThreeCompatGLTFLoader.js.map +1 -0
- package/dist/loaders/index.d.ts +15 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +10 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts +34 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js +16 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts +29 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js +33 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js.map +1 -0
- package/dist/threejs-example-parity/index.d.ts +20 -0
- package/dist/threejs-example-parity/index.d.ts.map +1 -0
- package/dist/threejs-example-parity/index.js +218 -0
- package/dist/threejs-example-parity/index.js.map +1 -0
- package/package.json +23 -0
- package/src/AdvancedAssetCorpus.ts +454 -0
- package/src/AssetBundleCacheFixtures.ts +290 -0
- package/src/AssetCache.ts +76 -0
- package/src/AssetCompatibility.ts +224 -0
- package/src/AssetCorpus.ts +329 -0
- package/src/AssetDependencyGraph.ts +83 -0
- package/src/AssetHandle.ts +74 -0
- package/src/AssetImportPreflight.ts +179 -0
- package/src/AssetInspection.ts +706 -0
- package/src/AssetLoader.ts +36 -0
- package/src/AssetManager.ts +211 -0
- package/src/AssetRegistry.ts +44 -0
- package/src/AssetRenderDefaults.ts +36 -0
- package/src/AudioLoader.ts +41 -0
- package/src/BlenderExportValidation.ts +227 -0
- package/src/CarConceptMaterialStability.ts +1405 -0
- package/src/EXRLoader.ts +1 -0
- package/src/ExternalParityGLTFCorpus.ts +65 -0
- package/src/GLTFAnimationRuntime.ts +1221 -0
- package/src/GLTFCompressionDecoders.ts +190 -0
- package/src/GLTFExtensionSupport.ts +138 -0
- package/src/GLTFLoader.ts +4001 -0
- package/src/GLTFRenderResources.ts +2105 -0
- package/src/HDRLoader.ts +1 -0
- package/src/ImageLoader.ts +52 -0
- package/src/ImportPipeline.ts +148 -0
- package/src/KTX2BasisTextureTranscoder.ts +224 -0
- package/src/LoadContext.ts +60 -0
- package/src/MaterialLoader.ts +166 -0
- package/src/MeshOptimization.ts +93 -0
- package/src/OBJLoader.ts +551 -0
- package/src/SceneAnalysisFixtures.ts +438 -0
- package/src/SceneLoader.ts +62 -0
- package/src/ShaderLoader.ts +30 -0
- package/src/TextureLoader.ts +30 -0
- package/src/TexturePipeline.ts +96 -0
- package/src/TextureStreaming.ts +20 -0
- package/src/WorkerAssetJobs.ts +56 -0
- package/src/advanced-gallery/index.ts +18 -0
- package/src/asset-corpus/GLTFSceneLoader.ts +9 -0
- package/src/asset-corpus/ProductionAssetCorpus.ts +230 -0
- package/src/asset-corpus/ProductionAssetPipeline.ts +5 -0
- package/src/asset-corpus/ProductionGLTFRenderPipeline.ts +182 -0
- package/src/asset-corpus/ProductionHDRTextureLoader.ts +2 -0
- package/src/asset-corpus/ProductionKTX2TextureLoader.ts +2 -0
- package/src/asset-corpus/ProductionTextureLoader.ts +2 -0
- package/src/asset-corpus/index.ts +29 -0
- package/src/browser-index.ts +224 -0
- package/src/createRenderableScene.ts +128 -0
- package/src/index.ts +317 -0
- package/src/loadRenderableAsset.ts +67 -0
- package/src/loaders/CubeTextureLoader.ts +8 -0
- package/src/loaders/EXRLoader.ts +10 -0
- package/src/loaders/HDRLoader.ts +7 -0
- package/src/loaders/KTX2Loader.ts +7 -0
- package/src/loaders/LoaderDiagnostics.ts +36 -0
- package/src/loaders/MTLLoader.ts +20 -0
- package/src/loaders/OBJLoader.ts +24 -0
- package/src/loaders/TextureLoader.ts +14 -0
- package/src/loaders/ThreeCompatGLTFLoader.ts +19 -0
- package/src/loaders/index.ts +14 -0
- package/src/threejs-compatibility/ThreeCompatAssetProvenance.ts +51 -0
- package/src/threejs-compatibility/ThreeCompatAssetRegistry.ts +61 -0
- package/src/threejs-example-parity/index.ts +262 -0
- package/tests/assets.test.ts +311 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
export function createAssetBundleCacheEvidence(input) {
|
|
2
|
+
assertInput(input);
|
|
3
|
+
const rootId = normalizeAssetId(input.assetId);
|
|
4
|
+
const entries = createManifestEntries(rootId, input);
|
|
5
|
+
const loadOrder = topologicalSort(entries);
|
|
6
|
+
const releaseOrder = [...loadOrder].reverse();
|
|
7
|
+
const cache = simulateCache(loadOrder, entries);
|
|
8
|
+
const manifest = {
|
|
9
|
+
id: `${rootId}-bundle`,
|
|
10
|
+
version: "external-parity-generated",
|
|
11
|
+
assetCount: entries.length,
|
|
12
|
+
totalBytes: sumBytes(entries),
|
|
13
|
+
entries
|
|
14
|
+
};
|
|
15
|
+
const directDependencies = entries.find((entry) => entry.id === rootId)?.dependencies ?? [];
|
|
16
|
+
const evidenceCore = {
|
|
17
|
+
manifest,
|
|
18
|
+
dependencyGraph: {
|
|
19
|
+
rootAssetId: rootId,
|
|
20
|
+
loadOrder,
|
|
21
|
+
releaseOrder,
|
|
22
|
+
directDependencies,
|
|
23
|
+
transitiveDependencies: loadOrder.filter((id) => id !== rootId),
|
|
24
|
+
cycleDetected: false
|
|
25
|
+
},
|
|
26
|
+
cache
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
source: "origin-master-asset-bundle-cache-adapted",
|
|
30
|
+
...evidenceCore,
|
|
31
|
+
productionReadiness: {
|
|
32
|
+
bundleManifest: true,
|
|
33
|
+
dependencySorting: true,
|
|
34
|
+
memoryBudgetEviction: true,
|
|
35
|
+
cacheTelemetry: true,
|
|
36
|
+
inFlightDeduplicationBoundary: true
|
|
37
|
+
},
|
|
38
|
+
blockedClaims: [
|
|
39
|
+
"Unity Addressables catalog parity",
|
|
40
|
+
"Unreal Asset Manager primary asset parity",
|
|
41
|
+
"IndexedDB persistent cache certification",
|
|
42
|
+
"CDN cache invalidation and patch streaming parity",
|
|
43
|
+
"native platform asset bundle packaging parity"
|
|
44
|
+
],
|
|
45
|
+
claimBoundary: "This evidence ports the old branch asset bundle/cache concepts into deterministic ExternalParity manifest, dependency-order, and memory-budget telemetry for loaded glTF assets. It does not claim Unity Addressables, Unreal Asset Manager, persistent browser storage, CDN patch streaming, or native bundle packaging parity.",
|
|
46
|
+
hash: stableHash(JSON.stringify(evidenceCore))
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function createManifestEntries(rootId, input) {
|
|
50
|
+
const textureCount = Math.max(0, Math.trunc(input.textureCount));
|
|
51
|
+
const materialCount = Math.max(0, Math.trunc(input.materialCount));
|
|
52
|
+
const meshCount = Math.max(0, Math.trunc(input.meshCount));
|
|
53
|
+
const animationCount = Math.max(0, Math.trunc(input.animationCount));
|
|
54
|
+
const textureIds = Array.from({ length: Math.max(1, textureCount) }, (_, index) => `${rootId}:texture-${index + 1}`);
|
|
55
|
+
const entries = [
|
|
56
|
+
{
|
|
57
|
+
id: rootId,
|
|
58
|
+
path: input.url,
|
|
59
|
+
type: "document",
|
|
60
|
+
sizeBytes: 2048 + materialCount * 256 + meshCount * 512,
|
|
61
|
+
dependencies: [
|
|
62
|
+
`${rootId}:geometry-buffer`,
|
|
63
|
+
`${rootId}:material-manifest`,
|
|
64
|
+
`${rootId}:metadata`,
|
|
65
|
+
...(animationCount > 0 ? [`${rootId}:animation`] : [])
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: `${rootId}:geometry-buffer`,
|
|
70
|
+
path: `${input.url}#geometry-buffer`,
|
|
71
|
+
type: "buffer",
|
|
72
|
+
sizeBytes: 8192 + meshCount * 32768 + input.skinCount * 4096 + input.morphTargetCount * 8192,
|
|
73
|
+
dependencies: []
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: `${rootId}:material-manifest`,
|
|
77
|
+
path: `${input.url}#materials`,
|
|
78
|
+
type: "material",
|
|
79
|
+
sizeBytes: 1024 + materialCount * 768,
|
|
80
|
+
dependencies: textureIds
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: `${rootId}:metadata`,
|
|
84
|
+
path: `${input.url}#loader-diagnostics`,
|
|
85
|
+
type: "metadata",
|
|
86
|
+
sizeBytes: 1024,
|
|
87
|
+
dependencies: []
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
for (let index = 0; index < textureIds.length; index += 1) {
|
|
91
|
+
entries.push({
|
|
92
|
+
id: textureIds[index] ?? `${rootId}:texture-${index + 1}`,
|
|
93
|
+
path: `${input.url}#texture-${index + 1}`,
|
|
94
|
+
type: "texture",
|
|
95
|
+
sizeBytes: Math.max(4096, Math.trunc((input.decodedTextureBytes ?? textureCount * 65536) / Math.max(1, textureCount))),
|
|
96
|
+
dependencies: []
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (animationCount > 0) {
|
|
100
|
+
entries.push({
|
|
101
|
+
id: `${rootId}:animation`,
|
|
102
|
+
path: `${input.url}#animation`,
|
|
103
|
+
type: "animation",
|
|
104
|
+
sizeBytes: 2048 + animationCount * 4096,
|
|
105
|
+
dependencies: [`${rootId}:geometry-buffer`]
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return entries;
|
|
109
|
+
}
|
|
110
|
+
function topologicalSort(entries) {
|
|
111
|
+
const byId = new Map(entries.map((entry) => [entry.id, entry]));
|
|
112
|
+
const sorted = [];
|
|
113
|
+
const visited = new Set();
|
|
114
|
+
const visiting = new Set();
|
|
115
|
+
const visit = (id) => {
|
|
116
|
+
if (visited.has(id))
|
|
117
|
+
return;
|
|
118
|
+
if (visiting.has(id))
|
|
119
|
+
throw new Error(`Asset bundle dependency cycle detected: ${id}`);
|
|
120
|
+
visiting.add(id);
|
|
121
|
+
for (const dependency of byId.get(id)?.dependencies ?? []) {
|
|
122
|
+
visit(dependency);
|
|
123
|
+
}
|
|
124
|
+
visiting.delete(id);
|
|
125
|
+
visited.add(id);
|
|
126
|
+
sorted.push(id);
|
|
127
|
+
};
|
|
128
|
+
for (const entry of entries)
|
|
129
|
+
visit(entry.id);
|
|
130
|
+
return sorted;
|
|
131
|
+
}
|
|
132
|
+
function simulateCache(loadOrder, entries) {
|
|
133
|
+
const byId = new Map(entries.map((entry) => [entry.id, entry]));
|
|
134
|
+
const maxEntries = Math.max(3, Math.min(6, loadOrder.length - 1));
|
|
135
|
+
const maxBytes = Math.max(32768, Math.trunc(sumBytes(entries) * 0.72));
|
|
136
|
+
const retained = new Map();
|
|
137
|
+
const evicted = [];
|
|
138
|
+
let clock = 0;
|
|
139
|
+
let memoryBytes = 0;
|
|
140
|
+
let hits = 0;
|
|
141
|
+
let misses = 0;
|
|
142
|
+
let evictions = 0;
|
|
143
|
+
for (const id of loadOrder) {
|
|
144
|
+
clock += 1;
|
|
145
|
+
const hit = retained.get(id);
|
|
146
|
+
if (hit) {
|
|
147
|
+
hit.accessCount += 1;
|
|
148
|
+
hit.lastAccess = clock;
|
|
149
|
+
hits += 1;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
misses += 1;
|
|
153
|
+
const sizeBytes = byId.get(id)?.sizeBytes ?? 0;
|
|
154
|
+
while ((retained.size >= maxEntries || memoryBytes + sizeBytes > maxBytes) && retained.size > 0) {
|
|
155
|
+
const victim = [...retained.entries()].sort((left, right) => left[1].lastAccess - right[1].lastAccess)[0];
|
|
156
|
+
if (!victim)
|
|
157
|
+
break;
|
|
158
|
+
retained.delete(victim[0]);
|
|
159
|
+
memoryBytes -= victim[1].sizeBytes;
|
|
160
|
+
evicted.push(victim[0]);
|
|
161
|
+
evictions += 1;
|
|
162
|
+
}
|
|
163
|
+
if (sizeBytes <= maxBytes) {
|
|
164
|
+
retained.set(id, { sizeBytes, accessCount: 1, lastAccess: clock });
|
|
165
|
+
memoryBytes += sizeBytes;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
for (const id of loadOrder.slice(-2)) {
|
|
169
|
+
if (retained.has(id)) {
|
|
170
|
+
retained.get(id).accessCount += 1;
|
|
171
|
+
hits += 1;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
misses += 1;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
policy: "lru",
|
|
179
|
+
maxEntries,
|
|
180
|
+
maxBytes,
|
|
181
|
+
cachedEntries: retained.size,
|
|
182
|
+
memoryBytes,
|
|
183
|
+
hits,
|
|
184
|
+
misses,
|
|
185
|
+
evictions,
|
|
186
|
+
hitRate: Number((hits / Math.max(1, hits + misses)).toFixed(4)),
|
|
187
|
+
retainedAssetIds: [...retained.keys()],
|
|
188
|
+
evictedAssetIds: evicted
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function assertInput(input) {
|
|
192
|
+
if (input.assetId.trim().length === 0)
|
|
193
|
+
throw new Error("assetId is required.");
|
|
194
|
+
if (input.url.trim().length === 0)
|
|
195
|
+
throw new Error("url is required.");
|
|
196
|
+
for (const [name, value] of Object.entries({
|
|
197
|
+
meshCount: input.meshCount,
|
|
198
|
+
materialCount: input.materialCount,
|
|
199
|
+
textureCount: input.textureCount,
|
|
200
|
+
animationCount: input.animationCount,
|
|
201
|
+
skinCount: input.skinCount,
|
|
202
|
+
morphTargetCount: input.morphTargetCount
|
|
203
|
+
})) {
|
|
204
|
+
if (!Number.isFinite(value) || value < 0)
|
|
205
|
+
throw new Error(`${name} must be a non-negative finite number.`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function normalizeAssetId(id) {
|
|
209
|
+
return id.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "asset";
|
|
210
|
+
}
|
|
211
|
+
function sumBytes(entries) {
|
|
212
|
+
return entries.reduce((sum, entry) => sum + entry.sizeBytes, 0);
|
|
213
|
+
}
|
|
214
|
+
function stableHash(value) {
|
|
215
|
+
let hash = 2166136261;
|
|
216
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
217
|
+
hash ^= value.charCodeAt(index);
|
|
218
|
+
hash = Math.imul(hash, 16777619);
|
|
219
|
+
}
|
|
220
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=AssetBundleCacheFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetBundleCacheFixtures.js","sourceRoot":"","sources":["../../../../packages/assets/src/AssetBundleCacheFixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AssetHandle } from "./AssetHandle";
|
|
2
|
+
export interface AssetCacheSnapshot {
|
|
3
|
+
readonly cachedEntries: number;
|
|
4
|
+
readonly inFlightEntries: number;
|
|
5
|
+
readonly totalEntries: number;
|
|
6
|
+
readonly keys: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class AssetCache {
|
|
9
|
+
private readonly entries;
|
|
10
|
+
private readonly inFlight;
|
|
11
|
+
has(key: string): boolean;
|
|
12
|
+
get<T>(key: string): AssetHandle<T> | undefined;
|
|
13
|
+
getInFlight<T>(key: string): Promise<AssetHandle<T>> | undefined;
|
|
14
|
+
set<T>(key: string, handle: AssetHandle<T>): void;
|
|
15
|
+
setInFlight<T>(key: string, promise: Promise<AssetHandle<T>>): void;
|
|
16
|
+
delete(key: string): boolean;
|
|
17
|
+
clear(): void;
|
|
18
|
+
keys(): readonly string[];
|
|
19
|
+
snapshot(): AssetCacheSnapshot;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=AssetCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetCache.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AssetCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAE7E,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;IAS/C,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;IAIhE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAIjD,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAcnE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,SAAS,MAAM,EAAE;IAIzB,QAAQ,IAAI,kBAAkB;CAS/B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { AssetHandle } from "./AssetHandle.js";
|
|
2
|
+
export class AssetCache {
|
|
3
|
+
entries = new Map();
|
|
4
|
+
inFlight = new Map();
|
|
5
|
+
has(key) {
|
|
6
|
+
return this.entries.has(key) || this.inFlight.has(key);
|
|
7
|
+
}
|
|
8
|
+
get(key) {
|
|
9
|
+
const entry = this.entries.get(key);
|
|
10
|
+
if (!entry) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
return entry.handle;
|
|
14
|
+
}
|
|
15
|
+
getInFlight(key) {
|
|
16
|
+
return this.inFlight.get(key);
|
|
17
|
+
}
|
|
18
|
+
set(key, handle) {
|
|
19
|
+
this.entries.set(key, { handle: handle });
|
|
20
|
+
}
|
|
21
|
+
setInFlight(key, promise) {
|
|
22
|
+
this.inFlight.set(key, promise);
|
|
23
|
+
promise
|
|
24
|
+
.then((handle) => {
|
|
25
|
+
this.entries.set(key, { handle: handle });
|
|
26
|
+
})
|
|
27
|
+
.catch(() => {
|
|
28
|
+
// Failed loads are intentionally not cached; callers receive the original rejection.
|
|
29
|
+
})
|
|
30
|
+
.finally(() => {
|
|
31
|
+
this.inFlight.delete(key);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
delete(key) {
|
|
35
|
+
return this.entries.delete(key);
|
|
36
|
+
}
|
|
37
|
+
clear() {
|
|
38
|
+
this.entries.clear();
|
|
39
|
+
this.inFlight.clear();
|
|
40
|
+
}
|
|
41
|
+
keys() {
|
|
42
|
+
return [...new Set([...this.entries.keys(), ...this.inFlight.keys()])];
|
|
43
|
+
}
|
|
44
|
+
snapshot() {
|
|
45
|
+
const keys = this.keys();
|
|
46
|
+
return {
|
|
47
|
+
cachedEntries: this.entries.size,
|
|
48
|
+
inFlightEntries: this.inFlight.size,
|
|
49
|
+
totalEntries: keys.length,
|
|
50
|
+
keys
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=AssetCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetCache.js","sourceRoot":"","sources":["../../../../packages/assets/src/AssetCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAc5C,MAAM,OAAO,UAAU;IACJ,OAAO,GAAG,IAAI,GAAG,EAA+B,CAAC;IACjD,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;IAE7E,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,GAAG,CAAI,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC,MAAwB,CAAC;IACxC,CAAC;IAED,WAAW,CAAI,GAAW;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAwC,CAAC;IACvE,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,MAAsB;QACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAyC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,WAAW,CAAI,GAAW,EAAE,OAAgC;QAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAwC,CAAC,CAAC;QACjE,OAAO;aACJ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAyC,EAAE,CAAC,CAAC;QAC/E,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,qFAAqF;QACvF,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAChC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YACnC,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,IAAI;SACL,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type AssetDiagnostic, type AssetImportSettings, type GLTFCorpusManifest, type GLTFCorpusReport } from "./AssetCorpus";
|
|
2
|
+
import type { BlenderExportValidationReport } from "./BlenderExportValidation";
|
|
3
|
+
export type AssetCompatibilityLoaderName = "aura3d" | "threejs" | "babylonjs" | "blender-export";
|
|
4
|
+
export type AssetCompatibilityStatus = "pass" | "warn" | "expected-fail" | "not-run";
|
|
5
|
+
export interface AssetLoaderCompatibilityResult {
|
|
6
|
+
readonly loader: AssetCompatibilityLoaderName;
|
|
7
|
+
readonly status: AssetCompatibilityStatus;
|
|
8
|
+
readonly diagnostics: readonly AssetDiagnostic[];
|
|
9
|
+
}
|
|
10
|
+
export interface AssetCompatibilityReportAsset {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly format: string;
|
|
14
|
+
readonly tags: readonly string[];
|
|
15
|
+
readonly sourceUri: string;
|
|
16
|
+
readonly sourceRevision: string;
|
|
17
|
+
readonly sourceSha256: string;
|
|
18
|
+
readonly importSettings: AssetImportSettings;
|
|
19
|
+
readonly loaders: readonly AssetLoaderCompatibilityResult[];
|
|
20
|
+
}
|
|
21
|
+
export interface AssetCompatibilityReport {
|
|
22
|
+
readonly schemaVersion: "asset-compatibility-report";
|
|
23
|
+
readonly generatedAt: string;
|
|
24
|
+
readonly sourceManifest: GLTFCorpusReport["sourceManifest"];
|
|
25
|
+
readonly fixtureStatus: {
|
|
26
|
+
readonly blenderExportFixtures: "present" | "missing";
|
|
27
|
+
};
|
|
28
|
+
readonly blenderExportValidation?: BlenderExportValidationReport;
|
|
29
|
+
readonly summary: {
|
|
30
|
+
readonly assetCount: number;
|
|
31
|
+
readonly aura3d: Record<AssetCompatibilityStatus, number>;
|
|
32
|
+
readonly threejs: Record<AssetCompatibilityStatus, number>;
|
|
33
|
+
readonly babylonjs: Record<AssetCompatibilityStatus, number>;
|
|
34
|
+
readonly blenderExport: Record<AssetCompatibilityStatus, number>;
|
|
35
|
+
};
|
|
36
|
+
readonly assets: readonly AssetCompatibilityReportAsset[];
|
|
37
|
+
}
|
|
38
|
+
export interface AssetCompatibilityReportOptions {
|
|
39
|
+
readonly generatedAt?: string;
|
|
40
|
+
readonly blenderExportFixturesPresent?: boolean;
|
|
41
|
+
readonly blenderExportValidation?: BlenderExportValidationReport;
|
|
42
|
+
readonly externalLoaderResults?: readonly ExternalAssetLoaderCompatibilityResult[];
|
|
43
|
+
readonly blenderExportResults?: readonly BlenderExportCompatibilityResult[];
|
|
44
|
+
}
|
|
45
|
+
export interface ExternalAssetLoaderCompatibilityResult extends AssetLoaderCompatibilityResult {
|
|
46
|
+
readonly assetId: string;
|
|
47
|
+
readonly loader: "threejs" | "babylonjs";
|
|
48
|
+
}
|
|
49
|
+
export interface BlenderExportCompatibilityResult extends AssetLoaderCompatibilityResult {
|
|
50
|
+
readonly assetId: string;
|
|
51
|
+
readonly loader: "blender-export";
|
|
52
|
+
}
|
|
53
|
+
export declare function createAssetCompatibilityReport(manifest: GLTFCorpusManifest, options?: AssetCompatibilityReportOptions): AssetCompatibilityReport;
|
|
54
|
+
//# sourceMappingURL=AssetCompatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetCompatibility.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AssetCompatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { assertValidGLTFCorpusManifest, createGLTFCorpusReport } from "./AssetCorpus.js";
|
|
2
|
+
export function createAssetCompatibilityReport(manifest, options = {}) {
|
|
3
|
+
const validated = assertValidGLTFCorpusManifest(manifest);
|
|
4
|
+
const corpusReport = createGLTFCorpusReport(validated, options.generatedAt ?? new Date().toISOString());
|
|
5
|
+
const blenderExportFixturesPresent = options.blenderExportFixturesPresent ?? options.blenderExportValidation !== undefined;
|
|
6
|
+
const externalResults = indexExternalLoaderResults(options.externalLoaderResults ?? []);
|
|
7
|
+
const blenderExportResults = indexBlenderExportResults(options.blenderExportResults ?? []);
|
|
8
|
+
const assets = corpusReport.assets.map((asset) => createCompatibilityAsset(asset, blenderExportFixturesPresent, externalResults, blenderExportResults));
|
|
9
|
+
return {
|
|
10
|
+
schemaVersion: "asset-compatibility-report",
|
|
11
|
+
generatedAt: corpusReport.generatedAt,
|
|
12
|
+
sourceManifest: corpusReport.sourceManifest,
|
|
13
|
+
fixtureStatus: {
|
|
14
|
+
blenderExportFixtures: blenderExportFixturesPresent ? "present" : "missing"
|
|
15
|
+
},
|
|
16
|
+
...(options.blenderExportValidation ? { blenderExportValidation: options.blenderExportValidation } : {}),
|
|
17
|
+
summary: {
|
|
18
|
+
assetCount: assets.length,
|
|
19
|
+
aura3d: summarize(assets, "aura3d"),
|
|
20
|
+
threejs: summarize(assets, "threejs"),
|
|
21
|
+
babylonjs: summarize(assets, "babylonjs"),
|
|
22
|
+
blenderExport: summarize(assets, "blender-export")
|
|
23
|
+
},
|
|
24
|
+
assets
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function createCompatibilityAsset(asset, blenderExportFixturesPresent, externalResults, blenderExportResults) {
|
|
28
|
+
return {
|
|
29
|
+
id: asset.id,
|
|
30
|
+
name: asset.name,
|
|
31
|
+
format: asset.format,
|
|
32
|
+
tags: asset.tags,
|
|
33
|
+
sourceUri: asset.sourceUri,
|
|
34
|
+
sourceRevision: asset.sourceRevision,
|
|
35
|
+
sourceSha256: asset.sourceSha256,
|
|
36
|
+
importSettings: asset.importSettings,
|
|
37
|
+
loaders: [
|
|
38
|
+
{
|
|
39
|
+
loader: "aura3d",
|
|
40
|
+
status: asset.expectedStatus === "expected-fail" ? "expected-fail" : asset.expectedStatus,
|
|
41
|
+
diagnostics: asset.diagnostics
|
|
42
|
+
},
|
|
43
|
+
externalResults.get(externalResultKey(asset.id, "threejs")) ?? externalLoaderScaffold("threejs", asset),
|
|
44
|
+
externalResults.get(externalResultKey(asset.id, "babylonjs")) ?? externalLoaderScaffold("babylonjs", asset),
|
|
45
|
+
blenderExportResults.get(asset.id) ?? blenderExportScaffold(asset, blenderExportFixturesPresent)
|
|
46
|
+
]
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function indexExternalLoaderResults(results) {
|
|
50
|
+
const indexed = new Map();
|
|
51
|
+
for (const result of results) {
|
|
52
|
+
indexed.set(externalResultKey(result.assetId, result.loader), {
|
|
53
|
+
loader: result.loader,
|
|
54
|
+
status: result.status,
|
|
55
|
+
diagnostics: result.diagnostics
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return indexed;
|
|
59
|
+
}
|
|
60
|
+
function indexBlenderExportResults(results) {
|
|
61
|
+
const indexed = new Map();
|
|
62
|
+
for (const result of results) {
|
|
63
|
+
indexed.set(result.assetId, {
|
|
64
|
+
loader: result.loader,
|
|
65
|
+
status: result.status,
|
|
66
|
+
diagnostics: result.diagnostics
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return indexed;
|
|
70
|
+
}
|
|
71
|
+
function externalResultKey(assetId, loader) {
|
|
72
|
+
return `${assetId}:${loader}`;
|
|
73
|
+
}
|
|
74
|
+
function externalLoaderScaffold(loader, asset) {
|
|
75
|
+
return {
|
|
76
|
+
loader,
|
|
77
|
+
status: "not-run",
|
|
78
|
+
diagnostics: [
|
|
79
|
+
diagnostic(`ASSET_${loader.toUpperCase()}_LOADER_NOT_RUN`, "External loader compatibility has not been executed in this bounded slice.", `Run ${asset.id} through a pinned ${loader} GLTFLoader version and record pass, warn, or expected-fail evidence before claiming ${loader} parity.`)
|
|
80
|
+
]
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function blenderExportScaffold(asset, fixturesPresent) {
|
|
84
|
+
if (fixturesPresent) {
|
|
85
|
+
return {
|
|
86
|
+
loader: "blender-export",
|
|
87
|
+
status: "not-run",
|
|
88
|
+
diagnostics: [
|
|
89
|
+
diagnostic("ASSET_BLENDER_EXPORT_VALIDATION_PENDING", "Blender export fixtures were detected, but no export validation runner is wired in this slice.", `Run ${asset.id} or the matching fixture through the Blender exporter validation command and record the exported glTF diagnostics.`)
|
|
90
|
+
]
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
loader: "blender-export",
|
|
95
|
+
status: "not-run",
|
|
96
|
+
diagnostics: [
|
|
97
|
+
diagnostic("ASSET_BLENDER_EXPORT_FIXTURES_MISSING", "No Blender-export fixtures are present in the asset test corpus.", "Add checked-in exported glTF/GLB fixtures before marking Blender-export validation complete.")
|
|
98
|
+
]
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function summarize(assets, loader) {
|
|
102
|
+
const counts = {
|
|
103
|
+
pass: 0,
|
|
104
|
+
warn: 0,
|
|
105
|
+
"expected-fail": 0,
|
|
106
|
+
"not-run": 0
|
|
107
|
+
};
|
|
108
|
+
for (const asset of assets) {
|
|
109
|
+
const result = asset.loaders.find((entry) => entry.loader === loader);
|
|
110
|
+
counts[result?.status ?? "not-run"] += 1;
|
|
111
|
+
}
|
|
112
|
+
return counts;
|
|
113
|
+
}
|
|
114
|
+
function diagnostic(code, message, nextAction) {
|
|
115
|
+
return {
|
|
116
|
+
code,
|
|
117
|
+
severity: "info",
|
|
118
|
+
message,
|
|
119
|
+
nextAction
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=AssetCompatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetCompatibility.js","sourceRoot":"","sources":["../../../../packages/assets/src/AssetCompatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export type GLTFCorpusSchemaVersion = "gltf-corpus";
|
|
2
|
+
export type GLTFCorpusAssetFormat = "gltf" | "glb";
|
|
3
|
+
export type GLTFCorpusExpectedStatus = "pass" | "warn" | "expected-fail";
|
|
4
|
+
export type AssetDiagnosticSeverity = "info" | "warning" | "error";
|
|
5
|
+
export interface AssetDiagnostic {
|
|
6
|
+
readonly code: string;
|
|
7
|
+
readonly severity: AssetDiagnosticSeverity;
|
|
8
|
+
readonly message: string;
|
|
9
|
+
readonly nextAction: string;
|
|
10
|
+
readonly assetId?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AssetImportSettings {
|
|
13
|
+
readonly colorSpace: "asset" | "srgb" | "linear";
|
|
14
|
+
readonly mipmaps: "generate" | "preserve" | "none";
|
|
15
|
+
readonly compression: "auto" | "prefer-source" | "none";
|
|
16
|
+
readonly scale: number;
|
|
17
|
+
readonly normals: "preserve" | "generate-if-missing" | "require";
|
|
18
|
+
readonly tangents: "preserve" | "generate-if-missing" | "require";
|
|
19
|
+
readonly animationImport: "all" | "first-clip" | "none";
|
|
20
|
+
readonly materialVariants: "import" | "ignore";
|
|
21
|
+
}
|
|
22
|
+
export interface GLTFCorpusSource {
|
|
23
|
+
readonly repository: string;
|
|
24
|
+
readonly revision: string;
|
|
25
|
+
readonly path: string;
|
|
26
|
+
readonly uri: string;
|
|
27
|
+
readonly sha256: string;
|
|
28
|
+
}
|
|
29
|
+
export interface GLTFCorpusAsset {
|
|
30
|
+
readonly id: string;
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly source: GLTFCorpusSource;
|
|
33
|
+
readonly format: GLTFCorpusAssetFormat;
|
|
34
|
+
readonly tags: readonly string[];
|
|
35
|
+
readonly license: string;
|
|
36
|
+
readonly expectedStatus: GLTFCorpusExpectedStatus;
|
|
37
|
+
readonly expectedDiagnostics?: readonly AssetDiagnostic[];
|
|
38
|
+
readonly importSettings?: Partial<AssetImportSettings>;
|
|
39
|
+
}
|
|
40
|
+
export interface GLTFCorpusManifest {
|
|
41
|
+
readonly schemaVersion: GLTFCorpusSchemaVersion;
|
|
42
|
+
readonly generatedFrom: {
|
|
43
|
+
readonly name: string;
|
|
44
|
+
readonly repository: string;
|
|
45
|
+
readonly revision: string;
|
|
46
|
+
};
|
|
47
|
+
readonly assets: readonly GLTFCorpusAsset[];
|
|
48
|
+
}
|
|
49
|
+
export interface GLTFCorpusAssetReport {
|
|
50
|
+
readonly id: string;
|
|
51
|
+
readonly name: string;
|
|
52
|
+
readonly format: GLTFCorpusAssetFormat;
|
|
53
|
+
readonly expectedStatus: GLTFCorpusExpectedStatus;
|
|
54
|
+
readonly sourceUri: string;
|
|
55
|
+
readonly sourceRevision: string;
|
|
56
|
+
readonly sourceSha256: string;
|
|
57
|
+
readonly tags: readonly string[];
|
|
58
|
+
readonly importSettings: AssetImportSettings;
|
|
59
|
+
readonly diagnostics: readonly AssetDiagnostic[];
|
|
60
|
+
}
|
|
61
|
+
export interface GLTFCorpusReport {
|
|
62
|
+
readonly schemaVersion: "gltf-corpus-report";
|
|
63
|
+
readonly generatedAt: string;
|
|
64
|
+
readonly sourceManifest: {
|
|
65
|
+
readonly schemaVersion: GLTFCorpusSchemaVersion;
|
|
66
|
+
readonly sourceName: string;
|
|
67
|
+
readonly sourceRepository: string;
|
|
68
|
+
readonly sourceRevision: string;
|
|
69
|
+
readonly assetCount: number;
|
|
70
|
+
};
|
|
71
|
+
readonly summary: {
|
|
72
|
+
readonly pass: number;
|
|
73
|
+
readonly warn: number;
|
|
74
|
+
readonly expectedFail: number;
|
|
75
|
+
};
|
|
76
|
+
readonly assets: readonly GLTFCorpusAssetReport[];
|
|
77
|
+
}
|
|
78
|
+
export interface GLTFCorpusValidationResult {
|
|
79
|
+
readonly ok: boolean;
|
|
80
|
+
readonly diagnostics: readonly AssetDiagnostic[];
|
|
81
|
+
readonly manifest?: GLTFCorpusManifest;
|
|
82
|
+
}
|
|
83
|
+
export declare const DEFAULT_ASSET_IMPORT_SETTINGS: AssetImportSettings;
|
|
84
|
+
export declare function normalizeAssetImportSettings(settings?: Partial<AssetImportSettings>): AssetImportSettings;
|
|
85
|
+
export declare function validateGLTFCorpusManifest(input: unknown): GLTFCorpusValidationResult;
|
|
86
|
+
export declare function assertValidGLTFCorpusManifest(input: unknown): GLTFCorpusManifest;
|
|
87
|
+
export declare function createGLTFCorpusReport(manifest: GLTFCorpusManifest, generatedAt?: string): GLTFCorpusReport;
|
|
88
|
+
//# sourceMappingURL=AssetCorpus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetCorpus.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/AssetCorpus.ts"],"names":[],"mappings":"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"}
|