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
@@ -6,25 +6,63 @@
6
6
  * Pure, allocation-free, worklet-compatible frame selection. The same clip
7
7
  * metadata and elapsed time always select the same frame, so equivalent
8
8
  * game time produces identical presentation at 30/60/90/120 Hz.
9
+ *
10
+ * Single-contract rule (GS-ANIMATION-01): every renderer path resolves
11
+ * frames through these helpers — never duplicated arithmetic. Negative
12
+ * elapsed clamps uniformly (loops wrap, one-shots pin to frame zero);
13
+ * non-finite elapsed, empty clips, and non-positive durations fail clearly
14
+ * instead of masking invalid data as frame zero. Unknown clip names throw
15
+ * a plain `[ASSET_UNKNOWN_CLIP]` error: the UI-reachable call graph must
16
+ * stay free of error-class construction so failure branches execute on the
17
+ * UI runtime exactly as they do headlessly (GS-ANIMATION-02).
9
18
  */
10
19
 
20
+ /** Reject elapsed values the sampler cannot define a frame for. */
21
+ function assertFiniteElapsed(elapsedMs) {
22
+ 'worklet';
23
+
24
+ if (typeof elapsedMs !== 'number' || !Number.isFinite(elapsedMs)) {
25
+ throw new Error(`sprite clip elapsed time must be a finite number of milliseconds, got ${String(elapsedMs)}`);
26
+ }
27
+ }
28
+
29
+ /** Reject clips with no selectable frame or no positive pace. */
30
+ function assertSelectableClip(clip) {
31
+ 'worklet';
32
+
33
+ const frameCount = clip.frames.length;
34
+ const duration = clip.frameDurationMs;
35
+ if (frameCount === 0) {
36
+ throw new Error('sprite clip must reference at least one frame');
37
+ }
38
+ if (typeof duration !== 'number' || !Number.isFinite(duration) || duration <= 0) {
39
+ throw new Error(`sprite clip frame duration must be a finite number greater than zero, got ${String(duration)}`);
40
+ }
41
+ return frameCount;
42
+ }
43
+
11
44
  /**
12
45
  * Select the frame index for `elapsedMs` of playback.
13
46
  *
14
47
  * Loop clips wrap with modulo — the boundary frame is never duplicated and
15
- * no zero-length boundary frame exists. One-shot clips clamp to their final
16
- * frame; completion is reported separately.
48
+ * no zero-length boundary frame exists; negative elapsed wraps into range.
49
+ * One-shot clips clamp to `[0, frameCount - 1]`; completion is reported
50
+ * separately by the playback state.
17
51
  */
18
52
  export function sampleSpriteClipFrame(clip, elapsedMs) {
19
53
  'worklet';
20
54
 
21
- const frameCount = clip.frames.length;
55
+ assertFiniteElapsed(elapsedMs);
56
+ const frameCount = assertSelectableClip(clip);
22
57
  const duration = clip.frameDurationMs;
23
58
  if (clip.mode === 'loop') {
24
59
  const index = Math.floor(elapsedMs / duration) % frameCount;
25
- return index >= 0 ? index : index + frameCount;
60
+ return (index + frameCount) % frameCount;
26
61
  }
27
62
  const index = Math.floor(elapsedMs / duration);
63
+ if (index < 0) {
64
+ return 0;
65
+ }
28
66
  return index >= frameCount ? frameCount - 1 : index;
29
67
  }
30
68
 
@@ -37,8 +75,7 @@ export function sampleSpriteClipFrameName(clip, elapsedMs) {
37
75
 
38
76
  const frames = clip.frames;
39
77
  const index = sampleSpriteClipFrame(clip, elapsedMs);
40
- const frame = frames[index];
41
- return frame === undefined ? frames[0] ?? '' : frame;
78
+ return frames[index] ?? '';
42
79
  }
43
80
 
44
81
  /** Total clip duration in milliseconds (one-shot: its full timeline). */
@@ -47,4 +84,27 @@ export function spriteClipDurationMs(clip) {
47
84
 
48
85
  return clip.frames.length * clip.frameDurationMs;
49
86
  }
