rn-gamekit 0.1.0 → 0.2.1

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 (601) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +97 -16
  3. package/lib/module/assets/defineAssets.js +28 -3
  4. package/lib/module/assets/defineAssets.js.map +1 -1
  5. package/lib/module/assets.js +11 -0
  6. package/lib/module/assets.js.map +1 -0
  7. package/lib/module/audio/createGameAudio.js +784 -0
  8. package/lib/module/audio/createGameAudio.js.map +1 -0
  9. package/lib/module/audio/errors.js +12 -0
  10. package/lib/module/audio/errors.js.map +1 -0
  11. package/lib/module/audio/index.js +5 -0
  12. package/lib/module/audio/index.js.map +1 -0
  13. package/lib/module/audio/resolver.js +37 -0
  14. package/lib/module/audio/resolver.js.map +1 -0
  15. package/lib/module/audio/types.js +4 -0
  16. package/lib/module/audio/types.js.map +1 -0
  17. package/lib/module/audio.js +9 -0
  18. package/lib/module/audio.js.map +1 -0
  19. package/lib/module/camera2d/bounds.js +59 -0
  20. package/lib/module/camera2d/bounds.js.map +1 -0
  21. package/lib/module/camera2d/extents.js +25 -0
  22. package/lib/module/camera2d/extents.js.map +1 -0
  23. package/lib/module/camera2d/follow.js +138 -0
  24. package/lib/module/camera2d/follow.js.map +1 -0
  25. package/lib/module/camera2d/index.js +20 -0
  26. package/lib/module/camera2d/index.js.map +1 -0
  27. package/lib/module/camera2d/interpolation.js +98 -0
  28. package/lib/module/camera2d/interpolation.js.map +1 -0
  29. package/lib/module/camera2d/shake.js +85 -0
  30. package/lib/module/camera2d/shake.js.map +1 -0
  31. package/lib/module/camera2d/transform.js +151 -0
  32. package/lib/module/camera2d/transform.js.map +1 -0
  33. package/lib/module/camera2d/types.js +4 -0
  34. package/lib/module/camera2d/types.js.map +1 -0
  35. package/lib/module/camera2d/validation.js +98 -0
  36. package/lib/module/camera2d/validation.js.map +1 -0
  37. package/lib/module/camera2d/visibility.js +138 -0
  38. package/lib/module/camera2d/visibility.js.map +1 -0
  39. package/lib/module/camera2d.js +9 -0
  40. package/lib/module/camera2d.js.map +1 -0
  41. package/lib/module/collision2d/colliders.js +266 -0
  42. package/lib/module/collision2d/colliders.js.map +1 -0
  43. package/lib/module/collision2d/debug.js +105 -0
  44. package/lib/module/collision2d/debug.js.map +1 -0
  45. package/lib/module/collision2d/filters.js +40 -0
  46. package/lib/module/collision2d/filters.js.map +1 -0
  47. package/lib/module/collision2d/index.js +12 -0
  48. package/lib/module/collision2d/index.js.map +1 -0
  49. package/lib/module/collision2d/intersections.js +67 -0
  50. package/lib/module/collision2d/intersections.js.map +1 -0
  51. package/lib/module/collision2d/manifolds.js +218 -0
  52. package/lib/module/collision2d/manifolds.js.map +1 -0
  53. package/lib/module/collision2d/segments.js +187 -0
  54. package/lib/module/collision2d/segments.js.map +1 -0
  55. package/lib/module/collision2d/spatialHash.js +167 -0
  56. package/lib/module/collision2d/spatialHash.js.map +1 -0
  57. package/lib/module/collision2d/sweeps.js +255 -0
  58. package/lib/module/collision2d/sweeps.js.map +1 -0
  59. package/lib/module/collision2d.js +9 -0
  60. package/lib/module/collision2d.js.map +1 -0
  61. package/lib/module/core/input/buttonPad.js +214 -0
  62. package/lib/module/core/input/buttonPad.js.map +1 -0
  63. package/lib/module/core/input/createInputBuffer.js +66 -14
  64. package/lib/module/core/input/createInputBuffer.js.map +1 -1
  65. package/lib/module/core/session/createGameSession.js +454 -50
  66. package/lib/module/core/session/createGameSession.js.map +1 -1
  67. package/lib/module/core/session/deepFreeze.js +92 -2
  68. package/lib/module/core/session/deepFreeze.js.map +1 -1
  69. package/lib/module/core/session/types.js +12 -0
  70. package/lib/module/core/session/types.js.map +1 -1
  71. package/lib/module/definition/defineGame.js +23 -0
  72. package/lib/module/definition/defineGame.js.map +1 -1
  73. package/lib/module/events/defineGameEvents.js +46 -0
  74. package/lib/module/events/defineGameEvents.js.map +1 -0
  75. package/lib/module/events/errors.js +16 -0
  76. package/lib/module/events/errors.js.map +1 -0
  77. package/lib/module/events/index.js +7 -0
  78. package/lib/module/events/index.js.map +1 -0
  79. package/lib/module/events/payload.js +219 -0
  80. package/lib/module/events/payload.js.map +1 -0
  81. package/lib/module/events/seed.js +33 -0
  82. package/lib/module/events/seed.js.map +1 -0
  83. package/lib/module/events/types.js +4 -0
  84. package/lib/module/events/types.js.map +1 -0
  85. package/lib/module/events.js +13 -0
  86. package/lib/module/events.js.map +1 -0
  87. package/lib/module/geometry/helpers.js +140 -0
  88. package/lib/module/geometry/helpers.js.map +1 -0
  89. package/lib/module/geometry/index.js +5 -0
  90. package/lib/module/geometry/index.js.map +1 -0
  91. package/lib/module/geometry/validation.js +104 -0
  92. package/lib/module/geometry/validation.js.map +1 -0
  93. package/lib/module/geometry.js +9 -0
  94. package/lib/module/geometry.js.map +1 -0
  95. package/lib/module/haptics/createGameHaptics.js +214 -0
  96. package/lib/module/haptics/createGameHaptics.js.map +1 -0
  97. package/lib/module/haptics/errors.js +12 -0
  98. package/lib/module/haptics/errors.js.map +1 -0
  99. package/lib/module/haptics/index.js +5 -0
  100. package/lib/module/haptics/index.js.map +1 -0
  101. package/lib/module/haptics/resolver.js +37 -0
  102. package/lib/module/haptics/resolver.js.map +1 -0
  103. package/lib/module/haptics/types.js +4 -0
  104. package/lib/module/haptics/types.js.map +1 -0
  105. package/lib/module/haptics.js +9 -0
  106. package/lib/module/haptics.js.map +1 -0
  107. package/lib/module/index.js +8 -1
  108. package/lib/module/index.js.map +1 -1
  109. package/lib/module/particles/createParticleSystem.js +481 -0
  110. package/lib/module/particles/createParticleSystem.js.map +1 -0
  111. package/lib/module/particles/defineParticleEffect.js +178 -0
  112. package/lib/module/particles/defineParticleEffect.js.map +1 -0
  113. package/lib/module/particles/errors.js +9 -0
  114. package/lib/module/particles/errors.js.map +1 -0
  115. package/lib/module/particles/index.js +8 -0
  116. package/lib/module/particles/index.js.map +1 -0
  117. package/lib/module/particles/sampling.js +121 -0
  118. package/lib/module/particles/sampling.js.map +1 -0
  119. package/lib/module/particles/types.js +4 -0
  120. package/lib/module/particles/types.js.map +1 -0
  121. package/lib/module/particles.js +4 -0
  122. package/lib/module/particles.js.map +1 -0
  123. package/lib/module/react/GameButtonPad.js +344 -0
  124. package/lib/module/react/GameButtonPad.js.map +1 -0
  125. package/lib/module/react/GamePointerInput.js +74 -16
  126. package/lib/module/react/GamePointerInput.js.map +1 -1
  127. package/lib/module/react/GameView.js +139 -60
  128. package/lib/module/react/GameView.js.map +1 -1
  129. package/lib/module/react/assets/createGameAssetStore.js +145 -95
  130. package/lib/module/react/assets/createGameAssetStore.js.map +1 -1
  131. package/lib/module/react/assets/useGameAssets.js +60 -35
  132. package/lib/module/react/assets/useGameAssets.js.map +1 -1
  133. package/lib/module/react/bindAppLifecycle.js +46 -17
  134. package/lib/module/react/bindAppLifecycle.js.map +1 -1
  135. package/lib/module/react/bindGameSession.js +13 -2
  136. package/lib/module/react/bindGameSession.js.map +1 -1
  137. package/lib/module/react/camera2d/GameLayer2D.js +50 -0
  138. package/lib/module/react/camera2d/GameLayer2D.js.map +1 -0
  139. package/lib/module/react/camera2d/defineGameCamera2D.js +30 -0
  140. package/lib/module/react/camera2d/defineGameCamera2D.js.map +1 -0
  141. package/lib/module/react/camera2d/usePresentedCameraBinding.js +177 -0
  142. package/lib/module/react/camera2d/usePresentedCameraBinding.js.map +1 -0
  143. package/lib/module/react/cleanupList.js +38 -0
  144. package/lib/module/react/cleanupList.js.map +1 -0
  145. package/lib/module/react/lifecycleSource.js +49 -0
  146. package/lib/module/react/lifecycleSource.js.map +1 -0
  147. package/lib/module/react/particles/ParticleView.js +308 -0
  148. package/lib/module/react/particles/ParticleView.js.map +1 -0
  149. package/lib/module/react/particles/culling.js +115 -0
  150. package/lib/module/react/particles/culling.js.map +1 -0
  151. package/lib/module/react/particles/index.js +7 -0
  152. package/lib/module/react/particles/index.js.map +1 -0
  153. package/lib/module/react/particles/spriteXForm.js +45 -0
  154. package/lib/module/react/particles/spriteXForm.js.map +1 -0
  155. package/lib/module/react/particles/useParticlePresentation.js +204 -0
  156. package/lib/module/react/particles/useParticlePresentation.js.map +1 -0
  157. package/lib/module/react/pointerBinding.js +55 -17
  158. package/lib/module/react/pointerBinding.js.map +1 -1
  159. package/lib/module/react/pointerCamera.js +28 -0
  160. package/lib/module/react/pointerCamera.js.map +1 -0
  161. package/lib/module/react/pointerCoalescer.js +16 -9
  162. package/lib/module/react/pointerCoalescer.js.map +1 -1
  163. package/lib/module/react/sprites/GameSprite.js +5 -17
  164. package/lib/module/react/sprites/GameSprite.js.map +1 -1
  165. package/lib/module/react/sprites/GameWorld2D.js +112 -9
  166. package/lib/module/react/sprites/GameWorld2D.js.map +1 -1
  167. package/lib/module/react/sprites/Sprite.js +48 -63
  168. package/lib/module/react/sprites/Sprite.js.map +1 -1
  169. package/lib/module/react/sprites/SpriteBatch.js +53 -28
  170. package/lib/module/react/sprites/SpriteBatch.js.map +1 -1
  171. package/lib/module/react/sprites/batchVisibility.js +58 -0
  172. package/lib/module/react/sprites/batchVisibility.js.map +1 -0
  173. package/lib/module/react/sprites/spriteSelection.js +103 -0
  174. package/lib/module/react/sprites/spriteSelection.js.map +1 -0
  175. package/lib/module/react/sprites/spriteTransform.js +46 -25
  176. package/lib/module/react/sprites/spriteTransform.js.map +1 -1
  177. package/lib/module/react/tilemap/TileMapLayer2D.js +217 -0
  178. package/lib/module/react/tilemap/TileMapLayer2D.js.map +1 -0
  179. package/lib/module/react/tilemap/tilePresentation.js +374 -0
  180. package/lib/module/react/tilemap/tilePresentation.js.map +1 -0
  181. package/lib/module/react/useGameSession.js +70 -0
  182. package/lib/module/react/useGameSession.js.map +1 -0
  183. package/lib/module/react/useGameSessionStatus.js +46 -0
  184. package/lib/module/react/useGameSessionStatus.js.map +1 -0
  185. package/lib/module/react/viewportBinding.js +5 -1
  186. package/lib/module/react/viewportBinding.js.map +1 -1
  187. package/lib/module/react.js +12 -1
  188. package/lib/module/react.js.map +1 -1
  189. package/lib/module/scene/defineScene.js +17 -0
  190. package/lib/module/scene/defineScene.js.map +1 -1
  191. package/lib/module/sprites/sampleSpriteClip.js +66 -6
  192. package/lib/module/sprites/sampleSpriteClip.js.map +1 -1
  193. package/lib/module/sprites/spriteAnimationState.js +10 -20
  194. package/lib/module/sprites/spriteAnimationState.js.map +1 -1
  195. package/lib/module/sprites.js +11 -0
  196. package/lib/module/sprites.js.map +1 -0
  197. package/lib/module/storage/adapters/asyncStorage.js +57 -0
  198. package/lib/module/storage/adapters/asyncStorage.js.map +1 -0
  199. package/lib/module/storage/adapters/memory.js +50 -0
  200. package/lib/module/storage/adapters/memory.js.map +1 -0
  201. package/lib/module/storage/errors.js +34 -0
  202. package/lib/module/storage/errors.js.map +1 -0
  203. package/lib/module/storage/index.js +11 -0
  204. package/lib/module/storage/index.js.map +1 -0
  205. package/lib/module/storage/schema.js +151 -0
  206. package/lib/module/storage/schema.js.map +1 -0
  207. package/lib/module/storage/serialization.js +249 -0
  208. package/lib/module/storage/serialization.js.map +1 -0
  209. package/lib/module/storage/store.js +387 -0
  210. package/lib/module/storage/store.js.map +1 -0
  211. package/lib/module/storage/types.js +16 -0
  212. package/lib/module/storage/types.js.map +1 -0
  213. package/lib/module/storage/validation.js +111 -0
  214. package/lib/module/storage/validation.js.map +1 -0
  215. package/lib/module/storage.js +4 -0
  216. package/lib/module/storage.js.map +1 -0
  217. package/lib/module/testing.js +4 -0
  218. package/lib/module/testing.js.map +1 -1
  219. package/lib/module/tilemap/chunkStats.js +27 -0
  220. package/lib/module/tilemap/chunkStats.js.map +1 -0
  221. package/lib/module/tilemap/definitions.js +308 -0
  222. package/lib/module/tilemap/definitions.js.map +1 -0
  223. package/lib/module/tilemap/errors.js +13 -0
  224. package/lib/module/tilemap/errors.js.map +1 -0
  225. package/lib/module/tilemap/index.js +10 -0
  226. package/lib/module/tilemap/index.js.map +1 -0
  227. package/lib/module/tilemap/movement.js +379 -0
  228. package/lib/module/tilemap/movement.js.map +1 -0
  229. package/lib/module/tilemap/queries.js +114 -0
  230. package/lib/module/tilemap/queries.js.map +1 -0
  231. package/lib/module/tilemap/tiledAdapter.js +141 -0
  232. package/lib/module/tilemap/tiledAdapter.js.map +1 -0
  233. package/lib/module/tilemap/types.js +4 -0
  234. package/lib/module/tilemap/types.js.map +1 -0
  235. package/lib/module/tilemap.js +4 -0
  236. package/lib/module/tilemap.js.map +1 -0
  237. package/lib/typescript/src/assets/defineAssets.d.ts +1 -1
  238. package/lib/typescript/src/assets/defineAssets.d.ts.map +1 -1
  239. package/lib/typescript/src/assets.d.ts +11 -0
  240. package/lib/typescript/src/assets.d.ts.map +1 -0
  241. package/lib/typescript/src/audio/createGameAudio.d.ts +5 -0
  242. package/lib/typescript/src/audio/createGameAudio.d.ts.map +1 -0
  243. package/lib/typescript/src/audio/errors.d.ts +6 -0
  244. package/lib/typescript/src/audio/errors.d.ts.map +1 -0
  245. package/lib/typescript/src/audio/index.d.ts +4 -0
  246. package/lib/typescript/src/audio/index.d.ts.map +1 -0
  247. package/lib/typescript/src/audio/resolver.d.ts +44 -0
  248. package/lib/typescript/src/audio/resolver.d.ts.map +1 -0
  249. package/lib/typescript/src/audio/types.d.ts +42 -0
  250. package/lib/typescript/src/audio/types.d.ts.map +1 -0
  251. package/lib/typescript/src/audio.d.ts +8 -0
  252. package/lib/typescript/src/audio.d.ts.map +1 -0
  253. package/lib/typescript/src/camera2d/bounds.d.ts +25 -0
  254. package/lib/typescript/src/camera2d/bounds.d.ts.map +1 -0
  255. package/lib/typescript/src/camera2d/extents.d.ts +17 -0
  256. package/lib/typescript/src/camera2d/extents.d.ts.map +1 -0
  257. package/lib/typescript/src/camera2d/follow.d.ts +24 -0
  258. package/lib/typescript/src/camera2d/follow.d.ts.map +1 -0
  259. package/lib/typescript/src/camera2d/index.d.ts +19 -0
  260. package/lib/typescript/src/camera2d/index.d.ts.map +1 -0
  261. package/lib/typescript/src/camera2d/interpolation.d.ts +17 -0
  262. package/lib/typescript/src/camera2d/interpolation.d.ts.map +1 -0
  263. package/lib/typescript/src/camera2d/shake.d.ts +20 -0
  264. package/lib/typescript/src/camera2d/shake.d.ts.map +1 -0
  265. package/lib/typescript/src/camera2d/transform.d.ts +44 -0
  266. package/lib/typescript/src/camera2d/transform.d.ts.map +1 -0
  267. package/lib/typescript/src/camera2d/types.d.ts +74 -0
  268. package/lib/typescript/src/camera2d/types.d.ts.map +1 -0
  269. package/lib/typescript/src/camera2d/validation.d.ts +30 -0
  270. package/lib/typescript/src/camera2d/validation.d.ts.map +1 -0
  271. package/lib/typescript/src/camera2d/visibility.d.ts +47 -0
  272. package/lib/typescript/src/camera2d/visibility.d.ts.map +1 -0
  273. package/lib/typescript/src/camera2d.d.ts +7 -0
  274. package/lib/typescript/src/camera2d.d.ts.map +1 -0
  275. package/lib/typescript/src/collision2d/colliders.d.ts +120 -0
  276. package/lib/typescript/src/collision2d/colliders.d.ts.map +1 -0
  277. package/lib/typescript/src/collision2d/debug.d.ts +67 -0
  278. package/lib/typescript/src/collision2d/debug.d.ts.map +1 -0
  279. package/lib/typescript/src/collision2d/filters.d.ts +28 -0
  280. package/lib/typescript/src/collision2d/filters.d.ts.map +1 -0
  281. package/lib/typescript/src/collision2d/index.d.ts +17 -0
  282. package/lib/typescript/src/collision2d/index.d.ts.map +1 -0
  283. package/lib/typescript/src/collision2d/intersections.d.ts +24 -0
  284. package/lib/typescript/src/collision2d/intersections.d.ts.map +1 -0
  285. package/lib/typescript/src/collision2d/manifolds.d.ts +39 -0
  286. package/lib/typescript/src/collision2d/manifolds.d.ts.map +1 -0
  287. package/lib/typescript/src/collision2d/segments.d.ts +24 -0
  288. package/lib/typescript/src/collision2d/segments.d.ts.map +1 -0
  289. package/lib/typescript/src/collision2d/spatialHash.d.ts +50 -0
  290. package/lib/typescript/src/collision2d/spatialHash.d.ts.map +1 -0
  291. package/lib/typescript/src/collision2d/sweeps.d.ts +60 -0
  292. package/lib/typescript/src/collision2d/sweeps.d.ts.map +1 -0
  293. package/lib/typescript/src/collision2d.d.ts +7 -0
  294. package/lib/typescript/src/collision2d.d.ts.map +1 -0
  295. package/lib/typescript/src/core/input/buttonPad.d.ts +59 -0
  296. package/lib/typescript/src/core/input/buttonPad.d.ts.map +1 -0
  297. package/lib/typescript/src/core/input/createInputBuffer.d.ts +1 -1
  298. package/lib/typescript/src/core/input/createInputBuffer.d.ts.map +1 -1
  299. package/lib/typescript/src/core/input/types.d.ts +7 -0
  300. package/lib/typescript/src/core/input/types.d.ts.map +1 -1
  301. package/lib/typescript/src/core/session/createGameSession.d.ts +4 -2
  302. package/lib/typescript/src/core/session/createGameSession.d.ts.map +1 -1
  303. package/lib/typescript/src/core/session/deepFreeze.d.ts +21 -1
  304. package/lib/typescript/src/core/session/deepFreeze.d.ts.map +1 -1
  305. package/lib/typescript/src/core/session/diagnostics.d.ts +2 -0
  306. package/lib/typescript/src/core/session/diagnostics.d.ts.map +1 -1
  307. package/lib/typescript/src/core/session/types.d.ts +69 -4
  308. package/lib/typescript/src/core/session/types.d.ts.map +1 -1
  309. package/lib/typescript/src/definition/defineGame.d.ts +12 -1
  310. package/lib/typescript/src/definition/defineGame.d.ts.map +1 -1
  311. package/lib/typescript/src/definition/types.d.ts +10 -1
  312. package/lib/typescript/src/definition/types.d.ts.map +1 -1
  313. package/lib/typescript/src/events/defineGameEvents.d.ts +26 -0
  314. package/lib/typescript/src/events/defineGameEvents.d.ts.map +1 -0
  315. package/lib/typescript/src/events/errors.d.ts +12 -0
  316. package/lib/typescript/src/events/errors.d.ts.map +1 -0
  317. package/lib/typescript/src/events/index.d.ts +6 -0
  318. package/lib/typescript/src/events/index.d.ts.map +1 -0
  319. package/lib/typescript/src/events/payload.d.ts +21 -0
  320. package/lib/typescript/src/events/payload.d.ts.map +1 -0
  321. package/lib/typescript/src/events/seed.d.ts +3 -0
  322. package/lib/typescript/src/events/seed.d.ts.map +1 -0
  323. package/lib/typescript/src/events/types.d.ts +42 -0
  324. package/lib/typescript/src/events/types.d.ts.map +1 -0
  325. package/lib/typescript/src/events.d.ts +12 -0
  326. package/lib/typescript/src/events.d.ts.map +1 -0
  327. package/lib/typescript/src/geometry/helpers.d.ts +35 -0
  328. package/lib/typescript/src/geometry/helpers.d.ts.map +1 -0
  329. package/lib/typescript/src/geometry/index.d.ts +4 -0
  330. package/lib/typescript/src/geometry/index.d.ts.map +1 -0
  331. package/lib/typescript/src/geometry/types.d.ts +49 -0
  332. package/lib/typescript/src/geometry/types.d.ts.map +1 -1
  333. package/lib/typescript/src/geometry/validation.d.ts +44 -0
  334. package/lib/typescript/src/geometry/validation.d.ts.map +1 -0
  335. package/lib/typescript/src/geometry.d.ts +7 -0
  336. package/lib/typescript/src/geometry.d.ts.map +1 -0
  337. package/lib/typescript/src/haptics/createGameHaptics.d.ts +3 -0
  338. package/lib/typescript/src/haptics/createGameHaptics.d.ts.map +1 -0
  339. package/lib/typescript/src/haptics/errors.d.ts +6 -0
  340. package/lib/typescript/src/haptics/errors.d.ts.map +1 -0
  341. package/lib/typescript/src/haptics/index.d.ts +4 -0
  342. package/lib/typescript/src/haptics/index.d.ts.map +1 -0
  343. package/lib/typescript/src/haptics/resolver.d.ts +22 -0
  344. package/lib/typescript/src/haptics/resolver.d.ts.map +1 -0
  345. package/lib/typescript/src/haptics/types.d.ts +37 -0
  346. package/lib/typescript/src/haptics/types.d.ts.map +1 -0
  347. package/lib/typescript/src/haptics.d.ts +8 -0
  348. package/lib/typescript/src/haptics.d.ts.map +1 -0
  349. package/lib/typescript/src/index.d.ts +10 -2
  350. package/lib/typescript/src/index.d.ts.map +1 -1
  351. package/lib/typescript/src/particles/createParticleSystem.d.ts +5 -0
  352. package/lib/typescript/src/particles/createParticleSystem.d.ts.map +1 -0
  353. package/lib/typescript/src/particles/defineParticleEffect.d.ts +3 -0
  354. package/lib/typescript/src/particles/defineParticleEffect.d.ts.map +1 -0
  355. package/lib/typescript/src/particles/errors.d.ts +5 -0
  356. package/lib/typescript/src/particles/errors.d.ts.map +1 -0
  357. package/lib/typescript/src/particles/index.d.ts +6 -0
  358. package/lib/typescript/src/particles/index.d.ts.map +1 -0
  359. package/lib/typescript/src/particles/sampling.d.ts +54 -0
  360. package/lib/typescript/src/particles/sampling.d.ts.map +1 -0
  361. package/lib/typescript/src/particles/types.d.ts +292 -0
  362. package/lib/typescript/src/particles/types.d.ts.map +1 -0
  363. package/lib/typescript/src/particles.d.ts +2 -0
  364. package/lib/typescript/src/particles.d.ts.map +1 -0
  365. package/lib/typescript/src/react/GameButtonPad.d.ts +84 -0
  366. package/lib/typescript/src/react/GameButtonPad.d.ts.map +1 -0
  367. package/lib/typescript/src/react/GamePointerInput.d.ts.map +1 -1
  368. package/lib/typescript/src/react/GameView.d.ts +27 -1
  369. package/lib/typescript/src/react/GameView.d.ts.map +1 -1
  370. package/lib/typescript/src/react/assets/createGameAssetStore.d.ts.map +1 -1
  371. package/lib/typescript/src/react/assets/useGameAssets.d.ts.map +1 -1
  372. package/lib/typescript/src/react/bindAppLifecycle.d.ts +7 -1
  373. package/lib/typescript/src/react/bindAppLifecycle.d.ts.map +1 -1
  374. package/lib/typescript/src/react/bindGameSession.d.ts.map +1 -1
  375. package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts +24 -0
  376. package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts.map +1 -0
  377. package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts +44 -0
  378. package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts.map +1 -0
  379. package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts +22 -0
  380. package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts.map +1 -0
  381. package/lib/typescript/src/react/cleanupList.d.ts +21 -0
  382. package/lib/typescript/src/react/cleanupList.d.ts.map +1 -0
  383. package/lib/typescript/src/react/instrumentation.d.ts +33 -3
  384. package/lib/typescript/src/react/instrumentation.d.ts.map +1 -1
  385. package/lib/typescript/src/react/lifecycleSource.d.ts +21 -0
  386. package/lib/typescript/src/react/lifecycleSource.d.ts.map +1 -0
  387. package/lib/typescript/src/react/particles/ParticleView.d.ts +65 -0
  388. package/lib/typescript/src/react/particles/ParticleView.d.ts.map +1 -0
  389. package/lib/typescript/src/react/particles/culling.d.ts +70 -0
  390. package/lib/typescript/src/react/particles/culling.d.ts.map +1 -0
  391. package/lib/typescript/src/react/particles/index.d.ts +7 -0
  392. package/lib/typescript/src/react/particles/index.d.ts.map +1 -0
  393. package/lib/typescript/src/react/particles/spriteXForm.d.ts +28 -0
  394. package/lib/typescript/src/react/particles/spriteXForm.d.ts.map +1 -0
  395. package/lib/typescript/src/react/particles/useParticlePresentation.d.ts +48 -0
  396. package/lib/typescript/src/react/particles/useParticlePresentation.d.ts.map +1 -0
  397. package/lib/typescript/src/react/pointerBinding.d.ts +38 -8
  398. package/lib/typescript/src/react/pointerBinding.d.ts.map +1 -1
  399. package/lib/typescript/src/react/pointerCamera.d.ts +20 -0
  400. package/lib/typescript/src/react/pointerCamera.d.ts.map +1 -0
  401. package/lib/typescript/src/react/pointerCoalescer.d.ts +17 -1
  402. package/lib/typescript/src/react/pointerCoalescer.d.ts.map +1 -1
  403. package/lib/typescript/src/react/sprites/GameSprite.d.ts +3 -10
  404. package/lib/typescript/src/react/sprites/GameSprite.d.ts.map +1 -1
  405. package/lib/typescript/src/react/sprites/GameWorld2D.d.ts +51 -6
  406. package/lib/typescript/src/react/sprites/GameWorld2D.d.ts.map +1 -1
  407. package/lib/typescript/src/react/sprites/Sprite.d.ts.map +1 -1
  408. package/lib/typescript/src/react/sprites/SpriteBatch.d.ts +22 -1
  409. package/lib/typescript/src/react/sprites/SpriteBatch.d.ts.map +1 -1
  410. package/lib/typescript/src/react/sprites/batchVisibility.d.ts +28 -0
  411. package/lib/typescript/src/react/sprites/batchVisibility.d.ts.map +1 -0
  412. package/lib/typescript/src/react/sprites/spriteSelection.d.ts +58 -0
  413. package/lib/typescript/src/react/sprites/spriteSelection.d.ts.map +1 -0
  414. package/lib/typescript/src/react/sprites/spriteTransform.d.ts +27 -12
  415. package/lib/typescript/src/react/sprites/spriteTransform.d.ts.map +1 -1
  416. package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts +69 -0
  417. package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts.map +1 -0
  418. package/lib/typescript/src/react/tilemap/tilePresentation.d.ts +217 -0
  419. package/lib/typescript/src/react/tilemap/tilePresentation.d.ts.map +1 -0
  420. package/lib/typescript/src/react/useGameSession.d.ts +48 -0
  421. package/lib/typescript/src/react/useGameSession.d.ts.map +1 -0
  422. package/lib/typescript/src/react/useGameSessionStatus.d.ts +23 -0
  423. package/lib/typescript/src/react/useGameSessionStatus.d.ts.map +1 -0
  424. package/lib/typescript/src/react/viewportBinding.d.ts +5 -1
  425. package/lib/typescript/src/react/viewportBinding.d.ts.map +1 -1
  426. package/lib/typescript/src/react.d.ts +18 -1
  427. package/lib/typescript/src/react.d.ts.map +1 -1
  428. package/lib/typescript/src/scene/defineScene.d.ts +22 -2
  429. package/lib/typescript/src/scene/defineScene.d.ts.map +1 -1
  430. package/lib/typescript/src/scene/types.d.ts +24 -4
  431. package/lib/typescript/src/scene/types.d.ts.map +1 -1
  432. package/lib/typescript/src/sprites/sampleSpriteClip.d.ts +26 -2
  433. package/lib/typescript/src/sprites/sampleSpriteClip.d.ts.map +1 -1
  434. package/lib/typescript/src/sprites/spriteAnimationState.d.ts +6 -7
  435. package/lib/typescript/src/sprites/spriteAnimationState.d.ts.map +1 -1
  436. package/lib/typescript/src/sprites.d.ts +10 -0
  437. package/lib/typescript/src/sprites.d.ts.map +1 -0
  438. package/lib/typescript/src/storage/adapters/asyncStorage.d.ts +18 -0
  439. package/lib/typescript/src/storage/adapters/asyncStorage.d.ts.map +1 -0
  440. package/lib/typescript/src/storage/adapters/memory.d.ts +16 -0
  441. package/lib/typescript/src/storage/adapters/memory.d.ts.map +1 -0
  442. package/lib/typescript/src/storage/errors.d.ts +37 -0
  443. package/lib/typescript/src/storage/errors.d.ts.map +1 -0
  444. package/lib/typescript/src/storage/index.d.ts +11 -0
  445. package/lib/typescript/src/storage/index.d.ts.map +1 -0
  446. package/lib/typescript/src/storage/schema.d.ts +22 -0
  447. package/lib/typescript/src/storage/schema.d.ts.map +1 -0
  448. package/lib/typescript/src/storage/serialization.d.ts +23 -0
  449. package/lib/typescript/src/storage/serialization.d.ts.map +1 -0
  450. package/lib/typescript/src/storage/store.d.ts +3 -0
  451. package/lib/typescript/src/storage/store.d.ts.map +1 -0
  452. package/lib/typescript/src/storage/types.d.ts +69 -0
  453. package/lib/typescript/src/storage/types.d.ts.map +1 -0
  454. package/lib/typescript/src/storage/validation.d.ts +24 -0
  455. package/lib/typescript/src/storage/validation.d.ts.map +1 -0
  456. package/lib/typescript/src/storage.d.ts +2 -0
  457. package/lib/typescript/src/storage.d.ts.map +1 -0
  458. package/lib/typescript/src/testing.d.ts +1 -0
  459. package/lib/typescript/src/testing.d.ts.map +1 -1
  460. package/lib/typescript/src/tilemap/chunkStats.d.ts +14 -0
  461. package/lib/typescript/src/tilemap/chunkStats.d.ts.map +1 -0
  462. package/lib/typescript/src/tilemap/definitions.d.ts +38 -0
  463. package/lib/typescript/src/tilemap/definitions.d.ts.map +1 -0
  464. package/lib/typescript/src/tilemap/errors.d.ts +7 -0
  465. package/lib/typescript/src/tilemap/errors.d.ts.map +1 -0
  466. package/lib/typescript/src/tilemap/index.d.ts +8 -0
  467. package/lib/typescript/src/tilemap/index.d.ts.map +1 -0
  468. package/lib/typescript/src/tilemap/movement.d.ts +52 -0
  469. package/lib/typescript/src/tilemap/movement.d.ts.map +1 -0
  470. package/lib/typescript/src/tilemap/queries.d.ts +21 -0
  471. package/lib/typescript/src/tilemap/queries.d.ts.map +1 -0
  472. package/lib/typescript/src/tilemap/tiledAdapter.d.ts +32 -0
  473. package/lib/typescript/src/tilemap/tiledAdapter.d.ts.map +1 -0
  474. package/lib/typescript/src/tilemap/types.d.ts +127 -0
  475. package/lib/typescript/src/tilemap/types.d.ts.map +1 -0
  476. package/lib/typescript/src/tilemap.d.ts +2 -0
  477. package/lib/typescript/src/tilemap.d.ts.map +1 -0
  478. package/package.json +100 -10
  479. package/src/assets/defineAssets.ts +31 -5
  480. package/src/assets.ts +27 -0
  481. package/src/audio/createGameAudio.ts +749 -0
  482. package/src/audio/errors.ts +12 -0
  483. package/src/audio/index.ts +9 -0
  484. package/src/audio/resolver.ts +74 -0
  485. package/src/audio/types.ts +47 -0
  486. package/src/audio.ts +13 -0
  487. package/src/camera2d/bounds.ts +69 -0
  488. package/src/camera2d/extents.ts +25 -0
  489. package/src/camera2d/follow.ts +165 -0
  490. package/src/camera2d/index.ts +29 -0
  491. package/src/camera2d/interpolation.ts +113 -0
  492. package/src/camera2d/shake.ts +90 -0
  493. package/src/camera2d/transform.ts +148 -0
  494. package/src/camera2d/types.ts +73 -0
  495. package/src/camera2d/validation.ts +126 -0
  496. package/src/camera2d/visibility.ts +181 -0
  497. package/src/camera2d.ts +6 -0
  498. package/src/collision2d/colliders.ts +292 -0
  499. package/src/collision2d/debug.ts +133 -0
  500. package/src/collision2d/filters.ts +48 -0
  501. package/src/collision2d/index.ts +74 -0
  502. package/src/collision2d/intersections.ts +82 -0
  503. package/src/collision2d/manifolds.ts +191 -0
  504. package/src/collision2d/segments.ts +176 -0
  505. package/src/collision2d/spatialHash.ts +211 -0
  506. package/src/collision2d/sweeps.ts +269 -0
  507. package/src/collision2d.ts +6 -0
  508. package/src/core/input/buttonPad.ts +235 -0
  509. package/src/core/input/createInputBuffer.ts +95 -14
  510. package/src/core/input/types.ts +7 -0
  511. package/src/core/session/createGameSession.ts +480 -53
  512. package/src/core/session/deepFreeze.ts +104 -3
  513. package/src/core/session/diagnostics.ts +2 -0
  514. package/src/core/session/types.ts +77 -4
  515. package/src/definition/defineGame.ts +61 -3
  516. package/src/definition/types.ts +10 -0
  517. package/src/events/defineGameEvents.ts +46 -0
  518. package/src/events/errors.ts +14 -0
  519. package/src/events/index.ts +14 -0
  520. package/src/events/payload.ts +234 -0
  521. package/src/events/seed.ts +33 -0
  522. package/src/events/types.ts +53 -0
  523. package/src/events.ts +20 -0
  524. package/src/geometry/helpers.ts +136 -0
  525. package/src/geometry/index.ts +14 -0
  526. package/src/geometry/types.ts +54 -0
  527. package/src/geometry/validation.ts +131 -0
  528. package/src/geometry.ts +6 -0
  529. package/src/haptics/createGameHaptics.ts +214 -0
  530. package/src/haptics/errors.ts +12 -0
  531. package/src/haptics/index.ts +3 -0
  532. package/src/haptics/resolver.ts +58 -0
  533. package/src/haptics/types.ts +48 -0
  534. package/src/haptics.ts +7 -0
  535. package/src/index.ts +37 -1
  536. package/src/particles/createParticleSystem.ts +505 -0
  537. package/src/particles/defineParticleEffect.ts +164 -0
  538. package/src/particles/errors.ts +6 -0
  539. package/src/particles/index.ts +5 -0
  540. package/src/particles/sampling.ts +141 -0
  541. package/src/particles/types.ts +327 -0
  542. package/src/particles.ts +1 -0
  543. package/src/react/GameButtonPad.tsx +436 -0
  544. package/src/react/GamePointerInput.tsx +73 -8
  545. package/src/react/GameView.tsx +160 -61
  546. package/src/react/assets/createGameAssetStore.ts +140 -107
  547. package/src/react/assets/useGameAssets.ts +63 -31
  548. package/src/react/bindAppLifecycle.ts +55 -19
  549. package/src/react/bindGameSession.ts +12 -2
  550. package/src/react/camera2d/GameLayer2D.tsx +43 -0
  551. package/src/react/camera2d/defineGameCamera2D.ts +59 -0
  552. package/src/react/camera2d/usePresentedCameraBinding.ts +185 -0
  553. package/src/react/cleanupList.ts +48 -0
  554. package/src/react/instrumentation.ts +31 -3
  555. package/src/react/lifecycleSource.ts +58 -0
  556. package/src/react/particles/ParticleView.tsx +358 -0
  557. package/src/react/particles/culling.ts +145 -0
  558. package/src/react/particles/index.ts +6 -0
  559. package/src/react/particles/spriteXForm.ts +72 -0
  560. package/src/react/particles/useParticlePresentation.ts +261 -0
  561. package/src/react/pointerBinding.ts +74 -16
  562. package/src/react/pointerCamera.ts +33 -0
  563. package/src/react/pointerCoalescer.ts +36 -10
  564. package/src/react/sprites/GameSprite.tsx +4 -33
  565. package/src/react/sprites/GameWorld2D.tsx +113 -7
  566. package/src/react/sprites/Sprite.tsx +51 -72
  567. package/src/react/sprites/SpriteBatch.tsx +74 -22
  568. package/src/react/sprites/batchVisibility.ts +76 -0
  569. package/src/react/sprites/spriteSelection.ts +133 -0
  570. package/src/react/sprites/spriteTransform.ts +46 -26
  571. package/src/react/tilemap/TileMapLayer2D.tsx +274 -0
  572. package/src/react/tilemap/tilePresentation.ts +491 -0
  573. package/src/react/useGameSession.ts +90 -0
  574. package/src/react/useGameSessionStatus.ts +53 -0
  575. package/src/react/viewportBinding.ts +5 -1
  576. package/src/react.ts +18 -1
  577. package/src/scene/defineScene.ts +47 -5
  578. package/src/scene/types.ts +37 -3
  579. package/src/sprites/sampleSpriteClip.ts +82 -14
  580. package/src/sprites/spriteAnimationState.ts +29 -25
  581. package/src/sprites.ts +22 -0
  582. package/src/storage/adapters/asyncStorage.ts +77 -0
  583. package/src/storage/adapters/memory.ts +58 -0
  584. package/src/storage/errors.ts +88 -0
  585. package/src/storage/index.ts +18 -0
  586. package/src/storage/schema.ts +147 -0
  587. package/src/storage/serialization.ts +248 -0
  588. package/src/storage/store.ts +380 -0
  589. package/src/storage/types.ts +76 -0
  590. package/src/storage/validation.ts +102 -0
  591. package/src/storage.ts +1 -0
  592. package/src/testing.ts +4 -0
  593. package/src/tilemap/chunkStats.ts +24 -0
  594. package/src/tilemap/definitions.ts +327 -0
  595. package/src/tilemap/errors.ts +11 -0
  596. package/src/tilemap/index.ts +10 -0
  597. package/src/tilemap/movement.ts +368 -0
  598. package/src/tilemap/queries.ts +136 -0
  599. package/src/tilemap/tiledAdapter.ts +165 -0
  600. package/src/tilemap/types.ts +119 -0
  601. package/src/tilemap.ts +1 -0
