@forgeax/engine-assets-runtime 0.1.3 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/README.md +442 -175
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/aabb.unit.test.d.ts +2 -0
  4. package/dist/__tests__/aabb.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/artifact-integrity.unit.test.d.ts +2 -0
  6. package/dist/__tests__/artifact-integrity.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/artifact-io.unit.test.d.ts +2 -0
  8. package/dist/__tests__/artifact-io.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts +2 -0
  10. package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts.map +1 -0
  11. package/dist/__tests__/asset-evidence.unit.test.d.ts +2 -0
  12. package/dist/__tests__/asset-evidence.unit.test.d.ts.map +1 -0
  13. package/dist/__tests__/asset-kind.unit.test.d.ts +2 -0
  14. package/dist/__tests__/asset-kind.unit.test.d.ts.map +1 -0
  15. package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts +2 -0
  16. package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts.map +1 -0
  17. package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts +2 -0
  18. package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/asset-registry-catalog.unit.test.d.ts +2 -0
  20. package/dist/__tests__/asset-registry-catalog.unit.test.d.ts.map +1 -0
  21. package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
  22. package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
  23. package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
  24. package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts +2 -0
  26. package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts.map +1 -0
  27. package/dist/__tests__/catalog-replica.unit.test.d.ts +2 -0
  28. package/dist/__tests__/catalog-replica.unit.test.d.ts.map +1 -0
  29. package/dist/__tests__/catalog-source-v2.unit.test.d.ts +2 -0
  30. package/dist/__tests__/catalog-source-v2.unit.test.d.ts.map +1 -0
  31. package/dist/__tests__/catalog-source.unit.test.d.ts +2 -0
  32. package/dist/__tests__/catalog-source.unit.test.d.ts.map +1 -0
  33. package/dist/__tests__/catalog-subscription-order.unit.test.d.ts +2 -0
  34. package/dist/__tests__/catalog-subscription-order.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/catalog-subscription.unit.test.d.ts +2 -0
  36. package/dist/__tests__/catalog-subscription.unit.test.d.ts.map +1 -0
  37. package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts +2 -0
  38. package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts.map +1 -0
  39. package/dist/__tests__/decode-image-bytes.browser.test.d.ts +2 -0
  40. package/dist/__tests__/decode-image-bytes.browser.test.d.ts.map +1 -0
  41. package/dist/__tests__/decode-image-bytes.test-d.d.ts +2 -0
  42. package/dist/__tests__/decode-image-bytes.test-d.d.ts.map +1 -0
  43. package/dist/__tests__/decode-image-bytes.test.d.ts +2 -0
  44. package/dist/__tests__/decode-image-bytes.test.d.ts.map +1 -0
  45. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
  46. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
  47. package/dist/__tests__/errors-asset.unit.test.d.ts +2 -0
  48. package/dist/__tests__/errors-asset.unit.test.d.ts.map +1 -0
  49. package/dist/__tests__/inline-pack-loaders.unit.test.d.ts +2 -0
  50. package/dist/__tests__/inline-pack-loaders.unit.test.d.ts.map +1 -0
  51. package/dist/__tests__/instantiate-context.unit.test.d.ts +2 -0
  52. package/dist/__tests__/instantiate-context.unit.test.d.ts.map +1 -0
  53. package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts +2 -0
  54. package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts.map +1 -0
  55. package/dist/__tests__/instantiate.unit.test.d.ts +2 -0
  56. package/dist/__tests__/instantiate.unit.test.d.ts.map +1 -0
  57. package/dist/__tests__/loader-input-contract.unit.test.d.ts +2 -0
  58. package/dist/__tests__/loader-input-contract.unit.test.d.ts.map +1 -0
  59. package/dist/__tests__/loader-registry.unit.test.d.ts +2 -0
  60. package/dist/__tests__/loader-registry.unit.test.d.ts.map +1 -0
  61. package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts +2 -0
  62. package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts.map +1 -0
  63. package/dist/__tests__/material-generation-cache.unit.test.d.ts +2 -0
  64. package/dist/__tests__/material-generation-cache.unit.test.d.ts.map +1 -0
  65. package/dist/__tests__/material-load-consumer.test-d.d.ts +2 -0
  66. package/dist/__tests__/material-load-consumer.test-d.d.ts.map +1 -0
  67. package/dist/__tests__/material-ready.integration.test.d.ts +2 -0
  68. package/dist/__tests__/material-ready.integration.test.d.ts.map +1 -0
  69. package/dist/__tests__/material-stale-generation.unit.test.d.ts +2 -0
  70. package/dist/__tests__/material-stale-generation.unit.test.d.ts.map +1 -0
  71. package/dist/__tests__/mesh-bin-morph-v3.test.d.ts +2 -0
  72. package/dist/__tests__/mesh-bin-morph-v3.test.d.ts.map +1 -0
  73. package/dist/__tests__/mesh-bin.unit.test.d.ts +2 -0
  74. package/dist/__tests__/mesh-bin.unit.test.d.ts.map +1 -0
  75. package/dist/__tests__/mipmap-generator.unit.test.d.ts +2 -0
  76. package/dist/__tests__/mipmap-generator.unit.test.d.ts.map +1 -0
  77. package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts +2 -0
  78. package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts.map +1 -0
  79. package/dist/__tests__/pack-basis-load.integration.test.d.ts +2 -0
  80. package/dist/__tests__/pack-basis-load.integration.test.d.ts.map +1 -0
  81. package/dist/__tests__/payload-validate.unit.test.d.ts +2 -0
  82. package/dist/__tests__/payload-validate.unit.test.d.ts.map +1 -0
  83. package/dist/__tests__/plugin.test.d.ts +2 -0
  84. package/dist/__tests__/plugin.test.d.ts.map +1 -0
  85. package/dist/__tests__/registry-concurrency.bench.test.d.ts +2 -0
  86. package/dist/__tests__/registry-concurrency.bench.test.d.ts.map +1 -0
  87. package/dist/__tests__/registry-failure-retry.integration.test.d.ts +2 -0
  88. package/dist/__tests__/registry-failure-retry.integration.test.d.ts.map +1 -0
  89. package/dist/__tests__/registry-load-graph.integration.test.d.ts +2 -0
  90. package/dist/__tests__/registry-load-graph.integration.test.d.ts.map +1 -0
  91. package/dist/__tests__/registry-load-state.unit.test.d.ts +2 -0
  92. package/dist/__tests__/registry-load-state.unit.test.d.ts.map +1 -0
  93. package/dist/__tests__/registry-package-cache.unit.test.d.ts +2 -0
  94. package/dist/__tests__/registry-package-cache.unit.test.d.ts.map +1 -0
  95. package/dist/__tests__/registry-public-ready.unit.test.d.ts +2 -0
  96. package/dist/__tests__/registry-public-ready.unit.test.d.ts.map +1 -0
  97. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
  98. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
  99. package/dist/__tests__/scene-handle-fields.unit.test.d.ts +2 -0
  100. package/dist/__tests__/scene-handle-fields.unit.test.d.ts.map +1 -0
  101. package/dist/__tests__/scene-payload.unit.test.d.ts +2 -0
  102. package/dist/__tests__/scene-payload.unit.test.d.ts.map +1 -0
  103. package/dist/__tests__/scene-publication-fence.test.d.ts +2 -0
  104. package/dist/__tests__/scene-publication-fence.test.d.ts.map +1 -0
  105. package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts +2 -0
  106. package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts.map +1 -0
  107. package/dist/__tests__/static-rig.integration.test.d.ts +2 -0
  108. package/dist/__tests__/static-rig.integration.test.d.ts.map +1 -0
  109. package/dist/__tests__/validate-material.unit.test.d.ts +2 -0
  110. package/dist/__tests__/validate-material.unit.test.d.ts.map +1 -0
  111. package/dist/__tests__/video-pack-loader.integration.test.d.ts +2 -0
  112. package/dist/__tests__/video-pack-loader.integration.test.d.ts.map +1 -0
  113. package/dist/aabb.d.ts +3 -0
  114. package/dist/aabb.d.ts.map +1 -0
  115. package/dist/asset-registry.d.ts +552 -0
  116. package/dist/asset-registry.d.ts.map +1 -0
  117. package/dist/builtin-asset-registry.d.ts +22 -0
  118. package/dist/builtin-asset-registry.d.ts.map +1 -0
  119. package/dist/catalog-source.d.ts +2 -1
  120. package/dist/catalog-source.d.ts.map +1 -1
  121. package/dist/decode-image-bytes.d.ts +57 -0
  122. package/dist/decode-image-bytes.d.ts.map +1 -0
  123. package/dist/dynamic-texture-store.d.ts +89 -0
  124. package/dist/dynamic-texture-store.d.ts.map +1 -0
  125. package/dist/errors/asset.d.ts +201 -0
  126. package/dist/errors/asset.d.ts.map +1 -0
  127. package/dist/handles.d.ts +141 -0
  128. package/dist/handles.d.ts.map +1 -0
  129. package/dist/image-error.d.ts +6 -0
  130. package/dist/image-error.d.ts.map +1 -0
  131. package/dist/index.d.ts +32 -3
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.mjs +7218 -114
  134. package/dist/index.mjs.map +1 -1
  135. package/dist/internal.d.ts +2 -1
  136. package/dist/internal.d.ts.map +1 -1
  137. package/dist/internal.mjs +317 -3
  138. package/dist/internal.mjs.map +1 -1
  139. package/dist/loader-registry.d.ts +63 -0
  140. package/dist/loader-registry.d.ts.map +1 -0
  141. package/dist/loaders/inline-pack.d.ts +72 -0
  142. package/dist/loaders/inline-pack.d.ts.map +1 -0
  143. package/dist/loaders/mesh-bin.d.ts +21 -0
  144. package/dist/loaders/mesh-bin.d.ts.map +1 -0
  145. package/dist/loaders/pack-artifact.d.ts +20 -0
  146. package/dist/loaders/pack-artifact.d.ts.map +1 -0
  147. package/dist/material/dependency-graph.d.ts +9 -0
  148. package/dist/material/dependency-graph.d.ts.map +1 -0
  149. package/dist/material/generation-cache.d.ts +24 -0
  150. package/dist/material/generation-cache.d.ts.map +1 -0
  151. package/dist/material/inspection.d.ts +24 -0
  152. package/dist/material/inspection.d.ts.map +1 -0
  153. package/dist/material/loader.d.ts +59 -0
  154. package/dist/material/loader.d.ts.map +1 -0
  155. package/dist/material/runtime-shader.d.ts +14 -0
  156. package/dist/material/runtime-shader.d.ts.map +1 -0
  157. package/dist/mesh-bin.d.ts +3 -0
  158. package/dist/mesh-bin.d.ts.map +1 -0
  159. package/dist/mipmap-generator.d.ts +132 -0
  160. package/dist/mipmap-generator.d.ts.map +1 -0
  161. package/dist/payload-validate.d.ts +60 -0
  162. package/dist/payload-validate.d.ts.map +1 -0
  163. package/dist/plugin.d.ts +16 -0
  164. package/dist/plugin.d.ts.map +1 -0
  165. package/dist/registry/artifact-io.d.ts +16 -0
  166. package/dist/registry/artifact-io.d.ts.map +1 -0
  167. package/dist/registry/asset-evidence.d.ts +13 -0
  168. package/dist/registry/asset-evidence.d.ts.map +1 -0
  169. package/dist/registry/catalog-state.d.ts +47 -0
  170. package/dist/registry/catalog-state.d.ts.map +1 -0
  171. package/dist/registry/catalog.d.ts +48 -0
  172. package/dist/registry/catalog.d.ts.map +1 -0
  173. package/dist/registry/instantiate.d.ts +153 -0
  174. package/dist/registry/instantiate.d.ts.map +1 -0
  175. package/dist/registry/load-by-guid.d.ts +247 -0
  176. package/dist/registry/load-by-guid.d.ts.map +1 -0
  177. package/dist/registry/load-state.d.ts +26 -0
  178. package/dist/registry/load-state.d.ts.map +1 -0
  179. package/dist/registry/runtime-projection.d.ts +16 -0
  180. package/dist/registry/runtime-projection.d.ts.map +1 -0
  181. package/dist/registry/scene-publication-fence.d.ts +38 -0
  182. package/dist/registry/scene-publication-fence.d.ts.map +1 -0
  183. package/dist/registry/validate-material.d.ts +77 -0
  184. package/dist/registry/validate-material.d.ts.map +1 -0
  185. package/dist/resolve-asset-handle.d.ts +43 -0
  186. package/dist/resolve-asset-handle.d.ts.map +1 -0
  187. package/dist/resolve-tileset-runtime.d.ts +23 -0
  188. package/dist/resolve-tileset-runtime.d.ts.map +1 -0
  189. package/dist/scene-handle-fields.d.ts +88 -0
  190. package/dist/scene-handle-fields.d.ts.map +1 -0
  191. package/dist/scene-payload.d.ts +15 -0
  192. package/dist/scene-payload.d.ts.map +1 -0
  193. package/dist/wire-default-loaders.d.ts +29 -0
  194. package/dist/wire-default-loaders.d.ts.map +1 -0
  195. package/package.json +22 -9
  196. package/src/__tests__/aabb.unit.test.ts +97 -0
  197. package/src/__tests__/artifact-integrity.unit.test.ts +99 -0
  198. package/src/__tests__/artifact-io.unit.test.ts +127 -0
  199. package/src/__tests__/asset-evidence-sdk.integration.test.ts +32 -0
  200. package/src/__tests__/asset-evidence.unit.test.ts +32 -0
  201. package/src/__tests__/{asset-kind.test.ts → asset-kind.unit.test.ts} +1 -1
  202. package/src/__tests__/asset-registry-catalog-reconcile.integration.test.ts +74 -0
  203. package/src/__tests__/asset-registry-catalog-reconcile.unit.test.ts +89 -0
  204. package/src/__tests__/asset-registry-catalog.unit.test.ts +170 -0
  205. package/src/__tests__/asset-registry.pack-cache.test.ts +96 -0
  206. package/src/__tests__/asset-registry.unit.test.ts +511 -0
  207. package/src/__tests__/asset-runtime-error-code-owner.test-d.ts +63 -0
  208. package/src/__tests__/catalog-replica.unit.test.ts +196 -0
  209. package/src/__tests__/catalog-source-v2.unit.test.ts +158 -0
  210. package/src/__tests__/catalog-source.unit.test.ts +126 -0
  211. package/src/__tests__/catalog-subscription-order.unit.test.ts +65 -0
  212. package/src/__tests__/catalog-subscription.unit.test.ts +28 -0
  213. package/src/__tests__/decode-image-bytes-pass-through.test.ts +34 -0
  214. package/src/__tests__/decode-image-bytes.browser.test.ts +102 -0
  215. package/src/__tests__/decode-image-bytes.test-d.ts +108 -0
  216. package/src/__tests__/decode-image-bytes.test.ts +90 -0
  217. package/src/__tests__/decode-image-mime-owner.test.ts +2 -5
  218. package/src/__tests__/dynamic-texture-store.unit.test.ts +115 -0
  219. package/src/__tests__/errors-asset.unit.test.ts +92 -0
  220. package/src/__tests__/inline-pack-loaders.unit.test.ts +548 -0
  221. package/src/__tests__/instantiate-context.unit.test.ts +65 -0
  222. package/src/__tests__/instantiate-publication-fence.unit.test.ts +158 -0
  223. package/src/__tests__/instantiate.unit.test.ts +684 -0
  224. package/src/__tests__/loader-input-contract.unit.test.ts +89 -0
  225. package/src/__tests__/loader-registry.unit.test.ts +101 -0
  226. package/src/__tests__/material-dependency-invalidation.unit.test.ts +14 -0
  227. package/src/__tests__/material-generation-cache.unit.test.ts +46 -0
  228. package/src/__tests__/material-load-consumer.test-d.ts +42 -0
  229. package/src/__tests__/material-ready.integration.test.ts +492 -0
  230. package/src/__tests__/material-stale-generation.unit.test.ts +152 -0
  231. package/src/__tests__/mesh-bin-morph-v3.test.ts +22 -0
  232. package/src/__tests__/mesh-bin.unit.test.ts +152 -0
  233. package/src/__tests__/mipmap-generator.unit.test.ts +202 -0
  234. package/src/__tests__/pack-artifact-transcode-model-owner.test.ts +32 -0
  235. package/src/__tests__/pack-basis-load.integration.test.ts +168 -0
  236. package/src/__tests__/payload-validate.unit.test.ts +285 -0
  237. package/src/__tests__/plugin.test.ts +55 -0
  238. package/src/__tests__/registry-concurrency.bench.test.ts +40 -0
  239. package/src/__tests__/registry-failure-retry.integration.test.ts +69 -0
  240. package/src/__tests__/registry-load-graph.integration.test.ts +246 -0
  241. package/src/__tests__/registry-load-state.unit.test.ts +35 -0
  242. package/src/__tests__/registry-package-cache.unit.test.ts +53 -0
  243. package/src/__tests__/registry-public-ready.unit.test.ts +38 -0
  244. package/src/__tests__/resolve-asset-handle.unit.test.ts +238 -0
  245. package/src/__tests__/scene-handle-fields.unit.test.ts +129 -0
  246. package/src/__tests__/scene-payload.unit.test.ts +151 -0
  247. package/src/__tests__/scene-publication-fence.test.ts +129 -0
  248. package/src/__tests__/scriptable-pack-public-surface.test-d.ts +16 -0
  249. package/src/__tests__/static-rig.integration.test.ts +8 -0
  250. package/src/__tests__/validate-material.unit.test.ts +359 -0
  251. package/src/__tests__/video-pack-loader.integration.test.ts +83 -0
  252. package/src/aabb.ts +107 -0
  253. package/src/asset-registry.ts +2040 -0
  254. package/src/builtin-asset-registry.ts +164 -0
  255. package/src/catalog-source.ts +14 -70
  256. package/src/decode-image-bytes.ts +126 -0
  257. package/src/dynamic-texture-store.ts +234 -0
  258. package/src/errors/asset.ts +347 -0
  259. package/src/handles.ts +180 -0
  260. package/src/image-error.ts +45 -0
  261. package/src/index.ts +177 -19
  262. package/src/internal.ts +2 -0
  263. package/src/loader-registry.ts +157 -0
  264. package/src/loaders/inline-pack.ts +837 -0
  265. package/src/loaders/mesh-bin.ts +304 -0
  266. package/src/loaders/pack-artifact.ts +665 -0
  267. package/src/material/dependency-graph.ts +46 -0
  268. package/src/material/generation-cache.ts +177 -0
  269. package/src/material/inspection.ts +46 -0
  270. package/src/material/loader.ts +326 -0
  271. package/src/material/runtime-shader.ts +133 -0
  272. package/src/mesh-bin.ts +5 -0
  273. package/src/mipmap-generator.ts +450 -0
  274. package/src/payload-validate.ts +573 -0
  275. package/src/plugin.ts +48 -0
  276. package/src/registry/artifact-io.ts +259 -0
  277. package/src/registry/asset-evidence.ts +51 -0
  278. package/src/registry/catalog-state.ts +409 -0
  279. package/src/registry/catalog.ts +369 -0
  280. package/src/registry/instantiate.ts +1056 -0
  281. package/src/registry/load-by-guid.ts +1657 -0
  282. package/src/registry/load-state.ts +115 -0
  283. package/src/registry/runtime-projection.ts +63 -0
  284. package/src/registry/scene-publication-fence.ts +256 -0
  285. package/src/registry/validate-material.ts +386 -0
  286. package/src/resolve-asset-handle.ts +147 -0
  287. package/src/resolve-tileset-runtime.ts +72 -0
  288. package/src/scene-handle-fields.ts +221 -0
  289. package/src/scene-payload.ts +207 -0
  290. package/src/wire-default-loaders.ts +79 -0
  291. package/dist/__tests__/asset-graph-red.integration.test.d.ts +0 -2
  292. package/dist/__tests__/asset-graph-red.integration.test.d.ts.map +0 -1
  293. package/dist/__tests__/asset-kind.test.d.ts +0 -2
  294. package/dist/__tests__/asset-kind.test.d.ts.map +0 -1
  295. package/dist/__tests__/asset-registry-core.integration.test.d.ts +0 -2
  296. package/dist/__tests__/asset-registry-core.integration.test.d.ts.map +0 -1
  297. package/dist/__tests__/asset-registry-public-api.test-d.d.ts +0 -2
  298. package/dist/__tests__/asset-registry-public-api.test-d.d.ts.map +0 -1
  299. package/dist/__tests__/asset-runtime-core-lifecycle.integration.test.d.ts +0 -2
  300. package/dist/__tests__/asset-runtime-core-lifecycle.integration.test.d.ts.map +0 -1
  301. package/dist/__tests__/asset-runtime-snapshot.unit.test.d.ts +0 -2
  302. package/dist/__tests__/asset-runtime-snapshot.unit.test.d.ts.map +0 -1
  303. package/dist/__tests__/catalog-session-red.unit.test.d.ts +0 -2
  304. package/dist/__tests__/catalog-session-red.unit.test.d.ts.map +0 -1
  305. package/dist/__tests__/registry-lifecycle-red.integration.test.d.ts +0 -2
  306. package/dist/__tests__/registry-lifecycle-red.integration.test.d.ts.map +0 -1
  307. package/src/__tests__/asset-graph-red.integration.test.ts +0 -113
  308. package/src/__tests__/asset-registry-core.integration.test.ts +0 -161
  309. package/src/__tests__/asset-registry-public-api.test-d.ts +0 -31
  310. package/src/__tests__/asset-runtime-core-lifecycle.integration.test.ts +0 -79
  311. package/src/__tests__/asset-runtime-snapshot.unit.test.ts +0 -23
  312. package/src/__tests__/catalog-session-red.unit.test.ts +0 -276
  313. package/src/__tests__/registry-lifecycle-red.integration.test.ts +0 -80