87
+
88
+ /**
89
+ * Select the frame name for a clip + elapsed time (loop/once semantics).
90
+ *
91
+ * Reads the descriptor's animation table with the single sampler contract
92
+ * above. An absent clip table entry is an invalid clip — it throws instead
93
+ * of returning the clip string as if it were a frame name. Absent
94
+ * *selection* (no clip chosen yet) is distinct: callers keep that path and
95
+ * present nothing without calling this helper.
96
+ */
97
+ export function spriteFrameNameForClip(animations, clip, elapsedMs) {
98
+ 'worklet';
99
+
100
+ const animation = animations[clip];
101
+ if (animation === undefined) {
102
+ throw new Error(`[ASSET_UNKNOWN_CLIP] unknown animation clip ${JSON.stringify(clip)}`);
103
+ }
104
+ const name = sampleSpriteClipFrameName(animation, elapsedMs);
105
+ if (name === '') {
106
+ throw new Error(`[ASSET_EMPTY_CLIP] clip ${JSON.stringify(clip)} selects no frame`);
107
+ }
108
+ return name;
109
+ }
50
110
  //# sourceMappingURL=sampleSpriteClip.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["sampleSpriteClipFrame","clip","elapsedMs","frameCount","frames","length","duration","frameDurationMs","mode","index","Math","floor","sampleSpriteClipFrameName","frame","undefined","spriteClipDurationMs"],"sourceRoot":"../../../src","sources":["sprites/sampleSpriteClip.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,qBAAqBA,CACnCC,IAAgB,EAChBC,SAAiB,EACT;EACR,SAAS;;EACT,MAAMC,UAAU,GAAGF,IAAI,CAACG,MAAM,CAACC,MAAM;EACrC,MAAMC,QAAQ,GAAGL,IAAI,CAACM,eAAe;EACrC,IAAIN,IAAI,CAACO,IAAI,KAAK,MAAM,EAAE;IACxB,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACT,SAAS,GAAGI,QAAQ,CAAC,GAAGH,UAAU;IAC3D,OAAOM,KAAK,IAAI,CAAC,GAAGA,KAAK,GAAGA,KAAK,GAAGN,UAAU;EAChD;EACA,MAAMM,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACT,SAAS,GAAGI,QAAQ,CAAC;EAC9C,OAAOG,KAAK,IAAIN,UAAU,GAAGA,UAAU,GAAG,CAAC,GAAGM,KAAK;AACrD;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,yBAAyBA,CACvCX,IAAgB,EAChBC,SAAiB,EACT;EACR,SAAS;;EACT,MAAME,MAAM,GAAGH,IAAI,CAACG,MAAM;EAC1B,MAAMK,KAAK,GAAGT,qBAAqB,CAACC,IAAI,EAAEC,SAAS,CAAC;EACpD,MAAMW,KAAK,GAAGT,MAAM,CAACK,KAAK,CAAC;EAC3B,OAAOI,KAAK,KAAKC,SAAS,GAAGV,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,GAAGS,KAAK;AACtD;;AAEA;AACA,OAAO,SAASE,oBAAoBA,CAACd,IAAgB,EAAU;EAC7D,SAAS;;EACT,OAAOA,IAAI,CAACG,MAAM,CAACC,MAAM,GAAGJ,IAAI,CAACM,eAAe;AAClD","ignoreList":[]}