@@ -12,12 +12,22 @@
12
12
  * - `acquire` resolves only with a complete usable lease.
13
13
  * - Reference counts keep a shared source alive across leases; the native
14
14
  * handle is disposed exactly once when the final lease releases it.
15
+ * - Each reference token releases exactly once, decrements its captured
16
+ * entry (never a fresh URI lookup), and only removes the cache mapping
17
+ * when the mapping still holds that exact entry (GS-ASSET-01/02).
18
+ * - Each acquisition stage has one cleanup owner: a reference transfers to
19
+ * the attempt only after successful validation, so a failed validation
20
+ * releases exactly once and never touches another owner's reference.
15
21
  * - A failed/abandoned attempt releases every handle it acquired; entries
16
22
  * still leased elsewhere are preserved.
17
- * - Attempts carry an epoch token: stale completion after retry/unmount is
18
- * ignored and can never double-dispose.
23
+ * - Stale completion after retry/unmount is rejected by the caller's abort
24
+ * signal and the store's disposed flag; late decodes dispose their own
25
+ * handle without touching a successor entry.
19
26
  * - `AbortSignal` detaches an imperative caller immediately; late results
20
27
  * from the underlying work are ignored.
28
+ * - Abort/disposed state is checked after the final awaited step and before
29
+ * the lease is published, so an abort racing completion never surfaces
30
+ * a lease for a cancelled request.
21
31
  * - Progress is monotonic and counts requested logical resources (a
22
32
  * deduplicated source still counts once per logical descriptor).
