@vworlds/vecs 1.0.10 → 1.0.12

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 (49) hide show
  1. package/.husky/pre-commit +1 -0
  2. package/README.md +299 -228
  3. package/dist/command.d.ts +1 -46
  4. package/dist/component.d.ts +51 -59
  5. package/dist/component.js +31 -25
  6. package/dist/component.js.map +1 -1
  7. package/dist/dsl.d.ts +34 -26
  8. package/dist/dsl.js +46 -20
  9. package/dist/dsl.js.map +1 -1
  10. package/dist/entity.d.ts +96 -106
  11. package/dist/entity.js +261 -190
  12. package/dist/entity.js.map +1 -1
  13. package/dist/filter.d.ts +31 -23
  14. package/dist/filter.js +24 -17
  15. package/dist/filter.js.map +1 -1
  16. package/dist/index.d.ts +2 -1
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/package.json +3 -1
  20. package/dist/phase.d.ts +12 -30
  21. package/dist/phase.js +11 -10
  22. package/dist/phase.js.map +1 -1
  23. package/dist/query.d.ts +107 -144
  24. package/dist/query.js +200 -169
  25. package/dist/query.js.map +1 -1
  26. package/dist/system.d.ts +170 -86
  27. package/dist/system.js +253 -114
  28. package/dist/system.js.map +1 -1
  29. package/dist/timer.d.ts +50 -0
  30. package/dist/timer.js +154 -0
  31. package/dist/timer.js.map +1 -0
  32. package/dist/util/array_map.d.ts +4 -55
  33. package/dist/util/array_map.js +35 -37
  34. package/dist/util/array_map.js.map +1 -1
  35. package/dist/util/bitset.d.ts +40 -50
  36. package/dist/util/bitset.js +76 -62
  37. package/dist/util/bitset.js.map +1 -1
  38. package/dist/util/events.d.ts +14 -18
  39. package/dist/util/events.js +24 -3
  40. package/dist/util/events.js.map +1 -1
  41. package/dist/util/ordered_set.d.ts +1 -17
  42. package/dist/util/ordered_set.js +74 -25
  43. package/dist/util/ordered_set.js.map +1 -1
  44. package/dist/world.d.ts +230 -218
  45. package/dist/world.js +422 -327
  46. package/dist/world.js.map +1 -1
  47. package/eslint-rules/internal-underscore.js +60 -0
  48. package/eslint.config.js +5 -0
  49. package/package.json +3 -1
package/dist/query.js CHANGED
@@ -1,89 +1,188 @@
1
1
  import { OrderedSet } from "./util/ordered_set.js";
2
2
  import { ArrayMap } from "./util/array_map.js";
3
3
  import { Bitset } from "./util/bitset.js";
4
- import { HAS, buildEntityTest, } from "./dsl.js";
4
+ import { _HAS, _buildEntityTest, } from "./dsl.js";
5
5
  const EMPTY_ENTITIES = new Set();
6
6
  /**
7
- * A reactive, always-updated list of entities that match a given query
8
- * expression.
7
+ * A reactive, always-up-to-date set of entities matching a {@link QueryDSL}
8
+ * predicate.
9
9
  *
10
- * `Query` tracks every entity whose component set satisfies the predicate set
11
- * via {@link requires} or {@link query}. Entry, exit, and update callbacks
12
- * fire automatically when the world's command queue is processed. The tracked
13
- * set is exposed via {@link entities} and {@link forEach}.
10
+ * `Query` listens to entity / component mutations through the world's command
11
+ * queue and tracks which entities currently satisfy its predicate. It fires
12
+ * `enter`, `exit`, and `update` callbacks as the matched set changes. The
13
+ * tracked set is exposed via {@link entities} and {@link forEach}.
14
14
  *
15
- * {@link System} extends `Query` and queues callbacks for its next `_run`
16
- * rather than firing them immediately. Use `Query` directly when you want
17
- * synchronous reactive callbacks without pipeline integration.
15
+ * Callbacks fire **synchronously** when the world routes a command so
16
+ * mutations made inside one of these callbacks are themselves observed
17
+ * immediately by other queries / systems.
18
18
  *
19
- * ### Type parameter `R`
20
- * Tracks which component classes are "required" (declared via {@link requires}
21
- * or the `_guaranteed` hint of {@link query}). Those components appear as
22
- * non-nullable in {@link sort}, {@link forEach}, and {@link update} callbacks.
19
+ * {@link System} extends `Query` and queues callbacks into an inbox replayed
20
+ * during `_run` instead of firing them immediately. Use `Query` directly when
21
+ * you want a reactive entity set without pipeline integration.
22
+ *
23
+ * @typeParam R - Component classes guaranteed present on every matched entity
24
+ * (declared via {@link requires} or the `_guaranteed` hint of {@link query}).
25
+ * Components in `R` appear as non-nullable in {@link sort}, {@link forEach},
26
+ * and {@link update} callback tuples.
23
27
  */
