murow 0.0.70 → 0.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/README.md +52 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base-2d-renderer.js +1 -0
  74. package/dist/cjs/renderer/base-3d-renderer.js +1 -0
  75. package/dist/cjs/renderer/base-renderer.js +1 -0
  76. package/dist/cjs/renderer/index.js +1 -0
  77. package/dist/cjs/renderer/types.js +1 -0
  78. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  79. package/dist/esm/core/binary-codec/index.js +1 -0
  80. package/dist/esm/core/driver/driver.js +1 -0
  81. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  82. package/dist/esm/core/driver/drivers/index.js +1 -0
  83. package/dist/esm/core/driver/drivers/raf.js +1 -0
  84. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  85. package/dist/esm/core/driver/index.js +1 -0
  86. package/dist/esm/core/events/event-system.js +1 -0
  87. package/dist/esm/core/events/index.js +1 -0
  88. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  89. package/dist/esm/core/fixed-ticker/index.js +1 -0
  90. package/dist/esm/core/free-list/free-list.js +1 -0
  91. package/dist/esm/core/free-list/index.js +1 -0
  92. package/dist/esm/core/generate-id/generate-id.js +1 -0
  93. package/dist/esm/core/generate-id/index.js +1 -0
  94. package/dist/esm/core/index.js +1 -0
  95. package/dist/esm/core/input/index.js +1 -0
  96. package/dist/esm/core/input/manager.js +1 -0
  97. package/dist/esm/core/input/sources/browser.js +1 -0
  98. package/dist/esm/core/input/sources/index.js +1 -0
  99. package/dist/esm/core/input/types.js +0 -0
  100. package/dist/esm/core/lerp/index.js +1 -0
  101. package/dist/esm/core/lerp/lerp.js +1 -0
  102. package/dist/esm/core/navmesh/index.js +1 -0
  103. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  104. package/dist/esm/core/navmesh/navmesh.js +1 -0
  105. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  106. package/dist/esm/core/pooled-codec/index.js +1 -0
  107. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  108. package/dist/esm/core/prediction/index.js +1 -0
  109. package/dist/esm/core/prediction/prediction.js +1 -0
  110. package/dist/esm/core/ray/index.js +1 -0
  111. package/dist/esm/core/ray/ray-2d.js +1 -0
  112. package/dist/esm/core/ray/ray-3d.js +1 -0
  113. package/dist/esm/core/simple-rng/index.js +1 -0
  114. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  115. package/dist/esm/core/sparse-batcher/index.js +1 -0
  116. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  117. package/dist/esm/ecs/component-store.js +1 -0
  118. package/dist/esm/ecs/component.js +1 -0
  119. package/dist/esm/ecs/entity-handle.js +1 -0
  120. package/dist/esm/ecs/index.js +1 -0
  121. package/dist/esm/ecs/system-builder.js +1 -0
  122. package/dist/esm/ecs/world-systems.js +1 -0
  123. package/dist/esm/ecs/world.js +1 -0
  124. package/dist/esm/game/index.js +1 -0
  125. package/dist/esm/game/loop/index.js +1 -0
  126. package/dist/esm/game/loop/loop.js +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  129. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  130. package/dist/esm/net/buffer-pool.js +1 -0
  131. package/dist/esm/net/client.js +1 -0
  132. package/dist/esm/net/index.js +1 -0
  133. package/dist/esm/net/server.js +1 -0
  134. package/dist/esm/net/types.js +1 -0
  135. package/dist/esm/net/validators.js +1 -0
  136. package/dist/esm/protocol/index.js +1 -0
  137. package/dist/esm/protocol/intent/define-intent.js +1 -0
  138. package/dist/esm/protocol/intent/index.js +1 -0
  139. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  140. package/dist/esm/protocol/intent/intent.js +0 -0
  141. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  142. package/dist/esm/protocol/rpc/index.js +1 -0
  143. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  144. package/dist/esm/protocol/rpc/rpc.js +0 -0
  145. package/dist/esm/protocol/snapshot/index.js +1 -0
  146. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  147. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  148. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  149. package/dist/esm/renderer/base-2d-renderer.js +1 -0
  150. package/dist/esm/renderer/base-3d-renderer.js +1 -0
  151. package/dist/esm/renderer/base-renderer.js +1 -0
  152. package/dist/esm/renderer/index.js +1 -0
  153. package/dist/esm/renderer/types.js +0 -0
  154. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  155. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  156. package/dist/types/core/free-list/free-list.d.ts +31 -0
  157. package/dist/types/core/free-list/index.d.ts +1 -0
  158. package/dist/{core → types/core}/index.d.ts +5 -0
  159. package/dist/{core → types/core}/input/index.d.ts +1 -0
  160. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  161. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  162. package/dist/types/core/ray/index.d.ts +2 -0
  163. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  164. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  165. package/dist/types/core/simple-rng/index.d.ts +1 -0
  166. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  167. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  168. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  169. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  170. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  171. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  172. package/dist/{net → types/net}/index.d.ts +2 -2
  173. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  174. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  175. package/dist/types/renderer/base-renderer.d.ts +21 -0
  176. package/dist/types/renderer/index.d.ts +4 -0
  177. package/dist/types/renderer/types.d.ts +79 -0
  178. package/dist/webgpu/cjs/index.js +6004 -0
  179. package/dist/webgpu/esm/index.js +5972 -0
  180. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  181. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  182. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  183. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  184. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  185. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  186. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  187. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  188. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  189. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  190. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  191. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  192. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  193. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  194. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  195. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  196. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  197. package/dist/webgpu/types/camera/index.d.ts +2 -0
  198. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  199. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  200. package/dist/webgpu/types/core/constants.d.ts +59 -0
  201. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  202. package/dist/webgpu/types/core/index.d.ts +2 -0
  203. package/dist/webgpu/types/core/math.d.ts +37 -0
  204. package/dist/webgpu/types/core/types.d.ts +125 -0
  205. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  206. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  207. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  208. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  209. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  210. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  211. package/dist/webgpu/types/index.d.ts +32 -0
  212. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  213. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  214. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  215. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  216. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  217. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  218. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  219. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  220. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  221. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  222. package/package.json +96 -26
  223. package/dist/core/binary-codec/binary-codec.js +0 -354
  224. package/dist/core/binary-codec/index.js +0 -1
  225. package/dist/core/driver/driver.js +0 -47
  226. package/dist/core/driver/drivers/immediate.js +0 -61
  227. package/dist/core/driver/drivers/index.js +0 -3
  228. package/dist/core/driver/drivers/raf.js +0 -62
  229. package/dist/core/driver/drivers/timeout.js +0 -71
  230. package/dist/core/driver/index.js +0 -2
  231. package/dist/core/events/event-system.js +0 -88
  232. package/dist/core/events/index.js +0 -1
  233. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  234. package/dist/core/fixed-ticker/index.js +0 -1
  235. package/dist/core/generate-id/generate-id.js +0 -25
  236. package/dist/core/generate-id/index.js +0 -1
  237. package/dist/core/index.js +0 -10
  238. package/dist/core/input/index.js +0 -2
  239. package/dist/core/input/manager.js +0 -211
  240. package/dist/core/input/sources/browser.js +0 -29
  241. package/dist/core/input/sources/index.js +0 -1
  242. package/dist/core/lerp/index.js +0 -1
  243. package/dist/core/lerp/lerp.js +0 -42
  244. package/dist/core/navmesh/index.js +0 -1
  245. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  246. package/dist/core/navmesh/navmesh.js +0 -799
  247. package/dist/core/navmesh/navmesh.worker.js +0 -79
  248. package/dist/core/pooled-codec/index.js +0 -1
  249. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  250. package/dist/core/prediction/index.js +0 -1
  251. package/dist/core/prediction/prediction.js +0 -99
  252. package/dist/core.esm.js +0 -1
  253. package/dist/core.js +0 -1
  254. package/dist/ecs/component-store.js +0 -175
  255. package/dist/ecs/component.js +0 -43
  256. package/dist/ecs/entity-handle.js +0 -515
  257. package/dist/ecs/example.js +0 -125
  258. package/dist/ecs/index.js +0 -4
  259. package/dist/ecs/system-builder.js +0 -249
  260. package/dist/ecs/world-systems.js +0 -79
  261. package/dist/ecs/world.js +0 -767
  262. package/dist/game/index.js +0 -1
  263. package/dist/game/loop/index.js +0 -1
  264. package/dist/game/loop/loop.js +0 -108
  265. package/dist/index.js +0 -26
  266. package/dist/net/adapters/browser-websocket.js +0 -74
  267. package/dist/net/adapters/bun-websocket.js +0 -245
  268. package/dist/net/buffer-pool.js +0 -89
  269. package/dist/net/client.js +0 -586
  270. package/dist/net/index.js +0 -58
  271. package/dist/net/server.js +0 -974
  272. package/dist/net/types.js +0 -31
  273. package/dist/net/validators.js +0 -88
  274. package/dist/protocol/index.js +0 -92
  275. package/dist/protocol/intent/define-intent.js +0 -125
  276. package/dist/protocol/intent/index.js +0 -91
  277. package/dist/protocol/intent/intent-registry.js +0 -91
  278. package/dist/protocol/rpc/define-rpc.js +0 -84
  279. package/dist/protocol/rpc/index.js +0 -3
  280. package/dist/protocol/rpc/rpc-registry.js +0 -159
  281. package/dist/protocol/rpc/rpc.js +0 -12
  282. package/dist/protocol/snapshot/index.js +0 -43
  283. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  284. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  285. package/dist/protocol/snapshot/snapshot.js +0 -30
  286. package/src/core/binary-codec/README.md +0 -60
  287. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  288. package/src/core/binary-codec/binary-codec.ts +0 -448
  289. package/src/core/binary-codec/index.ts +0 -1
  290. package/src/core/driver/README.md +0 -97
  291. package/src/core/driver/driver.test.ts +0 -414
  292. package/src/core/driver/driver.ts +0 -71
  293. package/src/core/driver/drivers/immediate.ts +0 -66
  294. package/src/core/driver/drivers/index.ts +0 -3
  295. package/src/core/driver/drivers/raf.ts +0 -67
  296. package/src/core/driver/drivers/timeout.ts +0 -77
  297. package/src/core/driver/index.ts +0 -2
  298. package/src/core/events/README.md +0 -47
  299. package/src/core/events/event-system.test.ts +0 -243
  300. package/src/core/events/event-system.ts +0 -140
  301. package/src/core/events/index.ts +0 -1
  302. package/src/core/fixed-ticker/README.md +0 -77
  303. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  304. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  305. package/src/core/fixed-ticker/index.ts +0 -1
  306. package/src/core/generate-id/README.md +0 -18
  307. package/src/core/generate-id/generate-id.test.ts +0 -79
  308. package/src/core/generate-id/generate-id.ts +0 -37
  309. package/src/core/generate-id/index.ts +0 -1
  310. package/src/core/index.ts +0 -10
  311. package/src/core/input/README.md +0 -24
  312. package/src/core/input/index.ts +0 -2
  313. package/src/core/input/manager.ts +0 -259
  314. package/src/core/input/sources/browser.ts +0 -39
  315. package/src/core/input/sources/index.ts +0 -1
  316. package/src/core/input/types.ts +0 -40
  317. package/src/core/lerp/README.md +0 -79
  318. package/src/core/lerp/index.ts +0 -1
  319. package/src/core/lerp/lerp.test.ts +0 -90
  320. package/src/core/lerp/lerp.ts +0 -42
  321. package/src/core/navmesh/README.md +0 -164
  322. package/src/core/navmesh/index.ts +0 -1
  323. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  324. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  325. package/src/core/navmesh/navmesh.test.ts +0 -344
  326. package/src/core/navmesh/navmesh.ts +0 -1047
  327. package/src/core/navmesh/navmesh.worker.ts +0 -147
  328. package/src/core/pooled-codec/README.md +0 -70
  329. package/src/core/pooled-codec/index.ts +0 -1
  330. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  331. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  332. package/src/core/prediction/README.md +0 -64
  333. package/src/core/prediction/index.ts +0 -1
  334. package/src/core/prediction/prediction.test.ts +0 -423
  335. package/src/core/prediction/prediction.ts +0 -112
  336. package/src/ecs/README.md +0 -427
  337. package/src/ecs/benchmark.test.ts +0 -1645
  338. package/src/ecs/component-store.ts +0 -198
  339. package/src/ecs/component.ts +0 -90
  340. package/src/ecs/entity-handle.test.ts +0 -393
  341. package/src/ecs/entity-handle.ts +0 -563
  342. package/src/ecs/example.ts +0 -152
  343. package/src/ecs/index.ts +0 -4
  344. package/src/ecs/system-builder.ts +0 -404
  345. package/src/ecs/world-systems.ts +0 -83
  346. package/src/ecs/world.test.ts +0 -310
  347. package/src/ecs/world.ts +0 -904
  348. package/src/game/index.ts +0 -1
  349. package/src/game/loop/README.md +0 -32
  350. package/src/game/loop/index.ts +0 -1
  351. package/src/game/loop/loop.ts +0 -236
  352. package/src/index.ts +0 -32
  353. package/src/net/README.md +0 -474
  354. package/src/net/adapters/browser-websocket.ts +0 -86
  355. package/src/net/adapters/bun-websocket.ts +0 -292
  356. package/src/net/buffer-pool.ts +0 -106
  357. package/src/net/client.test.ts +0 -807
  358. package/src/net/client.ts +0 -695
  359. package/src/net/index.ts +0 -60
  360. package/src/net/server.test.ts +0 -799
  361. package/src/net/server.ts +0 -1152
  362. package/src/net/types.ts +0 -228
  363. package/src/net/validators.ts +0 -104
  364. package/src/protocol/README.md +0 -469
  365. package/src/protocol/index.ts +0 -93
  366. package/src/protocol/intent/define-intent.test.ts +0 -397
  367. package/src/protocol/intent/define-intent.ts +0 -201
  368. package/src/protocol/intent/index.ts +0 -94
  369. package/src/protocol/intent/intent-registry.test.ts +0 -198
  370. package/src/protocol/intent/intent-registry.ts +0 -112
  371. package/src/protocol/intent/intent.ts +0 -12
  372. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  373. package/src/protocol/rpc/define-rpc.ts +0 -113
  374. package/src/protocol/rpc/index.ts +0 -3
  375. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  376. package/src/protocol/rpc/rpc-registry.ts +0 -176
  377. package/src/protocol/rpc/rpc.ts +0 -37
  378. package/src/protocol/snapshot/index.ts +0 -45
  379. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  380. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  381. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  382. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  383. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  384. package/src/protocol/snapshot/snapshot.ts +0 -41
  385. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  386. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  387. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  388. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  390. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  391. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  392. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  394. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  395. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  396. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  397. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  398. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  400. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  402. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  403. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  404. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  405. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  406. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  407. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  408. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  409. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  410. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  411. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  412. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  413. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  414. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  415. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  416. /package/dist/{game → types/game}/index.d.ts +0 -0
  417. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  418. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  419. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  420. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  421. /package/dist/{net → types/net}/client.d.ts +0 -0
  422. /package/dist/{net → types/net}/server.d.ts +0 -0
  423. /package/dist/{net → types/net}/types.d.ts +0 -0
  424. /package/dist/{net → types/net}/validators.d.ts +0 -0
  425. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  426. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  427. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  428. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  429. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  430. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  431. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  432. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  433. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  434. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  435. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  436. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  437. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  438. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  439. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,397 +0,0 @@
