murow 0.0.70 → 0.0.71

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 (439) hide show
  1. package/README.md +52 -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-2d-renderer.js +1 -0
  74. package/dist/cjs/renderer/base-3d-renderer.js +1 -0
  75. package/dist/cjs/renderer/base-renderer.js +1 -0
  76. package/dist/cjs/renderer/index.js +1 -0
  77. package/dist/cjs/renderer/types.js +1 -0
  78. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  79. package/dist/esm/core/binary-codec/index.js +1 -0
  80. package/dist/esm/core/driver/driver.js +1 -0
  81. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  82. package/dist/esm/core/driver/drivers/index.js +1 -0
  83. package/dist/esm/core/driver/drivers/raf.js +1 -0
  84. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  85. package/dist/esm/core/driver/index.js +1 -0
  86. package/dist/esm/core/events/event-system.js +1 -0
  87. package/dist/esm/core/events/index.js +1 -0
  88. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  89. package/dist/esm/core/fixed-ticker/index.js +1 -0
  90. package/dist/esm/core/free-list/free-list.js +1 -0
  91. package/dist/esm/core/free-list/index.js +1 -0
  92. package/dist/esm/core/generate-id/generate-id.js +1 -0
  93. package/dist/esm/core/generate-id/index.js +1 -0
  94. package/dist/esm/core/index.js +1 -0
  95. package/dist/esm/core/input/index.js +1 -0
  96. package/dist/esm/core/input/manager.js +1 -0
  97. package/dist/esm/core/input/sources/browser.js +1 -0
  98. package/dist/esm/core/input/sources/index.js +1 -0
  99. package/dist/esm/core/input/types.js +0 -0
  100. package/dist/esm/core/lerp/index.js +1 -0
  101. package/dist/esm/core/lerp/lerp.js +1 -0
  102. package/dist/esm/core/navmesh/index.js +1 -0
  103. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  104. package/dist/esm/core/navmesh/navmesh.js +1 -0
  105. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  106. package/dist/esm/core/pooled-codec/index.js +1 -0
  107. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  108. package/dist/esm/core/prediction/index.js +1 -0
  109. package/dist/esm/core/prediction/prediction.js +1 -0
  110. package/dist/esm/core/ray/index.js +1 -0
  111. package/dist/esm/core/ray/ray-2d.js +1 -0
  112. package/dist/esm/core/ray/ray-3d.js +1 -0
  113. package/dist/esm/core/simple-rng/index.js +1 -0
  114. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  115. package/dist/esm/core/sparse-batcher/index.js +1 -0
  116. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  117. package/dist/esm/ecs/component-store.js +1 -0
  118. package/dist/esm/ecs/component.js +1 -0
  119. package/dist/esm/ecs/entity-handle.js +1 -0
  120. package/dist/esm/ecs/index.js +1 -0
  121. package/dist/esm/ecs/system-builder.js +1 -0
  122. package/dist/esm/ecs/world-systems.js +1 -0
  123. package/dist/esm/ecs/world.js +1 -0
  124. package/dist/esm/game/index.js +1 -0
  125. package/dist/esm/game/loop/index.js +1 -0
  126. package/dist/esm/game/loop/loop.js +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  129. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  130. package/dist/esm/net/buffer-pool.js +1 -0
  131. package/dist/esm/net/client.js +1 -0
  132. package/dist/esm/net/index.js +1 -0
  133. package/dist/esm/net/server.js +1 -0
  134. package/dist/esm/net/types.js +1 -0
  135. package/dist/esm/net/validators.js +1 -0
  136. package/dist/esm/protocol/index.js +1 -0
  137. package/dist/esm/protocol/intent/define-intent.js +1 -0
  138. package/dist/esm/protocol/intent/index.js +1 -0
  139. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  140. package/dist/esm/protocol/intent/intent.js +0 -0
  141. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  142. package/dist/esm/protocol/rpc/index.js +1 -0
  143. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  144. package/dist/esm/protocol/rpc/rpc.js +0 -0
  145. package/dist/esm/protocol/snapshot/index.js +1 -0
  146. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  147. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  148. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  149. package/dist/esm/renderer/base-2d-renderer.js +1 -0
  150. package/dist/esm/renderer/base-3d-renderer.js +1 -0
  151. package/dist/esm/renderer/base-renderer.js +1 -0
  152. package/dist/esm/renderer/index.js +1 -0
  153. package/dist/esm/renderer/types.js +0 -0
  154. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  155. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  156. package/dist/types/core/free-list/free-list.d.ts +31 -0
  157. package/dist/types/core/free-list/index.d.ts +1 -0
  158. package/dist/{core → types/core}/index.d.ts +5 -0
  159. package/dist/{core → types/core}/input/index.d.ts +1 -0
  160. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  161. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  162. package/dist/types/core/ray/index.d.ts +2 -0
  163. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  164. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  165. package/dist/types/core/simple-rng/index.d.ts +1 -0
  166. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  167. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  168. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  169. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  170. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  171. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  172. package/dist/{net → types/net}/index.d.ts +2 -2
  173. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  174. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  175. package/dist/types/renderer/base-renderer.d.ts +21 -0
  176. package/dist/types/renderer/index.d.ts +4 -0
  177. package/dist/types/renderer/types.d.ts +79 -0
  178. package/dist/webgpu/cjs/index.js +6004 -0
  179. package/dist/webgpu/esm/index.js +5972 -0
  180. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  181. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  182. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  183. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  184. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  185. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  186. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  187. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  188. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  189. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  190. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  191. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  192. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  193. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  194. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  195. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  196. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  197. package/dist/webgpu/types/camera/index.d.ts +2 -0
  198. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  199. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  200. package/dist/webgpu/types/core/constants.d.ts +59 -0
  201. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  202. package/dist/webgpu/types/core/index.d.ts +2 -0
  203. package/dist/webgpu/types/core/math.d.ts +37 -0
  204. package/dist/webgpu/types/core/types.d.ts +125 -0
  205. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  206. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  207. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  208. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  209. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  210. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  211. package/dist/webgpu/types/index.d.ts +32 -0
  212. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  213. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  214. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  215. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  216. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  217. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  218. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  219. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  220. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  221. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  222. package/package.json +96 -26
  223. package/dist/core/binary-codec/binary-codec.js +0 -354
  224. package/dist/core/binary-codec/index.js +0 -1
  225. package/dist/core/driver/driver.js +0 -47
  226. package/dist/core/driver/drivers/immediate.js +0 -61
  227. package/dist/core/driver/drivers/index.js +0 -3
  228. package/dist/core/driver/drivers/raf.js +0 -62
  229. package/dist/core/driver/drivers/timeout.js +0 -71
  230. package/dist/core/driver/index.js +0 -2
  231. package/dist/core/events/event-system.js +0 -88
  232. package/dist/core/events/index.js +0 -1
  233. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  234. package/dist/core/fixed-ticker/index.js +0 -1
  235. package/dist/core/generate-id/generate-id.js +0 -25
  236. package/dist/core/generate-id/index.js +0 -1
  237. package/dist/core/index.js +0 -10
  238. package/dist/core/input/index.js +0 -2
  239. package/dist/core/input/manager.js +0 -211
  240. package/dist/core/input/sources/browser.js +0 -29
  241. package/dist/core/input/sources/index.js +0 -1
  242. package/dist/core/lerp/index.js +0 -1
  243. package/dist/core/lerp/lerp.js +0 -42
  244. package/dist/core/navmesh/index.js +0 -1
  245. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  246. package/dist/core/navmesh/navmesh.js +0 -799
  247. package/dist/core/navmesh/navmesh.worker.js +0 -79
  248. package/dist/core/pooled-codec/index.js +0 -1
  249. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  250. package/dist/core/prediction/index.js +0 -1
  251. package/dist/core/prediction/prediction.js +0 -99
  252. package/dist/core.esm.js +0 -1
  253. package/dist/core.js +0 -1
  254. package/dist/ecs/component-store.js +0 -175
  255. package/dist/ecs/component.js +0 -43
  256. package/dist/ecs/entity-handle.js +0 -515
  257. package/dist/ecs/example.js +0 -125
  258. package/dist/ecs/index.js +0 -4
  259. package/dist/ecs/system-builder.js +0 -249
  260. package/dist/ecs/world-systems.js +0 -79
  261. package/dist/ecs/world.js +0 -767
  262. package/dist/game/index.js +0 -1
  263. package/dist/game/loop/index.js +0 -1
  264. package/dist/game/loop/loop.js +0 -108
  265. package/dist/index.js +0 -26
  266. package/dist/net/adapters/browser-websocket.js +0 -74
  267. package/dist/net/adapters/bun-websocket.js +0 -245
  268. package/dist/net/buffer-pool.js +0 -89
  269. package/dist/net/client.js +0 -586
  270. package/dist/net/index.js +0 -58
  271. package/dist/net/server.js +0 -974
  272. package/dist/net/types.js +0 -31
  273. package/dist/net/validators.js +0 -88
  274. package/dist/protocol/index.js +0 -92
  275. package/dist/protocol/intent/define-intent.js +0 -125
  276. package/dist/protocol/intent/index.js +0 -91
  277. package/dist/protocol/intent/intent-registry.js +0 -91
  278. package/dist/protocol/rpc/define-rpc.js +0 -84
  279. package/dist/protocol/rpc/index.js +0 -3
  280. package/dist/protocol/rpc/rpc-registry.js +0 -159
  281. package/dist/protocol/rpc/rpc.js +0 -12
  282. package/dist/protocol/snapshot/index.js +0 -43
  283. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  284. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  285. package/dist/protocol/snapshot/snapshot.js +0 -30
  286. package/src/core/binary-codec/README.md +0 -60
  287. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  288. package/src/core/binary-codec/binary-codec.ts +0 -448
  289. package/src/core/binary-codec/index.ts +0 -1
  290. package/src/core/driver/README.md +0 -97
  291. package/src/core/driver/driver.test.ts +0 -414
  292. package/src/core/driver/driver.ts +0 -71
  293. package/src/core/driver/drivers/immediate.ts +0 -66
  294. package/src/core/driver/drivers/index.ts +0 -3
  295. package/src/core/driver/drivers/raf.ts +0 -67
  296. package/src/core/driver/drivers/timeout.ts +0 -77
  297. package/src/core/driver/index.ts +0 -2
  298. package/src/core/events/README.md +0 -47
  299. package/src/core/events/event-system.test.ts +0 -243
  300. package/src/core/events/event-system.ts +0 -140
  301. package/src/core/events/index.ts +0 -1
  302. package/src/core/fixed-ticker/README.md +0 -77
  303. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  304. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  305. package/src/core/fixed-ticker/index.ts +0 -1
  306. package/src/core/generate-id/README.md +0 -18
  307. package/src/core/generate-id/generate-id.test.ts +0 -79
  308. package/src/core/generate-id/generate-id.ts +0 -37
  309. package/src/core/generate-id/index.ts +0 -1
  310. package/src/core/index.ts +0 -10
  311. package/src/core/input/README.md +0 -24
  312. package/src/core/input/index.ts +0 -2
  313. package/src/core/input/manager.ts +0 -259
  314. package/src/core/input/sources/browser.ts +0 -39
  315. package/src/core/input/sources/index.ts +0 -1
  316. package/src/core/input/types.ts +0 -40
  317. package/src/core/lerp/README.md +0 -79
  318. package/src/core/lerp/index.ts +0 -1
  319. package/src/core/lerp/lerp.test.ts +0 -90
  320. package/src/core/lerp/lerp.ts +0 -42
  321. package/src/core/navmesh/README.md +0 -164
  322. package/src/core/navmesh/index.ts +0 -1
  323. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  324. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  325. package/src/core/navmesh/navmesh.test.ts +0 -344
  326. package/src/core/navmesh/navmesh.ts +0 -1047
  327. package/src/core/navmesh/navmesh.worker.ts +0 -147
  328. package/src/core/pooled-codec/README.md +0 -70
  329. package/src/core/pooled-codec/index.ts +0 -1
  330. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  331. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  332. package/src/core/prediction/README.md +0 -64
  333. package/src/core/prediction/index.ts +0 -1
  334. package/src/core/prediction/prediction.test.ts +0 -423
  335. package/src/core/prediction/prediction.ts +0 -112
  336. package/src/ecs/README.md +0 -427
  337. package/src/ecs/benchmark.test.ts +0 -1645
  338. package/src/ecs/component-store.ts +0 -198
  339. package/src/ecs/component.ts +0 -90
  340. package/src/ecs/entity-handle.test.ts +0 -393
  341. package/src/ecs/entity-handle.ts +0 -563
  342. package/src/ecs/example.ts +0 -152
  343. package/src/ecs/index.ts +0 -4
  344. package/src/ecs/system-builder.ts +0 -404
  345. package/src/ecs/world-systems.ts +0 -83
  346. package/src/ecs/world.test.ts +0 -310
  347. package/src/ecs/world.ts +0 -904
  348. package/src/game/index.ts +0 -1
  349. package/src/game/loop/README.md +0 -32
  350. package/src/game/loop/index.ts +0 -1
  351. package/src/game/loop/loop.ts +0 -236
  352. package/src/index.ts +0 -32
  353. package/src/net/README.md +0 -474
  354. package/src/net/adapters/browser-websocket.ts +0 -86
  355. package/src/net/adapters/bun-websocket.ts +0 -292
  356. package/src/net/buffer-pool.ts +0 -106
  357. package/src/net/client.test.ts +0 -807
  358. package/src/net/client.ts +0 -695
  359. package/src/net/index.ts +0 -60
  360. package/src/net/server.test.ts +0 -799
  361. package/src/net/server.ts +0 -1152
  362. package/src/net/types.ts +0 -228
  363. package/src/net/validators.ts +0 -104
  364. package/src/protocol/README.md +0 -469
  365. package/src/protocol/index.ts +0 -93
  366. package/src/protocol/intent/define-intent.test.ts +0 -397
  367. package/src/protocol/intent/define-intent.ts +0 -201
  368. package/src/protocol/intent/index.ts +0 -94
  369. package/src/protocol/intent/intent-registry.test.ts +0 -198
  370. package/src/protocol/intent/intent-registry.ts +0 -112
  371. package/src/protocol/intent/intent.ts +0 -12
  372. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  373. package/src/protocol/rpc/define-rpc.ts +0 -113
  374. package/src/protocol/rpc/index.ts +0 -3
  375. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  376. package/src/protocol/rpc/rpc-registry.ts +0 -176
  377. package/src/protocol/rpc/rpc.ts +0 -37
  378. package/src/protocol/snapshot/index.ts +0 -45
  379. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  380. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  381. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  382. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  383. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  384. package/src/protocol/snapshot/snapshot.ts +0 -41
  385. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  386. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  387. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  388. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  390. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  391. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  392. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  394. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  395. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  396. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  397. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  398. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  400. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  402. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  403. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  404. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  405. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  406. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  407. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  408. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  409. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  410. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  411. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  412. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  413. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  414. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  415. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  416. /package/dist/{game → types/game}/index.d.ts +0 -0
  417. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  418. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  419. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  420. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  421. /package/dist/{net → types/net}/client.d.ts +0 -0
  422. /package/dist/{net → types/net}/server.d.ts +0 -0
  423. /package/dist/{net → types/net}/types.d.ts +0 -0
  424. /package/dist/{net → types/net}/validators.d.ts +0 -0
  425. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  426. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  427. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  428. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  429. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  430. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  431. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  432. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  433. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  434. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  435. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  436. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  437. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  438. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  439. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,469 +0,0 @@
