@vworlds/vecs 1.0.14 → 1.0.16

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 (187) hide show
  1. package/README.md +249 -119
  2. package/dist/component.d.ts +52 -76
  3. package/dist/component.js +60 -45
  4. package/dist/component.js.map +1 -1
  5. package/dist/component_meta.d.ts +98 -0
  6. package/dist/component_meta.js +65 -0
  7. package/dist/component_meta.js.map +1 -0
  8. package/dist/dsl.d.ts +46 -34
  9. package/dist/dsl.js +459 -61
  10. package/dist/dsl.js.map +1 -1
  11. package/dist/entity/entity.base.d.ts +57 -0
  12. package/dist/entity/entity.base.js +81 -0
  13. package/dist/entity/entity.base.js.map +1 -0
  14. package/dist/entity/entity.components.d.ts +117 -0
  15. package/dist/entity/entity.components.js +244 -0
  16. package/dist/entity/entity.components.js.map +1 -0
  17. package/dist/entity/entity.d.ts +35 -0
  18. package/dist/entity/entity.identity.d.ts +8 -0
  19. package/dist/entity/entity.identity.js +15 -0
  20. package/dist/entity/entity.identity.js.map +1 -0
  21. package/dist/entity/entity.js +33 -0
  22. package/dist/entity/entity.js.map +1 -0
  23. package/dist/entity/entity.lifecycle.d.ts +12 -0
  24. package/dist/entity/entity.lifecycle.js +111 -0
  25. package/dist/entity/entity.lifecycle.js.map +1 -0
  26. package/dist/entity/entity.queries.d.ts +3 -0
  27. package/dist/entity/entity.queries.js +33 -0
  28. package/dist/entity/entity.queries.js.map +1 -0
  29. package/dist/entity/entity.relationships.d.ts +9 -0
  30. package/dist/entity/entity.relationships.js +74 -0
  31. package/dist/entity/entity.relationships.js.map +1 -0
  32. package/dist/entity/index.d.ts +2 -0
  33. package/dist/entity/index.js +3 -0
  34. package/dist/entity/index.js.map +1 -0
  35. package/dist/filter.d.ts +27 -8
  36. package/dist/filter.js +33 -18
  37. package/dist/filter.js.map +1 -1
  38. package/dist/index.d.ts +13 -5
  39. package/dist/index.js +12 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/inject.d.ts +80 -0
  42. package/dist/inject.js +270 -0
  43. package/dist/inject.js.map +1 -0
  44. package/dist/module.d.ts +23 -0
  45. package/dist/module.js +17 -0
  46. package/dist/module.js.map +1 -0
  47. package/dist/modules/identity.d.ts +15 -0
  48. package/dist/modules/identity.js +41 -0
  49. package/dist/modules/identity.js.map +1 -0
  50. package/dist/modules/singleton.d.ts +26 -0
  51. package/dist/modules/singleton.js +41 -0
  52. package/dist/modules/singleton.js.map +1 -0
  53. package/dist/package.json +18 -20
  54. package/dist/phase.d.ts +2 -2
  55. package/dist/query/index.d.ts +6 -0
  56. package/dist/query/index.js +5 -0
  57. package/dist/query/index.js.map +1 -0
  58. package/dist/query/query.00.base.d.ts +23 -0
  59. package/dist/query/query.00.base.js +77 -0
  60. package/dist/query/query.00.base.js.map +1 -0
  61. package/dist/query/query.01.reactive.d.ts +7 -0
  62. package/dist/query/query.01.reactive.js +58 -0
  63. package/dist/query/query.01.reactive.js.map +1 -0
  64. package/dist/query/query.02.lifecycle.d.ts +6 -0
  65. package/dist/query/query.02.lifecycle.js +63 -0
  66. package/dist/query/query.02.lifecycle.js.map +1 -0
  67. package/dist/query/query.03.tracking.d.ts +15 -0
  68. package/dist/query/query.03.tracking.js +31 -0
  69. package/dist/query/query.03.tracking.js.map +1 -0
  70. package/dist/query/query.04.callbacks.d.ts +14 -0
  71. package/dist/query/query.04.callbacks.js +65 -0
  72. package/dist/query/query.04.callbacks.js.map +1 -0
  73. package/dist/query/query.05.updates.d.ts +14 -0
  74. package/dist/query/query.05.updates.js +81 -0
  75. package/dist/query/query.05.updates.js.map +1 -0
  76. package/dist/query/query.06.predicate.d.ts +13 -0
  77. package/dist/query/query.06.predicate.js +40 -0
  78. package/dist/query/query.06.predicate.js.map +1 -0
  79. package/dist/query/query.07.groups.d.ts +41 -0
  80. package/dist/query/query.07.groups.js +110 -0
  81. package/dist/query/query.07.groups.js.map +1 -0
  82. package/dist/query/query.d.ts +53 -0
  83. package/dist/query/query.js +138 -0
  84. package/dist/query/query.js.map +1 -0
  85. package/dist/relationship.d.ts +19 -0
  86. package/dist/relationship.js +18 -0
  87. package/dist/relationship.js.map +1 -0
  88. package/dist/system.d.ts +37 -23
  89. package/dist/system.js +80 -64
  90. package/dist/system.js.map +1 -1
  91. package/dist/terms/all_term.d.ts +32 -0
  92. package/dist/terms/all_term.js +41 -0
  93. package/dist/terms/all_term.js.map +1 -0
  94. package/dist/terms/any_term.d.ts +33 -0
  95. package/dist/terms/any_term.js +42 -0
  96. package/dist/terms/any_term.js.map +1 -0
  97. package/dist/terms/build.d.ts +62 -0
  98. package/dist/terms/build.js +382 -0
  99. package/dist/terms/build.js.map +1 -0
  100. package/dist/terms/component_term.d.ts +37 -0
  101. package/dist/terms/component_term.js +49 -0
  102. package/dist/terms/component_term.js.map +1 -0
  103. package/dist/terms/empty_term.d.ts +6 -0
  104. package/dist/terms/empty_term.js +12 -0
  105. package/dist/terms/empty_term.js.map +1 -0
  106. package/dist/terms/index.d.ts +11 -0
  107. package/dist/terms/index.js +12 -0
  108. package/dist/terms/index.js.map +1 -0
  109. package/dist/terms/not_term.d.ts +35 -0
  110. package/dist/terms/not_term.js +47 -0
  111. package/dist/terms/not_term.js.map +1 -0
  112. package/dist/terms/only_term.d.ts +47 -0
  113. package/dist/terms/only_term.js +79 -0
  114. package/dist/terms/only_term.js.map +1 -0
  115. package/dist/terms/predicate_term.d.ts +80 -0
  116. package/dist/terms/predicate_term.js +109 -0
  117. package/dist/terms/predicate_term.js.map +1 -0
  118. package/dist/terms/target_term.d.ts +43 -0
  119. package/dist/terms/target_term.js +87 -0
  120. package/dist/terms/target_term.js.map +1 -0
  121. package/dist/terms/term.d.ts +94 -0
  122. package/dist/terms/term.js +202 -0
  123. package/dist/terms/term.js.map +1 -0
  124. package/dist/terms/world_term.d.ts +68 -0
  125. package/dist/terms/world_term.js +99 -0
  126. package/dist/terms/world_term.js.map +1 -0
  127. package/dist/timer.js +2 -2
  128. package/dist/timer.js.map +1 -1
  129. package/dist/util/array_map.js +12 -0
  130. package/dist/util/array_map.js.map +1 -1
  131. package/dist/util/bitset.js +107 -22
  132. package/dist/util/bitset.js.map +1 -1
  133. package/dist/util/dense_set.d.ts +1 -0
  134. package/dist/util/dense_set.js +90 -0
  135. package/dist/util/dense_set.js.map +1 -0
  136. package/dist/util/id_pool.d.ts +23 -0
  137. package/dist/util/id_pool.js +194 -0
  138. package/dist/util/id_pool.js.map +1 -0
  139. package/dist/util/ordered_set.js.map +1 -1
  140. package/dist/world/index.d.ts +3 -0
  141. package/dist/world/index.js +3 -0
  142. package/dist/world/index.js.map +1 -0
  143. package/dist/world/world.base.d.ts +6 -0
  144. package/dist/world/world.base.js +21 -0
  145. package/dist/world/world.base.js.map +1 -0
  146. package/dist/world/world.components.d.ts +67 -0
  147. package/dist/world/world.components.js +93 -0
  148. package/dist/world/world.components.js.map +1 -0
  149. package/dist/world/world.d.ts +29 -0
  150. package/dist/world/world.deferred.d.ts +13 -0
  151. package/dist/world/world.deferred.js +93 -0
  152. package/dist/world/world.deferred.js.map +1 -0
  153. package/dist/world/world.entities.d.ts +18 -0
  154. package/dist/world/world.entities.js +97 -0
  155. package/dist/world/world.entities.js.map +1 -0
  156. package/dist/world/world.js +39 -0
  157. package/dist/world/world.js.map +1 -0
  158. package/dist/world/world.modules.d.ts +12 -0
  159. package/dist/world/world.modules.js +21 -0
  160. package/dist/world/world.modules.js.map +1 -0
  161. package/dist/world/world.pipeline.d.ts +21 -0
  162. package/dist/world/world.pipeline.js +105 -0
  163. package/dist/world/world.pipeline.js.map +1 -0
  164. package/dist/world/world.pools.d.ts +9 -0
  165. package/dist/world/world.pools.js +59 -0
  166. package/dist/world/world.pools.js.map +1 -0
  167. package/dist/world/world.queries.d.ts +18 -0
  168. package/dist/world/world.queries.js +101 -0
  169. package/dist/world/world.queries.js.map +1 -0
  170. package/dist/world/world.storage.d.ts +7 -0
  171. package/dist/world/world.storage.js +26 -0
  172. package/dist/world/world.storage.js.map +1 -0
  173. package/package.json +18 -20
  174. package/tsconfig.build.json +13 -0
  175. package/.husky/pre-commit +0 -3
  176. package/.prettierrc +0 -7
  177. package/dist/entity.d.ts +0 -215
  178. package/dist/entity.js +0 -457
  179. package/dist/entity.js.map +0 -1
  180. package/dist/query.d.ts +0 -251
  181. package/dist/query.js +0 -353
  182. package/dist/query.js.map +0 -1
  183. package/dist/world.d.ts +0 -389
  184. package/dist/world.js +0 -631
  185. package/dist/world.js.map +0 -1
  186. package/eslint-rules/internal-underscore.js +0 -60
  187. package/eslint.config.js +0 -22