1
- import { describe, it, expect } from "bun:test";
2
- import { defineIntent } from "./define-intent";
3
- import { BinaryCodec } from "../../core/binary-codec";
4
- import { IntentRegistry } from "./intent-registry";
5
-
6
-
7
- describe("defineIntent", () => {
8
- enum Intents {
9
- Move = 1,
10
- Attack,
11
- Chat,
12
- Jump,
13
- Rotate,
14
- }
15
-
16
- describe("type inference", () => {
17
- it("should infer correct type from schema with automatic tick", () => {
18
-
19
- const MoveIntent = defineIntent({
20
- kind: Intents.Move,
21
- schema: {
22
- dx: BinaryCodec.f32,
23
- dy: BinaryCodec.f32,
24
- },
25
- });
26
-
27
- type MoveIntent = typeof MoveIntent.type;
28
-
29
- // Create an instance to verify type inference
30
- const move: MoveIntent = {
31
- kind: Intents.Move,
32
- tick: 100,
33
- dx: 1.5,
34
- dy: -2.0,
35
- };
36
-
37
- expect(move.kind).toBe(Intents.Move);
38
- expect(move.tick).toBe(100);
39
- expect(move.dx).toBe(1.5);
40
- expect(move.dy).toBe(-2.0);
41
- });
42
-
43
- it("should enforce kind literal type", () => {
44
- const AttackIntent = defineIntent({
45
- kind: Intents.Attack,
46
- schema: {
47
- targetId: BinaryCodec.u32,
48
- damage: BinaryCodec.f32,
49
- },
50
- });
51
-
52
- expect(AttackIntent.kind).toBe(Intents.Attack);
53
-
54
- type AttackIntent = typeof AttackIntent.type;
55
- const attack: AttackIntent = {
56
- kind: Intents.Attack, // Must be exactly what Intents.Attack is
57
- tick: 200,
58
- targetId: 999,
59
- damage: 50.5,
60
- };
61
-
62
- expect(attack.kind).toBe(Intents.Attack);
63
- });
64
-
65
- it("should support intents with different field types", () => {
66
- const ChatIntent = defineIntent({
67
- kind: Intents.Chat,
68
- schema: {
69
- playerId: BinaryCodec.u8,
70
- messageLength: BinaryCodec.u16,
71
- },
72
- });
73
-
74
- type ChatIntent = typeof ChatIntent.type;
75
-
76
- const chat: ChatIntent = {
77
- kind: Intents.Chat,
78
- tick: 500,
79
- playerId: 5,
80
- messageLength: 128,
81
- };
82
-
83
- expect(chat.playerId).toBe(5);
84
- expect(chat.messageLength).toBe(128);
85
- });
86
- });
87
-
88
- describe("codec generation", () => {
89
- it("should create a working codec", () => {
90
- const MoveIntent = defineIntent({
91
- kind: Intents.Move,
92
- schema: {
93
- dx: BinaryCodec.f32,
94
- dy: BinaryCodec.f32,
95
- },
96
- });
97
-
98
- type MoveIntent = typeof MoveIntent.type;
99
-
100
- const move: MoveIntent = {
101
- kind: Intents.Move,
102
- tick: 100,
103
- dx: 1.5,
104
- dy: -2.0,
105
- };
106
-
107
- const encoded = MoveIntent.codec.encode(move);
108
- const decoded = MoveIntent.codec.decode(encoded);
109
-
110
- expect(decoded.kind).toBe(move.kind);
111
- expect(decoded.tick).toBe(move.tick);
112
- expect(decoded.dx).toBeCloseTo(move.dx, 5);
113
- expect(decoded.dy).toBeCloseTo(move.dy, 5);
114
- });
115
-
116
- it("should include kind field in encoded data", () => {
117
- const JumpIntent = defineIntent({
118
- kind: Intents.Jump,
119
- schema: {
120
- height: BinaryCodec.f32,
121
- },
122
- });
123
-
124
- type JumpIntent = typeof JumpIntent.type;
125
-
126
- const jump: JumpIntent = {
127
- kind: Intents.Jump,
128
- tick: 50,
129
- height: 10.5,
130
- };
131
-
132
- const encoded = JumpIntent.codec.encode(jump);
133
-
134
- // First byte should be the kind (7)
135
- expect(encoded[0]).toBe(Intents.Jump);
136
- });
137
-
138
- it("should handle multiple round trips", () => {
139
- const RotateIntent = defineIntent({
140
- kind: Intents.Rotate,
141
- schema: {
142
- angle: BinaryCodec.f32,
143
- },
144
- });
145
-
146
- type RotateIntent = typeof RotateIntent.type;
147
-
148
- const original: RotateIntent = {
149
- kind: Intents.Rotate,
150
- tick: 999,
151
- angle: 3.14159,
152
- };
153
-
154
- for (let i = 0; i < 10; i++) {
155
- const encoded = RotateIntent.codec.encode(original);
156
- const decoded = RotateIntent.codec.decode(encoded);
157
-
158
- expect(decoded.kind).toBe(original.kind);
159
- expect(decoded.tick).toBe(original.tick);
160
- expect(decoded.angle).toBeCloseTo(original.angle, 5);
161
- }
162
- });
163
- });
164
-
165
- describe("integration with IntentRegistry", () => {
166
- it("should register and work with IntentRegistry", () => {
167
- const registry = new IntentRegistry();
168
-
169
- const MoveIntent = defineIntent({
170
- kind: 1 as const,
171
- schema: {
172
- dx: BinaryCodec.f32,
173
- dy: BinaryCodec.f32,
174
- },
175
- });
176
-
177
- const AttackIntent = defineIntent({
178
- kind: 2 as const,
179
- schema: {
180
- targetId: BinaryCodec.u32,
181
- },
182
- });
183
-
184
- type MoveIntent = typeof MoveIntent.type;
185
- type AttackIntent = typeof AttackIntent.type;
186
-
187
- // Register using defineIntent objects
188
- registry.register(MoveIntent);
189
- registry.register(AttackIntent);
190
-
191
- const move: MoveIntent = {
192
- kind: MoveIntent.kind,
193
- tick: 100,
194
- dx: 5.0,
195
- dy: -3.0,
196
- };
197
-
198
- const attack: AttackIntent = {
199
- kind: AttackIntent.kind,
200
- tick: 101,
201
- targetId: 42,
202
- };
203
-
204
- // Encode using registry
205
- const moveEncoded = registry.encode(move);
206
- const attackEncoded = registry.encode(attack);
207
-
208
- // Decode using registry
209
- const moveDecoded = registry.decode(moveEncoded);
210
- const attackDecoded = registry.decode(attackEncoded);
211
-
212
- expect(moveDecoded.kind).toBe(1);
213
- expect(moveDecoded.tick).toBe(100);
214
- expect((moveDecoded as any).dx).toBeCloseTo(5.0, 5);
215
- expect((moveDecoded as any).dy).toBeCloseTo(-3.0, 5);
216
-
217
- expect(attackDecoded.kind).toBe(2);
218
- expect(attackDecoded.tick).toBe(101);
219
- expect((attackDecoded as any).targetId).toBe(42);
220
- });
221
-
222
- it("should prevent duplicate registrations", () => {
223
- const registry = new IntentRegistry();
224
-
225
- const Intent1 = defineIntent({
226
- kind: 5 as const,
227
- schema: {},
228
- });
229
-
230
- const Intent2 = defineIntent({
231
- kind: 5 as const, // Same kind
232
- schema: {},
233
- });
234
-
235
- registry.register(Intent1);
236
-
237
- expect(() => {
238
- registry.register(Intent2);
239
- }).toThrow("Intent kind 5 is already registered");
240
- });
241
- });
242
-
243
- describe("complex intents", () => {
244
- it("should handle intents with many fields", () => {
245
- const PlayerStateIntent = defineIntent({
246
- kind: 99 as const,
247
- schema: {
248
- playerId: BinaryCodec.u32,
249
- x: BinaryCodec.f32,
250
- y: BinaryCodec.f32,
251
- z: BinaryCodec.f32,
252
- velocityX: BinaryCodec.f32,
253
- velocityY: BinaryCodec.f32,
254
- velocityZ: BinaryCodec.f32,
255
- health: BinaryCodec.u8,
256
- mana: BinaryCodec.u8,
257
- },
258
- });
259
-
260
- type PlayerStateIntent = typeof PlayerStateIntent.type;
261
-
262
- const state: PlayerStateIntent = {
263
- kind: 99,
264
- tick: 1000,
265
- playerId: 123,
266
- x: 10.5,
267
- y: 20.3,
268
- z: 30.1,
269
- velocityX: 1.0,
270
- velocityY: 0.5,
271
- velocityZ: -0.2,
272
- health: 100,
273
- mana: 50,
274
- };
275
-
276
- const encoded = PlayerStateIntent.codec.encode(state);
277
- const decoded = PlayerStateIntent.codec.decode(encoded);
278
-
279
- expect(decoded.kind).toBe(state.kind);
280
- expect(decoded.tick).toBe(state.tick);
281
- expect(decoded.playerId).toBe(state.playerId);
282
- expect(decoded.x).toBeCloseTo(state.x, 5);
283
- expect(decoded.y).toBeCloseTo(state.y, 5);
284
- expect(decoded.z).toBeCloseTo(state.z, 5);
285
- expect(decoded.velocityX).toBeCloseTo(state.velocityX, 5);
286
- expect(decoded.velocityY).toBeCloseTo(state.velocityY, 5);
287
- expect(decoded.velocityZ).toBeCloseTo(state.velocityZ, 5);
288
- expect(decoded.health).toBe(state.health);
289
- expect(decoded.mana).toBe(state.mana);
290
- });
291
-
292
- it("should handle minimal intents with only tick", () => {
293
- const PingIntent = defineIntent({
294
- kind: 255 as const,
295
- schema: {}, // No additional fields, only kind and tick
296
- });
297
-
298
- type PingIntent = typeof PingIntent.type;
299
-
300
- const ping: PingIntent = {
301
- kind: 255,
302
- tick: 12345,
303
- };
304
-
305
- const encoded = PingIntent.codec.encode(ping);
306
- const decoded = PingIntent.codec.decode(encoded);
307
-
308
- expect(decoded.kind).toBe(255);
309
- expect(decoded.tick).toBe(12345);
310
- });
311
- });
312
-
313
- describe("edge cases", () => {
314
- it("should handle zero values", () => {
315
- const ZeroIntent = defineIntent({
316
- kind: 0 as const,
317
- schema: {
318
- value: BinaryCodec.f32,
319
- },
320
- });
321
-
322
- type ZeroIntent = typeof ZeroIntent.type;
323
-
324
- const zero: ZeroIntent = {
325
- kind: 0,
326
- tick: 0,
327
- value: 0,
328
- };
329
-
330
- const encoded = ZeroIntent.codec.encode(zero);
331
- const decoded = ZeroIntent.codec.decode(encoded);
332
-
333
- expect(decoded.kind).toBe(0);
334
- expect(decoded.tick).toBe(0);
335
- expect(decoded.value).toBe(0);
336
- });
337
-
338
- it("should handle maximum values for numeric types", () => {
339
- const MaxIntent = defineIntent({
340
- kind: 255 as const,
341
- schema: {
342
- maxU8: BinaryCodec.u8,
343
- maxU16: BinaryCodec.u16,
344
- maxU32: BinaryCodec.u32,
345
- },
346
- });
347
-
348
- type MaxIntent = typeof MaxIntent.type;
349
-
350
- const max: MaxIntent = {
351
- kind: 255,
352
- tick: 0xFFFFFFFF,
353
- maxU8: 255,
354
- maxU16: 65535,
355
- maxU32: 0xFFFFFFFF,
356
- };
357
-
358
- const encoded = MaxIntent.codec.encode(max);
359
- const decoded = MaxIntent.codec.decode(encoded);
360
-
361
- expect(decoded.kind).toBe(255);
362
- expect(decoded.tick).toBe(0xFFFFFFFF);
363
- expect(decoded.maxU8).toBe(255);
364
- expect(decoded.maxU16).toBe(65535);
365
- expect(decoded.maxU32).toBe(0xFFFFFFFF);
366
- });
367
-
368
- it("should allow custom tick encoding", () => {
369
- const CustomTickIntent = defineIntent({
370
- kind: 100 as const,
371
- schema: {
372
- tick: BinaryCodec.u16, // Override default u32 with u16
373
- action: BinaryCodec.u8,
374
- },
375
- });
376
-
377
- type CustomTickIntent = typeof CustomTickIntent.type;
378
-
379
- const intent: CustomTickIntent = {
380
- kind: 100,
381
- tick: 5000, // Max u16 is 65535
382
- action: 42,
383
- };
384
-
385
- const encoded = CustomTickIntent.codec.encode(intent);
386
- const decoded = CustomTickIntent.codec.decode(encoded);
387
-
388
- expect(decoded.kind).toBe(100);
389
- expect(decoded.tick).toBe(5000);
390
- expect(decoded.action).toBe(42);
391
-
392
- // Verify the encoded size is smaller (u16 instead of u32 for tick)
393
- // kind (1) + tick (2) + action (1) = 4 bytes
394
- expect(encoded.length).toBe(4);
395
- });
396
- });
397
- });
@@ -1,201 +0,0 @@
1
- import type { Intent } from "./intent";
2
- import type { Schema } from "../../core/binary-codec";
3
- import { BinaryCodec } from "../../core/binary-codec";
4
- import type { Codec } from "./intent-registry";
5
-
6
- /**
7
- * Configuration for defining an intent type.
8
- * @template K The intent kind (numeric literal type)
9
- * @template S The schema type describing the intent's data fields
10
- */
11
- export interface IntentDefinition<K extends number, S extends Record<string, any>> {
12
- /** Numeric identifier for this intent type */
13
- kind: K;
14
- /**
15
- * Schema describing the intent's data fields (excluding kind which is added automatically).
16
- * If 'tick' is not provided, it will default to BinaryCodec.u32.
17
- * You can override the tick encoding by including it in the schema.
18
- */
19
- schema: S;
20
- }
21
-
22
- /**
23
- * Infers the TypeScript type from an intent schema.
24
- * The schema already includes 'kind' (added automatically) and should include 'tick'.
25
- * @template K The intent kind (numeric literal type)
26
- * @template S The schema type (includes tick, but kind is added automatically)
27
- */
28
- export type InferIntentType<K extends number, S extends Record<string, any>> = {
29
- kind: K;
30
- tick: number;
31
- } & {
32
- [P in keyof S]: S[P] extends { read(dv: DataView, o: number): infer R } ? R : never;
33
- };
34
-
35
- /**
36
- * Helper type to extract just the data fields from a DefinedIntent (excluding kind and tick).
37
- * This is useful for APIs that work with intent data without the metadata fields.
38
- *
39
- * @example
40
- * ```ts
41
- * const MoveIntent = defineIntent({
42
- * kind: 1,
43
- * schema: { vx: BinaryCodec.f32, vy: BinaryCodec.f32 }
44
- * });
45
- *
46
- * type MoveData = IntentDataOnly<typeof MoveIntent>; // { vx: number, vy: number }
47
- * ```
48
- */
49
- export type IntentDataOnly<T> =
50
- T extends DefinedIntent<infer _K, infer U extends Intent>
51
- ? Omit<U, 'kind' | 'tick'>
52
- : never;
53
-
54
- /**
55
- * Result of defineIntent - provides both the type and codec.
56
- * @template K The intent kind literal
57
- * @template T The inferred intent type
58
- */
59
- export interface DefinedIntent<K extends number, T extends Intent> {
60
- /** The TypeScript type for this intent (use with `typeof IntentName.type`) */
61
- type: T;
62
- /** The codec instance for encoding/decoding this intent */
63
- codec: Codec<T>;
64
- /** The kind identifier for this intent */
65
- kind: K;
66
- }
67
-
68
- /**
69
- * Simple codec implementation that uses BinaryCodec for encoding/decoding.
70
- * @template T The intent type
71
- */
72
- class IntentCodec<T extends Intent> implements Codec<T> {
73
- constructor(private schema: Schema<T>) {}
74
-
75
- encode(value: T): Uint8Array {
76
- return BinaryCodec.encode(this.schema, value);
77
- }
78
-
79
- decode(buf: Uint8Array): T {
80
- // Create a target object with nil values
81
- const target = {} as T;
82
- for (const key of Object.keys(this.schema) as (keyof T)[]) {
83
- const field = this.schema[key];
84
- target[key] = field.toNil() as T[keyof T];
85
- }
86
- return BinaryCodec.decode(this.schema, buf, target);
87
- }
88
- }
89
-
90
- /**
91
- * Define a type-safe intent with automatic schema generation.
92
- *
93
- * This helper ensures that your intent's TypeScript interface and binary schema
94
- * stay in sync by deriving the type from the schema definition.
95
- *
96
- * The `kind` and `tick` fields are automatically added to the schema:
97
- * - `kind`: u8 codec (always FIRST byte - required for IntentRegistry.decode)
98
- * - `tick`: u32 codec (default, can be overridden by including it in your schema)
99
- *
100
- * IMPORTANT: If you use PooledCodec directly instead of defineIntent(), you MUST
101
- * ensure `kind: BinaryPrimitives.u8` is the FIRST field in your schema, or
102
- * IntentRegistry.decode() will fail.
103
- *
104
- * @template K The intent kind (numeric literal)
105
- * @template S The schema type
106
- * @param definition Intent configuration with kind and schema
107
- * @returns A DefinedIntent object with type, codec, and kind
108
- *
109
- * @example Using enums (recommended for managing multiple intents)
110
- * ```ts
111
- * // Define all your intent kinds in one place
112
- * enum IntentKind {
113
- * Move = 1,
114
- * Attack = 2,
115
- * Jump = 3,
116
- * Chat = 4,
117
- * }
118
- *
119
- * const MoveIntent = defineIntent({
120
- * kind: IntentKind.Move,
121
- * schema: {
122
- * dx: BinaryCodec.f32,
123
- * dy: BinaryCodec.f32,
124
- * }
125
- * });
126
- *
127
- * const AttackIntent = defineIntent({
128
- * kind: IntentKind.Attack,
129
- * schema: {
130
- * targetId: BinaryCodec.u32,
131
- * damage: BinaryCodec.f32,
132
- * }
133
- * });
134
- *
135
- * // Use the inferred types
136
- * type MoveIntent = typeof MoveIntent.type;
137
- * type AttackIntent = typeof AttackIntent.type;
138
- *
139
- * // Register with IntentRegistry
140
- * const registry = new IntentRegistry();
141
- * registry.register(MoveIntent.kind, MoveIntent.codec);
142
- * registry.register(AttackIntent.kind, AttackIntent.codec);
143
- *
144
- * // Create instances - tick is automatically available
145
- * const move: MoveIntent = {
146
- * kind: IntentKind.Move,
147
- * tick: 100,
148
- * dx: 1.5,
149
- * dy: -2.0,
150
- * };
151
- * ```
152
- *
153
- * @example Using literal types (simple cases)
154
- * ```ts
155
- * const MoveIntent = defineIntent({
156
- * kind: 1 as const,
157
- * schema: {
158
- * dx: BinaryCodec.f32,
159
- * dy: BinaryCodec.f32,
160
- * }
161
- * });
162
- *
163
- * type MoveIntent = typeof MoveIntent.type;
164
- * ```
165
- *
166
- * @example Custom tick encoding
167
- * ```ts
168
- * const SmallIntent = defineIntent({
169
- * kind: IntentKind.Small,
170
- * schema: {
171
- * tick: BinaryCodec.u16, // Override default u32 with u16
172
- * action: BinaryCodec.u8,
173
- * }
174
- * });
175
- * ```
176
- */
177
- export function defineIntent<
178
- K extends number,
179
- S extends Record<string, any>
180
- >(
181
- definition: IntentDefinition<K, S>
182
- ): DefinedIntent<K, InferIntentType<K, S>> {
183
- type IntentType = InferIntentType<K, S>;
184
-
185
- // Create the full schema with kind and tick fields
186
- // Add tick with default u32 if not provided by user
187
- const fullSchema = {
188
- kind: BinaryCodec.u8,
189
- tick: BinaryCodec.u32, // Default tick encoding
190
- ...definition.schema, // User can override tick if needed
191
- } as Schema<IntentType>;
192
-
193
- // Create the codec using BinaryCodec directly
194
- const codec = new IntentCodec<IntentType>(fullSchema);
195
-
196
- return {
197
- type: undefined as any as IntentType, // Phantom type for inference
198
- codec,
199
- kind: definition.kind,
200
- };
201
- }
@@ -1,94 +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
-
91
- export type { Intent } from "./intent";
92
- export { IntentRegistry } from "./intent-registry";
93
- export { defineIntent } from "./define-intent";
94
- export type { DefinedIntent, InferIntentType, IntentDataOnly } from "./define-intent";