1
- # Protocol Layer
2
-
3
- Minimalist primitives for networked multiplayer games. Intents, snapshots, and RPCs - you handle the rest.
4
-
5
- ## What You Get
6
-
7
- 1. **IntentRegistry** - Register, encode, decode intents with zero allocations (Client → Server inputs)
8
- 2. **Snapshot<T>** - Type-safe delta updates (Server → Client state sync)
9
- 3. **RpcRegistry** - Remote procedure calls for one-off events (Bidirectional)
10
- 4. **applySnapshot()** - Deep merge snapshot updates into state
11
-
12
- That's it. No loops, no queues, no storage - just the codec layer.
13
-
14
- ## Quick Start
15
-
16
- ### 1. Define Your Intent Kinds
17
-
18
- ```ts
19
- // Define all your intent kinds in one place
20
- enum IntentKind {
21
- Move = 1,
22
- Shoot = 2,
23
- Jump = 3,
24
- }
25
- ```
26
-
27
- ### 2. Define Intents with Type-Safe Schemas
28
-
29
- ```ts
30
- import { defineIntent } from "./protocol/intent";
31
- import { BinaryCodec } from "./core/binary-codec";
32
-
33
- // kind and tick are added automatically!
34
- const MoveIntent = defineIntent({
35
- kind: IntentKind.Move,
36
- schema: {
37
- dx: BinaryCodec.f32,
38
- dy: BinaryCodec.f32,
39
- }
40
- });
41
-
42
- const ShootIntent = defineIntent({
43
- kind: IntentKind.Shoot,
44
- schema: {
45
- targetId: BinaryCodec.u32,
46
- }
47
- });
48
-
49
- // Extract the types
50
- type MoveIntent = typeof MoveIntent.type;
51
- type ShootIntent = typeof ShootIntent.type;
52
- ```
53
-
54
- ### 3. Register Intent Codecs
55
-
56
- ```ts
57
- import { IntentRegistry } from "./protocol/intent";
58
-
59
- const registry = new IntentRegistry();
60
-
61
- // Register using auto-generated codecs
62
- registry.register(MoveIntent.kind, MoveIntent.codec);
63
- registry.register(ShootIntent.kind, ShootIntent.codec);
64
- ```
65
-
66
- ### 4. Define Your Game State
67
-
68
- ```ts
69
- interface GameState {
70
- players: Record<number, { x: number; y: number; health: number }>;
71
- }
72
- ```
73
-
74
- ### 5. Client: Encode & Send Intents
75
-
76
- ```ts
77
- // Generate intent from input
78
- const intent: MoveIntent = {
79
- kind: IntentKind.Move,
80
- tick: currentTick,
81
- dx: input.x,
82
- dy: input.y,
83
- };
84
-
85
- // Encode using auto-generated codec
86
- const buf = registry.encode(intent);
87
-
88
- // Send to server
89
- socket.send(buf);
90
- ```
91
-
92
- ### 6. Server: Receive & Decode Intents
93
-
94
- ```ts
95
- socket.on("data", (buf: Uint8Array) => {
96
- // First byte is always the intent kind
97
- const kind = buf[0];
98
-
99
- // Decode using registered codec
100
- const intent = registry.decode(kind, buf);
101
-
102
- // Process intent in your game logic
103
- processIntent(intent);
104
- });
105
- ```
106
-
107
- ### 7. Server: Create & Send Snapshots
108
-
109
- ```ts
110
- import { SnapshotCodec } from "./protocol/snapshot";
111
- import { PooledCodec } from "./core/pooled-codec";
112
-
113
- // Create codec for state updates (same schema as your state)
114
- const stateCodec = new PooledCodec({
115
- players: // your state schema here
116
- });
117
-
118
- const snapshotCodec = new SnapshotCodec(stateCodec);
119
-
120
- // After processing intents, create a snapshot
121
- const snapshot: Snapshot<GameState> = {
122
- tick: serverTick,
123
- updates: {
124
- // Only include what changed
125
- players: {
126
- 1: { x: 10, y: 20, health: 90 },
127
- 2: { x: 15, y: 25 }, // health unchanged
128
- },
129
- },
130
- };
131
-
132
- // Encode and send (zero allocation)
133
- const buf = snapshotCodec.encode(snapshot);
134
- socket.send(buf);
135
- ```
136
-
137
- ### 8. Client: Decode & Apply Snapshots
138
-
139
- ```ts
140
- import { applySnapshot } from "./protocol/snapshot";
141
-
142
- socket.on("snapshot", (buf: Uint8Array) => {
143
- // Decode snapshot
144
- const snapshot = snapshotCodec.decode(buf);
145
-
146
- // Deep merge updates into client state
147
- applySnapshot(clientState, snapshot);
148
-
149
- // Render updated state
150
- render(clientState);
151
- });
152
- ```
153
-
154
- ## Type Safety Benefits
155
-
156
- Using `defineIntent` with enums gives you:
157
-
158
- ✅ **Single Source of Truth** - Type and schema defined together
159
- ✅ **Zero Drift** - TypeScript type automatically matches binary schema
160
- ✅ **Automatic Fields** - `kind` and `tick` added automatically
161
- ✅ **Named Constants** - `IntentKind.Move` instead of magic numbers
162
- ✅ **IDE Support** - Full autocomplete and refactoring
163
- ✅ **Compile-time Safety** - Catch errors before runtime
164
-
165
- ### Before (Manual)
166
- ```ts
167
- // Define interface
168
- interface MoveIntent extends Intent {
169
- kind: 1; // Can drift from registration
170
- tick: number;
171
- dx: number;
172
- dy: number;
173
- }
174
-
175
- // Define schema separately (can drift from interface!)
176
- registry.register(1, new PooledCodec({
177
- kind: BinaryCodec.u8,
178
- tick: BinaryCodec.u32,
179
- dx: BinaryCodec.f32,
180
- dy: BinaryCodec.f32, // Wait, should this be f64?
181
- }));
182
- ```
183
-
184
- ### After (defineIntent)
185
- ```ts
186
- // Everything in one place - impossible to drift!
187
- const MoveIntent = defineIntent({
188
- kind: IntentKind.Move,
189
- schema: {
190
- dx: BinaryCodec.f32,
191
- dy: BinaryCodec.f32,
192
- }
193
- });
194
-
195
- type MoveIntent = typeof MoveIntent.type;
196
- registry.register(MoveIntent.kind, MoveIntent.codec);
197
- ```
198
-
199
- ## Memory Efficiency
200
-
201
- The codecs are optimized for zero allocations:
202
-
203
- ```ts
204
- // Encoding
205
- const buf = registry.encode(intent);
206
- socket.send(buf);
207
-
208
- // Decoding
209
- const decoded = registry.decode(kind, buf);
210
- processIntent(decoded);
211
- ```
212
-
213
- **Efficient binary encoding** with minimal allocations.
214
-
215
- ## Snapshot Deep Merging
216
-
217
- `applySnapshot` intelligently merges nested updates:
218
-
219
- ```ts
220
- const state: GameState = {
221
- players: {
222
- 1: { x: 0, y: 0, health: 100 },
223
- 2: { x: 10, y: 10, health: 100 },
224
- },
225
- };
226
-
227
- const snapshot: Snapshot<GameState> = {
228
- tick: 100,
229
- updates: {
230
- players: {
231
- 1: { x: 5 }, // Only update x, keep y and health
232
- },
233
- },
234
- };
235
-
236
- applySnapshot(state, snapshot);
237
-
238
- // Result:
239
- // state.players[1] = { x: 5, y: 0, health: 100 }
240
- // state.players[2] unchanged
241
- ```
242
-
243
- - **Objects**: Deep merged
244
- - **Arrays**: Replaced entirely
245
- - **Primitives**: Overwritten
246
-
247
- ## Efficient Partial Updates with SnapshotRegistry
248
-
249
- For games with many state fields, use `SnapshotRegistry` to send only specific update types.
250
-
251
- **Note:** Unlike intents (which use `defineIntent`), snapshots currently use manual codec definition with `PooledCodec`. A `defineSnapshot` helper may be added in the future for consistency.
252
-
253
- ```ts
254
- import { SnapshotRegistry } from "./protocol/snapshot";
255
- import { PooledCodec } from "./core/pooled-codec";
256
- import { BinaryCodec } from "./core/binary-codec";
257
-
258
- // Define separate snapshot update types
259
- interface PlayerUpdate {
260
- players: Array<{ entityId: number; x: number; y: number }>;
261
- }
262
-
263
- interface ScoreUpdate {
264
- score: number;
265
- }
266
-
267
- interface ProjectileUpdate {
268
- projectiles: Array<{ id: number; x: number; y: number }>;
269
- }
270
-
271
- type GameUpdate = PlayerUpdate | ScoreUpdate | ProjectileUpdate;
272
-
273
- // Create registry for different snapshot types
274
- const snapshotRegistry = new SnapshotRegistry<GameUpdate>();
275
-
276
- // Register codecs for each snapshot type
277
- // (Manual definition - no defineSnapshot helper yet)
278
- snapshotRegistry.register("players", new PooledCodec({
279
- players: {
280
- // Define your array schema here
281
- // See PooledCodec documentation for array schemas
282
- }
283
- }));
284
-
285
- snapshotRegistry.register("score", new PooledCodec({
286
- score: BinaryCodec.u32
287
- }));
288
-
289
- snapshotRegistry.register("projectiles", new PooledCodec({
290
- projectiles: {
291
- // Define your array schema here
292
- }
293
- }));
294
-
295
- // Server: Send only what changed (efficient!)
296
- if (playersChanged) {
297
- const buf = snapshotRegistry.encode("players", {
298
- tick: 100,
299
- updates: { players: [{ entityId: 1, x: 5, y: 10 }] }
300
- });
301
- socket.send(buf);
302
- }
303
-
304
- if (scoreChanged) {
305
- const buf = snapshotRegistry.encode("score", {
306
- tick: 100,
307
- updates: { score: 50 }
308
- });
309
- socket.send(buf);
310
- }
311
-
312
- // Client: Decode and apply
313
- socket.on("snapshot", (buf: Uint8Array) => {
314
- const { type, snapshot } = snapshotRegistry.decode(buf);
315
- applySnapshot(clientState, snapshot);
316
- });
317
- ```
318
-
319
- **Benefits:**
320
- - ✅ Only encode fields that changed (true partial updates)
321
- - ✅ No bandwidth wasted on nil/empty values
322
- - ✅ Type ID embedded in message (1 byte overhead)
323
- - ✅ Works with arrays, Records, primitives
324
-
325
- ## Multiple Intents
326
-
327
- You can have as many intent types as needed:
328
-
329
- ```ts
330
- // Define all your intent kinds in one enum
331
- enum IntentKind {
332
- Move = 1,
333
- Shoot = 2,
334
- Jump = 3,
335
- UseItem = 4,
336
- Chat = 5,
337
- }
338
-
339
- // Define each intent with its schema
340
- const MoveIntent = defineIntent({
341
- kind: IntentKind.Move,
342
- schema: { dx: BinaryCodec.f32, dy: BinaryCodec.f32 }
343
- });
344
-
345
- const ShootIntent = defineIntent({
346
- kind: IntentKind.Shoot,
347
- schema: { targetId: BinaryCodec.u32 }
348
- });
349
-
350
- const JumpIntent = defineIntent({
351
- kind: IntentKind.Jump,
352
- schema: { height: BinaryCodec.f32 }
353
- });
354
-
355
- // Register all at once
356
- registry.register(MoveIntent.kind, MoveIntent.codec);
357
- registry.register(ShootIntent.kind, ShootIntent.codec);
358
- registry.register(JumpIntent.kind, JumpIntent.codec);
359
- ```
360
-
361
- ## RPCs (Remote Procedure Calls)
362
-
363
- For one-off events that don't fit intents (inputs) or snapshots (state sync), use RPCs.
364
-
365
- ### When to Use RPCs
366
-
367
- **✅ Use RPCs for:**
368
- - Meta-game events (achievements, notifications)
369
- - Match lifecycle (countdown, match end, pause)
370
- - Chat messages (transient communication)
371
- - UI feedback (purchase confirmations, errors)
372
- - System announcements
373
-
374
- **❌ Don't use RPCs for:**
375
- - Game state (use **Snapshots** instead)
376
- - Player inputs (use **Intents** instead)
377
- - Anything that needs persistence or late joiners need to know
378
-
379
- ### Define RPCs
380
-
381
- ```ts
382
- import { defineRPC, RpcRegistry } from "./protocol/rpc";
383
- import { BinaryCodec } from "./core/binary-codec";
384
-
385
- // Server → Client RPC
386
- const MatchCountdown = defineRPC({
387
- method: 'matchCountdown',
388
- schema: {
389
- secondsRemaining: BinaryCodec.u8,
390
- }
391
- });
392
-
393
- // Client → Server RPC
394
- const BuyItem = defineRPC({
395
- method: 'buyItem',
396
- schema: {
397
- itemId: BinaryCodec.string(32),
398
- }
399
- });
400
-
401
- type MatchCountdown = typeof MatchCountdown.type;
402
- type BuyItem = typeof BuyItem.type;
403
- ```
404
-
405
- ### Register RPCs
406
-
407
- ```ts
408
- const rpcRegistry = new RpcRegistry();
409
- rpcRegistry.register(MatchCountdown);
410
- rpcRegistry.register(BuyItem);
411
- ```
412
-
413
- ### Client: Send & Receive RPCs
414
-
415
- ```ts
416
- // Send RPC to server
417
- client.sendRpc(BuyItem, { itemId: 'long_sword' });
418
-
419
- // Receive RPC from server
420
- client.onRpc(MatchCountdown, (rpc) => {
421
- console.log(`Match starting in ${rpc.secondsRemaining}s`);
422
- showCountdownUI(rpc.secondsRemaining);
423
- });
424
- ```
425
-
426
- ### Server: Send & Receive RPCs
427
-
428
- ```ts
429
- // Receive RPC from client
430
- server.onRpc(BuyItem, (peerId, rpc) => {
431
- const player = getPlayer(peerId);
432
- if (player.gold >= getItemCost(rpc.itemId)) {
433
- player.items.push(rpc.itemId);
434
- player.gold -= getItemCost(rpc.itemId);
435
- }
436
- });
437
-
438
- // Send RPC to specific client
439
- server.sendRpc(peerId, MatchCountdown, { secondsRemaining: 10 });
440
-
441
- // Broadcast RPC to all clients
442
- server.sendRpcBroadcast(MatchCountdown, { secondsRemaining: 3 });
443
- ```
444
-
445
- **Note:** RPCs use `MessageType.CUSTOM (0xff)` and are fully integrated with rate limiting, backpressure handling, and buffer pooling.
446
-
447
- ## What You Build Yourself
448
-
449
- This layer intentionally **does not** provide:
450
-
451
- - ❌ Game loops (use `FixedTicker` from core)
452
- - ❌ Intent queuing/buffering (application-specific)
453
- - ❌ Snapshot storage/history (application-specific)
454
- - ❌ Network transport (WebSocket, WebRTC, etc.)
455
- - ❌ Prediction/rollback (use `IntentTracker` and `Reconciliator` from core)
456
- - ❌ Interpolation (application-specific)
457
- - ❌ Lag compensation (application-specific)
458
-
459
- The protocol layer gives you type-safe codecs. Core utilities like `FixedTicker`, `IntentTracker`, and `Reconciliator` are available separately.
460
-
461
- ## Testing
462
-
463
- ```bash
464
- npm test -- intent-registry
465
- ```
466
-
467
- ## License
468
-
469
- MIT
@@ -1,93 +0,0 @@
1
- /**
2
- * Protocol Layer - Type-safe networking primitives
3
- *
4
- * This layer enforces:
5
- * - Type-safe intent definitions (use defineIntent helper)
6
- * - Type-safe snapshot definitions (Snapshot<YourState>)
7
- * - Memory-efficient encoding (use BinaryCodec from core)
8
- *
9
- * You provide:
10
- * - Your intent types (via defineIntent)
11
- * - Your state types
12
- * - Your schemas (for binary encoding)
13
- *
14
- * @example Using defineIntent with enums (recommended)
15
- * ```ts
16
- * import { defineIntent, IntentRegistry } from './protocol';
17
- * import { BinaryCodec } from './core/binary-codec';
18
- *
19
- * // Define all your intent kinds in one place
20
- * enum IntentKind {
21
- * Move = 1,
22
- * Attack = 2,
23
- * Jump = 3,
24
- * }
25
- *
26
- * // Define intents with automatic type inference
27
- * // kind and tick are added automatically!
28
- * const MoveIntent = defineIntent({
29
- * kind: IntentKind.Move,
30
- * schema: {
31
- * dx: BinaryCodec.f32,
32
- * dy: BinaryCodec.f32,
33
- * }
34
- * });
35
- *
36
- * const AttackIntent = defineIntent({
37
- * kind: IntentKind.Attack,
38
- * schema: {
39
- * targetId: BinaryCodec.u32,
40
- * damage: BinaryCodec.f32,
41
- * }
42
- * });
43
- *
44
- * type MoveIntent = typeof MoveIntent.type;
45
- * type AttackIntent = typeof AttackIntent.type;
46
- *
47
- * // Register and use
48
- * const intentRegistry = new IntentRegistry();
49
- * intentRegistry.register(MoveIntent.kind, MoveIntent.codec);
50
- * intentRegistry.register(AttackIntent.kind, AttackIntent.codec);
51
- *
52
- * const move: MoveIntent = {
53
- * kind: IntentKind.Move,
54
- * tick: 100, // tick is automatically available
55
- * dx: 1.5,
56
- * dy: -2.0,
57
- * };
58
- *
59
- * const buf = intentRegistry.encode(move);
60
- * const decoded = intentRegistry.decode(IntentKind.Move, buf);
61
- * ```
62
- *
63
- * @example Manual definition (legacy)
64
- * ```ts
65
- * // Define your types
66
- * interface MoveIntent extends Intent {
67
- * kind: 1;
68
- * tick: number;
69
- * dx: number;
70
- * dy: number;
71
- * }
72
- *
73
- * interface GameState {
74
- * players: Record<number, { x: number; y: number }>;
75
- * }
76
- *
77
- * // Create codecs once (reuse these!)
78
- * const intentRegistry = new IntentRegistry();
79
- * intentRegistry.register(1, new PooledCodec(moveSchema));
80
- *
81
- * const snapshotCodec = new SnapshotCodec<GameState>(
82
- * new PooledCodec(stateSchema)
83
- * );
84
- *
85
- * // Use them
86
- * const buf = intentRegistry.encode(intent);
87
- * const snapshot = snapshotCodec.decode(buf);
88
- * ```
89
- */
90
-
91
- export * from "./intent";
92
- export * from "./snapshot";
93
- export * from "./rpc";