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
package/dist/net/types.js DELETED
@@ -1,31 +0,0 @@
1
- /**
2
- * Core networking types for transport-agnostic multiplayer game networking
3
- */
4
- /**
5
- * Message type identifiers for protocol discrimination
6
- */
7
- export var MessageType;
8
- (function (MessageType) {
9
- /** Client -> Server: Intent/command */
10
- MessageType[MessageType["INTENT"] = 1] = "INTENT";
11
- /** Server -> Client: State snapshot */
12
- MessageType[MessageType["SNAPSHOT"] = 2] = "SNAPSHOT";
13
- /** Bidirectional: Heartbeat/ping */
14
- MessageType[MessageType["HEARTBEAT"] = 3] = "HEARTBEAT";
15
- /** Bidirectional: Custom application message */
16
- MessageType[MessageType["CUSTOM"] = 255] = "CUSTOM";
17
- })(MessageType || (MessageType = {}));
18
- /**
19
- * Message priority levels for send queue
20
- */
21
- export var MessagePriority;
22
- (function (MessagePriority) {
23
- /** Lowest priority - can be dropped if queue is full (e.g., chat) */
24
- MessagePriority[MessagePriority["LOW"] = 0] = "LOW";
25
- /** Normal priority - most game messages (e.g., movement) */
26
- MessagePriority[MessagePriority["NORMAL"] = 1] = "NORMAL";
27
- /** High priority - important events (e.g., damage, scoring) */
28
- MessagePriority[MessagePriority["HIGH"] = 2] = "HIGH";
29
- /** Critical priority - never drop (e.g., connection control) */
30
- MessagePriority[MessagePriority["CRITICAL"] = 3] = "CRITICAL";
31
- })(MessagePriority || (MessagePriority = {}));
@@ -1,88 +0,0 @@
1
- /**
2
- * Common intent validation helpers
3
- */
4
- /**
5
- * Validate that intent tick is not in the past (with tolerance for network lag)
6
- *
7
- * NOTE: Pass the current tick value at the time you create the validator.
8
- * If your tick advances, you'll need to recreate the validator or use a function
9
- * that captures the current tick dynamically.
10
- *
11
- * @param currentTick Current server tick
12
- * @param tolerance Number of ticks to allow in the past (default: 10)
13
- *
14
- * @example
15
- * ```ts
16
- * // Option 1: Recreate validator each tick (simple but allocates)
17
- * function onTick(currentTick: number) {
18
- * const validator = validateTickNotTooOld(currentTick);
19
- * // use validator...
20
- * }
21
- *
22
- * // Option 2: Manual validation (zero allocation)
23
- * if (intent.tick >= currentTick - 10) {
24
- * // intent is valid
25
- * }
26
- * ```
27
- */
28
- export function validateTickNotTooOld(currentTick, tolerance = 10) {
29
- return (_peerId, intent) => {
30
- return intent.tick >= currentTick - tolerance;
31
- };
32
- }
33
- /**
34
- * Validate that intent tick is not too far in the future
35
- * @param currentTick Current server tick
36
- * @param tolerance Number of ticks to allow in the future (default: 5)
37
- */
38
- export function validateTickNotTooFuture(currentTick, tolerance = 5) {
39
- return (_peerId, intent) => {
40
- return intent.tick <= currentTick + tolerance;
41
- };
42
- }
43
- /**
44
- * Validate intent tick is within acceptable range
45
- * @param currentTick Current server tick
46
- * @param pastTolerance Ticks allowed in past (default: 10)
47
- * @param futureTolerance Ticks allowed in future (default: 5)
48
- */
49
- export function validateTickRange(currentTick, pastTolerance = 10, futureTolerance = 5) {
50
- return (_peerId, intent) => {
51
- return (intent.tick >= currentTick - pastTolerance &&
52
- intent.tick <= currentTick + futureTolerance);
53
- };
54
- }
55
- /**
56
- * Combine multiple validators with AND logic
57
- */
58
- export function combineValidators(...validators) {
59
- return (peerId, intent) => {
60
- for (const validator of validators) {
61
- if (!validator(peerId, intent)) {
62
- return false;
63
- }
64
- }
65
- return true;
66
- };
67
- }
68
- /**
69
- * Validate that a numeric field is within a range
70
- */
71
- export function validateRange(field, min, max) {
72
- return (_peerId, intent) => {
73
- const value = intent[field];
74
- if (typeof value !== "number") {
75
- return false;
76
- }
77
- return value >= min && value <= max;
78
- };
79
- }
80
- /**
81
- * Validate that a field exists and is of expected type
82
- */
83
- export function validateFieldType(field, expectedType) {
84
- return (_peerId, intent) => {
85
- const value = intent[field];
86
- return typeof value === expectedType;
87
- };
88
- }
@@ -1,92 +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
- export * from "./intent";
91
- export * from "./snapshot";
92
- export * from "./rpc";
@@ -1,125 +0,0 @@
1
- import { BinaryCodec } from "../../core/binary-codec";
2
- /**
3
- * Simple codec implementation that uses BinaryCodec for encoding/decoding.
4
- * @template T The intent type
5
- */
6
- class IntentCodec {
7
- constructor(schema) {
8
- this.schema = schema;
9
- }
10
- encode(value) {
11
- return BinaryCodec.encode(this.schema, value);
12
- }
13
- decode(buf) {
14
- // Create a target object with nil values
15
- const target = {};
16
- for (const key of Object.keys(this.schema)) {
17
- const field = this.schema[key];
18
- target[key] = field.toNil();
19
- }
20
- return BinaryCodec.decode(this.schema, buf, target);
21
- }
22
- }
23
- /**
24
- * Define a type-safe intent with automatic schema generation.
25
- *
26
- * This helper ensures that your intent's TypeScript interface and binary schema
27
- * stay in sync by deriving the type from the schema definition.
28
- *
29
- * The `kind` and `tick` fields are automatically added to the schema:
30
- * - `kind`: u8 codec (always FIRST byte - required for IntentRegistry.decode)
31
- * - `tick`: u32 codec (default, can be overridden by including it in your schema)
32
- *
33
- * IMPORTANT: If you use PooledCodec directly instead of defineIntent(), you MUST
34
- * ensure `kind: BinaryPrimitives.u8` is the FIRST field in your schema, or
35
- * IntentRegistry.decode() will fail.
36
- *
37
- * @template K The intent kind (numeric literal)
38
- * @template S The schema type
39
- * @param definition Intent configuration with kind and schema
40
- * @returns A DefinedIntent object with type, codec, and kind
41
- *
42
- * @example Using enums (recommended for managing multiple intents)
43
- * ```ts
44
- * // Define all your intent kinds in one place
45
- * enum IntentKind {
46
- * Move = 1,
47
- * Attack = 2,
48
- * Jump = 3,
49
- * Chat = 4,
50
- * }
51
- *
52
- * const MoveIntent = defineIntent({
53
- * kind: IntentKind.Move,
54
- * schema: {
55
- * dx: BinaryCodec.f32,
56
- * dy: BinaryCodec.f32,
57
- * }
58
- * });
59
- *
60
- * const AttackIntent = defineIntent({
61
- * kind: IntentKind.Attack,
62
- * schema: {
63
- * targetId: BinaryCodec.u32,
64
- * damage: BinaryCodec.f32,
65
- * }
66
- * });
67
- *
68
- * // Use the inferred types
69
- * type MoveIntent = typeof MoveIntent.type;
70
- * type AttackIntent = typeof AttackIntent.type;
71
- *
72
- * // Register with IntentRegistry
73
- * const registry = new IntentRegistry();
74
- * registry.register(MoveIntent.kind, MoveIntent.codec);
75
- * registry.register(AttackIntent.kind, AttackIntent.codec);
76
- *
77
- * // Create instances - tick is automatically available
78
- * const move: MoveIntent = {
79
- * kind: IntentKind.Move,
80
- * tick: 100,
81
- * dx: 1.5,
82
- * dy: -2.0,
83
- * };
84
- * ```
85
- *
86
- * @example Using literal types (simple cases)
87
- * ```ts
88
- * const MoveIntent = defineIntent({
89
- * kind: 1 as const,
90
- * schema: {
91
- * dx: BinaryCodec.f32,
92
- * dy: BinaryCodec.f32,
93
- * }
94
- * });
95
- *
96
- * type MoveIntent = typeof MoveIntent.type;
97
- * ```
98
- *
99
- * @example Custom tick encoding
100
- * ```ts
101
- * const SmallIntent = defineIntent({
102
- * kind: IntentKind.Small,
103
- * schema: {
104
- * tick: BinaryCodec.u16, // Override default u32 with u16
105
- * action: BinaryCodec.u8,
106
- * }
107
- * });
108
- * ```
109
- */
110
- export function defineIntent(definition) {
111
- // Create the full schema with kind and tick fields
112
- // Add tick with default u32 if not provided by user
113
- const fullSchema = {
114
- kind: BinaryCodec.u8,
115
- tick: BinaryCodec.u32, // Default tick encoding
116
- ...definition.schema, // User can override tick if needed
117
- };
118
- // Create the codec using BinaryCodec directly
119
- const codec = new IntentCodec(fullSchema);
120
- return {
121
- type: undefined, // Phantom type for inference
122
- codec,
123
- kind: definition.kind,
124
- };
125
- }
@@ -1,91 +0,0 @@
1
- /**
2
- * Intent system for client-to-server actions.
3
- *
4
- * Intents are player/AI actions that need to be:
5
- * 1. Encoded efficiently (binary)
6
- * 2. Sent over network
7
- * 3. Decoded on the other end
8
- * 4. Processed deterministically
9
- *
10
- * @example Using defineIntent with enums (recommended)
11
- * ```ts
12
- * import { defineIntent, IntentRegistry } from './protocol/intent';
13
- * import { BinaryCodec } from '../core/binary-codec';
14
- *
15
- * // 1. Define all your intent kinds in one place
16
- * enum IntentKind {
17
- * Move = 1,
18
- * Attack = 2,
19
- * Jump = 3,
20
- * }
21
- *
22
- * // 2. Define your intents with automatic type inference
23
- * // kind and tick are added automatically!
24
- * const MoveIntent = defineIntent({
25
- * kind: IntentKind.Move,
26
- * schema: {
27
- * dx: BinaryCodec.f32,
28
- * dy: BinaryCodec.f32,
29
- * }
30
- * });
31
- *
32
- * const AttackIntent = defineIntent({
33
- * kind: IntentKind.Attack,
34
- * schema: {
35
- * targetId: BinaryCodec.u32,
36
- * damage: BinaryCodec.f32,
37
- * }
38
- * });
39
- *
40
- * // 3. Extract the types
41
- * type MoveIntent = typeof MoveIntent.type;
42
- * type AttackIntent = typeof AttackIntent.type;
43
- *
44
- * // 4. Create registry and register
45
- * const registry = new IntentRegistry();
46
- * registry.register(MoveIntent.kind, MoveIntent.codec);
47
- * registry.register(AttackIntent.kind, AttackIntent.codec);
48
- *
49
- * // 5. Create instances with full type safety
50
- * const move: MoveIntent = {
51
- * kind: IntentKind.Move,
52
- * tick: 100, // tick is automatically available
53
- * dx: 1.5,
54
- * dy: -2.0,
55
- * };
56
- *
57
- * // 6. Encode/decode
58
- * const buf = registry.encode(move);
59
- * const decoded = registry.decode(buf);
60
- * ```
61
- *
62
- * @example Manual definition (legacy)
63
- * ```ts
64
- * import { Intent, IntentRegistry } from './protocol/intent';
65
- * import { PooledCodec } from '../core/pooled-codec';
66
- * import { BinaryCodec } from '../core/binary-codec';
67
- *
68
- * // 1. Define your intent type
69
- * interface MoveIntent extends Intent {
70
- * kind: 1;
71
- * tick: number;
72
- * dx: number;
73
- * dy: number;
74
- * }
75
- *
76
- * // 2. Create registry and register once (reuse this instance)
77
- * const registry = new IntentRegistry();
78
- * registry.register(1, new PooledCodec({
79
- * kind: BinaryCodec.u8,
80
- * tick: BinaryCodec.u32,
81
- * dx: BinaryCodec.f32,
82
- * dy: BinaryCodec.f32,
83
- * }));
84
- *
85
- * // 3. Encode/decode
86
- * const buf = registry.encode(intent);
87
- * const decoded = registry.decode(buf);
88
- * ```
89
- */
90
- export { IntentRegistry } from "./intent-registry";
91
- export { defineIntent } from "./define-intent";
@@ -1,91 +0,0 @@
1
- /**
2
- * Registry for mapping intent kinds to their codecs.
3
- *
4
- * Users instantiate this once and register their intent types with
5
- * PooledCodec instances (from core/pooled-codec).
6
- *
7
- * @example
8
- * ```ts
9
- * import { IntentRegistry } from './protocol/intent';
10
- * import { PooledCodec } from './core/pooled-codec';
11
- * import { BinaryCodec } from './core/binary-codec';
12
- *
13
- * const registry = new IntentRegistry();
14
- *
15
- * registry.register(1, new PooledCodec({
16
- * kind: BinaryCodec.u8,
17
- * tick: BinaryCodec.u32,
18
- * dx: BinaryCodec.f32,
19
- * dy: BinaryCodec.f32,
20
- * }));
21
- *
22
- * // Encode/decode
23
- * const buf = registry.encode(intent);
24
- * const decoded = registry.decode(buf);
25
- * ```
26
- */
27
- export class IntentRegistry {
28
- constructor() {
29
- this.codecs = new Map();
30
- }
31
- /**
32
- * Register a codec for a specific intent kind.
33
- * Call this once per intent type at startup.
34
- */
35
- register(intent) {
36
- if (this.codecs.has(intent.kind)) {
37
- throw new Error(`Intent kind ${intent.kind} is already registered`);
38
- }
39
- this.codecs.set(intent.kind, intent.codec);
40
- }
41
- /**
42
- * Encode an intent into binary format.
43
- */
44
- encode(intent) {
45
- const codec = this.codecs.get(intent.kind);
46
- if (!codec) {
47
- throw new Error(`No codec registered for intent kind ${intent.kind}`);
48
- }
49
- return codec.encode(intent);
50
- }
51
- /**
52
- * Decode binary data into an intent.
53
- * Extracts the kind from the first byte of the buffer.
54
- */
55
- decode(buf) {
56
- if (buf.byteLength === 0) {
57
- throw new Error('Cannot decode empty buffer');
58
- }
59
- // Extract kind from first byte (all intent codecs must encode kind as u8 in first byte)
60
- const kind = buf[0];
61
- const codec = this.codecs.get(kind);
62
- if (!codec) {
63
- throw new Error(`No codec registered for intent kind ${kind}`);
64
- }
65
- return codec.decode(buf);
66
- }
67
- /**
68
- * Decode binary data into an intent when kind is already known.
69
- * Useful for testing or when kind is transmitted separately.
70
- * @deprecated Use decode(buf) instead for standard intent decoding
71
- */
72
- decodeWithKnownKind(kind, buf) {
73
- const codec = this.codecs.get(kind);
74
- if (!codec) {
75
- throw new Error(`No codec registered for intent kind ${kind}`);
76
- }
77
- return codec.decode(buf);
78
- }
79
- has(kind) {
80
- return this.codecs.has(kind);
81
- }
82
- unregister(kind) {
83
- return this.codecs.delete(kind);
84
- }
85
- clear() {
86
- this.codecs.clear();
87
- }
88
- getKinds() {
89
- return Array.from(this.codecs.keys());
90
- }
91
- }
@@ -1,84 +0,0 @@
1
- import { BinaryCodec } from "../../core/binary-codec";
2
- /**
3
- * Simple codec implementation that uses BinaryCodec for encoding/decoding.
4
- * @template T The RPC data type
5
- */
6
- class RpcCodecImpl {
7
- constructor(schema) {
8
- this.schema = schema;
9
- }
10
- encode(value) {
11
- return BinaryCodec.encode(this.schema, value);
12
- }
13
- decode(buf) {
14
- // Create a target object with nil values
15
- const target = {};
16
- for (const key of Object.keys(this.schema)) {
17
- const field = this.schema[key];
18
- target[key] = field.toNil();
19
- }
20
- return BinaryCodec.decode(this.schema, buf, target);
21
- }
22
- }
23
- /**
24
- * Define a type-safe RPC with automatic schema generation.
25
- *
26
- * RPCs are bidirectional one-off events/commands for:
27
- * - Meta-game events (achievements, notifications)
28
- * - Match lifecycle (countdown, results)
29
- * - Request/response patterns
30
- * - System announcements
31
- *
32
- * NOT for game state synchronization (use Snapshots) or player inputs (use Intents)
33
- *
34
- * @template S The schema type
35
- * @param definition RPC configuration with method and schema
36
- * @returns A DefinedRpc object with method and codec
37
- *
38
- * @example Server → Client RPC
39
- * ```ts
40
- * const MatchCountdown = defineRPC({
41
- * method: 'matchCountdown',
42
- * schema: {
43
- * secondsRemaining: BinaryCodec.u8,
44
- * }
45
- * });
46
- *
47
- * // Server sends
48
- * server.sendRpcBroadcast(MatchCountdown, { secondsRemaining: 10 });
49
- *
50
- * // Client receives
51
- * client.onRpc(MatchCountdown, (rpc) => {
52
- * console.log(`Match starting in ${rpc.secondsRemaining}s`);
53
- * });
54
- * ```
55
- *
56
- * @example Client → Server RPC
57
- * ```ts
58
- * const BuyItem = defineRPC({
59
- * method: 'buyItem',
60
- * schema: {
61
- * itemId: BinaryCodec.string(32),
62
- * }
63
- * });
64
- *
65
- * // Client sends
66
- * client.sendRpc(BuyItem, { itemId: 'long_sword' });
67
- *
68
- * // Server receives
69
- * server.onRpc(BuyItem, (peerId, rpc) => {
70
- * console.log(`${peerId} wants to buy ${rpc.itemId}`);
71
- * });
72
- * ```
73
- */
74
- export function defineRPC(definition) {
75
- // Create the schema from definition
76
- const schema = definition.schema;
77
- // Create the codec using BinaryCodec
78
- const codec = new RpcCodecImpl(schema);
79
- return {
80
- method: definition.method,
81
- codec,
82
- type: undefined, // Phantom type for inference
83
- };
84
- }
@@ -1,3 +0,0 @@
1
- export * from './rpc';
2
- export * from './define-rpc';
3
- export * from './rpc-registry';