rn-gamekit 0.1.0 → 0.2.0
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.
- package/CHANGELOG.md +68 -0
- package/README.md +95 -14
- package/lib/module/assets/defineAssets.js +28 -3
- package/lib/module/assets/defineAssets.js.map +1 -1
- package/lib/module/assets.js +11 -0
- package/lib/module/assets.js.map +1 -0
- package/lib/module/audio/createGameAudio.js +784 -0
- package/lib/module/audio/createGameAudio.js.map +1 -0
- package/lib/module/audio/errors.js +12 -0
- package/lib/module/audio/errors.js.map +1 -0
- package/lib/module/audio/index.js +5 -0
- package/lib/module/audio/index.js.map +1 -0
- package/lib/module/audio/resolver.js +37 -0
- package/lib/module/audio/resolver.js.map +1 -0
- package/lib/module/audio/types.js +4 -0
- package/lib/module/audio/types.js.map +1 -0
- package/lib/module/audio.js +9 -0
- package/lib/module/audio.js.map +1 -0
- package/lib/module/camera2d/bounds.js +59 -0
- package/lib/module/camera2d/bounds.js.map +1 -0
- package/lib/module/camera2d/extents.js +25 -0
- package/lib/module/camera2d/extents.js.map +1 -0
- package/lib/module/camera2d/follow.js +138 -0
- package/lib/module/camera2d/follow.js.map +1 -0
- package/lib/module/camera2d/index.js +20 -0
- package/lib/module/camera2d/index.js.map +1 -0
- package/lib/module/camera2d/interpolation.js +98 -0
- package/lib/module/camera2d/interpolation.js.map +1 -0
- package/lib/module/camera2d/shake.js +85 -0
- package/lib/module/camera2d/shake.js.map +1 -0
- package/lib/module/camera2d/transform.js +151 -0
- package/lib/module/camera2d/transform.js.map +1 -0
- package/lib/module/camera2d/types.js +4 -0
- package/lib/module/camera2d/types.js.map +1 -0
- package/lib/module/camera2d/validation.js +98 -0
- package/lib/module/camera2d/validation.js.map +1 -0
- package/lib/module/camera2d/visibility.js +138 -0
- package/lib/module/camera2d/visibility.js.map +1 -0
- package/lib/module/camera2d.js +9 -0
- package/lib/module/camera2d.js.map +1 -0
- package/lib/module/collision2d/colliders.js +266 -0
- package/lib/module/collision2d/colliders.js.map +1 -0
- package/lib/module/collision2d/debug.js +105 -0
- package/lib/module/collision2d/debug.js.map +1 -0
- package/lib/module/collision2d/filters.js +40 -0
- package/lib/module/collision2d/filters.js.map +1 -0
- package/lib/module/collision2d/index.js +12 -0
- package/lib/module/collision2d/index.js.map +1 -0
- package/lib/module/collision2d/intersections.js +67 -0
- package/lib/module/collision2d/intersections.js.map +1 -0
- package/lib/module/collision2d/manifolds.js +218 -0
- package/lib/module/collision2d/manifolds.js.map +1 -0
- package/lib/module/collision2d/segments.js +187 -0
- package/lib/module/collision2d/segments.js.map +1 -0
- package/lib/module/collision2d/spatialHash.js +167 -0
- package/lib/module/collision2d/spatialHash.js.map +1 -0
- package/lib/module/collision2d/sweeps.js +255 -0
- package/lib/module/collision2d/sweeps.js.map +1 -0
- package/lib/module/collision2d.js +9 -0
- package/lib/module/collision2d.js.map +1 -0
- package/lib/module/core/input/buttonPad.js +214 -0
- package/lib/module/core/input/buttonPad.js.map +1 -0
- package/lib/module/core/input/createInputBuffer.js +66 -14
- package/lib/module/core/input/createInputBuffer.js.map +1 -1
- package/lib/module/core/session/createGameSession.js +454 -50
- package/lib/module/core/session/createGameSession.js.map +1 -1
- package/lib/module/core/session/deepFreeze.js +92 -2
- package/lib/module/core/session/deepFreeze.js.map +1 -1
- package/lib/module/core/session/types.js +12 -0
- package/lib/module/core/session/types.js.map +1 -1
- package/lib/module/definition/defineGame.js +23 -0
- package/lib/module/definition/defineGame.js.map +1 -1
- package/lib/module/events/defineGameEvents.js +46 -0
- package/lib/module/events/defineGameEvents.js.map +1 -0
- package/lib/module/events/errors.js +16 -0
- package/lib/module/events/errors.js.map +1 -0
- package/lib/module/events/index.js +7 -0
- package/lib/module/events/index.js.map +1 -0
- package/lib/module/events/payload.js +219 -0
- package/lib/module/events/payload.js.map +1 -0
- package/lib/module/events/seed.js +33 -0
- package/lib/module/events/seed.js.map +1 -0
- package/lib/module/events/types.js +4 -0
- package/lib/module/events/types.js.map +1 -0
- package/lib/module/events.js +13 -0
- package/lib/module/events.js.map +1 -0
- package/lib/module/geometry/helpers.js +140 -0
- package/lib/module/geometry/helpers.js.map +1 -0
- package/lib/module/geometry/index.js +5 -0
- package/lib/module/geometry/index.js.map +1 -0
- package/lib/module/geometry/validation.js +104 -0
- package/lib/module/geometry/validation.js.map +1 -0
- package/lib/module/geometry.js +9 -0
- package/lib/module/geometry.js.map +1 -0
- package/lib/module/haptics/createGameHaptics.js +214 -0
- package/lib/module/haptics/createGameHaptics.js.map +1 -0
- package/lib/module/haptics/errors.js +12 -0
- package/lib/module/haptics/errors.js.map +1 -0
- package/lib/module/haptics/index.js +5 -0
- package/lib/module/haptics/index.js.map +1 -0
- package/lib/module/haptics/resolver.js +37 -0
- package/lib/module/haptics/resolver.js.map +1 -0
- package/lib/module/haptics/types.js +4 -0
- package/lib/module/haptics/types.js.map +1 -0
- package/lib/module/haptics.js +9 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/index.js +8 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/particles/createParticleSystem.js +481 -0
- package/lib/module/particles/createParticleSystem.js.map +1 -0
- package/lib/module/particles/defineParticleEffect.js +178 -0
- package/lib/module/particles/defineParticleEffect.js.map +1 -0
- package/lib/module/particles/errors.js +9 -0
- package/lib/module/particles/errors.js.map +1 -0
- package/lib/module/particles/index.js +8 -0
- package/lib/module/particles/index.js.map +1 -0
- package/lib/module/particles/sampling.js +121 -0
- package/lib/module/particles/sampling.js.map +1 -0
- package/lib/module/particles/types.js +4 -0
- package/lib/module/particles/types.js.map +1 -0
- package/lib/module/particles.js +4 -0
- package/lib/module/particles.js.map +1 -0
- package/lib/module/react/GameButtonPad.js +344 -0
- package/lib/module/react/GameButtonPad.js.map +1 -0
- package/lib/module/react/GamePointerInput.js +74 -16
- package/lib/module/react/GamePointerInput.js.map +1 -1
- package/lib/module/react/GameView.js +139 -60
- package/lib/module/react/GameView.js.map +1 -1
- package/lib/module/react/assets/createGameAssetStore.js +145 -95
- package/lib/module/react/assets/createGameAssetStore.js.map +1 -1
- package/lib/module/react/assets/useGameAssets.js +60 -35
- package/lib/module/react/assets/useGameAssets.js.map +1 -1
- package/lib/module/react/bindAppLifecycle.js +46 -17
- package/lib/module/react/bindAppLifecycle.js.map +1 -1
- package/lib/module/react/bindGameSession.js +13 -2
- package/lib/module/react/bindGameSession.js.map +1 -1
- package/lib/module/react/camera2d/GameLayer2D.js +50 -0
- package/lib/module/react/camera2d/GameLayer2D.js.map +1 -0
- package/lib/module/react/camera2d/defineGameCamera2D.js +30 -0
- package/lib/module/react/camera2d/defineGameCamera2D.js.map +1 -0
- package/lib/module/react/camera2d/usePresentedCameraBinding.js +177 -0
- package/lib/module/react/camera2d/usePresentedCameraBinding.js.map +1 -0
- package/lib/module/react/cleanupList.js +38 -0
- package/lib/module/react/cleanupList.js.map +1 -0
- package/lib/module/react/lifecycleSource.js +49 -0
- package/lib/module/react/lifecycleSource.js.map +1 -0
- package/lib/module/react/particles/ParticleView.js +308 -0
- package/lib/module/react/particles/ParticleView.js.map +1 -0
- package/lib/module/react/particles/culling.js +115 -0
- package/lib/module/react/particles/culling.js.map +1 -0
- package/lib/module/react/particles/index.js +7 -0
- package/lib/module/react/particles/index.js.map +1 -0
- package/lib/module/react/particles/spriteXForm.js +45 -0
- package/lib/module/react/particles/spriteXForm.js.map +1 -0
- package/lib/module/react/particles/useParticlePresentation.js +204 -0
- package/lib/module/react/particles/useParticlePresentation.js.map +1 -0
- package/lib/module/react/pointerBinding.js +55 -17
- package/lib/module/react/pointerBinding.js.map +1 -1
- package/lib/module/react/pointerCamera.js +28 -0
- package/lib/module/react/pointerCamera.js.map +1 -0
- package/lib/module/react/pointerCoalescer.js +16 -9
- package/lib/module/react/pointerCoalescer.js.map +1 -1
- package/lib/module/react/sprites/GameSprite.js +5 -17
- package/lib/module/react/sprites/GameSprite.js.map +1 -1
- package/lib/module/react/sprites/GameWorld2D.js +112 -9
- package/lib/module/react/sprites/GameWorld2D.js.map +1 -1
- package/lib/module/react/sprites/Sprite.js +48 -63
- package/lib/module/react/sprites/Sprite.js.map +1 -1
- package/lib/module/react/sprites/SpriteBatch.js +53 -28
- package/lib/module/react/sprites/SpriteBatch.js.map +1 -1
- package/lib/module/react/sprites/batchVisibility.js +58 -0
- package/lib/module/react/sprites/batchVisibility.js.map +1 -0
- package/lib/module/react/sprites/spriteSelection.js +103 -0
- package/lib/module/react/sprites/spriteSelection.js.map +1 -0
- package/lib/module/react/sprites/spriteTransform.js +46 -25
- package/lib/module/react/sprites/spriteTransform.js.map +1 -1
- package/lib/module/react/tilemap/TileMapLayer2D.js +217 -0
- package/lib/module/react/tilemap/TileMapLayer2D.js.map +1 -0
- package/lib/module/react/tilemap/tilePresentation.js +374 -0
- package/lib/module/react/tilemap/tilePresentation.js.map +1 -0
- package/lib/module/react/useGameSession.js +70 -0
- package/lib/module/react/useGameSession.js.map +1 -0
- package/lib/module/react/useGameSessionStatus.js +46 -0
- package/lib/module/react/useGameSessionStatus.js.map +1 -0
- package/lib/module/react/viewportBinding.js +5 -1
- package/lib/module/react/viewportBinding.js.map +1 -1
- package/lib/module/react.js +12 -1
- package/lib/module/react.js.map +1 -1
- package/lib/module/scene/defineScene.js +17 -0
- package/lib/module/scene/defineScene.js.map +1 -1
- package/lib/module/sprites/sampleSpriteClip.js +66 -6
- package/lib/module/sprites/sampleSpriteClip.js.map +1 -1
- package/lib/module/sprites/spriteAnimationState.js +10 -20
- package/lib/module/sprites/spriteAnimationState.js.map +1 -1
- package/lib/module/sprites.js +11 -0
- package/lib/module/sprites.js.map +1 -0
- package/lib/module/storage/adapters/asyncStorage.js +57 -0
- package/lib/module/storage/adapters/asyncStorage.js.map +1 -0
- package/lib/module/storage/adapters/memory.js +50 -0
- package/lib/module/storage/adapters/memory.js.map +1 -0
- package/lib/module/storage/errors.js +34 -0
- package/lib/module/storage/errors.js.map +1 -0
- package/lib/module/storage/index.js +11 -0
- package/lib/module/storage/index.js.map +1 -0
- package/lib/module/storage/schema.js +151 -0
- package/lib/module/storage/schema.js.map +1 -0
- package/lib/module/storage/serialization.js +249 -0
- package/lib/module/storage/serialization.js.map +1 -0
- package/lib/module/storage/store.js +387 -0
- package/lib/module/storage/store.js.map +1 -0
- package/lib/module/storage/types.js +16 -0
- package/lib/module/storage/types.js.map +1 -0
- package/lib/module/storage/validation.js +111 -0
- package/lib/module/storage/validation.js.map +1 -0
- package/lib/module/storage.js +4 -0
- package/lib/module/storage.js.map +1 -0
- package/lib/module/testing.js +4 -0
- package/lib/module/testing.js.map +1 -1
- package/lib/module/tilemap/chunkStats.js +27 -0
- package/lib/module/tilemap/chunkStats.js.map +1 -0
- package/lib/module/tilemap/definitions.js +308 -0
- package/lib/module/tilemap/definitions.js.map +1 -0
- package/lib/module/tilemap/errors.js +13 -0
- package/lib/module/tilemap/errors.js.map +1 -0
- package/lib/module/tilemap/index.js +10 -0
- package/lib/module/tilemap/index.js.map +1 -0
- package/lib/module/tilemap/movement.js +379 -0
- package/lib/module/tilemap/movement.js.map +1 -0
- package/lib/module/tilemap/queries.js +114 -0
- package/lib/module/tilemap/queries.js.map +1 -0
- package/lib/module/tilemap/tiledAdapter.js +141 -0
- package/lib/module/tilemap/tiledAdapter.js.map +1 -0
- package/lib/module/tilemap/types.js +4 -0
- package/lib/module/tilemap/types.js.map +1 -0
- package/lib/module/tilemap.js +4 -0
- package/lib/module/tilemap.js.map +1 -0
- package/lib/typescript/src/assets/defineAssets.d.ts +1 -1
- package/lib/typescript/src/assets/defineAssets.d.ts.map +1 -1
- package/lib/typescript/src/assets.d.ts +11 -0
- package/lib/typescript/src/assets.d.ts.map +1 -0
- package/lib/typescript/src/audio/createGameAudio.d.ts +5 -0
- package/lib/typescript/src/audio/createGameAudio.d.ts.map +1 -0
- package/lib/typescript/src/audio/errors.d.ts +6 -0
- package/lib/typescript/src/audio/errors.d.ts.map +1 -0
- package/lib/typescript/src/audio/index.d.ts +4 -0
- package/lib/typescript/src/audio/index.d.ts.map +1 -0
- package/lib/typescript/src/audio/resolver.d.ts +44 -0
- package/lib/typescript/src/audio/resolver.d.ts.map +1 -0
- package/lib/typescript/src/audio/types.d.ts +42 -0
- package/lib/typescript/src/audio/types.d.ts.map +1 -0
- package/lib/typescript/src/audio.d.ts +8 -0
- package/lib/typescript/src/audio.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/bounds.d.ts +25 -0
- package/lib/typescript/src/camera2d/bounds.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/extents.d.ts +17 -0
- package/lib/typescript/src/camera2d/extents.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/follow.d.ts +24 -0
- package/lib/typescript/src/camera2d/follow.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/index.d.ts +19 -0
- package/lib/typescript/src/camera2d/index.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/interpolation.d.ts +17 -0
- package/lib/typescript/src/camera2d/interpolation.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/shake.d.ts +20 -0
- package/lib/typescript/src/camera2d/shake.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/transform.d.ts +44 -0
- package/lib/typescript/src/camera2d/transform.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/types.d.ts +74 -0
- package/lib/typescript/src/camera2d/types.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/validation.d.ts +30 -0
- package/lib/typescript/src/camera2d/validation.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/visibility.d.ts +47 -0
- package/lib/typescript/src/camera2d/visibility.d.ts.map +1 -0
- package/lib/typescript/src/camera2d.d.ts +7 -0
- package/lib/typescript/src/camera2d.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/colliders.d.ts +120 -0
- package/lib/typescript/src/collision2d/colliders.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/debug.d.ts +67 -0
- package/lib/typescript/src/collision2d/debug.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/filters.d.ts +28 -0
- package/lib/typescript/src/collision2d/filters.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/index.d.ts +17 -0
- package/lib/typescript/src/collision2d/index.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/intersections.d.ts +24 -0
- package/lib/typescript/src/collision2d/intersections.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/manifolds.d.ts +39 -0
- package/lib/typescript/src/collision2d/manifolds.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/segments.d.ts +24 -0
- package/lib/typescript/src/collision2d/segments.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/spatialHash.d.ts +50 -0
- package/lib/typescript/src/collision2d/spatialHash.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/sweeps.d.ts +60 -0
- package/lib/typescript/src/collision2d/sweeps.d.ts.map +1 -0
- package/lib/typescript/src/collision2d.d.ts +7 -0
- package/lib/typescript/src/collision2d.d.ts.map +1 -0
- package/lib/typescript/src/core/input/buttonPad.d.ts +59 -0
- package/lib/typescript/src/core/input/buttonPad.d.ts.map +1 -0
- package/lib/typescript/src/core/input/createInputBuffer.d.ts +1 -1
- package/lib/typescript/src/core/input/createInputBuffer.d.ts.map +1 -1
- package/lib/typescript/src/core/input/types.d.ts +7 -0
- package/lib/typescript/src/core/input/types.d.ts.map +1 -1
- package/lib/typescript/src/core/session/createGameSession.d.ts +4 -2
- package/lib/typescript/src/core/session/createGameSession.d.ts.map +1 -1
- package/lib/typescript/src/core/session/deepFreeze.d.ts +21 -1
- package/lib/typescript/src/core/session/deepFreeze.d.ts.map +1 -1
- package/lib/typescript/src/core/session/diagnostics.d.ts +2 -0
- package/lib/typescript/src/core/session/diagnostics.d.ts.map +1 -1
- package/lib/typescript/src/core/session/types.d.ts +69 -4
- package/lib/typescript/src/core/session/types.d.ts.map +1 -1
- package/lib/typescript/src/definition/defineGame.d.ts +12 -1
- package/lib/typescript/src/definition/defineGame.d.ts.map +1 -1
- package/lib/typescript/src/definition/types.d.ts +10 -1
- package/lib/typescript/src/definition/types.d.ts.map +1 -1
- package/lib/typescript/src/events/defineGameEvents.d.ts +26 -0
- package/lib/typescript/src/events/defineGameEvents.d.ts.map +1 -0
- package/lib/typescript/src/events/errors.d.ts +12 -0
- package/lib/typescript/src/events/errors.d.ts.map +1 -0
- package/lib/typescript/src/events/index.d.ts +6 -0
- package/lib/typescript/src/events/index.d.ts.map +1 -0
- package/lib/typescript/src/events/payload.d.ts +21 -0
- package/lib/typescript/src/events/payload.d.ts.map +1 -0
- package/lib/typescript/src/events/seed.d.ts +3 -0
- package/lib/typescript/src/events/seed.d.ts.map +1 -0
- package/lib/typescript/src/events/types.d.ts +42 -0
- package/lib/typescript/src/events/types.d.ts.map +1 -0
- package/lib/typescript/src/events.d.ts +12 -0
- package/lib/typescript/src/events.d.ts.map +1 -0
- package/lib/typescript/src/geometry/helpers.d.ts +35 -0
- package/lib/typescript/src/geometry/helpers.d.ts.map +1 -0
- package/lib/typescript/src/geometry/index.d.ts +4 -0
- package/lib/typescript/src/geometry/index.d.ts.map +1 -0
- package/lib/typescript/src/geometry/types.d.ts +49 -0
- package/lib/typescript/src/geometry/types.d.ts.map +1 -1
- package/lib/typescript/src/geometry/validation.d.ts +44 -0
- package/lib/typescript/src/geometry/validation.d.ts.map +1 -0
- package/lib/typescript/src/geometry.d.ts +7 -0
- package/lib/typescript/src/geometry.d.ts.map +1 -0
- package/lib/typescript/src/haptics/createGameHaptics.d.ts +3 -0
- package/lib/typescript/src/haptics/createGameHaptics.d.ts.map +1 -0
- package/lib/typescript/src/haptics/errors.d.ts +6 -0
- package/lib/typescript/src/haptics/errors.d.ts.map +1 -0
- package/lib/typescript/src/haptics/index.d.ts +4 -0
- package/lib/typescript/src/haptics/index.d.ts.map +1 -0
- package/lib/typescript/src/haptics/resolver.d.ts +22 -0
- package/lib/typescript/src/haptics/resolver.d.ts.map +1 -0
- package/lib/typescript/src/haptics/types.d.ts +37 -0
- package/lib/typescript/src/haptics/types.d.ts.map +1 -0
- package/lib/typescript/src/haptics.d.ts +8 -0
- package/lib/typescript/src/haptics.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +10 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/particles/createParticleSystem.d.ts +5 -0
- package/lib/typescript/src/particles/createParticleSystem.d.ts.map +1 -0
- package/lib/typescript/src/particles/defineParticleEffect.d.ts +3 -0
- package/lib/typescript/src/particles/defineParticleEffect.d.ts.map +1 -0
- package/lib/typescript/src/particles/errors.d.ts +5 -0
- package/lib/typescript/src/particles/errors.d.ts.map +1 -0
- package/lib/typescript/src/particles/index.d.ts +6 -0
- package/lib/typescript/src/particles/index.d.ts.map +1 -0
- package/lib/typescript/src/particles/sampling.d.ts +54 -0
- package/lib/typescript/src/particles/sampling.d.ts.map +1 -0
- package/lib/typescript/src/particles/types.d.ts +292 -0
- package/lib/typescript/src/particles/types.d.ts.map +1 -0
- package/lib/typescript/src/particles.d.ts +2 -0
- package/lib/typescript/src/particles.d.ts.map +1 -0
- package/lib/typescript/src/react/GameButtonPad.d.ts +84 -0
- package/lib/typescript/src/react/GameButtonPad.d.ts.map +1 -0
- package/lib/typescript/src/react/GamePointerInput.d.ts.map +1 -1
- package/lib/typescript/src/react/GameView.d.ts +27 -1
- package/lib/typescript/src/react/GameView.d.ts.map +1 -1
- package/lib/typescript/src/react/assets/createGameAssetStore.d.ts.map +1 -1
- package/lib/typescript/src/react/assets/useGameAssets.d.ts.map +1 -1
- package/lib/typescript/src/react/bindAppLifecycle.d.ts +7 -1
- package/lib/typescript/src/react/bindAppLifecycle.d.ts.map +1 -1
- package/lib/typescript/src/react/bindGameSession.d.ts.map +1 -1
- package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts +24 -0
- package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts.map +1 -0
- package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts +44 -0
- package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts.map +1 -0
- package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts +22 -0
- package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts.map +1 -0
- package/lib/typescript/src/react/cleanupList.d.ts +21 -0
- package/lib/typescript/src/react/cleanupList.d.ts.map +1 -0
- package/lib/typescript/src/react/instrumentation.d.ts +33 -3
- package/lib/typescript/src/react/instrumentation.d.ts.map +1 -1
- package/lib/typescript/src/react/lifecycleSource.d.ts +21 -0
- package/lib/typescript/src/react/lifecycleSource.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/ParticleView.d.ts +65 -0
- package/lib/typescript/src/react/particles/ParticleView.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/culling.d.ts +70 -0
- package/lib/typescript/src/react/particles/culling.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/index.d.ts +7 -0
- package/lib/typescript/src/react/particles/index.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/spriteXForm.d.ts +28 -0
- package/lib/typescript/src/react/particles/spriteXForm.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/useParticlePresentation.d.ts +48 -0
- package/lib/typescript/src/react/particles/useParticlePresentation.d.ts.map +1 -0
- package/lib/typescript/src/react/pointerBinding.d.ts +38 -8
- package/lib/typescript/src/react/pointerBinding.d.ts.map +1 -1
- package/lib/typescript/src/react/pointerCamera.d.ts +20 -0
- package/lib/typescript/src/react/pointerCamera.d.ts.map +1 -0
- package/lib/typescript/src/react/pointerCoalescer.d.ts +17 -1
- package/lib/typescript/src/react/pointerCoalescer.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/GameSprite.d.ts +3 -10
- package/lib/typescript/src/react/sprites/GameSprite.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/GameWorld2D.d.ts +51 -6
- package/lib/typescript/src/react/sprites/GameWorld2D.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/Sprite.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/SpriteBatch.d.ts +22 -1
- package/lib/typescript/src/react/sprites/SpriteBatch.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/batchVisibility.d.ts +28 -0
- package/lib/typescript/src/react/sprites/batchVisibility.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/spriteSelection.d.ts +58 -0
- package/lib/typescript/src/react/sprites/spriteSelection.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/spriteTransform.d.ts +27 -12
- package/lib/typescript/src/react/sprites/spriteTransform.d.ts.map +1 -1
- package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts +69 -0
- package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts.map +1 -0
- package/lib/typescript/src/react/tilemap/tilePresentation.d.ts +217 -0
- package/lib/typescript/src/react/tilemap/tilePresentation.d.ts.map +1 -0
- package/lib/typescript/src/react/useGameSession.d.ts +48 -0
- package/lib/typescript/src/react/useGameSession.d.ts.map +1 -0
- package/lib/typescript/src/react/useGameSessionStatus.d.ts +23 -0
- package/lib/typescript/src/react/useGameSessionStatus.d.ts.map +1 -0
- package/lib/typescript/src/react/viewportBinding.d.ts +5 -1
- package/lib/typescript/src/react/viewportBinding.d.ts.map +1 -1
- package/lib/typescript/src/react.d.ts +18 -1
- package/lib/typescript/src/react.d.ts.map +1 -1
- package/lib/typescript/src/scene/defineScene.d.ts +22 -2
- package/lib/typescript/src/scene/defineScene.d.ts.map +1 -1
- package/lib/typescript/src/scene/types.d.ts +24 -4
- package/lib/typescript/src/scene/types.d.ts.map +1 -1
- package/lib/typescript/src/sprites/sampleSpriteClip.d.ts +26 -2
- package/lib/typescript/src/sprites/sampleSpriteClip.d.ts.map +1 -1
- package/lib/typescript/src/sprites/spriteAnimationState.d.ts +6 -7
- package/lib/typescript/src/sprites/spriteAnimationState.d.ts.map +1 -1
- package/lib/typescript/src/sprites.d.ts +10 -0
- package/lib/typescript/src/sprites.d.ts.map +1 -0
- package/lib/typescript/src/storage/adapters/asyncStorage.d.ts +18 -0
- package/lib/typescript/src/storage/adapters/asyncStorage.d.ts.map +1 -0
- package/lib/typescript/src/storage/adapters/memory.d.ts +16 -0
- package/lib/typescript/src/storage/adapters/memory.d.ts.map +1 -0
- package/lib/typescript/src/storage/errors.d.ts +37 -0
- package/lib/typescript/src/storage/errors.d.ts.map +1 -0
- package/lib/typescript/src/storage/index.d.ts +11 -0
- package/lib/typescript/src/storage/index.d.ts.map +1 -0
- package/lib/typescript/src/storage/schema.d.ts +22 -0
- package/lib/typescript/src/storage/schema.d.ts.map +1 -0
- package/lib/typescript/src/storage/serialization.d.ts +23 -0
- package/lib/typescript/src/storage/serialization.d.ts.map +1 -0
- package/lib/typescript/src/storage/store.d.ts +3 -0
- package/lib/typescript/src/storage/store.d.ts.map +1 -0
- package/lib/typescript/src/storage/types.d.ts +69 -0
- package/lib/typescript/src/storage/types.d.ts.map +1 -0
- package/lib/typescript/src/storage/validation.d.ts +24 -0
- package/lib/typescript/src/storage/validation.d.ts.map +1 -0
- package/lib/typescript/src/storage.d.ts +2 -0
- package/lib/typescript/src/storage.d.ts.map +1 -0
- package/lib/typescript/src/testing.d.ts +1 -0
- package/lib/typescript/src/testing.d.ts.map +1 -1
- package/lib/typescript/src/tilemap/chunkStats.d.ts +14 -0
- package/lib/typescript/src/tilemap/chunkStats.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/definitions.d.ts +38 -0
- package/lib/typescript/src/tilemap/definitions.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/errors.d.ts +7 -0
- package/lib/typescript/src/tilemap/errors.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/index.d.ts +8 -0
- package/lib/typescript/src/tilemap/index.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/movement.d.ts +52 -0
- package/lib/typescript/src/tilemap/movement.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/queries.d.ts +21 -0
- package/lib/typescript/src/tilemap/queries.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/tiledAdapter.d.ts +32 -0
- package/lib/typescript/src/tilemap/tiledAdapter.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/types.d.ts +127 -0
- package/lib/typescript/src/tilemap/types.d.ts.map +1 -0
- package/lib/typescript/src/tilemap.d.ts +2 -0
- package/lib/typescript/src/tilemap.d.ts.map +1 -0
- package/package.json +94 -4
- package/src/assets/defineAssets.ts +31 -5
- package/src/assets.ts +27 -0
- package/src/audio/createGameAudio.ts +749 -0
- package/src/audio/errors.ts +12 -0
- package/src/audio/index.ts +9 -0
- package/src/audio/resolver.ts +74 -0
- package/src/audio/types.ts +47 -0
- package/src/audio.ts +13 -0
- package/src/camera2d/bounds.ts +69 -0
- package/src/camera2d/extents.ts +25 -0
- package/src/camera2d/follow.ts +165 -0
- package/src/camera2d/index.ts +29 -0
- package/src/camera2d/interpolation.ts +113 -0
- package/src/camera2d/shake.ts +90 -0
- package/src/camera2d/transform.ts +148 -0
- package/src/camera2d/types.ts +73 -0
- package/src/camera2d/validation.ts +126 -0
- package/src/camera2d/visibility.ts +181 -0
- package/src/camera2d.ts +6 -0
- package/src/collision2d/colliders.ts +292 -0
- package/src/collision2d/debug.ts +133 -0
- package/src/collision2d/filters.ts +48 -0
- package/src/collision2d/index.ts +74 -0
- package/src/collision2d/intersections.ts +82 -0
- package/src/collision2d/manifolds.ts +191 -0
- package/src/collision2d/segments.ts +176 -0
- package/src/collision2d/spatialHash.ts +211 -0
- package/src/collision2d/sweeps.ts +269 -0
- package/src/collision2d.ts +6 -0
- package/src/core/input/buttonPad.ts +235 -0
- package/src/core/input/createInputBuffer.ts +95 -14
- package/src/core/input/types.ts +7 -0
- package/src/core/session/createGameSession.ts +480 -53
- package/src/core/session/deepFreeze.ts +104 -3
- package/src/core/session/diagnostics.ts +2 -0
- package/src/core/session/types.ts +77 -4
- package/src/definition/defineGame.ts +61 -3
- package/src/definition/types.ts +10 -0
- package/src/events/defineGameEvents.ts +46 -0
- package/src/events/errors.ts +14 -0
- package/src/events/index.ts +14 -0
- package/src/events/payload.ts +234 -0
- package/src/events/seed.ts +33 -0
- package/src/events/types.ts +53 -0
- package/src/events.ts +20 -0
- package/src/geometry/helpers.ts +136 -0
- package/src/geometry/index.ts +14 -0
- package/src/geometry/types.ts +54 -0
- package/src/geometry/validation.ts +131 -0
- package/src/geometry.ts +6 -0
- package/src/haptics/createGameHaptics.ts +214 -0
- package/src/haptics/errors.ts +12 -0
- package/src/haptics/index.ts +3 -0
- package/src/haptics/resolver.ts +58 -0
- package/src/haptics/types.ts +48 -0
- package/src/haptics.ts +7 -0
- package/src/index.ts +37 -1
- package/src/particles/createParticleSystem.ts +505 -0
- package/src/particles/defineParticleEffect.ts +164 -0
- package/src/particles/errors.ts +6 -0
- package/src/particles/index.ts +5 -0
- package/src/particles/sampling.ts +141 -0
- package/src/particles/types.ts +327 -0
- package/src/particles.ts +1 -0
- package/src/react/GameButtonPad.tsx +436 -0
- package/src/react/GamePointerInput.tsx +73 -8
- package/src/react/GameView.tsx +160 -61
- package/src/react/assets/createGameAssetStore.ts +140 -107
- package/src/react/assets/useGameAssets.ts +63 -31
- package/src/react/bindAppLifecycle.ts +55 -19
- package/src/react/bindGameSession.ts +12 -2
- package/src/react/camera2d/GameLayer2D.tsx +43 -0
- package/src/react/camera2d/defineGameCamera2D.ts +59 -0
- package/src/react/camera2d/usePresentedCameraBinding.ts +185 -0
- package/src/react/cleanupList.ts +48 -0
- package/src/react/instrumentation.ts +31 -3
- package/src/react/lifecycleSource.ts +58 -0
- package/src/react/particles/ParticleView.tsx +358 -0
- package/src/react/particles/culling.ts +145 -0
- package/src/react/particles/index.ts +6 -0
- package/src/react/particles/spriteXForm.ts +72 -0
- package/src/react/particles/useParticlePresentation.ts +261 -0
- package/src/react/pointerBinding.ts +74 -16
- package/src/react/pointerCamera.ts +33 -0
- package/src/react/pointerCoalescer.ts +36 -10
- package/src/react/sprites/GameSprite.tsx +4 -33
- package/src/react/sprites/GameWorld2D.tsx +113 -7
- package/src/react/sprites/Sprite.tsx +51 -72
- package/src/react/sprites/SpriteBatch.tsx +74 -22
- package/src/react/sprites/batchVisibility.ts +76 -0
- package/src/react/sprites/spriteSelection.ts +133 -0
- package/src/react/sprites/spriteTransform.ts +46 -26
- package/src/react/tilemap/TileMapLayer2D.tsx +274 -0
- package/src/react/tilemap/tilePresentation.ts +491 -0
- package/src/react/useGameSession.ts +90 -0
- package/src/react/useGameSessionStatus.ts +53 -0
- package/src/react/viewportBinding.ts +5 -1
- package/src/react.ts +18 -1
- package/src/scene/defineScene.ts +47 -5
- package/src/scene/types.ts +37 -3
- package/src/sprites/sampleSpriteClip.ts +82 -14
- package/src/sprites/spriteAnimationState.ts +29 -25
- package/src/sprites.ts +22 -0
- package/src/storage/adapters/asyncStorage.ts +77 -0
- package/src/storage/adapters/memory.ts +58 -0
- package/src/storage/errors.ts +88 -0
- package/src/storage/index.ts +18 -0
- package/src/storage/schema.ts +147 -0
- package/src/storage/serialization.ts +248 -0
- package/src/storage/store.ts +380 -0
- package/src/storage/types.ts +76 -0
- package/src/storage/validation.ts +102 -0
- package/src/storage.ts +1 -0
- package/src/testing.ts +4 -0
- package/src/tilemap/chunkStats.ts +24 -0
- package/src/tilemap/definitions.ts +327 -0
- package/src/tilemap/errors.ts +11 -0
- package/src/tilemap/index.ts +10 -0
- package/src/tilemap/movement.ts +368 -0
- package/src/tilemap/queries.ts +136 -0
- package/src/tilemap/tiledAdapter.ts +165 -0
- package/src/tilemap/types.ts +119 -0
- package/src/tilemap.ts +1 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { storageError } from "./errors.js";
|
|
4
|
+
import { STORAGE_LIMITS } from "./types.js";
|
|
5
|
+
const ENVELOPE_FORMAT = 'rn-gamekit.save';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Bounded plain-data clone + validation for storage payloads.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors the strictness of event payloads but with storage-sized limits.
|
|
11
|
+
* Rejects: functions, symbols, bigint, non-finite numbers, cycles,
|
|
12
|
+
* sparse holes, accessors, non-enumerable, unsafe prototype keys,
|
|
13
|
+
* array subclasses, class instances, React elements, thenables.
|
|
14
|
+
*/
|
|
15
|
+
export function cloneAndValidatePlainData(value, basePath = 'payload') {
|
|
16
|
+
let nodeCount = 0;
|
|
17
|
+
const ancestry = new WeakSet();
|
|
18
|
+
const fail = (path, reason, code = 'UNSUPPORTED_VALUE') => {
|
|
19
|
+
// Depth/size specific codes where useful
|
|
20
|
+
if (reason.includes('maximum depth')) {
|
|
21
|
+
throw storageError(`storage payload invalid at ${path}: ${reason}`, 'DEPTH_EXCEEDED', {
|
|
22
|
+
path
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
if (reason.includes('maximum payload size') || reason.includes('maximum serialized bytes') || reason.includes('exceeds maximum')) {
|
|
26
|
+
// Let caller turn size failures into SIZE_EXCEEDED where appropriate
|
|
27
|
+
if (reason.includes('nodes') || reason.includes('array') || reason.includes('object fields') || reason.includes('string')) {
|
|
28
|
+
throw storageError(`storage payload invalid at ${path}: ${reason}`, 'SIZE_EXCEEDED', {
|
|
29
|
+
path
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
throw storageError(`storage payload invalid at ${path}: ${reason}`, code, {
|
|
34
|
+
path
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
const isPlainRecord = v => {
|
|
38
|
+
const proto = Object.getPrototypeOf(v);
|
|
39
|
+
return proto === Object.prototype || proto === null;
|
|
40
|
+
};
|
|
41
|
+
const isReactElement = v => {
|
|
42
|
+
const desc = Object.getOwnPropertyDescriptor(v, '$$typeof');
|
|
43
|
+
if (desc !== undefined) return true;
|
|
44
|
+
return '$$typeof' in v;
|
|
45
|
+
};
|
|
46
|
+
const clone = (val, path, depth) => {
|
|
47
|
+
if (depth > STORAGE_LIMITS.MAX_DEPTH) {
|
|
48
|
+
fail(path, `exceeds maximum depth of ${STORAGE_LIMITS.MAX_DEPTH}`);
|
|
49
|
+
}
|
|
50
|
+
nodeCount += 1;
|
|
51
|
+
if (nodeCount > STORAGE_LIMITS.MAX_NODES) {
|
|
52
|
+
fail(path, `exceeds maximum payload size of ${STORAGE_LIMITS.MAX_NODES} nodes`);
|
|
53
|
+
}
|
|
54
|
+
if (val === null) return null;
|
|
55
|
+
const t = typeof val;
|
|
56
|
+
if (t === 'string') {
|
|
57
|
+
const s = val;
|
|
58
|
+
if (s.length > STORAGE_LIMITS.MAX_STRING_LENGTH) {
|
|
59
|
+
fail(path, `string exceeds maximum length of ${STORAGE_LIMITS.MAX_STRING_LENGTH}`);
|
|
60
|
+
}
|
|
61
|
+
return s;
|
|
62
|
+
}
|
|
63
|
+
if (t === 'boolean') return val;
|
|
64
|
+
if (t === 'number') {
|
|
65
|
+
const n = val;
|
|
66
|
+
if (!Number.isFinite(n)) fail(path, 'number must be finite');
|
|
67
|
+
return n;
|
|
68
|
+
}
|
|
69
|
+
if (t === 'bigint') fail(path, 'bigint is not a supported storage type');
|
|
70
|
+
if (t === 'symbol') fail(path, 'symbol is not a supported storage type');
|
|
71
|
+
if (t === 'function') fail(path, 'function is not a supported storage type');
|
|
72
|
+
if (t === 'undefined') fail(path, 'undefined is not a supported storage type (use null)');
|
|
73
|
+
if (t !== 'object') fail(path, `unsupported storage type "${t}"`);
|
|
74
|
+
const obj = val;
|
|
75
|
+
if (ancestry.has(obj)) fail(path, 'cycle detected in payload');
|
|
76
|
+
ancestry.add(obj);
|
|
77
|
+
try {
|
|
78
|
+
// GS-STORAGE-03 (coordinates GS-EVENT-03): thenables are rejected
|
|
79
|
+
// without invoking any user code. Only instanceof runs here; every
|
|
80
|
+
// other non-plain object fails at the array/record branches below.
|
|
81
|
+
// Own `then` functions are rejected later as function values.
|
|
82
|
+
if (obj instanceof Promise) {
|
|
83
|
+
fail(path, 'promise/thenable is not a supported storage type');
|
|
84
|
+
}
|
|
85
|
+
if (isReactElement(obj)) fail(path, 'React element is not a supported storage type');
|
|
86
|
+
if (Array.isArray(obj)) {
|
|
87
|
+
const arr = obj;
|
|
88
|
+
if (Object.getPrototypeOf(arr) !== Array.prototype) fail(path, 'array subclass is not a supported storage type');
|
|
89
|
+
if (arr.length > STORAGE_LIMITS.MAX_ARRAY_LENGTH) fail(path, `array exceeds maximum length of ${STORAGE_LIMITS.MAX_ARRAY_LENGTH}`);
|
|
90
|
+
const descs = Object.getOwnPropertyDescriptors(arr);
|
|
91
|
+
for (let i = 0; i < arr.length; i += 1) {
|
|
92
|
+
const key = String(i);
|
|
93
|
+
if (!(key in descs)) fail(`${path}[${i}]`, 'sparse array holes are not supported');
|
|
94
|
+
const d = descs[key];
|
|
95
|
+
if (d.get !== undefined || d.set !== undefined) fail(`${path}[${i}]`, 'accessor property is not supported');
|
|
96
|
+
if (d.enumerable === false) fail(`${path}[${i}]`, 'non-enumerable property is not supported');
|
|
97
|
+
}
|
|
98
|
+
const cloned = new Array(arr.length);
|
|
99
|
+
for (let i = 0; i < arr.length; i += 1) {
|
|
100
|
+
const key = String(i);
|
|
101
|
+
const d = descs[key];
|
|
102
|
+
cloned[i] = clone(d.value, `${path}[${i}]`, depth + 1);
|
|
103
|
+
}
|
|
104
|
+
for (const key of Reflect.ownKeys(descs)) {
|
|
105
|
+
if (typeof key === 'symbol') fail(`${path}[Symbol(${String(key).slice(7, -1)})]`, 'symbol-keyed property is not supported');
|
|
106
|
+
const k = key;
|
|
107
|
+
if (k === 'length') continue;
|
|
108
|
+
if (/^(0|[1-9]\d*)$/.test(k)) {
|
|
109
|
+
const idx = Number(k);
|
|
110
|
+
if (idx < arr.length && String(idx) === k) continue;
|
|
111
|
+
}
|
|
112
|
+
if (k === '__proto__' || k === 'constructor' || k === 'prototype') fail(`${path}.${k}`, 'unsafe prototype key is not supported');
|
|
113
|
+
const d = descs[k];
|
|
114
|
+
if (d.get !== undefined || d.set !== undefined) fail(`${path}.${k}`, 'accessor property is not supported');
|
|
115
|
+
if (d.enumerable === false) fail(`${path}.${k}`, 'non-enumerable property is not supported');
|
|
116
|
+
fail(`${path}.${k}`, 'array extra property is not a supported storage member');
|
|
117
|
+
}
|
|
118
|
+
Object.freeze(cloned);
|
|
119
|
+
return cloned;
|
|
120
|
+
}
|
|
121
|
+
if (!isPlainRecord(obj)) fail(path, 'only plain records and arrays are supported (class instance, Map, Set, Date, etc. are rejected)');
|
|
122
|
+
const proto = Object.getPrototypeOf(obj);
|
|
123
|
+
const descs = Object.getOwnPropertyDescriptors(obj);
|
|
124
|
+
const keys = Object.keys(descs);
|
|
125
|
+
if (keys.length > STORAGE_LIMITS.MAX_OBJECT_FIELDS) {
|
|
126
|
+
fail(path, `object exceeds maximum field count of ${STORAGE_LIMITS.MAX_OBJECT_FIELDS}`);
|
|
127
|
+
}
|
|
128
|
+
for (const key of Reflect.ownKeys(descs)) {
|
|
129
|
+
if (typeof key === 'symbol') fail(`${path}[Symbol(${String(key).slice(7, -1)})]`, 'symbol-keyed property is not supported');
|
|
130
|
+
const k = key;
|
|
131
|
+
if (k === '__proto__' || k === 'constructor' || k === 'prototype') fail(`${path}.${k}`, 'unsafe prototype key is not supported');
|
|
132
|
+
const d = descs[k];
|
|
133
|
+
if (d.get !== undefined || d.set !== undefined) fail(`${path}.${k}`, 'accessor property is not supported');
|
|
134
|
+
if (d.enumerable === false) fail(`${path}.${k}`, 'non-enumerable property is not supported');
|
|
135
|
+
}
|
|
136
|
+
const cloned = proto === null ? Object.create(null) : {};
|
|
137
|
+
for (const key of keys) {
|
|
138
|
+
const d = descs[key];
|
|
139
|
+
cloned[key] = clone(d.value, `${path}.${key}`, depth + 1);
|
|
140
|
+
}
|
|
141
|
+
Object.freeze(cloned);
|
|
142
|
+
return cloned;
|
|
143
|
+
} finally {
|
|
144
|
+
ancestry.delete(obj);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const result = clone(value, basePath, 0);
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Exact UTF-8 byte length (GS-STORAGE-03): the single routine for every
|
|
153
|
+
* storage size check. TextEncoder is exact everywhere it exists (Node,
|
|
154
|
+
* browsers, modern Hermes); the scalar fallback below is bit-exact too,
|
|
155
|
+
* including unpaired surrogates (which encode as U+FFFD, 3 bytes).
|
|
156
|
+
*/
|
|
157
|
+
export function utf8ByteLength(str) {
|
|
158
|
+
if (typeof TextEncoder !== 'undefined') {
|
|
159
|
+
return new TextEncoder().encode(str).length;
|
|
160
|
+
}
|
|
161
|
+
return utf8ByteLengthScalar(str);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Bit-exact scalar UTF-8 length for runtimes without TextEncoder. */
|
|
165
|
+
export function utf8ByteLengthScalar(str) {
|
|
166
|
+
let bytes = 0;
|
|
167
|
+
for (let i = 0; i < str.length; i++) {
|
|
168
|
+
const code = str.charCodeAt(i);
|
|
169
|
+
if (code < 0x80) {
|
|
170
|
+
bytes += 1;
|
|
171
|
+
} else if (code < 0x800) {
|
|
172
|
+
bytes += 2;
|
|
173
|
+
} else if (code >= 0xd800 && code <= 0xdbff && i + 1 < str.length) {
|
|
174
|
+
const next = str.charCodeAt(i + 1);
|
|
175
|
+
if (next >= 0xdc00 && next <= 0xdfff) {
|
|
176
|
+
bytes += 4;
|
|
177
|
+
i++;
|
|
178
|
+
} else {
|
|
179
|
+
bytes += 3;
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
bytes += 3;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return bytes;
|
|
186
|
+
}
|
|
187
|
+
function serializedByteLength(str) {
|
|
188
|
+
return utf8ByteLength(str);
|
|
189
|
+
}
|
|
190
|
+
export function serializeEnvelope(envelope) {
|
|
191
|
+
// Validate payload plain-data first
|
|
192
|
+
cloneAndValidatePlainData(envelope.payload, 'payload');
|
|
193
|
+
// Envelope itself is plain, but we validate its shape before stringify
|
|
194
|
+
if (envelope.format !== ENVELOPE_FORMAT) {
|
|
195
|
+
throw storageError(`envelope format must be "${ENVELOPE_FORMAT}"`, 'CORRUPT_ENVELOPE', {
|
|
196
|
+
path: 'format'
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
const json = JSON.stringify(envelope);
|
|
200
|
+
const bytes = serializedByteLength(json);
|
|
201
|
+
if (bytes > STORAGE_LIMITS.MAX_SERIALIZED_BYTES) {
|
|
202
|
+
throw storageError(`serialized envelope exceeds ${STORAGE_LIMITS.MAX_SERIALIZED_BYTES} bytes (got ${bytes})`, 'SIZE_EXCEEDED', {
|
|
203
|
+
path: 'envelope'
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return json;
|
|
207
|
+
}
|
|
208
|
+
export function parseEnvelope(raw) {
|
|
209
|
+
let parsed;
|
|
210
|
+
try {
|
|
211
|
+
parsed = JSON.parse(raw);
|
|
212
|
+
} catch (cause) {
|
|
213
|
+
throw storageError(`corrupt envelope: JSON parse failed`, 'CORRUPT_ENVELOPE', {
|
|
214
|
+
cause
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
218
|
+
throw storageError(`corrupt envelope: expected object`, 'CORRUPT_ENVELOPE');
|
|
219
|
+
}
|
|
220
|
+
const obj = parsed;
|
|
221
|
+
if (obj.format !== ENVELOPE_FORMAT) {
|
|
222
|
+
throw storageError(`corrupt envelope: expected format "${ENVELOPE_FORMAT}"`, 'CORRUPT_ENVELOPE', {
|
|
223
|
+
path: 'format'
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
if (typeof obj.schemaId !== 'string') {
|
|
227
|
+
throw storageError(`corrupt envelope: schemaId must be string`, 'CORRUPT_ENVELOPE', {
|
|
228
|
+
path: 'schemaId'
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
if (!Number.isSafeInteger(obj.schemaVersion)) {
|
|
232
|
+
throw storageError(`corrupt envelope: schemaVersion must be integer`, 'CORRUPT_ENVELOPE', {
|
|
233
|
+
path: 'schemaVersion'
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
if (typeof obj.savedAtMs !== 'number' || !Number.isFinite(obj.savedAtMs)) {
|
|
237
|
+
throw storageError(`corrupt envelope: savedAtMs must be finite number`, 'CORRUPT_ENVELOPE', {
|
|
238
|
+
path: 'savedAtMs'
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
if (!('payload' in obj)) {
|
|
242
|
+
throw storageError(`corrupt envelope: missing payload`, 'CORRUPT_ENVELOPE', {
|
|
243
|
+
path: 'payload'
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return obj;
|
|
247
|
+
}
|
|
248
|
+
export const STORAGE_ENVELOPE_FORMAT = ENVELOPE_FORMAT;
|
|
249
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["storageError","STORAGE_LIMITS","ENVELOPE_FORMAT","cloneAndValidatePlainData","value","basePath","nodeCount","ancestry","WeakSet","fail","path","reason","code","includes","isPlainRecord","v","proto","Object","getPrototypeOf","prototype","isReactElement","desc","getOwnPropertyDescriptor","undefined","clone","val","depth","MAX_DEPTH","MAX_NODES","t","s","length","MAX_STRING_LENGTH","n","Number","isFinite","obj","has","add","Promise","Array","isArray","arr","MAX_ARRAY_LENGTH","descs","getOwnPropertyDescriptors","i","key","String","d","get","set","enumerable","cloned","Reflect","ownKeys","slice","k","test","idx","freeze","keys","MAX_OBJECT_FIELDS","create","delete","result","utf8ByteLength","str","TextEncoder","encode","utf8ByteLengthScalar","bytes","charCodeAt","next","serializedByteLength","serializeEnvelope","envelope","payload","format","json","JSON","stringify","MAX_SERIALIZED_BYTES","parseEnvelope","raw","parsed","parse","cause","schemaId","isSafeInteger","schemaVersion","savedAtMs","STORAGE_ENVELOPE_FORMAT"],"sourceRoot":"../../../src","sources":["storage/serialization.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { GameStorageError, storageError } from "./errors.js";
|
|
4
|
+
import { STORAGE_LIMITS } from "./types.js";
|
|
5
|
+
import { storageKey, legacyStorageKey, validateNamespace, validateSlot } from "./validation.js";
|
|
6
|
+
import { createDefaultData, migratePayload, validateCurrentData } from "./schema.js";
|
|
7
|
+
import { cloneAndValidatePlainData, parseEnvelope, serializeEnvelope, utf8ByteLength, STORAGE_ENVELOPE_FORMAT } from "./serialization.js";
|
|
8
|
+
export function createGameSaveStore(options) {
|
|
9
|
+
const schema = options.schema;
|
|
10
|
+
const adapter = options.adapter;
|
|
11
|
+
const namespace = options.namespace;
|
|
12
|
+
validateNamespace(namespace);
|
|
13
|
+
|
|
14
|
+
// Per-slot serialized queue: slot -> tail promise. Retained until every accepted operation settles.
|
|
15
|
+
const slotQueues = new Map();
|
|
16
|
+
// Active operation promises for flush() snapshotting. Each flush gets its own immutable snapshot.
|
|
17
|
+
const active = new Set();
|
|
18
|
+
let disposed = false;
|
|
19
|
+
function track(p) {
|
|
20
|
+
const wrapped = p.finally(() => {
|
|
21
|
+
active.delete(wrapped);
|
|
22
|
+
});
|
|
23
|
+
active.add(wrapped);
|
|
24
|
+
return wrapped;
|
|
25
|
+
}
|
|
26
|
+
function enqueue(slot, op) {
|
|
27
|
+
// Acceptance boundary is the successful public method call; already-accepted ops are never cancelled by later dispose.
|
|
28
|
+
const tail = slotQueues.get(slot) ?? Promise.resolve();
|
|
29
|
+
let resolveTail = () => {};
|
|
30
|
+
const nextTail = new Promise(res => {
|
|
31
|
+
resolveTail = res;
|
|
32
|
+
});
|
|
33
|
+
slotQueues.set(slot, nextTail);
|
|
34
|
+
const run = tail.catch(() => {
|
|
35
|
+
// Previous failure does not block next; continue
|
|
36
|
+
}).then(() => op()).finally(() => {
|
|
37
|
+
// Clean only when this tail is still the current tail; otherwise a newer operation has already replaced it.
|
|
38
|
+
if (slotQueues.get(slot) === nextTail) {
|
|
39
|
+
slotQueues.delete(slot);
|
|
40
|
+
}
|
|
41
|
+
resolveTail();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Ensure nextTail mirrors run settlement without creating an unhandled rejection.
|
|
45
|
+
run.then(() => {}, () => {});
|
|
46
|
+
return track(run);
|
|
47
|
+
}
|
|
48
|
+
async function loadInternal(slot) {
|
|
49
|
+
validateSlot(slot);
|
|
50
|
+
const key = storageKey(namespace, slot);
|
|
51
|
+
let raw;
|
|
52
|
+
try {
|
|
53
|
+
raw = await adapter.read(key);
|
|
54
|
+
} catch (cause) {
|
|
55
|
+
throw storageError(`backend read failed for slot "${slot}"`, 'BACKEND_READ_FAILED', {
|
|
56
|
+
operation: 'load',
|
|
57
|
+
namespace,
|
|
58
|
+
slot,
|
|
59
|
+
cause
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// GS-STORAGE-01: read-only legacy fallback — pre-upgrade records load
|
|
63
|
+
// without any rewrite. A v2 miss costs one extra read for heritage.
|
|
64
|
+
if (raw === undefined) {
|
|
65
|
+
try {
|
|
66
|
+
raw = await adapter.read(legacyStorageKey(namespace, slot));
|
|
67
|
+
} catch (cause) {
|
|
68
|
+
throw storageError(`backend read failed for slot "${slot}"`, 'BACKEND_READ_FAILED', {
|
|
69
|
+
operation: 'load',
|
|
70
|
+
namespace,
|
|
71
|
+
slot,
|
|
72
|
+
cause
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (raw === undefined) {
|
|
77
|
+
const data = createDefaultData(schema);
|
|
78
|
+
return {
|
|
79
|
+
status: 'default',
|
|
80
|
+
data
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// F3: measure raw UTF-8 byte length before JSON.parse and reject oversized records.
|
|
85
|
+
const rawBytes = utf8ByteLength(raw);
|
|
86
|
+
if (rawBytes > STORAGE_LIMITS.MAX_SERIALIZED_BYTES) {
|
|
87
|
+
throw storageError(`stored record for slot "${slot}" exceeds ${STORAGE_LIMITS.MAX_SERIALIZED_BYTES} bytes (got ${rawBytes})`, 'SIZE_EXCEEDED', {
|
|
88
|
+
operation: 'load',
|
|
89
|
+
namespace,
|
|
90
|
+
slot,
|
|
91
|
+
schemaId: schema.id,
|
|
92
|
+
schemaVersion: schema.version,
|
|
93
|
+
path: 'envelope'
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Validate loaded bytes as untrusted before migration
|
|
98
|
+
let envelope;
|
|
99
|
+
try {
|
|
100
|
+
envelope = parseEnvelope(raw);
|
|
101
|
+
} catch (cause) {
|
|
102
|
+
if (cause instanceof GameStorageError) {
|
|
103
|
+
throw new GameStorageError(cause.message, {
|
|
104
|
+
code: cause.code,
|
|
105
|
+
operation: 'load',
|
|
106
|
+
namespace,
|
|
107
|
+
slot,
|
|
108
|
+
schemaId: schema.id,
|
|
109
|
+
schemaVersion: schema.version,
|
|
110
|
+
path: cause.path,
|
|
111
|
+
cause: cause.cause ?? cause
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
throw storageError(`corrupt envelope for slot "${slot}"`, 'CORRUPT_ENVELOPE', {
|
|
115
|
+
operation: 'load',
|
|
116
|
+
namespace,
|
|
117
|
+
slot,
|
|
118
|
+
cause
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (envelope.schemaId !== schema.id) {
|
|
122
|
+
throw storageError(`schema id mismatch: expected "${schema.id}" got "${envelope.schemaId}"`, 'SCHEMA_ID_MISMATCH', {
|
|
123
|
+
operation: 'load',
|
|
124
|
+
namespace,
|
|
125
|
+
slot,
|
|
126
|
+
schemaId: schema.id,
|
|
127
|
+
schemaVersion: schema.version
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
if (!Number.isSafeInteger(envelope.schemaVersion) || envelope.schemaVersion < 1) {
|
|
131
|
+
throw storageError(`corrupt envelope: invalid schemaVersion`, 'CORRUPT_ENVELOPE', {
|
|
132
|
+
operation: 'load',
|
|
133
|
+
namespace,
|
|
134
|
+
slot,
|
|
135
|
+
schemaId: schema.id
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (envelope.schemaVersion > schema.version) {
|
|
139
|
+
throw storageError(`stored version ${envelope.schemaVersion} is newer than current ${schema.version}`, 'FUTURE_VERSION', {
|
|
140
|
+
operation: 'load',
|
|
141
|
+
namespace,
|
|
142
|
+
slot,
|
|
143
|
+
schemaId: schema.id,
|
|
144
|
+
schemaVersion: schema.version
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// F3: bounded plain-data validation of the loaded payload BEFORE any migration sees it.
|
|
149
|
+
try {
|
|
150
|
+
cloneAndValidatePlainData(envelope.payload, 'payload');
|
|
151
|
+
} catch (cause) {
|
|
152
|
+
if (cause instanceof GameStorageError) {
|
|
153
|
+
throw new GameStorageError(cause.message, {
|
|
154
|
+
code: cause.code,
|
|
155
|
+
operation: 'load',
|
|
156
|
+
namespace,
|
|
157
|
+
slot,
|
|
158
|
+
schemaId: schema.id,
|
|
159
|
+
schemaVersion: schema.version,
|
|
160
|
+
path: cause.path,
|
|
161
|
+
cause: cause.cause ?? cause
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
throw storageError(`payload validation failed`, 'VALIDATION_FAILED', {
|
|
165
|
+
operation: 'load',
|
|
166
|
+
namespace,
|
|
167
|
+
slot,
|
|
168
|
+
cause
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Migrate if needed — each migration receives a deeply frozen engine-owned input and its output is bounded-cloned/frozen.
|
|
173
|
+
let payload = envelope.payload;
|
|
174
|
+
let fromVersion = envelope.schemaVersion;
|
|
175
|
+
let toVersion = schema.version;
|
|
176
|
+
let migrated = false;
|
|
177
|
+
if (fromVersion !== toVersion) {
|
|
178
|
+
try {
|
|
179
|
+
const result = migratePayload(schema, fromVersion, payload);
|
|
180
|
+
payload = result.data;
|
|
181
|
+
fromVersion = result.fromVersion;
|
|
182
|
+
toVersion = result.toVersion;
|
|
183
|
+
migrated = true;
|
|
184
|
+
} catch (cause) {
|
|
185
|
+
if (cause instanceof GameStorageError) {
|
|
186
|
+
throw new GameStorageError(cause.message, {
|
|
187
|
+
code: cause.code,
|
|
188
|
+
operation: 'load',
|
|
189
|
+
namespace,
|
|
190
|
+
slot,
|
|
191
|
+
schemaId: schema.id,
|
|
192
|
+
schemaVersion: schema.version,
|
|
193
|
+
path: cause.path,
|
|
194
|
+
cause: cause.cause ?? cause
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
throw storageError(`migration failed`, 'MIGRATION_FAILED', {
|
|
198
|
+
operation: 'load',
|
|
199
|
+
namespace,
|
|
200
|
+
slot,
|
|
201
|
+
cause
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Final validation — never overwrites stored record on failure
|
|
207
|
+
let data;
|
|
208
|
+
try {
|
|
209
|
+
data = validateCurrentData(schema, payload, 'payload');
|
|
210
|
+
} catch (cause) {
|
|
211
|
+
if (cause instanceof GameStorageError) {
|
|
212
|
+
throw new GameStorageError(cause.message, {
|
|
213
|
+
code: 'VALIDATION_FAILED',
|
|
214
|
+
operation: 'load',
|
|
215
|
+
namespace,
|
|
216
|
+
slot,
|
|
217
|
+
schemaId: schema.id,
|
|
218
|
+
schemaVersion: schema.version,
|
|
219
|
+
path: cause.path,
|
|
220
|
+
cause: cause.cause ?? cause
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
throw storageError(`final validation failed`, 'VALIDATION_FAILED', {
|
|
224
|
+
operation: 'load',
|
|
225
|
+
namespace,
|
|
226
|
+
slot,
|
|
227
|
+
cause
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
if (migrated) {
|
|
231
|
+
return {
|
|
232
|
+
status: 'migrated',
|
|
233
|
+
data,
|
|
234
|
+
fromVersion: envelope.schemaVersion,
|
|
235
|
+
toVersion
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
status: 'stored',
|
|
240
|
+
data
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
async function saveInternal(slot, data) {
|
|
244
|
+
validateSlot(slot);
|
|
245
|
+
// GS-STORAGE-02: save() already validated, normalized, cloned, and
|
|
246
|
+
// froze this snapshot at acceptance — re-running domain validation
|
|
247
|
+
// here would double-apply normalizing validators. Serialization still
|
|
248
|
+
// bounds-checks the bytes at its own boundary.
|
|
249
|
+
const envelope = {
|
|
250
|
+
format: STORAGE_ENVELOPE_FORMAT,
|
|
251
|
+
schemaId: schema.id,
|
|
252
|
+
schemaVersion: schema.version,
|
|
253
|
+
savedAtMs: Date.now(),
|
|
254
|
+
payload: data
|
|
255
|
+
};
|
|
256
|
+
let serialized;
|
|
257
|
+
try {
|
|
258
|
+
serialized = serializeEnvelope(envelope);
|
|
259
|
+
} catch (cause) {
|
|
260
|
+
if (cause instanceof GameStorageError) {
|
|
261
|
+
throw new GameStorageError(cause.message, {
|
|
262
|
+
code: cause.code === 'SIZE_EXCEEDED' || cause.code === 'DEPTH_EXCEEDED' ? cause.code : 'SERIALIZATION_FAILED',
|
|
263
|
+
operation: 'save',
|
|
264
|
+
namespace,
|
|
265
|
+
slot,
|
|
266
|
+
schemaId: schema.id,
|
|
267
|
+
schemaVersion: schema.version,
|
|
268
|
+
path: cause.path,
|
|
269
|
+
cause: cause.cause ?? cause
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
throw storageError(`serialization failed for slot "${slot}"`, 'SERIALIZATION_FAILED', {
|
|
273
|
+
operation: 'save',
|
|
274
|
+
namespace,
|
|
275
|
+
slot,
|
|
276
|
+
cause
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
const key = storageKey(namespace, slot);
|
|
280
|
+
try {
|
|
281
|
+
await adapter.write(key, serialized);
|
|
282
|
+
} catch (cause) {
|
|
283
|
+
throw storageError(`backend write failed for slot "${slot}"`, 'BACKEND_WRITE_FAILED', {
|
|
284
|
+
operation: 'save',
|
|
285
|
+
namespace,
|
|
286
|
+
slot,
|
|
287
|
+
cause
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
async function removeInternal(slot) {
|
|
292
|
+
validateSlot(slot);
|
|
293
|
+
// GS-STORAGE-01: delete the versioned record and its legacy heritage.
|
|
294
|
+
// Heritage deletion matches v1 shared-fate semantics for colliding
|
|
295
|
+
// pairs and converges to independence as pairs save under v2.
|
|
296
|
+
const key = storageKey(namespace, slot);
|
|
297
|
+
const legacyKey = legacyStorageKey(namespace, slot);
|
|
298
|
+
try {
|
|
299
|
+
await adapter.remove(key);
|
|
300
|
+
if (legacyKey !== key) {
|
|
301
|
+
await adapter.remove(legacyKey);
|
|
302
|
+
}
|
|
303
|
+
} catch (cause) {
|
|
304
|
+
throw storageError(`backend remove failed for slot "${slot}"`, 'BACKEND_REMOVE_FAILED', {
|
|
305
|
+
operation: 'remove',
|
|
306
|
+
namespace,
|
|
307
|
+
slot,
|
|
308
|
+
cause
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
const store = {
|
|
313
|
+
get disposed() {
|
|
314
|
+
return disposed;
|
|
315
|
+
},
|
|
316
|
+
load(slot) {
|
|
317
|
+
if (disposed) {
|
|
318
|
+
return Promise.reject(storageError(`store is disposed`, 'DISPOSED', {
|
|
319
|
+
operation: 'load',
|
|
320
|
+
namespace,
|
|
321
|
+
slot
|
|
322
|
+
}));
|
|
323
|
+
}
|
|
324
|
+
try {
|
|
325
|
+
validateSlot(slot);
|
|
326
|
+
} catch (e) {
|
|
327
|
+
return Promise.reject(e);
|
|
328
|
+
}
|
|
329
|
+
return enqueue(slot, () => loadInternal(slot));
|
|
330
|
+
},
|
|
331
|
+
save(slot, data) {
|
|
332
|
+
if (disposed) {
|
|
333
|
+
return Promise.reject(storageError(`store is disposed`, 'DISPOSED', {
|
|
334
|
+
operation: 'save',
|
|
335
|
+
namespace,
|
|
336
|
+
slot
|
|
337
|
+
}));
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
validateSlot(slot);
|
|
341
|
+
} catch (e) {
|
|
342
|
+
return Promise.reject(e);
|
|
343
|
+
}
|
|
344
|
+
// Snapshot synchronously so caller mutation after save() does not affect stored bytes
|
|
345
|
+
let snapshot;
|
|
346
|
+
try {
|
|
347
|
+
snapshot = validateCurrentData(schema, data, 'data');
|
|
348
|
+
} catch (e) {
|
|
349
|
+
return Promise.reject(e);
|
|
350
|
+
}
|
|
351
|
+
return enqueue(slot, () => saveInternal(slot, snapshot));
|
|
352
|
+
},
|
|
353
|
+
remove(slot) {
|
|
354
|
+
if (disposed) {
|
|
355
|
+
return Promise.reject(storageError(`store is disposed`, 'DISPOSED', {
|
|
356
|
+
operation: 'remove',
|
|
357
|
+
namespace,
|
|
358
|
+
slot
|
|
359
|
+
}));
|
|
360
|
+
}
|
|
361
|
+
try {
|
|
362
|
+
validateSlot(slot);
|
|
363
|
+
} catch (e) {
|
|
364
|
+
return Promise.reject(e);
|
|
365
|
+
}
|
|
366
|
+
return enqueue(slot, () => removeInternal(slot));
|
|
367
|
+
},
|
|
368
|
+
delete(slot) {
|
|
369
|
+
return store.remove(slot);
|
|
370
|
+
},
|
|
371
|
+
async flush() {
|
|
372
|
+
// Snapshot the currently tracked operation promises; do not let operations accepted after the call delay this flush.
|
|
373
|
+
const snapshot = Array.from(active);
|
|
374
|
+
if (snapshot.length === 0) return;
|
|
375
|
+
await Promise.allSettled(snapshot);
|
|
376
|
+
},
|
|
377
|
+
dispose() {
|
|
378
|
+
if (disposed) return;
|
|
379
|
+
disposed = true;
|
|
380
|
+
// Do not use generation to suppress already-accepted Promise results.
|
|
381
|
+
// Retain queue/tail ownership until every accepted operation settles; tails clean themselves when still current.
|
|
382
|
+
// New work is rejected at the public boundary above.
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
return store;
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GameStorageError","storageError","STORAGE_LIMITS","storageKey","legacyStorageKey","validateNamespace","validateSlot","createDefaultData","migratePayload","validateCurrentData","cloneAndValidatePlainData","parseEnvelope","serializeEnvelope","utf8ByteLength","STORAGE_ENVELOPE_FORMAT","createGameSaveStore","options","schema","adapter","namespace","slotQueues","Map","active","Set","disposed","track","p","wrapped","finally","delete","add","enqueue","slot","op","tail","get","Promise","resolve","resolveTail","nextTail","res","set","run","catch","then","loadInternal","key","raw","read","cause","operation","undefined","data","status","rawBytes","MAX_SERIALIZED_BYTES","schemaId","id","schemaVersion","version","path","envelope","message","code","Number","isSafeInteger","payload","fromVersion","toVersion","migrated","result","saveInternal","format","savedAtMs","Date","now","serialized","write","removeInternal","legacyKey","remove","store","load","reject","e","save","snapshot","flush","Array","from","length","allSettled","dispose"],"sourceRoot":"../../../src","sources":["storage/store.ts"],"mappings":"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","ignoreList":[]}
|