murow 0.0.60 → 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 (425) 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/loop → types/core/driver}/drivers/immediate.d.ts +1 -1
  156. package/dist/{core/loop → types/core/driver}/drivers/raf.d.ts +1 -1
  157. package/dist/{core/loop → types/core/driver}/drivers/timeout.d.ts +1 -1
  158. package/dist/{core/loop → types/core/driver}/index.d.ts +1 -1
  159. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  160. package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +1 -1
  161. package/dist/types/core/free-list/free-list.d.ts +31 -0
  162. package/dist/types/core/free-list/index.d.ts +1 -0
  163. package/dist/{core → types/core}/index.d.ts +7 -1
  164. package/dist/types/core/input/index.d.ts +3 -0
  165. package/dist/types/core/input/manager.d.ts +56 -0
  166. package/dist/types/core/input/sources/browser.d.ts +9 -0
  167. package/dist/types/core/input/sources/index.d.ts +1 -0
  168. package/dist/types/core/input/types.d.ts +36 -0
  169. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  170. package/dist/types/core/ray/index.d.ts +2 -0
  171. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  172. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  173. package/dist/types/core/simple-rng/index.d.ts +1 -0
  174. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  175. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  176. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  177. package/dist/{ecs → types/ecs}/system-builder.d.ts +20 -9
  178. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  179. package/dist/types/game/index.d.ts +1 -0
  180. package/dist/types/game/loop/index.d.ts +1 -0
  181. package/dist/types/game/loop/loop.d.ts +175 -0
  182. package/dist/{index.d.ts → types/index.d.ts} +2 -0
  183. package/dist/{net → types/net}/index.d.ts +2 -2
  184. package/dist/{net → types/net}/server.d.ts +39 -19
  185. package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +15 -0
  186. package/dist/{protocol → types/protocol}/intent/index.d.ts +1 -1
  187. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  188. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  189. package/dist/types/renderer/base-renderer.d.ts +21 -0
  190. package/dist/types/renderer/index.d.ts +4 -0
  191. package/dist/types/renderer/types.d.ts +79 -0
  192. package/dist/webgpu/cjs/index.js +6004 -0
  193. package/dist/webgpu/esm/index.js +5972 -0
  194. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  195. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  196. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  197. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  198. package/dist/webgpu/types/2d/sprite-accessor.test.d.ts +1 -0
  199. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  200. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  201. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  202. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  203. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  204. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  205. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  206. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  207. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  208. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  209. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  210. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  211. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  212. package/dist/webgpu/types/camera/index.d.ts +2 -0
  213. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  214. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  215. package/dist/webgpu/types/core/constants.d.ts +59 -0
  216. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  217. package/dist/webgpu/types/core/index.d.ts +2 -0
  218. package/dist/webgpu/types/core/math.d.ts +37 -0
  219. package/dist/webgpu/types/core/types.d.ts +125 -0
  220. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  221. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  222. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  223. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  224. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  225. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  226. package/dist/webgpu/types/index.d.ts +32 -0
  227. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  228. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  229. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  230. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  231. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  232. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  233. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  234. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  235. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  236. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  237. package/package.json +96 -26
  238. package/dist/core/binary-codec/binary-codec.js +0 -354
  239. package/dist/core/binary-codec/index.js +0 -1
  240. package/dist/core/events/event-system.js +0 -88
  241. package/dist/core/events/index.js +0 -1
  242. package/dist/core/fixed-ticker/fixed-ticker.js +0 -101
  243. package/dist/core/fixed-ticker/index.js +0 -1
  244. package/dist/core/generate-id/generate-id.js +0 -25
  245. package/dist/core/generate-id/index.js +0 -1
  246. package/dist/core/index.js +0 -9
  247. package/dist/core/lerp/index.js +0 -1
  248. package/dist/core/lerp/lerp.js +0 -42
  249. package/dist/core/loop/drivers/immediate.js +0 -61
  250. package/dist/core/loop/drivers/index.js +0 -3
  251. package/dist/core/loop/drivers/raf.js +0 -62
  252. package/dist/core/loop/drivers/timeout.js +0 -71
  253. package/dist/core/loop/index.js +0 -2
  254. package/dist/core/loop/loop.js +0 -47
  255. package/dist/core/navmesh/index.js +0 -1
  256. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  257. package/dist/core/navmesh/navmesh.js +0 -799
  258. package/dist/core/navmesh/navmesh.worker.js +0 -79
  259. package/dist/core/pooled-codec/index.js +0 -1
  260. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  261. package/dist/core/prediction/index.js +0 -1
  262. package/dist/core/prediction/prediction.js +0 -99
  263. package/dist/core.esm.js +0 -1
  264. package/dist/core.js +0 -1
  265. package/dist/ecs/component-store.js +0 -175
  266. package/dist/ecs/component.js +0 -43
  267. package/dist/ecs/entity-handle.js +0 -515
  268. package/dist/ecs/example.js +0 -125
  269. package/dist/ecs/index.js +0 -4
  270. package/dist/ecs/system-builder.js +0 -180
  271. package/dist/ecs/system.d.ts +0 -63
  272. package/dist/ecs/system.js +0 -92
  273. package/dist/ecs/world-systems.js +0 -79
  274. package/dist/ecs/world.js +0 -684
  275. package/dist/index.js +0 -24
  276. package/dist/net/adapters/browser-websocket.js +0 -74
  277. package/dist/net/adapters/bun-websocket.js +0 -245
  278. package/dist/net/buffer-pool.js +0 -89
  279. package/dist/net/client.js +0 -586
  280. package/dist/net/index.js +0 -58
  281. package/dist/net/server.js +0 -938
  282. package/dist/net/types.js +0 -31
  283. package/dist/net/validators.js +0 -88
  284. package/dist/protocol/index.js +0 -92
  285. package/dist/protocol/intent/define-intent.js +0 -125
  286. package/dist/protocol/intent/index.js +0 -91
  287. package/dist/protocol/intent/intent-registry.js +0 -91
  288. package/dist/protocol/rpc/define-rpc.js +0 -84
  289. package/dist/protocol/rpc/index.js +0 -3
  290. package/dist/protocol/rpc/rpc-registry.js +0 -159
  291. package/dist/protocol/rpc/rpc.js +0 -12
  292. package/dist/protocol/snapshot/index.js +0 -43
  293. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  294. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  295. package/dist/protocol/snapshot/snapshot.js +0 -30
  296. package/src/core/binary-codec/README.md +0 -60
  297. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  298. package/src/core/binary-codec/binary-codec.ts +0 -448
  299. package/src/core/binary-codec/index.ts +0 -1
  300. package/src/core/events/README.md +0 -47
  301. package/src/core/events/event-system.test.ts +0 -243
  302. package/src/core/events/event-system.ts +0 -140
  303. package/src/core/events/index.ts +0 -1
  304. package/src/core/fixed-ticker/README.md +0 -77
  305. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  306. package/src/core/fixed-ticker/fixed-ticker.ts +0 -169
  307. package/src/core/fixed-ticker/index.ts +0 -1
  308. package/src/core/generate-id/README.md +0 -18
  309. package/src/core/generate-id/generate-id.test.ts +0 -79
  310. package/src/core/generate-id/generate-id.ts +0 -37
  311. package/src/core/generate-id/index.ts +0 -1
  312. package/src/core/index.ts +0 -9
  313. package/src/core/lerp/README.md +0 -79
  314. package/src/core/lerp/index.ts +0 -1
  315. package/src/core/lerp/lerp.test.ts +0 -90
  316. package/src/core/lerp/lerp.ts +0 -42
  317. package/src/core/loop/README.md +0 -97
  318. package/src/core/loop/drivers/immediate.ts +0 -66
  319. package/src/core/loop/drivers/index.ts +0 -3
  320. package/src/core/loop/drivers/raf.ts +0 -67
  321. package/src/core/loop/drivers/timeout.ts +0 -77
  322. package/src/core/loop/index.ts +0 -2
  323. package/src/core/loop/loop.test.ts +0 -414
  324. package/src/core/loop/loop.ts +0 -71
  325. package/src/core/navmesh/README.md +0 -164
  326. package/src/core/navmesh/index.ts +0 -1
  327. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  328. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  329. package/src/core/navmesh/navmesh.test.ts +0 -344
  330. package/src/core/navmesh/navmesh.ts +0 -1047
  331. package/src/core/navmesh/navmesh.worker.ts +0 -147
  332. package/src/core/pooled-codec/README.md +0 -70
  333. package/src/core/pooled-codec/index.ts +0 -1
  334. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  335. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  336. package/src/core/prediction/README.md +0 -64
  337. package/src/core/prediction/index.ts +0 -1
  338. package/src/core/prediction/prediction.test.ts +0 -423
  339. package/src/core/prediction/prediction.ts +0 -112
  340. package/src/ecs/README.md +0 -427
  341. package/src/ecs/benchmark.test.ts +0 -1645
  342. package/src/ecs/component-store.ts +0 -198
  343. package/src/ecs/component.ts +0 -90
  344. package/src/ecs/entity-handle.test.ts +0 -393
  345. package/src/ecs/entity-handle.ts +0 -563
  346. package/src/ecs/example.ts +0 -152
  347. package/src/ecs/index.ts +0 -4
  348. package/src/ecs/system-builder.ts +0 -309
  349. package/src/ecs/system.ts +0 -111
  350. package/src/ecs/world-systems.ts +0 -83
  351. package/src/ecs/world.test.ts +0 -310
  352. package/src/ecs/world.ts +0 -828
  353. package/src/index.ts +0 -28
  354. package/src/net/README.md +0 -474
  355. package/src/net/adapters/browser-websocket.ts +0 -86
  356. package/src/net/adapters/bun-websocket.ts +0 -292
  357. package/src/net/buffer-pool.ts +0 -106
  358. package/src/net/client.test.ts +0 -807
  359. package/src/net/client.ts +0 -695
  360. package/src/net/index.ts +0 -60
  361. package/src/net/server.test.ts +0 -799
  362. package/src/net/server.ts +0 -1116
  363. package/src/net/types.ts +0 -228
  364. package/src/net/validators.ts +0 -104
  365. package/src/protocol/README.md +0 -469
  366. package/src/protocol/index.ts +0 -93
  367. package/src/protocol/intent/define-intent.test.ts +0 -397
  368. package/src/protocol/intent/define-intent.ts +0 -182
  369. package/src/protocol/intent/index.ts +0 -94
  370. package/src/protocol/intent/intent-registry.test.ts +0 -198
  371. package/src/protocol/intent/intent-registry.ts +0 -112
  372. package/src/protocol/intent/intent.ts +0 -12
  373. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  374. package/src/protocol/rpc/define-rpc.ts +0 -113
  375. package/src/protocol/rpc/index.ts +0 -3
  376. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  377. package/src/protocol/rpc/rpc-registry.ts +0 -176
  378. package/src/protocol/rpc/rpc.ts +0 -37
  379. package/src/protocol/snapshot/index.ts +0 -45
  380. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  381. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  382. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  383. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  384. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  385. package/src/protocol/snapshot/snapshot.ts +0 -41
  386. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  387. /package/dist/{core/loop/loop.d.ts → types/core/driver/driver.d.ts} +0 -0
  388. /package/dist/{core/loop → types/core/driver}/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  390. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  391. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  392. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  394. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  395. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  396. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  397. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  398. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  400. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  402. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  403. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  404. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  405. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  406. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  407. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  408. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  409. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  410. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  411. /package/dist/{net → types/net}/client.d.ts +0 -0
  412. /package/dist/{net → types/net}/types.d.ts +0 -0
  413. /package/dist/{net → types/net}/validators.d.ts +0 -0
  414. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  415. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  416. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  417. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  418. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  419. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  420. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  421. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  422. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  423. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  424. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  425. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/animation.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";