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,159 +0,0 @@
1
- /**
2
- * Registry for managing RPC definitions with binary encoding/decoding
3
- *
4
- * Maps RPC method names to numeric IDs for efficient binary protocol:
5
- * - Method names are assigned sequential IDs (0, 1, 2, ...)
6
- * - Binary format: [methodId: u16][data: variable]
7
- * - Supports bidirectional RPCs (client ↔ server)
8
- *
9
- * @example
10
- * ```ts
11
- * const registry = new RpcRegistry();
12
- *
13
- * // Register RPCs
14
- * registry.register(MatchCountdown);
15
- * registry.register(BuyItem);
16
- *
17
- * // Encode RPC to binary
18
- * const binary = registry.encode(MatchCountdown, { secondsRemaining: 10 });
19
- *
20
- * // Decode RPC from binary
21
- * const { method, data } = registry.decode(binary);
22
- * console.log(method); // 'matchCountdown'
23
- * console.log(data.secondsRemaining); // 10
24
- * ```
25
- */
26
- export class RpcRegistry {
27
- constructor() {
28
- this.codecs = new Map();
29
- this.methodToId = new Map();
30
- this.idToMethod = new Map();
31
- this.nextId = 0;
32
- }
33
- /**
34
- * Register an RPC definition
35
- *
36
- * @param rpc The RPC definition created by defineRPC()
37
- * @throws Error if method is already registered
38
- *
39
- * @example
40
- * ```ts
41
- * const MatchCountdown = defineRPC({
42
- * method: 'matchCountdown',
43
- * schema: { secondsRemaining: BinaryCodec.u8 }
44
- * });
45
- *
46
- * registry.register(MatchCountdown);
47
- * ```
48
- */
49
- register(rpc) {
50
- if (this.codecs.has(rpc.method)) {
51
- throw new Error(`RPC "${rpc.method}" is already registered`);
52
- }
53
- const id = this.nextId++;
54
- this.codecs.set(rpc.method, rpc.codec);
55
- this.methodToId.set(rpc.method, id);
56
- this.idToMethod.set(id, rpc.method);
57
- }
58
- /**
59
- * Encode an RPC to binary format
60
- *
61
- * Binary format: [methodId: u16][data: variable]
62
- *
63
- * @param rpc The RPC definition
64
- * @param data The RPC data to encode
65
- * @returns Encoded binary data
66
- * @throws Error if RPC is not registered
67
- *
68
- * @example
69
- * ```ts
70
- * const binary = registry.encode(MatchCountdown, {
71
- * secondsRemaining: 10
72
- * });
73
- * ```
74
- */
75
- encode(rpc, data) {
76
- const codec = this.codecs.get(rpc.method);
77
- if (!codec) {
78
- throw new Error(`RPC "${rpc.method}" is not registered`);
79
- }
80
- const methodId = this.methodToId.get(rpc.method);
81
- const encodedData = codec.encode(data);
82
- // Message format: [methodId: u16][data]
83
- const buffer = new Uint8Array(2 + encodedData.byteLength);
84
- new DataView(buffer.buffer).setUint16(0, methodId, true);
85
- buffer.set(new Uint8Array(encodedData), 2);
86
- return buffer;
87
- }
88
- /**
89
- * Decode an RPC from binary format
90
- *
91
- * @param buffer Binary data to decode
92
- * @returns Object with method name and decoded data
93
- * @throws Error if method ID is unknown
94
- *
95
- * @example
96
- * ```ts
97
- * const { method, data } = registry.decode(binary);
98
- * console.log(method); // 'matchCountdown'
99
- * console.log(data.secondsRemaining); // 10
100
- * ```
101
- */
102
- decode(buffer) {
103
- if (buffer.byteLength < 2) {
104
- throw new Error('Buffer too small for RPC message');
105
- }
106
- const view = new DataView(buffer.buffer, buffer.byteOffset);
107
- const methodId = view.getUint16(0, true);
108
- const method = this.idToMethod.get(methodId);
109
- if (!method) {
110
- throw new Error(`Unknown RPC method ID: ${methodId}`);
111
- }
112
- const codec = this.codecs.get(method);
113
- const data = codec.decode(buffer.slice(2));
114
- return { method, data };
115
- }
116
- /**
117
- * Check if an RPC method is registered
118
- *
119
- * @param method Method name to check
120
- * @returns True if registered, false otherwise
121
- */
122
- has(method) {
123
- return this.codecs.has(method);
124
- }
125
- /**
126
- * Get all registered RPC method names
127
- *
128
- * @returns Array of method names
129
- */
130
- getMethods() {
131
- return Array.from(this.codecs.keys());
132
- }
133
- /**
134
- * Get the numeric ID for a method
135
- *
136
- * @param method Method name
137
- * @returns Method ID or undefined if not registered
138
- */
139
- getMethodId(method) {
140
- return this.methodToId.get(method);
141
- }
142
- /**
143
- * Release a decoded RPC data object back to the pool.
144
- * Call this after you're done processing the RPC to enable object pooling.
145
- *
146
- * @param method The RPC method name (same as used in decode)
147
- * @param data The RPC data object to release
148
- */
149
- release(method, data) {
150
- const codec = this.codecs.get(method);
151
- if (!codec) {
152
- throw new Error(`RPC "${method}" is not registered`);
153
- }
154
- // Only release if the codec supports pooling
155
- if ('release' in codec && typeof codec.release === 'function') {
156
- codec.release(data);
157
- }
158
- }
159
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * RPC (Remote Procedure Call) type definitions
3
- *
4
- * RPCs are bidirectional one-off events/commands for:
5
- * - Meta-game events (achievements, notifications)
6
- * - Match lifecycle (countdown, results)
7
- * - Request/response patterns
8
- * - System announcements
9
- *
10
- * NOT for game state synchronization (use Snapshots) or player inputs (use Intents)
11
- */
12
- export {};
@@ -1,43 +0,0 @@
1
- /**
2
- * Snapshot system for server-to-client state updates.
3
- *
4
- * Snapshots are delta updates that contain:
5
- * 1. Server tick number
6
- * 2. Partial state updates (only what changed)
7
- *
8
- * They need to be:
9
- * 1. Encoded efficiently (binary)
10
- * 2. Sent over network
11
- * 3. Decoded on the client
12
- * 4. Merged into client state
13
- *
14
- * @example
15
- * ```ts
16
- * import { Snapshot, SnapshotCodec, applySnapshot } from './protocol/snapshot';
17
- * import { PooledCodec } from '../core/pooled-codec';
18
- * import { BinaryCodec } from '../core/binary-codec';
19
- *
20
- * interface GameState {
21
- * players: Record<number, { x: number; y: number }>;
22
- * }
23
- *
24
- * // 1. Create codec once (reuse this instance)
25
- * const snapshotCodec = new SnapshotCodec<GameState>(
26
- * new PooledCodec({ players: // ... your schema })
27
- * );
28
- *
29
- * // 2. Server: Encode snapshot
30
- * const snapshot: Snapshot<GameState> = {
31
- * tick: 100,
32
- * updates: { players: { 1: { x: 5, y: 10 } } }
33
- * };
34
- * const buf = snapshotCodec.encode(snapshot);
35
- *
36
- * // 3. Client: Decode and apply
37
- * const snapshot = snapshotCodec.decode(buf);
38
- * applySnapshot(clientState, snapshot);
39
- * ```
40
- */
41
- export { applySnapshot } from "./snapshot";
42
- export { SnapshotCodec } from "./snapshot-codec";
43
- export { SnapshotRegistry } from "./snapshot-registry";
@@ -1,67 +0,0 @@
1
- /**
2
- * Codec for encoding/decoding snapshots with binary serialization.
3
- *
4
- * Users instantiate this once with a PooledCodec for their state schema.
5
- *
6
- * @example
7
- * ```ts
8
- * import { SnapshotCodec } from './protocol/snapshot';
9
- * import { PooledCodec } from './core/pooled-codec';
10
- * import { BinaryCodec } from './core/binary-codec';
11
- *
12
- * interface GameState {
13
- * players: Record<number, { x: number; y: number }>;
14
- * }
15
- *
16
- * const snapshotCodec = new SnapshotCodec<GameState>(
17
- * new PooledCodec({ players: // schema })
18
- * );
19
- *
20
- * // Encode/decode
21
- * const buf = snapshotCodec.encode(snapshot);
22
- * const decoded = snapshotCodec.decode(buf);
23
- * ```
24
- */
25
- export class SnapshotCodec {
26
- /**
27
- * @param updatesCodec Codec for encoding/decoding the state updates
28
- */
29
- constructor(updatesCodec) {
30
- this.updatesCodec = updatesCodec;
31
- }
32
- /**
33
- * Encode a snapshot into binary format.
34
- * Format: [tick: u32][updates: encoded by updatesCodec]
35
- *
36
- * Uses zero-copy path if codec supports calculateSize and encodeInto.
37
- */
38
- encode(snapshot) {
39
- // Use zero-copy path if available
40
- if (this.updatesCodec.calculateSize && this.updatesCodec.encodeInto) {
41
- const updatesSize = this.updatesCodec.calculateSize(snapshot.updates);
42
- const buf = new Uint8Array(4 + updatesSize);
43
- // Encode tick (4 bytes, little-endian)
44
- new DataView(buf.buffer).setUint32(0, snapshot.tick, true);
45
- // Write updates directly into buffer (ZERO COPY!)
46
- this.updatesCodec.encodeInto(snapshot.updates, buf, 4);
47
- return buf;
48
- }
49
- // Fallback to legacy path
50
- const updatesBytes = this.updatesCodec.encode(snapshot.updates);
51
- const buf = new Uint8Array(4 + updatesBytes.length);
52
- new DataView(buf.buffer).setUint32(0, snapshot.tick, true);
53
- buf.set(updatesBytes, 4);
54
- return buf;
55
- }
56
- /**
57
- * Decode binary data into a snapshot.
58
- */
59
- decode(buf) {
60
- // Decode tick (first 4 bytes)
61
- const tick = new DataView(buf.buffer, buf.byteOffset).getUint32(0, true);
62
- // Decode updates (remaining bytes)
63
- const updatesBytes = buf.subarray(4);
64
- const updates = this.updatesCodec.decode(updatesBytes);
65
- return { tick, updates };
66
- }
67
- }
@@ -1,168 +0,0 @@
1
- /**
2
- * Registry for multiple snapshot types with different update schemas.
3
- *
4
- * This allows efficient delta encoding by only sending specific update types
5
- * instead of encoding all fields (including empty/nil ones).
6
- *
7
- * ## Memory Efficiency
8
- *
9
- * The encoding path minimizes allocations:
10
- * 1. PooledCodec acquires a buffer from its pool (reused across calls)
11
- * 2. PooledCodec writes data directly to the buffer at sequential offsets
12
- * 3. SnapshotRegistry creates ONE final buffer: [typeId(1) + tick(4) + updatesBytes]
13
- * 4. Total allocations per encode: 1 pooled buffer + 1 final buffer
14
- *
15
- * Buffer Layout:
16
- * ```
17
- * ┌─────────┬────────────┬──────────────────┐
18
- * │ Type ID │ Tick │ Updates (codec) │
19
- * │ (u8) │ (u32) │ (variable) │
20
- * │ 1 byte │ 4 bytes │ N bytes │
21
- * └─────────┴────────────┴──────────────────┘
22
- * ```
23
- *
24
- * @example
25
- * ```ts
26
- * import { SnapshotRegistry } from './protocol/snapshot';
27
- * import { PooledCodec } from './core/pooled-codec';
28
- * import { BinaryPrimitives } from './core/binary-codec';
29
- *
30
- * // Define different update types
31
- * interface PlayerUpdate {
32
- * players: Array<{ entityId: number; x: number; y: number }>;
33
- * }
34
- *
35
- * interface ScoreUpdate {
36
- * score: number;
37
- * }
38
- *
39
- * // Create registry
40
- * const registry = new SnapshotRegistry<PlayerUpdate | ScoreUpdate>();
41
- *
42
- * // Register codecs for each update type
43
- * registry.register('players', new PooledCodec({
44
- * players: PooledCodec.array({
45
- * entityId: BinaryPrimitives.u32,
46
- * x: BinaryPrimitives.f32,
47
- * y: BinaryPrimitives.f32,
48
- * })
49
- * }));
50
- *
51
- * registry.register('score', new PooledCodec({
52
- * score: BinaryPrimitives.u32
53
- * }));
54
- *
55
- * // Server: Encode specific update type
56
- * const buf = registry.encode('players', {
57
- * tick: 100,
58
- * updates: { players: [{ entityId: 1, x: 5, y: 10 }] }
59
- * });
60
- *
61
- * // Client: Decode (type is embedded in message)
62
- * const { type, snapshot } = registry.decode(buf);
63
- * applySnapshot(state, snapshot);
64
- * ```
65
- */
66
- export class SnapshotRegistry {
67
- constructor() {
68
- this.codecs = new Map();
69
- this.typeIds = new Map();
70
- this.idToType = new Map();
71
- this.nextId = 0;
72
- }
73
- /**
74
- * Register a codec for a specific update type.
75
- * Call this once per update type at startup.
76
- */
77
- register(type, codec) {
78
- if (this.codecs.has(type)) {
79
- throw new Error(`Snapshot type "${type}" is already registered`);
80
- }
81
- const typeId = this.nextId++;
82
- this.codecs.set(type, codec);
83
- this.typeIds.set(type, typeId);
84
- this.idToType.set(typeId, type);
85
- }
86
- /**
87
- * Encode a snapshot with a specific update type.
88
- * Format: [typeId: u8][tick: u32][updates: encoded by codec]
89
- *
90
- * Zero-copy encoding path:
91
- * - Calculate total size needed
92
- * - Allocate ONE final buffer for [typeId + tick + updates]
93
- * - Write directly into buffer using encodeInto (no intermediate allocations)
94
- *
95
- * Falls back to legacy encode() method if codec doesn't support encodeInto.
96
- */
97
- encode(type, snapshot) {
98
- const codec = this.codecs.get(type);
99
- const typeId = this.typeIds.get(type);
100
- if (!codec || typeId === undefined) {
101
- throw new Error(`No codec registered for snapshot type "${type}"`);
102
- }
103
- // Use zero-copy path if available
104
- if (codec.calculateSize && codec.encodeInto) {
105
- // Calculate total size
106
- const updatesSize = codec.calculateSize(snapshot.updates);
107
- const buf = new Uint8Array(5 + updatesSize);
108
- // Write type ID (1 byte)
109
- buf[0] = typeId;
110
- // Write tick (4 bytes, little-endian)
111
- new DataView(buf.buffer).setUint32(1, snapshot.tick, true);
112
- // Write updates directly into buffer (ZERO COPY!)
113
- codec.encodeInto(snapshot.updates, buf, 5);
114
- return buf;
115
- }
116
- // Fallback to legacy path for backward compatibility
117
- const updatesBytes = codec.encode(snapshot.updates);
118
- const buf = new Uint8Array(1 + 4 + updatesBytes.length);
119
- buf[0] = typeId;
120
- new DataView(buf.buffer).setUint32(1, snapshot.tick, true);
121
- buf.set(updatesBytes, 5);
122
- return buf;
123
- }
124
- /**
125
- * Decode a snapshot and return both the type and the snapshot.
126
- */
127
- decode(buf) {
128
- // Decode type ID (first byte)
129
- const typeId = buf[0];
130
- const type = this.idToType.get(typeId);
131
- if (!type) {
132
- throw new Error(`Unknown snapshot type ID: ${typeId}`);
133
- }
134
- const codec = this.codecs.get(type);
135
- if (!codec) {
136
- throw new Error(`No codec registered for snapshot type "${type}"`);
137
- }
138
- // Decode tick (bytes 1-4)
139
- const tick = new DataView(buf.buffer, buf.byteOffset + 1).getUint32(0, true);
140
- // Decode updates (remaining bytes)
141
- const updatesBytes = buf.subarray(5);
142
- const updates = codec.decode(updatesBytes);
143
- return { type, snapshot: { tick, updates } };
144
- }
145
- has(type) {
146
- return this.codecs.has(type);
147
- }
148
- getTypes() {
149
- return Array.from(this.codecs.keys());
150
- }
151
- /**
152
- * Release a decoded snapshot's updates object back to the pool.
153
- * Call this after you're done processing the snapshot to enable object pooling.
154
- *
155
- * @param type The snapshot type (same as used in decode)
156
- * @param updates The updates object to release
157
- */
158
- release(type, updates) {
159
- const codec = this.codecs.get(type);
160
- if (!codec) {
161
- throw new Error(`No codec registered for snapshot type "${type}"`);
162
- }
163
- // Only release if the codec supports pooling
164
- if ('release' in codec && typeof codec.release === 'function') {
165
- codec.release(updates);
166
- }
167
- }
168
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Apply snapshot updates to state (mutating).
3
- * Deep merges objects, replaces arrays.
4
- *
5
- * @param state State to update
6
- * @param snapshot Snapshot to apply
7
- */
8
- export function applySnapshot(state, snapshot) {
9
- deepMerge(state, snapshot.updates);
10
- }
11
- function deepMerge(target, update) {
12
- for (const key in update) {
13
- if (!Object.prototype.hasOwnProperty.call(update, key))
14
- continue;
15
- const updateValue = update[key];
16
- const targetValue = target[key];
17
- if (updateValue === null || updateValue === undefined) {
18
- target[key] = updateValue;
19
- }
20
- else if (Array.isArray(updateValue)) {
21
- target[key] = updateValue;
22
- }
23
- else if (typeof updateValue === "object" && typeof targetValue === "object") {
24
- deepMerge(targetValue, updateValue);
25
- }
26
- else {
27
- target[key] = updateValue;
28
- }
29
- }
30
- }
@@ -1,60 +0,0 @@
1
- # BinaryCodec
2
-
3
- A minimal TypeScript library for **schema-driven binary encoding and decoding**.
4
- Supports fixed-size numeric fields with automatic buffer sizing.
5
-
6
- ---
7
-
8
- ## Usage
9
-
10
- ### Define a schema
11
-
12
- ```ts
13
- import { BinaryCodec } from ".";
14
-
15
- type Player = {
16
- id: number;
17
- score: number;
18
- };
19
-
20
- const playerSchema = {
21
- id: BinaryCodec.u8,
22
- score: BinaryCodec.u16,
23
- };
24
- ```
25
-
26
- ### Encode an object
27
-
28
- ```ts
29
- const data: Player = { id: 1, score: 420 };
30
- const buffer = BinaryCodec.encode(playerSchema, data);
31
-
32
- console.log(buffer); // Uint8Array [1, 1, 164] (example)
33
- ```
34
-
35
- ### Decode into an object
36
-
37
- ```ts
38
- const target: Player = { id: 0, score: 0 };
39
- BinaryCodec.decode(playerSchema, buffer, target);
40
-
41
- console.log(target); // { id: 1, score: 420 }
42
- ```
43
-
44
- ---
45
-
46
- ## Features
47
-
48
- * Fixed-size fields (`u8`, `u16`, `f32`)
49
- * Automatic buffer sizing
50
- * Explicit big-endian encoding
51
- * Safe, re-entrant, and concurrent-friendly
52
- * Schema-driven and type-safe
53
-
54
- ---
55
-
56
- ## Notes
57
-
58
- * Object keys define **field order** in the binary layout.
59
- * Buffer sizes are validated on decode to avoid overflow.
60
- * Works in browsers and Node.js.