24
28
  export class Query {
25
29
  constructor(
26
- /** Unique name for this query, used in logs and debug output. */
30
+ /** Unique display name; appears in logs and debug output. */
27
31
  name,
28
- /** The world that owns this query. */
32
+ /** World that owns this query. */
29
33
  world, track = true) {
30
34
  this.name = name;
31
35
  this.world = world;
36
+ /** @internal Predicate compiled from the query DSL; defaults to "match nothing". */
37
+ this._belongs = (_e) => false;
38
+ /** @internal `true` once {@link query} or {@link requires} has set an explicit predicate. */
39
+ this._hasQuery = false;
40
+ /** @internal `enter` callback (already wraps any injection logic). */
32
41
  this._enterCallback = undefined;
42
+ /** @internal `exit` callback (already wraps any injection logic). */
33
43
  this._exitCallback = undefined;
34
- /** @internal Direct component type ids that the exit callback injects; undefined when no injection. */
44
+ /** @internal Type ids the exit callback needs snapshotted before component removal. */
35
45
  this._exitSnapshotTypes = undefined;
36
- this._belongs = (_e) => false;
37
- this.hasQuery = false;
38
- /** @internal Per-component-type update callbacks. */
39
- this.componentUpdateCallbacks = new ArrayMap();
40
- /** @internal Bitmask of component types this query is watching for updates. */
41
- this.watchlistBitmask = new Bitset();
46
+ /** @internal Per-component-type `update` callbacks. */
47
+ this._componentUpdateCallbacks = new ArrayMap();
48
+ /** @internal Bitmask of component types this query reacts to via `update`. */
49
+ this._watchlistBitmask = new Bitset();
42
50
  world._addQuery(this);
43
51
  if (track) {
44
52
  this.track();
45
53
  }
46
54
  }
47
- /** Returns the query name. */
48
- toString() {
49
- return this.name;
50
- }
51
55
  /**
52
- * Enable entity tracking: matched entities are inserted into {@link entities}
53
- * as they enter and removed as they exit.
54
- *
55
- * Idempotent. When called after {@link World.start}, immediately backfills all
56
- * existing entities that currently satisfy the query predicate.
57
- *
58
- * @returns `this` for chaining.
56
+ * @internal Backfill the tracked set with every existing entity that
57
+ * satisfies the current predicate. Runs inside a deferred scope so the
58
+ * caller's reentrant routing remains consistent.
59
59
  */
60
- track() {
61
- this._entities ?? (this._entities = new Set());
62
- this.backfill();
63
- return this;
64
- }
65
- backfill() {
60
+ _backfill() {
66
61
  if (this._entities === undefined) {
67
62
  return;
68
63
  }
69
64
  this.world.defer(() => {
70
65
  this.world.entities.forEach((e) => {
71
- if (this.belongs(e) && !e.isInQuery(this)) {
66
+ if (this.belongs(e) && !e._isInQuery(this)) {
72
67
  this._enter(e);
73
68
  }
74
69
  });
75
70
  });
76
71
  }
72
+ /**
73
+ * @internal Resolve one element of an `inject` tuple to a component
74
+ * instance, falling back to `exitSnapshot` when the entity is mid-exit.
75
+ */
76
+ _getComponent(e, C, exitSnapshot) {
77
+ if (typeof C === "number") {
78
+ return exitSnapshot?.get(C) ?? e.get(C);
79
+ }
80
+ else {
81
+ return e.parent?.get(C.parent);
82
+ }
83
+ }
84
+ /**
85
+ * @internal Resolve every element of an `inject` tuple, throwing if any
86
+ * required component is missing on the entity (or its parent).
87
+ */
88
+ _getInjected(e, inject, exitSnapshot) {
89
+ const injected = [];
90
+ inject.forEach((C) => {
91
+ const c = this._getComponent(e, C, exitSnapshot);
92
+ if (!c) {
93
+ throw "query does not contain component";
94
+ }
95
+ injected.push(c);
96
+ });
97
+ return injected;
98
+ }
99
+ /**
100
+ * @internal Translate a tuple of component classes (or `{ parent: C }`
101
+ * markers) into the corresponding type ids understood by {@link _getInjected}.
102
+ */
103
+ _mapInjectedClassToTypes(inject) {
104
+ return inject.map((C) => {
105
+ if (typeof C === "function") {
106
+ return this.world.getComponentType(C);
107
+ }
108
+ return { parent: this.world.getComponentType(C.parent) };
109
+ });
110
+ }
111
+ /**
112
+ * @internal Add `e` to the tracked set, register query membership on the
113
+ * entity, fire any registered `enter` callback, then bridge the entity's
114
+ * already-attached watched components through {@link _notifyModified} so
115
+ * `update` callbacks see them once on entry.
116
+ *
117
+ * `System` overrides this to push events into its inbox.
118
+ */
119
+ _enter(e) {
120
+ this._entities?.add(e);
121
+ e._addQueryMembership(this);
122
+ this._enterCallback?.(e);
123
+ e.components.forEach((c) => {
124
+ if (this._watchlistBitmask.hasBit(c.bitPtr)) {
125
+ this._notifyModified(c);
126
+ }
127
+ });
128
+ }
129
+ /**
130
+ * @internal Remove `e` from the tracked set, deregister query membership,
131
+ * and fire any registered `exit` callback. `System` overrides this to push
132
+ * an inbox event.
133
+ */
134
+ _exit(e) {
135
+ this._exitCallback?.(e);
136
+ this._entities?.delete(e);
137
+ e._removeQueryMembership(this);
138
+ }
139
+ /**
140
+ * @internal Routing entry: when the watchlist matches, invoke the registered
141
+ * `update` callback for the component type. `System` overrides this to push
142
+ * an inbox event instead of firing immediately.
143
+ */
144
+ _notifyModified(c) {
145
+ if (!this._watchlistBitmask.hasBit(c.bitPtr)) {
146
+ return;
147
+ }
148
+ const callback = this._componentUpdateCallbacks.get(c.type);
149
+ if (callback) {
150
+ callback(c);
151
+ }
152
+ }
77
153
  /**
78
154
  * Read-only view of the entities currently tracked by this query.
79
155
  *
80
- * Populated as entities enter (and removed as they exit). Empty unless
81
- * tracking is enabled (default for standalone queries; requires an explicit
82
- * {@link track} call on {@link System | systems}).
156
+ * Populated as entities enter and removed as they exit. Empty unless
157
+ * tracking is enabled — that is the default for standalone queries created
158
+ * via {@link World.query}, but {@link System} requires an explicit
159
+ * {@link track}, {@link sort}, or `each` call.
83
160
  */
84
161
  get entities() {
85
162
  return this._entities ?? EMPTY_ENTITIES;
86
163
  }
164
+ /** Returns the query name. */
165
+ toString() {
166
+ return this.name;
167
+ }
168
+ /**
169
+ * Enable entity tracking: matched entities are inserted into {@link entities}
170
+ * as they enter and removed as they exit.
171
+ *
172
+ * Idempotent. When called after {@link World.start}, immediately backfills
173
+ * every existing entity that satisfies the current predicate.
174
+ *
175
+ * @returns This query, for chaining.
176
+ */
177
+ track() {
178
+ this._entities ?? (this._entities = new Set());
179
+ this._backfill();
180
+ return this;
181
+ }
182
+ /** Returns `true` when `e` satisfies this query's predicate. */
183
+ belongs(e) {
184
+ return this._belongs(e);
185
+ }
87
186
  forEach(componentsOrCallback, callback) {
88
187
  this.world.beginDefer();
89
188
  try {
@@ -105,63 +204,14 @@ export class Query {
105
204
  this.world.endDefer();
106
205
  }
107
206
  }
108
- /** Returns `true` if the entity satisfies this query's predicate. */
109
- belongs(e) {
110
- return this._belongs(e);
111
- }
112
- /**
113
- * @internal Called by the world during command-queue routing when a Set
114
- * command targets an entity that this query currently tracks. Default:
115
- * fires the user-registered `update` callback for the component's type.
116
- * `System` overrides this to push into its inbox instead.
117
- */
118
- notifyModified(c) {
119
- if (!this.watchlistBitmask.hasBit(c.bitPtr)) {
120
- return;
121
- }
122
- const callback = this.componentUpdateCallbacks.get(c.type);
123
- if (callback) {
124
- callback(c);
125
- }
126
- }
127
- /**
128
- * @internal Adds the entity to the tracked set, registers query membership
129
- * on the entity, fires registered enter callbacks, then bridges any
130
- * already-attached watched components through `notifyModified` so that
131
- * `update` callbacks see the entity once on entry. `System` overrides this
132
- * to push inbox events (events fire later in `_run`).
133
- */
134
- _enter(e) {
135
- this._entities?.add(e);
136
- e._addQueryMembership(this);
137
- this._enterCallback?.(e);
138
- // Bridge: surface the entity's already-attached watched components as
139
- // update events so `update` handlers fire once on entry without the user
140
- // having to call `modified()` explicitly.
141
- e.forEachComponent((c) => {
142
- if (this.watchlistBitmask.hasBit(c.bitPtr)) {
143
- this.notifyModified(c);
144
- }
145
- });
146
- }
147
- /**
148
- * @internal Removes the entity from the tracked set, deregisters query
149
- * membership, and fires registered exit callbacks. `System` overrides this
150
- * to also push an inbox event.
151
- */
152
- _exit(e) {
153
- this._exitCallback?.(e);
154
- this._entities?.delete(e);
155
- e._removeQueryMembership(this);
156
- }
157
207
  enter(injectOrCallback, callback) {
158
208
  if (typeof injectOrCallback === "function") {
159
209
  this._enterCallback = injectOrCallback;
160
210
  }
161
211
  else {
162
- const inject = this.mapInjectedClassToTypes(injectOrCallback);
212
+ const inject = this._mapInjectedClassToTypes(injectOrCallback);
163
213
  this._enterCallback = (e) => {
164
- callback(e, this.getInjected(e, inject));
214
+ callback(e, this._getInjected(e, inject));
165
215
  };
166
216
  }
167
217
  return this;
@@ -172,12 +222,10 @@ export class Query {
172
222
  this._exitSnapshotTypes = undefined;
173
223
  }
174
224
  else {
175
- const inject = this.mapInjectedClassToTypes(injectOrCallback);
176
- // Only direct (non-parent) types need snapshotting; parent refs are read
177
- // from e.parent at callback time, which is still alive.
225
+ const inject = this._mapInjectedClassToTypes(injectOrCallback);
178
226
  this._exitSnapshotTypes = inject.filter((t) => typeof t === "number");
179
227
  this._exitCallback = (e, exitSnapshot) => {
180
- callback(e, this.getInjected(e, inject, exitSnapshot));
228
+ callback(e, this._getInjected(e, inject, exitSnapshot));
181
229
  };
182
230
  }
183
231
  return this;
@@ -186,7 +234,7 @@ export class Query {
186
234
  const type = this.world.getComponentType(ComponentClass);
187
235
  if (typeof injectOrCallback === "function") {
188
236
  callback = injectOrCallback;
189
- this.componentUpdateCallbacks.set(type, callback);
237
+ this._componentUpdateCallbacks.set(type, callback);
190
238
  }
191
239
  else {
192
240
  const inject = injectOrCallback;
@@ -200,25 +248,30 @@ export class Query {
200
248
  callback(c, injected);
201
249
  }
202
250
  };
203
- this.componentUpdateCallbacks.set(type, cb);
251
+ this._componentUpdateCallbacks.set(type, cb);
204
252
  }
205
- this.watchlistBitmask.add(type);
206
- if (!this.hasQuery) {
207
- const watchlist = this.watchlistBitmask.indices();
208
- this._belongs = HAS(this.world, ...watchlist);
209
- this.backfill();
253
+ this._watchlistBitmask.add(type);
254
+ if (!this._hasQuery) {
255
+ // Update-only queries derive membership from the watched component set.
256
+ // Install that predicate before backfill so the default match-nothing
257
+ // predicate is never used for update-watchlist expansion.
258
+ const watchlist = this._watchlistBitmask.indices();
259
+ this._belongs = _HAS(this.world, ...watchlist);
260
+ this._backfill();
210
261
  }
211
262
  return this;
212
263
  }
213
264
  /**
214
- * Enable sorted entity tracking: matched entities are stored in insertion
215
- * order determined by `compare`, which receives a tuple of resolved
216
- * component instances for each pair of entities being ordered.
265
+ * Switch the tracked set to a sorted ordering: matched entities are stored
266
+ * in the position determined by `compare`, which receives a tuple of
267
+ * resolved component instances for each pair being ordered.
268
+ *
269
+ * Implies {@link track}.
217
270
  *
218
271
  * @param components - Component classes to resolve and pass to `compare`.
219
- * @param compare - Returns a negative number, zero, or positive number when
220
- * `a` should sort before, equal to, or after `b`.
221
- * @returns `this` for chaining.
272
+ * @param compare - Negative when `a` should sort before `b`, zero for
273
+ * equality, positive when `a` should sort after `b`.
274
+ * @returns This query, for chaining.
222
275
  *
223
276
  * @example
224
277
  * ```ts
@@ -230,21 +283,22 @@ export class Query {
230
283
  sort(components, compare) {
231
284
  const types = components.map((C) => this.world.getComponentType(C));
232
285
  this._entities = new OrderedSet((a, b) => compare(types.map((t) => a.get(t)), types.map((t) => b.get(t))));
233
- this.backfill();
286
+ this._backfill();
234
287
  return this;
235
288
  }
236
289
  /**
237
- * Set the entity membership predicate using the {@link QueryDSL} DSL.
290
+ * Set the entity-membership predicate using a {@link QueryDSL} expression.
238
291
  *
239
- * Replaces any previous predicate. The optional `guaranteed` tuple is a
240
- * pure type-level hint: it tells {@link sort} callbacks which components are
241
- * guaranteed present on every matched entity, eliminating `| undefined` from
242
- * those positions. It has no effect at runtime.
292
+ * Replaces any previous predicate. The optional `_guaranteed` tuple is a
293
+ * pure type-level hint: it tells {@link sort} / {@link forEach} /
294
+ * {@link update} callbacks which components are guaranteed present on every
295
+ * matched entity, eliminating `| undefined` from those positions. It has no
296
+ * effect at runtime.
243
297
  *
244
- * @param q - A {@link QueryDSL} expression.
298
+ * @param q - Query expression.
245
299
  * @param _guaranteed - Component classes guaranteed present on every matched
246
300
  * entity (type hint only — not validated at runtime).
247
- * @returns `this` for chaining.
301
+ * @returns This query, retyped with the guaranteed tuple as its `R`.
248
302
  *
249
303
  * @example
250
304
  * ```ts
@@ -256,66 +310,43 @@ export class Query {
256
310
  * ```
257
311
  */
258
312
  query(q, _guaranteed) {
259
- this._belongs = buildEntityTest(this.world, q);
260
- this.hasQuery = true;
261
- this.backfill();
313
+ this._belongs = _buildEntityTest(this.world, q);
314
+ this._hasQuery = true;
315
+ this._backfill();
262
316
  return this;
263
317
  }
264
318
  /**
265
- * Remove this query from the world and all entities.
319
+ * Shorthand for `query([...components])`: track entities that have **all**
320
+ * of the listed component types.
266
321
  *
267
- * Every entity that currently belongs to this query has the query silently
268
- * removed (no exit callbacks are fired). After this call the query is
269
- * unregistered from its world and `world` is set to `undefined` by force.
322
+ * Equivalent to `query({ HAS: components })`. Unlike `query`, the listed
323
+ * components are also recorded in the type parameter `R`, so {@link sort}
324
+ * and {@link forEach} callbacks see them as non-nullable.
270
325
  *
271
- * Calling any method on the query after `destroy()` is **undefined behavior**.
326
+ * @param components - Component classes to require.
327
+ * @returns This query, retyped with the required tuple as its `R`.
272
328
  */
273
- destroy() {
274
- this.world._removeQuery(this);
275
- this._entities?.clear();
276
- this.world = undefined;
329
+ requires(...components) {
330
+ this.query(components);
331
+ return this;
277
332
  }
278
333
  /**
279
- * Shorthand for `query([...components])` tracks entities that have
280
- * **all** of the listed component types.
334
+ * Permanently remove this query from the world.
281
335
  *
282
- * Equivalent to `query({ HAS: components })`. Unlike `query`, passing
283
- * component classes here also informs the types of {@link sort} callbacks:
284
- * listed components will be non-nullable in those tuples.
336
+ * Every entity that currently belongs to this query has the membership
337
+ * silently purged (no `exit` callbacks fire), the tracked set is cleared,
338
+ * and the `world` reference is forced to `undefined`. Calling any method on
339
+ * the query afterwards is **undefined behavior**.
285
340
  *
286
- * @param components - One or more component classes.
287
- * @returns `this` for chaining.
341
+ * Not supported on {@link System} calling it on a system throws.
288
342
  */
289
- requires(...components) {
290
- this.query(components);
291
- return this;
292
- }
293
- getComponent(e, C, exitSnapshot) {
294
- if (typeof C === "number") {
295
- return exitSnapshot?.get(C) ?? e.get(C);
296
- }
297
- else {
298
- return e.parent?.get(C.parent);
299
- }
300
- }
301
- getInjected(e, inject, exitSnapshot) {
302
- const injected = [];
303
- inject.forEach((C) => {
304
- const c = this.getComponent(e, C, exitSnapshot);
305
- if (!c) {
306
- throw "query does not contain component";
307
- }
308
- injected.push(c);
309
- });
310
- return injected;
311
- }
312
- mapInjectedClassToTypes(inject) {
313
- return inject.map((C) => {
314
- if (typeof C === "function") {
315
- return this.world.getComponentType(C);
316
- }
317
- return { parent: this.world.getComponentType(C.parent) };
318
- });
343
+ destroy() {
344
+ this.world._removeQuery(this);
345
+ this._entities?.forEach((e) => e._purgeQuery(this));
346
+ this._entities?.clear();
347
+ this._entities = undefined;
348
+ this._belongs = (_e) => false;
349
+ this.world = undefined;
319
350
  }
320
351
  }
321
352
  //# sourceMappingURL=query.js.map
package/dist/query.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}