@asciiz/atoolkit 0.1.0

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 (343) hide show
  1. package/LICENSE +21 -0
  2. package/ReadMe.md +198 -0
  3. package/dist/acircuit/chip.d.ts +46 -0
  4. package/dist/acircuit/chip.d.ts.map +1 -0
  5. package/dist/acircuit/chip.js +104 -0
  6. package/dist/acircuit/chip.js.map +1 -0
  7. package/dist/acircuit/circuit.d.ts +86 -0
  8. package/dist/acircuit/circuit.d.ts.map +1 -0
  9. package/dist/acircuit/circuit.js +606 -0
  10. package/dist/acircuit/circuit.js.map +1 -0
  11. package/dist/acircuit/composite.d.ts +32 -0
  12. package/dist/acircuit/composite.d.ts.map +1 -0
  13. package/dist/acircuit/composite.js +88 -0
  14. package/dist/acircuit/composite.js.map +1 -0
  15. package/dist/acircuit/index.d.ts +7 -0
  16. package/dist/acircuit/index.d.ts.map +1 -0
  17. package/dist/acircuit/index.js +6 -0
  18. package/dist/acircuit/index.js.map +1 -0
  19. package/dist/acircuit/socket.d.ts +20 -0
  20. package/dist/acircuit/socket.d.ts.map +1 -0
  21. package/dist/acircuit/socket.js +23 -0
  22. package/dist/acircuit/socket.js.map +1 -0
  23. package/dist/acircuit/types.d.ts +94 -0
  24. package/dist/acircuit/types.d.ts.map +1 -0
  25. package/dist/acircuit/types.js +2 -0
  26. package/dist/acircuit/types.js.map +1 -0
  27. package/dist/acircuit/wire.d.ts +26 -0
  28. package/dist/acircuit/wire.d.ts.map +1 -0
  29. package/dist/acircuit/wire.js +23 -0
  30. package/dist/acircuit/wire.js.map +1 -0
  31. package/dist/adiag/bus.d.ts +65 -0
  32. package/dist/adiag/bus.d.ts.map +1 -0
  33. package/dist/adiag/bus.js +225 -0
  34. package/dist/adiag/bus.js.map +1 -0
  35. package/dist/adiag/index.d.ts +3 -0
  36. package/dist/adiag/index.d.ts.map +1 -0
  37. package/dist/adiag/index.js +2 -0
  38. package/dist/adiag/index.js.map +1 -0
  39. package/dist/aecs/ComponentSet.d.ts +33 -0
  40. package/dist/aecs/ComponentSet.d.ts.map +1 -0
  41. package/dist/aecs/ComponentSet.js +127 -0
  42. package/dist/aecs/ComponentSet.js.map +1 -0
  43. package/dist/aecs/Entity.d.ts +43 -0
  44. package/dist/aecs/Entity.d.ts.map +1 -0
  45. package/dist/aecs/Entity.js +82 -0
  46. package/dist/aecs/Entity.js.map +1 -0
  47. package/dist/aecs/FloatSet.d.ts +34 -0
  48. package/dist/aecs/FloatSet.d.ts.map +1 -0
  49. package/dist/aecs/FloatSet.js +147 -0
  50. package/dist/aecs/FloatSet.js.map +1 -0
  51. package/dist/aecs/Query.d.ts +90 -0
  52. package/dist/aecs/Query.d.ts.map +1 -0
  53. package/dist/aecs/Query.js +304 -0
  54. package/dist/aecs/Query.js.map +1 -0
  55. package/dist/aecs/index.d.ts +6 -0
  56. package/dist/aecs/index.d.ts.map +1 -0
  57. package/dist/aecs/index.js +6 -0
  58. package/dist/aecs/index.js.map +1 -0
  59. package/dist/aecs/join.d.ts +2 -0
  60. package/dist/aecs/join.d.ts.map +1 -0
  61. package/dist/aecs/join.js +2 -0
  62. package/dist/aecs/join.js.map +1 -0
  63. package/dist/alm/constants.d.ts +11 -0
  64. package/dist/alm/constants.d.ts.map +1 -0
  65. package/dist/alm/constants.js +17 -0
  66. package/dist/alm/constants.js.map +1 -0
  67. package/dist/alm/index.d.ts +9 -0
  68. package/dist/alm/index.d.ts.map +1 -0
  69. package/dist/alm/index.js +12 -0
  70. package/dist/alm/index.js.map +1 -0
  71. package/dist/alm/mat3.d.ts +63 -0
  72. package/dist/alm/mat3.d.ts.map +1 -0
  73. package/dist/alm/mat3.js +393 -0
  74. package/dist/alm/mat3.js.map +1 -0
  75. package/dist/alm/mat4.d.ts +157 -0
  76. package/dist/alm/mat4.d.ts.map +1 -0
  77. package/dist/alm/mat4.js +1448 -0
  78. package/dist/alm/mat4.js.map +1 -0
  79. package/dist/alm/quat.d.ts +89 -0
  80. package/dist/alm/quat.d.ts.map +1 -0
  81. package/dist/alm/quat.js +543 -0
  82. package/dist/alm/quat.js.map +1 -0
  83. package/dist/alm/spatial.d.ts +102 -0
  84. package/dist/alm/spatial.d.ts.map +1 -0
  85. package/dist/alm/spatial.js +389 -0
  86. package/dist/alm/spatial.js.map +1 -0
  87. package/dist/alm/vec2.d.ts +97 -0
  88. package/dist/alm/vec2.d.ts.map +1 -0
  89. package/dist/alm/vec2.js +369 -0
  90. package/dist/alm/vec2.js.map +1 -0
  91. package/dist/alm/vec3.d.ts +117 -0
  92. package/dist/alm/vec3.d.ts.map +1 -0
  93. package/dist/alm/vec3.js +547 -0
  94. package/dist/alm/vec3.js.map +1 -0
  95. package/dist/alm/vec4.d.ts +95 -0
  96. package/dist/alm/vec4.d.ts.map +1 -0
  97. package/dist/alm/vec4.js +452 -0
  98. package/dist/alm/vec4.js.map +1 -0
  99. package/dist/atempo/cadence.d.ts +58 -0
  100. package/dist/atempo/cadence.d.ts.map +1 -0
  101. package/dist/atempo/cadence.js +110 -0
  102. package/dist/atempo/cadence.js.map +1 -0
  103. package/dist/atempo/clip.d.ts +37 -0
  104. package/dist/atempo/clip.d.ts.map +1 -0
  105. package/dist/atempo/clip.js +92 -0
  106. package/dist/atempo/clip.js.map +1 -0
  107. package/dist/atempo/curve.d.ts +6 -0
  108. package/dist/atempo/curve.d.ts.map +1 -0
  109. package/dist/atempo/curve.js +2 -0
  110. package/dist/atempo/curve.js.map +1 -0
  111. package/dist/atempo/curves/bezier.d.ts +7 -0
  112. package/dist/atempo/curves/bezier.d.ts.map +1 -0
  113. package/dist/atempo/curves/bezier.js +46 -0
  114. package/dist/atempo/curves/bezier.js.map +1 -0
  115. package/dist/atempo/curves/bounce.d.ts +6 -0
  116. package/dist/atempo/curves/bounce.d.ts.map +1 -0
  117. package/dist/atempo/curves/bounce.js +22 -0
  118. package/dist/atempo/curves/bounce.js.map +1 -0
  119. package/dist/atempo/curves/cubic.d.ts +14 -0
  120. package/dist/atempo/curves/cubic.d.ts.map +1 -0
  121. package/dist/atempo/curves/cubic.js +22 -0
  122. package/dist/atempo/curves/cubic.js.map +1 -0
  123. package/dist/atempo/curves/elastic.d.ts +6 -0
  124. package/dist/atempo/curves/elastic.d.ts.map +1 -0
  125. package/dist/atempo/curves/elastic.js +12 -0
  126. package/dist/atempo/curves/elastic.js.map +1 -0
  127. package/dist/atempo/curves/expo.d.ts +14 -0
  128. package/dist/atempo/curves/expo.d.ts.map +1 -0
  129. package/dist/atempo/curves/expo.js +26 -0
  130. package/dist/atempo/curves/expo.js.map +1 -0
  131. package/dist/atempo/curves/holdSnap.d.ts +6 -0
  132. package/dist/atempo/curves/holdSnap.d.ts.map +1 -0
  133. package/dist/atempo/curves/holdSnap.js +15 -0
  134. package/dist/atempo/curves/holdSnap.js.map +1 -0
  135. package/dist/atempo/curves/index.d.ts +14 -0
  136. package/dist/atempo/curves/index.d.ts.map +1 -0
  137. package/dist/atempo/curves/index.js +14 -0
  138. package/dist/atempo/curves/index.js.map +1 -0
  139. package/dist/atempo/curves/linear.d.ts +6 -0
  140. package/dist/atempo/curves/linear.d.ts.map +1 -0
  141. package/dist/atempo/curves/linear.js +5 -0
  142. package/dist/atempo/curves/linear.js.map +1 -0
  143. package/dist/atempo/curves/overshoot.d.ts +6 -0
  144. package/dist/atempo/curves/overshoot.d.ts.map +1 -0
  145. package/dist/atempo/curves/overshoot.js +16 -0
  146. package/dist/atempo/curves/overshoot.js.map +1 -0
  147. package/dist/atempo/curves/quad.d.ts +14 -0
  148. package/dist/atempo/curves/quad.d.ts.map +1 -0
  149. package/dist/atempo/curves/quad.js +22 -0
  150. package/dist/atempo/curves/quad.js.map +1 -0
  151. package/dist/atempo/curves/step.d.ts +6 -0
  152. package/dist/atempo/curves/step.d.ts.map +1 -0
  153. package/dist/atempo/curves/step.js +11 -0
  154. package/dist/atempo/curves/step.js.map +1 -0
  155. package/dist/atempo/index.d.ts +17 -0
  156. package/dist/atempo/index.d.ts.map +1 -0
  157. package/dist/atempo/index.js +18 -0
  158. package/dist/atempo/index.js.map +1 -0
  159. package/dist/atempo/phase.d.ts +66 -0
  160. package/dist/atempo/phase.d.ts.map +1 -0
  161. package/dist/atempo/phase.js +121 -0
  162. package/dist/atempo/phase.js.map +1 -0
  163. package/dist/atempo/spring.d.ts +20 -0
  164. package/dist/atempo/spring.d.ts.map +1 -0
  165. package/dist/atempo/spring.js +71 -0
  166. package/dist/atempo/spring.js.map +1 -0
  167. package/dist/atempo/track.d.ts +69 -0
  168. package/dist/atempo/track.d.ts.map +1 -0
  169. package/dist/atempo/track.js +184 -0
  170. package/dist/atempo/track.js.map +1 -0
  171. package/dist/atempo/tracks/color.d.ts +20 -0
  172. package/dist/atempo/tracks/color.d.ts.map +1 -0
  173. package/dist/atempo/tracks/color.js +52 -0
  174. package/dist/atempo/tracks/color.js.map +1 -0
  175. package/dist/atempo/tracks/float.d.ts +9 -0
  176. package/dist/atempo/tracks/float.d.ts.map +1 -0
  177. package/dist/atempo/tracks/float.js +13 -0
  178. package/dist/atempo/tracks/float.js.map +1 -0
  179. package/dist/atempo/tracks/index.d.ts +8 -0
  180. package/dist/atempo/tracks/index.d.ts.map +1 -0
  181. package/dist/atempo/tracks/index.js +8 -0
  182. package/dist/atempo/tracks/index.js.map +1 -0
  183. package/dist/atempo/tracks/quat.d.ts +16 -0
  184. package/dist/atempo/tracks/quat.d.ts.map +1 -0
  185. package/dist/atempo/tracks/quat.js +72 -0
  186. package/dist/atempo/tracks/quat.js.map +1 -0
  187. package/dist/atempo/tracks/vec.d.ts +11 -0
  188. package/dist/atempo/tracks/vec.d.ts.map +1 -0
  189. package/dist/atempo/tracks/vec.js +27 -0
  190. package/dist/atempo/tracks/vec.js.map +1 -0
  191. package/dist/awasm/abi/index.d.ts +4 -0
  192. package/dist/awasm/abi/index.d.ts.map +1 -0
  193. package/dist/awasm/abi/index.js +4 -0
  194. package/dist/awasm/abi/index.js.map +1 -0
  195. package/dist/awasm/abi/layout.d.ts +40 -0
  196. package/dist/awasm/abi/layout.d.ts.map +1 -0
  197. package/dist/awasm/abi/layout.js +100 -0
  198. package/dist/awasm/abi/layout.js.map +1 -0
  199. package/dist/awasm/abi/slice.d.ts +28 -0
  200. package/dist/awasm/abi/slice.d.ts.map +1 -0
  201. package/dist/awasm/abi/slice.js +68 -0
  202. package/dist/awasm/abi/slice.js.map +1 -0
  203. package/dist/awasm/abi/string-buffer.d.ts +23 -0
  204. package/dist/awasm/abi/string-buffer.d.ts.map +1 -0
  205. package/dist/awasm/abi/string-buffer.js +52 -0
  206. package/dist/awasm/abi/string-buffer.js.map +1 -0
  207. package/dist/awasm/index.d.ts +5 -0
  208. package/dist/awasm/index.d.ts.map +1 -0
  209. package/dist/awasm/index.js +8 -0
  210. package/dist/awasm/index.js.map +1 -0
  211. package/dist/awasm/memory/block-pool.d.ts +31 -0
  212. package/dist/awasm/memory/block-pool.d.ts.map +1 -0
  213. package/dist/awasm/memory/block-pool.js +98 -0
  214. package/dist/awasm/memory/block-pool.js.map +1 -0
  215. package/dist/awasm/memory/index.d.ts +5 -0
  216. package/dist/awasm/memory/index.d.ts.map +1 -0
  217. package/dist/awasm/memory/index.js +5 -0
  218. package/dist/awasm/memory/index.js.map +1 -0
  219. package/dist/awasm/memory/linear-arena.d.ts +36 -0
  220. package/dist/awasm/memory/linear-arena.d.ts.map +1 -0
  221. package/dist/awasm/memory/linear-arena.js +94 -0
  222. package/dist/awasm/memory/linear-arena.js.map +1 -0
  223. package/dist/awasm/memory/memory-view.d.ts +51 -0
  224. package/dist/awasm/memory/memory-view.d.ts.map +1 -0
  225. package/dist/awasm/memory/memory-view.js +110 -0
  226. package/dist/awasm/memory/memory-view.js.map +1 -0
  227. package/dist/awasm/memory/wasm-memory.d.ts +40 -0
  228. package/dist/awasm/memory/wasm-memory.d.ts.map +1 -0
  229. package/dist/awasm/memory/wasm-memory.js +88 -0
  230. package/dist/awasm/memory/wasm-memory.js.map +1 -0
  231. package/dist/awasm/runtime/host-bridge.d.ts +30 -0
  232. package/dist/awasm/runtime/host-bridge.d.ts.map +1 -0
  233. package/dist/awasm/runtime/host-bridge.js +57 -0
  234. package/dist/awasm/runtime/host-bridge.js.map +1 -0
  235. package/dist/awasm/runtime/index.d.ts +5 -0
  236. package/dist/awasm/runtime/index.d.ts.map +1 -0
  237. package/dist/awasm/runtime/index.js +5 -0
  238. package/dist/awasm/runtime/index.js.map +1 -0
  239. package/dist/awasm/runtime/module-inspector.d.ts +32 -0
  240. package/dist/awasm/runtime/module-inspector.d.ts.map +1 -0
  241. package/dist/awasm/runtime/module-inspector.js +43 -0
  242. package/dist/awasm/runtime/module-inspector.js.map +1 -0
  243. package/dist/awasm/runtime/module-loader.d.ts +17 -0
  244. package/dist/awasm/runtime/module-loader.d.ts.map +1 -0
  245. package/dist/awasm/runtime/module-loader.js +99 -0
  246. package/dist/awasm/runtime/module-loader.js.map +1 -0
  247. package/dist/awasm/runtime/wasm-instance.d.ts +25 -0
  248. package/dist/awasm/runtime/wasm-instance.d.ts.map +1 -0
  249. package/dist/awasm/runtime/wasm-instance.js +60 -0
  250. package/dist/awasm/runtime/wasm-instance.js.map +1 -0
  251. package/dist/awasm/thread/atomic-queue.d.ts +33 -0
  252. package/dist/awasm/thread/atomic-queue.d.ts.map +1 -0
  253. package/dist/awasm/thread/atomic-queue.js +78 -0
  254. package/dist/awasm/thread/atomic-queue.js.map +1 -0
  255. package/dist/awasm/thread/index.d.ts +4 -0
  256. package/dist/awasm/thread/index.d.ts.map +1 -0
  257. package/dist/awasm/thread/index.js +4 -0
  258. package/dist/awasm/thread/index.js.map +1 -0
  259. package/dist/awasm/thread/shared-memory.d.ts +38 -0
  260. package/dist/awasm/thread/shared-memory.d.ts.map +1 -0
  261. package/dist/awasm/thread/shared-memory.js +74 -0
  262. package/dist/awasm/thread/shared-memory.js.map +1 -0
  263. package/dist/awasm/thread/worker-pool.d.ts +43 -0
  264. package/dist/awasm/thread/worker-pool.d.ts.map +1 -0
  265. package/dist/awasm/thread/worker-pool.js +118 -0
  266. package/dist/awasm/thread/worker-pool.js.map +1 -0
  267. package/dist/awgpu/binding.d.ts +108 -0
  268. package/dist/awgpu/binding.d.ts.map +1 -0
  269. package/dist/awgpu/binding.js +251 -0
  270. package/dist/awgpu/binding.js.map +1 -0
  271. package/dist/awgpu/device.d.ts +68 -0
  272. package/dist/awgpu/device.d.ts.map +1 -0
  273. package/dist/awgpu/device.js +150 -0
  274. package/dist/awgpu/device.js.map +1 -0
  275. package/dist/awgpu/graph.d.ts +77 -0
  276. package/dist/awgpu/graph.d.ts.map +1 -0
  277. package/dist/awgpu/graph.js +288 -0
  278. package/dist/awgpu/graph.js.map +1 -0
  279. package/dist/awgpu/index.d.ts +10 -0
  280. package/dist/awgpu/index.d.ts.map +1 -0
  281. package/dist/awgpu/index.js +19 -0
  282. package/dist/awgpu/index.js.map +1 -0
  283. package/dist/awgpu/memory.d.ts +231 -0
  284. package/dist/awgpu/memory.d.ts.map +1 -0
  285. package/dist/awgpu/memory.js +547 -0
  286. package/dist/awgpu/memory.js.map +1 -0
  287. package/dist/awgpu/pipeline.d.ts +114 -0
  288. package/dist/awgpu/pipeline.d.ts.map +1 -0
  289. package/dist/awgpu/pipeline.js +335 -0
  290. package/dist/awgpu/pipeline.js.map +1 -0
  291. package/dist/awgpu/sequence.d.ts +83 -0
  292. package/dist/awgpu/sequence.d.ts.map +1 -0
  293. package/dist/awgpu/sequence.js +273 -0
  294. package/dist/awgpu/sequence.js.map +1 -0
  295. package/dist/awgpu/state.d.ts +27 -0
  296. package/dist/awgpu/state.d.ts.map +1 -0
  297. package/dist/awgpu/state.js +43 -0
  298. package/dist/awgpu/state.js.map +1 -0
  299. package/dist/awgpu/stream.d.ts +57 -0
  300. package/dist/awgpu/stream.d.ts.map +1 -0
  301. package/dist/awgpu/stream.js +139 -0
  302. package/dist/awgpu/stream.js.map +1 -0
  303. package/dist/awgpu/target.d.ts +98 -0
  304. package/dist/awgpu/target.d.ts.map +1 -0
  305. package/dist/awgpu/target.js +357 -0
  306. package/dist/awgpu/target.js.map +1 -0
  307. package/dist/awgpu_old/buffer.d.ts +78 -0
  308. package/dist/awgpu_old/buffer.d.ts.map +1 -0
  309. package/dist/awgpu_old/buffer.js +220 -0
  310. package/dist/awgpu_old/buffer.js.map +1 -0
  311. package/dist/awgpu_old/device.d.ts +69 -0
  312. package/dist/awgpu_old/device.d.ts.map +1 -0
  313. package/dist/awgpu_old/device.js +121 -0
  314. package/dist/awgpu_old/device.js.map +1 -0
  315. package/dist/awgpu_old/frame.d.ts +17 -0
  316. package/dist/awgpu_old/frame.d.ts.map +1 -0
  317. package/dist/awgpu_old/frame.js +29 -0
  318. package/dist/awgpu_old/frame.js.map +1 -0
  319. package/dist/awgpu_old/index.d.ts +8 -0
  320. package/dist/awgpu_old/index.d.ts.map +1 -0
  321. package/dist/awgpu_old/index.js +18 -0
  322. package/dist/awgpu_old/index.js.map +1 -0
  323. package/dist/awgpu_old/layout.d.ts +70 -0
  324. package/dist/awgpu_old/layout.d.ts.map +1 -0
  325. package/dist/awgpu_old/layout.js +137 -0
  326. package/dist/awgpu_old/layout.js.map +1 -0
  327. package/dist/awgpu_old/pass.d.ts +97 -0
  328. package/dist/awgpu_old/pass.d.ts.map +1 -0
  329. package/dist/awgpu_old/pass.js +302 -0
  330. package/dist/awgpu_old/pass.js.map +1 -0
  331. package/dist/awgpu_old/pipeline.d.ts +73 -0
  332. package/dist/awgpu_old/pipeline.d.ts.map +1 -0
  333. package/dist/awgpu_old/pipeline.js +226 -0
  334. package/dist/awgpu_old/pipeline.js.map +1 -0
  335. package/dist/awgpu_old/target.d.ts +186 -0
  336. package/dist/awgpu_old/target.d.ts.map +1 -0
  337. package/dist/awgpu_old/target.js +428 -0
  338. package/dist/awgpu_old/target.js.map +1 -0
  339. package/dist/index.d.ts +10 -0
  340. package/dist/index.d.ts.map +1 -0
  341. package/dist/index.js +10 -0
  342. package/dist/index.js.map +1 -0
  343. package/package.json +106 -0
