murow 0.0.70 → 0.0.72

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 (470) hide show
  1. package/README.md +54 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base/renderer-2d.js +1 -0
  74. package/dist/cjs/renderer/base/renderer-3d.js +1 -0
  75. package/dist/cjs/renderer/base/renderer.js +1 -0
  76. package/dist/cjs/renderer/gltf/helpers.js +1 -0
  77. package/dist/cjs/renderer/gltf/parser.js +1 -0
  78. package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
  79. package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
  80. package/dist/cjs/renderer/index.js +1 -0
  81. package/dist/cjs/renderer/math.js +1 -0
  82. package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
  83. package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
  84. package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
  85. package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
  86. package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
  87. package/dist/cjs/renderer/spritesheet/parser.js +1 -0
  88. package/dist/cjs/renderer/types.js +1 -0
  89. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  90. package/dist/esm/core/binary-codec/index.js +1 -0
  91. package/dist/esm/core/driver/driver.js +1 -0
  92. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  93. package/dist/esm/core/driver/drivers/index.js +1 -0
  94. package/dist/esm/core/driver/drivers/raf.js +1 -0
  95. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  96. package/dist/esm/core/driver/index.js +1 -0
  97. package/dist/esm/core/events/event-system.js +1 -0
  98. package/dist/esm/core/events/index.js +1 -0
  99. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  100. package/dist/esm/core/fixed-ticker/index.js +1 -0
  101. package/dist/esm/core/free-list/free-list.js +1 -0
  102. package/dist/esm/core/free-list/index.js +1 -0
  103. package/dist/esm/core/generate-id/generate-id.js +1 -0
  104. package/dist/esm/core/generate-id/index.js +1 -0
  105. package/dist/esm/core/index.js +1 -0
  106. package/dist/esm/core/input/index.js +1 -0
  107. package/dist/esm/core/input/manager.js +1 -0
  108. package/dist/esm/core/input/sources/browser.js +1 -0
  109. package/dist/esm/core/input/sources/index.js +1 -0
  110. package/dist/esm/core/input/types.js +0 -0
  111. package/dist/esm/core/lerp/index.js +1 -0
  112. package/dist/esm/core/lerp/lerp.js +1 -0
  113. package/dist/esm/core/navmesh/index.js +1 -0
  114. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  115. package/dist/esm/core/navmesh/navmesh.js +1 -0
  116. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  117. package/dist/esm/core/pooled-codec/index.js +1 -0
  118. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  119. package/dist/esm/core/prediction/index.js +1 -0
  120. package/dist/esm/core/prediction/prediction.js +1 -0
  121. package/dist/esm/core/ray/index.js +1 -0
  122. package/dist/esm/core/ray/ray-2d.js +1 -0
  123. package/dist/esm/core/ray/ray-3d.js +1 -0
  124. package/dist/esm/core/simple-rng/index.js +1 -0
  125. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  126. package/dist/esm/core/sparse-batcher/index.js +1 -0
  127. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  128. package/dist/esm/ecs/component-store.js +1 -0
  129. package/dist/esm/ecs/component.js +1 -0
  130. package/dist/esm/ecs/entity-handle.js +1 -0
  131. package/dist/esm/ecs/index.js +1 -0
  132. package/dist/esm/ecs/system-builder.js +1 -0
  133. package/dist/esm/ecs/world-systems.js +1 -0
  134. package/dist/esm/ecs/world.js +1 -0
  135. package/dist/esm/game/index.js +1 -0
  136. package/dist/esm/game/loop/index.js +1 -0
  137. package/dist/esm/game/loop/loop.js +1 -0
  138. package/dist/esm/index.js +1 -0
  139. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  140. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  141. package/dist/esm/net/buffer-pool.js +1 -0
  142. package/dist/esm/net/client.js +1 -0
  143. package/dist/esm/net/index.js +1 -0
  144. package/dist/esm/net/server.js +1 -0
  145. package/dist/esm/net/types.js +1 -0
  146. package/dist/esm/net/validators.js +1 -0
  147. package/dist/esm/protocol/index.js +1 -0
  148. package/dist/esm/protocol/intent/define-intent.js +1 -0
  149. package/dist/esm/protocol/intent/index.js +1 -0
  150. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  151. package/dist/esm/protocol/intent/intent.js +0 -0
  152. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  153. package/dist/esm/protocol/rpc/index.js +1 -0
  154. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  155. package/dist/esm/protocol/rpc/rpc.js +0 -0
  156. package/dist/esm/protocol/snapshot/index.js +1 -0
  157. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  158. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  159. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  160. package/dist/esm/renderer/base/renderer-2d.js +1 -0
  161. package/dist/esm/renderer/base/renderer-3d.js +1 -0
  162. package/dist/esm/renderer/base/renderer.js +1 -0
  163. package/dist/esm/renderer/gltf/helpers.js +1 -0
  164. package/dist/esm/renderer/gltf/parser.js +1 -0
  165. package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
  166. package/dist/esm/renderer/gltf/skin-parser.js +1 -0
  167. package/dist/esm/renderer/index.js +1 -0
  168. package/dist/esm/renderer/math.js +1 -0
  169. package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
  170. package/dist/esm/renderer/prefab-bucket/index.js +1 -0
  171. package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
  172. package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
  173. package/dist/esm/renderer/spritesheet/helpers.js +1 -0
  174. package/dist/esm/renderer/spritesheet/parser.js +1 -0
  175. package/dist/esm/renderer/types.js +0 -0
  176. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  177. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  178. package/dist/types/core/free-list/free-list.d.ts +31 -0
  179. package/dist/types/core/free-list/index.d.ts +1 -0
  180. package/dist/{core → types/core}/index.d.ts +5 -0
  181. package/dist/{core → types/core}/input/index.d.ts +1 -0
  182. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  183. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  184. package/dist/types/core/ray/index.d.ts +2 -0
  185. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  186. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  187. package/dist/types/core/simple-rng/index.d.ts +1 -0
  188. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  189. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  190. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  191. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  192. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  193. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  194. package/dist/{net → types/net}/index.d.ts +2 -2
  195. package/dist/types/renderer/base/renderer-2d.d.ts +13 -0
  196. package/dist/types/renderer/base/renderer-3d.d.ts +10 -0
  197. package/dist/types/renderer/base/renderer.d.ts +21 -0
  198. package/dist/types/renderer/gltf/helpers.d.ts +43 -0
  199. package/dist/types/renderer/gltf/parser.d.ts +49 -0
  200. package/dist/types/renderer/gltf/skeletal-animation.d.ts +96 -0
  201. package/dist/types/renderer/gltf/skin-parser.d.ts +107 -0
  202. package/dist/types/renderer/index.d.ts +15 -0
  203. package/dist/types/renderer/math.d.ts +37 -0
  204. package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
  205. package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
  206. package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
  207. package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
  208. package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
  209. package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
  210. package/dist/types/renderer/types.d.ts +89 -0
  211. package/dist/webgpu/cjs/index.js +5401 -0
  212. package/dist/webgpu/esm/index.js +5378 -0
  213. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  214. package/dist/webgpu/types/2d/renderer.d.ts +86 -0
  215. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  216. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  217. package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
  218. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  219. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  220. package/dist/webgpu/types/3d/renderer.d.ts +266 -0
  221. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  222. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  223. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +25 -0
  224. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  225. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  226. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  227. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  228. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  229. package/dist/webgpu/types/camera/index.d.ts +2 -0
  230. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  231. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  232. package/dist/webgpu/types/core/constants.d.ts +59 -0
  233. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  234. package/dist/webgpu/types/core/index.d.ts +2 -0
  235. package/dist/webgpu/types/core/types.d.ts +125 -0
  236. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  237. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  238. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  239. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  240. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  241. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  242. package/dist/webgpu/types/index.d.ts +35 -0
  243. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  244. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  245. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  246. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  247. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  248. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  249. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  250. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  251. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +28 -0
  252. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  253. package/package.json +96 -26
  254. package/dist/core/binary-codec/binary-codec.js +0 -354
  255. package/dist/core/binary-codec/index.js +0 -1
  256. package/dist/core/driver/driver.js +0 -47
  257. package/dist/core/driver/drivers/immediate.js +0 -61
  258. package/dist/core/driver/drivers/index.js +0 -3
  259. package/dist/core/driver/drivers/raf.js +0 -62
  260. package/dist/core/driver/drivers/timeout.js +0 -71
  261. package/dist/core/driver/index.js +0 -2
  262. package/dist/core/events/event-system.js +0 -88
  263. package/dist/core/events/index.js +0 -1
  264. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  265. package/dist/core/fixed-ticker/index.js +0 -1
  266. package/dist/core/generate-id/generate-id.js +0 -25
  267. package/dist/core/generate-id/index.js +0 -1
  268. package/dist/core/index.js +0 -10
  269. package/dist/core/input/index.js +0 -2
  270. package/dist/core/input/manager.js +0 -211
  271. package/dist/core/input/sources/browser.js +0 -29
  272. package/dist/core/input/sources/index.js +0 -1
  273. package/dist/core/lerp/index.js +0 -1
  274. package/dist/core/lerp/lerp.js +0 -42
  275. package/dist/core/navmesh/index.js +0 -1
  276. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  277. package/dist/core/navmesh/navmesh.js +0 -799
  278. package/dist/core/navmesh/navmesh.worker.js +0 -79
  279. package/dist/core/pooled-codec/index.js +0 -1
  280. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  281. package/dist/core/prediction/index.js +0 -1
  282. package/dist/core/prediction/prediction.js +0 -99
  283. package/dist/core.esm.js +0 -1
  284. package/dist/core.js +0 -1
  285. package/dist/ecs/component-store.js +0 -175
  286. package/dist/ecs/component.js +0 -43
  287. package/dist/ecs/entity-handle.js +0 -515
  288. package/dist/ecs/example.js +0 -125
  289. package/dist/ecs/index.js +0 -4
  290. package/dist/ecs/system-builder.js +0 -249
  291. package/dist/ecs/world-systems.js +0 -79
  292. package/dist/ecs/world.js +0 -767
  293. package/dist/game/index.js +0 -1
  294. package/dist/game/loop/index.js +0 -1
  295. package/dist/game/loop/loop.js +0 -108
  296. package/dist/index.js +0 -26
  297. package/dist/net/adapters/browser-websocket.js +0 -74
  298. package/dist/net/adapters/bun-websocket.js +0 -245
  299. package/dist/net/buffer-pool.js +0 -89
  300. package/dist/net/client.js +0 -586
  301. package/dist/net/index.js +0 -58
  302. package/dist/net/server.js +0 -974
  303. package/dist/net/types.js +0 -31
  304. package/dist/net/validators.js +0 -88
  305. package/dist/protocol/index.js +0 -92
  306. package/dist/protocol/intent/define-intent.js +0 -125
  307. package/dist/protocol/intent/index.js +0 -91
  308. package/dist/protocol/intent/intent-registry.js +0 -91
  309. package/dist/protocol/rpc/define-rpc.js +0 -84
  310. package/dist/protocol/rpc/index.js +0 -3
  311. package/dist/protocol/rpc/rpc-registry.js +0 -159
  312. package/dist/protocol/rpc/rpc.js +0 -12
  313. package/dist/protocol/snapshot/index.js +0 -43
  314. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  315. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  316. package/dist/protocol/snapshot/snapshot.js +0 -30
  317. package/src/core/binary-codec/README.md +0 -60
  318. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  319. package/src/core/binary-codec/binary-codec.ts +0 -448
  320. package/src/core/binary-codec/index.ts +0 -1
  321. package/src/core/driver/README.md +0 -97
  322. package/src/core/driver/driver.test.ts +0 -414
  323. package/src/core/driver/driver.ts +0 -71
  324. package/src/core/driver/drivers/immediate.ts +0 -66
  325. package/src/core/driver/drivers/index.ts +0 -3
  326. package/src/core/driver/drivers/raf.ts +0 -67
  327. package/src/core/driver/drivers/timeout.ts +0 -77
  328. package/src/core/driver/index.ts +0 -2
  329. package/src/core/events/README.md +0 -47
  330. package/src/core/events/event-system.test.ts +0 -243
  331. package/src/core/events/event-system.ts +0 -140
  332. package/src/core/events/index.ts +0 -1
  333. package/src/core/fixed-ticker/README.md +0 -77
  334. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  335. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  336. package/src/core/fixed-ticker/index.ts +0 -1
  337. package/src/core/generate-id/README.md +0 -18
  338. package/src/core/generate-id/generate-id.test.ts +0 -79
  339. package/src/core/generate-id/generate-id.ts +0 -37
  340. package/src/core/generate-id/index.ts +0 -1
  341. package/src/core/index.ts +0 -10
  342. package/src/core/input/README.md +0 -24
  343. package/src/core/input/index.ts +0 -2
  344. package/src/core/input/manager.ts +0 -259
  345. package/src/core/input/sources/browser.ts +0 -39
  346. package/src/core/input/sources/index.ts +0 -1
  347. package/src/core/input/types.ts +0 -40
  348. package/src/core/lerp/README.md +0 -79
  349. package/src/core/lerp/index.ts +0 -1
  350. package/src/core/lerp/lerp.test.ts +0 -90
  351. package/src/core/lerp/lerp.ts +0 -42
  352. package/src/core/navmesh/README.md +0 -164
  353. package/src/core/navmesh/index.ts +0 -1
  354. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  355. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  356. package/src/core/navmesh/navmesh.test.ts +0 -344
  357. package/src/core/navmesh/navmesh.ts +0 -1047
  358. package/src/core/navmesh/navmesh.worker.ts +0 -147
  359. package/src/core/pooled-codec/README.md +0 -70
  360. package/src/core/pooled-codec/index.ts +0 -1
  361. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  362. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  363. package/src/core/prediction/README.md +0 -64
  364. package/src/core/prediction/index.ts +0 -1
  365. package/src/core/prediction/prediction.test.ts +0 -423
  366. package/src/core/prediction/prediction.ts +0 -112
  367. package/src/ecs/README.md +0 -427
  368. package/src/ecs/benchmark.test.ts +0 -1645
  369. package/src/ecs/component-store.ts +0 -198
  370. package/src/ecs/component.ts +0 -90
  371. package/src/ecs/entity-handle.test.ts +0 -393
  372. package/src/ecs/entity-handle.ts +0 -563
  373. package/src/ecs/example.ts +0 -152
  374. package/src/ecs/index.ts +0 -4
  375. package/src/ecs/system-builder.ts +0 -404
  376. package/src/ecs/world-systems.ts +0 -83
  377. package/src/ecs/world.test.ts +0 -310
  378. package/src/ecs/world.ts +0 -904
  379. package/src/game/index.ts +0 -1
  380. package/src/game/loop/README.md +0 -32
  381. package/src/game/loop/index.ts +0 -1
  382. package/src/game/loop/loop.ts +0 -236
  383. package/src/index.ts +0 -32
  384. package/src/net/README.md +0 -474
  385. package/src/net/adapters/browser-websocket.ts +0 -86
  386. package/src/net/adapters/bun-websocket.ts +0 -292
  387. package/src/net/buffer-pool.ts +0 -106
  388. package/src/net/client.test.ts +0 -807
  389. package/src/net/client.ts +0 -695
  390. package/src/net/index.ts +0 -60
  391. package/src/net/server.test.ts +0 -799
  392. package/src/net/server.ts +0 -1152
  393. package/src/net/types.ts +0 -228
  394. package/src/net/validators.ts +0 -104
  395. package/src/protocol/README.md +0 -469
  396. package/src/protocol/index.ts +0 -93
  397. package/src/protocol/intent/define-intent.test.ts +0 -397
  398. package/src/protocol/intent/define-intent.ts +0 -201
  399. package/src/protocol/intent/index.ts +0 -94
  400. package/src/protocol/intent/intent-registry.test.ts +0 -198
  401. package/src/protocol/intent/intent-registry.ts +0 -112
  402. package/src/protocol/intent/intent.ts +0 -12
  403. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  404. package/src/protocol/rpc/define-rpc.ts +0 -113
  405. package/src/protocol/rpc/index.ts +0 -3
  406. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  407. package/src/protocol/rpc/rpc-registry.ts +0 -176
  408. package/src/protocol/rpc/rpc.ts +0 -37
  409. package/src/protocol/snapshot/index.ts +0 -45
  410. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  411. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  412. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  413. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  414. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  415. package/src/protocol/snapshot/snapshot.ts +0 -41
  416. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  417. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  418. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  419. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  420. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  421. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  422. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  423. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  424. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  425. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  426. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  427. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  428. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  429. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  430. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  431. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  432. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  433. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  434. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  435. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  436. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  437. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  438. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  439. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  440. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  441. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  442. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  443. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  444. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  445. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  446. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  447. /package/dist/{game → types/game}/index.d.ts +0 -0
  448. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  449. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  450. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  451. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  452. /package/dist/{net → types/net}/client.d.ts +0 -0
  453. /package/dist/{net → types/net}/server.d.ts +0 -0
  454. /package/dist/{net → types/net}/types.d.ts +0 -0
  455. /package/dist/{net → types/net}/validators.d.ts +0 -0
  456. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  457. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  458. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  459. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  460. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  461. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  462. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  463. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  464. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  465. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  466. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  467. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  468. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  469. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  470. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,159 +0,0 @@
