murow 0.0.70 → 0.0.72

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 (470) hide show
  1. package/README.md +54 -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/renderer-2d.js +1 -0
  74. package/dist/cjs/renderer/base/renderer-3d.js +1 -0
  75. package/dist/cjs/renderer/base/renderer.js +1 -0
  76. package/dist/cjs/renderer/gltf/helpers.js +1 -0
  77. package/dist/cjs/renderer/gltf/parser.js +1 -0
  78. package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
  79. package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
  80. package/dist/cjs/renderer/index.js +1 -0
  81. package/dist/cjs/renderer/math.js +1 -0
  82. package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
  83. package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
  84. package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
  85. package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
  86. package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
  87. package/dist/cjs/renderer/spritesheet/parser.js +1 -0
  88. package/dist/cjs/renderer/types.js +1 -0
  89. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  90. package/dist/esm/core/binary-codec/index.js +1 -0
  91. package/dist/esm/core/driver/driver.js +1 -0
  92. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  93. package/dist/esm/core/driver/drivers/index.js +1 -0
  94. package/dist/esm/core/driver/drivers/raf.js +1 -0
  95. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  96. package/dist/esm/core/driver/index.js +1 -0
  97. package/dist/esm/core/events/event-system.js +1 -0
  98. package/dist/esm/core/events/index.js +1 -0
  99. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  100. package/dist/esm/core/fixed-ticker/index.js +1 -0
  101. package/dist/esm/core/free-list/free-list.js +1 -0
  102. package/dist/esm/core/free-list/index.js +1 -0
  103. package/dist/esm/core/generate-id/generate-id.js +1 -0
  104. package/dist/esm/core/generate-id/index.js +1 -0
  105. package/dist/esm/core/index.js +1 -0
  106. package/dist/esm/core/input/index.js +1 -0
  107. package/dist/esm/core/input/manager.js +1 -0
  108. package/dist/esm/core/input/sources/browser.js +1 -0
  109. package/dist/esm/core/input/sources/index.js +1 -0
  110. package/dist/esm/core/input/types.js +0 -0
  111. package/dist/esm/core/lerp/index.js +1 -0
  112. package/dist/esm/core/lerp/lerp.js +1 -0
  113. package/dist/esm/core/navmesh/index.js +1 -0
  114. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  115. package/dist/esm/core/navmesh/navmesh.js +1 -0
  116. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  117. package/dist/esm/core/pooled-codec/index.js +1 -0
  118. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  119. package/dist/esm/core/prediction/index.js +1 -0
  120. package/dist/esm/core/prediction/prediction.js +1 -0
  121. package/dist/esm/core/ray/index.js +1 -0
  122. package/dist/esm/core/ray/ray-2d.js +1 -0
  123. package/dist/esm/core/ray/ray-3d.js +1 -0
  124. package/dist/esm/core/simple-rng/index.js +1 -0
  125. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  126. package/dist/esm/core/sparse-batcher/index.js +1 -0
  127. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  128. package/dist/esm/ecs/component-store.js +1 -0
  129. package/dist/esm/ecs/component.js +1 -0
  130. package/dist/esm/ecs/entity-handle.js +1 -0
  131. package/dist/esm/ecs/index.js +1 -0
  132. package/dist/esm/ecs/system-builder.js +1 -0
  133. package/dist/esm/ecs/world-systems.js +1 -0
  134. package/dist/esm/ecs/world.js +1 -0
  135. package/dist/esm/game/index.js +1 -0
  136. package/dist/esm/game/loop/index.js +1 -0
  137. package/dist/esm/game/loop/loop.js +1 -0
  138. package/dist/esm/index.js +1 -0
  139. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  140. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  141. package/dist/esm/net/buffer-pool.js +1 -0
  142. package/dist/esm/net/client.js +1 -0
  143. package/dist/esm/net/index.js +1 -0
  144. package/dist/esm/net/server.js +1 -0
  145. package/dist/esm/net/types.js +1 -0
  146. package/dist/esm/net/validators.js +1 -0
  147. package/dist/esm/protocol/index.js +1 -0
  148. package/dist/esm/protocol/intent/define-intent.js +1 -0
  149. package/dist/esm/protocol/intent/index.js +1 -0
  150. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  151. package/dist/esm/protocol/intent/intent.js +0 -0
  152. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  153. package/dist/esm/protocol/rpc/index.js +1 -0
  154. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  155. package/dist/esm/protocol/rpc/rpc.js +0 -0
  156. package/dist/esm/protocol/snapshot/index.js +1 -0
  157. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  158. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  159. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  160. package/dist/esm/renderer/base/renderer-2d.js +1 -0
  161. package/dist/esm/renderer/base/renderer-3d.js +1 -0
  162. package/dist/esm/renderer/base/renderer.js +1 -0
  163. package/dist/esm/renderer/gltf/helpers.js +1 -0
  164. package/dist/esm/renderer/gltf/parser.js +1 -0
  165. package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
  166. package/dist/esm/renderer/gltf/skin-parser.js +1 -0
  167. package/dist/esm/renderer/index.js +1 -0
  168. package/dist/esm/renderer/math.js +1 -0
  169. package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
  170. package/dist/esm/renderer/prefab-bucket/index.js +1 -0
  171. package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
  172. package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
  173. package/dist/esm/renderer/spritesheet/helpers.js +1 -0
  174. package/dist/esm/renderer/spritesheet/parser.js +1 -0
  175. package/dist/esm/renderer/types.js +0 -0
  176. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  177. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  178. package/dist/types/core/free-list/free-list.d.ts +31 -0
  179. package/dist/types/core/free-list/index.d.ts +1 -0
  180. package/dist/{core → types/core}/index.d.ts +5 -0
  181. package/dist/{core → types/core}/input/index.d.ts +1 -0
  182. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  183. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  184. package/dist/types/core/ray/index.d.ts +2 -0
  185. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  186. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  187. package/dist/types/core/simple-rng/index.d.ts +1 -0
  188. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  189. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  190. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  191. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  192. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  193. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  194. package/dist/{net → types/net}/index.d.ts +2 -2
  195. package/dist/types/renderer/base/renderer-2d.d.ts +13 -0
  196. package/dist/types/renderer/base/renderer-3d.d.ts +10 -0
  197. package/dist/types/renderer/base/renderer.d.ts +21 -0
  198. package/dist/types/renderer/gltf/helpers.d.ts +43 -0
  199. package/dist/types/renderer/gltf/parser.d.ts +49 -0
  200. package/dist/types/renderer/gltf/skeletal-animation.d.ts +96 -0
  201. package/dist/types/renderer/gltf/skin-parser.d.ts +107 -0
  202. package/dist/types/renderer/index.d.ts +15 -0
  203. package/dist/types/renderer/math.d.ts +37 -0
  204. package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
  205. package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
  206. package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
  207. package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
  208. package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
  209. package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
  210. package/dist/types/renderer/types.d.ts +89 -0
  211. package/dist/webgpu/cjs/index.js +5401 -0
  212. package/dist/webgpu/esm/index.js +5378 -0
  213. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  214. package/dist/webgpu/types/2d/renderer.d.ts +86 -0
  215. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  216. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  217. package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
  218. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  219. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  220. package/dist/webgpu/types/3d/renderer.d.ts +266 -0
  221. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  222. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  223. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +25 -0
  224. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  225. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  226. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  227. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  228. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  229. package/dist/webgpu/types/camera/index.d.ts +2 -0
  230. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  231. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  232. package/dist/webgpu/types/core/constants.d.ts +59 -0
  233. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  234. package/dist/webgpu/types/core/index.d.ts +2 -0
  235. package/dist/webgpu/types/core/types.d.ts +125 -0
  236. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  237. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  238. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  239. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  240. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  241. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  242. package/dist/webgpu/types/index.d.ts +35 -0
  243. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  244. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  245. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  246. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  247. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  248. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  249. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  250. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  251. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +28 -0
  252. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  253. package/package.json +96 -26
  254. package/dist/core/binary-codec/binary-codec.js +0 -354
  255. package/dist/core/binary-codec/index.js +0 -1
  256. package/dist/core/driver/driver.js +0 -47
  257. package/dist/core/driver/drivers/immediate.js +0 -61
  258. package/dist/core/driver/drivers/index.js +0 -3
  259. package/dist/core/driver/drivers/raf.js +0 -62
  260. package/dist/core/driver/drivers/timeout.js +0 -71
  261. package/dist/core/driver/index.js +0 -2
  262. package/dist/core/events/event-system.js +0 -88
  263. package/dist/core/events/index.js +0 -1
  264. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  265. package/dist/core/fixed-ticker/index.js +0 -1
  266. package/dist/core/generate-id/generate-id.js +0 -25
  267. package/dist/core/generate-id/index.js +0 -1
  268. package/dist/core/index.js +0 -10
  269. package/dist/core/input/index.js +0 -2
  270. package/dist/core/input/manager.js +0 -211
  271. package/dist/core/input/sources/browser.js +0 -29
  272. package/dist/core/input/sources/index.js +0 -1
  273. package/dist/core/lerp/index.js +0 -1
  274. package/dist/core/lerp/lerp.js +0 -42
  275. package/dist/core/navmesh/index.js +0 -1
  276. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  277. package/dist/core/navmesh/navmesh.js +0 -799
  278. package/dist/core/navmesh/navmesh.worker.js +0 -79
  279. package/dist/core/pooled-codec/index.js +0 -1
  280. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  281. package/dist/core/prediction/index.js +0 -1
  282. package/dist/core/prediction/prediction.js +0 -99
  283. package/dist/core.esm.js +0 -1
  284. package/dist/core.js +0 -1
  285. package/dist/ecs/component-store.js +0 -175
  286. package/dist/ecs/component.js +0 -43
  287. package/dist/ecs/entity-handle.js +0 -515
  288. package/dist/ecs/example.js +0 -125
  289. package/dist/ecs/index.js +0 -4
  290. package/dist/ecs/system-builder.js +0 -249
  291. package/dist/ecs/world-systems.js +0 -79
  292. package/dist/ecs/world.js +0 -767
  293. package/dist/game/index.js +0 -1
  294. package/dist/game/loop/index.js +0 -1
  295. package/dist/game/loop/loop.js +0 -108
  296. package/dist/index.js +0 -26
  297. package/dist/net/adapters/browser-websocket.js +0 -74
  298. package/dist/net/adapters/bun-websocket.js +0 -245
  299. package/dist/net/buffer-pool.js +0 -89
  300. package/dist/net/client.js +0 -586
  301. package/dist/net/index.js +0 -58
  302. package/dist/net/server.js +0 -974
  303. package/dist/net/types.js +0 -31
  304. package/dist/net/validators.js +0 -88
  305. package/dist/protocol/index.js +0 -92
  306. package/dist/protocol/intent/define-intent.js +0 -125
  307. package/dist/protocol/intent/index.js +0 -91
  308. package/dist/protocol/intent/intent-registry.js +0 -91
  309. package/dist/protocol/rpc/define-rpc.js +0 -84
  310. package/dist/protocol/rpc/index.js +0 -3
  311. package/dist/protocol/rpc/rpc-registry.js +0 -159
  312. package/dist/protocol/rpc/rpc.js +0 -12
  313. package/dist/protocol/snapshot/index.js +0 -43
  314. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  315. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  316. package/dist/protocol/snapshot/snapshot.js +0 -30
  317. package/src/core/binary-codec/README.md +0 -60
  318. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  319. package/src/core/binary-codec/binary-codec.ts +0 -448
  320. package/src/core/binary-codec/index.ts +0 -1
  321. package/src/core/driver/README.md +0 -97
  322. package/src/core/driver/driver.test.ts +0 -414
  323. package/src/core/driver/driver.ts +0 -71
  324. package/src/core/driver/drivers/immediate.ts +0 -66
  325. package/src/core/driver/drivers/index.ts +0 -3
  326. package/src/core/driver/drivers/raf.ts +0 -67
  327. package/src/core/driver/drivers/timeout.ts +0 -77
  328. package/src/core/driver/index.ts +0 -2
  329. package/src/core/events/README.md +0 -47
  330. package/src/core/events/event-system.test.ts +0 -243
  331. package/src/core/events/event-system.ts +0 -140
  332. package/src/core/events/index.ts +0 -1
  333. package/src/core/fixed-ticker/README.md +0 -77
  334. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  335. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  336. package/src/core/fixed-ticker/index.ts +0 -1
  337. package/src/core/generate-id/README.md +0 -18
  338. package/src/core/generate-id/generate-id.test.ts +0 -79
  339. package/src/core/generate-id/generate-id.ts +0 -37
  340. package/src/core/generate-id/index.ts +0 -1
  341. package/src/core/index.ts +0 -10
  342. package/src/core/input/README.md +0 -24
  343. package/src/core/input/index.ts +0 -2
  344. package/src/core/input/manager.ts +0 -259
  345. package/src/core/input/sources/browser.ts +0 -39
  346. package/src/core/input/sources/index.ts +0 -1
  347. package/src/core/input/types.ts +0 -40
  348. package/src/core/lerp/README.md +0 -79
  349. package/src/core/lerp/index.ts +0 -1
  350. package/src/core/lerp/lerp.test.ts +0 -90
  351. package/src/core/lerp/lerp.ts +0 -42
  352. package/src/core/navmesh/README.md +0 -164
  353. package/src/core/navmesh/index.ts +0 -1
  354. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  355. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  356. package/src/core/navmesh/navmesh.test.ts +0 -344
  357. package/src/core/navmesh/navmesh.ts +0 -1047
  358. package/src/core/navmesh/navmesh.worker.ts +0 -147
  359. package/src/core/pooled-codec/README.md +0 -70
  360. package/src/core/pooled-codec/index.ts +0 -1
  361. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  362. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  363. package/src/core/prediction/README.md +0 -64
  364. package/src/core/prediction/index.ts +0 -1
  365. package/src/core/prediction/prediction.test.ts +0 -423
  366. package/src/core/prediction/prediction.ts +0 -112
  367. package/src/ecs/README.md +0 -427
  368. package/src/ecs/benchmark.test.ts +0 -1645
  369. package/src/ecs/component-store.ts +0 -198
  370. package/src/ecs/component.ts +0 -90
  371. package/src/ecs/entity-handle.test.ts +0 -393
  372. package/src/ecs/entity-handle.ts +0 -563
  373. package/src/ecs/example.ts +0 -152
  374. package/src/ecs/index.ts +0 -4
  375. package/src/ecs/system-builder.ts +0 -404
  376. package/src/ecs/world-systems.ts +0 -83
  377. package/src/ecs/world.test.ts +0 -310
  378. package/src/ecs/world.ts +0 -904
  379. package/src/game/index.ts +0 -1
  380. package/src/game/loop/README.md +0 -32
  381. package/src/game/loop/index.ts +0 -1
  382. package/src/game/loop/loop.ts +0 -236
  383. package/src/index.ts +0 -32
  384. package/src/net/README.md +0 -474
  385. package/src/net/adapters/browser-websocket.ts +0 -86
  386. package/src/net/adapters/bun-websocket.ts +0 -292
  387. package/src/net/buffer-pool.ts +0 -106
  388. package/src/net/client.test.ts +0 -807
  389. package/src/net/client.ts +0 -695
  390. package/src/net/index.ts +0 -60
  391. package/src/net/server.test.ts +0 -799
  392. package/src/net/server.ts +0 -1152
  393. package/src/net/types.ts +0 -228
  394. package/src/net/validators.ts +0 -104
  395. package/src/protocol/README.md +0 -469
  396. package/src/protocol/index.ts +0 -93
  397. package/src/protocol/intent/define-intent.test.ts +0 -397
  398. package/src/protocol/intent/define-intent.ts +0 -201
  399. package/src/protocol/intent/index.ts +0 -94
  400. package/src/protocol/intent/intent-registry.test.ts +0 -198
  401. package/src/protocol/intent/intent-registry.ts +0 -112
  402. package/src/protocol/intent/intent.ts +0 -12
  403. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  404. package/src/protocol/rpc/define-rpc.ts +0 -113
  405. package/src/protocol/rpc/index.ts +0 -3
  406. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  407. package/src/protocol/rpc/rpc-registry.ts +0 -176
  408. package/src/protocol/rpc/rpc.ts +0 -37
  409. package/src/protocol/snapshot/index.ts +0 -45
  410. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  411. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  412. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  413. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  414. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  415. package/src/protocol/snapshot/snapshot.ts +0 -41
  416. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  417. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  418. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  419. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  420. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  421. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  422. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  423. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  424. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  425. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  426. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  427. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  428. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  429. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  430. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  431. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  432. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  433. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  434. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  435. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  436. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  437. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  438. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  439. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  440. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  441. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  442. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  443. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  444. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  445. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  446. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  447. /package/dist/{game → types/game}/index.d.ts +0 -0
  448. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  449. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  450. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  451. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  452. /package/dist/{net → types/net}/client.d.ts +0 -0
  453. /package/dist/{net → types/net}/server.d.ts +0 -0
  454. /package/dist/{net → types/net}/types.d.ts +0 -0
  455. /package/dist/{net → types/net}/validators.d.ts +0 -0
  456. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  457. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  458. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  459. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  460. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  461. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  462. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  463. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  464. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  465. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  466. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  467. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  468. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  469. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  470. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1 +0,0 @@
