@forgeax/engine-runtime 0.1.23 → 0.1.25

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 (812) hide show
  1. package/README.md +15 -6
  2. package/dist/dev-import-transport.d.ts.map +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +30 -30
  6. package/src/__tests__/advance-animation-player.cases.unit.test.ts +1666 -0
  7. package/src/__tests__/asset-registry-aabb.cases.unit.test.ts +676 -0
  8. package/src/__tests__/asset-registry-bootstrap.cases.unit.test.ts +472 -0
  9. package/src/__tests__/asset-registry-builtin-nineslice.cases.unit.test.ts +481 -0
  10. package/src/__tests__/asset-registry-d9-tile-sampler-soft-warn.cases.unit.test.ts +568 -0
  11. package/src/__tests__/asset-registry-guid.cases.unit.test.ts +500 -0
  12. package/src/__tests__/asset-registry-material-validate.cases.unit.test.ts +756 -0
  13. package/src/__tests__/asset-registry-mesh-fail-fast.cases.unit.test.ts +591 -0
  14. package/src/__tests__/asset-registry-scene.cases.unit.test.ts +501 -0
  15. package/src/__tests__/asset-registry-sprite-slices-validate.cases.unit.test.ts +536 -0
  16. package/src/__tests__/asset-renderer-assembly.cases.unit.test.ts +496 -0
  17. package/src/__tests__/asset.cases.unit.test.ts +439 -0
  18. package/src/__tests__/bind-group-cache-keying.test.ts +6 -2
  19. package/src/__tests__/bloom-gating.cases.unit.test.ts +428 -0
  20. package/src/__tests__/builtin-guid-ssot.cases.unit.test.ts +472 -0
  21. package/src/__tests__/builtin-pack.cases.unit.test.ts +639 -0
  22. package/src/__tests__/builtin-shader-register-e2e.test.ts +1 -1
  23. package/src/__tests__/camera-antialias.cases.unit.test.ts +372 -0
  24. package/src/__tests__/camera-bloom.cases.unit.test.ts +396 -0
  25. package/src/__tests__/camera-clear-schema.cases.unit.test.ts +391 -0
  26. package/src/__tests__/camera-ortho.cases.unit.test.ts +484 -0
  27. package/src/__tests__/cluster-binner.cases.unit.test.ts +817 -0
  28. package/src/__tests__/collect-scene-mount-collapse.test.ts +5 -1
  29. package/src/__tests__/create-renderer-fallback-shader-manifest.cases.unit.test.ts +345 -0
  30. package/src/__tests__/create-renderer-uniform-fallback.cases.unit.test.ts +445 -0
  31. package/src/__tests__/cubemap-upload.cases.unit.test.ts +593 -0
  32. package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +32 -27
  33. package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +184 -17
  34. package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +91 -64
  35. package/src/__tests__/dawn/material-alpha.dawn.test.ts +17 -4
  36. package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +31 -9
  37. package/src/__tests__/derive-bgl-integration.test.ts +8 -8
  38. package/src/__tests__/dev-import-transport.cases.unit.test.ts +503 -0
  39. package/src/__tests__/engine-metrics.cases.unit.test.ts +371 -0
  40. package/src/__tests__/equirect-projection-error.cases.unit.test.ts +416 -0
  41. package/src/__tests__/font-asset-load.cases.unit.test.ts +510 -0
  42. package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +6 -2
  43. package/src/__tests__/fxaa-intermediate-texture.cases.unit.test.ts +690 -0
  44. package/src/__tests__/fxaa-pipeline.cases.unit.test.ts +546 -0
  45. package/src/__tests__/gpu-residency.cases.unit.test.ts +479 -0
  46. package/src/__tests__/gpu-resource-release.cases.unit.test.ts +929 -0
  47. package/src/__tests__/handle-quad.cases.unit.test.ts +491 -0
  48. package/src/__tests__/hdrp-bgl-slots.cases.unit.test.ts +451 -0
  49. package/src/__tests__/hdrp-grid-invalid.cases.unit.test.ts +408 -0
  50. package/src/__tests__/hdrp-index-list-overflow-once.cases.unit.test.ts +405 -0
  51. package/src/__tests__/hdrp-light-budget.cases.unit.test.ts +483 -0
  52. package/src/__tests__/hdrp-pipeline-asset-config.cases.unit.test.ts +441 -0
  53. package/src/__tests__/helpers/renderer-device-loss-dawn.ts +69 -0
  54. package/src/__tests__/helpers/standard-material-manifest.ts +11 -15
  55. package/src/__tests__/ibl-pipeline-cache.cases.unit.test.ts +415 -0
  56. package/src/__tests__/instances-renderer-lifecycle.integration.test.ts +161 -0
  57. package/src/__tests__/lazy-catalog.cases.unit.test.ts +848 -0
  58. package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +6 -5
  59. package/src/__tests__/load-by-guid-hdr.cases.unit.test.ts +582 -0
  60. package/src/__tests__/load-by-guid-prod-material-parent.cases.unit.test.ts +1514 -0
  61. package/src/__tests__/load-by-guid-prod.cases.unit.test.ts +557 -0
  62. package/src/__tests__/loader-registry.cases.unit.test.ts +767 -0
  63. package/src/__tests__/m7-hdrp-demo-shape.cases.unit.test.ts +361 -0
  64. package/src/__tests__/material-texture-uv-scale.unit.test.ts +2 -2
  65. package/src/__tests__/materials.unit.test.ts +29 -10
  66. package/src/__tests__/mipmap-formula.cases.unit.test.ts +434 -0
  67. package/src/__tests__/mipmap-pipeline-cache.cases.unit.test.ts +490 -0
  68. package/src/__tests__/parse-asset-payload-material.cases.unit.test.ts +555 -0
  69. package/src/__tests__/parse-asset-payload-texture.cases.unit.test.ts +720 -0
  70. package/src/__tests__/parse-scene-payload-refs.cases.unit.test.ts +767 -0
  71. package/src/__tests__/pass-selector.cases.unit.test.ts +376 -0
  72. package/src/__tests__/pbr-pipeline.unit.test.ts +23 -5
  73. package/src/__tests__/pipeline-builder.cases.unit.test.ts +624 -0
  74. package/src/__tests__/pipeline-cache-key-topology.cases.unit.test.ts +807 -0
  75. package/src/__tests__/pipeline-vertex-stride-branch.cases.unit.test.ts +379 -0
  76. package/src/__tests__/pipeline.cases.unit.test.ts +370 -0
  77. package/src/__tests__/point-light-shadow.dawn.test.ts +24 -5
  78. package/src/__tests__/post-process-register.cases.unit.test.ts +405 -0
  79. package/src/__tests__/propagate-transforms.cases.unit.test.ts +502 -0
  80. package/src/__tests__/propagate-transforms.dawn.test.ts +19 -2
  81. package/src/__tests__/record-all-topology.cases.unit.test.ts +608 -0
  82. package/src/__tests__/record-draw-branch.cases.unit.test.ts +621 -0
  83. package/src/__tests__/record-strip-index-format.cases.unit.test.ts +419 -0
  84. package/src/__tests__/record-worldid-isolation.test.ts +6 -25
  85. package/src/__tests__/register-with-guid-rgba16float.cases.unit.test.ts +469 -0
  86. package/src/__tests__/render-data.cases.unit.test.ts +553 -0
  87. package/src/__tests__/render-error-exhaustive.test-d.ts +1 -0
  88. package/src/__tests__/render-query-regression.cases.unit.test.ts +531 -0
  89. package/src/__tests__/render-system-extract.test.ts +76 -1
  90. package/src/__tests__/render-system-record-submesh.cases.unit.test.ts +740 -0
  91. package/src/__tests__/render-system-record-warn-once.cases.unit.test.ts +418 -0
  92. package/src/__tests__/render-system-record.test.ts +15 -33
  93. package/src/__tests__/renderer-device-loss-multi-world.integration.test.ts +103 -0
  94. package/src/__tests__/renderer-device-loss-provider-feasibility.dawn.test.ts +124 -0
  95. package/src/__tests__/renderer-device-loss-recovery.dawn.test.ts +50 -0
  96. package/src/__tests__/renderer-draw-world.cases.unit.test.ts +514 -0
  97. package/src/__tests__/renderer-recovery-consumer.integration.test.ts +96 -0
  98. package/src/__tests__/renderstate-pipeline-cache.cases.unit.test.ts +631 -0
  99. package/src/__tests__/resolve-scene-guids.cases.unit.test.ts +1123 -0
  100. package/src/__tests__/shadow-caster-empty-schema.test.ts +12 -15
  101. package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +10 -5
  102. package/src/__tests__/shadow-fields-observable.dawn.test.ts +2 -2
  103. package/src/__tests__/shadow-m1.dawn.test.ts +1 -1
  104. package/src/__tests__/shadow-skip-non-triangle.cases.unit.test.ts +681 -0
  105. package/src/__tests__/skin-errors-kebab-case.cases.unit.test.ts +475 -0
  106. package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +5 -4
  107. package/src/__tests__/skin-instances-coexist.cases.unit.test.ts +375 -0
  108. package/src/__tests__/skin-m2-extract-happy.cases.unit.test.ts +592 -0
  109. package/src/__tests__/skin-m2-extract-joint-error.cases.unit.test.ts +619 -0
  110. package/src/__tests__/skin-m2-extract-null-assets.cases.unit.test.ts +569 -0
  111. package/src/__tests__/skin-m2-extract-skeleton-error.cases.unit.test.ts +585 -0
  112. package/src/__tests__/skin-m3-record-cache.cases.unit.test.ts +457 -0
  113. package/src/__tests__/skin-palette-extract.cases.unit.test.ts +635 -0
  114. package/src/__tests__/skin-pipeline-routing.cases.unit.test.ts +411 -0
  115. package/src/__tests__/skin.cases.unit.test.ts +421 -0
  116. package/src/__tests__/skybox-extract.cases.unit.test.ts +511 -0
  117. package/src/__tests__/skybox-shader-compile.cases.unit.test.ts +437 -0
  118. package/src/__tests__/skylight-bind-group.cases.unit.test.ts +642 -0
  119. package/src/__tests__/skylight-component.cases.unit.test.ts +386 -0
  120. package/src/__tests__/skylight-fallback-path.cases.unit.test.ts +566 -0
  121. package/src/__tests__/skylight-lazy-projection.test.ts +35 -20
  122. package/src/__tests__/skylight-pipeline-layout.cases.unit.test.ts +506 -0
  123. package/src/__tests__/skylight-solid-color-extract.cases.unit.test.ts +399 -0
  124. package/src/__tests__/sprite-animation-tick-boundary.cases.unit.test.ts +521 -0
  125. package/src/__tests__/sprite-animation-tick-clamp.cases.unit.test.ts +453 -0
  126. package/src/__tests__/sprite-animation-tick-frame-duration-negative.cases.unit.test.ts +447 -0
  127. package/src/__tests__/sprite-animation-tick-frame-duration-zero.cases.unit.test.ts +395 -0
  128. package/src/__tests__/sprite-animation-tick-loop.cases.unit.test.ts +494 -0
  129. package/src/__tests__/sprite-animation-tick-override-probe.cases.unit.test.ts +439 -0
  130. package/src/__tests__/sprite-animation-tick-regions-mismatch.cases.unit.test.ts +466 -0
  131. package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +5 -5
  132. package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +1 -1
  133. package/src/__tests__/ssao-pipelines.test.ts +1 -1
  134. package/src/__tests__/storage-buffer-caps.cases.unit.test.ts +373 -0
  135. package/src/__tests__/surface-standard-pipeline.browser.test.ts +350 -0
  136. package/src/__tests__/surface-standard-pipeline.dawn.test.ts +346 -0
  137. package/src/__tests__/surface-standard-pipeline.runtime-fixture.ts +184 -0
  138. package/src/__tests__/surface-standard-pipeline.vite.d.ts +12 -0
  139. package/src/__tests__/systems.cases.unit.test.ts +425 -0
  140. package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +1 -1
  141. package/src/__tests__/tonemap-hdr-target.cases.unit.test.ts +676 -0
  142. package/src/__tests__/tonemap-pipeline-split.cases.unit.test.ts +867 -0
  143. package/src/__tests__/tonemap.cases.unit.test.ts +446 -0
  144. package/src/__tests__/transparent-sort-config-get.cases.unit.test.ts +395 -0
  145. package/src/__tests__/transparent-sort-config-set.cases.unit.test.ts +424 -0
  146. package/src/__tests__/transparent-sort.cases.unit.test.ts +684 -0
  147. package/src/__tests__/upload-texture-consistency.cases.unit.test.ts +478 -0
  148. package/src/__tests__/verify-revisions.cases.unit.test.ts +619 -0
  149. package/src/__tests__/wire-default-loaders.cases.unit.test.ts +461 -0
  150. package/src/__tests__/zero-camera-clear-fallback.cases.unit.test.ts +374 -0
  151. package/src/dev-import-transport.ts +2 -1
  152. package/dist/__tests__/active-camera.unit.test.d.ts +0 -2
  153. package/dist/__tests__/active-camera.unit.test.d.ts.map +0 -1
  154. package/dist/__tests__/animation-graph-add.unit.test.d.ts +0 -2
  155. package/dist/__tests__/animation-graph-add.unit.test.d.ts.map +0 -1
  156. package/dist/__tests__/animation-graph-asset-union.test-d.d.ts +0 -2
  157. package/dist/__tests__/animation-graph-asset-union.test-d.d.ts.map +0 -1
  158. package/dist/__tests__/animation-graph-blend.unit.test.d.ts +0 -2
  159. package/dist/__tests__/animation-graph-blend.unit.test.d.ts.map +0 -1
  160. package/dist/__tests__/animation-graph-build.unit.test.d.ts +0 -2
  161. package/dist/__tests__/animation-graph-build.unit.test.d.ts.map +0 -1
  162. package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts +0 -2
  163. package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts.map +0 -1
  164. package/dist/__tests__/animation-graph-clip.unit.test.d.ts +0 -2
  165. package/dist/__tests__/animation-graph-clip.unit.test.d.ts.map +0 -1
  166. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts +0 -2
  167. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts.map +0 -1
  168. package/dist/__tests__/animation-graph-default-path.integration.test.d.ts +0 -2
  169. package/dist/__tests__/animation-graph-default-path.integration.test.d.ts.map +0 -1
  170. package/dist/__tests__/animation-graph-describe.unit.test.d.ts +0 -2
  171. package/dist/__tests__/animation-graph-describe.unit.test.d.ts.map +0 -1
  172. package/dist/__tests__/animation-graph-errors.unit.test.d.ts +0 -2
  173. package/dist/__tests__/animation-graph-errors.unit.test.d.ts.map +0 -1
  174. package/dist/__tests__/animation-graph-nesting.unit.test.d.ts +0 -2
  175. package/dist/__tests__/animation-graph-nesting.unit.test.d.ts.map +0 -1
  176. package/dist/__tests__/animation-graph-orthogonal-weight.unit.test.d.ts +0 -2
  177. package/dist/__tests__/animation-graph-orthogonal-weight.unit.test.d.ts.map +0 -1
  178. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts +0 -2
  179. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts.map +0 -1
  180. package/dist/__tests__/animation-graph-slot-fill.unit.test.d.ts +0 -2
  181. package/dist/__tests__/animation-graph-slot-fill.unit.test.d.ts.map +0 -1
  182. package/dist/__tests__/animation-nslot.unit.test.d.ts +0 -2
  183. package/dist/__tests__/animation-nslot.unit.test.d.ts.map +0 -1
  184. package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts +0 -2
  185. package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts.map +0 -1
  186. package/dist/__tests__/append-injection.test.d.ts +0 -2
  187. package/dist/__tests__/append-injection.test.d.ts.map +0 -1
  188. package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts +0 -2
  189. package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts.map +0 -1
  190. package/dist/__tests__/asi-world-ci-config.unit.test.d.ts +0 -2
  191. package/dist/__tests__/asi-world-ci-config.unit.test.d.ts.map +0 -1
  192. package/dist/__tests__/asi-world-smoke.unit.test.d.ts +0 -2
  193. package/dist/__tests__/asi-world-smoke.unit.test.d.ts.map +0 -1
  194. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts +0 -2
  195. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts.map +0 -1
  196. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts +0 -11
  197. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts.map +0 -1
  198. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts +0 -2
  199. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts.map +0 -1
  200. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts +0 -2
  201. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts.map +0 -1
  202. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts +0 -2
  203. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts.map +0 -1
  204. package/dist/__tests__/asset-registry-mounts.test.d.ts +0 -2
  205. package/dist/__tests__/asset-registry-mounts.test.d.ts.map +0 -1
  206. package/dist/__tests__/asset-registry-scene.test-d.d.ts +0 -2
  207. package/dist/__tests__/asset-registry-scene.test-d.d.ts.map +0 -1
  208. package/dist/__tests__/asset-registry.browser.test.d.ts +0 -2
  209. package/dist/__tests__/asset-registry.browser.test.d.ts.map +0 -1
  210. package/dist/__tests__/asset-registry.dawn.test.d.ts +0 -2
  211. package/dist/__tests__/asset-registry.dawn.test.d.ts.map +0 -1
  212. package/dist/__tests__/asset-registry.listCatalog.test.d.ts +0 -2
  213. package/dist/__tests__/asset-registry.listCatalog.test.d.ts.map +0 -1
  214. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts +0 -2
  215. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts.map +0 -1
  216. package/dist/__tests__/asset-registry.pack-cache.test.d.ts +0 -2
  217. package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +0 -1
  218. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts +0 -2
  219. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts.map +0 -1
  220. package/dist/__tests__/asset-registry.recursive.spec.d.ts +0 -2
  221. package/dist/__tests__/asset-registry.recursive.spec.d.ts.map +0 -1
  222. package/dist/__tests__/asset-registry.unit.test.d.ts +0 -2
  223. package/dist/__tests__/asset-registry.unit.test.d.ts.map +0 -1
  224. package/dist/__tests__/asset.unit.test.d.ts +0 -2
  225. package/dist/__tests__/asset.unit.test.d.ts.map +0 -1
  226. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts +0 -2
  227. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts.map +0 -1
  228. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  229. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  230. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts +0 -2
  231. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts.map +0 -1
  232. package/dist/__tests__/bind-group-cache-keying.test.d.ts +0 -2
  233. package/dist/__tests__/bind-group-cache-keying.test.d.ts.map +0 -1
  234. package/dist/__tests__/block-upload-math.unit.test.d.ts +0 -2
  235. package/dist/__tests__/block-upload-math.unit.test.d.ts.map +0 -1
  236. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts +0 -2
  237. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts.map +0 -1
  238. package/dist/__tests__/builtin-shader-register-e2e.test.d.ts +0 -2
  239. package/dist/__tests__/builtin-shader-register-e2e.test.d.ts.map +0 -1
  240. package/dist/__tests__/cache-false-eviction.test.d.ts +0 -2
  241. package/dist/__tests__/cache-false-eviction.test.d.ts.map +0 -1
  242. package/dist/__tests__/cache-isolation-matrix.test.d.ts +0 -2
  243. package/dist/__tests__/cache-isolation-matrix.test.d.ts.map +0 -1
  244. package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts +0 -2
  245. package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts.map +0 -1
  246. package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts +0 -2
  247. package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts.map +0 -1
  248. package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts +0 -2
  249. package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts.map +0 -1
  250. package/dist/__tests__/collect-scene-asset.test.d.ts +0 -2
  251. package/dist/__tests__/collect-scene-asset.test.d.ts.map +0 -1
  252. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts +0 -2
  253. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts.map +0 -1
  254. package/dist/__tests__/collect-subtree.unit.test.d.ts +0 -2
  255. package/dist/__tests__/collect-subtree.unit.test.d.ts.map +0 -1
  256. package/dist/__tests__/collect-transient-children-absent.test.d.ts +0 -2
  257. package/dist/__tests__/collect-transient-children-absent.test.d.ts.map +0 -1
  258. package/dist/__tests__/collect-transient-roundtrip.test.d.ts +0 -2
  259. package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +0 -1
  260. package/dist/__tests__/collect-transient-skip.test.d.ts +0 -2
  261. package/dist/__tests__/collect-transient-skip.test.d.ts.map +0 -1
  262. package/dist/__tests__/components.test-d.d.ts +0 -2
  263. package/dist/__tests__/components.test-d.d.ts.map +0 -1
  264. package/dist/__tests__/components.unit.test.d.ts +0 -2
  265. package/dist/__tests__/components.unit.test.d.ts.map +0 -1
  266. package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts +0 -2
  267. package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts.map +0 -1
  268. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts +0 -2
  269. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts.map +0 -1
  270. package/dist/__tests__/create-renderer-assembly.integration.test.d.ts +0 -2
  271. package/dist/__tests__/create-renderer-assembly.integration.test.d.ts.map +0 -1
  272. package/dist/__tests__/create-renderer-gpu-pass-timing.unit.test.d.ts +0 -2
  273. package/dist/__tests__/create-renderer-gpu-pass-timing.unit.test.d.ts.map +0 -1
  274. package/dist/__tests__/createRenderer-dispose.test.d.ts +0 -2
  275. package/dist/__tests__/createRenderer-dispose.test.d.ts.map +0 -1
  276. package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts +0 -2
  277. package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts.map +0 -1
  278. package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts +0 -2
  279. package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts.map +0 -1
  280. package/dist/__tests__/createRenderer.unit.test.d.ts +0 -2
  281. package/dist/__tests__/createRenderer.unit.test.d.ts.map +0 -1
  282. package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts +0 -2
  283. package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts.map +0 -1
  284. package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts +0 -2
  285. package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts.map +0 -1
  286. package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts +0 -2
  287. package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts.map +0 -1
  288. package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts +0 -2
  289. package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts.map +0 -1
  290. package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts +0 -2
  291. package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts.map +0 -1
  292. package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts +0 -2
  293. package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts.map +0 -1
  294. package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts +0 -2
  295. package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts.map +0 -1
  296. package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts +0 -2
  297. package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts.map +0 -1
  298. package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts +0 -2
  299. package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts.map +0 -1
  300. package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.d.ts +0 -2
  301. package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.d.ts.map +0 -1
  302. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts +0 -2
  303. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts.map +0 -1
  304. package/dist/__tests__/dawn/mipmap-srgb-linear.dawn.test.d.ts +0 -2
  305. package/dist/__tests__/dawn/mipmap-srgb-linear.dawn.test.d.ts.map +0 -1
  306. package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts +0 -2
  307. package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts.map +0 -1
  308. package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts +0 -2
  309. package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts.map +0 -1
  310. package/dist/__tests__/dawn/tonemap.dawn.test.d.ts +0 -2
  311. package/dist/__tests__/dawn/tonemap.dawn.test.d.ts.map +0 -1
  312. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts +0 -2
  313. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts.map +0 -1
  314. package/dist/__tests__/dawn/user-handle-mesh-render.dawn.test.d.ts +0 -2
  315. package/dist/__tests__/dawn/user-handle-mesh-render.dawn.test.d.ts.map +0 -1
  316. package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts +0 -2
  317. package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts.map +0 -1
  318. package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts +0 -2
  319. package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts.map +0 -1
  320. package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts +0 -2
  321. package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts.map +0 -1
  322. package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts +0 -2
  323. package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts.map +0 -1
  324. package/dist/__tests__/derive-bgl-integration.test.d.ts +0 -2
  325. package/dist/__tests__/derive-bgl-integration.test.d.ts.map +0 -1
  326. package/dist/__tests__/derive-render-data-skin.unit.test.d.ts +0 -2
  327. package/dist/__tests__/derive-render-data-skin.unit.test.d.ts.map +0 -1
  328. package/dist/__tests__/draw-published.d.ts +0 -5
  329. package/dist/__tests__/draw-published.d.ts.map +0 -1
  330. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +0 -2
  331. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +0 -1
  332. package/dist/__tests__/environment-error-exhaustive.test-d.d.ts +0 -8
  333. package/dist/__tests__/environment-error-exhaustive.test-d.d.ts.map +0 -1
  334. package/dist/__tests__/equirect-bc6h.integration.test.d.ts +0 -2
  335. package/dist/__tests__/equirect-bc6h.integration.test.d.ts.map +0 -1
  336. package/dist/__tests__/error-exhaustive.test.d.ts +0 -2
  337. package/dist/__tests__/error-exhaustive.test.d.ts.map +0 -1
  338. package/dist/__tests__/errors.unit.test.d.ts +0 -2
  339. package/dist/__tests__/errors.unit.test.d.ts.map +0 -1
  340. package/dist/__tests__/extract-frames-graceful-degradation.test.d.ts +0 -2
  341. package/dist/__tests__/extract-frames-graceful-degradation.test.d.ts.map +0 -1
  342. package/dist/__tests__/extract-frames-merge.test.d.ts +0 -2
  343. package/dist/__tests__/extract-frames-merge.test.d.ts.map +0 -1
  344. package/dist/__tests__/extract-frames-reset.test.d.ts +0 -2
  345. package/dist/__tests__/extract-frames-reset.test.d.ts.map +0 -1
  346. package/dist/__tests__/extract-record-no-hardcoded-texture-fields.test.d.ts +0 -2
  347. package/dist/__tests__/extract-record-no-hardcoded-texture-fields.test.d.ts.map +0 -1
  348. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts +0 -2
  349. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts.map +0 -1
  350. package/dist/__tests__/fetch-binary-decompress.test.d.ts +0 -2
  351. package/dist/__tests__/fetch-binary-decompress.test.d.ts.map +0 -1
  352. package/dist/__tests__/four-path-compression.integration.test.d.ts +0 -2
  353. package/dist/__tests__/four-path-compression.integration.test.d.ts.map +0 -1
  354. package/dist/__tests__/frame-targets-shadow-regression.unit.test.d.ts +0 -2
  355. package/dist/__tests__/frame-targets-shadow-regression.unit.test.d.ts.map +0 -1
  356. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts +0 -2
  357. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts.map +0 -1
  358. package/dist/__tests__/fullscreen-post-bgl-depth.test.d.ts +0 -2
  359. package/dist/__tests__/fullscreen-post-bgl-depth.test.d.ts.map +0 -1
  360. package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts +0 -2
  361. package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts.map +0 -1
  362. package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts +0 -2
  363. package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts.map +0 -1
  364. package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts +0 -2
  365. package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts.map +0 -1
  366. package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts +0 -2
  367. package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts.map +0 -1
  368. package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts +0 -2
  369. package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts.map +0 -1
  370. package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts +0 -2
  371. package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts.map +0 -1
  372. package/dist/__tests__/geometry.unit.test.d.ts +0 -2
  373. package/dist/__tests__/geometry.unit.test.d.ts.map +0 -1
  374. package/dist/__tests__/glyph-tilemap-worldid.test.d.ts +0 -2
  375. package/dist/__tests__/glyph-tilemap-worldid.test.d.ts.map +0 -1
  376. package/dist/__tests__/gpu-resource-cow-survivor.test.d.ts +0 -2
  377. package/dist/__tests__/gpu-resource-cow-survivor.test.d.ts.map +0 -1
  378. package/dist/__tests__/guid-for-asset.unit.test.d.ts +0 -2
  379. package/dist/__tests__/guid-for-asset.unit.test.d.ts.map +0 -1
  380. package/dist/__tests__/handle-migration.test.d.ts +0 -2
  381. package/dist/__tests__/handle-migration.test.d.ts.map +0 -1
  382. package/dist/__tests__/hello-tilemap-smoke-upgrade.unit.test.d.ts +0 -2
  383. package/dist/__tests__/hello-tilemap-smoke-upgrade.unit.test.d.ts.map +0 -1
  384. package/dist/__tests__/helpers/mock-shader-registry.d.ts +0 -11
  385. package/dist/__tests__/helpers/mock-shader-registry.d.ts.map +0 -1
  386. package/dist/__tests__/helpers/register-runtime-components.d.ts +0 -4
  387. package/dist/__tests__/helpers/register-runtime-components.d.ts.map +0 -1
  388. package/dist/__tests__/helpers/register-scene-components.d.ts +0 -4
  389. package/dist/__tests__/helpers/register-scene-components.d.ts.map +0 -1
  390. package/dist/__tests__/helpers/standard-material-manifest.d.ts +0 -12
  391. package/dist/__tests__/helpers/standard-material-manifest.d.ts.map +0 -1
  392. package/dist/__tests__/helpers/tilemap-assets.d.ts +0 -6
  393. package/dist/__tests__/helpers/tilemap-assets.d.ts.map +0 -1
  394. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts +0 -2
  395. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts.map +0 -1
  396. package/dist/__tests__/host-custom-kind-contract.test.d.ts +0 -2
  397. package/dist/__tests__/host-custom-kind-contract.test.d.ts.map +0 -1
  398. package/dist/__tests__/inspect-name.test.d.ts +0 -2
  399. package/dist/__tests__/inspect-name.test.d.ts.map +0 -1
  400. package/dist/__tests__/instances.test-d.d.ts +0 -2
  401. package/dist/__tests__/instances.test-d.d.ts.map +0 -1
  402. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts +0 -2
  403. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts.map +0 -1
  404. package/dist/__tests__/light-attenuation-formula.test.d.ts +0 -2
  405. package/dist/__tests__/light-attenuation-formula.test.d.ts.map +0 -1
  406. package/dist/__tests__/light-casters-9-light.browser.test.d.ts +0 -2
  407. package/dist/__tests__/light-casters-9-light.browser.test.d.ts.map +0 -1
  408. package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts +0 -2
  409. package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts.map +0 -1
  410. package/dist/__tests__/light-snapshot.test-d.d.ts +0 -2
  411. package/dist/__tests__/light-snapshot.test-d.d.ts.map +0 -1
  412. package/dist/__tests__/lights-preservation.fixup.test.d.ts +0 -2
  413. package/dist/__tests__/lights-preservation.fixup.test.d.ts.map +0 -1
  414. package/dist/__tests__/lights-vec-negative.unit.test.d.ts +0 -2
  415. package/dist/__tests__/lights-vec-negative.unit.test.d.ts.map +0 -1
  416. package/dist/__tests__/lights.unit.test.d.ts +0 -2
  417. package/dist/__tests__/lights.unit.test.d.ts.map +0 -1
  418. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts +0 -2
  419. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts.map +0 -1
  420. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts +0 -2
  421. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts.map +0 -1
  422. package/dist/__tests__/loader-extract-graceful.test.d.ts +0 -2
  423. package/dist/__tests__/loader-extract-graceful.test.d.ts.map +0 -1
  424. package/dist/__tests__/loader-name-survival.test.d.ts +0 -2
  425. package/dist/__tests__/loader-name-survival.test.d.ts.map +0 -1
  426. package/dist/__tests__/m3-vec-negative.unit.test.d.ts +0 -2
  427. package/dist/__tests__/m3-vec-negative.unit.test.d.ts.map +0 -1
  428. package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts +0 -2
  429. package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts.map +0 -1
  430. package/dist/__tests__/material-texture-dimension-mismatch.unit.test.d.ts +0 -2
  431. package/dist/__tests__/material-texture-dimension-mismatch.unit.test.d.ts.map +0 -1
  432. package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts +0 -2
  433. package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts.map +0 -1
  434. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  435. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  436. package/dist/__tests__/mesh-bin-contract.test.d.ts +0 -2
  437. package/dist/__tests__/mesh-bin-contract.test.d.ts.map +0 -1
  438. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts +0 -2
  439. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts.map +0 -1
  440. package/dist/__tests__/mesh-bin.test.d.ts +0 -2
  441. package/dist/__tests__/mesh-bin.test.d.ts.map +0 -1
  442. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts +0 -2
  443. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts.map +0 -1
  444. package/dist/__tests__/mesh-ssbo-grow.unit.test.d.ts +0 -2
  445. package/dist/__tests__/mesh-ssbo-grow.unit.test.d.ts.map +0 -1
  446. package/dist/__tests__/mip-gate.unit.test.d.ts +0 -2
  447. package/dist/__tests__/mip-gate.unit.test.d.ts.map +0 -1
  448. package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts +0 -2
  449. package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts.map +0 -1
  450. package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts +0 -2
  451. package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts.map +0 -1
  452. package/dist/__tests__/name.unit.test.d.ts +0 -2
  453. package/dist/__tests__/name.unit.test.d.ts.map +0 -1
  454. package/dist/__tests__/new-kind-refs-contract.test.d.ts +0 -2
  455. package/dist/__tests__/new-kind-refs-contract.test.d.ts.map +0 -1
  456. package/dist/__tests__/package-promotion.test.d.ts +0 -2
  457. package/dist/__tests__/package-promotion.test.d.ts.map +0 -1
  458. package/dist/__tests__/package-rename.test.d.ts +0 -2
  459. package/dist/__tests__/package-rename.test.d.ts.map +0 -1
  460. package/dist/__tests__/pass-selector.unit.test.d.ts +0 -2
  461. package/dist/__tests__/pass-selector.unit.test.d.ts.map +0 -1
  462. package/dist/__tests__/pbr-pipeline.unit.test.d.ts +0 -2
  463. package/dist/__tests__/pbr-pipeline.unit.test.d.ts.map +0 -1
  464. package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts +0 -2
  465. package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts.map +0 -1
  466. package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts +0 -2
  467. package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts.map +0 -1
  468. package/dist/__tests__/pipeline-spec.test.d.ts +0 -2
  469. package/dist/__tests__/pipeline-spec.test.d.ts.map +0 -1
  470. package/dist/__tests__/pipeline.unit.test.d.ts +0 -2
  471. package/dist/__tests__/pipeline.unit.test.d.ts.map +0 -1
  472. package/dist/__tests__/point-light-shadow.browser.test.d.ts +0 -2
  473. package/dist/__tests__/point-light-shadow.browser.test.d.ts.map +0 -1
  474. package/dist/__tests__/point-light-shadow.dawn.test.d.ts +0 -2
  475. package/dist/__tests__/point-light-shadow.dawn.test.d.ts.map +0 -1
  476. package/dist/__tests__/point-light-shadow.unit.test.d.ts +0 -2
  477. package/dist/__tests__/point-light-shadow.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/post-process-error-codes.unit.test.d.ts +0 -2
  479. package/dist/__tests__/post-process-error-codes.unit.test.d.ts.map +0 -1
  480. package/dist/__tests__/post-process-params-component.unit.test.d.ts +0 -2
  481. package/dist/__tests__/post-process-params-component.unit.test.d.ts.map +0 -1
  482. package/dist/__tests__/post-process-params-extract.unit.test.d.ts +0 -2
  483. package/dist/__tests__/post-process-params-extract.unit.test.d.ts.map +0 -1
  484. package/dist/__tests__/postprocess-camera-consistency.test.d.ts +0 -2
  485. package/dist/__tests__/postprocess-camera-consistency.test.d.ts.map +0 -1
  486. package/dist/__tests__/profiler-assembly.integration.test.d.ts +0 -2
  487. package/dist/__tests__/profiler-assembly.integration.test.d.ts.map +0 -1
  488. package/dist/__tests__/propagate-transforms.dawn.test.d.ts +0 -2
  489. package/dist/__tests__/propagate-transforms.dawn.test.d.ts.map +0 -1
  490. package/dist/__tests__/record-worldid-isolation.test.d.ts +0 -2
  491. package/dist/__tests__/record-worldid-isolation.test.d.ts.map +0 -1
  492. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +0 -11
  493. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +0 -1
  494. package/dist/__tests__/render-environment-consumer.integration.test.d.ts +0 -2
  495. package/dist/__tests__/render-environment-consumer.integration.test.d.ts.map +0 -1
  496. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -11
  497. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  498. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  499. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  500. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  501. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts +0 -2
  503. package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts.map +0 -1
  504. package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts +0 -2
  505. package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts.map +0 -1
  506. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts +0 -10
  507. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts.map +0 -1
  508. package/dist/__tests__/render-feature-prepared-graphics.integration.test.d.ts +0 -2
  509. package/dist/__tests__/render-feature-prepared-graphics.integration.test.d.ts.map +0 -1
  510. package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts +0 -2
  511. package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts.map +0 -1
  512. package/dist/__tests__/render-feature-recover.integration.test.d.ts +0 -2
  513. package/dist/__tests__/render-feature-recover.integration.test.d.ts.map +0 -1
  514. package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts +0 -2
  515. package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts.map +0 -1
  516. package/dist/__tests__/render-schema-consumer.integration.test.d.ts +0 -2
  517. package/dist/__tests__/render-schema-consumer.integration.test.d.ts.map +0 -1
  518. package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts +0 -2
  519. package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts.map +0 -1
  520. package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts +0 -2
  521. package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts.map +0 -1
  522. package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts +0 -2
  523. package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts.map +0 -1
  524. package/dist/__tests__/render-system-extract.test.d.ts +0 -2
  525. package/dist/__tests__/render-system-extract.test.d.ts.map +0 -1
  526. package/dist/__tests__/render-system-extract.unit.test.d.ts +0 -2
  527. package/dist/__tests__/render-system-extract.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/render-system-fold-bucket.unit.test.d.ts +0 -2
  529. package/dist/__tests__/render-system-fold-bucket.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts +0 -2
  531. package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts.map +0 -1
  532. package/dist/__tests__/render-system-fold-material.unit.test.d.ts +0 -2
  533. package/dist/__tests__/render-system-fold-material.unit.test.d.ts.map +0 -1
  534. package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts +0 -2
  535. package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts.map +0 -1
  536. package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts +0 -2
  537. package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts.map +0 -1
  538. package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts +0 -2
  539. package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts.map +0 -1
  540. package/dist/__tests__/render-system-fold.dawn.test.d.ts +0 -2
  541. package/dist/__tests__/render-system-fold.dawn.test.d.ts.map +0 -1
  542. package/dist/__tests__/render-system-mega.test.d.ts +0 -2
  543. package/dist/__tests__/render-system-mega.test.d.ts.map +0 -1
  544. package/dist/__tests__/render-system-owner-split-contract.test.d.ts +0 -2
  545. package/dist/__tests__/render-system-owner-split-contract.test.d.ts.map +0 -1
  546. package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts +0 -2
  547. package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts.map +0 -1
  548. package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts +0 -2
  549. package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts.map +0 -1
  550. package/dist/__tests__/render-system-record.test.d.ts +0 -2
  551. package/dist/__tests__/render-system-record.test.d.ts.map +0 -1
  552. package/dist/__tests__/render-system-record.unit.test.d.ts +0 -2
  553. package/dist/__tests__/render-system-record.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/render-system-skin-bg.unit.test.d.ts +0 -2
  555. package/dist/__tests__/render-system-skin-bg.unit.test.d.ts.map +0 -1
  556. package/dist/__tests__/renderer-consumer.test-d.d.ts +0 -2
  557. package/dist/__tests__/renderer-consumer.test-d.d.ts.map +0 -1
  558. package/dist/__tests__/renderer-health.unit.test.d.ts +0 -2
  559. package/dist/__tests__/renderer-health.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/renderer-host-fallback.unit.test.d.ts +0 -2
  561. package/dist/__tests__/renderer-host-fallback.unit.test.d.ts.map +0 -1
  562. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  563. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  564. package/dist/__tests__/renderer-recover.unit.test.d.ts +0 -2
  565. package/dist/__tests__/renderer-recover.unit.test.d.ts.map +0 -1
  566. package/dist/__tests__/renderer-result.test-d.d.ts +0 -2
  567. package/dist/__tests__/renderer-result.test-d.d.ts.map +0 -1
  568. package/dist/__tests__/renderer-surface.unit.test.d.ts +0 -2
  569. package/dist/__tests__/renderer-surface.unit.test.d.ts.map +0 -1
  570. package/dist/__tests__/renderer-test-utils.d.ts +0 -10
  571. package/dist/__tests__/renderer-test-utils.d.ts.map +0 -1
  572. package/dist/__tests__/renderer.test-d.d.ts +0 -2
  573. package/dist/__tests__/renderer.test-d.d.ts.map +0 -1
  574. package/dist/__tests__/resolve-asset-handle-err.test.d.ts +0 -2
  575. package/dist/__tests__/resolve-asset-handle-err.test.d.ts.map +0 -1
  576. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +0 -2
  577. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +0 -1
  578. package/dist/__tests__/resolve-depth-only-view.test.d.ts +0 -2
  579. package/dist/__tests__/resolve-depth-only-view.test.d.ts.map +0 -1
  580. package/dist/__tests__/resolveName-fallback.test.d.ts +0 -2
  581. package/dist/__tests__/resolveName-fallback.test.d.ts.map +0 -1
  582. package/dist/__tests__/resolveName-null-package.test.d.ts +0 -2
  583. package/dist/__tests__/resolveName-null-package.test.d.ts.map +0 -1
  584. package/dist/__tests__/resolveName-unified-entry.test.d.ts +0 -2
  585. package/dist/__tests__/resolveName-unified-entry.test.d.ts.map +0 -1
  586. package/dist/__tests__/resolveName.test.d.ts +0 -2
  587. package/dist/__tests__/resolveName.test.d.ts.map +0 -1
  588. package/dist/__tests__/rhi-null-command-flow.unit.test.d.ts +0 -2
  589. package/dist/__tests__/rhi-null-command-flow.unit.test.d.ts.map +0 -1
  590. package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts +0 -2
  591. package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts.map +0 -1
  592. package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts +0 -2
  593. package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts.map +0 -1
  594. package/dist/__tests__/roots-to-scene-asset.test.d.ts +0 -2
  595. package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +0 -1
  596. package/dist/__tests__/roundtrip-primitive.test.d.ts +0 -2
  597. package/dist/__tests__/roundtrip-primitive.test.d.ts.map +0 -1
  598. package/dist/__tests__/runtime-authority-scan.unit.test.d.ts +0 -2
  599. package/dist/__tests__/runtime-authority-scan.unit.test.d.ts.map +0 -1
  600. package/dist/__tests__/runtime-domain-residue.unit.test.d.ts +0 -2
  601. package/dist/__tests__/runtime-domain-residue.unit.test.d.ts.map +0 -1
  602. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts +0 -2
  603. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts.map +0 -1
  604. package/dist/__tests__/scene-equirect-roundtrip.test.d.ts +0 -2
  605. package/dist/__tests__/scene-equirect-roundtrip.test.d.ts.map +0 -1
  606. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts +0 -2
  607. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts.map +0 -1
  608. package/dist/__tests__/scene-instance-bridge.integration.test.d.ts +0 -2
  609. package/dist/__tests__/scene-instance-bridge.integration.test.d.ts.map +0 -1
  610. package/dist/__tests__/scene-instance-component.test.d.ts +0 -2
  611. package/dist/__tests__/scene-instance-component.test.d.ts.map +0 -1
  612. package/dist/__tests__/scene-instantiate-cycle-runtime.test.d.ts +0 -2
  613. package/dist/__tests__/scene-instantiate-cycle-runtime.test.d.ts.map +0 -1
  614. package/dist/__tests__/scene-mount-fixed-point.test.d.ts +0 -2
  615. package/dist/__tests__/scene-mount-fixed-point.test.d.ts.map +0 -1
  616. package/dist/__tests__/scene-mount-roundtrip.test.d.ts +0 -2
  617. package/dist/__tests__/scene-mount-roundtrip.test.d.ts.map +0 -1
  618. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts +0 -2
  619. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts.map +0 -1
  620. package/dist/__tests__/scene-sugar-instantiate.test.d.ts +0 -2
  621. package/dist/__tests__/scene-sugar-instantiate.test.d.ts.map +0 -1
  622. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts +0 -2
  623. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts.map +0 -1
  624. package/dist/__tests__/serialize-scene-asset.test.d.ts +0 -2
  625. package/dist/__tests__/serialize-scene-asset.test.d.ts.map +0 -1
  626. package/dist/__tests__/shadow-caster-empty-schema.test.d.ts +0 -2
  627. package/dist/__tests__/shadow-caster-empty-schema.test.d.ts.map +0 -1
  628. package/dist/__tests__/shadow-csm-atlas.test.d.ts +0 -2
  629. package/dist/__tests__/shadow-csm-atlas.test.d.ts.map +0 -1
  630. package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts +0 -2
  631. package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts.map +0 -1
  632. package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts +0 -2
  633. package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts.map +0 -1
  634. package/dist/__tests__/shadow-csm-component.test.d.ts +0 -2
  635. package/dist/__tests__/shadow-csm-component.test.d.ts.map +0 -1
  636. package/dist/__tests__/shadow-csm-extract.test.d.ts +0 -2
  637. package/dist/__tests__/shadow-csm-extract.test.d.ts.map +0 -1
  638. package/dist/__tests__/shadow-csm-orthoz.test.d.ts +0 -2
  639. package/dist/__tests__/shadow-csm-orthoz.test.d.ts.map +0 -1
  640. package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts +0 -2
  641. package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts.map +0 -1
  642. package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts +0 -2
  643. package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts.map +0 -1
  644. package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts +0 -2
  645. package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts.map +0 -1
  646. package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts +0 -2
  647. package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts.map +0 -1
  648. package/dist/__tests__/shadow-csm-ubo.test.d.ts +0 -2
  649. package/dist/__tests__/shadow-csm-ubo.test.d.ts.map +0 -1
  650. package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts +0 -2
  651. package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts.map +0 -1
  652. package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts +0 -2
  653. package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts.map +0 -1
  654. package/dist/__tests__/shadow-m1.dawn.test.d.ts +0 -2
  655. package/dist/__tests__/shadow-m1.dawn.test.d.ts.map +0 -1
  656. package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts +0 -2
  657. package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts.map +0 -1
  658. package/dist/__tests__/skin-error-exhaustive.test-d.d.ts +0 -11
  659. package/dist/__tests__/skin-error-exhaustive.test-d.d.ts.map +0 -1
  660. package/dist/__tests__/skin-errors.unit.test.d.ts +0 -2
  661. package/dist/__tests__/skin-errors.unit.test.d.ts.map +0 -1
  662. package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts +0 -2
  663. package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts.map +0 -1
  664. package/dist/__tests__/skin-parented-double-transform.test.d.ts +0 -14
  665. package/dist/__tests__/skin-parented-double-transform.test.d.ts.map +0 -1
  666. package/dist/__tests__/skinned-shadow-mixed.dawn.test.d.ts +0 -2
  667. package/dist/__tests__/skinned-shadow-mixed.dawn.test.d.ts.map +0 -1
  668. package/dist/__tests__/skylight-lazy-projection.test.d.ts +0 -2
  669. package/dist/__tests__/skylight-lazy-projection.test.d.ts.map +0 -1
  670. package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts +0 -2
  671. package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts.map +0 -1
  672. package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts +0 -2
  673. package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts.map +0 -1
  674. package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts +0 -2
  675. package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts.map +0 -1
  676. package/dist/__tests__/sprite-lit-extract-branch.test.d.ts +0 -2
  677. package/dist/__tests__/sprite-lit-extract-branch.test.d.ts.map +0 -1
  678. package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts +0 -2
  679. package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts.map +0 -1
  680. package/dist/__tests__/sprite-param-values.test-d.d.ts +0 -2
  681. package/dist/__tests__/sprite-param-values.test-d.d.ts.map +0 -1
  682. package/dist/__tests__/ssao-bgl.test.d.ts +0 -2
  683. package/dist/__tests__/ssao-bgl.test.d.ts.map +0 -1
  684. package/dist/__tests__/ssao-buffers.test.d.ts +0 -2
  685. package/dist/__tests__/ssao-buffers.test.d.ts.map +0 -1
  686. package/dist/__tests__/ssao-data.test.d.ts +0 -2
  687. package/dist/__tests__/ssao-data.test.d.ts.map +0 -1
  688. package/dist/__tests__/ssao-errors.test.d.ts +0 -2
  689. package/dist/__tests__/ssao-errors.test.d.ts.map +0 -1
  690. package/dist/__tests__/ssao-manifest.test.d.ts +0 -2
  691. package/dist/__tests__/ssao-manifest.test.d.ts.map +0 -1
  692. package/dist/__tests__/ssao-passes.test.d.ts +0 -2
  693. package/dist/__tests__/ssao-passes.test.d.ts.map +0 -1
  694. package/dist/__tests__/ssao-pipelines.test.d.ts +0 -2
  695. package/dist/__tests__/ssao-pipelines.test.d.ts.map +0 -1
  696. package/dist/__tests__/ssao-uniform-layout.test.d.ts +0 -2
  697. package/dist/__tests__/ssao-uniform-layout.test.d.ts.map +0 -1
  698. package/dist/__tests__/static-rig.integration.test.d.ts +0 -2
  699. package/dist/__tests__/static-rig.integration.test.d.ts.map +0 -1
  700. package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts +0 -2
  701. package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts.map +0 -1
  702. package/dist/__tests__/swap-chain-format.unit.test.d.ts +0 -2
  703. package/dist/__tests__/swap-chain-format.unit.test.d.ts.map +0 -1
  704. package/dist/__tests__/systems.unit.test.d.ts +0 -2
  705. package/dist/__tests__/systems.unit.test.d.ts.map +0 -1
  706. package/dist/__tests__/template-game-default-api-contract.test.d.ts +0 -2
  707. package/dist/__tests__/template-game-default-api-contract.test.d.ts.map +0 -1
  708. package/dist/__tests__/text.unit.test.d.ts +0 -2
  709. package/dist/__tests__/text.unit.test.d.ts.map +0 -1
  710. package/dist/__tests__/texture-dimensions.browser.test.d.ts +0 -2
  711. package/dist/__tests__/texture-dimensions.browser.test.d.ts.map +0 -1
  712. package/dist/__tests__/tilemap-childed-despawn.test.d.ts +0 -2
  713. package/dist/__tests__/tilemap-childed-despawn.test.d.ts.map +0 -1
  714. package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts +0 -2
  715. package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts.map +0 -1
  716. package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts +0 -2
  717. package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts.map +0 -1
  718. package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts +0 -2
  719. package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts.map +0 -1
  720. package/dist/__tests__/tilemap-chunk-extract.test.d.ts +0 -2
  721. package/dist/__tests__/tilemap-chunk-extract.test.d.ts.map +0 -1
  722. package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts +0 -2
  723. package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts.map +0 -1
  724. package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts +0 -2
  725. package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts.map +0 -1
  726. package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts +0 -2
  727. package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts.map +0 -1
  728. package/dist/__tests__/tilemap-material-cache.test.d.ts +0 -2
  729. package/dist/__tests__/tilemap-material-cache.test.d.ts.map +0 -1
  730. package/dist/__tests__/tilemap-multi-atlas.test.d.ts +0 -2
  731. package/dist/__tests__/tilemap-multi-atlas.test.d.ts.map +0 -1
  732. package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts +0 -2
  733. package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts.map +0 -1
  734. package/dist/__tests__/tilemap-region-pack.test.d.ts +0 -2
  735. package/dist/__tests__/tilemap-region-pack.test.d.ts.map +0 -1
  736. package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts +0 -2
  737. package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts.map +0 -1
  738. package/dist/__tests__/tilemap-uv-inset.test.d.ts +0 -2
  739. package/dist/__tests__/tilemap-uv-inset.test.d.ts.map +0 -1
  740. package/dist/__tests__/tilemap-validate.test.d.ts +0 -2
  741. package/dist/__tests__/tilemap-validate.test.d.ts.map +0 -1
  742. package/dist/__tests__/tileset-asset-validate.test.d.ts +0 -2
  743. package/dist/__tests__/tileset-asset-validate.test.d.ts.map +0 -1
  744. package/dist/__tests__/transcode-fallback.unit.test.d.ts +0 -2
  745. package/dist/__tests__/transcode-fallback.unit.test.d.ts.map +0 -1
  746. package/dist/__tests__/transform-hierarchy-pixel-diff.dawn.test.d.ts +0 -2
  747. package/dist/__tests__/transform-hierarchy-pixel-diff.dawn.test.d.ts.map +0 -1
  748. package/dist/__tests__/transient-fields-collect.test.d.ts +0 -2
  749. package/dist/__tests__/transient-fields-collect.test.d.ts.map +0 -1
  750. package/dist/__tests__/transient-runtime-behavior.test.d.ts +0 -2
  751. package/dist/__tests__/transient-runtime-behavior.test.d.ts.map +0 -1
  752. package/dist/__tests__/transitional-authoring.integration.test.d.ts +0 -2
  753. package/dist/__tests__/transitional-authoring.integration.test.d.ts.map +0 -1
  754. package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts +0 -2
  755. package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts.map +0 -1
  756. package/dist/__tests__/variant-selection.unit.test.d.ts +0 -2
  757. package/dist/__tests__/variant-selection.unit.test.d.ts.map +0 -1
  758. package/dist/__tests__/vertex-attribute-layout.test.d.ts +0 -2
  759. package/dist/__tests__/vertex-attribute-layout.test.d.ts.map +0 -1
  760. package/dist/__tests__/video-extract-bindgroup.dawn.test.d.ts +0 -2
  761. package/dist/__tests__/video-extract-bindgroup.dawn.test.d.ts.map +0 -1
  762. package/dist/__tests__/video-loader-consumption.test.d.ts +0 -2
  763. package/dist/__tests__/video-loader-consumption.test.d.ts.map +0 -1
  764. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts +0 -2
  765. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts.map +0 -1
  766. package/dist/__tests__/view-ubo-layout.browser.test.d.ts +0 -2
  767. package/dist/__tests__/view-ubo-layout.browser.test.d.ts.map +0 -1
  768. package/dist/__tests__/volumetric-fog-record-recovery.integration.test.d.ts +0 -2
  769. package/dist/__tests__/volumetric-fog-record-recovery.integration.test.d.ts.map +0 -1
  770. package/dist/__tests__/world-entity-key.test.d.ts +0 -2
  771. package/dist/__tests__/world-entity-key.test.d.ts.map +0 -1
  772. package/dist/__tests__/world-scene-despawn.test.d.ts +0 -2
  773. package/dist/__tests__/world-scene-despawn.test.d.ts.map +0 -1
  774. package/dist/__tests__/world-scene-instantiate.test.d.ts +0 -2
  775. package/dist/__tests__/world-scene-instantiate.test.d.ts.map +0 -1
  776. package/dist/__tests__/world-scene-nested.test.d.ts +0 -2
  777. package/dist/__tests__/world-scene-nested.test.d.ts.map +0 -1
  778. package/dist/__tests__/world-scene-override.test.d.ts +0 -2
  779. package/dist/__tests__/world-scene-override.test.d.ts.map +0 -1
  780. package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts +0 -2
  781. package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts.map +0 -1
  782. package/dist/components/__tests__/camera.test-d.d.ts +0 -2
  783. package/dist/components/__tests__/camera.test-d.d.ts.map +0 -1
  784. package/dist/components/__tests__/camera.test.d.ts +0 -2
  785. package/dist/components/__tests__/camera.test.d.ts.map +0 -1
  786. package/dist/components/__tests__/child-of.test.d.ts +0 -2
  787. package/dist/components/__tests__/child-of.test.d.ts.map +0 -1
  788. package/dist/components/__tests__/sprite-animation.test-d.d.ts +0 -2
  789. package/dist/components/__tests__/sprite-animation.test-d.d.ts.map +0 -1
  790. package/dist/components/__tests__/sprite-instances.unit.test.d.ts +0 -2
  791. package/dist/components/__tests__/sprite-instances.unit.test.d.ts.map +0 -1
  792. package/dist/components/__tests__/sprite-region-override.test-d.d.ts +0 -2
  793. package/dist/components/__tests__/sprite-region-override.test-d.d.ts.map +0 -1
  794. package/dist/components/__tests__/tile-layer.test-d.d.ts +0 -2
  795. package/dist/components/__tests__/tile-layer.test-d.d.ts.map +0 -1
  796. package/dist/components/__tests__/tile-layer.unit.test.d.ts +0 -2
  797. package/dist/components/__tests__/tile-layer.unit.test.d.ts.map +0 -1
  798. package/dist/components/__tests__/tilemap.test-d.d.ts +0 -2
  799. package/dist/components/__tests__/tilemap.test-d.d.ts.map +0 -1
  800. package/dist/components/__tests__/transform-vec-schema.test.d.ts +0 -2
  801. package/dist/components/__tests__/transform-vec-schema.test.d.ts.map +0 -1
  802. package/dist/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.d.ts +0 -2
  803. package/dist/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.d.ts.map +0 -1
  804. package/dist/systems/__tests__/_xorshift.d.ts +0 -28
  805. package/dist/systems/__tests__/_xorshift.d.ts.map +0 -1
  806. package/dist/systems/__tests__/argsort-in-place.test.d.ts +0 -2
  807. package/dist/systems/__tests__/argsort-in-place.test.d.ts.map +0 -1
  808. package/dist/systems/__tests__/transparent-sort.bench.d.ts +0 -2
  809. package/dist/systems/__tests__/transparent-sort.bench.d.ts.map +0 -1
  810. package/src/__tests__/asset.unit.test.ts +0 -7113
  811. package/src/__tests__/pipeline.unit.test.ts +0 -5279
  812. package/src/__tests__/systems.unit.test.ts +0 -9061