package/src/index.ts CHANGED
@@ -1,22 +1,180 @@
1
+ // @forgeax/engine-assets-runtime -- public API barrel.
2
+ //
3
+ // Tier 2.1 package extracted from @forgeax/engine-runtime
4
+ // (feat-20260705-runtime-tier2-decomposition M1). The asset registry, loader
5
+ // registry, GUID resolution, default-loader wiring, builtin handles, and the
6
+ // dynamic-texture / mipmap helpers live here; the runtime package injects the
7
+ // post-spawn hook + extra loaders (audio / video) at the createRenderer
8
+ // assembly point.
9
+ //
10
+ // w14 public surface: exports exactly the asset-cluster symbols that the
11
+ // runtime package (src + __tests__) consumes plus what the pre-w14 runtime
12
+ // barrel re-exported to external consumers. Downstream apps repoint to this
13
+ // package in w15 (the runtime barrel no longer re-exports any asset symbol).
14
+
1
15
  export type {
2
- AssetDecoder,
3
- AssetDecoderInput,
4
- AssetDecoderLease,
5
- AssetKind,
6
- AssetLoadError,
7
- AssetPublicationTuple,
8
- CatalogEntry,
9
- PackV2,
10
- Result,
16
+ AnimationClip,
17
+ AnimationGraph,
18
+ AudioClipAsset,
19
+ EquirectAsset,
20
+ FontAsset,
21
+ MaterialAsset,
22
+ ParticleEffectAsset,
23
+ RenderPipelineAsset,
24
+ SamplerAsset,
25
+ SceneAsset,
26
+ SkeletonAsset,
27
+ SkinAsset,
28
+ TextureAsset,
29
+ TilesetAsset,
30
+ VideoAsset,
11
31
  } from '@forgeax/engine-types';
