@vworlds/vecs 1.0.9 → 1.0.11

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 (46) hide show
  1. package/.husky/pre-commit +1 -0
  2. package/README.md +218 -229
  3. package/dist/command.d.ts +1 -0
  4. package/dist/command.js +2 -0
  5. package/dist/command.js.map +1 -0
  6. package/dist/component.d.ts +51 -59
  7. package/dist/component.js +31 -25
  8. package/dist/component.js.map +1 -1
  9. package/dist/dsl.d.ts +34 -26
  10. package/dist/dsl.js +46 -20
  11. package/dist/dsl.js.map +1 -1
  12. package/dist/entity.d.ts +110 -127
  13. package/dist/entity.js +323 -164
  14. package/dist/entity.js.map +1 -1
  15. package/dist/filter.d.ts +31 -23
  16. package/dist/filter.js +41 -32
  17. package/dist/filter.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/package.json +3 -1
  20. package/dist/phase.d.ts +5 -28
  21. package/dist/phase.js +11 -10
  22. package/dist/phase.js.map +1 -1
  23. package/dist/query.d.ts +128 -94
  24. package/dist/query.js +254 -145
  25. package/dist/query.js.map +1 -1
  26. package/dist/system.d.ts +64 -128
  27. package/dist/system.js +156 -149
  28. package/dist/system.js.map +1 -1
  29. package/dist/util/array_map.d.ts +4 -55
  30. package/dist/util/array_map.js +35 -37
  31. package/dist/util/array_map.js.map +1 -1
  32. package/dist/util/bitset.d.ts +40 -50
  33. package/dist/util/bitset.js +76 -62
  34. package/dist/util/bitset.js.map +1 -1
  35. package/dist/util/events.d.ts +14 -18
  36. package/dist/util/events.js +24 -3
  37. package/dist/util/events.js.map +1 -1
  38. package/dist/util/ordered_set.d.ts +1 -17
  39. package/dist/util/ordered_set.js +74 -25
  40. package/dist/util/ordered_set.js.map +1 -1
  41. package/dist/world.d.ts +222 -201
  42. package/dist/world.js +394 -323
  43. package/dist/world.js.map +1 -1
  44. package/eslint-rules/internal-underscore.js +60 -0
  45. package/eslint.config.js +5 -0
  46. package/package.json +3 -1
package/dist/query.js CHANGED
@@ -1,144 +1,277 @@
1
1
  import { OrderedSet } from "./util/ordered_set.js";
2
- import { buildEntityTest } from "./dsl.js";
2
+ import { ArrayMap } from "./util/array_map.js";
3
+ import { Bitset } from "./util/bitset.js";
4
+ import { _HAS, _buildEntityTest, } from "./dsl.js";
3
5
  const EMPTY_ENTITIES = new Set();
4
6
  /**
5
- * A reactive, always-updated list of entities that match a given query
6
- * expression.
7
+ * A reactive, always-up-to-date set of entities matching a {@link QueryDSL}
8
+ * predicate.
7
9
  *
8
- * `Query` tracks every entity whose component set satisfies the predicate set
9
- * via {@link requires} or {@link query}. Entry and exit callbacks fire
10
- * automatically as entities gain or lose matching components. The tracked set
11
- * 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}.
12
14
  *
13
- * {@link System} extends `Query` and adds per-tick runtime concerns
14
- * (`update`, `each`, `run`). Use `Query` directly when you only need the
15
- * reactive entity set 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.
16
18
  *
17
- * ### Type parameter `R`
18
- * Tracks which component classes are "required" (declared via {@link requires}
19
- * or the `_guaranteed` hint of {@link query}). Those components appear as
20
- * non-nullable in {@link sort} 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.
21
27
  */
