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
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';