23
33
  * - The store rejects acquisitions after disposal; disposal is idempotent.
@@ -32,6 +42,9 @@ import { GameAssetError as AssetStoreError } from "../../assets/errors.js";
32
42
 
33
43
  /** Acquisition options for `acquire`. */
34
44
 
45
+ /** References owned by one in-progress acquisition (GS-ASSET-04: no epoch
46
+ * token — staleness is decided by the caller's abort signal, not a counter). */
47
+
35
48
  /** One idempotent ownership token: release() is safe to call repeatedly and
36
49
  * disposes the native handle when it is the final reference (RF5). */
37
50
 
@@ -64,10 +77,8 @@ function validateFrames(path, frames, width, height) {
64
77
  export function createGameAssetStoreCore(manifest, pipelines) {
65
78
  const groups = new Set(Object.keys(manifest));
66
79
  const logical = logicalAssetsOf(manifest);
67
- const byKey = new Map(logical.map(asset => [asset.key, asset]));
68
80
  const resources = new Map();
69
81
  let disposed = false;
70
- let nextAttemptToken = 1;
71
82
  /** Per-attempt ownership is explicit: the attempt object is passed through
72
83
  * every resolve/decode/validate operation; no shared singleton (R4). */
73
84
 
@@ -100,67 +111,69 @@ export function createGameAssetStoreCore(manifest, pipelines) {
100
111
  });
101
112
  }