22
28
  export class Query {
23
29
  constructor(
24
- /** Unique name for this query, used in logs and debug output. */
30
+ /** Unique display name; appears in logs and debug output. */
25
31
  name,
26
- /** The world that owns this query. */
32
+ /** World that owns this query. */
27
33
  world, track = true) {
28
34
  this.name = name;
29
35
  this.world = world;
30
- this._enterCallback = [];
31
- this._exitCallback = [];
36
+ /** @internal Predicate compiled from the query DSL; defaults to "match nothing". */
32
37
  this._belongs = (_e) => false;
33
- this.hasQuery = 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). */
41
+ this._enterCallback = undefined;
42
+ /** @internal `exit` callback (already wraps any injection logic). */
43
+ this._exitCallback = undefined;
44
+ /** @internal Type ids the exit callback needs snapshotted before component removal. */
45
+ this._exitSnapshotTypes = undefined;
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();
34
50
  world._addQuery(this);
35
51
  if (track) {
36
52
  this.track();
37
53
  }
38
54
  }
39
- /** Returns the query name. */
40
- toString() {
41
- return this.name;
42
- }
43
55
  /**
44
- * Enable entity tracking: matched entities are inserted into {@link entities}
45
- * as they enter and removed as they exit.
46
- *
47
- * Idempotent. When called after {@link World.start}, immediately backfills all
48
- * existing entities that currently satisfy the query predicate.
49
- *
50
- * @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.
51
59
  */