12
-
13
32
  export { defineAssetKind } from './asset-kind.js';
14
- export { type CatalogListener, type CatalogSource, createCatalogSource } from './catalog-source.js';
15
- export {
16
- type AssetLoadOptions,
17
- type AssetRegistry,
18
- type AssetRegistryOptions,
19
- type AssetRegistrySnapshot,
20
- type AssetRegistrySnapshotCounters,
21
- createAssetRegistry,
22
- } from './internal/load-asset.js';
33
+ // ─── AssetRegistry + Asset / MeshAsset type aliases ─────────────────────────
34
+ export type {
35
+ Asset,
36
+ CatalogReconcileError,
37
+ CatalogReconcileResult,
38
+ MeshAsset,
39
+ } from './asset-registry';
40
+ export { AssetRegistry } from './asset-registry';
41
+ // ─── Process-static builtin payload registry + vertex-layout SSOT ───────────
42
+ export {
43
+ BUILTIN_BASE,
44
+ BUILTIN_CUBE,
45
+ BUILTIN_CYLINDER,
46
+ BUILTIN_NINESLICE_QUAD,
47
+ BUILTIN_QUAD,
48
+ BUILTIN_SPHERE,
49
+ BUILTIN_TRIANGLE,
50
+ BuiltinAssetRegistry,
51
+ } from './builtin-asset-registry';
52
+ export { type CatalogListener, type CatalogSource, createCatalogSource } from './catalog-source';
53
+ // ─── Runtime image byte decoder (tweak-20260714 M1) ──────────────────────────
54
+ export { decodeImageBytes } from './decode-image-bytes';
55
+ // ─── Dynamic per-frame texture store ────────────────────────────────────────
56
+ export {
57
+ adaptDynamicTextureDevice,
58
+ type DynamicTextureDevice,
59
+ DynamicTextureStore,
60
+ } from './dynamic-texture-store';
61
+ // ─── Asset cluster error model (closed union + classes) ─────────────────────
62
+ export type {
63
+ AssetRuntimeError,
64
+ AssetRuntimeErrorCode,
65
+ MaterialResolvedEmptyPassesDetail,
66
+ SceneCollectAssetGuidUnresolvedDetail,
67
+ SceneCollectEntityRefOutOfClosureDetail,
68
+ } from './errors/asset';
69
+ export {
70
+ MaterialResolvedEmptyPassesError,
71
+ MeshBinAssetError,
72
+ MeshSsboCapacityExceededError,
73
+ MeshSsboCeilingReachedError,
74
+ SceneCollectAssetGuidUnresolvedError,
75
+ SceneCollectEntityRefOutOfClosureError,
76
+ } from './errors/asset';
77
+ // ─── Builtin mesh handles (re-exported by asset-registry from ./handles) ─────
78
+ export {
79
+ HANDLE_CUBE,
80
+ HANDLE_CYLINDER,
81
+ HANDLE_NINESLICE_QUAD,
82
+ HANDLE_QUAD,
83
+ HANDLE_SPHERE,
84
+ HANDLE_TRIANGLE,
85
+ } from './handles';
86
+ export { createAssetRegistry } from './internal/load-asset.js';
87
+ // ─── Loader-injection surface ───────────────────────────────────────────────
88
+ export { LoaderRegistry } from './loader-registry';
89
+ // ─── Default loader tables + individual loaders (pre-w14 consumer face) ──────
90
+ export {
91
+ animationClipLoader,
92
+ animationGraphLoader,
93
+ audioLoader,
94
+ INLINE_PACK_LOADERS,
95
+ materialLoader,
96
+ meshLoader,
97
+ particleEffectLoader,
98
+ renderPipelineLoader,
99
+ sceneLoader,
100
+ skeletonLoader,
101
+ skinLoader,
102
+ tilesetLoader,
103
+ } from './loaders/inline-pack';
104
+ // ─── Mesh binary container decode ───────────────────────────────────────────
105
+ export {
106
+ type UnpackedMeshBin,
107
+ unpackMeshBinV4,
108
+ } from './loaders/mesh-bin';
109
+ export {
110
+ equirectLoader,
111
+ fontLoader,
112
+ PACK_ARTIFACT_LOADERS,
113
+ renderPipelineLoader as renderPipelineArtifactLoader,
114
+ textureLoader,
115
+ tilesetLoader as tilesetArtifactLoader,
116
+ } from './loaders/pack-artifact';
117
+ export { MaterialGenerationCache } from './material/generation-cache';
118
+ export { inspectMaterialRuntime, type MaterialRuntimeInfo } from './material/inspection';
119
+ export {
120
+ createMaterialLoader,
121
+ type MaterialLoadError,
122
+ type MaterialLoadErrorCode,
123
+ type MaterialLoadErrorDetail,
124
+ type MaterialLoaderOptions,
125
+ type MaterialLoadRequest,
126
+ type MaterialPublication,
127
+ type MaterialReady,
128
+ } from './material/loader';
129
+ export {
130
+ installMaterialReadyShaders,
131
+ materialParametersToParamSchema,
132
+ runtimeMaterialShaderId,
133
+ } from './material/runtime-shader';
134
+ // ─── Mipmap generation helpers ──────────────────────────────────────────────
135
+ export {
136
+ blitMipmapsSync,
137
+ getOrCreateMipmapPipeline,
138
+ type MipmapBlitDevice,
139
+ type MipmapShaderModuleFactory,
140
+ mipmapCacheSize,
141
+ numMipLevels,
142
+ } from './mipmap-generator';
143
+ // ─── Register-time payload validation ───────────────────────────────────────
144
+ export { type TilesetValidateOptions, validateTilesetPayload } from './payload-validate';
145
+ export { assetLoaderPlugin, assetsPlugin, packLoaderPlugin } from './plugin';
146
+ export {
147
+ createRuntimeAssetEvidenceAdapter,
148
+ type RuntimeEvidenceSource,
149
+ } from './registry/asset-evidence';
150
+ export { CatalogReplica, type CatalogReplicaSnapshot } from './registry/catalog-state';
151
+ export type { PostSpawnHook, SkinJointResolver } from './registry/instantiate';
152
+ // ─── Scene instantiate collaboration contract types (D-1 injected hook) ─────
153
+ export { buildSceneChildContext } from './registry/instantiate';
154
+ export { loadMaterialReadyByGuid } from './registry/load-by-guid';
155
+ export {
156
+ compareScenePublicationFences,
157
+ createScenePublicationFence,
158
+ observeScenePublication,
159
+ parseScenePublicationFence,
160
+ SCENE_PUBLICATION_FENCE_SCHEMA,
161
+ SCENE_PUBLICATION_RECOVERY_ACTIONS,
162
+ type ScenePublicationFence,
163
+ type ScenePublicationFenceError,
164
+ type ScenePublicationFencePhase,
165
+ type ScenePublicationObservation,
166
+ scenePublicationFenceFromCatalog,
167
+ } from './registry/scene-publication-fence';
168
+ // ─── Handle-to-payload resolution ───────────────────────────────────────────
169
+ export { resolveAssetHandle, walkMaterialPassesOverSharedRefs } from './resolve-asset-handle';
170
+ export {
171
+ type ResolvedTilesetRuntime,
172
+ resolveTilesetRuntime,
173
+ type TilesetAtlasLookup,
174
+ type TilesetRuntimeError,
175
+ type TilesetRuntimeErrorCode,
176
+ } from './resolve-tileset-runtime';
177
+ // Public scene-pack boundary: editor/play hosts reuse the engine's canonical
178
+ // refs-index -> SceneAsset reconstruction when refreshing a saved SceneAsset.
179
+ export { parseScenePayload } from './scene-payload';
180
+ export { createDefaultLoaderRegistry, wireDefaultLoaders } from './wire-default-loaders';
package/src/internal.ts CHANGED
@@ -1,4 +1,6 @@
1
+ export { CatalogSession } from './internal/catalog-session.js';
1
2
  export {
3
+ type AssetRegistry,
2
4
  type AssetRegistryResolver,
3
5
  getAssetRegistryResolver,
4
6
  } from './internal/load-asset.js';
