@forgeax/engine-assets-runtime 0.0.0-dev.8d955ade1c79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +491 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/__tests__/aabb.unit.test.d.ts +2 -0
  5. package/dist/__tests__/aabb.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/artifact-integrity.unit.test.d.ts +2 -0
  7. package/dist/__tests__/artifact-integrity.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/artifact-io.unit.test.d.ts +2 -0
  9. package/dist/__tests__/artifact-io.unit.test.d.ts.map +1 -0
  10. package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts +2 -0
  11. package/dist/__tests__/asset-evidence-sdk.integration.test.d.ts.map +1 -0
  12. package/dist/__tests__/asset-evidence.unit.test.d.ts +2 -0
  13. package/dist/__tests__/asset-evidence.unit.test.d.ts.map +1 -0
  14. package/dist/__tests__/asset-kind.unit.test.d.ts +2 -0
  15. package/dist/__tests__/asset-kind.unit.test.d.ts.map +1 -0
  16. package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts +2 -0
  17. package/dist/__tests__/asset-registry-catalog-reconcile.integration.test.d.ts.map +1 -0
  18. package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts +2 -0
  19. package/dist/__tests__/asset-registry-catalog-reconcile.unit.test.d.ts.map +1 -0
  20. package/dist/__tests__/asset-registry-catalog.unit.test.d.ts +2 -0
  21. package/dist/__tests__/asset-registry-catalog.unit.test.d.ts.map +1 -0
  22. package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
  23. package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
  24. package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
  25. package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
  26. package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts +2 -0
  27. package/dist/__tests__/asset-runtime-error-code-owner.test-d.d.ts.map +1 -0
  28. package/dist/__tests__/catalog-replica.unit.test.d.ts +2 -0
  29. package/dist/__tests__/catalog-replica.unit.test.d.ts.map +1 -0
  30. package/dist/__tests__/catalog-source-v2.unit.test.d.ts +2 -0
  31. package/dist/__tests__/catalog-source-v2.unit.test.d.ts.map +1 -0
  32. package/dist/__tests__/catalog-source.unit.test.d.ts +2 -0
  33. package/dist/__tests__/catalog-source.unit.test.d.ts.map +1 -0
  34. package/dist/__tests__/catalog-subscription-order.unit.test.d.ts +2 -0
  35. package/dist/__tests__/catalog-subscription-order.unit.test.d.ts.map +1 -0
  36. package/dist/__tests__/catalog-subscription.unit.test.d.ts +2 -0
  37. package/dist/__tests__/catalog-subscription.unit.test.d.ts.map +1 -0
  38. package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts +2 -0
  39. package/dist/__tests__/decode-image-bytes-pass-through.test.d.ts.map +1 -0
  40. package/dist/__tests__/decode-image-bytes.browser.test.d.ts +2 -0
  41. package/dist/__tests__/decode-image-bytes.browser.test.d.ts.map +1 -0
  42. package/dist/__tests__/decode-image-bytes.test-d.d.ts +2 -0
  43. package/dist/__tests__/decode-image-bytes.test-d.d.ts.map +1 -0
  44. package/dist/__tests__/decode-image-bytes.test.d.ts +2 -0
  45. package/dist/__tests__/decode-image-bytes.test.d.ts.map +1 -0
  46. package/dist/__tests__/decode-image-mime-owner.test.d.ts +2 -0
  47. package/dist/__tests__/decode-image-mime-owner.test.d.ts.map +1 -0
  48. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
  49. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
  50. package/dist/__tests__/errors-asset.unit.test.d.ts +2 -0
  51. package/dist/__tests__/errors-asset.unit.test.d.ts.map +1 -0
  52. package/dist/__tests__/inline-pack-loaders.unit.test.d.ts +2 -0
  53. package/dist/__tests__/inline-pack-loaders.unit.test.d.ts.map +1 -0
  54. package/dist/__tests__/instantiate-context.unit.test.d.ts +2 -0
  55. package/dist/__tests__/instantiate-context.unit.test.d.ts.map +1 -0
  56. package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts +2 -0
  57. package/dist/__tests__/instantiate-publication-fence.unit.test.d.ts.map +1 -0
  58. package/dist/__tests__/instantiate.unit.test.d.ts +2 -0
  59. package/dist/__tests__/instantiate.unit.test.d.ts.map +1 -0
  60. package/dist/__tests__/loader-input-contract.unit.test.d.ts +2 -0
  61. package/dist/__tests__/loader-input-contract.unit.test.d.ts.map +1 -0
  62. package/dist/__tests__/loader-registry.unit.test.d.ts +2 -0
  63. package/dist/__tests__/loader-registry.unit.test.d.ts.map +1 -0
  64. package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts +2 -0
  65. package/dist/__tests__/material-dependency-invalidation.unit.test.d.ts.map +1 -0
  66. package/dist/__tests__/material-generation-cache.unit.test.d.ts +2 -0
  67. package/dist/__tests__/material-generation-cache.unit.test.d.ts.map +1 -0
  68. package/dist/__tests__/material-load-consumer.test-d.d.ts +2 -0
  69. package/dist/__tests__/material-load-consumer.test-d.d.ts.map +1 -0
  70. package/dist/__tests__/material-ready.integration.test.d.ts +2 -0
  71. package/dist/__tests__/material-ready.integration.test.d.ts.map +1 -0
  72. package/dist/__tests__/material-stale-generation.unit.test.d.ts +2 -0
  73. package/dist/__tests__/material-stale-generation.unit.test.d.ts.map +1 -0
  74. package/dist/__tests__/mesh-bin-morph-v3.test.d.ts +2 -0
  75. package/dist/__tests__/mesh-bin-morph-v3.test.d.ts.map +1 -0
  76. package/dist/__tests__/mesh-bin.unit.test.d.ts +2 -0
  77. package/dist/__tests__/mesh-bin.unit.test.d.ts.map +1 -0
  78. package/dist/__tests__/mipmap-generator.unit.test.d.ts +2 -0
  79. package/dist/__tests__/mipmap-generator.unit.test.d.ts.map +1 -0
  80. package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts +2 -0
  81. package/dist/__tests__/pack-artifact-transcode-model-owner.test.d.ts.map +1 -0
  82. package/dist/__tests__/pack-basis-load.integration.test.d.ts +2 -0
  83. package/dist/__tests__/pack-basis-load.integration.test.d.ts.map +1 -0
  84. package/dist/__tests__/payload-validate.unit.test.d.ts +2 -0
  85. package/dist/__tests__/payload-validate.unit.test.d.ts.map +1 -0
  86. package/dist/__tests__/plugin.test.d.ts +2 -0
  87. package/dist/__tests__/plugin.test.d.ts.map +1 -0
  88. package/dist/__tests__/registry-concurrency.bench.test.d.ts +2 -0
  89. package/dist/__tests__/registry-concurrency.bench.test.d.ts.map +1 -0
  90. package/dist/__tests__/registry-failure-retry.integration.test.d.ts +2 -0
  91. package/dist/__tests__/registry-failure-retry.integration.test.d.ts.map +1 -0
  92. package/dist/__tests__/registry-load-graph.integration.test.d.ts +2 -0
  93. package/dist/__tests__/registry-load-graph.integration.test.d.ts.map +1 -0
  94. package/dist/__tests__/registry-load-state.unit.test.d.ts +2 -0
  95. package/dist/__tests__/registry-load-state.unit.test.d.ts.map +1 -0
  96. package/dist/__tests__/registry-package-cache.unit.test.d.ts +2 -0
  97. package/dist/__tests__/registry-package-cache.unit.test.d.ts.map +1 -0
  98. package/dist/__tests__/registry-public-ready.unit.test.d.ts +2 -0
  99. package/dist/__tests__/registry-public-ready.unit.test.d.ts.map +1 -0
  100. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
  101. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
  102. package/dist/__tests__/scene-handle-fields.unit.test.d.ts +2 -0
  103. package/dist/__tests__/scene-handle-fields.unit.test.d.ts.map +1 -0
  104. package/dist/__tests__/scene-payload.unit.test.d.ts +2 -0
  105. package/dist/__tests__/scene-payload.unit.test.d.ts.map +1 -0
  106. package/dist/__tests__/scene-publication-fence.test.d.ts +2 -0
  107. package/dist/__tests__/scene-publication-fence.test.d.ts.map +1 -0
  108. package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts +2 -0
  109. package/dist/__tests__/scriptable-pack-public-surface.test-d.d.ts.map +1 -0
  110. package/dist/__tests__/static-rig.integration.test.d.ts +2 -0
  111. package/dist/__tests__/static-rig.integration.test.d.ts.map +1 -0
  112. package/dist/__tests__/validate-material.unit.test.d.ts +2 -0
  113. package/dist/__tests__/validate-material.unit.test.d.ts.map +1 -0
  114. package/dist/__tests__/video-pack-loader.integration.test.d.ts +2 -0
  115. package/dist/__tests__/video-pack-loader.integration.test.d.ts.map +1 -0
  116. package/dist/aabb.d.ts +3 -0
  117. package/dist/aabb.d.ts.map +1 -0
  118. package/dist/asset-kind.d.ts +4 -0
  119. package/dist/asset-kind.d.ts.map +1 -0
  120. package/dist/asset-registry.d.ts +554 -0
  121. package/dist/asset-registry.d.ts.map +1 -0
  122. package/dist/builtin-asset-registry.d.ts +22 -0
  123. package/dist/builtin-asset-registry.d.ts.map +1 -0
  124. package/dist/catalog-source.d.ts +24 -0
  125. package/dist/catalog-source.d.ts.map +1 -0
  126. package/dist/decode-image-bytes.d.ts +57 -0
  127. package/dist/decode-image-bytes.d.ts.map +1 -0
  128. package/dist/dynamic-texture-store.d.ts +89 -0
  129. package/dist/dynamic-texture-store.d.ts.map +1 -0
  130. package/dist/errors/asset.d.ts +201 -0
  131. package/dist/errors/asset.d.ts.map +1 -0
  132. package/dist/handles.d.ts +143 -0
  133. package/dist/handles.d.ts.map +1 -0
  134. package/dist/image-error.d.ts +6 -0
  135. package/dist/image-error.d.ts.map +1 -0
  136. package/dist/index.d.ts +34 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.mjs +8359 -0
  139. package/dist/index.mjs.map +1 -0
  140. package/dist/internal/artifact-cache.d.ts +17 -0
  141. package/dist/internal/artifact-cache.d.ts.map +1 -0
  142. package/dist/internal/asset-graph.d.ts +70 -0
  143. package/dist/internal/asset-graph.d.ts.map +1 -0
  144. package/dist/internal/catalog-session.d.ts +60 -0
  145. package/dist/internal/catalog-session.d.ts.map +1 -0
  146. package/dist/internal/decoder-registry.d.ts +19 -0
  147. package/dist/internal/decoder-registry.d.ts.map +1 -0
  148. package/dist/internal/immutable-payload.d.ts +9 -0
  149. package/dist/internal/immutable-payload.d.ts.map +1 -0
  150. package/dist/internal/load-asset.d.ts +31 -0
  151. package/dist/internal/load-asset.d.ts.map +1 -0
  152. package/dist/internal/pack-reader.d.ts +18 -0
  153. package/dist/internal/pack-reader.d.ts.map +1 -0
  154. package/dist/internal/validate-runtime-row.d.ts +7 -0
  155. package/dist/internal/validate-runtime-row.d.ts.map +1 -0
  156. package/dist/internal.d.ts +3 -0
  157. package/dist/internal.d.ts.map +1 -0
  158. package/dist/internal.mjs +329 -0
  159. package/dist/internal.mjs.map +1 -0
  160. package/dist/loader-registry.d.ts +63 -0
  161. package/dist/loader-registry.d.ts.map +1 -0
  162. package/dist/loaders/inline-pack.d.ts +72 -0
  163. package/dist/loaders/inline-pack.d.ts.map +1 -0
  164. package/dist/loaders/mesh-bin.d.ts +21 -0
  165. package/dist/loaders/mesh-bin.d.ts.map +1 -0
  166. package/dist/loaders/pack-artifact.d.ts +20 -0
  167. package/dist/loaders/pack-artifact.d.ts.map +1 -0
  168. package/dist/material/dependency-graph.d.ts +9 -0
  169. package/dist/material/dependency-graph.d.ts.map +1 -0
  170. package/dist/material/generation-cache.d.ts +24 -0
  171. package/dist/material/generation-cache.d.ts.map +1 -0
  172. package/dist/material/inspection.d.ts +24 -0
  173. package/dist/material/inspection.d.ts.map +1 -0
  174. package/dist/material/loader.d.ts +59 -0
  175. package/dist/material/loader.d.ts.map +1 -0
  176. package/dist/material/runtime-shader.d.ts +14 -0
  177. package/dist/material/runtime-shader.d.ts.map +1 -0
  178. package/dist/mesh-bin.d.ts +3 -0
  179. package/dist/mesh-bin.d.ts.map +1 -0
  180. package/dist/mipmap-generator.d.ts +132 -0
  181. package/dist/mipmap-generator.d.ts.map +1 -0
  182. package/dist/payload-validate.d.ts +60 -0
  183. package/dist/payload-validate.d.ts.map +1 -0
  184. package/dist/plugin.d.ts +16 -0
  185. package/dist/plugin.d.ts.map +1 -0
  186. package/dist/registry/artifact-io.d.ts +16 -0
  187. package/dist/registry/artifact-io.d.ts.map +1 -0
  188. package/dist/registry/asset-evidence.d.ts +13 -0
  189. package/dist/registry/asset-evidence.d.ts.map +1 -0
  190. package/dist/registry/catalog-state.d.ts +47 -0
  191. package/dist/registry/catalog-state.d.ts.map +1 -0
  192. package/dist/registry/catalog.d.ts +48 -0
  193. package/dist/registry/catalog.d.ts.map +1 -0
  194. package/dist/registry/instantiate.d.ts +153 -0
  195. package/dist/registry/instantiate.d.ts.map +1 -0
  196. package/dist/registry/load-by-guid.d.ts +247 -0
  197. package/dist/registry/load-by-guid.d.ts.map +1 -0
  198. package/dist/registry/load-state.d.ts +26 -0
  199. package/dist/registry/load-state.d.ts.map +1 -0
  200. package/dist/registry/runtime-projection.d.ts +16 -0
  201. package/dist/registry/runtime-projection.d.ts.map +1 -0
  202. package/dist/registry/scene-publication-fence.d.ts +38 -0
  203. package/dist/registry/scene-publication-fence.d.ts.map +1 -0
  204. package/dist/registry/validate-material.d.ts +77 -0
  205. package/dist/registry/validate-material.d.ts.map +1 -0
  206. package/dist/resolve-asset-handle.d.ts +43 -0
  207. package/dist/resolve-asset-handle.d.ts.map +1 -0
  208. package/dist/resolve-tileset-runtime.d.ts +23 -0
  209. package/dist/resolve-tileset-runtime.d.ts.map +1 -0
  210. package/dist/scene-handle-fields.d.ts +88 -0
  211. package/dist/scene-handle-fields.d.ts.map +1 -0
  212. package/dist/scene-payload.d.ts +15 -0
  213. package/dist/scene-payload.d.ts.map +1 -0
  214. package/dist/wire-default-loaders.d.ts +29 -0
  215. package/dist/wire-default-loaders.d.ts.map +1 -0
  216. package/package.json +76 -0
  217. package/src/__tests__/aabb.unit.test.ts +97 -0
  218. package/src/__tests__/artifact-integrity.unit.test.ts +99 -0
  219. package/src/__tests__/artifact-io.unit.test.ts +127 -0
  220. package/src/__tests__/asset-evidence-sdk.integration.test.ts +32 -0
  221. package/src/__tests__/asset-evidence.unit.test.ts +32 -0
  222. package/src/__tests__/asset-kind.unit.test.ts +14 -0
  223. package/src/__tests__/asset-registry-catalog-reconcile.integration.test.ts +74 -0
  224. package/src/__tests__/asset-registry-catalog-reconcile.unit.test.ts +89 -0
  225. package/src/__tests__/asset-registry-catalog.unit.test.ts +170 -0
  226. package/src/__tests__/asset-registry.pack-cache.test.ts +96 -0
  227. package/src/__tests__/asset-registry.unit.test.ts +511 -0
  228. package/src/__tests__/asset-runtime-error-code-owner.test-d.ts +63 -0
  229. package/src/__tests__/catalog-replica.unit.test.ts +196 -0
  230. package/src/__tests__/catalog-source-v2.unit.test.ts +158 -0
  231. package/src/__tests__/catalog-source.unit.test.ts +126 -0
  232. package/src/__tests__/catalog-subscription-order.unit.test.ts +65 -0
  233. package/src/__tests__/catalog-subscription.unit.test.ts +28 -0
  234. package/src/__tests__/decode-image-bytes-pass-through.test.ts +34 -0
  235. package/src/__tests__/decode-image-bytes.browser.test.ts +102 -0
  236. package/src/__tests__/decode-image-bytes.test-d.ts +108 -0
  237. package/src/__tests__/decode-image-bytes.test.ts +90 -0
  238. package/src/__tests__/decode-image-mime-owner.test.ts +38 -0
  239. package/src/__tests__/dynamic-texture-store.unit.test.ts +115 -0
  240. package/src/__tests__/errors-asset.unit.test.ts +92 -0
  241. package/src/__tests__/inline-pack-loaders.unit.test.ts +548 -0
  242. package/src/__tests__/instantiate-context.unit.test.ts +65 -0
  243. package/src/__tests__/instantiate-publication-fence.unit.test.ts +158 -0
  244. package/src/__tests__/instantiate.unit.test.ts +684 -0
  245. package/src/__tests__/loader-input-contract.unit.test.ts +89 -0
  246. package/src/__tests__/loader-registry.unit.test.ts +101 -0
  247. package/src/__tests__/material-dependency-invalidation.unit.test.ts +14 -0
  248. package/src/__tests__/material-generation-cache.unit.test.ts +46 -0
  249. package/src/__tests__/material-load-consumer.test-d.ts +42 -0
  250. package/src/__tests__/material-ready.integration.test.ts +508 -0
  251. package/src/__tests__/material-stale-generation.unit.test.ts +147 -0
  252. package/src/__tests__/mesh-bin-morph-v3.test.ts +22 -0
  253. package/src/__tests__/mesh-bin.unit.test.ts +152 -0
  254. package/src/__tests__/mipmap-generator.unit.test.ts +202 -0
  255. package/src/__tests__/pack-artifact-transcode-model-owner.test.ts +32 -0
  256. package/src/__tests__/pack-basis-load.integration.test.ts +168 -0
  257. package/src/__tests__/payload-validate.unit.test.ts +285 -0
  258. package/src/__tests__/plugin.test.ts +55 -0
  259. package/src/__tests__/registry-concurrency.bench.test.ts +40 -0
  260. package/src/__tests__/registry-failure-retry.integration.test.ts +69 -0
  261. package/src/__tests__/registry-load-graph.integration.test.ts +246 -0
  262. package/src/__tests__/registry-load-state.unit.test.ts +35 -0
  263. package/src/__tests__/registry-package-cache.unit.test.ts +53 -0
  264. package/src/__tests__/registry-public-ready.unit.test.ts +38 -0
  265. package/src/__tests__/resolve-asset-handle.unit.test.ts +238 -0
  266. package/src/__tests__/scene-handle-fields.unit.test.ts +129 -0
  267. package/src/__tests__/scene-payload.unit.test.ts +151 -0
  268. package/src/__tests__/scene-publication-fence.test.ts +129 -0
  269. package/src/__tests__/scriptable-pack-public-surface.test-d.ts +27 -0
  270. package/src/__tests__/static-rig.integration.test.ts +8 -0
  271. package/src/__tests__/validate-material.unit.test.ts +359 -0
  272. package/src/__tests__/video-pack-loader.integration.test.ts +83 -0
  273. package/src/aabb.ts +107 -0
  274. package/src/asset-kind.ts +6 -0
  275. package/src/asset-registry.ts +2045 -0
  276. package/src/builtin-asset-registry.ts +164 -0
  277. package/src/catalog-source.ts +89 -0
  278. package/src/decode-image-bytes.ts +126 -0
  279. package/src/dynamic-texture-store.ts +234 -0
  280. package/src/errors/asset.ts +347 -0
  281. package/src/handles.ts +186 -0
  282. package/src/image-error.ts +45 -0
  283. package/src/index.ts +189 -0
  284. package/src/internal/artifact-cache.ts +65 -0
  285. package/src/internal/asset-graph.ts +420 -0
  286. package/src/internal/catalog-session.ts +345 -0
  287. package/src/internal/decoder-registry.ts +175 -0
  288. package/src/internal/immutable-payload.ts +20 -0
  289. package/src/internal/load-asset.ts +254 -0
  290. package/src/internal/pack-reader.ts +183 -0
  291. package/src/internal/validate-runtime-row.ts +51 -0
  292. package/src/internal.ts +6 -0
  293. package/src/loader-registry.ts +157 -0
  294. package/src/loaders/inline-pack.ts +837 -0
  295. package/src/loaders/mesh-bin.ts +304 -0
  296. package/src/loaders/pack-artifact.ts +665 -0
  297. package/src/material/dependency-graph.ts +46 -0
  298. package/src/material/generation-cache.ts +177 -0
  299. package/src/material/inspection.ts +46 -0
  300. package/src/material/loader.ts +326 -0
  301. package/src/material/runtime-shader.ts +133 -0
  302. package/src/mesh-bin.ts +5 -0
  303. package/src/mipmap-generator.ts +450 -0
  304. package/src/payload-validate.ts +573 -0
  305. package/src/plugin.ts +48 -0
  306. package/src/registry/artifact-io.ts +259 -0
  307. package/src/registry/asset-evidence.ts +51 -0
  308. package/src/registry/catalog-state.ts +409 -0
  309. package/src/registry/catalog.ts +369 -0
  310. package/src/registry/instantiate.ts +1056 -0
  311. package/src/registry/load-by-guid.ts +1657 -0
  312. package/src/registry/load-state.ts +115 -0
  313. package/src/registry/runtime-projection.ts +63 -0
  314. package/src/registry/scene-publication-fence.ts +256 -0
  315. package/src/registry/validate-material.ts +385 -0
  316. package/src/resolve-asset-handle.ts +147 -0
  317. package/src/resolve-tileset-runtime.ts +72 -0
  318. package/src/scene-handle-fields.ts +221 -0
  319. package/src/scene-payload.ts +207 -0
  320. package/src/wire-default-loaders.ts +79 -0