52
- track() {
53
- this._entities ?? (this._entities = new Set());
54
- this.backfill();
55
- return this;
56
- }
57
- backfill() {
60
+ _backfill() {
58
61
  if (this._entities === undefined) {
59
62
  return;
60
63
  }
61
- this.world._forEachEntity((e) => {
62
- if (this.belongs(e) && !this._entities.has(e)) {
63
- e._addQuery(this);
64
- e._updateQueries();
65
- }
64
+ this.world.defer(() => {
65
+ this.world.entities.forEach((e) => {
66
+ if (this.belongs(e) && !e._isInQuery(this)) {
67
+ this._enter(e);
68
+ }
69
+ });
66
70
  });
67
71
  }
68
72
  /**
69
- * Read-only view of the entities currently tracked by this query.
70
- *
71
- * Populated as entities enter (and removed as they exit). Empty unless
72
- * tracking is enabled (default for standalone queries; requires an explicit
73
- * {@link track} call on {@link System | systems}).
73
+ * @internal Resolve one element of an `inject` tuple to a component
74
+ * instance, falling back to `exitSnapshot` when the entity is mid-exit.
74
75
  */
75
- get entities() {
76
- return this._entities ?? EMPTY_ENTITIES;
77
- }
78
- forEach(componentsOrCallback, callback) {
79
- if (typeof componentsOrCallback === "function") {
80
- this._entities?.forEach(componentsOrCallback);
76
+ _getComponent(e, C, exitSnapshot) {
77
+ if (typeof C === "number") {
78
+ return exitSnapshot?.get(C) ?? e.get(C);
81
79
  }
82
80
  else {
83
- if (!this._entities || !this.world) {
84
- return;
85
- }
86
- const types = componentsOrCallback.map((C) => this.world.getComponentType(C));
87
- this._entities.forEach((e) => {
88
- const resolved = types.map((t) => e.get(t));
89
- callback(e, resolved);
90
- });
81
+ return e.parent?.get(C.parent);
91
82
  }
92
83
  }
93
- /** Returns `true` if the entity satisfies this query's predicate. */
94
- belongs(e) {
95
- return this._belongs(e);
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;
96
98
  }
97
- /** Hook for subclasses — called when a component on an entity in this query changes. */
98
- notifyModified(_c) { }
99
- /** @internal Fires enter callbacks and adds entity to the tracked set. */
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
+ */
100
119
  _enter(e) {
101
- this._enterCallback.forEach((cb) => cb(e));
102
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
+ });
103
128
  }
104
- /** @internal Fires exit callbacks and removes entity from the tracked set. */
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
+ */
105
134
  _exit(e) {
106
- this._exitCallback.forEach((cb) => cb(e));
135
+ this._exitCallback?.(e);
107
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
+ }
153
+ /**
154
+ * Read-only view of the entities currently tracked by this query.
155
+ *
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.
160
+ */
161
+ get entities() {
162
+ return this._entities ?? EMPTY_ENTITIES;
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
+ }
186
+ forEach(componentsOrCallback, callback) {
187
+ this.world.beginDefer();
188
+ try {
189
+ if (typeof componentsOrCallback === "function") {
190
+ this._entities?.forEach(componentsOrCallback);
191
+ }
192
+ else {
193
+ if (!this._entities || !this.world) {
194
+ return;
195
+ }
196
+ const types = componentsOrCallback.map((C) => this.world.getComponentType(C));
197
+ this._entities.forEach((e) => {
198
+ const resolved = types.map((t) => e.get(t));
199
+ callback(e, resolved);
200
+ });
201
+ }
202
+ }
203
+ finally {
204
+ this.world.endDefer();
205
+ }
108
206
  }
109
207
  enter(injectOrCallback, callback) {
110
208
  if (typeof injectOrCallback === "function") {
111
- this._enterCallback.push(injectOrCallback);
209
+ this._enterCallback = injectOrCallback;
112
210
  }
113
211
  else {
114
- const inject = this.mapInjectedClassToTypes(injectOrCallback);
115
- this._enterCallback.push((e) => {
116
- callback(e, this.getInjected(e, inject));
117
- });
212
+ const inject = this._mapInjectedClassToTypes(injectOrCallback);
213
+ this._enterCallback = (e) => {
214
+ callback(e, this._getInjected(e, inject));
215
+ };
118
216
  }
119
217
  return this;
120
218
  }
121
219
  exit(injectOrCallback, callback) {
122
220
  if (typeof injectOrCallback === "function") {
123
- this._exitCallback.push(injectOrCallback);
221
+ this._exitCallback = injectOrCallback;
222
+ this._exitSnapshotTypes = undefined;
124
223
  }
125
224
  else {
126
- const inject = this.mapInjectedClassToTypes(injectOrCallback);
127
- this._exitCallback.push((e) => {
128
- callback(e, this.getInjected(e, inject, true));
129
- });
225
+ const inject = this._mapInjectedClassToTypes(injectOrCallback);
226
+ this._exitSnapshotTypes = inject.filter((t) => typeof t === "number");
227
+ this._exitCallback = (e, exitSnapshot) => {
228
+ callback(e, this._getInjected(e, inject, exitSnapshot));
229
+ };
230
+ }
231
+ return this;
232
+ }
233
+ update(ComponentClass, injectOrCallback, callback) {
234
+ const type = this.world.getComponentType(ComponentClass);
235
+ if (typeof injectOrCallback === "function") {
236
+ callback = injectOrCallback;
237
+ this._componentUpdateCallbacks.set(type, callback);
238
+ }
239
+ else {
240
+ const inject = injectOrCallback;
241
+ const injectedComponentTypes = inject.map((C) => this.world.getComponentType(C));
242
+ const cb = (c) => {
243
+ const injected = [];
244
+ injectedComponentTypes.forEach((InjectedComponentType) => {
245
+ injected.push(c.entity.get(InjectedComponentType));
246
+ });
247
+ if (callback) {
248
+ callback(c, injected);
249
+ }
250
+ };
251
+ this._componentUpdateCallbacks.set(type, cb);
252
+ }
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();
130
261
  }
131
262
  return this;
132
263
  }
133
264
  /**
134
- * Enable sorted entity tracking: matched entities are stored in insertion
135
- * order determined by `compare`, which receives a tuple of resolved
136
- * 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}.
137
270
  *
138
271
  * @param components - Component classes to resolve and pass to `compare`.
139
- * @param compare - Returns a negative number, zero, or positive number when
140
- * `a` should sort before, equal to, or after `b`.
141
- * @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.
142
275
  *
143
276
  * @example
144
277
  * ```ts
@@ -149,22 +282,23 @@ export class Query {
149
282
  */
150
283
  sort(components, compare) {
151
284
  const types = components.map((C) => this.world.getComponentType(C));
152
- this._entities = new OrderedSet((a, b) => compare(types.map((t) => a.get(t, true)), types.map((t) => b.get(t, true))));
153
- this.backfill();
285
+ this._entities = new OrderedSet((a, b) => compare(types.map((t) => a.get(t)), types.map((t) => b.get(t))));
286
+ this._backfill();
154
287
  return this;
155
288
  }
156
289
  /**
157
- * Set the entity membership predicate using the {@link QueryDSL} DSL.
290
+ * Set the entity-membership predicate using a {@link QueryDSL} expression.
158
291
  *
159
- * Replaces any previous predicate. The optional `guaranteed` tuple is a
160
- * pure type-level hint: it tells {@link sort} callbacks which components are
161
- * guaranteed present on every matched entity, eliminating `| undefined` from
162
- * 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.
163
297
  *
164
- * @param q - A {@link QueryDSL} expression.
298
+ * @param q - Query expression.
165
299
  * @param _guaranteed - Component classes guaranteed present on every matched
166
300
  * entity (type hint only — not validated at runtime).
167
- * @returns `this` for chaining.
301
+ * @returns This query, retyped with the guaranteed tuple as its `R`.
168
302
  *
169
303
  * @example
170
304
  * ```ts
@@ -176,68 +310,43 @@ export class Query {
176
310
  * ```
177
311
  */
178
312
  query(q, _guaranteed) {
179
- this._belongs = buildEntityTest(this.world, q);
180
- this.hasQuery = true;
181
- this.backfill();
313
+ this._belongs = _buildEntityTest(this.world, q);
314
+ this._hasQuery = true;
315
+ this._backfill();
182
316
  return this;
183
317
  }
184
318
  /**
185
- * 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.
186
321
  *
187
- * Every entity that currently belongs to this query has the query silently
188
- * removed (no exit callbacks are fired). After this call the query is
189
- * 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.
190
325
  *
191
- * 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`.
192
328
  */
193
- destroy() {
194
- this.world._removeQuery(this);
195
- this._entities?.clear();
196
- this.world = undefined;
329
+ requires(...components) {
330
+ this.query(components);
331
+ return this;
197
332
  }
198
333
  /**
199
- * Shorthand for `query([...components])` tracks entities that have
200
- * **all** of the listed component types.
334
+ * Permanently remove this query from the world.
201
335
  *
202
- * Equivalent to `query({ HAS: components })`. Unlike `query`, passing
203
- * component classes here also informs the types of {@link sort} callbacks:
204
- * 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**.
205
340
  *
206
- * @param components - One or more component classes.
207
- * @returns `this` for chaining.
341
+ * Not supported on {@link System} calling it on a system throws.
208
342
  */
209
- requires(...components) {
210
- this.query(components);
211
- return this;
212
- }
213
- getComponent(e, C, considerDeleted) {
214
- let c;
215
- if (typeof C === "number") {
216
- c = e.get(C, considerDeleted);
217
- }
218
- else {
219
- c = e.parent && e.parent.get(C.parent, considerDeleted);
220
- }
221
- return c;
222
- }
223
- getInjected(e, inject, considerDeleted = false) {
224
- const injected = [];
225
- inject.forEach((C) => {
226
- const c = this.getComponent(e, C, considerDeleted);
227
- if (!c) {
228
- throw "query does not contain component";
229
- }
230
- injected.push(c);
231
- });
232
- return injected;
233
- }
234
- mapInjectedClassToTypes(inject) {
235
- return inject.map((C) => {
236
- if (typeof C === "function") {
237
- return this.world.getComponentType(C);
238
- }
239
- return { parent: this.world.getComponentType(C.parent) };
240
- });
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;
241
350
  }
242
351
  }
243
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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"}