@@ -20,7 +20,11 @@
20
20
  */
21
21
  export class Bitset {
22
22
  constructor() {
23
- /** @internal Underlying word storage; exposed for tests. */
23
+ /**
24
+ * @internal Underlying word storage; exposed for tests and read directly
25
+ * from query predicates emitted by {@link _compileSubsetCheck}. Renaming
26
+ * this field is a breaking change for compiled query code generation.
27
+ */
24
28
  this._bits = [];
25
29
  }
26
30
  /**
@@ -29,7 +33,12 @@ export class Bitset {
29
33
  * @param n - Non-negative integer bit index.
30
34
  */
31
35
  add(n) {
32
- this._bits[n >>> 5] |= 1 << n;
36
+ const idx = n >>> 5;
37
+ const bits = this._bits;
38
+ while (bits.length <= idx) {
39
+ bits.push(0);
40
+ }
41
+ bits[idx] |= 1 << n;
33
42
  }
34
43
  /**
35
44
  * Set the bit described by `bptr` (fast path using a pre-computed
@@ -48,10 +57,7 @@ export class Bitset {
48
57
  * @param bptr - Pre-computed pointer to a bit position.
49
58
  */
50
59
  deleteBit(bptr) {
51
- const current = this._bits[bptr.arrayIndex];
52
- if (current) {
53
- this._bits[bptr.arrayIndex] = current & ~bptr.bitmask;
54
- }
60
+ this._bits[bptr.arrayIndex] &= ~bptr.bitmask;
55
61
  }
56
62
  /**
57
63
  * Clear bit `n`. Storage is not compacted automatically; call
@@ -60,11 +66,7 @@ export class Bitset {
60
66
  * @param n - Non-negative integer bit index.
61
67
  */
62
68
  delete(n) {
63
- const arrayIndex = n >>> 5;
64
- const current = this._bits[arrayIndex];
65
- if (current) {
66
- this._bits[arrayIndex] = current & ~(1 << n);
67
- }
69
+ this._bits[n >>> 5] &= ~(1 << n);
68
70
  }
69
71
  /**
70
72
  * Trim trailing zero words from the backing storage.
@@ -120,8 +122,9 @@ export class Bitset {
120
122
  hasBitset(other) {
121
123
  const bits = this._bits;
122
124
  const otherBits = other._bits;
123
- for (let i = 0; i < otherBits.length; i++) {
124
- const otherWord = otherBits[i] | 0;
125
+ const len = otherBits.length;
126
+ for (let i = 0; i < len; i++) {
127
+ const otherWord = otherBits[i];
125
128
  if ((bits[i] & otherWord) !== otherWord) {
126
129
  return false;
127
130
  }
@@ -134,14 +137,59 @@ export class Bitset {
134
137
  * @param callback - Invoked once per set bit.
135
138
  */
136
139
  forEach(callback) {
137
- this._bits.forEach((b, j) => {
140
+ const bits = this._bits;
141
+ const len = bits.length;
142
+ for (let j = 0; j < len; j++) {
143
+ let w = bits[j];
144
+ if (w === 0) {
145
+ continue;
146
+ }
147
+ const base = j << 5;
148
+ if (w === -1) {
149
+ callback(base);
150
+ callback(base + 1);
151
+ callback(base + 2);
152
+ callback(base + 3);
153
+ callback(base + 4);
154
+ callback(base + 5);
155
+ callback(base + 6);
156
+ callback(base + 7);
157
+ callback(base + 8);
158
+ callback(base + 9);
159
+ callback(base + 10);
160
+ callback(base + 11);
161
+ callback(base + 12);
162
+ callback(base + 13);
163
+ callback(base + 14);
164
+ callback(base + 15);
165
+ callback(base + 16);
166
+ callback(base + 17);
167
+ callback(base + 18);
168
+ callback(base + 19);
169
+ callback(base + 20);
170
+ callback(base + 21);
171
+ callback(base + 22);
172
+ callback(base + 23);
173
+ callback(base + 24);
174
+ callback(base + 25);
175
+ callback(base + 26);
176
+ callback(base + 27);
177
+ callback(base + 28);
178
+ callback(base + 29);
179
+ callback(base + 30);
180
+ callback(base + 31);
181
+ continue;
182
+ }
138
183
  for (let i = 0; i < 32; i++) {
139
- if ((b & 1) !== 0) {
140
- callback(i + j * 32);
184
+ if ((w & 1) !== 0) {
185
+ callback(base + i);
186
+ }
187
+ w >>>= 1;
188
+ if (w === 0) {
189
+ break;
141
190
  }
142
- b >>= 1;
143
191
  }
144
- });
192
+ }
145
193
  }
146
194
  /**
147
195
  * Return an array of every set bit index in ascending order.
@@ -169,13 +217,50 @@ export class Bitset {
169
217
  this._bits[arrayIndex] = bitmask;
170
218
  }
171
219
  /**
172
- * Return `true` when every bit in `bitmask` is set in the word at
173
- * `arrayIndex`.
220
+ * Emit a JavaScript expression that evaluates to `true` when the bitset
221
+ * addressed by `targetBitsExpr` (a `number[]` of 32-bit words) contains
222
+ * every bit set in this bitset.
223
+ *
224
+ * The expression is intended to be spliced into source generated through
225
+ * `new Function(...)` so that a `hasBitset` call against this (immutable)
226
+ * mask is replaced by straight-line bitwise checks with the mask's word
227
+ * values baked in as numeric literals. Zero words are skipped at code
228
+ * generation time, so the runtime expression never iterates them.
229
+ *
230
+ * Contract:
231
+ * - Empty mask -> `"true"`.
232
+ * - One non-zero word -> a single `(target[i]&W)===W` term (no outer
233
+ * parens; `===` binds tighter than `&&` / `||`, so embedding in an
234
+ * AND / OR chain is precedence-safe).
235
+ * - Multiple non-zero words -> terms joined by `&&`, no outer parens.
236
+ * - A word whose value sets bit 31 emits as a negative int32 literal
237
+ * (e.g. `-2147483648`); JS bitwise `&` is defined to coerce both
238
+ * operands to int32, so the round-trip comparison is correct.
239
+ * - When `target.length` is smaller than the mask, the missing slots
240
+ * read as `undefined`; `undefined & W` coerces to `0`, and
241
+ * `0 === W` (W !== 0) is `false`, matching `hasBitset` semantics.
242
+ *
243
+ * The mask's `_bits` are read at the time `_compileSubsetCheck` runs,
244
+ * so a caller that mutates the mask after compilation will not affect
245
+ * already-emitted strings.
174
246
  *
175
247
  * @internal
248
+ *
249
+ * @param targetBitsExpr - JS expression that, when evaluated at runtime,
250
+ * yields the target's `_bits` array. Embedded verbatim into the
251
+ * emitted code; it must be free of side effects (it is evaluated
252
+ * once per non-zero word of this mask).
176
253
  */
177
- _hasIndexBitmask(arrayIndex, bitmask) {
178
- return (this._bits[arrayIndex] & bitmask) !== 0;
254
+ _compileSubsetCheck(targetBitsExpr) {
255
+ const conjuncts = [];
256
+ for (let i = 0; i < this._bits.length; i++) {
257
+ const w = this._bits[i] | 0;
258
+ if (w === 0) {
259
+ continue;
260
+ }
261
+ conjuncts.push(`(${targetBitsExpr}[${i}]&${w})===${w}`);
262
+ }
263
+ return conjuncts.length === 0 ? "true" : conjuncts.join("&&");
179
264
  }
180
265
  }
181
266
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/util/bitset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/util/bitset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,90 @@
1
+ /**
2
+ * A `Set<T>` whose members are kept in a dense backing array so iteration is a
3
+ * tight indexed loop rather than a hash-table walk.
4
+ *
5
+ * Membership is tracked in a side `Map<T, number>` that records each element's
6
+ * slot, so `add` is a push and `delete` swaps the last element into the vacated
7
+ * slot and pops — both O(1) and without the tombstone slots a churned native
8
+ * `Set` accumulates. The swap means iteration order is **not** insertion order
9
+ * after a deletion; that is fine for query membership, whose order is
10
+ * unspecified unless `Query.sort` is used (which keeps an {@link OrderedSet}
11
+ * instead).
12
+ *
13
+ * @internal Used only inside the package.
14
+ *
15
+ * @typeParam T - Element type stored in the set.
16
+ */
17
+ export class DenseSet {
18
+ constructor() {
19
+ this._items = [];
20
+ this._slot = new Map();
21
+ }
22
+ /** Number of elements currently stored. */
23
+ get size() {
24
+ return this._items.length;
25
+ }
26
+ /** Tag used by `Object.prototype.toString` for stringification. */
27
+ get [Symbol.toStringTag]() {
28
+ return "DenseSet";
29
+ }
30
+ /** Insert `value` if not already present. */
31
+ add(value) {
32
+ if (!this._slot.has(value)) {
33
+ this._slot.set(value, this._items.length);
34
+ this._items.push(value);
35
+ }
36
+ return this;
37
+ }
38
+ /** Return `true` when `value` is a member. */
39
+ has(value) {
40
+ return this._slot.has(value);
41
+ }
42
+ /**
43
+ * Remove `value`. Returns `true` if it was present. The last element is
44
+ * swapped into the vacated slot, so surviving order may change.
45
+ */
46
+ delete(value) {
47
+ const i = this._slot.get(value);
48
+ if (i === undefined) {
49
+ return false;
50
+ }
51
+ const last = this._items.pop();
52
+ if (last !== value) {
53
+ this._items[i] = last;
54
+ this._slot.set(last, i);
55
+ }
56
+ this._slot.delete(value);
57
+ return true;
58
+ }
59
+ /** Remove every element. */
60
+ clear() {
61
+ this._items.length = 0;
62
+ this._slot.clear();
63
+ }
64
+ /** Visit each element (current order) without allocating an iterator. */
65
+ forEach(callbackfn, thisArg) {
66
+ const items = this._items;
67
+ for (let i = 0; i < items.length; i++) {
68
+ callbackfn.call(thisArg, items[i], items[i], this);
69
+ }
70
+ }
71
+ /** Iterator over elements in current order. */
72
+ [Symbol.iterator]() {
73
+ return this._items[Symbol.iterator]();
74
+ }
75
+ /** Iterator yielding `[value, value]` pairs. */
76
+ *entries() {
77
+ for (const item of this._items) {
78
+ yield [item, item];
79
+ }
80
+ }
81
+ /** Iterator over elements in current order. */
82
+ keys() {
83
+ return this._items[Symbol.iterator]();
84
+ }
85
+ /** Iterator over elements in current order. */
86
+ values() {
87
+ return this._items[Symbol.iterator]();
88
+ }
89
+ }
90
+ //# sourceMappingURL=dense_set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dense_set.js","sourceRoot":"","sources":["../../src/util/dense_set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,QAAQ;IAArB;QACmB,WAAM,GAAQ,EAAE,CAAC;QACjB,UAAK,GAAG,IAAI,GAAG,EAAa,CAAC;IA+EhD,CAAC;IA7EC,2CAA2C;IAC3C,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,mEAAmE;IACnE,IAAW,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,6CAA6C;IACtC,GAAG,CAAC,KAAQ;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IACvC,GAAG,CAAC,KAAQ;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAQ;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAG,CAAC;QAChC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAA4B;IACrB,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,yEAAyE;IAClE,OAAO,CAAC,UAAsD,EAAE,OAAiB;QACtF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,+CAA+C;IACxC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,gDAAgD;IACzC,CAAC,OAAO;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,+CAA+C;IACxC,IAAI;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,+CAA+C;IACxC,MAAM;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ export interface IdPoolConfig {
2
+ name: string;
3
+ min: number;
4
+ max?: number;
5
+ }
6
+ export declare class IdPool {
7
+ readonly name: string;
8
+ readonly min: number;
9
+ readonly max: number | undefined;
10
+ private _bits;
11
+ private _freeBelowNext;
12
+ private _lowest;
13
+ private _minFreeWord;
14
+ private _next;
15
+ constructor(name: string, min: number, max: number | undefined);
16
+ alloc(): number;
17
+ free(id: number): void;
18
+ owns(id: number): boolean;
19
+ peek(): number;
20
+ reserve(id: number): void;
21
+ private _growBits;
22
+ }
23
+ export declare function validateIdPoolConfigs(configs: readonly IdPoolConfig[]): void;
@@ -0,0 +1,194 @@
1
+ export class IdPool {
2
+ constructor(name, min, max) {
3
+ this.name = name;
4
+ this.min = min;
5
+ this.max = max;
6
+ // Occupancy bitmap: bit `(id - min)` is 1 iff `id` is currently reserved.
7
+ // Stored as a growable plain-number array (V8 keeps these as SMIs / packed
8
+ // double-tagged words, which gives the fastest random-access read/write).
9
+ this._bits = [];
10
+ // Number of reserved ids strictly below `_next`. When zero, alloc can skip
11
+ // the bitmap scan entirely and just hand out the next never-used id.
12
+ this._freeBelowNext = 0;
13
+ // Cached "lowest free id below `_next`", or -1 when not known. The
14
+ // free/alloc/free/alloc churn pattern hits this on every call and lets
15
+ // alloc skip the bitmap word walk.
16
+ this._lowest = -1;
17
+ // Word cursor: the lowest word index in `_bits` that *might* contain a 0
18
+ // bit below `_next`. Pure hint - alloc walks forward from here. Bumped
19
+ // up when alloc fills a word to all-ones and pulled back down by free.
20
+ this._minFreeWord = 0;
21
+ this._next = min;
22
+ }
23
+ alloc() {
24
+ const cached = this._lowest;
25
+ if (cached !== -1) {
26
+ this._lowest = -1;
27
+ const offset = cached - this.min;
28
+ const word = offset >>> 5;
29
+ this._bits[word] = this._bits[word] | (1 << offset);
30
+ this._freeBelowNext--;
31
+ return cached;
32
+ }
33
+ if (this._freeBelowNext > 0) {
34
+ const bits = this._bits;
35
+ let word = this._minFreeWord;
36
+ while (bits[word] === -1) {
37
+ word++;
38
+ }
39
+ const w = bits[word];
40
+ const bit = ctz32(~w);
41
+ const nw = w | (1 << bit);
42
+ bits[word] = nw;
43
+ this._minFreeWord = nw === -1 ? word + 1 : word;
44
+ this._freeBelowNext--;
45
+ return this.min + word * 32 + bit;
46
+ }
47
+ const max = this.max;
48
+ let id = this._next;
49
+ while (max === undefined || id <= max) {
50
+ const offset = id - this.min;
51
+ const word = offset >>> 5;
52
+ const mask = 1 << offset;
53
+ this._growBits(word + 1);
54
+ const cur = this._bits[word];
55
+ if ((cur & mask) === 0) {
56
+ this._bits[word] = cur | mask;
57
+ this._next = id + 1;
58
+ return id;
59
+ }
60
+ id++;
61
+ }
62
+ throw new Error(`Id pool '${this.name}' is exhausted`);
63
+ }
64
+ free(id) {
65
+ if (!this.owns(id)) {
66
+ throw new Error(`Id ${id} does not belong to pool '${this.name}'`);
67
+ }
68
+ const offset = id - this.min;
69
+ const word = offset >>> 5;
70
+ if (word >= this._bits.length) {
71
+ return;
72
+ }
73
+ const mask = 1 << offset;
74
+ const cur = this._bits[word];
75
+ if ((cur & mask) === 0) {
76
+ return;
77
+ }
78
+ this._bits[word] = cur & ~mask;
79
+ if (id < this._next) {
80
+ this._freeBelowNext++;
81
+ if (word < this._minFreeWord) {
82
+ this._minFreeWord = word;
83
+ }
84
+ // Cache slot: track the lowest free id we've seen. If a lower id was
85
+ // already cached, push it back into the "anonymous" bitmap pool and
86
+ // promote `id`. Otherwise, if no lower-than-id is cached, take the
87
+ // slot.
88
+ const lowest = this._lowest;
89
+ if (lowest === -1 || id < lowest) {
90
+ this._lowest = id;
91
+ }
92
+ }
93
+ }
94
+ owns(id) {
95
+ return id >= this.min && (this.max === undefined || id <= this.max);
96
+ }
97
+ peek() {
98
+ if (this._lowest !== -1) {
99
+ return this._lowest;
100
+ }
101
+ if (this._freeBelowNext > 0) {
102
+ const bits = this._bits;
103
+ let word = this._minFreeWord;
104
+ while (bits[word] === -1) {
105
+ word++;
106
+ }
107
+ return this.min + word * 32 + ctz32(~bits[word]);
108
+ }
109
+ const max = this.max;
110
+ let id = this._next;
111
+ while (max === undefined || id <= max) {
112
+ const offset = id - this.min;
113
+ const word = offset >>> 5;
114
+ const mask = 1 << offset;
115
+ if (word >= this._bits.length || (this._bits[word] & mask) === 0) {
116
+ return id;
117
+ }
118
+ id++;
119
+ }
120
+ throw new Error(`Id pool '${this.name}' is exhausted`);
121
+ }
122
+ reserve(id) {
123
+ if (!this.owns(id)) {
124
+ throw new Error(`Id ${id} does not belong to pool '${this.name}'`);
125
+ }
126
+ const offset = id - this.min;
127
+ const word = offset >>> 5;
128
+ this._growBits(word + 1);
129
+ const mask = 1 << offset;
130
+ const cur = this._bits[word];
131
+ if ((cur & mask) !== 0) {
132
+ throw new Error(`Id ${id} is already reserved`);
133
+ }
134
+ this._bits[word] = cur | mask;
135
+ if (id < this._next) {
136
+ this._freeBelowNext--;
137
+ }
138
+ if (this._lowest === id) {
139
+ this._lowest = -1;
140
+ }
141
+ }
142
+ _growBits(length) {
143
+ const bits = this._bits;
144
+ while (bits.length < length) {
145
+ bits.push(0);
146
+ }
147
+ }
148
+ }
149
+ function ctz32(x) {
150
+ // For x with at least one set bit, returns the index of the lowest set bit.
151
+ // The IdPool callers guarantee the input has at least one set bit.
152
+ return 31 - Math.clz32(x & -x);
153
+ }
154
+ export function validateIdPoolConfigs(configs) {
155
+ if (configs.length === 0) {
156
+ throw new Error("At least one id pool is required");
157
+ }
158
+ const names = new Set();
159
+ let openEndedCount = 0;
160
+ let expectedMin = 1;
161
+ configs.forEach((config, index) => {
162
+ if (names.has(config.name)) {
163
+ throw new Error(`Duplicate id pool name '${config.name}'`);
164
+ }
165
+ names.add(config.name);
166
+ if (!Number.isSafeInteger(config.min) || config.min <= 0) {
167
+ throw new Error(`Id pool '${config.name}' must start at a positive integer`);
168
+ }
169
+ if (config.min !== expectedMin) {
170
+ throw new Error(`Id pools must cover 1..Infinity without holes`);
171
+ }
172
+ if (config.max === undefined) {
173
+ openEndedCount++;
174
+ if (index !== configs.length - 1) {
175
+ throw new Error("Only the final id pool may be open-ended");
176
+ }
177
+ return;
178
+ }
179
+ if (!Number.isSafeInteger(config.max) || config.max <= 0) {
180
+ throw new Error(`Id pool '${config.name}' max must be a positive integer`);
181
+ }
182
+ if (config.max < config.min) {
183
+ throw new Error(`Id pool '${config.name}' max must be >= min`);
184
+ }
185
+ expectedMin = config.max + 1;
186
+ });
187
+ if (openEndedCount !== 1) {
188
+ throw new Error("Exactly one id pool must be open-ended");
189
+ }
190
+ if (!names.has("component") || !names.has("module") || !names.has("entity")) {
191
+ throw new Error("Id pools must include 'component', 'module', and 'entity'");
192
+ }
193
+ }
194
+ //# sourceMappingURL=id_pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id_pool.js","sourceRoot":"","sources":["../../src/util/id_pool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ordered_set.js","sourceRoot":"","sources":["../../src/util/ordered_set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ordered_set.js","sourceRoot":"","sources":["../../src/util/ordered_set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { type WorldOptions } from "./world.base.js";
2
+ export { DEFAULT_POOLS } from "./world.pools.js";
3
+ export { World } from "./world.js";
@@ -0,0 +1,3 @@
1
+ export { DEFAULT_POOLS } from "./world.pools.js";
2
+ export { World } from "./world.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/world/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type IdPoolConfig } from "../util/id_pool.js";
2
+ export interface WorldOptions {
3
+ idPools?: readonly IdPoolConfig[];
4
+ }
5
+ export declare class Base {
6
+ }
@@ -0,0 +1,21 @@
1
+ export class Base {
2
+ constructor() {
3
+ /**
4
+ * @internal Per-world registry mapping a component class to its
5
+ * component-entity. The registry is per-world so the lookup stays off the
6
+ * global component class objects while keeping repeated class lookups fast.
7
+ */
8
+ this._classRegistry = new Map();
9
+ /**
10
+ * @internal Name -> entity index populated by {@link IdentityModule} hooks.
11
+ * Duplicate names are last-writer-wins.
12
+ */
13
+ this._identityNameIndex = new Map();
14
+ /**
15
+ * @internal Tracks the last indexed name per entity so that renames,
16
+ * removals, and destroy cleanup can delete stale entries safely.
17
+ */
18
+ this._identityIndexedNames = new WeakMap();
19
+ }
20
+ }
21
+ //# sourceMappingURL=world.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world.base.js","sourceRoot":"","sources":["../../src/world/world.base.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,IAAI;IAAjB;QACE;;;;WAIG;QACa,mBAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE3D;;;WAGG;QACa,uBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE/D;;;WAGG;QACa,0BAAqB,GAAG,IAAI,OAAO,EAAkB,CAAC;IAexE,CAAC;CAAA"}