102
113
 
103
- /** Drop one reference held by a caller that never recorded a logical key. */
104
- function dropResourceRef(uri) {
105
- const entry = resources.get(uri);
106
- if (entry === undefined) {
107
- return;
108
- }
114
+ /**
115
+ * Drop one reference to the captured entry (GS-ASSET-01/02). The entry
116
+ * object — not a fresh URI lookup — is decremented, and the cache mapping
117
+ * is removed only when it still holds this exact entry, so a stale token
118
+ * can never affect a successor generation for the same URI.
119
+ */
120
+ function dropResourceRef(entry) {
109
121
  entry.refCount -= 1;
110
122
  if (entry.refCount <= 0) {
111
123
  if (entry.handle !== undefined) {
112
124
  entry.handle.dispose();
113
125
  }
114
- resources.delete(uri);
126
+ if (resources.get(entry.uri) === entry) {
127
+ resources.delete(entry.uri);
128
+ }
115
129
  }
116
130
  }
117
131
 
118
132
  /**
119
- * Begin one owned reference to a resource. Every waiter — cache miss,
120
- * in-flight share, or completed cache hit — goes through this single
121
- * accounting path and receives an idempotent release closure (RF5). The
122
- * caller must either commit the ref to the attempt or call release()
123
- * exactly once; the final release disposes the native handle.
133
+ * Begin one owned reference to a resource (GS-ASSET-01). Every waiter —
134
+ * cache miss, in-flight share, or completed cache hit — goes through this
135
+ * single accounting path and receives a token bound to the exact entry
136
+ * object. The token releases exactly once: a flag guards the decrement,
137
+ * so a validation failure (released by its stage) followed by attempt
138
+ * cleanup (releasing the attempt's tokens) can never double-release.
139
+ * The caller must either transfer the token to the attempt or let its
140
+ * owning stage release it exactly once; the final release disposes the
141
+ * native handle.
124
142
  */
125
143
  function beginResourceRef(uri) {
126
144
  const existing = resources.get(uri);
127
- let entry;
128
145
  if (existing !== undefined && existing.handle !== undefined) {
129
146
  // Completed cache hit.
130
- entry = existing;
131
- entry.refCount += 1;
132
- const handle = existing.handle;
147
+ existing.refCount += 1;
133
148
  return {
134
- release: () => dropResourceRef(uri),
135
- ready: async () => handle
149
+ ref: idempotentRef(existing),
150
+ entry: existing
136
151
  };
137
152
  }
138
153
  if (existing !== undefined && existing.inFlight !== undefined) {
139
154
  // Shared in-flight decode.
140
- entry = existing;
141
- entry.refCount += 1;
142
- const shared = existing.inFlight;
155
+ existing.refCount += 1;
143
156
  return {
144
- release: () => dropResourceRef(uri),
145
- ready: async () => shared
157
+ ref: idempotentRef(existing),
158
+ entry: existing
146
159
  };
147
160
  }
148
161
  // Cache miss: this waiter starts the decode.
149
- entry = {
162
+ const entry = {
150
163
  uri,
151
164
  handle: undefined,
152
165
  inFlight: undefined,
153
- logicalKeys: new Set(),
154
166
  refCount: 1
155
167
  };
156
168
  resources.set(uri, entry);
157
169
  const promise = (async () => {
158
170
  const handle = await pipelines.decode(uri);
159
171
  // A late completion must never resurrect a disposed store or an entry
160
- // whose last waiter aborted while the decode was in flight.
172
+ // whose last waiter aborted while the decode was in flight. Identity
173
+ // matters here too: the mapping may now hold a successor entry.
161
174
  if (disposed || entry.refCount <= 0) {
162
175
  handle.dispose();
163
- if (entry.refCount <= 0) {
176
+ if (entry.refCount <= 0 && resources.get(uri) === entry) {
164
177
  resources.delete(uri);
165
178
  }
166
179
  throw new AssetStoreError('ASSET_ABORTED', [], 'asset acquisition aborted');
@@ -169,34 +182,69 @@ export function createGameAssetStoreCore(manifest, pipelines) {
169
182
  return handle;
170
183
  })();
171
184
  entry.inFlight = promise;
172
- void promise.then(() => {
173
- entry.inFlight = undefined;
174
- }, () => {
175
- entry.inFlight = undefined;
176
- });
185
+ const cleanup = () => {
186
+ if (entry.inFlight === promise) {
187
+ entry.inFlight = undefined;
188
+ }
189
+ };
190
+ promise.then(cleanup, cleanup);
191
+ const ref = idempotentRef(entry);
192
+ return {
193
+ ref,
194
+ entry
195
+ };
196
+ }
197
+
198
+ /** One release closure bound to its entry; safe to call repeatedly. */
199
+ function idempotentRef(entry) {
200
+ let released = false;
201
+ const ready = async () => {
202
+ if (entry.handle !== undefined) {
203
+ return entry.handle;
204
+ }
205
+ const inFlight = entry.inFlight;
206
+ if (inFlight === undefined) {
207
+ throw new AssetStoreError('ASSET_DECODE_FAILED', [], `resource ${JSON.stringify(entry.uri)} has no decoded handle`);
208
+ }
209
+ return inFlight;
210
+ };
177
211
  return {
178
- release: () => dropResourceRef(uri),
179
- ready: async () => promise
212
+ release: () => {
213
+ if (released) {
214
+ return;
215
+ }
216
+ released = true;
217
+ dropResourceRef(entry);
218
+ },
219
+ ready
180
220
  };
181
221
  }
222
+
223
+ /**
224
+ * Acquire one logical asset (GS-ASSET-01). This stage owns its reference
225
+ * until successful validation transfers it to the attempt: on any
226
+ * failure the stage releases exactly once and the token never enters
227
+ * `attempt.acquired`, so attempt cleanup can never release it again.
228
+ * Returns the exact entry backing this asset for the lease table.
229
+ */
182
230
  async function acquireOne(asset, attempt, signal) {
183
231
  const uri = await raceWithAbort(pipelines.resolve(asset.descriptor.source), signal);
184
232
  // RF5: the reference token exists before any cancellable await; abort
185
233
  // can never leave a positive reference behind.
186
- const ref = beginResourceRef(uri);
234
+ const {
235
+ ref,
236
+ entry
237
+ } = beginResourceRef(uri);
187
238
  try {
188
239
  const handle = await raceWithAbort(ref.ready(), signal);
189
- attempt.acquired.push(ref);
190
- const entry = resources.get(uri);
191
- if (entry !== undefined) {
192
- entry.logicalKeys.add(asset.key);
193
- }
194
240
  if (asset.descriptor.kind === 'sprite-sheet') {
195
241
  validateFrames([asset.group, asset.name, 'frames'], asset.descriptor.frames, handle.width(), handle.height());
196
242
  }
243
+ // Transfer ownership to the attempt only after validation succeeds.
244
+ attempt.acquired.push(ref);
245
+ return entry;
197
246
  } catch (error) {
198
- // Every failure, abort, and stale completion releases this waiter's
199
- // reference exactly once; surviving owners keep theirs.
247
+ // The single owner releases exactly once; surviving owners keep theirs.
200
248
  ref.release();
201
249
  throw error;
202
250
  }
@@ -232,10 +280,7 @@ export function createGameAssetStoreCore(manifest, pipelines) {
232
280
  options.onProgress?.(1);
233
281
  return createLease(new Map(), () => undefined);
234
282
  }
235
- const token = nextAttemptToken;
236
- nextAttemptToken += 1;
237
283
  const attempt = {
238
- token,
239
284
  acquired: []
240
285
  };
241
286
  const loaded = new Map();
@@ -244,11 +289,17 @@ export function createGameAssetStoreCore(manifest, pipelines) {
244
289
  const total = requested.length;
245
290
  for (const asset of requested) {
246
291
  throwIfAborted();
247
- await acquireOne(asset, attempt, signal);
248
- loaded.set(asset.key, asset.key);
292
+ const entry = await acquireOne(asset, attempt, signal);
293
+ loaded.set(asset.key, {
294
+ asset,
295
+ entry
296
+ });
249
297
  completed += 1;
250
298
  options.onProgress?.(completed / total);
251
299
  }
300
+ // GS-ASSET-02: an abort racing the final step must surface instead of
301
+ // publishing a lease for a cancelled request.
302
+ throwIfAborted();
252
303
  return createLease(loaded, () => {
253
304
  for (const ref of attempt.acquired) {
254
305
  ref.release();
@@ -263,14 +314,47 @@ export function createGameAssetStoreCore(manifest, pipelines) {
263
314
  throw error;
264
315
  }
265
316
  };
266
- function createLease(loadedKeys, onDispose) {
317
+
318
+ /**
319
+ * Build one validated loaded value from the exact entry that backed the
320
+ * acquisition (GS-ASSET-04). The handle is always present: `ready()` only
321
+ * resolves after the entry's handle is set.
322
+ */
323
+ function loadedValueFor(asset, entry) {
324
+ const handle = entry.handle;
325
+ if (handle === undefined) {
326
+ // Defensive: reachable only if the store's own accounting is broken.
327
+ // Fail clearly rather than publishing an imageless loaded value.
328
+ throw new AssetStoreError('ASSET_DECODE_FAILED', [asset.group, asset.name], `resource ${JSON.stringify(entry.uri)} resolved without a decoded handle`);
329
+ }
330
+ if (asset.descriptor.kind === 'image') {
331
+ return {
332
+ descriptor: asset.descriptor,
333
+ width: handle.width(),
334
+ height: handle.height(),
335
+ image: handle
336
+ };
337
+ }
338
+ return {
339
+ descriptor: asset.descriptor,
340
+ frames: asset.descriptor.frames,
341
+ width: handle.width(),
342
+ height: handle.height(),
343
+ image: handle
344
+ };
345
+ }
346
+ function createLease(loaded, onDispose) {
267
347
  let leaseDisposed = false;
268
- const loaded = new Map();
269
- for (const key of loadedKeys.keys()) {
270
- const asset = byKey.get(key);
271
- if (asset !== undefined) {
272
- loaded.set(key, asset);
273
- }
348
+ // GS-ASSET-04: the lease holds a direct descriptor→validated value
349
+ // table built once from the captured entries. Lookup is a single map
350
+ // hit: no per-get scans of loaded descriptors or resource key sets,
351
+ // and no wrapper allocated per call.
352
+ const table = new Map();
353
+ for (const {
354
+ asset,
355
+ entry
356
+ } of loaded.values()) {
357
+ table.set(asset.descriptor, loadedValueFor(asset, entry));
274
358
  }
275
359
  const assets = {
276
360
  manifest,
@@ -279,8 +363,8 @@ export function createGameAssetStoreCore(manifest, pipelines) {
279
363
  if (leaseDisposed) {
280
364
  throw new AssetStoreError('ASSET_STORE_DISPOSED', [], 'lease is disposed');
281
365
  }
282
- const entry = findLoadedFor(descriptor, loaded);
283
- if (entry === undefined) {
366
+ const value = table.get(descriptor);
367
+ if (value === undefined) {
284
368
  // R9: v1 lookup is descriptor-reference membership — the exact
285
369
  // descriptor object the manifest declared — not a nominal manifest
286
370
  // identity. Identically shaped manifests share the structural type,
@@ -288,7 +372,7 @@ export function createGameAssetStoreCore(manifest, pipelines) {
288
372
  // check is the guarantee.
289
373
  throw new GameAssetError('ASSET_UNKNOWN_ASSET', [], 'descriptor is not a reference declared by this manifest and group selection');
290
374
  }
291
- return entry;
375
+ return value;
292
376
  }
293
377
  };
294
378
  return {
@@ -302,40 +386,6 @@ export function createGameAssetStoreCore(manifest, pipelines) {
302
386
  }
303
387
  };
304
388
  }
305
- function findLoadedFor(descriptor, loaded) {
306
- for (const asset of loaded.values()) {
307
- if (asset.descriptor === descriptor) {
308
- const entry = entryFor(asset.key);
309
- const handle = entry?.handle;
310
- const width = handle?.width() ?? 0;
311
- const height = handle?.height() ?? 0;
312
- if (asset.descriptor.kind === 'image') {
313
- return {
314
- descriptor: asset.descriptor,
315
- width,
316
- height,
317
- image: handle
318
- };
319
- }
320
- return {
321
- descriptor: asset.descriptor,
322
- frames: asset.descriptor.frames,
323
- width,
324
- height,
325
- image: handle
326
- };
327
- }
328
- }
329
- return undefined;
330
- }
331
- function entryFor(logicalKey) {
332
- for (const entry of resources.values()) {
333
- if (entry.logicalKeys.has(logicalKey)) {
334
- return entry;
335
- }
336
- }
337
- return undefined;
338
- }
339
389
  return {
340
390
  acquire,
341
391
  dispose: () => {
@@ -1 +1 @@
1
- {"version":3,"names":["GameAssetError","validateFrameRect","AssetStoreError","logicalAssetsOf","manifest","result","group","assets","Object","entries","name","descriptor","push","key","validateFrames","path","frames","width","height","rect","x","y","JSON","stringify","createGameAssetStoreCore","pipelines","groups","Set","keys","logical","byKey","Map","map","asset","resources","disposed","nextAttemptToken","assertLive","raceWithAbort","promise","signal","undefined","Promise","resolve","reject","onAbort","addEventListener","once","then","value","removeEventListener","error","dropResourceRef","uri","entry","get","refCount","handle","dispose","delete","beginResourceRef","existing","release","ready","inFlight","shared","logicalKeys","set","decode","acquireOne","attempt","source","ref","acquired","add","kind","acquire","options","throwIfAborted","aborted","groupsNormalized","requested","has","length","onProgress","createLease","token","loaded","completed","total","loadedKeys","onDispose","leaseDisposed","findLoadedFor","values","entryFor","image","logicalKey","isDisposed"],"sourceRoot":"../../../../src","sources":["react/assets/createGameAssetStore.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["GameAssetError","validateFrameRect","AssetStoreError","logicalAssetsOf","manifest","result","group","assets","Object","entries","name","descriptor","push","key","validateFrames","path","frames","width","height","rect","x","y","JSON","stringify","createGameAssetStoreCore","pipelines","groups","Set","keys","logical","resources","Map","disposed","assertLive","raceWithAbort","promise","signal","undefined","Promise","resolve","reject","onAbort","addEventListener","once","then","value","removeEventListener","error","dropResourceRef","entry","refCount","handle","dispose","get","uri","delete","beginResourceRef","existing","ref","idempotentRef","inFlight","set","decode","cleanup","released","ready","release","acquireOne","asset","attempt","source","kind","acquired","acquire","options","throwIfAborted","aborted","groupsNormalized","requested","has","length","onProgress","createLease","loaded","completed","total","loadedValueFor","image","onDispose","leaseDisposed","table","values","isDisposed"],"sourceRoot":"../../../../src","sources":["react/assets/createGameAssetStore.ts"],"mappings":"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","ignoreList":[]}
@@ -15,12 +15,18 @@
15
15
  * Lifecycle:
16
16
  * - The requested group list is normalized (sorted) so a recreated
17
17
  * equivalent array does not reload.
18
+ * - Every render executes all hooks unconditionally; when the rendered
19
+ * request differs from the state's request, the hook exposes a fresh
20
+ * loading view synchronously instead of a stale ready lease (GS-ASSET-03).
21
+ * - Request identity combines manifest identity, factory identity,
22
+ * normalized groups, and retry attempt, so a new manifest with identical
23
+ * group names can never expose the previous manifest's lease.
18
24
  * - Retry starts a new attempt; late completion from an older attempt can
19
25
  * never replace the new state.
20
26
  * - Unmount invalidates the attempt, releases the lease, and disposes the
21
27
  * store — hook-owned resources are released exactly once.
22
28
  */
23
- import { useCallback, useEffect, useRef, useState } from 'react';
29
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
24
30
  import { GameAssetError } from "../../assets/errors.js";
25
31
 
26
32
  /** The store surface the hook needs, kept generic over the manifest. */
@@ -48,6 +54,22 @@ export function dedupeGroups(groups) {
48
54
  return [...new Set(groups)].sort();
49
55
  }
50
56
 
57
+ /** Stable numeric identities for request participants (GS-ASSET-03): object
58
+ * identity, so a new manifest object with identical group names is a new
59
+ * request even when every group string matches. */
60
+ const manifestIdentities = new WeakMap();
61
+ const factoryIdentities = new WeakMap();
62
+ let nextParticipantId = 1;
63
+ function participantId(table, value) {
64
+ let id = table.get(value);
65
+ if (id === undefined) {
66
+ id = nextParticipantId;
67
+ nextParticipantId += 1;
68
+ table.set(value, id);
69
+ }
70
+ return id;
71
+ }
72
+
51
73
  /** Order-independent group key: equivalent arrays map to one key. */
52
74
  export function stableGroupsKey(groups) {
53
75
  return dedupeGroups(groups).join('\u0000');
@@ -55,11 +77,20 @@ export function stableGroupsKey(groups) {
55
77
  export function useGameAssets(manifest, options, storeFactory) {
56
78
  const groupsKey = stableGroupsKey(options.groups);
57
79
  const [attempt, setAttempt] = useState(0);
80
+ // A memoized normalized array: stable across equivalent recreated group
81
+ // arrays, so the effect below never reloads for one (R6).
82
+ const normalizedGroups = useMemo(() => dedupeGroups(options.groups), [groupsKey]);
83
+ // `??` selects a reference, never a new closure, so the default factory
84
+ // keeps a stable identity across renders.
85
+ const factory = storeFactory ?? defaultStoreFactory;
86
+ // GS-ASSET-03/04: the full request identity. Manifest and factory use
87
+ // object identity; groups are normalized; the attempt drives retries.
88
+ const requestKey = `${participantId(manifestIdentities, manifest)}:` + `${participantId(factoryIdentities, factory)}:${groupsKey}:${attempt}`;
58
89
  const [state, setState] = useState({
59
90
  status: 'loading',
60
91
  progress: 0,
61
92
  retry: () => undefined,
62
- requestKey: groupsKey
93
+ requestKey
63
94
  });
64
95
  const storeRef = useRef(undefined);
65
96
  const leaseRef = useRef(undefined);
@@ -68,32 +99,15 @@ export function useGameAssets(manifest, options, storeFactory) {
68
99
  // identity is exposed in loading and error states.
69
100
  setAttempt(current => current + 1);
70
101
  }, []);
71
-
72
- // Ref mirror of the attempt so stale-effect completions are rejected
73
- // after a retry re-renders with a higher attempt.
74
- const attemptRef = useRef(attempt);
75
- attemptRef.current = attempt;
76
-
77
- // RF7: if the rendered request differs from the state's request, expose
78
- // loading synchronously instead of the previous ready lease — the old
79
- // lease is disposed by the effect cleanup, so no consumer can observe it
80
- // under the new request.
81
- if (state.requestKey !== groupsKey && state.status === 'ready') {
82
- return {
83
- status: 'loading',
84
- progress: 0,
85
- retry,
86
- requestKey: groupsKey
87
- };
88
- }
89
102
  useEffect(() => {
90
- const store = (storeFactory ?? defaultStoreFactory)(manifest);
103
+ const store = factory(manifest);
91
104
  storeRef.current = store;
105
+ // Per-effect invalidation (GS-ASSET-03): cleanup sets `disposed` before
106
+ // any newer effect runs, so stale completions are rejected without a
107
+ // render-time ref mutation standing in for ownership.
92
108
  let disposed = false;
93
- const attemptAtStart = attempt;
94
- const isCurrent = () => attemptRef.current === attemptAtStart;
95
109
  const setIfCurrent = updater => {
96
- if (!disposed && isCurrent()) {
110
+ if (!disposed) {
97
111
  setState(updater);
98
112
  }
99
113
  };
@@ -105,19 +119,19 @@ export function useGameAssets(manifest, options, storeFactory) {
105
119
  status: 'loading',
106
120
  progress: 0,
107
121
  retry: retry,
108
- requestKey: groupsKey
122
+ requestKey
109
123
  });
110
124
  store.acquire({
111
- groups: dedupeGroups(options.groups),
125
+ groups: normalizedGroups,
112
126
  signal: controller.signal,
113
127
  onProgress: progress => {
114
- setIfCurrent(previous => previous.status === 'loading' ? {
128
+ setIfCurrent(previous => previous.status === 'loading' && previous.requestKey === requestKey ? {
115
129
  ...previous,
116
130
  progress
117
131
  } : previous);
118
132
  }
119
133
  }).then(lease => {
120
- if (disposed || !isCurrent()) {
134
+ if (disposed) {
121
135
  // Stale completion (retry/unmount): release immediately.
122
136
  lease.dispose();
123
137
  return;
@@ -127,10 +141,10 @@ export function useGameAssets(manifest, options, storeFactory) {
127
141
  setState({
128
142
  status: 'ready',
129
143
  assets: lease.assets,
130
- requestKey: groupsKey
144
+ requestKey
131
145
  });
132
146
  }).catch(error => {
133
- if (disposed || !isCurrent()) {
147
+ if (disposed) {
134
148
  return;
135
149
  }
136
150
  const structured = error instanceof GameAssetError ? error : new GameAssetError('ASSET_DECODE_FAILED', [], error instanceof Error ? error.message : String(error));
@@ -138,7 +152,7 @@ export function useGameAssets(manifest, options, storeFactory) {
138
152
  status: 'error',
139
153
  error: structured,
140
154
  retry,
141
- requestKey: groupsKey
155
+ requestKey
142
156
  });
143
157
  });
144
158
  return () => {
@@ -151,10 +165,21 @@ export function useGameAssets(manifest, options, storeFactory) {
151
165
  storeRef.current = undefined;
152
166
  store.dispose();
153
167
  };
154
- // The groups key is order-independent, so a recreated equivalent array
155
- // does not reload; the attempt state drives retries. The store factory
156
- // is the internal test seam and must be stable across renders.
157
- }, [attempt, groupsKey, manifest, storeFactory]);
168
+ // The effect re-runs only when the request identity (or its stable
169
+ // derivatives) changes; equivalent recreated group arrays do not reload.
170
+ }, [requestKey, manifest, factory, normalizedGroups, groupsKey, retry]);
171
+
172
+ // GS-ASSET-03: every hook above runs unconditionally. When the rendered
173
+ // request differs from the state's request, expose a fresh loading view
174
+ // synchronously — never a stale ready lease, error, or progress.
175
+ if (state.requestKey !== requestKey) {
176
+ return {
177
+ status: 'loading',
178
+ progress: 0,
179
+ retry,
180
+ requestKey
181
+ };
182
+ }
158
183
  return state;
159
184
  }
160
185
  //# sourceMappingURL=useGameAssets.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useState","GameAssetError","defaultStoreFactory","manifest","createGameAssetStore","require","dedupeGroups","groups","Set","sort","stableGroupsKey","join","useGameAssets","options","storeFactory","groupsKey","attempt","setAttempt","state","setState","status","progress","retry","undefined","requestKey","storeRef","leaseRef","current","attemptRef","store","disposed","attemptAtStart","isCurrent","setIfCurrent","updater","controller","AbortController","acquire","signal","onProgress","previous","then","lease","dispose","assets","catch","error","structured","Error","message","String","abort"],"sourceRoot":"../../../../src","sources":["react/assets/useGameAssets.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEhE,SAASC,cAAc,QAAQ,wBAAqB;;AAIpD;;AAMA;AACA;AACA;AACA;AACA;AACA,SAASC,mBAAmBA,CAC1BC,QAAmB,EACG;EACtB;EACA,MAAM;IAAEC;EAAqB,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAE3D;EACD,OAAOD,oBAAoB,CAACD,QAAQ,CAAC;AACvC;;AAEA;AACA;AACA;;AAMA;AACA;AACA,OAAO,SAASG,YAAYA,CAACC,MAAyB,EAAqB;EACzE,OAAO,CAAC,GAAG,IAAIC,GAAG,CAACD,MAAM,CAAC,CAAC,CAACE,IAAI,CAAC,CAAC;AACpC;;AAEA;AACA,OAAO,SAASC,eAAeA,CAACH,MAAyB,EAAU;EACjE,OAAOD,YAAY,CAACC,MAAM,CAAC,CAACI,IAAI,CAAC,QAAQ,CAAC;AAC5C;AAEA,OAAO,SAASC,aAAaA,CAC3BT,QAAmB,EACnBU,OAA2E,EAC3EC,YAA4D,EAChC;EAC5B,MAAMC,SAAS,GAAGL,eAAe,CAACG,OAAO,CAACN,MAAM,CAAC;EACjD,MAAM,CAACS,OAAO,EAAEC,UAAU,CAAC,GAAGjB,QAAQ,CAAC,CAAC,CAAC;EACzC,MAAM,CAACkB,KAAK,EAAEC,QAAQ,CAAC,GAAGnB,QAAQ,CAA6B;IAC7DoB,MAAM,EAAE,SAAS;IACjBC,QAAQ,EAAE,CAAC;IACXC,KAAK,EAAEA,CAAA,KAAMC,SAAS;IACtBC,UAAU,EAAET;EACd,CAAC,CAAC;EACF,MAAMU,QAAQ,GAAG1B,MAAM,CAAmCwB,SAAS,CAAC;EACpE,MAAMG,QAAQ,GAAG3B,MAAM,CAAwCwB,SAAS,CAAC;EACzE,MAAMD,KAAK,GAAGzB,WAAW,CAAC,MAAM;IAC9B;IACA;IACAoB,UAAU,CAAEU,OAAO,IAAKA,OAAO,GAAG,CAAC,CAAC;EACtC,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA;EACA,MAAMC,UAAU,GAAG7B,MAAM,CAACiB,OAAO,CAAC;EAClCY,UAAU,CAACD,OAAO,GAAGX,OAAO;;EAE5B;EACA;EACA;EACA;EACA,IAAIE,KAAK,CAACM,UAAU,KAAKT,SAAS,IAAIG,KAAK,CAACE,MAAM,KAAK,OAAO,EAAE;IAC9D,OAAO;MAAEA,MAAM,EAAE,SAAS;MAAEC,QAAQ,EAAE,CAAC;MAAEC,KAAK;MAAEE,UAAU,EAAET;IAAU,CAAC;EACzE;EAEAjB,SAAS,CAAC,MAAM;IACd,MAAM+B,KAAK,GAAG,CAACf,YAAY,IAAIZ,mBAAmB,EAAEC,QAAQ,CAAC;IAC7DsB,QAAQ,CAACE,OAAO,GAAGE,KAAK;IACxB,IAAIC,QAAQ,GAAG,KAAK;IACpB,MAAMC,cAAc,GAAGf,OAAO;IAC9B,MAAMgB,SAAS,GAAGA,CAAA,KAAeJ,UAAU,CAACD,OAAO,KAAKI,cAAc;IACtE,MAAME,YAAY,GAAIC,OAA6E,IAAW;MAC5G,IAAI,CAACJ,QAAQ,IAAIE,SAAS,CAAC,CAAC,EAAE;QAC5Bb,QAAQ,CAACe,OAAO,CAAC;MACnB;IACF,CAAC;;IAED;IACA;IACA,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;IAExCjB,QAAQ,CAAC;MACPC,MAAM,EAAE,SAAS;MACjBC,QAAQ,EAAE,CAAC;MACXC,KAAK,EAAEA,KAAK;MACZE,UAAU,EAAET;IACd,CAAC,CAAC;IAEFc,KAAK,CACFQ,OAAO,CAAC;MACP9B,MAAM,EAAED,YAAY,CAACO,OAAO,CAACN,MAAM,CAAC;MACpC+B,MAAM,EAAEH,UAAU,CAACG,MAAM;MACzBC,UAAU,EAAGlB,QAAQ,IAAK;QACxBY,YAAY,CAAEO,QAAQ,IACpBA,QAAQ,CAACpB,MAAM,KAAK,SAAS,GAAG;UAAE,GAAGoB,QAAQ;UAAEnB;QAAS,CAAC,GAAGmB,QAC9D,CAAC;MACH;IACF,CAAC,CAAC,CACDC,IAAI,CAAEC,KAAK,IAAK;MACf,IAAIZ,QAAQ,IAAI,CAACE,SAAS,CAAC,CAAC,EAAE;QAC5B;QACAU,KAAK,CAACC,OAAO,CAAC,CAAC;QACf;MACF;MACAjB,QAAQ,CAACC,OAAO,EAAEgB,OAAO,CAAC,CAAC;MAC3BjB,QAAQ,CAACC,OAAO,GAAGe,KAAK;MACxBvB,QAAQ,CAAC;QAAEC,MAAM,EAAE,OAAO;QAAEwB,MAAM,EAAEF,KAAK,CAACE,MAAM;QAAEpB,UAAU,EAAET;MAAU,CAAC,CAAC;IAC5E,CAAC,CAAC,CACD8B,KAAK,CAAEC,KAAc,IAAK;MACzB,IAAIhB,QAAQ,IAAI,CAACE,SAAS,CAAC,CAAC,EAAE;QAC5B;MACF;MACA,MAAMe,UAAU,GACdD,KAAK,YAAY7C,cAAc,GAC3B6C,KAAK,GACL,IAAI7C,cAAc,CAAC,qBAAqB,EAAE,EAAE,EAAE6C,KAAK,YAAYE,KAAK,GAAGF,KAAK,CAACG,OAAO,GAAGC,MAAM,CAACJ,KAAK,CAAC,CAAC;MAC3G3B,QAAQ,CAAC;QAAEC,MAAM,EAAE,OAAO;QAAE0B,KAAK,EAAEC,UAAU;QAAEzB,KAAK;QAAEE,UAAU,EAAET;MAAU,CAAC,CAAC;IAChF,CAAC,CAAC;IAEJ,OAAO,MAAM;MACXe,QAAQ,GAAG,IAAI;MACf;MACA;MACAK,UAAU,CAACgB,KAAK,CAAC,CAAC;MAClBzB,QAAQ,CAACC,OAAO,EAAEgB,OAAO,CAAC,CAAC;MAC3BjB,QAAQ,CAACC,OAAO,GAAGJ,SAAS;MAC5BE,QAAQ,CAACE,OAAO,GAAGJ,SAAS;MAC5BM,KAAK,CAACc,OAAO,CAAC,CAAC;IACjB,CAAC;IACD;IACA;IACA;EACF,CAAC,EAAE,CAAC3B,OAAO,EAAED,SAAS,EAAEZ,QAAQ,EAAEW,YAAY,CAAC,CAAC;EAEhD,OAAOI,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","GameAssetError","defaultStoreFactory","manifest","createGameAssetStore","require","dedupeGroups","groups","Set","sort","manifestIdentities","WeakMap","factoryIdentities","nextParticipantId","participantId","table","value","id","get","undefined","set","stableGroupsKey","join","useGameAssets","options","storeFactory","groupsKey","attempt","setAttempt","normalizedGroups","factory","requestKey","state","setState","status","progress","retry","storeRef","leaseRef","current","store","disposed","setIfCurrent","updater","controller","AbortController","acquire","signal","onProgress","previous","then","lease","dispose","assets","catch","error","structured","Error","message","String","abort"],"sourceRoot":"../../../../src","sources":["react/assets/useGameAssets.ts"],"mappings":"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","ignoreList":[]}