@vworlds/vecs 1.0.15 → 1.0.17
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 +249 -119
- package/dist/component.d.ts +52 -76
- package/dist/component.js +60 -45
- package/dist/component.js.map +1 -1
- package/dist/component_meta.d.ts +98 -0
- package/dist/component_meta.js +65 -0
- package/dist/component_meta.js.map +1 -0
- package/dist/dsl.d.ts +46 -34
- package/dist/dsl.js +459 -61
- package/dist/dsl.js.map +1 -1
- package/dist/entity/entity.base.d.ts +57 -0
- package/dist/entity/entity.base.js +81 -0
- package/dist/entity/entity.base.js.map +1 -0
- package/dist/entity/entity.components.d.ts +117 -0
- package/dist/entity/entity.components.js +244 -0
- package/dist/entity/entity.components.js.map +1 -0
- package/dist/entity/entity.d.ts +35 -0
- package/dist/entity/entity.identity.d.ts +8 -0
- package/dist/entity/entity.identity.js +15 -0
- package/dist/entity/entity.identity.js.map +1 -0
- package/dist/entity/entity.js +33 -0
- package/dist/entity/entity.js.map +1 -0
- package/dist/entity/entity.lifecycle.d.ts +12 -0
- package/dist/entity/entity.lifecycle.js +111 -0
- package/dist/entity/entity.lifecycle.js.map +1 -0
- package/dist/entity/entity.queries.d.ts +3 -0
- package/dist/entity/entity.queries.js +33 -0
- package/dist/entity/entity.queries.js.map +1 -0
- package/dist/entity/entity.relationships.d.ts +9 -0
- package/dist/entity/entity.relationships.js +74 -0
- package/dist/entity/entity.relationships.js.map +1 -0
- package/dist/entity/index.d.ts +2 -0
- package/dist/entity/index.js +3 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/filter.d.ts +27 -8
- package/dist/filter.js +33 -18
- package/dist/filter.js.map +1 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/inject.d.ts +80 -0
- package/dist/inject.js +270 -0
- package/dist/inject.js.map +1 -0
- package/dist/module.d.ts +23 -0
- package/dist/module.js +17 -0
- package/dist/module.js.map +1 -0
- package/dist/modules/identity.d.ts +15 -0
- package/dist/modules/identity.js +41 -0
- package/dist/modules/identity.js.map +1 -0
- package/dist/modules/singleton.d.ts +26 -0
- package/dist/modules/singleton.js +41 -0
- package/dist/modules/singleton.js.map +1 -0
- package/dist/package.json +12 -1
- package/dist/phase.d.ts +2 -2
- package/dist/query/index.d.ts +6 -0
- package/dist/query/index.js +5 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/query.00.base.d.ts +23 -0
- package/dist/query/query.00.base.js +77 -0
- package/dist/query/query.00.base.js.map +1 -0
- package/dist/query/query.01.reactive.d.ts +7 -0
- package/dist/query/query.01.reactive.js +58 -0
- package/dist/query/query.01.reactive.js.map +1 -0
- package/dist/query/query.02.lifecycle.d.ts +6 -0
- package/dist/query/query.02.lifecycle.js +63 -0
- package/dist/query/query.02.lifecycle.js.map +1 -0
- package/dist/query/query.03.tracking.d.ts +15 -0
- package/dist/query/query.03.tracking.js +31 -0
- package/dist/query/query.03.tracking.js.map +1 -0
- package/dist/query/query.04.callbacks.d.ts +14 -0
- package/dist/query/query.04.callbacks.js +65 -0
- package/dist/query/query.04.callbacks.js.map +1 -0
- package/dist/query/query.05.updates.d.ts +14 -0
- package/dist/query/query.05.updates.js +81 -0
- package/dist/query/query.05.updates.js.map +1 -0
- package/dist/query/query.06.predicate.d.ts +13 -0
- package/dist/query/query.06.predicate.js +40 -0
- package/dist/query/query.06.predicate.js.map +1 -0
- package/dist/query/query.07.groups.d.ts +41 -0
- package/dist/query/query.07.groups.js +110 -0
- package/dist/query/query.07.groups.js.map +1 -0
- package/dist/query/query.d.ts +53 -0
- package/dist/query/query.js +138 -0
- package/dist/query/query.js.map +1 -0
- package/dist/relationship.d.ts +19 -0
- package/dist/relationship.js +18 -0
- package/dist/relationship.js.map +1 -0
- package/dist/system.d.ts +37 -23
- package/dist/system.js +80 -64
- package/dist/system.js.map +1 -1
- package/dist/terms/all_term.d.ts +32 -0
- package/dist/terms/all_term.js +41 -0
- package/dist/terms/all_term.js.map +1 -0
- package/dist/terms/any_term.d.ts +33 -0
- package/dist/terms/any_term.js +42 -0
- package/dist/terms/any_term.js.map +1 -0
- package/dist/terms/build.d.ts +62 -0
- package/dist/terms/build.js +382 -0
- package/dist/terms/build.js.map +1 -0
- package/dist/terms/component_term.d.ts +37 -0
- package/dist/terms/component_term.js +49 -0
- package/dist/terms/component_term.js.map +1 -0
- package/dist/terms/empty_term.d.ts +6 -0
- package/dist/terms/empty_term.js +12 -0
- package/dist/terms/empty_term.js.map +1 -0
- package/dist/terms/index.d.ts +11 -0
- package/dist/terms/index.js +12 -0
- package/dist/terms/index.js.map +1 -0
- package/dist/terms/not_term.d.ts +35 -0
- package/dist/terms/not_term.js +47 -0
- package/dist/terms/not_term.js.map +1 -0
- package/dist/terms/only_term.d.ts +47 -0
- package/dist/terms/only_term.js +79 -0
- package/dist/terms/only_term.js.map +1 -0
- package/dist/terms/predicate_term.d.ts +80 -0
- package/dist/terms/predicate_term.js +109 -0
- package/dist/terms/predicate_term.js.map +1 -0
- package/dist/terms/target_term.d.ts +43 -0
- package/dist/terms/target_term.js +87 -0
- package/dist/terms/target_term.js.map +1 -0
- package/dist/terms/term.d.ts +94 -0
- package/dist/terms/term.js +202 -0
- package/dist/terms/term.js.map +1 -0
- package/dist/terms/world_term.d.ts +68 -0
- package/dist/terms/world_term.js +99 -0
- package/dist/terms/world_term.js.map +1 -0
- package/dist/timer.js +2 -2
- package/dist/timer.js.map +1 -1
- package/dist/util/array_map.js +12 -0
- package/dist/util/array_map.js.map +1 -1
- package/dist/util/bitset.js +107 -22
- package/dist/util/bitset.js.map +1 -1
- package/dist/util/dense_set.d.ts +1 -0
- package/dist/util/dense_set.js +90 -0
- package/dist/util/dense_set.js.map +1 -0
- package/dist/util/id_pool.d.ts +30 -0
- package/dist/util/id_pool.js +222 -0
- package/dist/util/id_pool.js.map +1 -0
- package/dist/world/index.d.ts +3 -0
- package/dist/world/index.js +3 -0
- package/dist/world/index.js.map +1 -0
- package/dist/world/world.base.d.ts +6 -0
- package/dist/world/world.base.js +21 -0
- package/dist/world/world.base.js.map +1 -0
- package/dist/world/world.components.d.ts +67 -0
- package/dist/world/world.components.js +93 -0
- package/dist/world/world.components.js.map +1 -0
- package/dist/world/world.d.ts +29 -0
- package/dist/world/world.deferred.d.ts +13 -0
- package/dist/world/world.deferred.js +93 -0
- package/dist/world/world.deferred.js.map +1 -0
- package/dist/world/world.entities.d.ts +18 -0
- package/dist/world/world.entities.js +97 -0
- package/dist/world/world.entities.js.map +1 -0
- package/dist/world/world.js +39 -0
- package/dist/world/world.js.map +1 -0
- package/dist/world/world.modules.d.ts +12 -0
- package/dist/world/world.modules.js +21 -0
- package/dist/world/world.modules.js.map +1 -0
- package/dist/world/world.pipeline.d.ts +21 -0
- package/dist/world/world.pipeline.js +106 -0
- package/dist/world/world.pipeline.js.map +1 -0
- package/dist/world/world.pools.d.ts +9 -0
- package/dist/world/world.pools.js +63 -0
- package/dist/world/world.pools.js.map +1 -0
- package/dist/world/world.queries.d.ts +18 -0
- package/dist/world/world.queries.js +101 -0
- package/dist/world/world.queries.js.map +1 -0
- package/dist/world/world.storage.d.ts +7 -0
- package/dist/world/world.storage.js +26 -0
- package/dist/world/world.storage.js.map +1 -0
- package/package.json +12 -1
- package/dist/entity.d.ts +0 -215
- package/dist/entity.js +0 -457
- package/dist/entity.js.map +0 -1
- package/dist/query.d.ts +0 -251
- package/dist/query.js +0 -353
- package/dist/query.js.map +0 -1
- package/dist/world.d.ts +0 -389
- package/dist/world.js +0 -631
- package/dist/world.js.map +0 -1
package/dist/system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
+
/**
|
|
7
|
+
* Composite term that matches entities present in **all** of its children.
|
|
8
|
+
*
|
|
9
|
+
* Constructed via {@link build}, which runs the diamond pre-check first and
|
|
10
|
+
* may short-circuit to a merged `PredicateTerm` instead of building this node.
|
|
11
|
+
*/
|
|
12
|
+
export declare class AllTerm extends Term {
|
|
13
|
+
constructor(world: World, key: string, children: readonly Term[], onDestroy: (term: Term) => void);
|
|
14
|
+
/**
|
|
15
|
+
* Build an `AllTerm` for the given child DSL list, collapsing to a merged
|
|
16
|
+
* predicate term if a leaf diamond is detected.
|
|
17
|
+
*
|
|
18
|
+
* @param world - Owning world.
|
|
19
|
+
* @param terms - Direct child DSL nodes.
|
|
20
|
+
* @param key - Canonical cache key.
|
|
21
|
+
* @param originalDSL - The full DSL node (used when collapsing to a merged term).
|
|
22
|
+
* @param getTerm - Term canonicalizer / cache accessor.
|
|
23
|
+
* @param precheck - Diamond analysis callback (injected to avoid circular imports).
|
|
24
|
+
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
25
|
+
* @returns An `AllTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
26
|
+
*/
|
|
27
|
+
static build(world: World, terms: readonly QueryDSL[], key: string, originalDSL: QueryDSL, getTerm: typeof GetTermFn, precheck: (terms: readonly QueryDSL[]) => {
|
|
28
|
+
hasDiamond: boolean;
|
|
29
|
+
containsTarget: boolean;
|
|
30
|
+
info: MergedInfo;
|
|
31
|
+
}, onDestroy: (term: Term) => void): Term;
|
|
32
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Term } from "./term.js";
|
|
2
|
+
import { PredicateTerm } from "./predicate_term.js";
|
|
3
|
+
/**
|
|
4
|
+
* Composite term that matches entities present in **all** of its children.
|
|
5
|
+
*
|
|
6
|
+
* Constructed via {@link build}, which runs the diamond pre-check first and
|
|
7
|
+
* may short-circuit to a merged `PredicateTerm` instead of building this node.
|
|
8
|
+
*/
|
|
9
|
+
export class AllTerm extends Term {
|
|
10
|
+
constructor(world, key, children, onDestroy) {
|
|
11
|
+
super(world, key, "all", false, onDestroy);
|
|
12
|
+
this._setChildren(children);
|
|
13
|
+
this._initializeFromWorld();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build an `AllTerm` for the given child DSL list, collapsing to a merged
|
|
17
|
+
* predicate term if a leaf diamond is detected.
|
|
18
|
+
*
|
|
19
|
+
* @param world - Owning world.
|
|
20
|
+
* @param terms - Direct child DSL nodes.
|
|
21
|
+
* @param key - Canonical cache key.
|
|
22
|
+
* @param originalDSL - The full DSL node (used when collapsing to a merged term).
|
|
23
|
+
* @param getTerm - Term canonicalizer / cache accessor.
|
|
24
|
+
* @param precheck - Diamond analysis callback (injected to avoid circular imports).
|
|
25
|
+
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
26
|
+
* @returns An `AllTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
27
|
+
*/
|
|
28
|
+
static build(world, terms, key, originalDSL, getTerm, precheck, onDestroy) {
|
|
29
|
+
const checked = precheck(terms);
|
|
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);
|
|
35
|
+
}
|
|
36
|
+
/** @internal */
|
|
37
|
+
_matches(entity) {
|
|
38
|
+
return this._children.every((child) => child.has(entity));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=all_term.js.map
|
|
@@ -0,0 +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,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAGrE;;;;;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,QAIC,EACD,SAA+B;QAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAClD,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* Composite term that matches entities present in **at least one** of its
|
|
8
|
+
* children.
|
|
9
|
+
*
|
|
10
|
+
* Constructed via {@link build}, which runs the diamond pre-check first and
|
|
11
|
+
* may short-circuit to a merged `PredicateTerm` instead of building this node.
|
|
12
|
+
*/
|
|
13
|
+
export declare class AnyTerm extends Term {
|
|
14
|
+
constructor(world: World, key: string, children: readonly Term[], onDestroy: (term: Term) => void);
|
|
15
|
+
/**
|
|
16
|
+
* Build an `AnyTerm` for the given child DSL list, collapsing to a merged
|
|
17
|
+
* predicate term if a leaf diamond is detected.
|
|
18
|
+
*
|
|
19
|
+
* @param world - Owning world.
|
|
20
|
+
* @param terms - Direct child DSL nodes.
|
|
21
|
+
* @param key - Canonical cache key.
|
|
22
|
+
* @param originalDSL - The full DSL node (used when collapsing to a merged term).
|
|
23
|
+
* @param getTerm - Term canonicalizer / cache accessor.
|
|
24
|
+
* @param precheck - Diamond analysis callback (injected to avoid circular imports).
|
|
25
|
+
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
26
|
+
* @returns An `AnyTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
27
|
+
*/
|
|
28
|
+
static build(world: World, terms: readonly QueryDSL[], key: string, originalDSL: QueryDSL, getTerm: typeof GetTermFn, precheck: (terms: readonly QueryDSL[]) => {
|
|
29
|
+
hasDiamond: boolean;
|
|
30
|
+
containsTarget: boolean;
|
|
31
|
+
info: MergedInfo;
|
|
32
|
+
}, onDestroy: (term: Term) => void): Term;
|
|
33
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Term } from "./term.js";
|
|
2
|
+
import { PredicateTerm } from "./predicate_term.js";
|
|
3
|
+
/**
|
|
4
|
+
* Composite term that matches entities present in **at least one** of its
|
|
5
|
+
* children.
|
|
6
|
+
*
|
|
7
|
+
* Constructed via {@link build}, which runs the diamond pre-check first and
|
|
8
|
+
* may short-circuit to a merged `PredicateTerm` instead of building this node.
|
|
9
|
+
*/
|
|
10
|
+
export class AnyTerm extends Term {
|
|
11
|
+
constructor(world, key, children, onDestroy) {
|
|
12
|
+
super(world, key, "any", false, onDestroy);
|
|
13
|
+
this._setChildren(children);
|
|
14
|
+
this._initializeFromWorld();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build an `AnyTerm` for the given child DSL list, collapsing to a merged
|
|
18
|
+
* predicate term if a leaf diamond is detected.
|
|
19
|
+
*
|
|
20
|
+
* @param world - Owning world.
|
|
21
|
+
* @param terms - Direct child DSL nodes.
|
|
22
|
+
* @param key - Canonical cache key.
|
|
23
|
+
* @param originalDSL - The full DSL node (used when collapsing to a merged term).
|
|
24
|
+
* @param getTerm - Term canonicalizer / cache accessor.
|
|
25
|
+
* @param precheck - Diamond analysis callback (injected to avoid circular imports).
|
|
26
|
+
* @param onDestroy - Called when the last consumer unsubscribes.
|
|
27
|
+
* @returns An `AnyTerm` or, on diamond, a `PredicateTerm` with `kind === "merged"`.
|
|
28
|
+
*/
|
|
29
|
+
static build(world, terms, key, originalDSL, getTerm, precheck, onDestroy) {
|
|
30
|
+
const checked = precheck(terms);
|
|
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);
|
|
36
|
+
}
|
|
37
|
+
/** @internal */
|
|
38
|
+
_matches(entity) {
|
|
39
|
+
return this._children.some((child) => child.has(entity));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=any_term.js.map
|
|
@@ -0,0 +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,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAGrE;;;;;;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,QAIC,EACD,SAA+B;QAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAClD,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type QueryDSL } from "../dsl.js";
|
|
2
|
+
import type { World } from "../world/index.js";
|
|
3
|
+
import type { Entity } from "../entity/index.js";
|
|
4
|
+
import { Term } from "./term.js";
|
|
5
|
+
/**
|
|
6
|
+
* Canonicalize `dsl`, look up or create its term in the world cache, and
|
|
7
|
+
* return it.
|
|
8
|
+
*
|
|
9
|
+
* This is the primary entry point for all query and filter construction.
|
|
10
|
+
* Throws if `dsl` contains a `source`/`children`/`parent` down-term, which
|
|
11
|
+
* is filter-only and cannot be represented as a cached term.
|
|
12
|
+
*
|
|
13
|
+
* @param world - Owning world.
|
|
14
|
+
* @param dsl - Query DSL expression to resolve.
|
|
15
|
+
* @returns The canonical `Term` for `dsl` in this world.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getTerm(world: World, dsl: QueryDSL): Term;
|
|
18
|
+
/**
|
|
19
|
+
* Return the cached term for `dsl` without creating one if absent.
|
|
20
|
+
*
|
|
21
|
+
* Useful for introspection and testing; does not simplify the DSL.
|
|
22
|
+
*
|
|
23
|
+
* @param world - Owning world.
|
|
24
|
+
* @param dsl - Query DSL expression to look up.
|
|
25
|
+
* @returns The cached `Term`, or `undefined` if none exists.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCachedTerm(world: World, dsl: QueryDSL): Term | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Notify the term graph that `componentEid` was added to `entity`.
|
|
30
|
+
*
|
|
31
|
+
* Routes to the corresponding `ComponentTerm` (membership enter) and to the
|
|
32
|
+
* world term (shape change, needed by `only` and merged predicate terms).
|
|
33
|
+
*/
|
|
34
|
+
export declare function notifyComponentAdded(world: World, componentEid: number, entity: Entity): void;
|
|
35
|
+
/**
|
|
36
|
+
* Notify the term graph that a component of `componentEid` changed value on
|
|
37
|
+
* `entity` without a membership change.
|
|
38
|
+
*
|
|
39
|
+
* Routes only to the `ComponentTerm`'s refresh channel (not shape), which
|
|
40
|
+
* wakes predicate terms watching this component.
|
|
41
|
+
*/
|
|
42
|
+
export declare function notifyComponentChanged(world: World, componentEid: number, entity: Entity): void;
|
|
43
|
+
/**
|
|
44
|
+
* Notify the term graph that `componentEid` was removed from `entity`.
|
|
45
|
+
*
|
|
46
|
+
* Routes to the `ComponentTerm` (membership exit) and world term (shape).
|
|
47
|
+
*/
|
|
48
|
+
export declare function notifyComponentRemoved(world: World, componentEid: number, entity: Entity): void;
|
|
49
|
+
/**
|
|
50
|
+
* Notify the term graph that a new entity was created.
|
|
51
|
+
*
|
|
52
|
+
* The world term evaluates the entity immediately and emits an enter event if
|
|
53
|
+
* it qualifies (i.e. it is not a `Component` instance).
|
|
54
|
+
*/
|
|
55
|
+
export declare function notifyEntityCreated(world: World, entity: Entity): void;
|
|
56
|
+
/**
|
|
57
|
+
* Notify the term graph that `entity` was destroyed.
|
|
58
|
+
*
|
|
59
|
+
* The world term removes the entity from its set unconditionally, propagating
|
|
60
|
+
* exit events up the tree.
|
|
61
|
+
*/
|
|
62
|
+
export declare function notifyEntityDestroyed(world: World, entity: Entity): void;
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { containsDownTerm, getDSLCacheKey, simplifyQueryDSL, } from "../dsl.js";
|
|
2
|
+
import { AllTerm } from "./all_term.js";
|
|
3
|
+
import { AnyTerm } from "./any_term.js";
|
|
4
|
+
import { ComponentTerm } from "./component_term.js";
|
|
5
|
+
import { EmptyTerm } from "./empty_term.js";
|
|
6
|
+
import { NotTerm } from "./not_term.js";
|
|
7
|
+
import { OnlyTerm } from "./only_term.js";
|
|
8
|
+
import { normalizeWatch, PredicateTerm } from "./predicate_term.js";
|
|
9
|
+
import { TargetTerm } from "./target_term.js";
|
|
10
|
+
import { WorldTerm } from "./world_term.js";
|
|
11
|
+
const WORLD_LEAF = "W";
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Public API
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Canonicalize `dsl`, look up or create its term in the world cache, and
|
|
17
|
+
* return it.
|
|
18
|
+
*
|
|
19
|
+
* This is the primary entry point for all query and filter construction.
|
|
20
|
+
* Throws if `dsl` contains a `source`/`children`/`parent` down-term, which
|
|
21
|
+
* is filter-only and cannot be represented as a cached term.
|
|
22
|
+
*
|
|
23
|
+
* @param world - Owning world.
|
|
24
|
+
* @param dsl - Query DSL expression to resolve.
|
|
25
|
+
* @returns The canonical `Term` for `dsl` in this world.
|
|
26
|
+
*/
|
|
27
|
+
export function getTerm(world, dsl) {
|
|
28
|
+
if (containsDownTerm(dsl)) {
|
|
29
|
+
throw new Error("source/children terms are filter-only; use world.filter(...)");
|
|
30
|
+
}
|
|
31
|
+
const simplified = simplifyQueryDSL(dsl, world);
|
|
32
|
+
const key = getDSLCacheKey(simplified, world);
|
|
33
|
+
const cached = world._termCache.get(key);
|
|
34
|
+
if (cached) {
|
|
35
|
+
return cached;
|
|
36
|
+
}
|
|
37
|
+
const term = _dispatch(world, simplified, key);
|
|
38
|
+
world._termCache.set(key, term);
|
|
39
|
+
return term;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Return the cached term for `dsl` without creating one if absent.
|
|
43
|
+
*
|
|
44
|
+
* Useful for introspection and testing; does not simplify the DSL.
|
|
45
|
+
*
|
|
46
|
+
* @param world - Owning world.
|
|
47
|
+
* @param dsl - Query DSL expression to look up.
|
|
48
|
+
* @returns The cached `Term`, or `undefined` if none exists.
|
|
49
|
+
*/
|
|
50
|
+
export function getCachedTerm(world, dsl) {
|
|
51
|
+
return world._termCache.get(getDSLCacheKey(dsl, world));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Notify the term graph that `componentEid` was added to `entity`.
|
|
55
|
+
*
|
|
56
|
+
* Routes to the corresponding `ComponentTerm` (membership enter) and to the
|
|
57
|
+
* world term (shape change, needed by `only` and merged predicate terms).
|
|
58
|
+
*/
|
|
59
|
+
export function notifyComponentAdded(world, componentEid, entity) {
|
|
60
|
+
world._componentTerms.get(componentEid)?.componentAdded(entity);
|
|
61
|
+
world._worldTerm?.entityShapeChanged(entity);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Notify the term graph that a component of `componentEid` changed value on
|
|
65
|
+
* `entity` without a membership change.
|
|
66
|
+
*
|
|
67
|
+
* Routes only to the `ComponentTerm`'s refresh channel (not shape), which
|
|
68
|
+
* wakes predicate terms watching this component.
|
|
69
|
+
*/
|
|
70
|
+
export function notifyComponentChanged(world, componentEid, entity) {
|
|
71
|
+
world._componentTerms.get(componentEid)?.componentChanged(entity);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Notify the term graph that `componentEid` was removed from `entity`.
|
|
75
|
+
*
|
|
76
|
+
* Routes to the `ComponentTerm` (membership exit) and world term (shape).
|
|
77
|
+
*/
|
|
78
|
+
export function notifyComponentRemoved(world, componentEid, entity) {
|
|
79
|
+
world._componentTerms.get(componentEid)?.componentRemoved(entity);
|
|
80
|
+
world._worldTerm?.entityShapeChanged(entity);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Notify the term graph that a new entity was created.
|
|
84
|
+
*
|
|
85
|
+
* The world term evaluates the entity immediately and emits an enter event if
|
|
86
|
+
* it qualifies (i.e. it is not a `Component` instance).
|
|
87
|
+
*/
|
|
88
|
+
export function notifyEntityCreated(world, entity) {
|
|
89
|
+
world._worldTerm?.entityCreated(entity);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Notify the term graph that `entity` was destroyed.
|
|
93
|
+
*
|
|
94
|
+
* The world term removes the entity from its set unconditionally, propagating
|
|
95
|
+
* exit events up the tree.
|
|
96
|
+
*/
|
|
97
|
+
export function notifyEntityDestroyed(world, entity) {
|
|
98
|
+
world._worldTerm?.entityDestroyed(entity);
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Central dispatch — the only place that maps DSL shape → class
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
/**
|
|
104
|
+
* Map a simplified, canonical DSL node to the appropriate `Term` subclass.
|
|
105
|
+
*
|
|
106
|
+
* This is the single place where DSL structure is translated to a live term.
|
|
107
|
+
* Every branch either returns a world-singleton leaf (world / component /
|
|
108
|
+
* empty) or constructs a new composite term. The `AllTerm` and `AnyTerm`
|
|
109
|
+
* branches delegate to their respective static builders, which perform the
|
|
110
|
+
* diamond pre-check before constructing any children.
|
|
111
|
+
*/
|
|
112
|
+
function _dispatch(world, dsl, key) {
|
|
113
|
+
const onDestroy = (term) => destroyTerm(world, term);
|
|
114
|
+
if (dsl === true) {
|
|
115
|
+
return getWorldTerm(world, key);
|
|
116
|
+
}
|
|
117
|
+
if (dsl === false) {
|
|
118
|
+
return getEmptyTerm(world, key);
|
|
119
|
+
}
|
|
120
|
+
if (typeof dsl === "number") {
|
|
121
|
+
return getComponentTerm(world, dsl, key);
|
|
122
|
+
}
|
|
123
|
+
if (dsl instanceof Array) {
|
|
124
|
+
return AllTerm.build(world, dsl, key, dsl, getTerm, _allAnyPrecheck, onDestroy);
|
|
125
|
+
}
|
|
126
|
+
if ("all" in dsl) {
|
|
127
|
+
return AllTerm.build(world, dsl.all, key, dsl, getTerm, _allAnyPrecheck, onDestroy);
|
|
128
|
+
}
|
|
129
|
+
if ("any" in dsl) {
|
|
130
|
+
return AnyTerm.build(world, dsl.any, key, dsl, getTerm, _allAnyPrecheck, onDestroy);
|
|
131
|
+
}
|
|
132
|
+
if ("not" in dsl) {
|
|
133
|
+
return NotTerm.build(world, dsl.not, key, getTerm, onDestroy);
|
|
134
|
+
}
|
|
135
|
+
if ("only" in dsl) {
|
|
136
|
+
const components = dsl.only instanceof Array ? dsl.only : [dsl.only];
|
|
137
|
+
return OnlyTerm.build(world, components, key, getTerm, onDestroy);
|
|
138
|
+
}
|
|
139
|
+
if ("test" in dsl) {
|
|
140
|
+
return PredicateTerm.buildPredicate(world, dsl, key, getTerm, onDestroy);
|
|
141
|
+
}
|
|
142
|
+
if ("target" in dsl) {
|
|
143
|
+
return TargetTerm.build(world, dsl.target[0], dsl.target[1], key, getTerm, onDestroy);
|
|
144
|
+
}
|
|
145
|
+
throw new Error("Unrecognized query term");
|
|
146
|
+
}
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
// World-singleton leaf getters
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
/**
|
|
151
|
+
* Return the world's singleton `ComponentTerm` for `eid`, creating it if
|
|
152
|
+
* absent.
|
|
153
|
+
*/
|
|
154
|
+
function getComponentTerm(world, eid, key) {
|
|
155
|
+
let term = world._componentTerms.get(eid);
|
|
156
|
+
if (!term) {
|
|
157
|
+
term = new ComponentTerm(world, key, eid, (t) => destroyTerm(world, t));
|
|
158
|
+
world._componentTerms.set(eid, term);
|
|
159
|
+
}
|
|
160
|
+
return term;
|
|
161
|
+
}
|
|
162
|
+
/** Return the world's singleton `EmptyTerm`, creating it if absent. */
|
|
163
|
+
function getEmptyTerm(world, key) {
|
|
164
|
+
if (!world._emptyTerm) {
|
|
165
|
+
world._emptyTerm = new EmptyTerm(world, key, (t) => destroyTerm(world, t));
|
|
166
|
+
}
|
|
167
|
+
return world._emptyTerm;
|
|
168
|
+
}
|
|
169
|
+
/** Return the world's singleton `WorldTerm`, creating it if absent. */
|
|
170
|
+
function getWorldTerm(world, key) {
|
|
171
|
+
if (!world._worldTerm) {
|
|
172
|
+
world._worldTerm = new WorldTerm(world, key, (t) => destroyTerm(world, t));
|
|
173
|
+
}
|
|
174
|
+
return world._worldTerm;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Remove `term` from the world term cache.
|
|
178
|
+
*
|
|
179
|
+
* Called by a term's `_onDestroy` hook when its consumer count reaches zero.
|
|
180
|
+
*/
|
|
181
|
+
function destroyTerm(world, term) {
|
|
182
|
+
world._termCache.delete(term.key);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Recursively collect leaf metadata from a DSL subtree.
|
|
186
|
+
*
|
|
187
|
+
* This walk runs **before** any child terms are constructed. That is the
|
|
188
|
+
* whole point: `all`/`any` can decide to collapse the entire subtree into a
|
|
189
|
+
* single merged predicate term *without* first building — and then having to
|
|
190
|
+
* tear down — composite children that may already be cached with live
|
|
191
|
+
* consumers. Tearing down such nodes would incorrectly decrement their
|
|
192
|
+
* consumer counts and could destroy them while other queries still hold
|
|
193
|
+
* subscriptions.
|
|
194
|
+
*
|
|
195
|
+
* @param dsl - The DSL node to analyze.
|
|
196
|
+
* @returns Aggregated analysis for this subtree.
|
|
197
|
+
*/
|
|
198
|
+
function _analyzeDSL(dsl) {
|
|
199
|
+
if (dsl === true) {
|
|
200
|
+
return {
|
|
201
|
+
leafKeys: new Set([WORLD_LEAF]),
|
|
202
|
+
componentEids: new Set(),
|
|
203
|
+
dependsOnWorld: true,
|
|
204
|
+
containsOnly: false,
|
|
205
|
+
containsTarget: false,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
if (dsl === false) {
|
|
209
|
+
return {
|
|
210
|
+
leafKeys: new Set(),
|
|
211
|
+
componentEids: new Set(),
|
|
212
|
+
dependsOnWorld: false,
|
|
213
|
+
containsOnly: false,
|
|
214
|
+
containsTarget: false,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (typeof dsl === "number") {
|
|
218
|
+
return {
|
|
219
|
+
leafKeys: new Set([`C:${dsl}`]),
|
|
220
|
+
componentEids: new Set([dsl]),
|
|
221
|
+
dependsOnWorld: false,
|
|
222
|
+
containsOnly: false,
|
|
223
|
+
containsTarget: false,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (dsl instanceof Array) {
|
|
227
|
+
return _mergeAnalyses(dsl.map(_analyzeDSL));
|
|
228
|
+
}
|
|
229
|
+
if ("all" in dsl) {
|
|
230
|
+
return _mergeAnalyses(dsl.all.map(_analyzeDSL));
|
|
231
|
+
}
|
|
232
|
+
if ("any" in dsl) {
|
|
233
|
+
return _mergeAnalyses(dsl.any.map(_analyzeDSL));
|
|
234
|
+
}
|
|
235
|
+
if ("not" in dsl) {
|
|
236
|
+
return _mergeAnalyses([
|
|
237
|
+
{
|
|
238
|
+
leafKeys: new Set([WORLD_LEAF]),
|
|
239
|
+
componentEids: new Set(),
|
|
240
|
+
dependsOnWorld: true,
|
|
241
|
+
containsOnly: false,
|
|
242
|
+
containsTarget: false,
|
|
243
|
+
},
|
|
244
|
+
_analyzeDSL(dsl.not),
|
|
245
|
+
]);
|
|
246
|
+
}
|
|
247
|
+
if ("only" in dsl) {
|
|
248
|
+
const components = dsl.only instanceof Array ? dsl.only : [dsl.only];
|
|
249
|
+
const childAnalyses = components.map((eid) => ({
|
|
250
|
+
leafKeys: new Set([`C:${eid}`]),
|
|
251
|
+
componentEids: new Set([eid]),
|
|
252
|
+
dependsOnWorld: false,
|
|
253
|
+
containsOnly: false,
|
|
254
|
+
containsTarget: false,
|
|
255
|
+
}));
|
|
256
|
+
return _mergeAnalyses([
|
|
257
|
+
...childAnalyses,
|
|
258
|
+
{
|
|
259
|
+
leafKeys: new Set([WORLD_LEAF]),
|
|
260
|
+
componentEids: new Set(),
|
|
261
|
+
dependsOnWorld: true,
|
|
262
|
+
containsOnly: true,
|
|
263
|
+
containsTarget: false,
|
|
264
|
+
},
|
|
265
|
+
]);
|
|
266
|
+
}
|
|
267
|
+
if ("test" in dsl) {
|
|
268
|
+
const watch = normalizeWatch(dsl.watch);
|
|
269
|
+
return _mergeAnalyses([
|
|
270
|
+
{
|
|
271
|
+
leafKeys: new Set([WORLD_LEAF]),
|
|
272
|
+
componentEids: new Set(),
|
|
273
|
+
dependsOnWorld: true,
|
|
274
|
+
containsOnly: false,
|
|
275
|
+
containsTarget: false,
|
|
276
|
+
},
|
|
277
|
+
...watch.map((eid) => ({
|
|
278
|
+
leafKeys: new Set([`C:${eid}`]),
|
|
279
|
+
componentEids: new Set([eid]),
|
|
280
|
+
dependsOnWorld: false,
|
|
281
|
+
containsOnly: false,
|
|
282
|
+
containsTarget: false,
|
|
283
|
+
})),
|
|
284
|
+
]);
|
|
285
|
+
}
|
|
286
|
+
if ("target" in dsl) {
|
|
287
|
+
const relEid = dsl.target[0];
|
|
288
|
+
return _mergeAnalyses([
|
|
289
|
+
{
|
|
290
|
+
leafKeys: new Set([`C:${relEid}`]),
|
|
291
|
+
componentEids: new Set([relEid]),
|
|
292
|
+
dependsOnWorld: false,
|
|
293
|
+
containsOnly: false,
|
|
294
|
+
containsTarget: true,
|
|
295
|
+
},
|
|
296
|
+
{ ..._analyzeDSL(dsl.target[1]), containsTarget: true },
|
|
297
|
+
]);
|
|
298
|
+
}
|
|
299
|
+
return {
|
|
300
|
+
leafKeys: new Set(),
|
|
301
|
+
componentEids: new Set(),
|
|
302
|
+
dependsOnWorld: false,
|
|
303
|
+
containsOnly: false,
|
|
304
|
+
containsTarget: false,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Fold an array of per-child analyses into a single aggregate.
|
|
309
|
+
*
|
|
310
|
+
* Leaf key sets are unioned, boolean flags are OR-ed, and component eid sets
|
|
311
|
+
* are unioned. The union of `leafKeys` across children is what lets
|
|
312
|
+
* `_hasDiamond` spot reconvergent leaves.
|
|
313
|
+
*/
|
|
314
|
+
function _mergeAnalyses(analyses) {
|
|
315
|
+
const merged = {
|
|
316
|
+
leafKeys: new Set(),
|
|
317
|
+
componentEids: new Set(),
|
|
318
|
+
dependsOnWorld: false,
|
|
319
|
+
containsOnly: false,
|
|
320
|
+
containsTarget: false,
|
|
321
|
+
};
|
|
322
|
+
for (const a of analyses) {
|
|
323
|
+
a.leafKeys.forEach((k) => merged.leafKeys.add(k));
|
|
324
|
+
a.componentEids.forEach((eid) => merged.componentEids.add(eid));
|
|
325
|
+
merged.dependsOnWorld || (merged.dependsOnWorld = a.dependsOnWorld);
|
|
326
|
+
merged.containsOnly || (merged.containsOnly = a.containsOnly);
|
|
327
|
+
merged.containsTarget || (merged.containsTarget = a.containsTarget);
|
|
328
|
+
}
|
|
329
|
+
return merged;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Return `true` when any leaf key appears in more than one child analysis.
|
|
333
|
+
*
|
|
334
|
+
* A repeated leaf key means the same `ComponentTerm` or `WorldTerm` would be
|
|
335
|
+
* reachable via two paths under a single `all`/`any` parent — the definition
|
|
336
|
+
* of a diamond. The leaf-key intersection test runs in O(total leaf count)
|
|
337
|
+
* using the `seen` set.
|
|
338
|
+
*/
|
|
339
|
+
function _hasDiamond(analyses) {
|
|
340
|
+
const seen = new Set();
|
|
341
|
+
for (const a of analyses) {
|
|
342
|
+
for (const leaf of a.leafKeys) {
|
|
343
|
+
if (seen.has(leaf)) {
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
seen.add(leaf);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Run the diamond pre-check for the direct children of an `all`/`any` node
|
|
353
|
+
* and return results needed by the caller to decide whether to collapse.
|
|
354
|
+
*
|
|
355
|
+
* Called by `AllTerm.build` and `AnyTerm.build` before constructing any
|
|
356
|
+
* children. When `hasDiamond` is `true` and `containsTarget` is `false` the
|
|
357
|
+
* caller should invoke `PredicateTerm.buildMerged` with the returned `info`
|
|
358
|
+
* instead of building the composite tree.
|
|
359
|
+
*
|
|
360
|
+
* `target` terms are excluded from collapsing because `TargetTerm` uses a
|
|
361
|
+
* non-standard event routing strategy (it fans out from the inner term to all
|
|
362
|
+
* sources) that cannot be reproduced by a plain compiled predicate.
|
|
363
|
+
*
|
|
364
|
+
* @param terms - Direct child DSL nodes of the `all`/`any` being analyzed.
|
|
365
|
+
* @returns Diamond flag, target flag, and aggregated `MergedInfo`.
|
|
366
|
+
*/
|
|
367
|
+
function _allAnyPrecheck(terms) {
|
|
368
|
+
const analyses = terms.map(_analyzeDSL);
|
|
369
|
+
const diamond = _hasDiamond(analyses);
|
|
370
|
+
const containsTarget = analyses.some((a) => a.containsTarget);
|
|
371
|
+
const merged = _mergeAnalyses(analyses);
|
|
372
|
+
return {
|
|
373
|
+
hasDiamond: diamond,
|
|
374
|
+
containsTarget,
|
|
375
|
+
info: {
|
|
376
|
+
componentEids: merged.componentEids,
|
|
377
|
+
dependsOnWorld: merged.dependsOnWorld,
|
|
378
|
+
containsOnly: merged.containsOnly,
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/terms/build.ts"],"names":[],"mappings":"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"}
|