@@ -0,0 +1,225 @@
1
+ // ==================== Bus =====================
2
+ export class Bus {
3
+ state = {}; // shared state for all diag
4
+ maxHistory;
5
+ #buffer;
6
+ #head = 0;
7
+ #count = 0;
8
+ _listeners = new Map();
9
+ static TYPE_OK = "ok";
10
+ static TYPE_ERR = "err";
11
+ static TYPE_WARN = "warn";
12
+ static TYPE_INFO = "info";
13
+ constructor(maxHistory = 1000) {
14
+ this.maxHistory = maxHistory;
15
+ this.#buffer = new Array(maxHistory).fill(null);
16
+ }
17
+ get results() {
18
+ if (this.#count === 0)
19
+ return [];
20
+ const res = new Array(this.#count);
21
+ const start = (this.#head - this.#count + this.maxHistory) % this.maxHistory;
22
+ for (let i = 0; i < this.#count; i++) {
23
+ res[i] = this.#buffer[(start + i) % this.maxHistory];
24
+ }
25
+ return res;
26
+ }
27
+ set results(items) {
28
+ this.clear();
29
+ for (let i = 0; i < items.length; i++) {
30
+ const item = items[i];
31
+ this.#add(item.type, item);
32
+ }
33
+ }
34
+ ok(args = {}) { return this.#add(Bus.TYPE_OK, args); }
35
+ err(args = {}) { return this.#add(Bus.TYPE_ERR, args); }
36
+ warn(args = {}) { return this.#add(Bus.TYPE_WARN, args); }
37
+ info(args = {}) { return this.#add(Bus.TYPE_INFO, args); }
38
+ /**
39
+ * Subscribes to diagnostic records of specified category type, or '*' for all records.
40
+ * Returns an unsubscribe function.
41
+ */
42
+ on(type, listener) {
43
+ let set = this._listeners.get(type);
44
+ if (!set) {
45
+ set = new Set();
46
+ this._listeners.set(type, set);
47
+ }
48
+ set.add(listener);
49
+ return () => {
50
+ set?.delete(listener);
51
+ if (set && set.size === 0)
52
+ this._listeners.delete(type);
53
+ };
54
+ }
55
+ onError(listener) {
56
+ return this.on(Bus.TYPE_ERR, listener);
57
+ }
58
+ onWarn(listener) {
59
+ return this.on(Bus.TYPE_WARN, listener);
60
+ }
61
+ #add(type, { code = "", raw = "", data = null, ref = null } = {}) {
62
+ const item = { type, code, raw, data, ref };
63
+ this.#buffer[this.#head] = item;
64
+ this.#head = (this.#head + 1) % this.maxHistory;
65
+ if (this.#count < this.maxHistory) {
66
+ this.#count++;
67
+ }
68
+ const typeListeners = this._listeners.get(type);
69
+ if (typeListeners) {
70
+ for (const fn of typeListeners)
71
+ fn(item);
72
+ }
73
+ const allListeners = this._listeners.get("*");
74
+ if (allListeners) {
75
+ for (const fn of allListeners)
76
+ fn(item);
77
+ }
78
+ return item;
79
+ }
80
+ clear() {
81
+ this.#head = 0;
82
+ this.#count = 0;
83
+ this.#buffer.fill(null);
84
+ }
85
+ last() {
86
+ if (this.#count === 0)
87
+ return null;
88
+ const lastIdx = (this.#head - 1 + this.maxHistory) % this.maxHistory;
89
+ return this.#buffer[lastIdx];
90
+ }
91
+ lastErr() {
92
+ for (let i = 0; i < this.#count; i++) {
93
+ const idx = (this.#head - 1 - i + this.maxHistory) % this.maxHistory;
94
+ const item = this.#buffer[idx];
95
+ if (item && item.type === Bus.TYPE_ERR) {
96
+ return item;
97
+ }
98
+ }
99
+ return null;
100
+ }
101
+ allOk() {
102
+ for (let i = 0; i < this.#count; i++) {
103
+ const idx = (this.#head - 1 - i + this.maxHistory) % this.maxHistory;
104
+ const item = this.#buffer[idx];
105
+ if (item && item.type !== Bus.TYPE_OK)
106
+ return false;
107
+ }
108
+ return true;
109
+ }
110
+ _findType(type) {
111
+ if (this.#count === 0)
112
+ return [];
113
+ const res = [];
114
+ const start = (this.#head - this.#count + this.maxHistory) % this.maxHistory;
115
+ for (let i = 0; i < this.#count; i++) {
116
+ const item = this.#buffer[(start + i) % this.maxHistory];
117
+ if (item && item.type === type) {
118
+ res.push(item);
119
+ }
120
+ }
121
+ return res;
122
+ }
123
+ findOk() {
124
+ return this._findType(Bus.TYPE_OK);
125
+ }
126
+ hasErrs() {
127
+ return this.lastErr() !== null;
128
+ }
129
+ findErrs() {
130
+ return this._findType(Bus.TYPE_ERR);
131
+ }
132
+ hasWarns() {
133
+ for (let i = 0; i < this.#count; i++) {
134
+ const idx = (this.#head - 1 - i + this.maxHistory) % this.maxHistory;
135
+ const item = this.#buffer[idx];
136
+ if (item && item.type === Bus.TYPE_WARN)
137
+ return true;
138
+ }
139
+ return false;
140
+ }
141
+ findWarns() {
142
+ return this._findType(Bus.TYPE_WARN);
143
+ }
144
+ hasInfos() {
145
+ for (let i = 0; i < this.#count; i++) {
146
+ const idx = (this.#head - 1 - i + this.maxHistory) % this.maxHistory;
147
+ const item = this.#buffer[idx];
148
+ if (item && item.type === Bus.TYPE_INFO)
149
+ return true;
150
+ }
151
+ return false;
152
+ }
153
+ findInfos() {
154
+ return this._findType(Bus.TYPE_INFO);
155
+ }
156
+ /**
157
+ * Extracts the causal reference chain starting from `result` in order of causality.
158
+ */
159
+ static getCauseChain(result) {
160
+ const chain = [];
161
+ let curr = result;
162
+ const seen = new Set();
163
+ while (curr && !seen.has(curr)) {
164
+ seen.add(curr);
165
+ chain.push(curr);
166
+ curr = curr.ref;
167
+ }
168
+ return chain;
169
+ }
170
+ /*
171
+ Replace all $key$ with data[key] in the message.
172
+ Support dot nesting: $key.subkey$ -> data.key.subkey
173
+ */
174
+ static compileMsg(raw = "", data = {}) {
175
+ if (typeof raw !== "string" || raw.length === 0)
176
+ return raw;
177
+ if (data == null || typeof data !== "object")
178
+ return raw;
179
+ return raw.replace(/\$([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\$/g, (match, path) => {
180
+ if (data == null || typeof data !== "object")
181
+ return match;
182
+ let value = data;
183
+ for (const key of path.split(".")) {
184
+ if (value == null || typeof value !== "object" || !(key in value))
185
+ return match;
186
+ value = value[key];
187
+ }
188
+ if (value instanceof Error)
189
+ return value.message;
190
+ if (typeof value === "string")
191
+ return value;
192
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint")
193
+ return String(value);
194
+ if (value == null)
195
+ return String(value);
196
+ if (typeof value === "function")
197
+ return value.name ? `[Function ${value.name}]` : "[Function]";
198
+ try {
199
+ return JSON.stringify(value);
200
+ }
201
+ catch {
202
+ return String(value);
203
+ }
204
+ });
205
+ }
206
+ /**
207
+ * Formats diagnostic result into human-readable string with causal chain details.
208
+ */
209
+ static formatResult(result) {
210
+ const compiled = Bus.resultToMsg(result);
211
+ const prefix = `[${result.type.toUpperCase()}]${result.code ? ` (${result.code})` : ""}: `;
212
+ return `${prefix}${compiled || result.raw || "No message"}`;
213
+ }
214
+ static resultToMsg(result) {
215
+ return Bus.compileMsg(result.raw, result.data);
216
+ }
217
+ /**
218
+ * Compiles full message including causal chain explanations
219
+ */
220
+ static resultToChainMsg(result) {
221
+ const chain = Bus.getCauseChain(result);
222
+ return chain.map((r, i) => `${i > 0 ? " -> " : ""}${Bus.resultToMsg(r) || r.code || r.type}`).join("\n");
223
+ }
224
+ }
225
+ //# sourceMappingURL=bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bus.js","sourceRoot":"","sources":["../../adiag/bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Bus } from "./bus.js";
2
+ export type { Result, AddArgs, Type, } from "./bus.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../adiag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EACR,MAAM,EACN,OAAO,EACP,IAAI,GACP,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Bus } from "./bus.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../adiag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type Entity } from "./Entity.js";
2
+ /**
3
+ * Contiguous component set indexed by Entity.
4
+ */
5
+ export declare class ComponentSet<T> implements Iterable<[Entity, T]> {
6
+ readonly dense: T[];
7
+ readonly entities: Entity[];
8
+ readonly sparse: number[];
9
+ get size(): number;
10
+ has(entity: Entity): boolean;
11
+ get(entity: Entity): T | undefined;
12
+ set(entity: Entity, value: T): this;
13
+ /**
14
+ * Returns existing component if present, or sets and returns defaultValue.
15
+ */
16
+ getOrAdd(entity: Entity, valueOrFactory: T | (() => T)): T;
17
+ /**
18
+ * Ensures component exists for entity. If absent, sets initial value.
19
+ */
20
+ ensure(entity: Entity, value: T): T;
21
+ delete(entity: Entity): boolean;
22
+ /**
23
+ * Swaps component values between two entities.
24
+ */
25
+ swap(entityA: Entity, entityB: Entity): boolean;
26
+ clear(): void;
27
+ [Symbol.iterator](): Iterator<[Entity, T]>;
28
+ entries(): IterableIterator<[Entity, T]>;
29
+ keys(): IterableIterator<Entity>;
30
+ values(): IterableIterator<T>;
31
+ each(fn: (entity: Entity, value: T) => void): void;
32
+ }
33
+ //# sourceMappingURL=ComponentSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentSet.d.ts","sourceRoot":"","sources":["../../aecs/ComponentSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAM;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAE/B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAM5B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IASlC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAenC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;IAQ1D;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAInC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAsB/B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAe/C,KAAK,IAAI,IAAI;IAMZ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAO1C,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAOxC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAOhC,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAO9B,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;CAMrD"}
@@ -0,0 +1,127 @@
1
+ import { entityIndex } from "./Entity.js";
2
+ /**
3
+ * Contiguous component set indexed by Entity.
4
+ */
5
+ export class ComponentSet {
6
+ dense = [];
7
+ entities = [];
8
+ sparse = [];
9
+ get size() {
10
+ return this.dense.length;
11
+ }
12
+ has(entity) {
13
+ const slot = entityIndex(entity);
14
+ const denseIdx = this.sparse[slot];
15
+ return denseIdx !== undefined && denseIdx >= 0 && denseIdx < this.dense.length && this.entities[denseIdx] === entity;
16
+ }
17
+ get(entity) {
18
+ const slot = entityIndex(entity);
19
+ const denseIdx = this.sparse[slot];
20
+ if (denseIdx !== undefined && denseIdx >= 0 && denseIdx < this.dense.length && this.entities[denseIdx] === entity) {
21
+ return this.dense[denseIdx];
22
+ }
23
+ return undefined;
24
+ }
25
+ set(entity, value) {
26
+ const slot = entityIndex(entity);
27
+ const denseIdx = this.sparse[slot];
28
+ if (denseIdx !== undefined && denseIdx >= 0 && denseIdx < this.dense.length && this.entities[denseIdx] === entity) {
29
+ this.dense[denseIdx] = value;
30
+ return this;
31
+ }
32
+ const newIdx = this.dense.length;
33
+ this.dense.push(value);
34
+ this.entities.push(entity);
35
+ this.sparse[slot] = newIdx;
36
+ return this;
37
+ }
38
+ /**
39
+ * Returns existing component if present, or sets and returns defaultValue.
40
+ */
41
+ getOrAdd(entity, valueOrFactory) {
42
+ const existing = this.get(entity);
43
+ if (existing !== undefined)
44
+ return existing;
45
+ const val = typeof valueOrFactory === "function" ? valueOrFactory() : valueOrFactory;
46
+ this.set(entity, val);
47
+ return val;
48
+ }
49
+ /**
50
+ * Ensures component exists for entity. If absent, sets initial value.
51
+ */
52
+ ensure(entity, value) {
53
+ return this.getOrAdd(entity, value);
54
+ }
55
+ delete(entity) {
56
+ const slot = entityIndex(entity);
57
+ const denseIdx = this.sparse[slot];
58
+ if (denseIdx === undefined || denseIdx < 0 || denseIdx >= this.dense.length || this.entities[denseIdx] !== entity) {
59
+ return false;
60
+ }
61
+ const lastIdx = this.dense.length - 1;
62
+ if (denseIdx < lastIdx) {
63
+ const lastEntity = this.entities[lastIdx];
64
+ const lastVal = this.dense[lastIdx];
65
+ this.dense[denseIdx] = lastVal;
66
+ this.entities[denseIdx] = lastEntity;
67
+ this.sparse[entityIndex(lastEntity)] = denseIdx;
68
+ }
69
+ this.dense.pop();
70
+ this.entities.pop();
71
+ this.sparse[slot] = -1;
72
+ return true;
73
+ }
74
+ /**
75
+ * Swaps component values between two entities.
76
+ */
77
+ swap(entityA, entityB) {
78
+ const slotA = entityIndex(entityA);
79
+ const slotB = entityIndex(entityB);
80
+ const idxA = this.sparse[slotA];
81
+ const idxB = this.sparse[slotB];
82
+ if (idxA === undefined || idxA < 0 || idxA >= this.dense.length || this.entities[idxA] !== entityA)
83
+ return false;
84
+ if (idxB === undefined || idxB < 0 || idxB >= this.dense.length || this.entities[idxB] !== entityB)
85
+ return false;
86
+ const tmp = this.dense[idxA];
87
+ this.dense[idxA] = this.dense[idxB];
88
+ this.dense[idxB] = tmp;
89
+ return true;
90
+ }
91
+ clear() {
92
+ this.dense.length = 0;
93
+ this.entities.length = 0;
94
+ this.sparse.length = 0;
95
+ }
96
+ *[Symbol.iterator]() {
97
+ const len = this.dense.length;
98
+ for (let i = 0; i < len; i++) {
99
+ yield [this.entities[i], this.dense[i]];
100
+ }
101
+ }
102
+ *entries() {
103
+ const len = this.dense.length;
104
+ for (let i = 0; i < len; i++) {
105
+ yield [this.entities[i], this.dense[i]];
106
+ }
107
+ }
108
+ *keys() {
109
+ const len = this.dense.length;
110
+ for (let i = 0; i < len; i++) {
111
+ yield this.entities[i];
112
+ }
113
+ }
114
+ *values() {
115
+ const len = this.dense.length;
116
+ for (let i = 0; i < len; i++) {
117
+ yield this.dense[i];
118
+ }
119
+ }
120
+ each(fn) {
121
+ const len = this.dense.length;
122
+ for (let i = 0; i < len; i++) {
123
+ fn(this.entities[i], this.dense[i]);
124
+ }
125
+ }
126
+ }
127
+ //# sourceMappingURL=ComponentSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentSet.js","sourceRoot":"","sources":["../../aecs/ComponentSet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export type Entity = number;
2
+ export declare const ENTITY_INDEX_BITS = 20;
3
+ export declare const ENTITY_INDEX_MASK = 1048575;
4
+ export declare const ENTITY_GEN_BITS = 12;
5
+ export declare const ENTITY_GEN_MASK = 4095;
6
+ /** Extracts slot index from entity identifier. */
7
+ export declare function entityIndex(entity: Entity): number;
8
+ /** Extracts generation counter from entity identifier. */
9
+ export declare function entityGeneration(entity: Entity): number;
10
+ /** Composes an entity identifier from slot index and generation. */
11
+ export declare function makeEntity(index: number, generation: number): Entity;
12
+ /**
13
+ * Generational entity identifier allocator.
14
+ */
15
+ export declare class EntityPool {
16
+ private _nextIndex;
17
+ private readonly _generations;
18
+ private readonly _free;
19
+ /** Total currently active living entities. */
20
+ get aliveCount(): number;
21
+ /** Total entity slots allocated since creation. */
22
+ get totalAllocated(): number;
23
+ /**
24
+ * Allocates an entity identifier.
25
+ * Reuses recycled slot indices with incremented generation if available.
26
+ */
27
+ spawn(): Entity;
28
+ /**
29
+ * Destroys an entity and reclaims its slot for reuse.
30
+ * Increments slot generation to invalidate outstanding references.
31
+ * Returns false if entity is already destroyed or invalid.
32
+ */
33
+ destroy(entity: Entity): boolean;
34
+ /**
35
+ * Verifies whether entity identifier is currently allocated and matches active generation.
36
+ */
37
+ isAlive(entity: Entity): boolean;
38
+ /**
39
+ * Resets pool to initial state, invalidating all issued entities.
40
+ */
41
+ clear(): void;
42
+ }
43
+ //# sourceMappingURL=Entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../aecs/Entity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,UAAU,CAAC;AACzC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,OAAQ,CAAC;AAErC,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAEtC,8CAA8C;IAC9C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,mDAAmD;IACnD,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;;OAGG;IACH,KAAK,IAAI,MAAM;IAYf;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAehC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAMhC;;OAEG;IACH,KAAK,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,82 @@
1
+ export const ENTITY_INDEX_BITS = 20;
2
+ export const ENTITY_INDEX_MASK = 0xFFFFF; // 1,048,575 slots
3
+ export const ENTITY_GEN_BITS = 12;
4
+ export const ENTITY_GEN_MASK = 0xFFF; // 4,095 generations
5
+ /** Extracts slot index from entity identifier. */
6
+ export function entityIndex(entity) {
7
+ return (entity & ENTITY_INDEX_MASK) >>> 0;
8
+ }
9
+ /** Extracts generation counter from entity identifier. */
10
+ export function entityGeneration(entity) {
11
+ return ((entity >>> ENTITY_INDEX_BITS) & ENTITY_GEN_MASK) >>> 0;
12
+ }
13
+ /** Composes an entity identifier from slot index and generation. */
14
+ export function makeEntity(index, generation) {
15
+ return ((((generation & ENTITY_GEN_MASK) << ENTITY_INDEX_BITS) | (index & ENTITY_INDEX_MASK)) >>> 0);
16
+ }
17
+ /**
18
+ * Generational entity identifier allocator.
19
+ */
20
+ export class EntityPool {
21
+ _nextIndex = 1;
22
+ _generations = [0];
23
+ _free = [];
24
+ /** Total currently active living entities. */
25
+ get aliveCount() {
26
+ return (this._nextIndex - 1) - this._free.length;
27
+ }
28
+ /** Total entity slots allocated since creation. */
29
+ get totalAllocated() {
30
+ return this._nextIndex - 1;
31
+ }
32
+ /**
33
+ * Allocates an entity identifier.
34
+ * Reuses recycled slot indices with incremented generation if available.
35
+ */
36
+ spawn() {
37
+ if (this._free.length > 0) {
38
+ const index = this._free.pop();
39
+ const gen = this._generations[index];
40
+ return makeEntity(index, gen);
41
+ }
42
+ const index = this._nextIndex++;
43
+ this._generations[index] = 1;
44
+ return makeEntity(index, 1);
45
+ }
46
+ /**
47
+ * Destroys an entity and reclaims its slot for reuse.
48
+ * Increments slot generation to invalidate outstanding references.
49
+ * Returns false if entity is already destroyed or invalid.
50
+ */
51
+ destroy(entity) {
52
+ const index = entityIndex(entity);
53
+ const gen = entityGeneration(entity);
54
+ if (index <= 0 || index >= this._nextIndex || this._generations[index] !== gen) {
55
+ return false;
56
+ }
57
+ let nextGen = (gen + 1) & ENTITY_GEN_MASK;
58
+ if (nextGen === 0)
59
+ nextGen = 1;
60
+ this._generations[index] = nextGen;
61
+ this._free.push(index);
62
+ return true;
63
+ }
64
+ /**
65
+ * Verifies whether entity identifier is currently allocated and matches active generation.
66
+ */
67
+ isAlive(entity) {
68
+ const index = entityIndex(entity);
69
+ const gen = entityGeneration(entity);
70
+ return index > 0 && index < this._nextIndex && this._generations[index] === gen;
71
+ }
72
+ /**
73
+ * Resets pool to initial state, invalidating all issued entities.
74
+ */
75
+ clear() {
76
+ this._nextIndex = 1;
77
+ this._free.length = 0;
78
+ this._generations.length = 1;
79
+ this._generations[0] = 0;
80
+ }
81
+ }
82
+ //# sourceMappingURL=Entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../aecs/Entity.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,kBAAkB;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAK,oBAAoB;AAE9D,kDAAkD;AAClD,MAAM,UAAU,WAAW,CAAC,MAAc;IACtC,OAAO,CAAC,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC3C,OAAO,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,UAAkB;IACxD,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzG,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,UAAU;IACX,UAAU,GAAG,CAAC,CAAC;IACN,YAAY,GAAa,CAAC,CAAC,CAAC,CAAC;IAC7B,KAAK,GAAa,EAAE,CAAC;IAEtC,8CAA8C;IAC9C,IAAI,UAAU;QACV,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,mDAAmD;IACnD,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAG,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,MAAc;QAClB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7E,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC;QAC1C,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc;QAClB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACJ"}
@@ -0,0 +1,34 @@
1
+ import { type Entity } from "./Entity.js";
2
+ /**
3
+ * Contiguous Float32Array component storage for high-frequency numeric data.
4
+ */
5
+ export declare class FloatSet implements Iterable<[Entity, Float32Array]> {
6
+ readonly stride: number;
7
+ dense: Float32Array;
8
+ entities: Entity[];
9
+ sparse: number[];
10
+ private _size;
11
+ constructor(stride: number, initialCapacity?: number);
12
+ get size(): number;
13
+ has(entity: Entity): boolean;
14
+ get(entity: Entity): Float32Array | undefined;
15
+ /**
16
+ * Reads a single float component from the entity record without allocating a subarray view.
17
+ */
18
+ getDirect(entity: Entity, componentIndex: number): number | undefined;
19
+ /**
20
+ * Writes a single float component directly into dense memory without allocating an array.
21
+ */
22
+ setDirect(entity: Entity, componentIndex: number, value: number): boolean;
23
+ /**
24
+ * Copies entity float record directly into destination buffer without creating intermediate views.
25
+ */
26
+ copyTo(entity: Entity, dst: Float32Array, dstOffset?: number): boolean;
27
+ set(entity: Entity, values: ArrayLike<number>): this;
28
+ delete(entity: Entity): boolean;
29
+ clear(): void;
30
+ [Symbol.iterator](): Iterator<[Entity, Float32Array]>;
31
+ keys(): IterableIterator<Entity>;
32
+ each(fn: (entity: Entity, data: Float32Array) => void): void;
33
+ }
34
+ //# sourceMappingURL=FloatSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatSet.d.ts","sourceRoot":"","sources":["../../aecs/FloatSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,qBAAa,QAAS,YAAW,QAAQ,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,MAAM,EAAE,MAAM,EAAE,CAAM;IACtB,OAAO,CAAC,KAAK,CAAK;gBAEN,MAAM,EAAE,MAAM,EAAE,eAAe,SAAM;IAMjD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAM5B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAU7C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAWrE;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAYzE;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,SAAI,GAAG,OAAO;IAajE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;IA0BpD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAqB/B,KAAK,IAAI,IAAI;IAMZ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IASrD,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAOjC,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;CAQ/D"}