@@ -0,0 +1,17 @@
1
+ import type { AssetLoadError, Result } from '@forgeax/engine-types';
2
+ export interface ArtifactCacheSnapshot {
3
+ readonly entries: number;
4
+ readonly pending: number;
5
+ readonly hits: number;
6
+ readonly misses: number;
7
+ }
8
+ export declare class ArtifactCache {
9
+ private readonly values;
10
+ private readonly pending;
11
+ private hits;
12
+ private misses;
13
+ read(contentAddress: string, reader: () => Promise<Result<Uint8Array, AssetLoadError>>): Promise<Result<Uint8Array, AssetLoadError>>;
14
+ clear(contentAddress?: string): void;
15
+ snapshot(): ArtifactCacheSnapshot;
16
+ }
17
+ //# sourceMappingURL=artifact-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-cache.d.ts","sourceRoot":"","sources":["../../src/internal/artifact-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkE;IAC1F,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IAEnB,IAAI,CACF,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,GACxD,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IA4B9C,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAUpC,QAAQ,IAAI,qBAAqB;CAQlC"}
@@ -0,0 +1,70 @@
1
+ import type { AssetLoadError, Result } from '@forgeax/engine-types';
2
+ export interface AssetGraphValue<P> {
3
+ readonly value: P;
4
+ readonly refs: readonly string[];
5
+ }
6
+ export interface AssetGraphOptions<P extends {
7
+ readonly value: unknown;
8
+ readonly refs: readonly string[];
9
+ }> {
10
+ readonly read: (guid: string, signal: AbortSignal) => Promise<Result<P, AssetLoadError>>;
11
+ readonly maxConcurrentReads?: number;
12
+ }
13
+ export interface AssetGraphCounters {
14
+ readonly loads: number;
15
+ readonly cacheHits: number;
16
+ readonly readErrors: number;
17
+ readonly noChange: number;
18
+ readonly listenerFailures: number;
19
+ }
20
+ export interface AssetGraphSnapshot {
21
+ readonly epoch: number;
22
+ readonly ready: readonly string[];
23
+ readonly pending: number;
24
+ readonly resources: number;
25
+ readonly sccs: readonly (readonly string[])[];
26
+ readonly counters: AssetGraphCounters;
27
+ }
28
+ type GraphResult<P> = Result<P, AssetLoadError>;
29
+ type GraphListener = (snapshot: AssetGraphSnapshot) => void;
30
+ export declare class AssetGraph<P extends {
31
+ readonly value: unknown;
32
+ readonly refs: readonly string[];
33
+ }> {
34
+ private readonly read;
35
+ private readonly limit;
36
+ private readonly ready;
37
+ private readonly forward;
38
+ private readonly reverse;
39
+ private readonly reads;
40
+ private readonly requests;
41
+ private readonly listeners;
42
+ private readonly sccs;
43
+ private activeReads;
44
+ private readWaiters;
45
+ private disposed;
46
+ private epoch;
47
+ private counters;
48
+ private currentSnapshot;
49
+ constructor(options: AssetGraphOptions<P>);
50
+ load(guid: string, signal?: AbortSignal): Promise<GraphResult<P>>;
51
+ invalidate(guid: string): readonly string[];
52
+ invalidateForCatalogChange(guids?: readonly string[]): void;
53
+ subscribe(listener: GraphListener): () => void;
54
+ snapshot(): AssetGraphSnapshot;
55
+ lookup(guid: string): P['value'] | undefined;
56
+ guidOf(value: P['value']): string | undefined;
57
+ dispose(): void;
58
+ private loadClosure;
59
+ private visit;
60
+ private readOnce;
61
+ private withPermit;
62
+ private link;
63
+ private collectAffected;
64
+ private drop;
65
+ private promote;
66
+ private recordScc;
67
+ private publish;
68
+ }
69
+ export {};
70
+ //# sourceMappingURL=asset-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-graph.d.ts","sourceRoot":"","sources":["../../src/internal/asset-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { CatalogDiagnostic, ResourceRevision } from '@forgeax/engine-types';
2
+ import { type AssetLoadError, type Result } from '@forgeax/engine-types';
3
+ import type { CatalogSource } from '../catalog-source.js';
4
+ import { type RuntimeCatalogRow } from './validate-runtime-row.js';
5
+ export interface CatalogSessionOptions {
6
+ readonly scopeId?: string;
7
+ readonly generation?: number;
8
+ }
9
+ export interface CatalogSessionSnapshot {
10
+ readonly scopeId: string;
11
+ readonly generation: number;
12
+ readonly epoch: number;
13
+ readonly revision?: ResourceRevision;
14
+ readonly entries: readonly RuntimeCatalogRow[];
15
+ readonly changed: readonly string[];
16
+ readonly removed: readonly string[];
17
+ readonly diagnostics: readonly CatalogDiagnostic[];
18
+ readonly listenerFailures: number;
19
+ readonly stale: boolean;
20
+ }
21
+ type SessionResult = Result<CatalogSessionSnapshot, AssetLoadError>;
22
+ type SessionListener = (snapshot: CatalogSessionSnapshot) => void;
23
+ export declare class CatalogSession {
24
+ private readonly source;
25
+ private readonly scopeId;
26
+ private readonly generation;
27
+ private readonly entries;
28
+ private readonly listeners;
29
+ private unsubscribe;
30
+ private baselinePromise;
31
+ private reconcilePromise;
32
+ private pending;
33
+ private currentSnapshot;
34
+ private revision;
35
+ private diagnostics;
36
+ private listenerFailures;
37
+ private changed;
38
+ private removed;
39
+ private epoch;
40
+ private stale;
41
+ private staleGeneration;
42
+ private started;
43
+ private disposed;
44
+ constructor(source: CatalogSource, options?: CatalogSessionOptions);
45
+ start(): Promise<SessionResult>;
46
+ reconcile(): Promise<SessionResult>;
47
+ current(guid: string): RuntimeCatalogRow | undefined;
48
+ snapshot(): CatalogSessionSnapshot;
49
+ discontinuity(): AssetLoadError | undefined;
50
+ subscribe(listener: SessionListener): () => void;
51
+ dispose(): void;
52
+ private receive;
53
+ private fold;
54
+ private addDiagnostic;
55
+ private markStale;
56
+ private publish;
57
+ private disposedError;
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=catalog-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-session.d.ts","sourceRoot":"","sources":["../../src/internal/catalog-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,cAAc,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,iBAAiB,EAAsB,MAAM,2BAA2B,CAAC;AAEvF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,KAAK,aAAa,GAAG,MAAM,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;AACpE,KAAK,eAAe,GAAG,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;AA6ClE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,qBAA0B;IAiBtE,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAqD/B,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAsBnC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIpD,QAAQ,IAAI,sBAAsB;IAIlC,aAAa,IAAI,cAAc,GAAG,SAAS;IAc3C,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI;IAKhD,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,IAAI;IA6DZ,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,OAAO;IA8Bf,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,19 @@
1
+ import type { AssetDecoder, AssetDecoderInput, AssetDecoderLease, AssetKind, AssetLoadError, Result } from '@forgeax/engine-types';
2
+ export interface DecoderRegistryOptions {
3
+ readonly scopeId?: string;
4
+ }
5
+ export declare class DecoderRegistry {
6
+ private readonly dispatch;
7
+ private readonly scopeId;
8
+ private disposed;
9
+ constructor(options?: DecoderRegistryOptions);
10
+ install<P, K extends string>(kind: AssetKind<P, K>, decoder: AssetDecoder<P>): AssetDecoderLease;
11
+ private createLease;
12
+ has<P, K extends string>(kind: AssetKind<P, K>): boolean;
13
+ load<P, K extends string>(kind: AssetKind<P, K>, input: AssetDecoderInput<P>): Promise<Result<P, AssetLoadError>>;
14
+ loadByKind(kind: string, input: AssetDecoderInput<unknown>): Promise<Result<unknown, AssetLoadError>>;
15
+ decode<P, K extends string>(kind: AssetKind<P, K>, input: AssetDecoderInput<P>): Promise<Result<P, AssetLoadError>>;
16
+ private decodeEntry;
17
+ dispose(): void;
18
+ }
19
+ //# sourceMappingURL=decoder-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decoder-registry.d.ts","sourceRoot":"","sources":["../../src/internal/decoder-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,MAAM,EACP,MAAM,uBAAuB,CAAC;AAW/B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,GAAE,sBAA2B;IAIhD,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,iBAAiB;IAuBhG,OAAO,CAAC,WAAW;IAenB,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;IAIxD,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EACtB,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACrB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAIrC,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAgBrC,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAC9B,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACrB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAevB,WAAW;IAyBzB,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Decoder output becomes an owner fact at this boundary. Freeze the ordinary
3
+ * POD graph so a caller cannot mutate the cached payload between loads.
4
+ * Typed-array storage is deliberately left as an opaque byte/vector carrier:
5
+ * JavaScript cannot freeze a non-empty typed array without changing its public
6
+ * engine type, so owners must treat those carriers as read-only by contract.
7
+ */
8
+ export declare function freezeRuntimePayload<T>(value: T): T;
9
+ //# sourceMappingURL=immutable-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"immutable-payload.d.ts","sourceRoot":"","sources":["../../src/internal/immutable-payload.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAGnD"}
@@ -0,0 +1,31 @@
1
+ import type { Asset, AssetDecoder, AssetDecoderLease, AssetKind, AssetLoadError, BuiltinAssetKind, BuiltinAssetPayload, Result } from '@forgeax/engine-types';
2
+ import type { CatalogSource } from '../catalog-source.js';
3
+ import { type AssetGraphSnapshot } from './asset-graph.js';
4
+ import { type CatalogSessionOptions } from './catalog-session.js';
5
+ export interface AssetRegistryOptions extends CatalogSessionOptions {
6
+ readonly catalog: CatalogSource;
7
+ readonly fetcher?: typeof globalThis.fetch;
8
+ readonly maxConcurrentReads?: number;
9
+ }
10
+ export interface AssetLoadOptions {
11
+ readonly signal?: AbortSignal;
12
+ }
13
+ export type AssetRegistrySnapshot = AssetGraphSnapshot;
14
+ export type AssetRegistrySnapshotCounters = AssetRegistrySnapshot['counters'];
15
+ export interface AssetRegistry {
16
+ installDecoder<P, K extends string>(kind: AssetKind<P, K>, decoder: AssetDecoder<P>): AssetDecoderLease;
17
+ load<K extends BuiltinAssetKind>(guid: string, kind: K, options?: AssetLoadOptions): Promise<Result<BuiltinAssetPayload<K>, AssetLoadError>>;
18
+ load<P, K extends string>(guid: string, kind: AssetKind<P, K>, options?: AssetLoadOptions): Promise<Result<P, AssetLoadError>>;
19
+ snapshot(): AssetRegistrySnapshot;
20
+ subscribe(listener: (snapshot: AssetRegistrySnapshot) => void): () => void;
21
+ dispose(): void;
22
+ }
23
+ /** Internal render projection; the root Registry keeps only its five actions. */
24
+ export interface AssetRegistryResolver {
25
+ readonly epoch: number;
26
+ lookup<T extends Asset>(guid: string): T | undefined;
27
+ guidOf(asset: Asset): string | undefined;
28
+ }
29
+ export declare function getAssetRegistryResolver(registry: AssetRegistry): AssetRegistryResolver;
30
+ export declare function createAssetRegistry(options: AssetRegistryOptions): AssetRegistry;
31
+ //# sourceMappingURL=load-asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-asset.d.ts","sourceRoot":"","sources":["../../src/internal/load-asset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EAEL,YAAY,EAEZ,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,EACP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAMlF,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEvD,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAChC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACrB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GACvB,iBAAiB,CAAC;IACrB,IAAI,CAAC,CAAC,SAAS,gBAAgB,EAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACrB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IACtC,QAAQ,IAAI,qBAAqB,CAAC;IAClC,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3E,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;CAC1C;AAOD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,aAAa,GAAG,qBAAqB,CAMvF;AA6CD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAqHhF"}
@@ -0,0 +1,18 @@
1
+ import type { AssetLoadError, AssetPublicationTuple, PackV2, Result } from '@forgeax/engine-types';
2
+ export interface PackReaderOptions {
3
+ readonly fetcher?: typeof globalThis.fetch;
4
+ }
5
+ export type VerifiedPack = PackV2<unknown>;
6
+ export declare class PackReader {
7
+ private readonly fetcher;
8
+ private readonly verified;
9
+ private readonly pending;
10
+ constructor(options?: PackReaderOptions);
11
+ read(packageUrl: string, expected: AssetPublicationTuple, signal: AbortSignal): Promise<Result<VerifiedPack, AssetLoadError>>;
12
+ private fetchAndVerify;
13
+ private key;
14
+ verify(value: unknown, expected: AssetPublicationTuple): Result<VerifiedPack, AssetLoadError>;
15
+ private validArtifact;
16
+ private cancelled;
17
+ }
18
+ //# sourceMappingURL=pack-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-reader.d.ts","sourceRoot":"","sources":["../../src/internal/pack-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACd,qBAAqB,EACrB,MAAM,EACN,MAAM,EACP,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAC5C;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AA4B3C,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoE;gBAEhF,OAAO,GAAE,iBAAsB;IAOrC,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAelC,cAAc;IAmC5B,OAAO,CAAC,GAAG;IAIX,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;IA0C7F,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,SAAS;CAQlB"}
@@ -0,0 +1,7 @@
1
+ import type { CatalogEntry } from '@forgeax/engine-types';
2
+ import { type AssetLoadError, type Result } from '@forgeax/engine-types';
3
+ export interface RuntimeCatalogRow extends CatalogEntry {
4
+ readonly publication: NonNullable<CatalogEntry['publication']>;
5
+ }
6
+ export declare function validateRuntimeRow(row: CatalogEntry): Result<RuntimeCatalogRow, AssetLoadError>;
7
+ //# sourceMappingURL=validate-runtime-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-runtime-row.d.ts","sourceRoot":"","sources":["../../src/internal/validate-runtime-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,KAAK,cAAc,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAElF,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;CAChE;AAWD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAkC/F"}
@@ -0,0 +1,3 @@
1
+ export { CatalogSession } from './internal/catalog-session.js';
2
+ export { type AssetRegistry, type AssetRegistryResolver, getAssetRegistryResolver, } from './internal/load-asset.js';
3
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +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,aAAa,EAClB,KAAK,qBAAqB,EAC1B,wBAAwB,GACzB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,329 @@
1
+ import { err, ok } from '@forgeax/engine-types';
2
+
3
+ // src/internal/catalog-session.ts
4
+ function invalidRow(guid, reason) {
5
+ return err({
6
+ code: "asset-package-invalid",
7
+ expected: "one complete current runtime Catalog row",
8
+ hint: "rebuild the producer Catalog and publish one Pack v2 tuple",
9
+ detail: { guid, reason }
10
+ });
11
+ }
12
+ function validateRuntimeRow(row) {
13
+ if (row === null || typeof row !== "object") return invalidRow("", "row");
14
+ const candidate = row;
15
+ const guid = typeof candidate.guid === "string" ? candidate.guid : "";
16
+ if (guid.trim().length === 0) return invalidRow(guid, "guid");
17
+ if (typeof candidate.kind !== "string" || candidate.kind.trim().length === 0)
18
+ return invalidRow(guid, "kind");
19
+ if (typeof candidate.packageUrl !== "string" || candidate.packageUrl.trim().length === 0)
20
+ return invalidRow(guid, "packageUrl");
21
+ if (typeof candidate.sourcePath !== "string" || candidate.sourcePath.trim().length === 0)
22
+ return invalidRow(guid, "sourcePath");
23
+ if (!Number.isSafeInteger(candidate.publication?.generation))
24
+ return invalidRow(guid, "publication generation");
25
+ if (candidate.publication === void 0) return invalidRow(guid, "publication");
26
+ const publication = candidate.publication;
27
+ if (publication.schemaVersion !== "asset-publication/1" || typeof publication.sourcePath !== "string" || publication.sourcePath.trim().length === 0 || typeof publication.sourceRevision !== "string" || publication.sourceRevision.trim().length === 0 || publication.generation < 0 || typeof publication.digest !== "string" || publication.digest.trim().length === 0 || typeof publication.outputSetDigest !== "string" || publication.outputSetDigest.trim().length === 0 || !Array.isArray(publication.outputs) || publication.receipt === null || typeof publication.receipt !== "object" || !Array.isArray(publication.externalEvidence)) {
28
+ return invalidRow(guid, "publication tuple");
29
+ }
30
+ return ok(Object.freeze({ ...candidate, guid, publication }));
31
+ }
32
+
33
+ // src/internal/catalog-session.ts
34
+ function runtimeError(code, guid, detail) {
35
+ if (code === "catalog-discontinuous") {
36
+ return {
37
+ code,
38
+ expected: "an ordered catalog revision window",
39
+ hint: "reconcile the current Catalog before consuming this delta",
40
+ detail: {
41
+ scopeId: String(detail.scopeId ?? "unknown"),
42
+ expectedGeneration: Number(detail.expectedGeneration ?? 0),
43
+ actualGeneration: Number(detail.actualGeneration ?? 0)
44
+ }
45
+ };
46
+ }
47
+ return {
48
+ code: "asset-package-invalid",
49
+ expected: "a verified Catalog source",
50
+ hint: "repair the producer Catalog and retry with the current publication",
51
+ detail: { guid, reason: String(detail.reason ?? "catalog source failed") }
52
+ };
53
+ }
54
+ function freezeSnapshot(snapshot) {
55
+ return Object.freeze({
56
+ ...snapshot,
57
+ entries: Object.freeze([...snapshot.entries]),
58
+ changed: Object.freeze([...snapshot.changed]),
59
+ removed: Object.freeze([...snapshot.removed]),
60
+ diagnostics: Object.freeze([...snapshot.diagnostics])
61
+ });
62
+ }
63
+ function sameEntry(left, right) {
64
+ return JSON.stringify(left) === JSON.stringify(right);
65
+ }
66
+ function key(guid) {
67
+ return guid.toLowerCase();
68
+ }
69
+ var CatalogSession = class {
70
+ source;
71
+ scopeId;
72
+ generation;
73
+ entries = /* @__PURE__ */ new Map();
74
+ listeners = /* @__PURE__ */ new Set();
75
+ unsubscribe;
76
+ baselinePromise;
77
+ reconcilePromise;
78
+ pending = [];
79
+ currentSnapshot;
80
+ revision;
81
+ diagnostics = [];
82
+ listenerFailures = 0;
83
+ changed = /* @__PURE__ */ new Set();
84
+ removed = /* @__PURE__ */ new Set();
85
+ epoch = 0;
86
+ stale = false;
87
+ staleGeneration = 0;
88
+ started = false;
89
+ disposed = false;
90
+ constructor(source, options = {}) {
91
+ this.source = source;
92
+ this.scopeId = options.scopeId ?? source.expectedScope?.scopeId ?? "asset-runtime";
93
+ this.generation = options.generation ?? source.expectedScope?.generation ?? 0;
94
+ this.currentSnapshot = freezeSnapshot({
95
+ scopeId: this.scopeId,
96
+ generation: this.generation,
97
+ epoch: 0,
98
+ entries: [],
99
+ changed: [],
100
+ removed: [],
101
+ diagnostics: [],
102
+ listenerFailures: 0,
103
+ stale: false
104
+ });
105
+ }
106
+ start() {
107
+ if (this.baselinePromise !== void 0) return this.baselinePromise;
108
+ if (this.disposed) return Promise.resolve(err(this.disposedError()));
109
+ this.unsubscribe = this.source.subscribe((delta) => this.receive(delta));
110
+ const promise = this.source.enumerate().then((result) => {
111
+ if (!result.ok) {
112
+ this.markStale();
113
+ this.publish();
114
+ return err(runtimeError("asset-package-invalid", "", { reason: result.error.code }));
115
+ }
116
+ this.entries.clear();
117
+ for (const entry of result.value) {
118
+ const validated = validateRuntimeRow(entry);
119
+ if (!validated.ok) {
120
+ this.markStale();
121
+ this.publish();
122
+ return err(validated.error);
123
+ }
124
+ this.entries.set(key(validated.value.guid), validated.value);
125
+ }
126
+ this.started = true;
127
+ this.stale = false;
128
+ this.staleGeneration = this.generation;
129
+ this.diagnostics = [];
130
+ for (const delta of this.pending) this.fold(delta, false);
131
+ this.pending = [];
132
+ this.publish();
133
+ return ok(this.currentSnapshot);
134
+ }).catch((cause) => {
135
+ this.markStale();
136
+ this.addDiagnostic("catalog-degraded-rows", "Catalog enumeration must resolve a Result");
137
+ this.publish();
138
+ return err(
139
+ runtimeError("asset-package-invalid", "", {
140
+ reason: cause instanceof Error ? cause.message : String(cause)
141
+ })
142
+ );
143
+ });
144
+ this.baselinePromise = promise;
145
+ void promise.then(
146
+ (result) => {
147
+ if (!result.ok) this.baselinePromise = void 0;
148
+ },
149
+ () => {
150
+ this.baselinePromise = void 0;
151
+ }
152
+ );
153
+ return promise;
154
+ }
155
+ reconcile() {
156
+ if (this.disposed) return Promise.resolve(err(this.disposedError()));
157
+ if (this.reconcilePromise !== void 0) return this.reconcilePromise;
158
+ this.unsubscribe?.();
159
+ this.unsubscribe = void 0;
160
+ this.started = false;
161
+ this.pending = [];
162
+ this.baselinePromise = void 0;
163
+ this.epoch += 1;
164
+ const promise = this.start();
165
+ this.reconcilePromise = promise;
166
+ void promise.then(
167
+ () => {
168
+ if (this.reconcilePromise === promise) this.reconcilePromise = void 0;
169
+ },
170
+ () => {
171
+ if (this.reconcilePromise === promise) this.reconcilePromise = void 0;
172
+ }
173
+ );
174
+ return promise;
175
+ }
176
+ current(guid) {
177
+ return this.entries.get(key(guid));
178
+ }
179
+ snapshot() {
180
+ return this.currentSnapshot;
181
+ }
182
+ discontinuity() {
183
+ if (!this.stale) return void 0;
184
+ return {
185
+ code: "catalog-discontinuous",
186
+ expected: "an ordered, authoritative catalog revision window",
187
+ hint: "reconcile the Catalog source and retry the current publication",
188
+ detail: {
189
+ scopeId: this.scopeId,
190
+ expectedGeneration: this.generation,
191
+ actualGeneration: this.staleGeneration
192
+ }
193
+ };
194
+ }
195
+ subscribe(listener) {
196
+ this.listeners.add(listener);
197
+ return () => this.listeners.delete(listener);
198
+ }
199
+ dispose() {
200
+ if (this.disposed) return;
201
+ this.disposed = true;
202
+ this.unsubscribe?.();
203
+ this.unsubscribe = void 0;
204
+ this.pending = [];
205
+ this.listeners.clear();
206
+ }
207
+ receive(delta) {
208
+ if (this.disposed) return;
209
+ if (!this.started) {
210
+ this.pending.push(delta);
211
+ return;
212
+ }
213
+ this.fold(delta, true);
214
+ }
215
+ fold(delta, publish) {
216
+ if (delta.scopeId !== void 0 && delta.scopeId !== this.scopeId || delta.generation !== void 0 && delta.generation !== this.generation) {
217
+ this.markStale(delta.generation);
218
+ this.addDiagnostic("catalog-scope-mismatch", "delta scope does not match the session");
219
+ if (publish) this.publish();
220
+ return;
221
+ }
222
+ if (delta.authority === "degraded") {
223
+ this.markStale(delta.generation);
224
+ this.addDiagnostic("catalog-degraded-rows", "degraded rows are not identity-bearing");
225
+ if (publish) this.publish();
226
+ return;
227
+ }
228
+ if (delta.revisions !== void 0) {
229
+ const baseline = delta.revisions.baseline;
230
+ const current = delta.revisions.current;
231
+ const valid = baseline.length === current.length && current.every((point) => {
232
+ const prior = baseline.find((item) => item.rootId === point.rootId);
233
+ return prior !== void 0 && point.revision === prior.revision + 1;
234
+ });
235
+ if (!valid) {
236
+ this.markStale(delta.generation);
237
+ this.addDiagnostic("catalog-gap", "delta revision window is not contiguous");
238
+ if (publish) this.publish();
239
+ return;
240
+ }
241
+ }
242
+ let changed = false;
243
+ for (const entry of [...delta.added, ...delta.changed]) {
244
+ const validated = validateRuntimeRow(entry);
245
+ if (!validated.ok) {
246
+ this.markStale(delta.generation);
247
+ this.addDiagnostic("catalog-degraded-rows", "delta contains an invalid runtime row");
248
+ if (publish) this.publish();
249
+ return;
250
+ }
251
+ const entryKey = key(validated.value.guid);
252
+ const prior = this.entries.get(entryKey);
253
+ if (prior === void 0 || !sameEntry(prior, validated.value)) {
254
+ this.entries.set(entryKey, validated.value);
255
+ this.changed.add(entryKey);
256
+ changed = true;
257
+ if (validated.value.revision !== void 0) this.revision = validated.value.revision;
258
+ }
259
+ }
260
+ for (const guid of delta.removed) {
261
+ const entryKey = key(guid);
262
+ if (this.entries.delete(entryKey)) {
263
+ this.removed.add(entryKey);
264
+ changed = true;
265
+ }
266
+ }
267
+ if (changed) this.epoch += 1;
268
+ if (publish) this.publish();
269
+ }
270
+ addDiagnostic(code, expected) {
271
+ if (this.diagnostics.some((diagnostic) => diagnostic.code === code)) return;
272
+ this.diagnostics.push({
273
+ code,
274
+ severity: "blocking",
275
+ expected,
276
+ hint: "reconcile the Catalog before loading the affected publication",
277
+ authority: "catalog"
278
+ });
279
+ }
280
+ markStale(actualGeneration = this.generation) {
281
+ this.stale = true;
282
+ this.staleGeneration = actualGeneration;
283
+ this.epoch += 1;
284
+ }
285
+ publish() {
286
+ this.currentSnapshot = freezeSnapshot({
287
+ scopeId: this.scopeId,
288
+ generation: this.generation,
289
+ epoch: this.epoch,
290
+ ...this.revision === void 0 ? {} : { revision: this.revision },
291
+ entries: [...this.entries.values()].sort(
292
+ (left, right) => key(left.guid).localeCompare(key(right.guid))
293
+ ),
294
+ changed: [...this.changed].sort(),
295
+ removed: [...this.removed].sort(),
296
+ diagnostics: this.diagnostics,
297
+ listenerFailures: this.listenerFailures,
298
+ stale: this.stale
299
+ });
300
+ this.changed.clear();
301
+ this.removed.clear();
302
+ for (const listener of [...this.listeners]) {
303
+ try {
304
+ listener(this.currentSnapshot);
305
+ } catch {
306
+ this.listenerFailures = Math.min(1024, this.listenerFailures + 1);
307
+ this.currentSnapshot = freezeSnapshot({
308
+ ...this.currentSnapshot,
309
+ listenerFailures: this.listenerFailures
310
+ });
311
+ }
312
+ }
313
+ }
314
+ disposedError() {
315
+ return runtimeError("asset-runtime-disposed", "", { scopeId: this.scopeId });
316
+ }
317
+ };
318
+ var REGISTRY_RESOLVER = /* @__PURE__ */ Symbol.for("forgeax.assets-runtime.registry-resolver");
319
+ function getAssetRegistryResolver(registry) {
320
+ const resolver = registry[REGISTRY_RESOLVER];
321
+ if (resolver === void 0) {
322
+ throw new TypeError("AssetRegistry resolver is not owned by this asset runtime");
323
+ }
324
+ return resolver;
325
+ }
326
+
327
+ export { CatalogSession, getAssetRegistryResolver };
328
+ //# sourceMappingURL=internal.mjs.map
329
+ //# sourceMappingURL=internal.mjs.map