1
- /**
2
- * Registry for managing RPC definitions with binary encoding/decoding
3
- *
4
- * Maps RPC method names to numeric IDs for efficient binary protocol:
5
- * - Method names are assigned sequential IDs (0, 1, 2, ...)
6
- * - Binary format: [methodId: u16][data: variable]
7
- * - Supports bidirectional RPCs (client ↔ server)
8
- *
9
- * @example
10
- * ```ts
11
- * const registry = new RpcRegistry();
12
- *
13
- * // Register RPCs
14
- * registry.register(MatchCountdown);
15
- * registry.register(BuyItem);
16
- *
17
- * // Encode RPC to binary
18
- * const binary = registry.encode(MatchCountdown, { secondsRemaining: 10 });
19
- *
20
- * // Decode RPC from binary
21
- * const { method, data } = registry.decode(binary);
22
- * console.log(method); // 'matchCountdown'
23
- * console.log(data.secondsRemaining); // 10
24
- * ```
25
- */
26
- export class RpcRegistry {
27
- constructor() {
28
- this.codecs = new Map();
29
- this.methodToId = new Map();
30
- this.idToMethod = new Map();
31
- this.nextId = 0;
32
- }
33
- /**
34
- * Register an RPC definition
35
- *
36
- * @param rpc The RPC definition created by defineRPC()
37
- * @throws Error if method is already registered
38
- *
39
- * @example
40
- * ```ts
41
- * const MatchCountdown = defineRPC({
42
- * method: 'matchCountdown',
43
- * schema: { secondsRemaining: BinaryCodec.u8 }
44
- * });
45
- *
46
- * registry.register(MatchCountdown);
47
- * ```
48
- */
49
- register(rpc) {
50
- if (this.codecs.has(rpc.method)) {
51
- throw new Error(`RPC "${rpc.method}" is already registered`);
52
- }
53
- const id = this.nextId++;
54
- this.codecs.set(rpc.method, rpc.codec);
55
- this.methodToId.set(rpc.method, id);
56
- this.idToMethod.set(id, rpc.method);
57
- }
58
- /**
59
- * Encode an RPC to binary format
60
- *
61
- * Binary format: [methodId: u16][data: variable]
62
- *
63
- * @param rpc The RPC definition
64
- * @param data The RPC data to encode
65
- * @returns Encoded binary data
66
- * @throws Error if RPC is not registered
67
- *
68
- * @example
69
- * ```ts
70
- * const binary = registry.encode(MatchCountdown, {
71
- * secondsRemaining: 10
72
- * });
73
- * ```
74
- */
75
- encode(rpc, data) {
76
- const codec = this.codecs.get(rpc.method);
77
- if (!codec) {
78
- throw new Error(`RPC "${rpc.method}" is not registered`);
79
- }
80
- const methodId = this.methodToId.get(rpc.method);
81
- const encodedData = codec.encode(data);
82
- // Message format: [methodId: u16][data]
83
- const buffer = new Uint8Array(2 + encodedData.byteLength);
84
- new DataView(buffer.buffer).setUint16(0, methodId, true);
85
- buffer.set(new Uint8Array(encodedData), 2);
86
- return buffer;
87
- }
88
- /**
89
- * Decode an RPC from binary format
90
- *
91
- * @param buffer Binary data to decode
92
- * @returns Object with method name and decoded data
93
- * @throws Error if method ID is unknown
94
- *
95
- * @example
96
- * ```ts
97
- * const { method, data } = registry.decode(binary);
98
- * console.log(method); // 'matchCountdown'
99
- * console.log(data.secondsRemaining); // 10
100
- * ```
101
- */
102
- decode(buffer) {
103
- if (buffer.byteLength < 2) {
104
- throw new Error('Buffer too small for RPC message');
105
- }
106
- const view = new DataView(buffer.buffer, buffer.byteOffset);
107
- const methodId = view.getUint16(0, true);
108
- const method = this.idToMethod.get(methodId);
109
- if (!method) {
110
- throw new Error(`Unknown RPC method ID: ${methodId}`);
111
- }
112
- const codec = this.codecs.get(method);
113
- const data = codec.decode(buffer.slice(2));
114
- return { method, data };
115
- }
116
- /**
117
- * Check if an RPC method is registered
118
- *
119
- * @param method Method name to check
120
- * @returns True if registered, false otherwise
121
- */
122
- has(method) {
123
- return this.codecs.has(method);
124
- }
125
- /**
126
- * Get all registered RPC method names
127
- *
128
- * @returns Array of method names
129
- */
130
- getMethods() {
131
- return Array.from(this.codecs.keys());
132
- }
133
- /**
134
- * Get the numeric ID for a method
135
- *
136
- * @param method Method name
137
- * @returns Method ID or undefined if not registered
138
- */
139
- getMethodId(method) {
140
- return this.methodToId.get(method);
141
- }
142
- /**
143
- * Release a decoded RPC data object back to the pool.
144
- * Call this after you're done processing the RPC to enable object pooling.
145
- *
146
- * @param method The RPC method name (same as used in decode)
147
- * @param data The RPC data object to release
148
- */
149
- release(method, data) {
150
- const codec = this.codecs.get(method);
151
- if (!codec) {
152
- throw new Error(`RPC "${method}" is not registered`);
153
- }
154
- // Only release if the codec supports pooling
155
- if ('release' in codec && typeof codec.release === 'function') {
156
- codec.release(data);
157
- }
158
- }
159
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * RPC (Remote Procedure Call) type definitions
3
- *
4
- * RPCs are bidirectional one-off events/commands for:
5
- * - Meta-game events (achievements, notifications)
6
- * - Match lifecycle (countdown, results)
7
- * - Request/response patterns
8
- * - System announcements
9
- *
10
- * NOT for game state synchronization (use Snapshots) or player inputs (use Intents)
11
- */
12
- export {};
@@ -1,43 +0,0 @@
1
- /**
2
- * Snapshot system for server-to-client state updates.
3
- *
4
- * Snapshots are delta updates that contain:
5
- * 1. Server tick number
6
- * 2. Partial state updates (only what changed)
7
- *
8
- * They need to be:
9
- * 1. Encoded efficiently (binary)
10
- * 2. Sent over network
11
- * 3. Decoded on the client
12
- * 4. Merged into client state
13
- *
14
- * @example
15
- * ```ts
16
- * import { Snapshot, SnapshotCodec, applySnapshot } from './protocol/snapshot';
17
- * import { PooledCodec } from '../core/pooled-codec';
18
- * import { BinaryCodec } from '../core/binary-codec';
19
- *
20
- * interface GameState {
21
- * players: Record<number, { x: number; y: number }>;
22
- * }
23
- *
24
- * // 1. Create codec once (reuse this instance)
25
- * const snapshotCodec = new SnapshotCodec<GameState>(
26
- * new PooledCodec({ players: // ... your schema })
27
- * );
28
- *
29
- * // 2. Server: Encode snapshot
30
- * const snapshot: Snapshot<GameState> = {
31
- * tick: 100,
32
- * updates: { players: { 1: { x: 5, y: 10 } } }
33
- * };
34
- * const buf = snapshotCodec.encode(snapshot);
35
- *
36
- * // 3. Client: Decode and apply
37
- * const snapshot = snapshotCodec.decode(buf);
38
- * applySnapshot(clientState, snapshot);
39
- * ```
40
- */
41
- export { applySnapshot } from "./snapshot";
42
- export { SnapshotCodec } from "./snapshot-codec";
43
- export { SnapshotRegistry } from "./snapshot-registry";
@@ -1,67 +0,0 @@
1
- /**
2
- * Codec for encoding/decoding snapshots with binary serialization.
3
- *
4
- * Users instantiate this once with a PooledCodec for their state schema.
5
- *
6
- * @example
7
- * ```ts
8
- * import { SnapshotCodec } from './protocol/snapshot';
9
- * import { PooledCodec } from './core/pooled-codec';
10
- * import { BinaryCodec } from './core/binary-codec';
11
- *
12
- * interface GameState {
13
- * players: Record<number, { x: number; y: number }>;
14
- * }
15
- *
16
- * const snapshotCodec = new SnapshotCodec<GameState>(
17
- * new PooledCodec({ players: // schema })
18
- * );
19
- *
20
- * // Encode/decode
21
- * const buf = snapshotCodec.encode(snapshot);
22
- * const decoded = snapshotCodec.decode(buf);
23
- * ```
24
- */
25
- export class SnapshotCodec {
26
- /**
27
- * @param updatesCodec Codec for encoding/decoding the state updates
28
- */
29
- constructor(updatesCodec) {
30
- this.updatesCodec = updatesCodec;
31
- }
32
- /**
33
- * Encode a snapshot into binary format.
34
- * Format: [tick: u32][updates: encoded by updatesCodec]
35
- *
36
- * Uses zero-copy path if codec supports calculateSize and encodeInto.
37
- */
38
- encode(snapshot) {
39
- // Use zero-copy path if available
40
- if (this.updatesCodec.calculateSize && this.updatesCodec.encodeInto) {
41
- const updatesSize = this.updatesCodec.calculateSize(snapshot.updates);
42
- const buf = new Uint8Array(4 + updatesSize);
43
- // Encode tick (4 bytes, little-endian)
44
- new DataView(buf.buffer).setUint32(0, snapshot.tick, true);
45
- // Write updates directly into buffer (ZERO COPY!)
46
- this.updatesCodec.encodeInto(snapshot.updates, buf, 4);
47
- return buf;
48
- }
49
- // Fallback to legacy path
50
- const updatesBytes = this.updatesCodec.encode(snapshot.updates);
51
- const buf = new Uint8Array(4 + updatesBytes.length);
52
- new DataView(buf.buffer).setUint32(0, snapshot.tick, true);
53
- buf.set(updatesBytes, 4);
54
- return buf;
55
- }
56
- /**
57
- * Decode binary data into a snapshot.
58
- */
59
- decode(buf) {
60
- // Decode tick (first 4 bytes)
61
- const tick = new DataView(buf.buffer, buf.byteOffset).getUint32(0, true);
62
- // Decode updates (remaining bytes)
63
- const updatesBytes = buf.subarray(4);
64
- const updates = this.updatesCodec.decode(updatesBytes);
65
- return { tick, updates };
66
- }
67
- }
@@ -1,168 +0,0 @@
1
- /**
2
- * Registry for multiple snapshot types with different update schemas.
3
- *
4
- * This allows efficient delta encoding by only sending specific update types
5
- * instead of encoding all fields (including empty/nil ones).
6
- *
7
- * ## Memory Efficiency
8
- *
9
- * The encoding path minimizes allocations:
10
- * 1. PooledCodec acquires a buffer from its pool (reused across calls)
11
- * 2. PooledCodec writes data directly to the buffer at sequential offsets
12
- * 3. SnapshotRegistry creates ONE final buffer: [typeId(1) + tick(4) + updatesBytes]
13
- * 4. Total allocations per encode: 1 pooled buffer + 1 final buffer
14
- *
15
- * Buffer Layout:
16
- * ```
17
- * ┌─────────┬────────────┬──────────────────┐
18
- * │ Type ID │ Tick │ Updates (codec) │
19
- * │ (u8) │ (u32) │ (variable) │
20
- * │ 1 byte │ 4 bytes │ N bytes │
21
- * └─────────┴────────────┴──────────────────┘
22
- * ```
23
- *
24
- * @example
25
- * ```ts
26
- * import { SnapshotRegistry } from './protocol/snapshot';
27
- * import { PooledCodec } from './core/pooled-codec';
28
- * import { BinaryPrimitives } from './core/binary-codec';
29
- *
30
- * // Define different update types
31
- * interface PlayerUpdate {
32
- * players: Array<{ entityId: number; x: number; y: number }>;
33
- * }
34
- *
35
- * interface ScoreUpdate {
36
- * score: number;
37
- * }
38
- *
39
- * // Create registry
40
- * const registry = new SnapshotRegistry<PlayerUpdate | ScoreUpdate>();
41
- *
42
- * // Register codecs for each update type
43
- * registry.register('players', new PooledCodec({
44
- * players: PooledCodec.array({
45
- * entityId: BinaryPrimitives.u32,
46
- * x: BinaryPrimitives.f32,
47
- * y: BinaryPrimitives.f32,
48
- * })
49
- * }));
50
- *
51
- * registry.register('score', new PooledCodec({
52
- * score: BinaryPrimitives.u32
53
- * }));
54
- *
55
- * // Server: Encode specific update type
56
- * const buf = registry.encode('players', {
57
- * tick: 100,
58
- * updates: { players: [{ entityId: 1, x: 5, y: 10 }] }
59
- * });
60
- *
61
- * // Client: Decode (type is embedded in message)
62
- * const { type, snapshot } = registry.decode(buf);
63
- * applySnapshot(state, snapshot);
64
- * ```
65
- */
66
- export class SnapshotRegistry {
67
- constructor() {
68
- this.codecs = new Map();
69
- this.typeIds = new Map();
70
- this.idToType = new Map();
71
- this.nextId = 0;
72
- }
73
- /**
74
- * Register a codec for a specific update type.
75
- * Call this once per update type at startup.
76
- */
77
- register(type, codec) {
78
- if (this.codecs.has(type)) {
79
- throw new Error(`Snapshot type "${type}" is already registered`);
80
- }
81
- const typeId = this.nextId++;
82
- this.codecs.set(type, codec);
83
- this.typeIds.set(type, typeId);
84
- this.idToType.set(typeId, type);
85
- }
86
- /**
87
- * Encode a snapshot with a specific update type.
88
- * Format: [typeId: u8][tick: u32][updates: encoded by codec]
89
- *
90
- * Zero-copy encoding path:
91
- * - Calculate total size needed
92
- * - Allocate ONE final buffer for [typeId + tick + updates]
93
- * - Write directly into buffer using encodeInto (no intermediate allocations)
94
- *
95
- * Falls back to legacy encode() method if codec doesn't support encodeInto.
96
- */
97
- encode(type, snapshot) {
98
- const codec = this.codecs.get(type);
99
- const typeId = this.typeIds.get(type);
100
- if (!codec || typeId === undefined) {
101
- throw new Error(`No codec registered for snapshot type "${type}"`);
102
- }
103
- // Use zero-copy path if available
104
- if (codec.calculateSize && codec.encodeInto) {
105
- // Calculate total size
106
- const updatesSize = codec.calculateSize(snapshot.updates);
107
- const buf = new Uint8Array(5 + updatesSize);
108
- // Write type ID (1 byte)
109
- buf[0] = typeId;
110
- // Write tick (4 bytes, little-endian)
111
- new DataView(buf.buffer).setUint32(1, snapshot.tick, true);
112
- // Write updates directly into buffer (ZERO COPY!)
113
- codec.encodeInto(snapshot.updates, buf, 5);
114
- return buf;
115
- }
116
- // Fallback to legacy path for backward compatibility
117
- const updatesBytes = codec.encode(snapshot.updates);
118
- const buf = new Uint8Array(1 + 4 + updatesBytes.length);
119
- buf[0] = typeId;
120
- new DataView(buf.buffer).setUint32(1, snapshot.tick, true);
121
- buf.set(updatesBytes, 5);
122
- return buf;
123
- }
124
- /**
125
- * Decode a snapshot and return both the type and the snapshot.
126
- */
127
- decode(buf) {
128
- // Decode type ID (first byte)
129
- const typeId = buf[0];
130
- const type = this.idToType.get(typeId);
131
- if (!type) {
132
- throw new Error(`Unknown snapshot type ID: ${typeId}`);
133
- }
134
- const codec = this.codecs.get(type);
135
- if (!codec) {
136
- throw new Error(`No codec registered for snapshot type "${type}"`);
137
- }
138
- // Decode tick (bytes 1-4)
139
- const tick = new DataView(buf.buffer, buf.byteOffset + 1).getUint32(0, true);
140
- // Decode updates (remaining bytes)
141
- const updatesBytes = buf.subarray(5);
142
- const updates = codec.decode(updatesBytes);
143
- return { type, snapshot: { tick, updates } };
144
- }
145
- has(type) {
146
- return this.codecs.has(type);
147
- }
148
- getTypes() {
149
- return Array.from(this.codecs.keys());
150
- }
151
- /**
152
- * Release a decoded snapshot's updates object back to the pool.
153
- * Call this after you're done processing the snapshot to enable object pooling.
154
- *
155
- * @param type The snapshot type (same as used in decode)
156
- * @param updates The updates object to release
157
- */
158
- release(type, updates) {
159
- const codec = this.codecs.get(type);
160
- if (!codec) {
161
- throw new Error(`No codec registered for snapshot type "${type}"`);
162
- }
163
- // Only release if the codec supports pooling
164
- if ('release' in codec && typeof codec.release === 'function') {
165
- codec.release(updates);
166
- }
167
- }
168
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Apply snapshot updates to state (mutating).
3
- * Deep merges objects, replaces arrays.
4
- *
5
- * @param state State to update
6
- * @param snapshot Snapshot to apply
7
- */
8
- export function applySnapshot(state, snapshot) {
9
- deepMerge(state, snapshot.updates);
10
- }
11
- function deepMerge(target, update) {
12
- for (const key in update) {
13
- if (!Object.prototype.hasOwnProperty.call(update, key))
14
- continue;
15
- const updateValue = update[key];
16
- const targetValue = target[key];
17
- if (updateValue === null || updateValue === undefined) {
18
- target[key] = updateValue;
19
- }
20
- else if (Array.isArray(updateValue)) {
21
- target[key] = updateValue;
22
- }
23
- else if (typeof updateValue === "object" && typeof targetValue === "object") {
24
- deepMerge(targetValue, updateValue);
25
- }
26
- else {
27
- target[key] = updateValue;
28
- }
29
- }
30
- }
@@ -1,60 +0,0 @@
1
- # BinaryCodec
2
-
3
- A minimal TypeScript library for **schema-driven binary encoding and decoding**.
4
- Supports fixed-size numeric fields with automatic buffer sizing.
5
-
6
- ---
7
-
8
- ## Usage
9
-
10
- ### Define a schema
11
-
12
- ```ts
13
- import { BinaryCodec } from ".";
14
-
15
- type Player = {
16
- id: number;
17
- score: number;
18
- };
19
-
20
- const playerSchema = {
21
- id: BinaryCodec.u8,
22
- score: BinaryCodec.u16,
23
- };
24
- ```
25
-
26
- ### Encode an object
27
-
28
- ```ts
29
- const data: Player = { id: 1, score: 420 };
30
- const buffer = BinaryCodec.encode(playerSchema, data);
31
-
32
- console.log(buffer); // Uint8Array [1, 1, 164] (example)
33
- ```
34
-
35
- ### Decode into an object
36
-
37
- ```ts
38
- const target: Player = { id: 0, score: 0 };
39
- BinaryCodec.decode(playerSchema, buffer, target);
40
-
41
- console.log(target); // { id: 1, score: 420 }
42
- ```
43
-
44
- ---
45
-
46
- ## Features
47
-
48
- * Fixed-size fields (`u8`, `u16`, `f32`)
49
- * Automatic buffer sizing
50
- * Explicit big-endian encoding
51
- * Safe, re-entrant, and concurrent-friendly
52
- * Schema-driven and type-safe
53
-
54
- ---
55
-
56
- ## Notes
57
-
58
- * Object keys define **field order** in the binary layout.
59
- * Buffer sizes are validated on decode to avoid overflow.
60
- * Works in browsers and Node.js.