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,198 +0,0 @@
1
- import { describe, it, expect, beforeEach } from "bun:test";
2
- import { IntentRegistry } from "./intent-registry";
3
- import { Intent } from "./intent";
4
- import { defineIntent } from "./define-intent";
5
- import { BinaryCodec } from "../../core/binary-codec";
6
-
7
- // Define intents using defineIntent for testing
8
- const MockIntent = defineIntent({
9
- kind: 1 as const,
10
- schema: {
11
- value: BinaryCodec.u32,
12
- },
13
- });
14
-
15
- const AnotherIntent = defineIntent({
16
- kind: 2 as const,
17
- schema: {
18
- data: BinaryCodec.string(64),
19
- },
20
- });
21
-
22
- type MockIntentType = typeof MockIntent.type;
23
- type AnotherIntentType = typeof AnotherIntent.type;
24
-
25
- describe("IntentRegistry", () => {
26
- let registry: IntentRegistry;
27
-
28
- beforeEach(() => {
29
- registry = new IntentRegistry();
30
- });
31
-
32
- describe("register", () => {
33
- it("should register a codec for an intent kind", () => {
34
- registry.register(MockIntent);
35
- expect(registry.has(1)).toBe(true);
36
- });
37
-
38
- it("should throw error when registering duplicate kind", () => {
39
- registry.register(MockIntent);
40
- expect(() => registry.register(MockIntent)).toThrow(
41
- "Intent kind 1 is already registered"
42
- );
43
- });
44
-
45
- it("should allow registering multiple different kinds", () => {
46
- registry.register(MockIntent);
47
- registry.register(AnotherIntent);
48
- expect(registry.has(1)).toBe(true);
49
- expect(registry.has(2)).toBe(true);
50
- });
51
- });
52
-
53
- describe("encode", () => {
54
- it("should encode an intent using registered codec", () => {
55
- registry.register(MockIntent);
56
- const intent: MockIntentType = { kind: 1, tick: 100, value: 42 };
57
- const buf = registry.encode(intent);
58
-
59
- expect(buf).toBeInstanceOf(Uint8Array);
60
- expect(buf[0]).toBe(1); // kind
61
- });
62
-
63
- it("should throw error when encoding unregistered intent kind", () => {
64
- const intent: MockIntentType = { kind: 1, tick: 100, value: 42 };
65
- expect(() => registry.encode(intent)).toThrow(
66
- "No codec registered for intent kind 1"
67
- );
68
- });
69
-
70
- it("should encode different intent types correctly", () => {
71
- registry.register(MockIntent);
72
- registry.register(AnotherIntent);
73
-
74
- const intent1: MockIntentType = { kind: 1, tick: 100, value: 42 };
75
- const intent2: AnotherIntentType = { kind: 2, tick: 200, data: "test" };
76
-
77
- const buf1 = registry.encode(intent1);
78
- const buf2 = registry.encode(intent2);
79
-
80
- expect(buf1[0]).toBe(1);
81
- expect(buf2[0]).toBe(2);
82
- });
83
- });
84
-
85
- describe("decode", () => {
86
- it("should decode a buffer using registered codec", () => {
87
- registry.register(MockIntent);
88
- const original: MockIntentType = { kind: 1, tick: 100, value: 42 };
89
- const buf = registry.encode(original);
90
- const decoded = registry.decode(buf);
91
-
92
- expect(decoded).toEqual(original);
93
- });
94
-
95
- it("should throw error when decoding with unregistered kind", () => {
96
- const buf = new Uint8Array([99, 0, 0, 0, 100, 0, 0, 0, 42]); // kind=99 not registered
97
- expect(() => registry.decode(buf)).toThrow(
98
- "No codec registered for intent kind 99"
99
- );
100
- });
101
-
102
- it("should decode different intent types correctly", () => {
103
- registry.register(MockIntent);
104
- registry.register(AnotherIntent);
105
-
106
- const intent1: MockIntentType = { kind: 1, tick: 100, value: 42 };
107
- const intent2: AnotherIntentType = { kind: 2, tick: 200, data: "hello" };
108
-
109
- const buf1 = registry.encode(intent1);
110
- const buf2 = registry.encode(intent2);
111
-
112
- const decoded1 = registry.decode(buf1);
113
- const decoded2 = registry.decode(buf2);
114
-
115
- expect(decoded1).toEqual(intent1);
116
- expect(decoded2).toEqual(intent2);
117
- });
118
- });
119
-
120
- describe("has", () => {
121
- it("should return true for registered kinds", () => {
122
- registry.register(MockIntent);
123
- expect(registry.has(1)).toBe(true);
124
- });
125
-
126
- it("should return false for unregistered kinds", () => {
127
- expect(registry.has(1)).toBe(false);
128
- });
129
- });
130
-
131
- describe("unregister", () => {
132
- it("should remove a registered codec", () => {
133
- registry.register(MockIntent);
134
- expect(registry.has(1)).toBe(true);
135
-
136
- const removed = registry.unregister(1);
137
- expect(removed).toBe(true);
138
- expect(registry.has(1)).toBe(false);
139
- });
140
-
141
- it("should return false when unregistering non-existent kind", () => {
142
- const removed = registry.unregister(1);
143
- expect(removed).toBe(false);
144
- });
145
- });
146
-
147
- describe("clear", () => {
148
- it("should remove all registered codecs", () => {
149
- registry.register(MockIntent);
150
- registry.register(AnotherIntent);
151
-
152
- registry.clear();
153
-
154
- expect(registry.has(1)).toBe(false);
155
- expect(registry.has(2)).toBe(false);
156
- });
157
- });
158
-
159
- describe("getKinds", () => {
160
- it("should return empty array when no codecs registered", () => {
161
- expect(registry.getKinds()).toEqual([]);
162
- });
163
-
164
- it("should return all registered kinds", () => {
165
- registry.register(MockIntent);
166
- registry.register(AnotherIntent);
167
-
168
- const kinds = registry.getKinds();
169
- expect(kinds).toContain(1);
170
- expect(kinds).toContain(2);
171
- expect(kinds.length).toBe(2);
172
- });
173
- });
174
-
175
- describe("round-trip encoding/decoding", () => {
176
- it("should preserve intent data through encode/decode cycle", () => {
177
- registry.register(MockIntent);
178
-
179
- const original: MockIntentType = { kind: 1, tick: 12345, value: 98765 };
180
- const buf = registry.encode(original);
181
- const decoded = registry.decode(buf);
182
-
183
- expect(decoded).toEqual(original);
184
- });
185
-
186
- it("should handle multiple round-trips", () => {
187
- registry.register(MockIntent);
188
-
189
- const original: MockIntentType = { kind: 1, tick: 100, value: 42 };
190
-
191
- for (let i = 0; i < 10; i++) {
192
- const buf = registry.encode(original);
193
- const decoded = registry.decode(buf);
194
- expect(decoded).toEqual(original);
195
- }
196
- });
197
- });
198
- });
@@ -1,112 +0,0 @@
1
- import { DefinedIntent } from "./define-intent";
2
- import type { Intent } from "./intent";
3
-
4
- /**
5
- * Generic codec interface (users import from core/pooled-codec)
6
- */
7
- export interface Codec<T> {
8
- encode(value: T): Uint8Array;
9
- decode(buf: Uint8Array): T;
10
- calculateSize?(value: T): number;
11
- encodeInto?(value: T, buffer: Uint8Array, offset: number): number;
12
- }
13
-
14
- /**
15
- * Registry for mapping intent kinds to their codecs.
16
- *
17
- * Users instantiate this once and register their intent types with
18
- * PooledCodec instances (from core/pooled-codec).
19
- *
20
- * @example
21
- * ```ts
22
- * import { IntentRegistry } from './protocol/intent';
23
- * import { PooledCodec } from './core/pooled-codec';
24
- * import { BinaryCodec } from './core/binary-codec';
25
- *
26
- * const registry = new IntentRegistry();
27
- *
28
- * registry.register(1, new PooledCodec({
29
- * kind: BinaryCodec.u8,
30
- * tick: BinaryCodec.u32,
31
- * dx: BinaryCodec.f32,
32
- * dy: BinaryCodec.f32,
33
- * }));
34
- *
35
- * // Encode/decode
36
- * const buf = registry.encode(intent);
37
- * const decoded = registry.decode(buf);
38
- * ```
39
- */
40
- export class IntentRegistry {
41
- private codecs = new Map<number, Codec<any>>();
42
-
43
- /**
44
- * Register a codec for a specific intent kind.
45
- * Call this once per intent type at startup.
46
- */
47
- register<T extends Intent>(intent: DefinedIntent<T['kind'], T>): void {
48
- if (this.codecs.has(intent.kind)) {
49
- throw new Error(`Intent kind ${intent.kind} is already registered`);
50
- }
51
- this.codecs.set(intent.kind, intent.codec);
52
- }
53
-
54
- /**
55
- * Encode an intent into binary format.
56
- */
57
- encode<T extends Intent>(intent: T): Uint8Array {
58
- const codec = this.codecs.get(intent.kind);
59
- if (!codec) {
60
- throw new Error(`No codec registered for intent kind ${intent.kind}`);
61
- }
62
- return codec.encode(intent);
63
- }
64
-
65
- /**
66
- * Decode binary data into an intent.
67
- * Extracts the kind from the first byte of the buffer.
68
- */
69
- decode(buf: Uint8Array): Intent {
70
- if (buf.byteLength === 0) {
71
- throw new Error('Cannot decode empty buffer');
72
- }
73
-
74
- // Extract kind from first byte (all intent codecs must encode kind as u8 in first byte)
75
- const kind = buf[0];
76
-
77
- const codec = this.codecs.get(kind);
78
- if (!codec) {
79
- throw new Error(`No codec registered for intent kind ${kind}`);
80
- }
81
- return codec.decode(buf);
82
- }
83
-
84
- /**
85
- * Decode binary data into an intent when kind is already known.
86
- * Useful for testing or when kind is transmitted separately.
87
- * @deprecated Use decode(buf) instead for standard intent decoding
88
- */
89
- decodeWithKnownKind(kind: number, buf: Uint8Array): Intent {
90
- const codec = this.codecs.get(kind);
91
- if (!codec) {
92
- throw new Error(`No codec registered for intent kind ${kind}`);
93
- }
94
- return codec.decode(buf);
95
- }
96
-
97
- has(kind: number): boolean {
98
- return this.codecs.has(kind);
99
- }
100
-
101
- unregister(kind: number): boolean {
102
- return this.codecs.delete(kind);
103
- }
104
-
105
- clear(): void {
106
- this.codecs.clear();
107
- }
108
-
109
- getKinds(): number[] {
110
- return Array.from(this.codecs.keys());
111
- }
112
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Base interface for all game intents.
3
- *
4
- * Intents represent player or AI actions that need to be processed by the game simulation.
5
- * They are timestamped with a tick number for deterministic replay and synchronization.
6
- */
7
- export interface Intent {
8
- /** The game tick at which this intent should be processed */
9
- tick: number;
10
- /** Numeric identifier for the intent type (used for codec lookup) */
11
- kind: number;
12
- }
@@ -1,141 +0,0 @@
1
- import { describe, it, expect } from "bun:test";
2
- import { defineRPC } from "./define-rpc";
3
- import { BinaryCodec } from "../../core/binary-codec";
4
- import { RpcRegistry } from "./rpc-registry";
5
-
6
- describe("defineRPC", () => {
7
- describe("type inference", () => {
8
- it("should infer correct type from schema", () => {
9
- const MatchCountdown = defineRPC({
10
- method: 'matchCountdown',
11
- schema: {
12
- secondsRemaining: BinaryCodec.u8,
13
- },
14
- });
15
-
16
- type MatchCountdown = typeof MatchCountdown.type;
17
-
18
- // Create an instance to verify type inference
19
- const countdown: MatchCountdown = {
20
- secondsRemaining: 10,
21
- };
22
-
23
- expect(countdown.secondsRemaining).toBe(10);
24
- });
25
-
26
- it("should support RPCs with different field types", () => {
27
- const BuyItem = defineRPC({
28
- method: 'buyItem',
29
- schema: {
30
- itemId: BinaryCodec.string(32),
31
- quantity: BinaryCodec.u16,
32
- price: BinaryCodec.f32,
33
- },
34
- });
35
-
36
- type BuyItem = typeof BuyItem.type;
37
-
38
- const purchase: BuyItem = {
39
- itemId: 'long_sword',
40
- quantity: 5,
41
- price: 100.5,
42
- };
43
-
44
- expect(purchase.itemId).toBe('long_sword');
45
- expect(purchase.quantity).toBe(5);
46
- expect(purchase.price).toBe(100.5);
47
- });
48
-
49
- it("should support empty RPCs (no parameters)", () => {
50
- const Ping = defineRPC({
51
- method: 'ping',
52
- schema: {},
53
- });
54
-
55
- type Ping = typeof Ping.type;
56
-
57
- const ping: Ping = {};
58
-
59
- expect(ping).toEqual({});
60
- });
61
- });
62
-
63
- describe("codec generation", () => {
64
- it("should generate a codec that can encode/decode", () => {
65
- const TestRpc = defineRPC({
66
- method: 'test',
67
- schema: {
68
- value: BinaryCodec.u32,
69
- },
70
- });
71
-
72
- type TestRpc = typeof TestRpc.type;
73
-
74
- const data: TestRpc = { value: 42 };
75
- const encoded = TestRpc.codec.encode(data);
76
-
77
- expect(encoded).toBeInstanceOf(Uint8Array);
78
-
79
- const decoded = TestRpc.codec.decode(encoded);
80
- expect(decoded.value).toBe(42);
81
- });
82
-
83
- it("should encode/decode complex types", () => {
84
- const PlayerInfo = defineRPC({
85
- method: 'playerInfo',
86
- schema: {
87
- playerId: BinaryCodec.u32,
88
- name: BinaryCodec.string(64),
89
- level: BinaryCodec.u8,
90
- health: BinaryCodec.f32,
91
- },
92
- });
93
-
94
- type PlayerInfo = typeof PlayerInfo.type;
95
-
96
- const data: PlayerInfo = {
97
- playerId: 12345,
98
- name: 'TestPlayer',
99
- level: 50,
100
- health: 85.5,
101
- };
102
-
103
- const encoded = PlayerInfo.codec.encode(data);
104
- const decoded = PlayerInfo.codec.decode(encoded);
105
-
106
- expect(decoded.playerId).toBe(12345);
107
- expect(decoded.name).toBe('TestPlayer');
108
- expect(decoded.level).toBe(50);
109
- expect(decoded.health).toBeCloseTo(85.5, 1);
110
- });
111
- });
112
-
113
- describe("integration with RpcRegistry", () => {
114
- it("should work with RpcRegistry", () => {
115
- const Notification = defineRPC({
116
- method: 'notification',
117
- schema: {
118
- message: BinaryCodec.string(128),
119
- priority: BinaryCodec.u8,
120
- },
121
- });
122
-
123
- type Notification = typeof Notification.type;
124
-
125
- const registry = new RpcRegistry();
126
- registry.register(Notification);
127
-
128
- const data: Notification = {
129
- message: 'Test notification',
130
- priority: 1,
131
- };
132
-
133
- const encoded = registry.encode(Notification, data);
134
- const decoded = registry.decode(encoded);
135
-
136
- expect(decoded.method).toBe('notification');
137
- expect(decoded.data.message).toBe('Test notification');
138
- expect(decoded.data.priority).toBe(1);
139
- });
140
- });
141
- });
@@ -1,113 +0,0 @@
1
- import type { DefinedRPC, RpcCodec } from "./rpc";
2
- import type { Schema } from "../../core/binary-codec";
3
- import { BinaryCodec } from "../../core/binary-codec";
4
-
5
- /**
6
- * Configuration for defining an RPC type.
7
- * @template S The schema type describing the RPC's data fields
8
- */
9
- export interface RpcDefinition<S extends Record<string, any>> {
10
- /** Method name for this RPC (must be unique) */
11
- method: string;
12
- /** Schema describing the RPC's data fields */
13
- schema: S;
14
- }
15
-
16
- /**
17
- * Infers the TypeScript type from an RPC schema.
18
- * @template S The schema type
19
- */
20
- export type InferRpcType<S extends Record<string, any>> = {
21
- [P in keyof S]: S[P] extends { read(dv: DataView, o: number): infer R } ? R : never;
22
- };
23
-
24
- /**
25
- * Simple codec implementation that uses BinaryCodec for encoding/decoding.
26
- * @template T The RPC data type
27
- */
28
- class RpcCodecImpl<T extends object> implements RpcCodec<T> {
29
- constructor(private schema: Schema<T>) {}
30
-
31
- encode(value: T): Uint8Array {
32
- return BinaryCodec.encode(this.schema, value);
33
- }
34
-
35
- decode(buf: Uint8Array): T {
36
- // Create a target object with nil values
37
- const target = {} as T;
38
- for (const key of Object.keys(this.schema) as (keyof T)[]) {
39
- const field = this.schema[key];
40
- target[key] = field.toNil() as T[keyof T];
41
- }
42
- return BinaryCodec.decode(this.schema, buf, target);
43
- }
44
- }
45
-
46
- /**
47
- * Define a type-safe RPC with automatic schema generation.
48
- *
49
- * RPCs are bidirectional one-off events/commands for:
50
- * - Meta-game events (achievements, notifications)
51
- * - Match lifecycle (countdown, results)
52
- * - Request/response patterns
53
- * - System announcements
54
- *
55
- * NOT for game state synchronization (use Snapshots) or player inputs (use Intents)
56
- *
57
- * @template S The schema type
58
- * @param definition RPC configuration with method and schema
59
- * @returns A DefinedRpc object with method and codec
60
- *
61
- * @example Server → Client RPC
62
- * ```ts
63
- * const MatchCountdown = defineRPC({
64
- * method: 'matchCountdown',
65
- * schema: {
66
- * secondsRemaining: BinaryCodec.u8,
67
- * }
68
- * });
69
- *
70
- * // Server sends
71
- * server.sendRpcBroadcast(MatchCountdown, { secondsRemaining: 10 });
72
- *
73
- * // Client receives
74
- * client.onRpc(MatchCountdown, (rpc) => {
75
- * console.log(`Match starting in ${rpc.secondsRemaining}s`);
76
- * });
77
- * ```
78
- *
79
- * @example Client → Server RPC
80
- * ```ts
81
- * const BuyItem = defineRPC({
82
- * method: 'buyItem',
83
- * schema: {
84
- * itemId: BinaryCodec.string(32),
85
- * }
86
- * });
87
- *
88
- * // Client sends
89
- * client.sendRpc(BuyItem, { itemId: 'long_sword' });
90
- *
91
- * // Server receives
92
- * server.onRpc(BuyItem, (peerId, rpc) => {
93
- * console.log(`${peerId} wants to buy ${rpc.itemId}`);
94
- * });
95
- * ```
96
- */
97
- export function defineRPC<S extends Record<string, any>>(
98
- definition: RpcDefinition<S>
99
- ): DefinedRPC<InferRpcType<S>> {
100
- type RpcType = InferRpcType<S>;
101
-
102
- // Create the schema from definition
103
- const schema = definition.schema as Schema<RpcType>;
104
-
105
- // Create the codec using BinaryCodec
106
- const codec = new RpcCodecImpl<RpcType>(schema);
107
-
108
- return {
109
- method: definition.method,
110
- codec,
111
- type: undefined as any as RpcType, // Phantom type for inference
112
- };
113
- }
@@ -1,3 +0,0 @@
1
- export * from './rpc';
2
- export * from './define-rpc';
3
- export * from './rpc-registry';