@@ -0,0 +1,1123 @@
1
+ // @ts-nocheck — merged file: cross-source type narrowing failures from blocks originally outside src/ rootDir
2
+ // Consolidated by feat-20260609-test-pool-startup-reduction-merge-tiny-test-files
3
+ // biome-ignore-all lint/complexity/noUselessLoneBlockStatements: block-scope isolation between merged source files (consolidation paradigm)
4
+ //
5
+ // Source files (N=33):
6
+ // - packages/runtime/__tests__/asset-registry.test.ts
7
+ // - packages/runtime/__tests__/loader-registry.test.ts
8
+ // - packages/runtime/__tests__/wire-default-loaders.test.ts
9
+ // - packages/runtime/src/__tests__/asset-registry-aabb.test.ts
10
+ // - packages/runtime/src/__tests__/asset-registry-builtin-nineslice.test.ts
11
+ // - packages/runtime/src/__tests__/asset-registry-d9-tile-sampler-soft-warn.test.ts
12
+ // - packages/runtime/src/__tests__/asset-registry-guid.test.ts
13
+ // - packages/runtime/src/__tests__/asset-registry-material-validate.test.ts
14
+ // - packages/runtime/src/__tests__/asset-registry-mesh-fail-fast.test.ts
15
+ // - packages/runtime/src/__tests__/asset-registry-scene.test.ts
16
+ // - packages/runtime/src/__tests__/asset-registry-sprite-slices-validate.test.ts
17
+ // - packages/runtime/src/__tests__/auto-select.test.ts
18
+ // - packages/runtime/src/__tests__/bindgroup-resize-invalidation.test.ts
19
+ // - packages/runtime/src/__tests__/builtin-guid-ssot.test.ts
20
+ // - packages/runtime/src/__tests__/builtin-pack.test.ts
21
+ // - packages/runtime/src/__tests__/cube-texture-narrowing.test.ts
22
+ // - packages/runtime/src/__tests__/cubemap-upload.test.ts
23
+ // - packages/runtime/src/__tests__/dev-import-transport.test.ts
24
+ // - packages/runtime/src/__tests__/font-asset-load.test.ts
25
+ // - packages/runtime/src/__tests__/handle-quad.test.ts
26
+ // - packages/runtime/src/__tests__/lazy-catalog.test.ts
27
+ // - packages/runtime/src/__tests__/load-by-guid-hdr.test.ts
28
+ // - packages/runtime/src/__tests__/load-by-guid-prod-material-parent.test.ts
29
+ // - packages/runtime/src/__tests__/load-by-guid-prod.test.ts
30
+ // - packages/runtime/src/__tests__/mipmap-formula.test.ts
31
+ // - packages/runtime/src/__tests__/mipmap-pipeline-cache.test.ts
32
+ // - packages/runtime/src/__tests__/parse-asset-payload-material.test.ts
33
+ // - packages/runtime/src/__tests__/parse-asset-payload-texture.test.ts
34
+ // - packages/runtime/src/__tests__/parse-scene-payload-refs.test.ts
35
+ // - packages/runtime/src/__tests__/register-with-guid-rgba16float.test.ts
36
+ // - packages/runtime/src/__tests__/resolve-scene-guids.test.ts
37
+ // - packages/runtime/src/__tests__/upload-texture-consistency.test.ts
38
+ // - packages/runtime/src/__tests__/verify-revisions.test.ts
39
+ //
40
+ // Paradigm: each block-scope wraps a source file. ancestorTitles[0] is the
41
+ // source-preserved inner describe (NOT the source filename for these 3 files
42
+ // — recovery path: vitest report ancestorTitles -> grep this file -> upstream
43
+ // `// ─── from <name>.test.ts ───` block separator -> source filename).
44
+ // Top-level imports merged + deduped.
45
+
46
+ import { readFileSync } from 'node:fs';
47
+ import { fileURLToPath } from 'node:url';
48
+ import * as assetRegistryModule from '@forgeax/engine-assets-runtime';
49
+ import {
50
+ AssetRegistry,
51
+ animationClipLoader,
52
+ buildSceneChildContext,
53
+ fontLoader,
54
+ getOrCreateMipmapPipeline,
55
+ HANDLE_CUBE,
56
+ HANDLE_CYLINDER,
57
+ HANDLE_QUAD,
58
+ HANDLE_SPHERE,
59
+ HANDLE_TRIANGLE,
60
+ INLINE_PACK_LOADERS,
61
+ LoaderRegistry,
62
+ materialLoader,
63
+ meshLoader,
64
+ mipmapCacheSize,
65
+ numMipLevels,
66
+ PACK_ARTIFACT_LOADERS,
67
+ resolveAssetHandle,
68
+ sceneLoader,
69
+ skeletonLoader,
70
+ skinLoader,
71
+ textureLoader,
72
+ walkMaterialPassesOverSharedRefs,
73
+ wireDefaultLoaders,
74
+ } from '@forgeax/engine-assets-runtime';
75
+ import { audioLoader } from '@forgeax/engine-audio-webaudio';
76
+ import { defineComponent, World } from '@forgeax/engine-ecs';
77
+ import {
78
+ createBoxGeometry,
79
+ createPlaneGeometry,
80
+ meshFromInterleaved,
81
+ PROCEDURAL_FLOATS_PER_VERTEX,
82
+ } from '@forgeax/engine-geometry';
83
+ import { AssetGuid } from '@forgeax/engine-pack/guid';
84
+ import { ok, ok as rhiOk } from '@forgeax/engine-rhi';
85
+ import { rhi } from '@forgeax/engine-rhi-null';
86
+ import { ShaderRegistry } from '@forgeax/engine-shader';
87
+ import type {
88
+ EquirectAsset,
89
+ Handle,
90
+ MaterialAsset,
91
+ MaterialPass,
92
+ SamplerAsset,
93
+ } from '@forgeax/engine-types';
94
+ import { AssetError, toShared, toUnique, unwrapHandle } from '@forgeax/engine-types';
95
+ import { afterEach, beforeEach, describe, expect, expectTypeOf, it, vi } from 'vitest';
96
+ import { deriveBuiltin } from '../../../pack/src/builtin';
97
+ import { DeviceScope } from '../../../render/src/device/device-scope';
98
+ import { GpuResidencyCache } from '../../../render/src/device/gpu-residency';
99
+ import { createEngineMetrics } from '../../../render/src/engine-metrics';
100
+ import { createRenderer as createRuntimeRenderer } from '../createRenderer';
101
+ import { createDevImportTransport, type ImportTransport } from '../dev-import-transport';
102
+ import { EngineEnvironmentError } from '../errors/environment';
103
+ import { makeMockShaderRegistry } from './helpers/mock-shader-registry';
104
+ import { requireRenderer } from './renderer-test-utils';
105
+
106
+ vi.mock('@forgeax/engine-rhi-webgpu', async () => {
107
+ spies.webgpuImportCount += 1;
108
+ const actualRhi =
109
+ await vi.importActual<typeof import('@forgeax/engine-rhi')>('@forgeax/engine-rhi');
110
+ spies.rhiErrorCtor = actualRhi.RhiError;
111
+ const fakeAdapter = {
112
+ features: new Set<string>(),
113
+ limits: {} as Readonly<Record<string, number>>,
114
+ async requestDevice() {
115
+ return actualRhi.ok(makeFakeRhiDevice());
116
+ },
117
+ };
118
+ return {
119
+ rhi: {
120
+ requestAdapter: async () => {
121
+ if (spies.rhiWebgpuRequestAdapterShould === 'reject-rhi-not-available') {
122
+ return actualRhi.err(
123
+ new actualRhi.RhiError({
124
+ code: 'rhi-not-available',
125
+ expected: 'navigator.gpu available',
126
+ hint: 'unit-test: forced rhi-not-available',
127
+ }),
128
+ );
129
+ }
130
+ if (spies.rhiWebgpuRequestAdapterShould === 'reject-adapter-null') {
131
+ return actualRhi.err(
132
+ new actualRhi.RhiError({
133
+ code: 'adapter-unavailable',
134
+ expected: 'requestAdapter returns non-null',
135
+ hint: 'unit-test: forced adapter-unavailable',
136
+ }),
137
+ );
138
+ }
139
+ return actualRhi.ok(fakeAdapter);
140
+ },
141
+ acquireCanvasContext: (_canvas: unknown) => {
142
+ return actualRhi.ok({
143
+ configure: () => actualRhi.ok(undefined),
144
+ unconfigure: () => actualRhi.ok(undefined),
145
+ getCurrentTexture: () => actualRhi.ok({ __brand: 'TextureView' }),
146
+ });
147
+ },
148
+ },
149
+ createShaderModule: async () => actualRhi.ok({ __brand: 'ShaderModule' } as unknown as object),
150
+ translateErrorEventToRhiError: () =>
151
+ actualRhi.err(
152
+ new actualRhi.RhiError({
153
+ code: 'webgpu-runtime-error',
154
+ expected: 'GPU error event translates to RhiError',
155
+ hint: 'unit-test mock event translation',
156
+ }),
157
+ ),
158
+ _internal_getRawDevice: () => undefined,
159
+ };
160
+ });
161
+ vi.mock('@forgeax/engine-rhi-wgpu', async () => {
162
+ spies.wgpuImportCount += 1;
163
+ const actualRhi =
164
+ await vi.importActual<typeof import('@forgeax/engine-rhi')>('@forgeax/engine-rhi');
165
+ const fakeAdapter = {
166
+ features: new Set<string>(),
167
+ limits: {} as Readonly<Record<string, number>>,
168
+ async requestDevice() {
169
+ return actualRhi.ok(makeFakeRhiDevice());
170
+ },
171
+ };
172
+ return {
173
+ rhi: {
174
+ requestAdapter: async () => {
175
+ if (spies.rhiWgpuRequestAdapterShould === 'reject-rhi-not-available') {
176
+ return actualRhi.err(
177
+ new actualRhi.RhiError({
178
+ code: 'rhi-not-available',
179
+ expected: 'wgpu webgl backend available',
180
+ hint: 'unit-test: forced rhi-not-available on rhi-wgpu',
181
+ }),
182
+ );
183
+ }
184
+ return actualRhi.ok(fakeAdapter);
185
+ },
186
+ acquireCanvasContext: (_canvas: unknown) => {
187
+ return actualRhi.ok({
188
+ configure: () => actualRhi.ok(undefined),
189
+ unconfigure: () => actualRhi.ok(undefined),
190
+ getCurrentTexture: () => actualRhi.ok({ __brand: 'TextureView' }),
191
+ });
192
+ },
193
+ },
194
+ ensureReady: async () => {
195
+ spies.ensureReadyCount += 1;
196
+ if (spies.rhiWgpuEnsureReadyShould === 'reject-load-failed') {
197
+ throw new Error('unit-test: forced rhi-wgpu wasm load failure');
198
+ }
199
+ return undefined;
200
+ },
201
+ createShaderModule: async () => actualRhi.ok({ __brand: 'ShaderModule' } as unknown as object),
202
+ translateErrorEventToRhiError: () =>
203
+ actualRhi.err(
204
+ new actualRhi.RhiError({
205
+ code: 'webgpu-runtime-error',
206
+ expected: 'GPU error event translates to RhiError',
207
+ hint: 'unit-test mock event translation',
208
+ }),
209
+ ),
210
+ _internal_getRawDevice: () => undefined,
211
+ };
212
+ });
213
+ const spies = vi.hoisted(() => ({
214
+ webgpuImportCount: 0,
215
+ wgpuImportCount: 0,
216
+ ensureReadyCount: 0,
217
+ // Failure toggles set by individual tests before invoking createRenderer.
218
+ rhiWebgpuRequestAdapterShould: 'success' as
219
+ | 'success'
220
+ | 'reject-rhi-not-available'
221
+ | 'reject-adapter-null',
222
+ rhiWgpuEnsureReadyShould: 'success' as 'success' | 'reject-load-failed',
223
+ rhiWgpuRequestAdapterShould: 'success' as 'success' | 'reject-rhi-not-available',
224
+ rhiErrorCtor: undefined as undefined | (new (...args: never[]) => Error),
225
+ reset(): void {
226
+ this.webgpuImportCount = 0;
227
+ this.wgpuImportCount = 0;
228
+ this.ensureReadyCount = 0;
229
+ this.rhiWebgpuRequestAdapterShould = 'success';
230
+ this.rhiWgpuEnsureReadyShould = 'success';
231
+ this.rhiWgpuRequestAdapterShould = 'success';
232
+ },
233
+ }));
234
+ function makeFakeRhiDevice(): Record<string, unknown> {
235
+ let resolveLost!: (info: unknown) => void;
236
+ const lost = new Promise<unknown>((res) => {
237
+ resolveLost = res;
238
+ });
239
+ void resolveLost;
240
+ return {
241
+ __brand: 'RhiDevice',
242
+ lost,
243
+ features: new Set<string>(),
244
+ limits: {},
245
+ // feat-20260707 M5 / w33: createRenderer projects RhiCaps.textureCompression*
246
+ // into TranscodeCaps right after building the registry, so the fake device
247
+ // must expose a caps object (the real RhiDevice always carries one).
248
+ caps: {
249
+ textureCompressionBc: false,
250
+ textureCompressionEtc2: false,
251
+ textureCompressionAstc: false,
252
+ },
253
+ queue: {
254
+ submit: () => undefined,
255
+ writeBuffer: () => undefined,
256
+ },
257
+ createBuffer: () => ({ ok: true, value: { __brand: 'Buffer' } }),
258
+ createTexture: () => ({ ok: true, value: { __brand: 'Texture' } }),
259
+ createBindGroupLayout: () => ({ ok: true, value: { __brand: 'BindGroupLayout' } }),
260
+ createBindGroup: () => ({ ok: true, value: { __brand: 'BindGroup' } }),
261
+ createPipelineLayout: () => ({ ok: true, value: { __brand: 'PipelineLayout' } }),
262
+ createRenderPipeline: () => ({ ok: true, value: { __brand: 'RenderPipeline' } }),
263
+ createSampler: () => ({ ok: true, value: { __brand: 'Sampler' } }),
264
+ createShaderModule: () => ({
265
+ ok: true,
266
+ value: { __brand: 'ShaderModule' },
267
+ }),
268
+ createTextureView: () => ({ ok: true, value: { __brand: 'TextureView' } }),
269
+ createCommandEncoder: () => ({
270
+ ok: true,
271
+ value: {
272
+ beginRenderPass: () => ({
273
+ setPipeline: () => undefined,
274
+ setBindGroup: () => undefined,
275
+ setVertexBuffer: () => undefined,
276
+ setIndexBuffer: () => undefined,
277
+ draw: () => undefined,
278
+ drawIndexed: () => undefined,
279
+ end: () => undefined,
280
+ }),
281
+ finish: () => ({ __brand: 'CommandBuffer' }),
282
+ },
283
+ }),
284
+ };
285
+ }
286
+ function makeMockCanvas(opts: { webgpu?: 'context' | 'null'; webgl2?: 'context' | 'null' }) {
287
+ return {
288
+ width: 800,
289
+ height: 600,
290
+ getContext(kind: string): unknown {
291
+ if (kind === 'webgpu') {
292
+ if (opts.webgpu === 'context') {
293
+ return {
294
+ __mockTag: 'webgpu-canvas-context',
295
+ configure: () => undefined,
296
+ unconfigure: () => undefined,
297
+ getCurrentTexture: () => ({ createView: () => ({}) }),
298
+ };
299
+ }
300
+ return null;
301
+ }
302
+ if (kind === 'webgl2') {
303
+ if (opts.webgl2 === 'context') {
304
+ return {
305
+ __mockTag: 'webgl2',
306
+ getExtension: () => null,
307
+ getParameter: () => 1,
308
+ isContextLost: () => false,
309
+ };
310
+ }
311
+ return null;
312
+ }
313
+ return null;
314
+ },
315
+ addEventListener() {},
316
+ removeEventListener() {},
317
+ } as unknown as HTMLCanvasElement;
318
+ }
319
+ function _makeStubGPU(): unknown {
320
+ return {
321
+ requestAdapter: async () => ({
322
+ features: new Set<string>(),
323
+ limits: {},
324
+ requestDevice: async () => makeFakeRhiDevice(),
325
+ }),
326
+ getPreferredCanvasFormat: () => 'bgra8unorm',
327
+ };
328
+ }
329
+
330
+ void [
331
+ AssetError,
332
+ AssetGuid,
333
+ AssetRegistry,
334
+ DeviceScope,
335
+ EngineEnvironmentError,
336
+ GpuResidencyCache,
337
+ HANDLE_CUBE,
338
+ HANDLE_CYLINDER,
339
+ HANDLE_QUAD,
340
+ HANDLE_SPHERE,
341
+ HANDLE_TRIANGLE,
342
+ INLINE_PACK_LOADERS,
343
+ LoaderRegistry,
344
+ PACK_ARTIFACT_LOADERS,
345
+ PROCEDURAL_FLOATS_PER_VERTEX,
346
+ ShaderRegistry,
347
+ World,
348
+ _makeStubGPU,
349
+ afterEach,
350
+ animationClipLoader,
351
+ assetRegistryModule,
352
+ audioLoader,
353
+ beforeEach,
354
+ buildSceneChildContext,
355
+ createBoxGeometry,
356
+ createDevImportTransport,
357
+ createEngineMetrics,
358
+ createPlaneGeometry,
359
+ createRuntimeRenderer,
360
+ defineComponent,
361
+ deriveBuiltin,
362
+ describe,
363
+ expect,
364
+ expectTypeOf,
365
+ fileURLToPath,
366
+ fontLoader,
367
+ getOrCreateMipmapPipeline,
368
+ it,
369
+ makeFakeRhiDevice,
370
+ makeMockCanvas,
371
+ makeMockShaderRegistry,
372
+ materialLoader,
373
+ meshFromInterleaved,
374
+ meshLoader,
375
+ mipmapCacheSize,
376
+ numMipLevels,
377
+ ok,
378
+ readFileSync,
379
+ requireRenderer,
380
+ resolveAssetHandle,
381
+ rhi,
382
+ rhiOk,
383
+ sceneLoader,
384
+ skeletonLoader,
385
+ skinLoader,
386
+ spies,
387
+ textureLoader,
388
+ toShared,
389
+ toUnique,
390
+ unwrapHandle,
391
+ vi,
392
+ walkMaterialPassesOverSharedRefs,
393
+ wireDefaultLoaders,
394
+ ];
395
+ type __MergedKeep =
396
+ | EquirectAsset
397
+ | Handle
398
+ | ImportTransport
399
+ | MaterialAsset
400
+ | MaterialPass
401
+ | SamplerAsset;
402
+
403
+ {
404
+ // --- from resolve-scene-guids.test.ts ---
405
+ // A non-builtin user mesh GUID. Must not collide with the builtin mesh GUIDs
406
+ // pre-registered by the AssetRegistry constructor (HANDLE_CUBE is
407
+ // cbe42beb-..., etc., feat-20260603 Tier 0) — those now resolve, so reusing
408
+ // one here would make registerWithGuid throw a collision.
409
+ const MESH_GUID_STR = 'b1c2d3e4-f5a6-4b7c-8d9e-0a1b2c3d4e5f';
410
+ const MATERIAL_GUID_STR = 'f6af7007-158f-4d92-9e47-93bf2f213e1f';
411
+ const SKELETON_GUID_STR = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
412
+ const UNREGISTERED_GUID_STR = 'deadbeef-dead-beef-dead-beefdeadbeef';
413
+
414
+ function parseGuid(s: string): AssetGuid {
415
+ const parsed = AssetGuid.parse(s);
416
+ if (!parsed.ok) throw new Error(`invalid test GUID: ${s}`);
417
+ return parsed.value;
418
+ }
419
+
420
+ function localId(n: number): LocalEntityId {
421
+ return n as LocalEntityId;
422
+ }
423
+
424
+ /** Build a minimal SceneAsset suitable for _resolveSceneGuids testing. */
425
+ function buildTestAsset(
426
+ nodes: Array<{ localId: number; components: Record<string, Record<string, unknown>> }>,
427
+ ): SceneAsset {
428
+ const sceneNodes: SceneEntity[] = nodes.map((n) => ({
429
+ localId: localId(n.localId),
430
+ components: n.components,
431
+ }));
432
+ return { kind: 'scene', entities: sceneNodes };
433
+ }
434
+
435
+ describe('w4 - _resolveSceneGuids success path', () => {
436
+ it('(a) resolves GUID string handle fields to Handle numbers via schema-driven handle<> detection', () => {
437
+ // Register components so World knows their schemas (plan-strategy D-4:
438
+ // _resolveSceneGuids uses world._getComponentByName to read fieldType).
439
+ defineComponent('Transform', { pos: 'array<f32, 3>' });
440
+ const reg = new AssetRegistry(makeMockShaderRegistry());
441
+
442
+ // Pre-register mesh asset so resolveGuid finds it.
443
+ const meshGuid = parseGuid(MESH_GUID_STR);
444
+ reg.catalog(meshGuid, {
445
+ kind: 'mesh',
446
+ vertices: new Float32Array(0),
447
+ indices: new Uint16Array(0),
448
+ attributes: { position: new Float32Array(0) },
449
+ materialSlots: [{ slotName: 'Default' }],
450
+ submeshes: [
451
+ {
452
+ indexOffset: 0,
453
+ indexCount: 0,
454
+ vertexCount: 0,
455
+ materialSlot: 0,
456
+ topology: 'triangle-list',
457
+ },
458
+ ],
459
+ });
460
+
461
+ // Also register material and MeshRenderer in world so we verify
462
+ // multi-handle-type detection (MeshFilter + MeshRenderer both have handle fields).
463
+ const materialGuid = parseGuid(MATERIAL_GUID_STR);
464
+ reg.catalog(materialGuid, {
465
+ kind: 'material',
466
+ passes: [{ name: 'forward', program: { module: 'test::dummy' } }],
467
+ values: {},
468
+ });
469
+
470
+ // Build a SceneAsset with GUID strings in both MeshFilter.assetHandle and
471
+ // MeshRenderer.material (simulating parseScenePayload refs replacement from M1).
472
+ const asset = buildTestAsset([
473
+ {
474
+ localId: 0,
475
+ components: {
476
+ Transform: { pos: [1, 0, 0] },
477
+ MeshFilter: { assetHandle: MESH_GUID_STR },
478
+ MeshRenderer: { materials: [MATERIAL_GUID_STR] },
479
+ },
480
+ },
481
+ ]);
482
+
483
+ const world = new World();
484
+ const MeshFilter = defineComponent('MeshFilter', { assetHandle: 'shared<MeshAsset>' });
485
+ const MeshRenderer = defineComponent('MeshRenderer', {
486
+ materials: 'array<shared<MaterialAsset>>',
487
+ });
488
+ world.components.register(MeshFilter);
489
+ world.components.register(MeshRenderer);
490
+
491
+ // Private function access for unit-test isolation (same pattern as parseAssetPayload in
492
+ // asset-registry-scene.test.ts).
493
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access for round-trip test
494
+ const internal = reg as any as {
495
+ _resolveSceneGuids(
496
+ scene: SceneAsset,
497
+ world: World,
498
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
499
+ };
500
+ const result = internal._resolveSceneGuids(asset, world);
501
+
502
+ expect(result.ok).toBe(true);
503
+ if (!result.ok) return;
504
+ const resolvedAsset = result.value;
505
+ expect(resolvedAsset.kind).toBe('scene');
506
+ expect(resolvedAsset.entities.length).toBe(1);
507
+
508
+ const resolvedComp = resolvedAsset.entities[0]?.components as Record<
509
+ string,
510
+ Record<string, unknown>
511
+ >;
512
+ // assetHandle should now be a Handle number (not a string)
513
+ expect(resolvedComp.MeshFilter?.assetHandle).toBeTypeOf('number');
514
+ // materials[0] should also be a Handle number (not a string)
515
+ const matsValue = resolvedComp.MeshRenderer?.materials as readonly unknown[] | undefined;
516
+ expect(Array.isArray(matsValue)).toBe(true);
517
+ expect(matsValue?.[0]).toBeTypeOf('number');
518
+ });
519
+
520
+ it('(b) Skin.skeleton field resolves correctly', () => {
521
+ const reg = new AssetRegistry(makeMockShaderRegistry());
522
+
523
+ const skelGuid = parseGuid(SKELETON_GUID_STR);
524
+ reg.catalog(skelGuid, {
525
+ kind: 'skeleton',
526
+ inverseBindMatrices: new Float32Array(3 * 16),
527
+ jointCount: 3,
528
+ });
529
+
530
+ const asset = buildTestAsset([
531
+ {
532
+ localId: 0,
533
+ components: {
534
+ Skin: { skeleton: SKELETON_GUID_STR, joints: [1, 2] },
535
+ },
536
+ },
537
+ ]);
538
+
539
+ const world = new World();
540
+ const Skin = defineComponent('Skin', {
541
+ skeleton: 'shared<SkeletonAsset>',
542
+ joints: 'array<entity>',
543
+ });
544
+ world.components.register(Skin);
545
+
546
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
547
+ const internal = reg as any as {
548
+ _resolveSceneGuids(
549
+ scene: SceneAsset,
550
+ world: World,
551
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
552
+ };
553
+ const result = internal._resolveSceneGuids(asset, world);
554
+
555
+ expect(result.ok).toBe(true);
556
+ if (!result.ok) return;
557
+ const resolvedAsset = result.value;
558
+ const resolvedComp = resolvedAsset.entities[0]?.components as Record<
559
+ string,
560
+ Record<string, unknown>
561
+ >;
562
+ // skeleton should now be a Handle number
563
+ expect(resolvedComp.Skin?.skeleton).toBeTypeOf('number');
564
+ // joints (array<entity>) should NOT be touched — it's not a handle field
565
+ expect(resolvedComp.Skin?.joints).toEqual([1, 2]);
566
+ });
567
+
568
+ it('(c) same GUID referenced by multiple nodes resolves to the same Handle number', () => {
569
+ const reg = new AssetRegistry(makeMockShaderRegistry());
570
+
571
+ const meshGuid = parseGuid(MESH_GUID_STR);
572
+ reg.catalog(meshGuid, {
573
+ kind: 'mesh',
574
+ vertices: new Float32Array(0),
575
+ indices: new Uint16Array(0),
576
+ attributes: { position: new Float32Array(0) },
577
+ materialSlots: [{ slotName: 'Default' }],
578
+ submeshes: [
579
+ {
580
+ indexOffset: 0,
581
+ indexCount: 0,
582
+ vertexCount: 0,
583
+ materialSlot: 0,
584
+ topology: 'triangle-list',
585
+ },
586
+ ],
587
+ });
588
+
589
+ const asset = buildTestAsset([
590
+ {
591
+ localId: 0,
592
+ components: {
593
+ MeshFilter: { assetHandle: MESH_GUID_STR },
594
+ },
595
+ },
596
+ {
597
+ localId: 1,
598
+ components: {
599
+ MeshFilter: { assetHandle: MESH_GUID_STR },
600
+ },
601
+ },
602
+ ]);
603
+
604
+ const world = new World();
605
+ const MeshFilter = defineComponent('MeshFilter', { assetHandle: 'shared<MeshAsset>' });
606
+ world.components.register(MeshFilter);
607
+
608
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
609
+ const internal = reg as any as {
610
+ _resolveSceneGuids(
611
+ scene: SceneAsset,
612
+ world: World,
613
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
614
+ };
615
+ const result = internal._resolveSceneGuids(asset, world);
616
+
617
+ expect(result.ok).toBe(true);
618
+ if (!result.ok) return;
619
+ const resolvedAsset = result.value;
620
+ const comp0 = (
621
+ resolvedAsset.entities[0]?.components as Record<string, Record<string, unknown>>
622
+ ).MeshFilter;
623
+ const comp1 = (
624
+ resolvedAsset.entities[1]?.components as Record<string, Record<string, unknown>>
625
+ ).MeshFilter;
626
+ expect(comp0?.assetHandle).toBe(comp1?.assetHandle);
627
+ expect(comp0?.assetHandle).toBeTypeOf('number');
628
+ });
629
+
630
+ it('(d) nodes without handle fields pass through unchanged', () => {
631
+ const reg = new AssetRegistry(makeMockShaderRegistry());
632
+
633
+ const asset = buildTestAsset([{ localId: 0, components: { Transform: { pos: [1, 2, 3] } } }]);
634
+
635
+ const world = new World();
636
+ defineComponent('Transform', { pos: 'array<f32, 3>' });
637
+
638
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
639
+ const internal = reg as any as {
640
+ _resolveSceneGuids(
641
+ scene: SceneAsset,
642
+ world: World,
643
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
644
+ };
645
+ const result = internal._resolveSceneGuids(asset, world);
646
+
647
+ expect(result.ok).toBe(true);
648
+ if (!result.ok) return;
649
+ const resolvedAsset = result.value;
650
+ const comp = (
651
+ resolvedAsset.entities[0]?.components as Record<string, Record<string, unknown>>
652
+ ).Transform;
653
+ expect(comp).toEqual({ pos: [1, 2, 3] });
654
+ });
655
+ });
656
+
657
+ describe('w5 - _resolveSceneGuids error path', () => {
658
+ it('(e) unregistered GUID returns asset-not-found with hint containing GUID, localId, and field', () => {
659
+ const reg = new AssetRegistry(makeMockShaderRegistry());
660
+
661
+ const asset = buildTestAsset([
662
+ {
663
+ localId: 0,
664
+ components: {
665
+ MeshFilter: { assetHandle: UNREGISTERED_GUID_STR },
666
+ },
667
+ },
668
+ ]);
669
+
670
+ const world = new World();
671
+ const MeshFilter = defineComponent('MeshFilter', { assetHandle: 'shared<MeshAsset>' });
672
+ world.components.register(MeshFilter);
673
+
674
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
675
+ const internal = reg as any as {
676
+ _resolveSceneGuids(
677
+ scene: SceneAsset,
678
+ world: World,
679
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
680
+ };
681
+ const result = internal._resolveSceneGuids(asset, world);
682
+
683
+ expect(result.ok).toBe(false);
684
+ if (result.ok) return;
685
+ const e = result.error as { code: string; hint: string };
686
+ expect(e.code).toBe('asset-not-found');
687
+ // Hint must contain the GUID, localId, and field for AI-user debuggability (AC-04)
688
+ expect(e.hint).toContain(UNREGISTERED_GUID_STR);
689
+ expect(e.hint).toContain('0'); // localId
690
+ expect(e.hint).toContain('assetHandle');
691
+ });
692
+
693
+ it('(f) stop-on-first-error: only the first unregistered GUID among multiple nodes is reported', () => {
694
+ const reg = new AssetRegistry(makeMockShaderRegistry());
695
+
696
+ // Register the first GUID but not the second — first node (localId=1) should
697
+ // fail before reaching localId=2
698
+ const meshGuid = parseGuid(MESH_GUID_STR);
699
+ reg.catalog(meshGuid, {
700
+ kind: 'mesh',
701
+ vertices: new Float32Array(0),
702
+ indices: new Uint16Array(0),
703
+ attributes: { position: new Float32Array(0) },
704
+ materialSlots: [{ slotName: 'Default' }],
705
+ submeshes: [
706
+ {
707
+ indexOffset: 0,
708
+ indexCount: 0,
709
+ vertexCount: 0,
710
+ materialSlot: 0,
711
+ topology: 'triangle-list',
712
+ },
713
+ ],
714
+ });
715
+
716
+ const SECOND_UNREGISTERED = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee';
717
+
718
+ const asset = buildTestAsset([
719
+ {
720
+ localId: 1,
721
+ components: {
722
+ MeshFilter: { assetHandle: UNREGISTERED_GUID_STR },
723
+ },
724
+ },
725
+ {
726
+ localId: 2,
727
+ components: {
728
+ MeshFilter: { assetHandle: SECOND_UNREGISTERED },
729
+ },
730
+ },
731
+ ]);
732
+
733
+ const world = new World();
734
+ const MeshFilter = defineComponent('MeshFilter', { assetHandle: 'shared<MeshAsset>' });
735
+ world.components.register(MeshFilter);
736
+
737
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
738
+ const internal = reg as any as {
739
+ _resolveSceneGuids(
740
+ scene: SceneAsset,
741
+ world: World,
742
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
743
+ };
744
+ const result = internal._resolveSceneGuids(asset, world);
745
+
746
+ expect(result.ok).toBe(false);
747
+ if (result.ok) return;
748
+ const e = result.error as { code: string; hint: string };
749
+ expect(e.code).toBe('asset-not-found');
750
+ // Hint should reference the first failing node (localId=1), not the second
751
+ expect(e.hint).toContain(UNREGISTERED_GUID_STR);
752
+ expect(e.hint).toContain('1'); // localId of the first failing node
753
+ // Must NOT contain the second GUID (stopped before reaching it)
754
+ expect(e.hint).not.toContain(SECOND_UNREGISTERED.slice(0, 8)); // prefix match sufficient
755
+ });
756
+
757
+ describe('w10 - M3 reverse-decode from envelope.refs + buildSceneChildContext from edge lookup', () => {
758
+ const MATERIAL2_GUID_STR = 'e1e2e3e4-a5a6-4b7c-8d9e-0a1b2c3d4e5f';
759
+ const MATERIAL3_GUID_STR = 'd1d2d3d4-b5b6-4c7d-8e9f-0a1b2c3d4e5f';
760
+ const TEXTURE_GUID_STR = 'cccccccc-aaaa-bbbb-cccc-dddddddddddd';
761
+
762
+ function makeTestMesh(): MeshAsset {
763
+ return {
764
+ kind: 'mesh',
765
+ vertices: new Float32Array(0),
766
+ indices: new Uint16Array(0),
767
+ attributes: { position: new Float32Array(0) },
768
+ materialSlots: [{ slotName: 'Default' }],
769
+ submeshes: [
770
+ {
771
+ indexOffset: 0,
772
+ indexCount: 0,
773
+ vertexCount: 0,
774
+ materialSlot: 0,
775
+ topology: 'triangle-list' as const,
776
+ },
777
+ ],
778
+ };
779
+ }
780
+
781
+ function makeTestMaterial(): MaterialAsset {
782
+ return {
783
+ kind: 'material',
784
+ passes: [{ name: 'forward', program: { module: 'test::dummy' } }],
785
+ values: {},
786
+ };
787
+ }
788
+
789
+ function registerAsset<T extends Asset>(reg: AssetRegistry, guidStr: string, asset: T): void {
790
+ const guid = parseGuid(guidStr);
791
+ reg.catalog(guid, asset);
792
+ }
793
+
794
+ it('(a) per-field equivalence: scalar handle + array handle resolve correctly via envelope.refs', () => {
795
+ const reg = new AssetRegistry(makeMockShaderRegistry());
796
+
797
+ registerAsset(reg, MESH_GUID_STR, makeTestMesh());
798
+ registerAsset(reg, MATERIAL_GUID_STR, makeTestMaterial());
799
+ registerAsset(reg, MATERIAL2_GUID_STR, makeTestMaterial());
800
+ registerAsset(reg, MATERIAL3_GUID_STR, makeTestMaterial());
801
+
802
+ // Build a scene and catalogue it with refs that carry edge metadata
803
+ const sceneGuidStr = '00001111-2222-3333-4444-555566667777';
804
+ const sceneGuid = parseGuid(sceneGuidStr);
805
+ const sceneAsset = buildTestAsset([
806
+ {
807
+ localId: 0,
808
+ components: {
809
+ Transform: { pos: [1, 0, 0] },
810
+ MeshFilter: { assetHandle: MESH_GUID_STR },
811
+ MeshRenderer: {
812
+ materials: [MATERIAL_GUID_STR, MATERIAL2_GUID_STR, MATERIAL3_GUID_STR],
813
+ },
814
+ },
815
+ },
816
+ ]);
817
+
818
+ // Catalogue the scene WITH refs edge metadata (envelope.refs path)
819
+ const refs: import('@forgeax/engine-types').AssetRef[] = [
820
+ {
821
+ guid: MESH_GUID_STR,
822
+ sourceField: { componentName: 'MeshFilter', fieldName: 'assetHandle' },
823
+ sceneEntityId: 0,
824
+ },
825
+ {
826
+ guid: MATERIAL_GUID_STR,
827
+ sourceField: {
828
+ componentName: 'MeshRenderer',
829
+ fieldName: 'materials',
830
+ arrayIndex: 0,
831
+ },
832
+ sceneEntityId: 0,
833
+ },
834
+ {
835
+ guid: MATERIAL2_GUID_STR,
836
+ sourceField: {
837
+ componentName: 'MeshRenderer',
838
+ fieldName: 'materials',
839
+ arrayIndex: 1,
840
+ },
841
+ sceneEntityId: 0,
842
+ },
843
+ {
844
+ guid: MATERIAL3_GUID_STR,
845
+ sourceField: {
846
+ componentName: 'MeshRenderer',
847
+ fieldName: 'materials',
848
+ arrayIndex: 2,
849
+ },
850
+ sceneEntityId: 0,
851
+ },
852
+ ];
853
+ reg.catalog(sceneGuid, sceneAsset, refs);
854
+
855
+ const world = new World();
856
+ defineComponent('MeshFilter', { assetHandle: 'shared<MeshAsset>' });
857
+ defineComponent('MeshRenderer', { materials: 'array<shared<MaterialAsset>>' });
858
+
859
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
860
+ const internal = reg as any as {
861
+ _resolveSceneGuids(
862
+ scene: SceneAsset,
863
+ world: World,
864
+ sceneGuidKey?: string,
865
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
866
+ };
867
+ const result = internal._resolveSceneGuids(sceneAsset, world, sceneGuidStr.toLowerCase());
868
+
869
+ expect(result.ok).toBe(true);
870
+ if (!result.ok) return;
871
+ const resolvedAsset = result.value;
872
+ expect(resolvedAsset.kind).toBe('scene');
873
+ expect(resolvedAsset.entities.length).toBe(1);
874
+
875
+ const resolvedComp = resolvedAsset.entities[0]?.components as Record<
876
+ string,
877
+ Record<string, unknown>
878
+ >;
879
+ // Scalar handle
880
+ expect(resolvedComp.MeshFilter?.assetHandle).toBeTypeOf('number');
881
+ // Array handles — all 3 slots
882
+ const mats = resolvedComp.MeshRenderer?.materials as readonly unknown[] | undefined;
883
+ expect(Array.isArray(mats)).toBe(true);
884
+ expect(mats?.length).toBe(3);
885
+ expect(mats?.[0]).toBeTypeOf('number');
886
+ expect(mats?.[1]).toBeTypeOf('number');
887
+ expect(mats?.[2]).toBeTypeOf('number');
888
+ // Each slot has a distinct material GUID → distinct handle
889
+ expect(mats?.[0]).not.toBe(mats?.[1]);
890
+ expect(mats?.[1]).not.toBe(mats?.[2]);
891
+ });
892
+
893
+ it('(b) arrayIndex lossless: array<handle<MaterialAsset>> of 3 → each slot gets correct GUID', () => {
894
+ const reg = new AssetRegistry(makeMockShaderRegistry());
895
+
896
+ registerAsset(reg, MATERIAL_GUID_STR, makeTestMaterial());
897
+ registerAsset(reg, MATERIAL2_GUID_STR, makeTestMaterial());
898
+ registerAsset(reg, MATERIAL3_GUID_STR, makeTestMaterial());
899
+
900
+ const sceneGuidStr = '00001111-2222-3333-4444-555566667777';
901
+ const sceneGuid = parseGuid(sceneGuidStr);
902
+ const sceneAsset = buildTestAsset([
903
+ {
904
+ localId: 0,
905
+ components: {
906
+ MeshRenderer: {
907
+ materials: [MATERIAL_GUID_STR, MATERIAL2_GUID_STR, MATERIAL3_GUID_STR],
908
+ },
909
+ },
910
+ },
911
+ ]);
912
+
913
+ const refs: import('@forgeax/engine-types').AssetRef[] = [
914
+ {
915
+ guid: MATERIAL_GUID_STR,
916
+ sourceField: {
917
+ componentName: 'MeshRenderer',
918
+ fieldName: 'materials',
919
+ arrayIndex: 0,
920
+ },
921
+ sceneEntityId: 0,
922
+ },
923
+ {
924
+ guid: MATERIAL2_GUID_STR,
925
+ sourceField: {
926
+ componentName: 'MeshRenderer',
927
+ fieldName: 'materials',
928
+ arrayIndex: 1,
929
+ },
930
+ sceneEntityId: 0,
931
+ },
932
+ {
933
+ guid: MATERIAL3_GUID_STR,
934
+ sourceField: {
935
+ componentName: 'MeshRenderer',
936
+ fieldName: 'materials',
937
+ arrayIndex: 2,
938
+ },
939
+ sceneEntityId: 0,
940
+ },
941
+ ];
942
+ reg.catalog(sceneGuid, sceneAsset, refs);
943
+
944
+ const world = new World();
945
+ defineComponent('MeshRenderer', { materials: 'array<shared<MaterialAsset>>' });
946
+
947
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
948
+ const internal = reg as any as {
949
+ _resolveSceneGuids(
950
+ scene: SceneAsset,
951
+ world: World,
952
+ sceneGuidKey?: string,
953
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
954
+ };
955
+ const result = internal._resolveSceneGuids(sceneAsset, world, sceneGuidStr.toLowerCase());
956
+
957
+ expect(result.ok).toBe(true);
958
+ if (!result.ok) return;
959
+ const resolvedComp = result.value.entities[0]?.components as Record<
960
+ string,
961
+ Record<string, unknown>
962
+ >;
963
+ const mats = resolvedComp.MeshRenderer?.materials as readonly number[] | undefined;
964
+ expect(mats?.length).toBe(3);
965
+ // Verify each slot is a number (resolved handle) and distinct
966
+ expect(typeof mats?.[0]).toBe('number');
967
+ expect(typeof mats?.[1]).toBe('number');
968
+ expect(typeof mats?.[2]).toBe('number');
969
+ // Different GUIDs → different handles
970
+ expect(mats?.[0]).not.toBe(mats?.[1]);
971
+ expect(mats?.[1]).not.toBe(mats?.[2]);
972
+ expect(mats?.[0]).not.toBe(mats?.[2]);
973
+ });
974
+
975
+ it('(c) dedup contract: same GUID from multiple entities → same handle', () => {
976
+ const reg = new AssetRegistry(makeMockShaderRegistry());
977
+
978
+ registerAsset(reg, MESH_GUID_STR, makeTestMesh());
979
+
980
+ const sceneGuidStr = '00001111-2222-3333-4444-555566667777';
981
+ const sceneGuid = parseGuid(sceneGuidStr);
982
+ const sceneAsset = buildTestAsset([
983
+ {
984
+ localId: 0,
985
+ components: { MeshFilter: { assetHandle: MESH_GUID_STR } },
986
+ },
987
+ {
988
+ localId: 1,
989
+ components: { MeshFilter: { assetHandle: MESH_GUID_STR } },
990
+ },
991
+ ]);
992
+
993
+ const refs: import('@forgeax/engine-types').AssetRef[] = [
994
+ {
995
+ guid: MESH_GUID_STR,
996
+ sourceField: { componentName: 'MeshFilter', fieldName: 'assetHandle' },
997
+ sceneEntityId: 0,
998
+ },
999
+ {
1000
+ guid: MESH_GUID_STR,
1001
+ sourceField: { componentName: 'MeshFilter', fieldName: 'assetHandle' },
1002
+ sceneEntityId: 1,
1003
+ },
1004
+ ];
1005
+ reg.catalog(sceneGuid, sceneAsset, refs);
1006
+
1007
+ const world = new World();
1008
+ defineComponent('MeshFilter', { assetHandle: 'shared<MeshAsset>' });
1009
+
1010
+ // biome-ignore lint/suspicious/noExplicitAny: private helper access
1011
+ const internal = reg as any as {
1012
+ _resolveSceneGuids(
1013
+ scene: SceneAsset,
1014
+ world: World,
1015
+ sceneGuidKey?: string,
1016
+ ): { ok: true; value: SceneAsset } | { ok: false; error: unknown };
1017
+ };
1018
+ const result = internal._resolveSceneGuids(sceneAsset, world, sceneGuidStr.toLowerCase());
1019
+
1020
+ expect(result.ok).toBe(true);
1021
+ if (!result.ok) return;
1022
+ const comp0 = (
1023
+ result.value.entities[0]?.components as Record<string, Record<string, unknown>>
1024
+ ).MeshFilter;
1025
+ const comp1 = (
1026
+ result.value.entities[1]?.components as Record<string, Record<string, unknown>>
1027
+ ).MeshFilter;
1028
+ // Same GUID → same handle (one allocSharedRef per unique payload)
1029
+ expect(comp0?.assetHandle).toBe(comp1?.assetHandle);
1030
+ expect(comp0?.assetHandle).toBeTypeOf('number');
1031
+ });
1032
+
1033
+ it('(d) breadcrumb from envelope.refs: buildSceneChildContext returns correct sceneEntityId + componentField', () => {
1034
+ const reg = new AssetRegistry(makeMockShaderRegistry());
1035
+
1036
+ registerAsset(reg, MESH_GUID_STR, makeTestMesh());
1037
+
1038
+ const sceneGuidStr = '00001111-2222-3333-4444-555566667777';
1039
+ const sceneGuid = parseGuid(sceneGuidStr);
1040
+ const sceneAsset = buildTestAsset([
1041
+ {
1042
+ localId: 5,
1043
+ components: { MeshFilter: { assetHandle: MESH_GUID_STR } },
1044
+ },
1045
+ ]);
1046
+
1047
+ const refs: import('@forgeax/engine-types').AssetRef[] = [
1048
+ {
1049
+ guid: MESH_GUID_STR,
1050
+ sourceField: { componentName: 'MeshFilter', fieldName: 'assetHandle' },
1051
+ sceneEntityId: 5,
1052
+ },
1053
+ ];
1054
+ reg.catalog(sceneGuid, sceneAsset, refs);
1055
+
1056
+ const ctx = buildSceneChildContext(reg, sceneAsset, MESH_GUID_STR.toLowerCase());
1057
+
1058
+ expect(ctx).toBeDefined();
1059
+ expect(ctx?.sceneEntityId).toBe(5);
1060
+ expect(ctx?.componentField).toBe('MeshFilter.assetHandle');
1061
+ });
1062
+
1063
+ it('(e) texture edge: sourceField=undefined → buildSceneChildContext returns componentField undefined', () => {
1064
+ const reg = new AssetRegistry(makeMockShaderRegistry());
1065
+
1066
+ registerAsset(reg, MATERIAL_GUID_STR, makeTestMaterial());
1067
+
1068
+ const textureGuid = parseGuid(TEXTURE_GUID_STR);
1069
+ reg.catalog(textureGuid, {
1070
+ kind: 'texture',
1071
+ // biome-ignore lint/suspicious/noExplicitAny: test fixture uses minimal texture shape
1072
+ texture: {} as any,
1073
+ });
1074
+
1075
+ const sceneGuidStr = '00001111-2222-3333-4444-555566667777';
1076
+ const sceneGuid = parseGuid(sceneGuidStr);
1077
+ const sceneAsset = buildTestAsset([
1078
+ {
1079
+ localId: 0,
1080
+ components: {
1081
+ MeshRenderer: { materials: [MATERIAL_GUID_STR] },
1082
+ },
1083
+ },
1084
+ ]);
1085
+
1086
+ // Scene refs include a texture edge (flat superset per D-2) with
1087
+ // sourceField=undefined — texture has no per-entity origin.
1088
+ const refs: import('@forgeax/engine-types').AssetRef[] = [
1089
+ {
1090
+ guid: MATERIAL_GUID_STR,
1091
+ sourceField: {
1092
+ componentName: 'MeshRenderer',
1093
+ fieldName: 'materials',
1094
+ arrayIndex: 0,
1095
+ },
1096
+ sceneEntityId: 0,
1097
+ },
1098
+ {
1099
+ guid: TEXTURE_GUID_STR,
1100
+ // sourceField intentionally omitted — texture edge, D-2
1101
+ sceneEntityId: undefined,
1102
+ },
1103
+ ];
1104
+ reg.catalog(sceneGuid, sceneAsset, refs);
1105
+
1106
+ // Look up the material GUID — should find sceneEntityId + componentField
1107
+ const materialCtx = buildSceneChildContext(
1108
+ reg,
1109
+ sceneAsset,
1110
+ MATERIAL_GUID_STR.toLowerCase(),
1111
+ );
1112
+ expect(materialCtx).toBeDefined();
1113
+ expect(materialCtx?.componentField).toBe('MeshRenderer.materials[0]');
1114
+
1115
+ // Look up the texture GUID — sourceField=undefined → componentField undefined
1116
+ const textureCtx = buildSceneChildContext(reg, sceneAsset, TEXTURE_GUID_STR.toLowerCase());
1117
+ expect(textureCtx).toBeDefined();
1118
+ expect(textureCtx?.sceneEntityId).toBeUndefined();
1119
+ expect(textureCtx?.componentField).toBeUndefined();
1120
+ });
1121
+ });
1122
+ });
1123
+ }