1
- export * from "./loop";
@@ -1 +0,0 @@
1
- export * from "./loop";
@@ -1,108 +0,0 @@
1
- import { createDriver, EventSystem, FixedTicker } from "../../core";
2
- import { InputManager, BrowserInputSource } from "../../core/input";
3
- /**
4
- * GameLoop class that manages the main game loop with tick events and optional rendering.
5
- * It supports both client and server types, emitting appropriate events for both.
6
- */
7
- export class GameLoop {
8
- constructor(options) {
9
- this.options = options;
10
- /**
11
- * Current frames per second (FPS) measurement.
12
- */
13
- this.fps = 0;
14
- /**
15
- * Current status of the game loop: 'running', 'paused', or 'stopped'.
16
- */
17
- this.status = 'stopped';
18
- const eventNames = [
19
- 'pre-tick',
20
- 'tick',
21
- 'post-tick',
22
- 'skip',
23
- 'start',
24
- 'stop',
25
- 'toggle-pause',
26
- ];
27
- if (this.options.type === 'client') {
28
- eventNames.push('render');
29
- }
30
- this._input = new InputManager();
31
- this.events = new EventSystem({
32
- events: eventNames,
33
- });
34
- this.ticker = new FixedTicker({
35
- rate: this.options.tickRate,
36
- onTick: (dt, tick = 0) => {
37
- const input = this._input.snapshot();
38
- this.events.emit('pre-tick', { deltaTime: dt, tick, input });
39
- this.options.onTick?.(dt, tick, input);
40
- this.events.emit('tick', { deltaTime: dt, tick, input });
41
- this.events.emit('post-tick', { deltaTime: dt, tick, input });
42
- },
43
- onTickSkipped: (skippedTicks) => {
44
- this.events.emit('skip', { ticks: skippedTicks });
45
- },
46
- });
47
- this._driver = createDriver(this.options.type, (dt) => {
48
- this.ticker.tick(dt);
49
- this.fps = 1 / dt;
50
- if (this.options.type === 'client') {
51
- this.options.onRender?.(dt, this.ticker.alpha, this._input.peek());
52
- this.events.emit('render', {
53
- deltaTime: dt,
54
- alpha: this.ticker.alpha,
55
- input: this._input.peek(),
56
- });
57
- }
58
- });
59
- }
60
- /**
61
- * Pauses the game ticker and emits a 'toggle-pause' event.
62
- */
63
- pause() {
64
- this._driver.stop();
65
- this.status = 'paused';
66
- this.events.emit('toggle-pause', {
67
- paused: true,
68
- lastToggledAt: Date.now(),
69
- lastToggleTick: this.ticker.tickCount,
70
- });
71
- }
72
- /**
73
- * Resumes the game ticker and emits a 'toggle-pause' event.
74
- */
75
- resume() {
76
- this._driver.start();
77
- this.status = 'running';
78
- this.events.emit('toggle-pause', {
79
- paused: false,
80
- lastToggledAt: Date.now(),
81
- lastToggleTick: this.ticker.tickCount,
82
- });
83
- }
84
- /**
85
- * Starts the game ticker and emits a 'start' event.
86
- */
87
- start() {
88
- this._driver.start();
89
- this.status = 'running';
90
- this.events.emit('start', { startedAt: Date.now() });
91
- if (this.options.type === 'client') {
92
- const source = new BrowserInputSource(document, document.body);
93
- this._input.listen(source);
94
- }
95
- }
96
- /**
97
- * Stops the game ticker and emits a 'stop' event.
98
- */
99
- stop() {
100
- this._driver.stop();
101
- this.ticker.resetTickCount();
102
- this.status = 'stopped';
103
- this.events.emit('stop', { stoppedAt: Date.now() });
104
- if (this.options.type === 'client') {
105
- this._input.unlisten();
106
- }
107
- }
108
- }
package/dist/index.js DELETED
@@ -1,26 +0,0 @@
1
- /**
2
- * GameDev Utils
3
- *
4
- * A collection of utilities for game development, including:
5
- * - Binary codecs for efficient serialization
6
- * - Event system for decoupled communication
7
- * - Fixed-timestep ticker for deterministic simulation
8
- * - ID generation utilities
9
- * - Linear interpolation (lerp) utilities
10
- * - NavMesh pathfinding with obstacle management
11
- * - Pooled codecs for zero-allocation networking
12
- * - Prediction system for client-side prediction
13
- * - Protocol layer for networked multiplayer games
14
- * - Transport-agnostic networking layer (client/server abstractions)
15
- * - Entity Component System (ECS) for scalable game architecture
16
- */
17
- // Core utilities
18
- export * from "./core";
19
- // Protocol layer for networking
20
- export * from "./protocol";
21
- // Networking layer (client/server abstractions)
22
- export * from "./net";
23
- // Entity Component System
24
- export * from "./ecs";
25
- // Game utilities
26
- export * from "./game";
@@ -1,74 +0,0 @@
1
- /**
2
- * Browser WebSocket transport adapter for ClientNetwork
3
- *
4
- * @example
5
- * ```ts
6
- * const transport = new BrowserWebSocketClientTransport("ws://localhost:3007");
7
- * const client = new ClientNetwork({ transport, ... });
8
- * ```
9
- */
10
- export class BrowserWebSocketClientTransport {
11
- constructor(url) {
12
- this.openHandler = null;
13
- this.messageHandler = null;
14
- this.closeHandler = null;
15
- this.errorHandler = null;
16
- this.isOpen = false;
17
- this.pendingMessages = [];
18
- this.ws = new WebSocket(url);
19
- this.ws.binaryType = 'arraybuffer';
20
- this.ws.onopen = () => {
21
- this.isOpen = true;
22
- // Flush any pending messages
23
- for (const msg of this.pendingMessages) {
24
- this.ws.send(msg);
25
- }
26
- this.pendingMessages = [];
27
- if (this.openHandler) {
28
- this.openHandler();
29
- }
30
- ;
31
- };
32
- this.ws.onmessage = (event) => {
33
- if (this.messageHandler && event.data instanceof ArrayBuffer) {
34
- this.messageHandler(new Uint8Array(event.data));
35
- }
36
- };
37
- this.ws.onclose = () => {
38
- this.isOpen = false;
39
- if (this.closeHandler) {
40
- this.closeHandler();
41
- }
42
- };
43
- this.ws.onerror = () => {
44
- if (this.errorHandler) {
45
- this.errorHandler(new Error('WebSocket error'));
46
- }
47
- };
48
- }
49
- send(data) {
50
- if (this.isOpen && this.ws.readyState === WebSocket.OPEN) {
51
- // WebSocket.send() copies the buffer, so this is safe
52
- this.ws.send(data);
53
- }
54
- else if (this.ws.readyState === WebSocket.CONNECTING) {
55
- // Queue messages sent before connection is established
56
- this.pendingMessages.push(data);
57
- }
58
- }
59
- onMessage(handler) {
60
- this.messageHandler = handler;
61
- }
62
- onOpen(handler) {
63
- this.openHandler = handler;
64
- }
65
- onClose(handler) {
66
- this.closeHandler = handler;
67
- }
68
- onError(handler) {
69
- this.errorHandler = handler;
70
- }
71
- close() {
72
- this.ws.close();
73
- }
74
- }
@@ -1,245 +0,0 @@
1
- import { generateId } from "../../core/generate-id/generate-id";
2
- /**
3
- * Bun WebSocket transport adapter for client-side connections
4
- */
5
- export class BunWebSocketClientTransport {
6
- constructor(socket) {
7
- this.messageHandlers = [];
8
- this.closeHandlers = [];
9
- this.errorHandlers = [];
10
- this.socket = socket;
11
- this.setupHandlers();
12
- }
13
- send(data) {
14
- if (this.socket.readyState === WebSocket.OPEN) {
15
- this.socket.send(data);
16
- }
17
- }
18
- onMessage(handler) {
19
- this.messageHandlers.push(handler);
20
- }
21
- onClose(handler) {
22
- this.closeHandlers.push(handler);
23
- }
24
- onError(handler) {
25
- this.errorHandlers.push(handler);
26
- }
27
- close() {
28
- this.socket.close();
29
- }
30
- setupHandlers() {
31
- this.socket.binaryType = "arraybuffer";
32
- this.socket.addEventListener("message", (event) => {
33
- if (event.data instanceof ArrayBuffer) {
34
- const data = new Uint8Array(event.data);
35
- for (const handler of this.messageHandlers) {
36
- handler(data);
37
- }
38
- }
39
- else {
40
- // Warn about non-binary messages
41
- const error = new Error(`Unexpected message type: ${typeof event.data}`);
42
- for (const handler of this.errorHandlers) {
43
- handler(error);
44
- }
45
- }
46
- });
47
- this.socket.addEventListener("close", () => {
48
- for (const handler of this.closeHandlers) {
49
- handler();
50
- }
51
- });
52
- this.socket.addEventListener("error", () => {
53
- const error = new Error("WebSocket error");
54
- for (const handler of this.errorHandlers) {
55
- handler(error);
56
- }
57
- });
58
- }
59
- /**
60
- * Static factory method to connect to a server
61
- */
62
- static connect(url) {
63
- return new Promise((resolve, reject) => {
64
- const socket = new WebSocket(url);
65
- const transport = new BunWebSocketClientTransport(socket);
66
- socket.addEventListener("open", () => {
67
- resolve(transport);
68
- });
69
- socket.addEventListener("error", (error) => {
70
- reject(error);
71
- });
72
- });
73
- }
74
- }
75
- /**
76
- * Bun WebSocket transport adapter for server-side peer connections
77
- */
78
- export class BunWebSocketPeerTransport {
79
- constructor(socket) {
80
- this.messageHandlers = [];
81
- this.closeHandlers = [];
82
- this.errorHandlers = [];
83
- this.socket = socket;
84
- }
85
- send(data) {
86
- this.socket.send(data);
87
- }
88
- onMessage(handler) {
89
- this.messageHandlers.push(handler);
90
- }
91
- onClose(handler) {
92
- this.closeHandlers.push(handler);
93
- }
94
- onError(handler) {
95
- this.errorHandlers.push(handler);
96
- }
97
- close() {
98
- this.socket.close();
99
- }
100
- _handleOpen() {
101
- // No-op for server peer transport
102
- }
103
- /**
104
- * Internal: Call message handlers (used by server adapter)
105
- */
106
- _handleMessage(data) {
107
- for (const handler of this.messageHandlers) {
108
- handler(data);
109
- }
110
- }
111
- /**
112
- * Internal: Call close handlers (used by server adapter)
113
- */
114
- _handleClose() {
115
- for (const handler of this.closeHandlers) {
116
- handler();
117
- }
118
- }
119
- /**
120
- * Internal: Call error handlers (used by server adapter)
121
- */
122
- _handleError(error) {
123
- for (const handler of this.errorHandlers) {
124
- handler(error);
125
- }
126
- }
127
- }
128
- /**
129
- * Bun WebSocket server transport adapter
130
- */
131
- export class BunWebSocketServerTransport {
132
- constructor(server) {
133
- this.peers = new Map();
134
- this.connectionHandlers = [];
135
- this.disconnectionHandlers = [];
136
- this.server = server;
137
- }
138
- onConnection(handler) {
139
- this.connectionHandlers.push(handler);
140
- }
141
- onDisconnection(handler) {
142
- this.disconnectionHandlers.push(handler);
143
- }
144
- getPeer(peerId) {
145
- return this.peers.get(peerId);
146
- }
147
- getPeerIds() {
148
- return Array.from(this.peers.keys());
149
- }
150
- close() {
151
- this.server.stop();
152
- this.peers.clear();
153
- }
154
- /**
155
- * Internal: Register a new peer (called from Bun server fetch handler)
156
- */
157
- _registerPeer(socket) {
158
- const peerId = generateId({ prefix: "peer_" });
159
- const peer = new BunWebSocketPeerTransport(socket);
160
- this.peers.set(peerId, peer);
161
- // Notify connection handlers
162
- for (const handler of this.connectionHandlers) {
163
- handler(peer, peerId);
164
- }
165
- return peerId;
166
- }
167
- /**
168
- * Internal: Handle peer message (called from Bun server message handler)
169
- */
170
- _handlePeerMessage(peerId, data) {
171
- const peer = this.peers.get(peerId);
172
- if (peer) {
173
- peer._handleMessage(data);
174
- }
175
- }
176
- /**
177
- * Internal: Handle peer disconnection (called from Bun server close handler)
178
- */
179
- _handlePeerDisconnection(peerId) {
180
- const peer = this.peers.get(peerId);
181
- if (peer) {
182
- peer._handleClose();
183
- this.peers.delete(peerId);
184
- // Notify disconnection handlers
185
- for (const handler of this.disconnectionHandlers) {
186
- handler(peerId);
187
- }
188
- }
189
- }
190
- _handlePeerConnection(peerId) {
191
- const peer = this.peers.get(peerId);
192
- if (peer) {
193
- for (const handler of this.connectionHandlers) {
194
- handler(peer, peerId);
195
- }
196
- }
197
- }
198
- /**
199
- * Static factory method to create a Bun WebSocket server
200
- */
201
- static create(port) {
202
- // Peer ID tracking per socket
203
- const socketToPeerId = new WeakMap();
204
- let transport;
205
- const server = Bun.serve({
206
- port,
207
- fetch(req, server) {
208
- // Upgrade HTTP request to WebSocket
209
- if (server.upgrade(req)) {
210
- return; // Connection upgraded
211
- }
212
- return new Response("Expected WebSocket connection", { status: 400 });
213
- },
214
- websocket: {
215
- open(ws) {
216
- // Register peer on connection
217
- const peerId = transport._registerPeer(ws);
218
- socketToPeerId.set(ws, peerId);
219
- transport._handlePeerConnection(peerId);
220
- transport.connectionHandlers.forEach((handler) => handler(transport.getPeer(peerId), peerId));
221
- },
222
- message(ws, message) {
223
- // Handle incoming message
224
- const peerId = socketToPeerId.get(ws);
225
- if (peerId && message instanceof Uint8Array) {
226
- transport._handlePeerMessage(peerId, message);
227
- }
228
- else if (peerId && message instanceof ArrayBuffer) {
229
- transport._handlePeerMessage(peerId, new Uint8Array(message));
230
- }
231
- },
232
- close(ws) {
233
- // Handle disconnection
234
- const peerId = socketToPeerId.get(ws);
235
- if (peerId) {
236
- transport._handlePeerDisconnection(peerId);
237
- socketToPeerId.delete(ws);
238
- }
239
- },
240
- },
241
- });
242
- transport = new BunWebSocketServerTransport(server);
243
- return transport;
244
- }
245
- }
@@ -1,89 +0,0 @@
1
- import { ObjectPool } from "../core/pooled-codec/pooled-codec";
2
- /**
3
- * Message wrapper pool for network messages
4
- * Pools buffers for wrapping encoded data with message type headers
5
- *
6
- * Works alongside PooledCodec:
7
- * - PooledCodec handles encoding game data (intents/snapshots)
8
- * - MessageWrapperPool handles wrapping with protocol headers
9
- *
10
- * This eliminates the "new Uint8Array(1 + data.length)" allocation in hot paths
11
- *
12
- * Uses ObjectPool from core/pooled-codec for consistent pooling strategy
13
- */
14
- export class MessageWrapperPool {
15
- /**
16
- * @param sizeClass Buffers are pooled in multiples of this size (default: 256 bytes)
17
- * @param zeroBuffersOnRelease If true, zero buffers before returning to pool (default: false for performance)
18
- */
19
- constructor(sizeClass = 256, zeroBuffersOnRelease = false) {
20
- this.pools = new Map();
21
- this.sizeClass = sizeClass;
22
- this.zeroBuffersOnRelease = zeroBuffersOnRelease;
23
- }
24
- /**
25
- * Wrap payload data with a message type header
26
- * Returns a buffer from the pool (or allocates if needed)
27
- *
28
- * Format: [messageType: u8][payload: Uint8Array]
29
- *
30
- * IMPORTANT: Caller must call release() when done to return buffer to pool
31
- */
32
- wrap(messageType, payload) {
33
- const totalSize = 1 + payload.byteLength;
34
- const poolSize = Math.ceil(totalSize / this.sizeClass) * this.sizeClass;
35
- // Get or create pool for this size class
36
- let pool = this.pools.get(poolSize);
37
- if (!pool) {
38
- pool = new ObjectPool(() => new Uint8Array(poolSize));
39
- this.pools.set(poolSize, pool);
40
- }
41
- // Acquire buffer from pool
42
- const buffer = pool.acquire();
43
- // Write message type and payload
44
- buffer[0] = messageType;
45
- buffer.set(payload, 1);
46
- // Return view of exact size needed
47
- return buffer.subarray(0, totalSize);
48
- }
49
- /**
50
- * Return a buffer to the pool for reuse
51
- * Optionally zeros buffer based on constructor config
52
- *
53
- * WARNING: Caller must not use the buffer after calling release()
54
- */
55
- release(buffer) {
56
- // Get the actual underlying buffer size
57
- const poolSize = buffer.buffer.byteLength;
58
- // Only pool buffers that match our size classes
59
- if (poolSize % this.sizeClass !== 0) {
60
- return;
61
- }
62
- const pool = this.pools.get(poolSize);
63
- if (!pool) {
64
- return; // No pool for this size, let it be garbage collected
65
- }
66
- // Create a view of the full buffer
67
- const fullBuffer = new Uint8Array(buffer.buffer);
68
- // Optionally zero buffer (expensive but safer if caller might hold references)
69
- if (this.zeroBuffersOnRelease) {
70
- fullBuffer.fill(0);
71
- }
72
- pool.release(fullBuffer);
73
- }
74
- /**
75
- * Get current pool statistics
76
- * Note: ObjectPool doesn't expose size, so we can only list pool classes
77
- */
78
- getStats() {
79
- return {
80
- poolSizes: Array.from(this.pools.keys()).sort((a, b) => a - b),
81
- };
82
- }
83
- /**
84
- * Clear all pooled buffers (useful for testing or memory cleanup)
85
- */
86
- clear() {
87
- this.pools.clear();
88
- }
89
- }