1
+ {"version":3,"names":["assertFiniteElapsed","elapsedMs","Number","isFinite","Error","String","assertSelectableClip","clip","frameCount","frames","length","duration","frameDurationMs","sampleSpriteClipFrame","mode","index","Math","floor","sampleSpriteClipFrameName","spriteClipDurationMs","spriteFrameNameForClip","animations","animation","undefined","JSON","stringify","name"],"sourceRoot":"../../../src","sources":["sprites/sampleSpriteClip.ts"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,13 @@
10
10
  * elapsed game time always select the same presented frame (see
11
11
  * `sampleSpriteClip`).
12
12
  *
13
+ * Simulation-only execution (GS-ANIMATION-02): these state transitions run
14
+ * on fixed-step game time in the simulation, never on the UI runtime, so
15
+ * they carry no worklet directive — a directive here would promise UI
16
+ * execution the error branches (structured error classes) cannot keep.
17
+ * The UI-reachable frame-selection helpers live in `sampleSpriteClip` and
18
+ * `react/sprites/spriteSelection` with a UI-safe call graph.
19
+ *
13
20
  * Separation of concerns: gameplay-significant animation state lives in the
14
21
  * scene snapshot and advances from fixed-step game time; a renderer-only
15
22
  * loop may interpolate presentation from the latest committed state plus
@@ -35,8 +42,6 @@ function assertFiniteDelta(deltaSeconds) {
35
42
 
36
43
  /** Runtime clip lookup; throws a structured error for unknown clips. */
37
44
  function clipOf(descriptor, clip) {
38
- 'worklet';
39
-
40
45
  const animation = descriptor.animations[clip];
41
46
  if (animation === undefined) {
42
47
  throw new GameAssetError('ASSET_UNKNOWN_CLIP', ['animations', clip], `unknown animation clip ${JSON.stringify(clip)}`);
@@ -45,14 +50,11 @@ function clipOf(descriptor, clip) {
45
50
  }
46
51
 
47
52
  /**
48
- * Start playback of `clip` from its beginning. The clip name is preserved
49
- * as a string literal in the returned state; unknown clips are rejected at
50
- * runtime (the manifest descriptor keeps the sheet-level frame and clip
51
- * names literal via the spriteSheet contract).
53
+ * Start playback of `clip` from its beginning. The clip name is constrained
54
+ * to the descriptor's animation keys, so a misspelled clip fails compilation;
55
+ * untyped callers still hit the runtime check below.
52
56
  */
53
57
  export function startSpriteAnimation(descriptor, clip) {
54
- 'worklet';
55
-
56
58
  clipOf(descriptor, clip);
57
59
  return {
58
60
  clip,
@@ -71,8 +73,6 @@ export function startSpriteAnimation(descriptor, clip) {
71
73
  * (modulo), so arbitrarily large deltas cost constant arithmetic.
72
74
  */
73
75
  export function advanceSpriteAnimation(descriptor, state, deltaSeconds) {
74
- 'worklet';
75
-
76
76
  assertFiniteDelta(deltaSeconds);
77
77
  if (state.paused || state.completed) {
78
78
  return state;
@@ -106,8 +106,6 @@ export function advanceSpriteAnimation(descriptor, state, deltaSeconds) {
106
106
  * name is typed against the descriptor's animation table.
107
107
  */
108
108
  export function playSpriteAnimation(descriptor, state, clip) {
109
- 'worklet';
110
-
111
109
  if (clip === state.clip) {
112
110
  return state;
113
111
  }
@@ -123,8 +121,6 @@ export function playSpriteAnimation(descriptor, state, clip) {
123
121
 
124
122
  /** Pause playback; `advance` becomes a no-op while paused. */
125
123
  export function pauseSpriteAnimation(state) {
126
- 'worklet';
127
-
128
124
  return state.paused ? state : {
129
125
  ...state,
130
126
  paused: true
@@ -133,8 +129,6 @@ export function pauseSpriteAnimation(state) {
133
129
 
134
130
  /** Resume playback from the paused position. */
135
131
  export function resumeSpriteAnimation(state) {
136
- 'worklet';
137
-
138
132
  return state.paused ? {
139
133
  ...state,
140
134
  paused: false
@@ -143,8 +137,6 @@ export function resumeSpriteAnimation(state) {
143
137
 
144
138
  /** Restart the current clip from its beginning. */
145
139
  export function resetSpriteAnimation(state) {
146
- 'worklet';
147
-
148
140
  return {
149
141
  ...state,
150
142
  elapsedMs: 0,
@@ -154,8 +146,6 @@ export function resetSpriteAnimation(state) {
154
146
 
155
147
  /** Set a finite positive speed multiplier. */
156
148
  export function setSpriteAnimationSpeed(state, speed) {
157
- 'worklet';
158
-
159
149
  assertFinitePositiveSpeed(speed);
160
150
  return state.speed === speed ? state : {
161
151
  ...state,
@@ -1 +1 @@
1
- {"version":3,"names":["GameAssetError","spriteClipDurationMs","assertFinitePositiveSpeed","speed","Number","isFinite","Error","assertFiniteDelta","deltaSeconds","clipOf","descriptor","clip","animation","animations","undefined","JSON","stringify","startSpriteAnimation","elapsedMs","paused","completed","advanceSpriteAnimation","state","totalMs","next","mode","wrapped","playSpriteAnimation","pauseSpriteAnimation","resumeSpriteAnimation","resetSpriteAnimation","setSpriteAnimationSpeed"],"sourceRoot":"../../../src","sources":["sprites/spriteAnimationState.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["GameAssetError","spriteClipDurationMs","assertFinitePositiveSpeed","speed","Number","isFinite","Error","assertFiniteDelta","deltaSeconds","clipOf","descriptor","clip","animation","animations","undefined","JSON","stringify","startSpriteAnimation","elapsedMs","paused","completed","advanceSpriteAnimation","state","totalMs","next","mode","wrapped","playSpriteAnimation","pauseSpriteAnimation","resumeSpriteAnimation","resetSpriteAnimation","setSpriteAnimationSpeed"],"sourceRoot":"../../../src","sources":["sprites/spriteAnimationState.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Subpath entry for `rn-gamekit/sprites`.
5
+ *
6
+ * Deterministic sprite-clip sampling and immutable playback-state helpers.
7
+ * React components (Sprite, GameSprite, SpriteBatch) remain in `rn-gamekit/react`.
8
+ */
9
+ export { sampleSpriteClipFrame, sampleSpriteClipFrameName, spriteClipDurationMs, spriteFrameNameForClip } from "./sprites/sampleSpriteClip.js";
10
+ export { advanceSpriteAnimation, pauseSpriteAnimation, playSpriteAnimation, resetSpriteAnimation, resumeSpriteAnimation, setSpriteAnimationSpeed, startSpriteAnimation } from "./sprites/spriteAnimationState.js";
11
+ //# sourceMappingURL=sprites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sampleSpriteClipFrame","sampleSpriteClipFrameName","spriteClipDurationMs","spriteFrameNameForClip","advanceSpriteAnimation","pauseSpriteAnimation","playSpriteAnimation","resetSpriteAnimation","resumeSpriteAnimation","setSpriteAnimationSpeed","startSpriteAnimation"],"sourceRoot":"../../src","sources":["sprites.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SACEA,qBAAqB,EACrBC,yBAAyB,EACzBC,oBAAoB,EACpBC,sBAAsB,QACjB,+BAA4B;AACnC,SACEC,sBAAsB,EACtBC,oBAAoB,EACpBC,mBAAmB,EACnBC,oBAAoB,EACpBC,qBAAqB,EACrBC,uBAAuB,EACvBC,oBAAoB,QACf,mCAAgC","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ import { GameStorageError } from "../errors.js";
4
+ let loader = null;
5
+ export function __setAsyncStorageLoader(fn) {
6
+ loader = fn;
7
+ }
8
+ export function __getAsyncStorageLoader() {
9
+ return loader;
10
+ }
11
+ async function loadAsyncStorage() {
12
+ if (loader) return loader();
13
+ try {
14
+ const mod = await import('@react-native-async-storage/async-storage');
15
+ const resolved = mod.getItem !== undefined ? mod : mod.default?.getItem !== undefined ? mod.default : undefined;
16
+ if (!resolved) {
17
+ throw new Error('AsyncStorage module did not export getItem/setItem/removeItem');
18
+ }
19
+ return resolved;
20
+ } catch (cause) {
21
+ throw new GameStorageError('@react-native-async-storage/async-storage is not installed. Run `npx expo install @react-native-async-storage/async-storage` and rebuild with `npx expo prebuild` (or `expo run:ios` / `expo run:android`). See https://react-native-async-storage.github.io/async-storage/docs/install/', {
22
+ code: 'BACKEND_READ_FAILED',
23
+ cause
24
+ });
25
+ }
26
+ }
27
+
28
+ /**
29
+ * RN adapter backed by AsyncStorage.
30
+ *
31
+ * Importing `rn-gamekit/storage` does not eagerly import AsyncStorage —
32
+ * the dynamic import happens on the first read/write/remove.
33
+ */
34
+ export function createGameStorageAdapter() {
35
+ let cached = null;
36
+ const get = async () => {
37
+ if (cached) return cached;
38
+ cached = await loadAsyncStorage();
39
+ return cached;
40
+ };
41
+ return {
42
+ async read(key) {
43
+ const storage = await get();
44
+ const value = await storage.getItem(key);
45
+ return value === null ? undefined : value;
46
+ },
47
+ async write(key, value) {
48
+ const storage = await get();
49
+ await storage.setItem(key, value);
50
+ },
51
+ async remove(key) {
52
+ const storage = await get();
53
+ await storage.removeItem(key);
54
+ }
55
+ };
56
+ }
57
+ //# sourceMappingURL=asyncStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GameStorageError","loader","__setAsyncStorageLoader","fn","__getAsyncStorageLoader","loadAsyncStorage","mod","resolved","getItem","undefined","default","Error","cause","code","createGameStorageAdapter","cached","get","read","key","storage","value","write","setItem","remove","removeItem"],"sourceRoot":"../../../../src","sources":["storage/adapters/asyncStorage.ts"],"mappings":";;AACA,SAASA,gBAAgB,QAAQ,cAAW;AAS5C,IAAIC,MAAqB,GAAG,IAAI;AAEhC,OAAO,SAASC,uBAAuBA,CAACC,EAAiB,EAAQ;EAC/DF,MAAM,GAAGE,EAAE;AACb;AAEA,OAAO,SAASC,uBAAuBA,CAAA,EAAkB;EACvD,OAAOH,MAAM;AACf;AAEA,eAAeI,gBAAgBA,CAAA,EAAgC;EAC7D,IAAIJ,MAAM,EAAE,OAAOA,MAAM,CAAC,CAAC;EAC3B,IAAI;IACF,MAAMK,GAAG,GAAI,MAAM,MAAM,CAAC,2CAA2C,CAE/C;IACtB,MAAMC,QAAwC,GAC3CD,GAAG,CAAwBE,OAAO,KAAKC,SAAS,GAC5CH,GAAG,GACJA,GAAG,CAACI,OAAO,EAAEF,OAAO,KAAKC,SAAS,GAChCH,GAAG,CAACI,OAAO,GACXD,SAAS;IACjB,IAAI,CAACF,QAAQ,EAAE;MACb,MAAM,IAAII,KAAK,CAAC,+DAA+D,CAAC;IAClF;IACA,OAAOJ,QAAQ;EACjB,CAAC,CAAC,OAAOK,KAAK,EAAE;IACd,MAAM,IAAIZ,gBAAgB,CACxB,0RAA0R,EAC1R;MACEa,IAAI,EAAE,qBAAqB;MAC3BD;IACF,CACF,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,wBAAwBA,CAAA,EAAuB;EAC7D,IAAIC,MAAiC,GAAG,IAAI;EAC5C,MAAMC,GAAG,GAAG,MAAAA,CAAA,KAAyC;IACnD,IAAID,MAAM,EAAE,OAAOA,MAAM;IACzBA,MAAM,GAAG,MAAMV,gBAAgB,CAAC,CAAC;IACjC,OAAOU,MAAM;EACf,CAAC;EAED,OAAO;IACL,MAAME,IAAIA,CAACC,GAAW,EAA+B;MACnD,MAAMC,OAAO,GAAG,MAAMH,GAAG,CAAC,CAAC;MAC3B,MAAMI,KAAK,GAAG,MAAMD,OAAO,CAACX,OAAO,CAACU,GAAG,CAAC;MACxC,OAAOE,KAAK,KAAK,IAAI,GAAGX,SAAS,GAAGW,KAAK;IAC3C,CAAC;IACD,MAAMC,KAAKA,CAACH,GAAW,EAAEE,KAAa,EAAiB;MACrD,MAAMD,OAAO,GAAG,MAAMH,GAAG,CAAC,CAAC;MAC3B,MAAMG,OAAO,CAACG,OAAO,CAACJ,GAAG,EAAEE,KAAK,CAAC;IACnC,CAAC;IACD,MAAMG,MAAMA,CAACL,GAAW,EAAiB;MACvC,MAAMC,OAAO,GAAG,MAAMH,GAAG,CAAC,CAAC;MAC3B,MAAMG,OAAO,CAACK,UAAU,CAACN,GAAG,CAAC;IAC/B;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * In-memory adapter for tests and apps that own storage elsewhere.
5
+ * Each instance owns its map.
6
+ */
7
+ export function createMemoryStorageAdapter(initial) {
8
+ const map = new Map(initial ? Object.entries(initial) : []);
9
+ return {
10
+ async read(key) {
11
+ return map.get(key);
12
+ },
13
+ async write(key, value) {
14
+ map.set(key, value);
15
+ },
16
+ async remove(key) {
17
+ map.delete(key);
18
+ }
19
+ };
20
+ }
21
+
22
+ /**
23
+ * Programmable failure adapter for tests — wraps another adapter and injects failures.
24
+ */
25
+ export function createFailingStorageAdapter(inner, opts = {}) {
26
+ const delay = async () => {
27
+ if (opts.delayMs) await new Promise(r => setTimeout(r, opts.delayMs));
28
+ };
29
+ return {
30
+ async read(key) {
31
+ await delay();
32
+ const err = opts.failRead?.(key) ?? null;
33
+ if (err) throw err;
34
+ return inner.read(key);
35
+ },
36
+ async write(key, value) {
37
+ await delay();
38
+ const err = opts.failWrite?.(key, value) ?? null;
39
+ if (err) throw err;
40
+ return inner.write(key, value);
41
+ },
42
+ async remove(key) {
43
+ await delay();
44
+ const err = opts.failRemove?.(key) ?? null;
45
+ if (err) throw err;
46
+ return inner.remove(key);
47
+ }
48
+ };
49
+ }
50
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createMemoryStorageAdapter","initial","map","Map","Object","entries","read","key","get","write","value","set","remove","delete","createFailingStorageAdapter","inner","opts","delay","delayMs","Promise","r","setTimeout","err","failRead","failWrite","failRemove"],"sourceRoot":"../../../../src","sources":["storage/adapters/memory.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASA,0BAA0BA,CAACC,OAAgC,EAAsB;EAC/F,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAAiBF,OAAO,GAAGG,MAAM,CAACC,OAAO,CAACJ,OAAO,CAAC,GAAG,EAAE,CAAC;EAE3E,OAAO;IACL,MAAMK,IAAIA,CAACC,GAAW,EAA+B;MACnD,OAAOL,GAAG,CAACM,GAAG,CAACD,GAAG,CAAC;IACrB,CAAC;IACD,MAAME,KAAKA,CAACF,GAAW,EAAEG,KAAa,EAAiB;MACrDR,GAAG,CAACS,GAAG,CAACJ,GAAG,EAAEG,KAAK,CAAC;IACrB,CAAC;IACD,MAAME,MAAMA,CAACL,GAAW,EAAiB;MACvCL,GAAG,CAACW,MAAM,CAACN,GAAG,CAAC;IACjB;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASO,2BAA2BA,CACzCC,KAAyB,EACzBC,IAKC,GAAG,CAAC,CAAC,EACc;EACpB,MAAMC,KAAK,GAAG,MAAAA,CAAA,KAA2B;IACvC,IAAID,IAAI,CAACE,OAAO,EAAE,MAAM,IAAIC,OAAO,CAAEC,CAAC,IAAKC,UAAU,CAACD,CAAC,EAAEJ,IAAI,CAACE,OAAO,CAAC,CAAC;EACzE,CAAC;EACD,OAAO;IACL,MAAMZ,IAAIA,CAACC,GAAW,EAA+B;MACnD,MAAMU,KAAK,CAAC,CAAC;MACb,MAAMK,GAAG,GAAGN,IAAI,CAACO,QAAQ,GAAGhB,GAAG,CAAC,IAAI,IAAI;MACxC,IAAIe,GAAG,EAAE,MAAMA,GAAG;MAClB,OAAOP,KAAK,CAACT,IAAI,CAACC,GAAG,CAAC;IACxB,CAAC;IACD,MAAME,KAAKA,CAACF,GAAW,EAAEG,KAAa,EAAiB;MACrD,MAAMO,KAAK,CAAC,CAAC;MACb,MAAMK,GAAG,GAAGN,IAAI,CAACQ,SAAS,GAAGjB,GAAG,EAAEG,KAAK,CAAC,IAAI,IAAI;MAChD,IAAIY,GAAG,EAAE,MAAMA,GAAG;MAClB,OAAOP,KAAK,CAACN,KAAK,CAACF,GAAG,EAAEG,KAAK,CAAC;IAChC,CAAC;IACD,MAAME,MAAMA,CAACL,GAAW,EAAiB;MACvC,MAAMU,KAAK,CAAC,CAAC;MACb,MAAMK,GAAG,GAAGN,IAAI,CAACS,UAAU,GAAGlB,GAAG,CAAC,IAAI,IAAI;MAC1C,IAAIe,GAAG,EAAE,MAAMA,GAAG;MAClB,OAAOP,KAAK,CAACH,MAAM,CAACL,GAAG,CAAC;IAC1B;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * V1 storage errors — stable codes, operation, namespace/slot, schema context,
5
+ * exact path where relevant, and original cause.
6
+ */
7
+
8
+ export class GameStorageError extends Error {
9
+ name = 'GameStorageError';
10
+ constructor(message, options) {
11
+ super(message);
12
+ this.code = options.code;
13
+ this.operation = options.operation;
14
+ this.namespace = options.namespace;
15
+ this.slot = options.slot;
16
+ this.schemaId = options.schemaId;
17
+ this.schemaVersion = options.schemaVersion;
18
+ this.path = options.path;
19
+ this.cause = options.cause;
20
+ }
21
+ }
22
+ export function storageError(message, code, opts = {}) {
23
+ return new GameStorageError(message, {
24
+ code,
25
+ operation: opts.operation,
26
+ namespace: opts.namespace,
27
+ slot: opts.slot,
28
+ schemaId: opts.schemaId,
29
+ schemaVersion: opts.schemaVersion,
30
+ path: opts.path,
31
+ cause: opts.cause
32
+ });
33
+ }
34
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GameStorageError","Error","name","constructor","message","options","code","operation","namespace","slot","schemaId","schemaVersion","path","cause","storageError","opts"],"sourceRoot":"../../../src","sources":["storage/errors.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAwBA,OAAO,MAAMA,gBAAgB,SAASC,KAAK,CAAC;EACxBC,IAAI,GAAG,kBAAkB;EAW3CC,WAAWA,CACTC,OAAe,EACfC,OASC,EACD;IACA,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACE,IAAI,GAAGD,OAAO,CAACC,IAAI;IACxB,IAAI,CAACC,SAAS,GAAGF,OAAO,CAACE,SAAS;IAClC,IAAI,CAACC,SAAS,GAAGH,OAAO,CAACG,SAAS;IAClC,IAAI,CAACC,IAAI,GAAGJ,OAAO,CAACI,IAAI;IACxB,IAAI,CAACC,QAAQ,GAAGL,OAAO,CAACK,QAAQ;IAChC,IAAI,CAACC,aAAa,GAAGN,OAAO,CAACM,aAAa;IAC1C,IAAI,CAACC,IAAI,GAAGP,OAAO,CAACO,IAAI;IACxB,IAAI,CAACC,KAAK,GAAGR,OAAO,CAACQ,KAAK;EAC5B;AACF;AAEA,OAAO,SAASC,YAAYA,CAC1BV,OAAe,EACfE,IAA0B,EAC1BS,IAQC,GAAG,CAAC,CAAC,EACY;EAClB,OAAO,IAAIf,gBAAgB,CAACI,OAAO,EAAE;IACnCE,IAAI;IACJC,SAAS,EAAEQ,IAAI,CAACR,SAAS;IACzBC,SAAS,EAAEO,IAAI,CAACP,SAAS;IACzBC,IAAI,EAAEM,IAAI,CAACN,IAAI;IACfC,QAAQ,EAAEK,IAAI,CAACL,QAAQ;IACvBC,aAAa,EAAEI,IAAI,CAACJ,aAAa;IACjCC,IAAI,EAAEG,IAAI,CAACH,IAAI;IACfC,KAAK,EAAEE,IAAI,CAACF;EACd,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ export { GameStorageError } from "./errors.js";
4
+ export { defineGameSave } from "./schema.js";
5
+ export { createGameSaveStore } from "./store.js";
6
+ export { createMemoryStorageAdapter } from "./adapters/memory.js";
7
+ export { createGameStorageAdapter } from "./adapters/asyncStorage.js";
8
+ export { __setAsyncStorageLoader, __getAsyncStorageLoader } from "./adapters/asyncStorage.js";
9
+ export { STORAGE_LIMITS } from "./types.js";
10
+ export { STORAGE_ENVELOPE_FORMAT } from "./serialization.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GameStorageError","defineGameSave","createGameSaveStore","createMemoryStorageAdapter","createGameStorageAdapter","__setAsyncStorageLoader","__getAsyncStorageLoader","STORAGE_LIMITS","STORAGE_ENVELOPE_FORMAT"],"sourceRoot":"../../../src","sources":["storage/index.ts"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,aAAU;AAE3C,SAASC,cAAc,QAAQ,aAAU;AACzC,SAASC,mBAAmB,QAAQ,YAAS;AAC7C,SAASC,0BAA0B,QAAQ,sBAAmB;AAC9D,SAASC,wBAAwB,QAAQ,4BAAyB;AAClE,SAASC,uBAAuB,EAAEC,uBAAuB,QAAQ,4BAAyB;AAU1F,SAASC,cAAc,QAAQ,YAAS;AACxC,SAASC,uBAAuB,QAAQ,oBAAiB","ignoreList":[]}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ import { GameStorageError, storageError } from "./errors.js";
4
+ import { validateMigrations, validateSchemaId, validateVersion } from "./validation.js";
5
+ import { cloneAndValidatePlainData } from "./serialization.js";
6
+
7
+ /**
8
+ * Define a versioned game save schema.
9
+ *
10
+ * Id/version/migrations are validated immediately. `createDefault` and
11
+ * `validate` are stored as-is — they run later per load/save.
12
+ */
13
+ export function defineGameSave(options) {
14
+ validateSchemaId(options.id);
15
+ validateVersion(options.version);
16
+ if (typeof options.createDefault !== 'function') {
17
+ throw new GameStorageError('createDefault must be a function', {
18
+ code: 'INVALID_SCHEMA_ID',
19
+ schemaId: options.id
20
+ });
21
+ }
22
+ if (typeof options.validate !== 'function') {
23
+ throw new GameStorageError('validate must be a function', {
24
+ code: 'VALIDATION_FAILED',
25
+ schemaId: options.id
26
+ });
27
+ }
28
+ const migrations = options.migrations ?? {};
29
+ validateMigrations(migrations, options.version);
30
+
31
+ // Freeze migrations shallowly — migration functions themselves remain.
32
+ const frozenMigrations = Object.freeze({
33
+ ...migrations
34
+ });
35
+ const schema = {
36
+ id: options.id,
37
+ version: options.version,
38
+ createDefault: options.createDefault,
39
+ validate: options.validate,
40
+ migrations: frozenMigrations
41
+ };
42
+ return Object.freeze(schema);
43
+ }
44
+
45
+ /** Clone/freeze via plain-data path for defaults that are plain; fallback to structured clone for custom validation. */
46
+ function deepFreeze(value) {
47
+ if (value === null || typeof value !== 'object') return value;
48
+ // Use storage-style freeze: we already cloned, just deep freeze.
49
+ const seen = new WeakSet();
50
+ const freeze = node => {
51
+ if (node === null || typeof node !== 'object') return;
52
+ const o = node;
53
+ if (seen.has(o)) return;
54
+ seen.add(o);
55
+ if (Array.isArray(node)) {
56
+ for (const v of node) freeze(v);
57
+ } else {
58
+ for (const v of Object.values(node)) freeze(v);
59
+ }
60
+ Object.freeze(node);
61
+ };
62
+ freeze(value);
63
+ return value;
64
+ }
65
+ export function createDefaultData(schema) {
66
+ const raw = schema.createDefault();
67
+ // Validate through schema.validate to enforce domain rules and to
68
+ // ensure we return a newly owned, validated value. If validate does not
69
+ // clone, we still protect via plain-data clone.
70
+ try {
71
+ const validated = schema.validate(raw);
72
+ // Ensure plain-data safe and frozen
73
+ const cloned = cloneAndValidatePlainData(validated, 'createDefault() result');
74
+ return deepFreeze(cloned);
75
+ } catch (cause) {
76
+ if (cause instanceof GameStorageError) throw cause;
77
+ throw storageError(`createDefault() validation failed`, 'VALIDATION_FAILED', {
78
+ schemaId: schema.id,
79
+ schemaVersion: schema.version,
80
+ cause
81
+ });
82
+ }
83
+ }
84
+ export function validateCurrentData(schema, value, path = 'data') {
85
+ try {
86
+ const validated = schema.validate(value);
87
+ const cloned = cloneAndValidatePlainData(validated, path);
88
+ return deepFreeze(cloned);
89
+ } catch (cause) {
90
+ if (cause instanceof GameStorageError) throw cause;
91
+ // Preserve original validation error as cause; surface as VALIDATION_FAILED with path if available
92
+ const msg = cause instanceof Error ? cause.message : String(cause);
93
+ throw storageError(msg, 'VALIDATION_FAILED', {
94
+ schemaId: schema.id,
95
+ schemaVersion: schema.version,
96
+ path,
97
+ cause
98
+ });
99
+ }
100
+ }
101
+ export function migratePayload(schema, storedVersion, payload) {
102
+ let current = payload;
103
+ let version = storedVersion;
104
+ const target = schema.version;
105
+ if (version > target) {
106
+ throw storageError(`stored version ${version} is newer than schema version ${target}`, 'FUTURE_VERSION', {
107
+ schemaId: schema.id,
108
+ schemaVersion: target
109
+ });
110
+ }
111
+ if (version === target) return {
112
+ data: current,
113
+ fromVersion: version,
114
+ toVersion: target
115
+ };
116
+ // Sequential migrations version -> version+1
117
+ for (let v = version; v < target; v += 1) {
118
+ const fn = schema.migrations[v];
119
+ if (typeof fn !== 'function') {
120
+ throw storageError(`missing migration for version ${v} -> ${v + 1}`, 'MISSING_MIGRATION', {
121
+ schemaId: schema.id,
122
+ schemaVersion: target,
123
+ path: `migrations.${v}`
124
+ });
125
+ }
126
+ try {
127
+ // Engine-owned deeply frozen input — migration must be pure and cannot mutate it.
128
+ const frozenInput = deepFreeze(cloneAndValidatePlainData(current, `migrations.${v} input`));
129
+ const output = fn(frozenInput);
130
+ // Bounded-clone and freeze every migration output before the next step, so oversized/deep/unsupported intermediates are rejected at the step.
131
+ const clonedOutput = cloneAndValidatePlainData(output, `migrations.${v} output`);
132
+ deepFreeze(clonedOutput);
133
+ current = clonedOutput;
134
+ version = v + 1;
135
+ } catch (cause) {
136
+ if (cause instanceof GameStorageError) throw cause;
137
+ throw storageError(`migration ${v} -> ${v + 1} failed`, 'MIGRATION_FAILED', {
138
+ schemaId: schema.id,
139
+ schemaVersion: target,
140
+ path: `migrations.${v}`,
141
+ cause
142
+ });
143
+ }
144
+ }
145
+ return {
146
+ data: current,
147
+ fromVersion: storedVersion,
148
+ toVersion: target
149
+ };
150
+ }
151
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GameStorageError","storageError","validateMigrations","validateSchemaId","validateVersion","cloneAndValidatePlainData","defineGameSave","options","id","version","createDefault","code","schemaId","validate","migrations","frozenMigrations","Object","freeze","schema","deepFreeze","value","seen","WeakSet","node","o","has","add","Array","isArray","v","values","createDefaultData","raw","validated","cloned","cause","schemaVersion","validateCurrentData","path","msg","Error","message","String","migratePayload","storedVersion","payload","current","target","data","fromVersion","toVersion","fn","frozenInput","output","clonedOutput"],"sourceRoot":"../../../src","sources":["storage/schema.ts"],"mappings":"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","ignoreList":[]}