@@ -0,0 +1,157 @@
1
+ // @forgeax/engine-assets-runtime - LoaderRegistry (feat-20260603-asset-import-loader-injection M1 / w2).
2
+ //
3
+ // The runtime half of the engine's third DIP instance (after RHI + Console):
4
+ // an injectable table that maps `asset.kind` -> a `Loader` (the contract SSOT
5
+ // lives in `@forgeax/engine-types`, plan-strategy D-2). `AssetRegistry` holds
6
+ // one of these (constructor-injected, D-7) and dispatches `loadByGuid` through
7
+ // `get(kind)` instead of a hardcoded `if (kind === ...)` chain (D-1).
8
+ //
9
+ // Shape mirrors the Console `Registry` (packages/console/src/registry.ts)
10
+ // register/lookup pattern (research Finding 8), with one deliberate
11
+ // difference: the injected unit here is an **object** `{ kind, load }`, not a
12
+ // bare function, because a "one kind -> one loader" dispatch table is the
13
+ // natural shape (plan-strategy D-1 alt-B rejection).
14
+ //
15
+ // Fail-fast semantics (charter P3): `register` throws on a malformed loader
16
+ // or duplicate kind at wire time, so one canonical owner cannot be silently
17
+ // replaced by a later seed table.
18
+
19
+ import type { ArtifactDescriptor, LoadContext, Loader } from '@forgeax/engine-types';
20
+
21
+ export interface PackArtifactInput {
22
+ readonly descriptor: ArtifactDescriptor;
23
+ readonly bytes: Uint8Array;
24
+ }
25
+
26
+ export interface PackLoaderInput {
27
+ readonly guid: string;
28
+ readonly kind: string;
29
+ readonly payload: Record<string, unknown>;
30
+ readonly refs: readonly string[];
31
+ readonly artifacts: Readonly<Record<string, PackArtifactInput>>;
32
+ }
33
+
34
+ export interface PackLoader {
35
+ readonly kind: string;
36
+ load(input: PackLoaderInput, ctx: LoadContext): unknown;
37
+ }
38
+
39
+ export type PackLoadResult =
40
+ | { readonly ok: true; readonly value: unknown }
41
+ | { readonly ok: false; readonly error: unknown };
42
+
43
+ /**
44
+ * Injectable `asset.kind` -> {@link Loader} table held by `AssetRegistry`.
45
+ *
46
+ * @example Wire + dispatch (host side)
47
+ * ```ts
48
+ * import { LoaderRegistry, wireDefaultLoaders } from '@forgeax/engine-assets-runtime';
49
+ * const loaders = new LoaderRegistry();
50
+ * wireDefaultLoaders(loaders);
51
+ * const meshLoader = loaders.get('mesh'); // Loader | undefined
52
+ * ```
53
+ */
54
+ export class LoaderRegistry {
55
+ // feat-20260623 M4 / w13: the Map stores Loader<unknown> so host custom kinds
56
+ // (Loader<MyPayload>) are accepted. The P in Loader<P> is covariant (output
57
+ // only: load() returns P), so Loader<Asset> is assignable to Loader<unknown>.
58
+ private readonly loaders = new Map<string, Loader<unknown>>();
59
+ private readonly packLoaders = new Map<string, PackLoader>();
60
+
61
+ /**
62
+ * Register a loader for its `loader.kind`. Fail-fast on a malformed loader
63
+ * (charter P3); rejects a repeated kind so the canonical owner cannot be replaced.
64
+ *
65
+ * @param loader the `{ kind, load }` object to register.
66
+ * @throws TypeError when `loader.kind` is empty or `loader.load` is not a
67
+ * function — a wire-time misconfiguration the host must fix.
68
+ */
69
+ register(loader: Loader<unknown>): () => void {
70
+ if (typeof loader.kind !== 'string' || loader.kind.length === 0) {
71
+ throw new TypeError(
72
+ `LoaderRegistry.register: loader.kind must be a non-empty string (got ${JSON.stringify(loader.kind)})`,
73
+ );
74
+ }
75
+ if (typeof loader.load !== 'function') {
76
+ throw new TypeError(
77
+ `LoaderRegistry.register: loader.load must be a function for kind "${loader.kind}"`,
78
+ );
79
+ }
80
+ if (this.loaders.has(loader.kind)) {
81
+ throw new TypeError(`LoaderRegistry.register: duplicate loader kind "${loader.kind}"`);
82
+ }
83
+ this.loaders.set(loader.kind, loader);
84
+ return () => {
85
+ if (this.loaders.get(loader.kind) === loader) this.loaders.delete(loader.kind);
86
+ };
87
+ }
88
+
89
+ registerPackLoader(loader: PackLoader): () => void {
90
+ if (typeof loader.kind !== 'string' || loader.kind.length === 0) {
91
+ throw new TypeError('LoaderRegistry.registerPackLoader: kind must be non-empty');
92
+ }
93
+ if (typeof loader.load !== 'function') {
94
+ throw new TypeError(
95
+ `LoaderRegistry.registerPackLoader: load must be a function for ${loader.kind}`,
96
+ );
97
+ }
98
+ if (this.packLoaders.has(loader.kind)) {
99
+ throw new TypeError(
100
+ `LoaderRegistry.registerPackLoader: duplicate loader kind "${loader.kind}"`,
101
+ );
102
+ }
103
+ this.packLoaders.set(loader.kind, loader);
104
+ return () => {
105
+ if (this.packLoaders.get(loader.kind) === loader) this.packLoaders.delete(loader.kind);
106
+ };
107
+ }
108
+
109
+ async loadPack(input: PackLoaderInput, ctx: LoadContext): Promise<PackLoadResult> {
110
+ const packLoader = this.packLoaders.get(input.kind);
111
+ if (packLoader !== undefined) {
112
+ const output = await packLoader.load(input, ctx);
113
+ if (isPackLoadResult(output)) return output;
114
+ return { ok: true, value: output };
115
+ }
116
+ const loader = this.loaders.get(input.kind);
117
+ if (loader === undefined) {
118
+ return { ok: false, error: new Error(`no loader registered for ${input.kind}`) };
119
+ }
120
+ if (loader.loadPack !== undefined) {
121
+ const output = await loader.loadPack(input, ctx);
122
+ if (isPackLoadResult(output)) return output;
123
+ return { ok: true, value: output };
124
+ }
125
+ const output = await loader.load(input.payload, input.refs, ctx);
126
+ if (isPackLoadResult(output)) return output;
127
+ return { ok: true, value: output };
128
+ }
129
+
130
+ /**
131
+ * Look up the loader registered for `kind`. Returns `undefined` when no
132
+ * loader is wired — the `AssetRegistry` consumer maps that to a structured
133
+ * `AssetError(code='loader-not-registered')` with the registered kinds in
134
+ * `.detail` (charter P3).
135
+ */
136
+ get(kind: string): Loader<unknown> | undefined {
137
+ return this.loaders.get(kind);
138
+ }
139
+
140
+ /**
141
+ * The kinds currently wired, in insertion order. Fed into the
142
+ * `loader-not-registered` error `.detail.registeredKinds` so AI users see
143
+ * exactly what is injectable.
144
+ */
145
+ registeredKinds(): readonly string[] {
146
+ return [...this.loaders.keys()];
147
+ }
148
+ }
149
+
150
+ function isPackLoadResult(value: unknown): value is PackLoadResult {
151
+ return (
152
+ value !== null &&
153
+ typeof value === 'object' &&
154
+ 'ok' in value &&
155
+ typeof (value as { ok?: unknown }).ok === 'boolean'
156
+ );
157
+ }