@vworlds/vecs 1.0.19 → 1.0.21
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.
- package/README.md +51 -48
- package/dist/component.d.ts +5 -2
- package/dist/component.js +4 -57
- package/dist/component.js.map +1 -1
- package/dist/component_meta.d.ts +15 -8
- package/dist/component_meta.js +6 -4
- package/dist/component_meta.js.map +1 -1
- package/dist/dsl.d.ts +56 -11
- package/dist/dsl.js +21 -31
- package/dist/dsl.js.map +1 -1
- package/dist/entity/entity.base.d.ts +4 -3
- package/dist/entity/entity.base.js +4 -4
- package/dist/entity/entity.base.js.map +1 -1
- package/dist/entity/entity.components.d.ts +16 -7
- package/dist/entity/entity.components.js +48 -23
- package/dist/entity/entity.components.js.map +1 -1
- package/dist/entity/entity.d.ts +5 -1
- package/dist/entity/entity.js +5 -0
- package/dist/entity/entity.js.map +1 -1
- package/dist/entity/entity.lifecycle.js +25 -25
- package/dist/entity/entity.lifecycle.js.map +1 -1
- package/dist/entity/entity.queries.js +0 -6
- package/dist/entity/entity.queries.js.map +1 -1
- package/dist/entity/entity.relationships.d.ts +1 -1
- package/dist/entity/entity.relationships.js +7 -5
- package/dist/entity/entity.relationships.js.map +1 -1
- package/dist/entity/index.d.ts +1 -1
- package/dist/entity/index.js.map +1 -1
- package/dist/filter.d.ts +6 -6
- package/dist/filter.js +2 -1
- package/dist/filter.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/inject.d.ts +18 -17
- package/dist/inject.js +34 -34
- package/dist/inject.js.map +1 -1
- package/dist/module.d.ts +0 -2
- package/dist/module.js +0 -3
- package/dist/module.js.map +1 -1
- package/dist/modules/relationship_types.d.ts +34 -0
- package/dist/modules/relationship_types.js +36 -0
- package/dist/modules/relationship_types.js.map +1 -0
- package/dist/modules/relationships.d.ts +24 -0
- package/dist/modules/relationships.js +82 -0
- package/dist/modules/relationships.js.map +1 -0
- package/dist/modules/singleton.js +1 -2
- package/dist/modules/singleton.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/query/callbacks.d.ts +17 -0
- package/dist/query/callbacks.js +113 -0
- package/dist/query/callbacks.js.map +1 -0
- package/dist/query/constants.d.ts +1 -0
- package/dist/query/constants.js +2 -0
- package/dist/query/constants.js.map +1 -0
- package/dist/query/{query.03.tracking.d.ts → group.d.ts} +11 -9
- package/dist/query/group.js +31 -0
- package/dist/query/group.js.map +1 -0
- package/dist/query/grouped_query.d.ts +26 -0
- package/dist/query/grouped_query.js +121 -0
- package/dist/query/grouped_query.js.map +1 -0
- package/dist/query/grouped_query_registry.d.ts +4 -0
- package/dist/query/grouped_query_registry.js +11 -0
- package/dist/query/grouped_query_registry.js.map +1 -0
- package/dist/query/grouping.d.ts +24 -0
- package/dist/query/{query.07.groups.js → grouping.js} +29 -60
- package/dist/query/grouping.js.map +1 -0
- package/dist/query/index.d.ts +6 -6
- package/dist/query/index.js +6 -4
- package/dist/query/index.js.map +1 -1
- package/dist/query/query.d.ts +58 -28
- package/dist/query/query.js +327 -88
- package/dist/query/query.js.map +1 -1
- package/dist/system.d.ts +18 -34
- package/dist/system.js +33 -49
- package/dist/system.js.map +1 -1
- package/dist/terms/all_term.d.ts +2 -6
- package/dist/terms/all_term.js +2 -7
- package/dist/terms/all_term.js.map +1 -1
- package/dist/terms/any_term.d.ts +2 -6
- package/dist/terms/any_term.js +2 -7
- package/dist/terms/any_term.js.map +1 -1
- package/dist/terms/build.d.ts +9 -6
- package/dist/terms/build.js +17 -14
- package/dist/terms/build.js.map +1 -1
- package/dist/terms/component_term.d.ts +3 -3
- package/dist/terms/component_term.js.map +1 -1
- package/dist/terms/composite_build.d.ts +32 -0
- package/dist/terms/composite_build.js +28 -0
- package/dist/terms/composite_build.js.map +1 -0
- package/dist/terms/only_term.d.ts +3 -3
- package/dist/terms/only_term.js.map +1 -1
- package/dist/terms/predicate_term.d.ts +3 -3
- package/dist/terms/predicate_term.js +3 -3
- package/dist/terms/predicate_term.js.map +1 -1
- package/dist/terms/target_term.d.ts +3 -2
- package/dist/terms/target_term.js +11 -17
- package/dist/terms/target_term.js.map +1 -1
- package/dist/util/dense_set.js +1 -1
- package/dist/util/id_pool.d.ts +2 -0
- package/dist/util/id_pool.js +10 -0
- package/dist/util/id_pool.js.map +1 -1
- package/dist/util/ordered_set.js +15 -10
- package/dist/util/ordered_set.js.map +1 -1
- package/dist/world/world.components.d.ts +5 -4
- package/dist/world/world.components.js +16 -16
- package/dist/world/world.components.js.map +1 -1
- package/dist/world/world.entities.d.ts +2 -2
- package/dist/world/world.entities.js.map +1 -1
- package/dist/world/world.js +2 -4
- package/dist/world/world.js.map +1 -1
- package/dist/world/world.modules.d.ts +2 -2
- package/dist/world/world.modules.js +6 -1
- package/dist/world/world.modules.js.map +1 -1
- package/dist/world/world.pools.d.ts +2 -1
- package/dist/world/world.pools.js.map +1 -1
- package/dist/world/world.queries.d.ts +3 -5
- package/dist/world/world.queries.js +11 -8
- package/dist/world/world.queries.js.map +1 -1
- package/package.json +1 -1
- package/dist/query/query.00.base.d.ts +0 -23
- package/dist/query/query.00.base.js +0 -77
- package/dist/query/query.00.base.js.map +0 -1
- package/dist/query/query.01.reactive.d.ts +0 -7
- package/dist/query/query.01.reactive.js +0 -58
- package/dist/query/query.01.reactive.js.map +0 -1
- package/dist/query/query.02.lifecycle.d.ts +0 -6
- package/dist/query/query.02.lifecycle.js +0 -63
- package/dist/query/query.02.lifecycle.js.map +0 -1
- package/dist/query/query.03.tracking.js +0 -31
- package/dist/query/query.03.tracking.js.map +0 -1
- package/dist/query/query.04.callbacks.d.ts +0 -14
- package/dist/query/query.04.callbacks.js +0 -65
- package/dist/query/query.04.callbacks.js.map +0 -1
- package/dist/query/query.05.updates.d.ts +0 -14
- package/dist/query/query.05.updates.js +0 -81
- package/dist/query/query.05.updates.js.map +0 -1
- package/dist/query/query.06.predicate.d.ts +0 -13
- package/dist/query/query.06.predicate.js +0 -40
- package/dist/query/query.06.predicate.js.map +0 -1
- package/dist/query/query.07.groups.d.ts +0 -41
- package/dist/query/query.07.groups.js.map +0 -1
- package/dist/relationship.d.ts +0 -19
- package/dist/relationship.js +0 -18
- package/dist/relationship.js.map +0 -1
package/dist/system.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isCursorMarker, makeInjectedInvoker, wantsIter, } from "./inject.js";
|
|
2
2
|
import { SOURCE_TRACKED_QUERY_ERROR, Query } from "./query/index.js";
|
|
3
|
-
import { containsDownTerm } from "./dsl.js";
|
|
3
|
+
import { containsDownTerm, } from "./dsl.js";
|
|
4
4
|
import { Phase } from "./phase.js";
|
|
5
5
|
import { ALWAYS_TICK_SOURCE, IntervalTickSource, RateTickSource, } from "./timer.js";
|
|
6
6
|
/**
|
|
@@ -10,7 +10,7 @@ import { ALWAYS_TICK_SOURCE, IntervalTickSource, RateTickSource, } from "./timer
|
|
|
10
10
|
*
|
|
11
11
|
* ```ts
|
|
12
12
|
* world.system("Move")
|
|
13
|
-
* .
|
|
13
|
+
* .with(Position, Velocity) // track entities with both components
|
|
14
14
|
* .phase("update")
|
|
15
15
|
* .enter([Position], (e, [pos]) => { pos.x = 0; })
|
|
16
16
|
* .update(Position, (e, pos) => { pos.x += pos.vx; })
|
|
@@ -28,12 +28,12 @@ import { ALWAYS_TICK_SOURCE, IntervalTickSource, RateTickSource, } from "./timer
|
|
|
28
28
|
*
|
|
29
29
|
* ### Component injection and type inference
|
|
30
30
|
*
|
|
31
|
-
* `enter`, `exit`, `update`, `each`, and `
|
|
31
|
+
* `enter`, `exit`, `update`, `each`, and `orderBy` accept an array of component
|
|
32
32
|
* classes resolved from the entity and passed as a typed tuple to the
|
|
33
33
|
* callback.
|
|
34
34
|
*
|
|
35
|
-
* Components declared via {@link
|
|
36
|
-
* {@link
|
|
35
|
+
* Components declared via {@link with} (or the `hint` field of a
|
|
36
|
+
* {@link QueryConfig}) are tracked as the type parameter `R`. Inside `orderBy`,
|
|
37
37
|
* `each`, and `update` injection callbacks they are non-nullable; any other
|
|
38
38
|
* component remains `Type | undefined`.
|
|
39
39
|
*
|
|
@@ -72,6 +72,7 @@ export class System extends Query {
|
|
|
72
72
|
* translate root-term membership events into inbox commands here.
|
|
73
73
|
*/
|
|
74
74
|
_enter(e) {
|
|
75
|
+
this.changed = true;
|
|
75
76
|
this._entities?.add(e);
|
|
76
77
|
e._addQueryMembership(this);
|
|
77
78
|
if (!this._enabled) {
|
|
@@ -80,13 +81,13 @@ export class System extends Query {
|
|
|
80
81
|
if (this._enterCallback !== undefined) {
|
|
81
82
|
this._inbox.push({ kind: 0 /* InboxCommand.Enter */, entity: e });
|
|
82
83
|
}
|
|
83
|
-
e.components.forEach((c,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
// Entry-time initialization bypasses the silence filter: an entity
|
|
87
|
-
// introduced by an ignored source must still initialize in this system.
|
|
88
|
-
this._pushUpdate(e, meta, c);
|
|
84
|
+
e.components.forEach((c, ceid) => {
|
|
85
|
+
if (!this._watchlistBitmask.has(ceid)) {
|
|
86
|
+
return;
|
|
89
87
|
}
|
|
88
|
+
// Entry-time initialization bypasses the silence filter: an entity
|
|
89
|
+
// introduced by an ignored source must still initialize in this system.
|
|
90
|
+
this._pushUpdate(e, ceid, c);
|
|
90
91
|
});
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
@@ -96,6 +97,7 @@ export class System extends Query {
|
|
|
96
97
|
* resolvable after the underlying components are removed.
|
|
97
98
|
*/
|
|
98
99
|
_exit(e) {
|
|
100
|
+
this.changed = true;
|
|
99
101
|
this._entities?.delete(e);
|
|
100
102
|
e._removeQueryMembership(this);
|
|
101
103
|
if (!this._enabled) {
|
|
@@ -105,10 +107,10 @@ export class System extends Query {
|
|
|
105
107
|
let snapshot;
|
|
106
108
|
if (this._exitSnapshotTypes && this._exitSnapshotTypes.length > 0) {
|
|
107
109
|
snapshot = new Map();
|
|
108
|
-
for (const
|
|
109
|
-
const c = e._get(
|
|
110
|
+
for (const ceid of this._exitSnapshotTypes) {
|
|
111
|
+
const c = e._get(ceid);
|
|
110
112
|
if (c) {
|
|
111
|
-
snapshot.set(
|
|
113
|
+
snapshot.set(ceid, c);
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
}
|
|
@@ -119,8 +121,8 @@ export class System extends Query {
|
|
|
119
121
|
* @internal Routing entry: push an inbox `update` event when the modified
|
|
120
122
|
* component matches the watchlist and its source is not silenced.
|
|
121
123
|
*/
|
|
122
|
-
_notifyModified(e,
|
|
123
|
-
if (!this._watchlistBitmask.
|
|
124
|
+
_notifyModified(e, ceid, c) {
|
|
125
|
+
if (!this._watchlistBitmask.has(ceid)) {
|
|
124
126
|
return;
|
|
125
127
|
}
|
|
126
128
|
if (!this._enabled) {
|
|
@@ -129,11 +131,12 @@ export class System extends Query {
|
|
|
129
131
|
if (this._isSourceSilenced()) {
|
|
130
132
|
return;
|
|
131
133
|
}
|
|
132
|
-
this.
|
|
134
|
+
this.changed = true;
|
|
135
|
+
this._pushUpdate(e, ceid, c);
|
|
133
136
|
}
|
|
134
137
|
/** @internal Append an `update` event to the inbox, bypassing the silence filter. */
|
|
135
|
-
_pushUpdate(e,
|
|
136
|
-
this._inbox.push({ kind: 2 /* InboxCommand.Update */, entity: e,
|
|
138
|
+
_pushUpdate(e, ceid, c) {
|
|
139
|
+
this._inbox.push({ kind: 2 /* InboxCommand.Update */, entity: e, eid: ceid, component: c });
|
|
137
140
|
}
|
|
138
141
|
/**
|
|
139
142
|
* @internal Execute one tick: drain the inbox in arrival order, then run
|
|
@@ -175,7 +178,7 @@ export class System extends Query {
|
|
|
175
178
|
this._exitCallback(event.entity, event.snapshot);
|
|
176
179
|
break;
|
|
177
180
|
case 2 /* InboxCommand.Update */:
|
|
178
|
-
const callback = this._componentUpdateCallbacks.get(event.
|
|
181
|
+
const callback = this._componentUpdateCallbacks.get(event.eid);
|
|
179
182
|
if (callback) {
|
|
180
183
|
callback(event.entity, event.component);
|
|
181
184
|
}
|
|
@@ -187,7 +190,7 @@ export class System extends Query {
|
|
|
187
190
|
this._runCallback(now, tickDelta);
|
|
188
191
|
}
|
|
189
192
|
if (this._eachCallback) {
|
|
190
|
-
this.
|
|
193
|
+
this._forEach(this._eachCallback);
|
|
191
194
|
}
|
|
192
195
|
});
|
|
193
196
|
}
|
|
@@ -320,37 +323,18 @@ export class System extends Query {
|
|
|
320
323
|
return this;
|
|
321
324
|
}
|
|
322
325
|
/**
|
|
323
|
-
*
|
|
326
|
+
* Add entity-membership predicates using {@link QuerySpec} expressions.
|
|
324
327
|
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
* via `update` is disabled.
|
|
328
|
+
* Merges with any existing predicate using `all`. After calling `with`,
|
|
329
|
+
* watchlist auto-expansion via `update` is disabled.
|
|
328
330
|
*
|
|
329
|
-
*
|
|
330
|
-
* {@link Query.query} for details.
|
|
331
|
+
* `hint` fields are pure type-level hints — see {@link Query.with} for details.
|
|
331
332
|
*
|
|
332
|
-
* @param
|
|
333
|
-
* @
|
|
334
|
-
* entity (type hint only — not validated at runtime).
|
|
335
|
-
* @returns This system, retyped with the guaranteed tuple as its `R`.
|
|
333
|
+
* @param specs - Query specifications to add.
|
|
334
|
+
* @returns This system, retyped with the guaranteed components added to `R`.
|
|
336
335
|
*/
|
|
337
|
-
|
|
338
|
-
super.
|
|
339
|
-
return this;
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* Shorthand for `query([...components])` — tracks entities that have **all**
|
|
343
|
-
* of the listed component types.
|
|
344
|
-
*
|
|
345
|
-
* Equivalent to `query(components)`. The listed components are also
|
|
346
|
-
* recorded in the type parameter `R`, so {@link sort}, {@link each}, and
|
|
347
|
-
* {@link update} callbacks treat them as non-nullable.
|
|
348
|
-
*
|
|
349
|
-
* @param components - Component classes to require.
|
|
350
|
-
* @returns This system, retyped with the required tuple as its `R`.
|
|
351
|
-
*/
|
|
352
|
-
requires(...components) {
|
|
353
|
-
super.requires(...components);
|
|
336
|
+
with(...specs) {
|
|
337
|
+
super.with(...specs);
|
|
354
338
|
return this;
|
|
355
339
|
}
|
|
356
340
|
/**
|
|
@@ -380,7 +364,7 @@ export class System extends Query {
|
|
|
380
364
|
*
|
|
381
365
|
* @example
|
|
382
366
|
* ```ts
|
|
383
|
-
* const sys = world.system("AI").
|
|
367
|
+
* const sys = world.system("AI").with(Enemy).run(runAI);
|
|
384
368
|
* // Pause AI processing during a cutscene:
|
|
385
369
|
* sys.disable();
|
|
386
370
|
* // Resume:
|
package/dist/system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EAEd,mBAAmB,EACnB,SAAS,GAIV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,0BAA0B,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"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"}
|
package/dist/terms/all_term.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { QueryDSL } from "../dsl.js";
|
|
2
2
|
import type { World } from "../world/index.js";
|
|
3
3
|
import { Term } from "./term.js";
|
|
4
|
-
import { type
|
|
4
|
+
import { type CompositePrecheck } from "./composite_build.js";
|
|
5
5
|
import type { getTerm as GetTermFn } from "./build.js";
|
|
6
6
|
/**
|
|
7
7
|
* Composite term that matches entities present in **all** of its children.
|
|
@@ -24,9 +24,5 @@ export declare class AllTerm extends Term {
|
|
|
24
24
|
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
25
25
|
* @returns An `AllTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
26
26
|
*/
|
|
27
|
-
static build(world: World, terms: readonly QueryDSL[], key: string, originalDSL: QueryDSL, getTerm: typeof GetTermFn, precheck: (
|
|
28
|
-
hasDiamond: boolean;
|
|
29
|
-
containsTarget: boolean;
|
|
30
|
-
info: MergedInfo;
|
|
31
|
-
}, onDestroy: (term: Term) => void): Term;
|
|
27
|
+
static build(world: World, terms: readonly QueryDSL[], key: string, originalDSL: QueryDSL, getTerm: typeof GetTermFn, precheck: CompositePrecheck, onDestroy: (term: Term) => void): Term;
|
|
32
28
|
}
|
package/dist/terms/all_term.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Term } from "./term.js";
|
|
2
|
-
import {
|
|
2
|
+
import { buildCompositeTerm } from "./composite_build.js";
|
|
3
3
|
/**
|
|
4
4
|
* Composite term that matches entities present in **all** of its children.
|
|
5
5
|
*
|
|
@@ -26,12 +26,7 @@ export class AllTerm extends Term {
|
|
|
26
26
|
* @returns An `AllTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
27
27
|
*/
|
|
28
28
|
static build(world, terms, key, originalDSL, getTerm, precheck, onDestroy) {
|
|
29
|
-
|
|
30
|
-
if (checked.hasDiamond && !checked.containsTarget) {
|
|
31
|
-
return PredicateTerm.buildMerged(world, originalDSL, key, checked.info, getTerm, onDestroy);
|
|
32
|
-
}
|
|
33
|
-
const children = terms.map((dsl) => getTerm(world, dsl));
|
|
34
|
-
return new AllTerm(world, key, children, onDestroy);
|
|
29
|
+
return buildCompositeTerm(AllTerm, world, terms, key, originalDSL, getTerm, precheck, onDestroy);
|
|
35
30
|
}
|
|
36
31
|
/** @internal */
|
|
37
32
|
_matches(entity) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all_term.js","sourceRoot":"","sources":["../../src/terms/all_term.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"all_term.js","sourceRoot":"","sources":["../../src/terms/all_term.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAA0B,MAAM,sBAAsB,CAAC;AAGlF;;;;;GAKG;AACH,MAAM,OAAO,OAAQ,SAAQ,IAAI;IAC/B,YACE,KAAY,EACZ,GAAW,EACX,QAAyB,EACzB,SAA+B;QAE/B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,MAAM,CAAC,KAAK,CACjB,KAAY,EACZ,KAA0B,EAC1B,GAAW,EACX,WAAqB,EACrB,OAAyB,EACzB,QAA2B,EAC3B,SAA+B;QAE/B,OAAO,kBAAkB,CACvB,OAAO,EACP,KAAK,EACL,KAAK,EACL,GAAG,EACH,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC;IAED,gBAAgB;IACN,QAAQ,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
package/dist/terms/any_term.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { QueryDSL } from "../dsl.js";
|
|
2
2
|
import type { World } from "../world/index.js";
|
|
3
3
|
import { Term } from "./term.js";
|
|
4
|
-
import { type
|
|
4
|
+
import { type CompositePrecheck } from "./composite_build.js";
|
|
5
5
|
import type { getTerm as GetTermFn } from "./build.js";
|
|
6
6
|
/**
|
|
7
7
|
* Composite term that matches entities present in **at least one** of its
|
|
@@ -25,9 +25,5 @@ export declare class AnyTerm extends Term {
|
|
|
25
25
|
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
26
26
|
* @returns An `AnyTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
27
27
|
*/
|
|
28
|
-
static build(world: World, terms: readonly QueryDSL[], key: string, originalDSL: QueryDSL, getTerm: typeof GetTermFn, precheck: (
|
|
29
|
-
hasDiamond: boolean;
|
|
30
|
-
containsTarget: boolean;
|
|
31
|
-
info: MergedInfo;
|
|
32
|
-
}, onDestroy: (term: Term) => void): Term;
|
|
28
|
+
static build(world: World, terms: readonly QueryDSL[], key: string, originalDSL: QueryDSL, getTerm: typeof GetTermFn, precheck: CompositePrecheck, onDestroy: (term: Term) => void): Term;
|
|
33
29
|
}
|
package/dist/terms/any_term.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Term } from "./term.js";
|
|
2
|
-
import {
|
|
2
|
+
import { buildCompositeTerm } from "./composite_build.js";
|
|
3
3
|
/**
|
|
4
4
|
* Composite term that matches entities present in **at least one** of its
|
|
5
5
|
* children.
|
|
@@ -27,12 +27,7 @@ export class AnyTerm extends Term {
|
|
|
27
27
|
* @returns An `AnyTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
28
28
|
*/
|
|
29
29
|
static build(world, terms, key, originalDSL, getTerm, precheck, onDestroy) {
|
|
30
|
-
|
|
31
|
-
if (checked.hasDiamond && !checked.containsTarget) {
|
|
32
|
-
return PredicateTerm.buildMerged(world, originalDSL, key, checked.info, getTerm, onDestroy);
|
|
33
|
-
}
|
|
34
|
-
const children = terms.map((dsl) => getTerm(world, dsl));
|
|
35
|
-
return new AnyTerm(world, key, children, onDestroy);
|
|
30
|
+
return buildCompositeTerm(AnyTerm, world, terms, key, originalDSL, getTerm, precheck, onDestroy);
|
|
36
31
|
}
|
|
37
32
|
/** @internal */
|
|
38
33
|
_matches(entity) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"any_term.js","sourceRoot":"","sources":["../../src/terms/any_term.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"any_term.js","sourceRoot":"","sources":["../../src/terms/any_term.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAA0B,MAAM,sBAAsB,CAAC;AAGlF;;;;;;GAMG;AACH,MAAM,OAAO,OAAQ,SAAQ,IAAI;IAC/B,YACE,KAAY,EACZ,GAAW,EACX,QAAyB,EACzB,SAA+B;QAE/B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,MAAM,CAAC,KAAK,CACjB,KAAY,EACZ,KAA0B,EAC1B,GAAW,EACX,WAAqB,EACrB,OAAyB,EACzB,QAA2B,EAC3B,SAA+B;QAE/B,OAAO,kBAAkB,CACvB,OAAO,EACP,KAAK,EACL,KAAK,EACL,GAAG,EACH,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC;IAED,gBAAgB;IACN,QAAQ,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
package/dist/terms/build.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type QueryDSL } from "../dsl.js";
|
|
2
2
|
import type { World } from "../world/index.js";
|
|
3
|
-
import type { Entity } from "../entity/index.js";
|
|
3
|
+
import type { EID, Entity } from "../entity/index.js";
|
|
4
4
|
import { Term } from "./term.js";
|
|
5
5
|
/**
|
|
6
6
|
* Canonicalize `dsl`, look up or create its term in the world cache, and
|
|
@@ -18,7 +18,9 @@ export declare function getTerm(world: World, dsl: QueryDSL): Term;
|
|
|
18
18
|
/**
|
|
19
19
|
* Return the cached term for `dsl` without creating one if absent.
|
|
20
20
|
*
|
|
21
|
-
* Useful for introspection and testing
|
|
21
|
+
* Useful for introspection and testing. It canonicalizes `dsl` (via the same
|
|
22
|
+
* simplify + cache-key path as {@link getTerm}) to look the term up, but never
|
|
23
|
+
* creates one.
|
|
22
24
|
*
|
|
23
25
|
* @param world - Owning world.
|
|
24
26
|
* @param dsl - Query DSL expression to look up.
|
|
@@ -31,7 +33,7 @@ export declare function getCachedTerm(world: World, dsl: QueryDSL): Term | undef
|
|
|
31
33
|
* Routes to the corresponding `ComponentTerm` (membership enter) and to the
|
|
32
34
|
* world term (shape change, needed by `only` and merged predicate terms).
|
|
33
35
|
*/
|
|
34
|
-
export declare function notifyComponentAdded(world: World, componentEid:
|
|
36
|
+
export declare function notifyComponentAdded(world: World, componentEid: EID, entity: Entity): void;
|
|
35
37
|
/**
|
|
36
38
|
* Notify the term graph that a component of `componentEid` changed value on
|
|
37
39
|
* `entity` without a membership change.
|
|
@@ -39,18 +41,19 @@ export declare function notifyComponentAdded(world: World, componentEid: number,
|
|
|
39
41
|
* Routes only to the `ComponentTerm`'s refresh channel (not shape), which
|
|
40
42
|
* wakes predicate terms watching this component.
|
|
41
43
|
*/
|
|
42
|
-
export declare function notifyComponentChanged(world: World, componentEid:
|
|
44
|
+
export declare function notifyComponentChanged(world: World, componentEid: EID, entity: Entity): void;
|
|
43
45
|
/**
|
|
44
46
|
* Notify the term graph that `componentEid` was removed from `entity`.
|
|
45
47
|
*
|
|
46
48
|
* Routes to the `ComponentTerm` (membership exit) and world term (shape).
|
|
47
49
|
*/
|
|
48
|
-
export declare function notifyComponentRemoved(world: World, componentEid:
|
|
50
|
+
export declare function notifyComponentRemoved(world: World, componentEid: EID, entity: Entity): void;
|
|
49
51
|
/**
|
|
50
52
|
* Notify the term graph that a new entity was created.
|
|
51
53
|
*
|
|
52
54
|
* The world term evaluates the entity immediately and emits an enter event if
|
|
53
|
-
* it qualifies (
|
|
55
|
+
* it qualifies (any live, non-destroyed entity — component-definition entities
|
|
56
|
+
* included, so they are picked up reactively like ordinary entities).
|
|
54
57
|
*/
|
|
55
58
|
export declare function notifyEntityCreated(world: World, entity: Entity): void;
|
|
56
59
|
/**
|
package/dist/terms/build.js
CHANGED
|
@@ -41,7 +41,9 @@ export function getTerm(world, dsl) {
|
|
|
41
41
|
/**
|
|
42
42
|
* Return the cached term for `dsl` without creating one if absent.
|
|
43
43
|
*
|
|
44
|
-
* Useful for introspection and testing
|
|
44
|
+
* Useful for introspection and testing. It canonicalizes `dsl` (via the same
|
|
45
|
+
* simplify + cache-key path as {@link getTerm}) to look the term up, but never
|
|
46
|
+
* creates one.
|
|
45
47
|
*
|
|
46
48
|
* @param world - Owning world.
|
|
47
49
|
* @param dsl - Query DSL expression to look up.
|
|
@@ -83,7 +85,8 @@ export function notifyComponentRemoved(world, componentEid, entity) {
|
|
|
83
85
|
* Notify the term graph that a new entity was created.
|
|
84
86
|
*
|
|
85
87
|
* The world term evaluates the entity immediately and emits an enter event if
|
|
86
|
-
* it qualifies (
|
|
88
|
+
* it qualifies (any live, non-destroyed entity — component-definition entities
|
|
89
|
+
* included, so they are picked up reactively like ordinary entities).
|
|
87
90
|
*/
|
|
88
91
|
export function notifyEntityCreated(world, entity) {
|
|
89
92
|
world._worldTerm?.entityCreated(entity);
|
|
@@ -148,14 +151,14 @@ function _dispatch(world, dsl, key) {
|
|
|
148
151
|
// World-singleton leaf getters
|
|
149
152
|
// ---------------------------------------------------------------------------
|
|
150
153
|
/**
|
|
151
|
-
* Return the world's singleton `ComponentTerm` for `
|
|
154
|
+
* Return the world's singleton `ComponentTerm` for `ceid`, creating it if
|
|
152
155
|
* absent.
|
|
153
156
|
*/
|
|
154
|
-
function getComponentTerm(world,
|
|
155
|
-
let term = world._componentTerms.get(
|
|
157
|
+
function getComponentTerm(world, ceid, key) {
|
|
158
|
+
let term = world._componentTerms.get(ceid);
|
|
156
159
|
if (!term) {
|
|
157
|
-
term = new ComponentTerm(world, key,
|
|
158
|
-
world._componentTerms.set(
|
|
160
|
+
term = new ComponentTerm(world, key, ceid, (t) => destroyTerm(world, t));
|
|
161
|
+
world._componentTerms.set(ceid, term);
|
|
159
162
|
}
|
|
160
163
|
return term;
|
|
161
164
|
}
|
|
@@ -246,9 +249,9 @@ function _analyzeDSL(dsl) {
|
|
|
246
249
|
}
|
|
247
250
|
if ("only" in dsl) {
|
|
248
251
|
const components = dsl.only instanceof Array ? dsl.only : [dsl.only];
|
|
249
|
-
const childAnalyses = components.map((
|
|
250
|
-
leafKeys: new Set([`C:${
|
|
251
|
-
componentEids: new Set([
|
|
252
|
+
const childAnalyses = components.map((ceid) => ({
|
|
253
|
+
leafKeys: new Set([`C:${ceid}`]),
|
|
254
|
+
componentEids: new Set([ceid]),
|
|
252
255
|
dependsOnWorld: false,
|
|
253
256
|
containsOnly: false,
|
|
254
257
|
containsTarget: false,
|
|
@@ -274,9 +277,9 @@ function _analyzeDSL(dsl) {
|
|
|
274
277
|
containsOnly: false,
|
|
275
278
|
containsTarget: false,
|
|
276
279
|
},
|
|
277
|
-
...watch.map((
|
|
278
|
-
leafKeys: new Set([`C:${
|
|
279
|
-
componentEids: new Set([
|
|
280
|
+
...watch.map((ceid) => ({
|
|
281
|
+
leafKeys: new Set([`C:${ceid}`]),
|
|
282
|
+
componentEids: new Set([ceid]),
|
|
280
283
|
dependsOnWorld: false,
|
|
281
284
|
containsOnly: false,
|
|
282
285
|
containsTarget: false,
|
|
@@ -321,7 +324,7 @@ function _mergeAnalyses(analyses) {
|
|
|
321
324
|
};
|
|
322
325
|
for (const a of analyses) {
|
|
323
326
|
a.leafKeys.forEach((k) => merged.leafKeys.add(k));
|
|
324
|
-
a.componentEids.forEach((
|
|
327
|
+
a.componentEids.forEach((ceid) => merged.componentEids.add(ceid));
|
|
325
328
|
merged.dependsOnWorld || (merged.dependsOnWorld = a.dependsOnWorld);
|
|
326
329
|
merged.containsOnly || (merged.containsOnly = a.containsOnly);
|
|
327
330
|
merged.containsTarget || (merged.containsTarget = a.containsTarget);
|
package/dist/terms/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/terms/build.ts"],"names":[],"mappings":"AAyCA,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAGjB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,KAAY,EAAE,GAAa;IACjD,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/C,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/terms/build.ts"],"names":[],"mappings":"AAyCA,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAGjB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,KAAY,EAAE,GAAa;IACjD,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/C,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,GAAa;IACvD,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAY,EAAE,YAAiB,EAAE,MAAc;IAClF,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAChE,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAY,EAAE,YAAiB,EAAE,MAAc;IACpF,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAY,EAAE,YAAiB,EAAE,MAAc;IACpF,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAClE,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY,EAAE,MAAc;IAC9D,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAY,EAAE,MAAc;IAChE,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAS,SAAS,CAAC,KAAY,EAAE,GAAa,EAAE,GAAW;IACzD,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,KAAK,CAClB,KAAK,EACL,GAAG,EACH,GAAG,EACH,GAAwB,EACxB,OAAO,EACP,eAAe,EACf,SAAS,CACV,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,UAAmB,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,cAAc,CACjC,KAAK,EACL,GAAgD,EAChD,GAAG,EACH,OAAO,EACP,SAAS,CACV,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAAY,EAAE,IAAS,EAAE,GAAW;IAC5D,IAAI,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACzE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uEAAuE;AACvE,SAAS,YAAY,CAAC,KAAY,EAAE,GAAW;IAC7C,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,CAAC;AAC1B,CAAC;AAED,uEAAuE;AACvE,SAAS,YAAY,CAAC,KAAY,EAAE,GAAW;IAC7C,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAY,EAAE,IAAU;IAC3C,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAqBD;;;;;;;;;;;;;GAaG;AACH,SAAS,WAAW,CAAC,GAAa;IAChC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO;YACL,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;YAC/B,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO;YACL,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAC/B,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7B,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,cAAc,CAAC;YACpB;gBACE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC/B,aAAa,EAAE,IAAI,GAAG,EAAE;gBACxB,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,KAAK;aACtB;YACD,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,aAAa,GAAI,UAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzD,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAgB;YAC/C,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,cAAc,EAAE,KAAgB;YAChC,YAAY,EAAE,KAAgB;YAC9B,cAAc,EAAE,KAAgB;SACjC,CAAC,CAAC,CAAC;QACJ,OAAO,cAAc,CAAC;YACpB,GAAG,aAAa;YAChB;gBACE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC/B,aAAa,EAAE,IAAI,GAAG,EAAE;gBACxB,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,KAAK;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,cAAc,CAAC;YACpB;gBACE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC/B,aAAa,EAAE,IAAI,GAAG,EAAE;gBACxB,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,KAAK;aACtB;YACD,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtB,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAgB;gBAC/C,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B,cAAc,EAAE,KAAgB;gBAChC,YAAY,EAAE,KAAgB;gBAC9B,cAAc,EAAE,KAAgB;aACjC,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAQ,CAAC;QACpC,OAAO,cAAc,CAAC;YACpB;gBACE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAgB;gBACjD,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChC,cAAc,EAAE,KAAK;gBACrB,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,IAAI;aACrB;YACD,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE;SACxD,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,KAAK;QACnB,cAAc,EAAE,KAAK;KACtB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,QAAuB;IAC7C,MAAM,MAAM,GAAgB;QAC1B,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,KAAK;QACnB,cAAc,EAAE,KAAK;KACtB,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,cAAc,KAArB,MAAM,CAAC,cAAc,GAAK,CAAC,CAAC,cAAc,EAAC;QAC3C,MAAM,CAAC,YAAY,KAAnB,MAAM,CAAC,YAAY,GAAK,CAAC,CAAC,YAAY,EAAC;QACvC,MAAM,CAAC,cAAc,KAArB,MAAM,CAAC,cAAc,GAAK,CAAC,CAAC,cAAc,EAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,QAAuB;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,eAAe,CAAC,KAA0B;IAKjD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO;QACL,UAAU,EAAE,OAAO;QACnB,cAAc;QACd,IAAI,EAAE;YACJ,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Entity } from "../entity/index.js";
|
|
1
|
+
import type { EID, Entity } from "../entity/index.js";
|
|
2
2
|
import type { World } from "../world/index.js";
|
|
3
3
|
import { Term } from "./term.js";
|
|
4
4
|
/**
|
|
@@ -19,8 +19,8 @@ import { Term } from "./term.js";
|
|
|
19
19
|
* about component values.
|
|
20
20
|
*/
|
|
21
21
|
export declare class ComponentTerm extends Term {
|
|
22
|
-
readonly componentEid:
|
|
23
|
-
constructor(world: World, key: string, componentEid:
|
|
22
|
+
readonly componentEid: EID;
|
|
23
|
+
constructor(world: World, key: string, componentEid: EID, onDestroy: (term: Term) => void);
|
|
24
24
|
/** Called by `build.ts` when the component is added to `entity`. */
|
|
25
25
|
componentAdded(entity: Entity): void;
|
|
26
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component_term.js","sourceRoot":"","sources":["../../src/terms/component_term.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,aAAc,SAAQ,IAAI;IACrC,YACE,KAAY,EACZ,GAAW,EACK,
|
|
1
|
+
{"version":3,"file":"component_term.js","sourceRoot":"","sources":["../../src/terms/component_term.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,aAAc,SAAQ,IAAI;IACrC,YACE,KAAY,EACZ,GAAW,EACK,YAAiB,EACjC,SAA+B;QAE/B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAHhC,iBAAY,GAAZ,YAAY,CAAK;QAIjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,oEAAoE;IAC7D,cAAc,CAAC,MAAc;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAED;;;;;;;OAOG;IACI,gBAAgB,CAAC,MAAc;QACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,wEAAwE;IACjE,gBAAgB,CAAC,MAAc;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,gBAAgB;IACN,QAAQ,CAAC,MAAc;QAC/B,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC;IAC5E,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { QueryDSL } from "../dsl.js";
|
|
2
|
+
import type { World } from "../world/index.js";
|
|
3
|
+
import { Term } from "./term.js";
|
|
4
|
+
import { type MergedInfo } from "./predicate_term.js";
|
|
5
|
+
import type { getTerm as GetTermFn } from "./build.js";
|
|
6
|
+
/** Diamond analysis callback injected into composite builds to avoid circular imports. */
|
|
7
|
+
export type CompositePrecheck = (terms: readonly QueryDSL[]) => {
|
|
8
|
+
hasDiamond: boolean;
|
|
9
|
+
containsTarget: boolean;
|
|
10
|
+
info: MergedInfo;
|
|
11
|
+
};
|
|
12
|
+
/** Constructor shape shared by {@link AllTerm} and {@link AnyTerm}. */
|
|
13
|
+
export type CompositeTermCtor = new (world: World, key: string, children: readonly Term[], onDestroy: (term: Term) => void) => Term;
|
|
14
|
+
/**
|
|
15
|
+
* Shared build logic for the `all` / `any` composite terms.
|
|
16
|
+
*
|
|
17
|
+
* Runs the diamond pre-check and either short-circuits to a merged
|
|
18
|
+
* `PredicateTerm` (when a leaf diamond is detected and no target term is
|
|
19
|
+
* involved) or constructs the requested composite node from its child terms.
|
|
20
|
+
* `AllTerm` and `AnyTerm` differ only in which constructor they pass.
|
|
21
|
+
*
|
|
22
|
+
* @param Ctor - The composite term constructor (`AllTerm` or `AnyTerm`).
|
|
23
|
+
* @param world - Owning world.
|
|
24
|
+
* @param terms - Direct child DSL nodes.
|
|
25
|
+
* @param key - Canonical cache key.
|
|
26
|
+
* @param originalDSL - The full DSL node (used when collapsing to a merged term).
|
|
27
|
+
* @param getTerm - Term canonicalizer / cache accessor.
|
|
28
|
+
* @param precheck - Diamond analysis callback.
|
|
29
|
+
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
30
|
+
* @returns The composite term or, on diamond, a merged `PredicateTerm`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildCompositeTerm(Ctor: CompositeTermCtor, world: World, terms: readonly QueryDSL[], key: string, originalDSL: QueryDSL, getTerm: typeof GetTermFn, precheck: CompositePrecheck, onDestroy: (term: Term) => void): Term;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PredicateTerm } from "./predicate_term.js";
|
|
2
|
+
/**
|
|
3
|
+
* Shared build logic for the `all` / `any` composite terms.
|
|
4
|
+
*
|
|
5
|
+
* Runs the diamond pre-check and either short-circuits to a merged
|
|
6
|
+
* `PredicateTerm` (when a leaf diamond is detected and no target term is
|
|
7
|
+
* involved) or constructs the requested composite node from its child terms.
|
|
8
|
+
* `AllTerm` and `AnyTerm` differ only in which constructor they pass.
|
|
9
|
+
*
|
|
10
|
+
* @param Ctor - The composite term constructor (`AllTerm` or `AnyTerm`).
|
|
11
|
+
* @param world - Owning world.
|
|
12
|
+
* @param terms - Direct child DSL nodes.
|
|
13
|
+
* @param key - Canonical cache key.
|
|
14
|
+
* @param originalDSL - The full DSL node (used when collapsing to a merged term).
|
|
15
|
+
* @param getTerm - Term canonicalizer / cache accessor.
|
|
16
|
+
* @param precheck - Diamond analysis callback.
|
|
17
|
+
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
18
|
+
* @returns The composite term or, on diamond, a merged `PredicateTerm`.
|
|
19
|
+
*/
|
|
20
|
+
export function buildCompositeTerm(Ctor, world, terms, key, originalDSL, getTerm, precheck, onDestroy) {
|
|
21
|
+
const checked = precheck(terms);
|
|
22
|
+
if (checked.hasDiamond && !checked.containsTarget) {
|
|
23
|
+
return PredicateTerm.buildMerged(world, originalDSL, key, checked.info, getTerm, onDestroy);
|
|
24
|
+
}
|
|
25
|
+
const children = terms.map((dsl) => getTerm(world, dsl));
|
|
26
|
+
return new Ctor(world, key, children, onDestroy);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=composite_build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite_build.js","sourceRoot":"","sources":["../../src/terms/composite_build.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAkBrE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAuB,EACvB,KAAY,EACZ,KAA0B,EAC1B,GAAW,EACX,WAAqB,EACrB,OAAyB,EACzB,QAA2B,EAC3B,SAA+B;IAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Entity } from "../entity/index.js";
|
|
1
|
+
import type { EID, Entity } from "../entity/index.js";
|
|
2
2
|
import type { World } from "../world/index.js";
|
|
3
3
|
import { Term } from "./term.js";
|
|
4
4
|
import type { getTerm as GetTermFn } from "./build.js";
|
|
@@ -21,7 +21,7 @@ import type { getTerm as GetTermFn } from "./build.js";
|
|
|
21
21
|
*/
|
|
22
22
|
export declare class OnlyTerm extends Term {
|
|
23
23
|
private readonly _componentEids;
|
|
24
|
-
constructor(world: World, key: string, allTerm: Term, worldTerm: Term, _componentEids: readonly
|
|
24
|
+
constructor(world: World, key: string, allTerm: Term, worldTerm: Term, _componentEids: readonly EID[], onDestroy: (term: Term) => void);
|
|
25
25
|
/**
|
|
26
26
|
* Build an `OnlyTerm` for the given component eid list.
|
|
27
27
|
*
|
|
@@ -32,7 +32,7 @@ export declare class OnlyTerm extends Term {
|
|
|
32
32
|
* @param getTerm - Term canonicalizer / cache accessor.
|
|
33
33
|
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
34
34
|
*/
|
|
35
|
-
static build(world: World, componentEids: readonly
|
|
35
|
+
static build(world: World, componentEids: readonly EID[], key: string, getTerm: typeof GetTermFn, onDestroy: (term: Term) => void): OnlyTerm;
|
|
36
36
|
/**
|
|
37
37
|
* Shape-channel entry point: called directly by `WorldTerm` when the entity's
|
|
38
38
|
* component set changes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"only_term.js","sourceRoot":"","sources":["../../src/terms/only_term.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,QAAS,SAAQ,IAAI;IAChC,YACE,KAAY,EACZ,GAAW,EACX,OAAa,EACb,SAAe,EACE,
|
|
1
|
+
{"version":3,"file":"only_term.js","sourceRoot":"","sources":["../../src/terms/only_term.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,QAAS,SAAQ,IAAI;IAChC,YACE,KAAY,EACZ,GAAW,EACX,OAAa,EACb,SAAe,EACE,cAA8B,EAC/C,SAA+B;QAE/B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAH3B,mBAAc,GAAd,cAAc,CAAgB;QAI/C,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QACxC,IAAI,SAAS,YAAY,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,KAAK,CACjB,KAAY,EACZ,aAA6B,EAC7B,GAAW,EACX,OAAyB,EACzB,SAA+B;QAE/B,uEAAuE;QACvE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,aAAsB,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAChF,CAAC;IAED;;;;;;;;;OASG;IACa,aAAa,CAAC,MAAc;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACgB,eAAe,CAAC,MAAc,EAAE,KAAW;QAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,gBAAgB;IACN,QAAQ,CAAC,MAAc;QAC/B,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7B,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CACtD,CAAC;IACJ,CAAC;CACF"}
|