@vworlds/vecs 1.0.20 → 1.0.22
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 +84 -99
- 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 +55 -38
- 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 +10 -6
- package/dist/index.js +6 -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 +4 -4
- package/dist/module.js +0 -3
- package/dist/module.js.map +1 -1
- package/dist/modules/pipeline.d.ts +20 -0
- package/dist/modules/pipeline.js +57 -0
- package/dist/modules/pipeline.js.map +1 -0
- package/dist/modules/relationship_types.d.ts +37 -0
- package/dist/modules/relationship_types.js +39 -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 +2 -2
- 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 +334 -88
- package/dist/query/query.js.map +1 -1
- package/dist/system.d.ts +24 -54
- package/dist/system.js +47 -81
- 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 -9
- package/dist/world/world.components.js +16 -28
- package/dist/world/world.components.js.map +1 -1
- package/dist/world/world.d.ts +3 -6
- package/dist/world/world.entities.d.ts +2 -2
- package/dist/world/world.entities.js.map +1 -1
- package/dist/world/world.js +10 -10
- package/dist/world/world.js.map +1 -1
- package/dist/world/world.modules.d.ts +4 -7
- package/dist/world/world.modules.js +13 -10
- package/dist/world/world.modules.js.map +1 -1
- package/dist/world/world.pipeline.d.ts +5 -8
- package/dist/world/world.pipeline.js +24 -53
- package/dist/world/world.pipeline.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 +2 -2
- package/dist/phase.d.ts +0 -29
- package/dist/phase.js +0 -24
- package/dist/phase.js.map +0 -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
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ComponentInstance, type ComponentType } from "../component.js";
|
|
2
|
+
import { Entity, type EID } from "../entity/index.js";
|
|
3
|
+
import { Iter, type InjectElement, type InjectTuple } from "../inject.js";
|
|
4
|
+
import { OrderedSet } from "../util/ordered_set.js";
|
|
5
|
+
import { type World } from "../world/index.js";
|
|
6
|
+
export type EntityCallback = (e: Entity, snapshot?: Map<EID, ComponentInstance>) => void;
|
|
7
|
+
export type ComponentCallback = (e: Entity, c: ComponentInstance) => void;
|
|
8
|
+
export declare function makeEnterCallback(world: World, arg0: InjectTuple | ((e: Entity) => void) | typeof Entity | typeof Iter, arg1?: InjectTuple | Function, arg2?: Function): EntityCallback;
|
|
9
|
+
export declare function makeExitCallback(world: World, arg0: readonly unknown[] | ((e: Entity) => void) | typeof Entity | typeof Iter, arg1?: readonly unknown[] | ((...args: any[]) => void), arg2?: (...args: any[]) => void): {
|
|
10
|
+
callback: EntityCallback;
|
|
11
|
+
snapshotTypes: EID[] | undefined;
|
|
12
|
+
};
|
|
13
|
+
export declare function makeSortedEntitySet(world: World, arg0: readonly InjectElement[] | typeof Entity | typeof Iter, arg1?: readonly InjectElement[] | Function, arg2?: Function): OrderedSet<Entity>;
|
|
14
|
+
export declare function makeUpdateRegistration<C extends ComponentType>(world: World, arg0: C | typeof Entity | typeof Iter, arg1: C | readonly InjectElement[] | ((...args: any[]) => void), arg2?: readonly InjectElement[] | ((...args: any[]) => void), arg3?: (...args: any[]) => void): {
|
|
15
|
+
componentEid: EID;
|
|
16
|
+
callback: ComponentCallback;
|
|
17
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { directInjectEids, getInjected, getInjectedWithSrc, injectArity, isCursorMarker, Iter, mapInject, wantsIter, } from "../inject.js";
|
|
2
|
+
import { OrderedSet } from "../util/ordered_set.js";
|
|
3
|
+
export function makeEnterCallback(world, arg0, arg1, arg2) {
|
|
4
|
+
if (typeof arg0 === "function" && !isCursorMarker(arg0)) {
|
|
5
|
+
return arg0;
|
|
6
|
+
}
|
|
7
|
+
const useIter = wantsIter(arg0);
|
|
8
|
+
const components = (isCursorMarker(arg0) ? arg1 : arg0);
|
|
9
|
+
const cb = (isCursorMarker(arg0) ? arg2 : arg1);
|
|
10
|
+
const inject = mapInject(world, components);
|
|
11
|
+
const arity = injectArity(inject);
|
|
12
|
+
if (useIter) {
|
|
13
|
+
return (e) => {
|
|
14
|
+
const injected = new Array(arity);
|
|
15
|
+
const it = new Iter(arity);
|
|
16
|
+
it.entity = e;
|
|
17
|
+
getInjectedWithSrc(e, inject, injected, it.src, true);
|
|
18
|
+
cb(it, injected);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return (e) => {
|
|
22
|
+
const injected = new Array(arity);
|
|
23
|
+
getInjected(e, inject, true, injected);
|
|
24
|
+
cb(e, injected);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function makeExitCallback(world, arg0, arg1, arg2) {
|
|
28
|
+
if (typeof arg0 === "function" && !isCursorMarker(arg0)) {
|
|
29
|
+
return { callback: arg0, snapshotTypes: undefined };
|
|
30
|
+
}
|
|
31
|
+
const useIter = wantsIter(arg0);
|
|
32
|
+
const components = (isCursorMarker(arg0) ? arg1 : arg0);
|
|
33
|
+
const cb = (isCursorMarker(arg0) ? arg2 : arg1);
|
|
34
|
+
const inject = mapInject(world, components);
|
|
35
|
+
const snapshotTypes = directInjectEids(inject);
|
|
36
|
+
const arity = injectArity(inject);
|
|
37
|
+
if (useIter) {
|
|
38
|
+
const callback = (e, exitSnapshot) => {
|
|
39
|
+
const injected = new Array(arity);
|
|
40
|
+
const it = new Iter(arity);
|
|
41
|
+
it.entity = e;
|
|
42
|
+
getInjectedWithSrc(e, inject, injected, it.src, true, exitSnapshot);
|
|
43
|
+
cb(it, injected);
|
|
44
|
+
};
|
|
45
|
+
return { callback, snapshotTypes };
|
|
46
|
+
}
|
|
47
|
+
const callback = (e, exitSnapshot) => {
|
|
48
|
+
const injected = new Array(arity);
|
|
49
|
+
getInjected(e, inject, true, injected, exitSnapshot);
|
|
50
|
+
cb(e, injected);
|
|
51
|
+
};
|
|
52
|
+
return { callback, snapshotTypes };
|
|
53
|
+
}
|
|
54
|
+
export function makeSortedEntitySet(world, arg0, arg1, arg2) {
|
|
55
|
+
const useIter = wantsIter(arg0);
|
|
56
|
+
const components = (isCursorMarker(arg0) ? arg1 : arg0);
|
|
57
|
+
const cb = (isCursorMarker(arg0) ? arg2 : arg1);
|
|
58
|
+
const inject = mapInject(world, components);
|
|
59
|
+
const arity = injectArity(inject);
|
|
60
|
+
if (useIter) {
|
|
61
|
+
const itA = new Iter(arity);
|
|
62
|
+
const itB = new Iter(arity);
|
|
63
|
+
const resolvedA = new Array(arity);
|
|
64
|
+
const resolvedB = new Array(arity);
|
|
65
|
+
return new OrderedSet((a, b) => {
|
|
66
|
+
itA.entity = a;
|
|
67
|
+
itB.entity = b;
|
|
68
|
+
getInjectedWithSrc(a, inject, resolvedA, itA.src);
|
|
69
|
+
getInjectedWithSrc(b, inject, resolvedB, itB.src);
|
|
70
|
+
return cb(itA, resolvedA, itB, resolvedB) || a.eid - b.eid;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const resolvedA = new Array(arity);
|
|
74
|
+
const resolvedB = new Array(arity);
|
|
75
|
+
return new OrderedSet((a, b) => {
|
|
76
|
+
getInjected(a, inject, false, resolvedA);
|
|
77
|
+
getInjected(b, inject, false, resolvedB);
|
|
78
|
+
return cb(a, resolvedA, b, resolvedB) || a.eid - b.eid;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function makeUpdateRegistration(world, arg0, arg1, arg2, arg3) {
|
|
82
|
+
const useIter = wantsIter(arg0);
|
|
83
|
+
if (isCursorMarker(arg0)) {
|
|
84
|
+
arg0 = arg1;
|
|
85
|
+
arg1 = arg2;
|
|
86
|
+
arg2 = arg3;
|
|
87
|
+
}
|
|
88
|
+
const ComponentClass = arg0;
|
|
89
|
+
const componentEid = world.entity(ComponentClass).eid;
|
|
90
|
+
if (typeof arg1 === "function") {
|
|
91
|
+
return { componentEid, callback: arg1 };
|
|
92
|
+
}
|
|
93
|
+
const components = arg1;
|
|
94
|
+
const callback = arg2;
|
|
95
|
+
const inject = mapInject(world, components);
|
|
96
|
+
const arity = injectArity(inject);
|
|
97
|
+
const injected = new Array(arity);
|
|
98
|
+
if (useIter) {
|
|
99
|
+
const it = new Iter(arity);
|
|
100
|
+
const cb = (e, c) => {
|
|
101
|
+
it.entity = e;
|
|
102
|
+
getInjectedWithSrc(e, inject, injected, it.src);
|
|
103
|
+
callback(it, c, injected);
|
|
104
|
+
};
|
|
105
|
+
return { componentEid, callback: cb };
|
|
106
|
+
}
|
|
107
|
+
const cb = (e, c) => {
|
|
108
|
+
getInjected(e, inject, false, injected);
|
|
109
|
+
callback(e, c, injected);
|
|
110
|
+
};
|
|
111
|
+
return { componentEid, callback: cb };
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=callbacks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/query/callbacks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SOURCE_TRACKED_QUERY_ERROR = "source/children is not supported in a tracked query; use world.filter(...)";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/query/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GACrC,4EAA4E,CAAC"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { type ComponentType } from "../component.js";
|
|
2
2
|
import { Entity } from "../entity/index.js";
|
|
3
3
|
import { Iter, type FanInjectTuple, type MaybeResolvedInjectTuple } from "../inject.js";
|
|
4
|
-
import {
|
|
5
|
-
export declare class
|
|
4
|
+
import { type World } from "../world/index.js";
|
|
5
|
+
export declare class Group<K = unknown, R extends ComponentType[] = []> {
|
|
6
|
+
readonly key: K;
|
|
7
|
+
private readonly _entities;
|
|
8
|
+
private readonly _world;
|
|
9
|
+
constructor(world: World, key: K);
|
|
6
10
|
get count(): number;
|
|
7
|
-
has(e: Entity): boolean;
|
|
8
11
|
[Symbol.iterator](): IterableIterator<Entity>;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
forEach(callback: (e: Entity) => void):
|
|
12
|
-
forEach<J extends FanInjectTuple>(components: readonly [...J], callback: (
|
|
13
|
-
|
|
14
|
-
forEach<J extends FanInjectTuple>(cursor: typeof Iter, components: readonly [...J], callback: (it: Iter, resolved: MaybeResolvedInjectTuple<J, R>) => void): void;
|
|
12
|
+
forEach(callback: (e: Entity) => void): this;
|
|
13
|
+
forEach<J extends FanInjectTuple>(components: readonly [...J], callback: (e: Entity, resolved: MaybeResolvedInjectTuple<J, R>) => void): this;
|
|
14
|
+
forEach<J extends FanInjectTuple>(cursor: typeof Entity, components: readonly [...J], callback: (e: Entity, resolved: MaybeResolvedInjectTuple<J, R>) => void): this;
|
|
15
|
+
forEach<J extends FanInjectTuple>(cursor: typeof Iter, components: readonly [...J], callback: (it: Iter, resolved: MaybeResolvedInjectTuple<J, R>) => void): this;
|
|
16
|
+
has(e: Entity): boolean;
|
|
15
17
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { forEachInjected, } from "../inject.js";
|
|
2
|
+
export class Group {
|
|
3
|
+
constructor(world, key) {
|
|
4
|
+
this._entities = new Set();
|
|
5
|
+
this._world = world;
|
|
6
|
+
this.key = key;
|
|
7
|
+
}
|
|
8
|
+
get count() {
|
|
9
|
+
return this._entities.size;
|
|
10
|
+
}
|
|
11
|
+
[Symbol.iterator]() {
|
|
12
|
+
return this._entities[Symbol.iterator]();
|
|
13
|
+
}
|
|
14
|
+
forEach(arg0, arg1, arg2) {
|
|
15
|
+
forEachInjected(this._world, this._entities, arg0, arg1, arg2);
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
has(e) {
|
|
19
|
+
return this._entities.has(e);
|
|
20
|
+
}
|
|
21
|
+
/** @internal */
|
|
22
|
+
_add(e) {
|
|
23
|
+
this._entities.add(e);
|
|
24
|
+
}
|
|
25
|
+
/** @internal */
|
|
26
|
+
_remove(e) {
|
|
27
|
+
this._entities.delete(e);
|
|
28
|
+
return this._entities.size === 0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../src/query/group.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AAGtB,MAAM,OAAO,KAAK;IAKhB,YAAmB,KAAY,EAAE,GAAM;QAHtB,cAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAI7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,CAAC;IAiBM,OAAO,CAAC,IAAa,EAAE,IAAc,EAAE,IAAc;QAC1D,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,GAAG,CAAC,CAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB;IACT,IAAI,CAAC,CAAS;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,OAAO,CAAC,CAAS;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ComponentType } from "../component.js";
|
|
2
|
+
import { Group } from "./group.js";
|
|
3
|
+
import { Query } from "./query.js";
|
|
4
|
+
/**
|
|
5
|
+
* A {@link Query} that has been partitioned by {@link Query.groupBy}. Adds the
|
|
6
|
+
* typed group-accessor surface ({@link group}, {@link groups}, etc.) on top of
|
|
7
|
+
* the query's usual reactive membership.
|
|
8
|
+
*
|
|
9
|
+
* Instances are created lazily by {@link Query.groupBy} via
|
|
10
|
+
* `Object.setPrototypeOf`, so callers keep the same configured query object.
|
|
11
|
+
*
|
|
12
|
+
* @typeParam K - The grouping key type produced by the key function (or the
|
|
13
|
+
* relationship target entity, for the relationship form).
|
|
14
|
+
* @typeParam R - Component classes guaranteed present on every matched entity.
|
|
15
|
+
*/
|
|
16
|
+
export declare class GroupedQuery<K = unknown, R extends ComponentType[] = []> extends Query<R> {
|
|
17
|
+
private _grouping;
|
|
18
|
+
get groupCount(): number;
|
|
19
|
+
destroy(): void;
|
|
20
|
+
group(key: K): Group<K, R> | undefined;
|
|
21
|
+
groups(): IterableIterator<Group<K, R>>;
|
|
22
|
+
groupKeys(): IterableIterator<K>;
|
|
23
|
+
onGroupEnter(callback: (group: Group<K, R>) => void): this;
|
|
24
|
+
onGroupExit(callback: (key: K, group: Group<K, R>) => void): this;
|
|
25
|
+
private _composeGroupMembership;
|
|
26
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { _resolveRelationship } from "../dsl.js";
|
|
2
|
+
import { Entity } from "../entity/index.js";
|
|
3
|
+
import { directInjectEids, getInjected, injectArity, mapInject, } from "../inject.js";
|
|
4
|
+
import { Grouping } from "./grouping.js";
|
|
5
|
+
import { registerGroupedQueryPrototype } from "./grouped_query_registry.js";
|
|
6
|
+
import { Query } from "./query.js";
|
|
7
|
+
const EMPTY_GROUPS = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* A {@link Query} that has been partitioned by {@link Query.groupBy}. Adds the
|
|
10
|
+
* typed group-accessor surface ({@link group}, {@link groups}, etc.) on top of
|
|
11
|
+
* the query's usual reactive membership.
|
|
12
|
+
*
|
|
13
|
+
* Instances are created lazily by {@link Query.groupBy} via
|
|
14
|
+
* `Object.setPrototypeOf`, so callers keep the same configured query object.
|
|
15
|
+
*
|
|
16
|
+
* @typeParam K - The grouping key type produced by the key function (or the
|
|
17
|
+
* relationship target entity, for the relationship form).
|
|
18
|
+
* @typeParam R - Component classes guaranteed present on every matched entity.
|
|
19
|
+
*/
|
|
20
|
+
export class GroupedQuery extends Query {
|
|
21
|
+
get groupCount() {
|
|
22
|
+
return this._grouping?.groups.size ?? 0;
|
|
23
|
+
}
|
|
24
|
+
/** @internal */
|
|
25
|
+
_enter(e) {
|
|
26
|
+
this._grouping.enter(e);
|
|
27
|
+
super._enter(e);
|
|
28
|
+
}
|
|
29
|
+
/** @internal */
|
|
30
|
+
_exit(e) {
|
|
31
|
+
super._exit(e);
|
|
32
|
+
this._grouping.exit(e);
|
|
33
|
+
}
|
|
34
|
+
/** @internal */
|
|
35
|
+
_initialize(arg0, arg1) {
|
|
36
|
+
if (this._grouping !== undefined) {
|
|
37
|
+
throw new Error(`query '${this.name}' is already grouped`);
|
|
38
|
+
}
|
|
39
|
+
let keyOf;
|
|
40
|
+
let watchEids;
|
|
41
|
+
if (typeof arg1 === "function") {
|
|
42
|
+
const components = arg0;
|
|
43
|
+
const inject = mapInject(this.world, components);
|
|
44
|
+
const arity = injectArity(inject);
|
|
45
|
+
const resolved = new Array(arity);
|
|
46
|
+
keyOf = (e) => {
|
|
47
|
+
getInjected(e, inject, false, resolved);
|
|
48
|
+
return arg1(e, resolved);
|
|
49
|
+
};
|
|
50
|
+
watchEids = directInjectEids(inject);
|
|
51
|
+
this._composeGroupMembership(components);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const relEid = _resolveRelationship(arg0, this.world);
|
|
55
|
+
keyOf = (e) => e.parent(relEid);
|
|
56
|
+
watchEids = [relEid];
|
|
57
|
+
this._composeGroupMembership([arg0]);
|
|
58
|
+
}
|
|
59
|
+
for (const ceid of watchEids) {
|
|
60
|
+
this._watchlistBitmask.add(ceid);
|
|
61
|
+
}
|
|
62
|
+
this.track();
|
|
63
|
+
this._grouping = new Grouping(this.world, keyOf, watchEids);
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/** @internal */
|
|
67
|
+
_notifyModified(e, ceid, c) {
|
|
68
|
+
super._notifyModified(e, ceid, c);
|
|
69
|
+
// A mutation routed from a silenced source must be invisible to the query,
|
|
70
|
+
// including its group membership: re-keying here would leak the silenced
|
|
71
|
+
// write through `group(...)`. Mirror the base early-return.
|
|
72
|
+
if (this._isSourceSilenced()) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this._grouping.refresh(e, ceid);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @internal A grouped query always reacts to component changes: a watched
|
|
79
|
+
* component changing can re-key an entity into a different group, so the
|
|
80
|
+
* host entity must register it in `_queries` regardless of whether a user
|
|
81
|
+
* `update` callback is present.
|
|
82
|
+
*/
|
|
83
|
+
_watchesUpdates() {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
destroy() {
|
|
87
|
+
this._grouping?.clear();
|
|
88
|
+
this._grouping = undefined;
|
|
89
|
+
super.destroy();
|
|
90
|
+
}
|
|
91
|
+
group(key) {
|
|
92
|
+
return this._grouping?.get(key);
|
|
93
|
+
}
|
|
94
|
+
groups() {
|
|
95
|
+
return (this._grouping?.groups.values() ?? EMPTY_GROUPS.values());
|
|
96
|
+
}
|
|
97
|
+
groupKeys() {
|
|
98
|
+
return (this._grouping?.keys() ?? EMPTY_GROUPS.keys());
|
|
99
|
+
}
|
|
100
|
+
onGroupEnter(callback) {
|
|
101
|
+
this._assertConfigurable();
|
|
102
|
+
this._grouping?.setOnGroupEnter(callback);
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
onGroupExit(callback) {
|
|
106
|
+
this._assertConfigurable();
|
|
107
|
+
this._grouping?.setOnGroupExit(callback);
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
_composeGroupMembership(refs) {
|
|
111
|
+
const componentRefs = refs.filter((ref) => typeof ref === "number" || typeof ref === "function" || ref instanceof Entity);
|
|
112
|
+
if (componentRefs.length === 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const existing = this._dsl ?? true;
|
|
116
|
+
this._dsl = { all: [existing, ...componentRefs] };
|
|
117
|
+
this._hasExplicitQuery = true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
registerGroupedQueryPrototype(GroupedQuery.prototype);
|
|
121
|
+
//# sourceMappingURL=grouped_query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouped_query.js","sourceRoot":"","sources":["../../src/query/grouped_query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
let groupedQueryPrototype;
|
|
2
|
+
export function getGroupedQueryPrototype() {
|
|
3
|
+
if (groupedQueryPrototype === undefined) {
|
|
4
|
+
throw new Error("GroupedQuery has not been registered");
|
|
5
|
+
}
|
|
6
|
+
return groupedQueryPrototype;
|
|
7
|
+
}
|
|
8
|
+
export function registerGroupedQueryPrototype(prototype) {
|
|
9
|
+
groupedQueryPrototype = prototype;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=grouped_query_registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouped_query_registry.js","sourceRoot":"","sources":["../../src/query/grouped_query_registry.ts"],"names":[],"mappings":"AAEA,IAAI,qBAAwD,CAAC;AAE7D,MAAM,UAAU,wBAAwB;IACtC,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,SAAgC;IAC5E,qBAAqB,GAAG,SAAS,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Entity, type EID } from "../entity/index.js";
|
|
2
|
+
import { type World } from "../world/index.js";
|
|
3
|
+
import { Group } from "./group.js";
|
|
4
|
+
export declare class Grouping {
|
|
5
|
+
readonly groups: Map<unknown, Group<unknown, []>>;
|
|
6
|
+
private readonly _entityKeys;
|
|
7
|
+
private readonly _keyOf;
|
|
8
|
+
private readonly _watchEids;
|
|
9
|
+
private readonly _world;
|
|
10
|
+
private _onGroupEnter;
|
|
11
|
+
private _onGroupExit;
|
|
12
|
+
constructor(world: World, keyOf: (e: Entity) => unknown, watchEids: Iterable<EID>);
|
|
13
|
+
clear(): void;
|
|
14
|
+
enter(e: Entity): void;
|
|
15
|
+
exit(e: Entity): void;
|
|
16
|
+
get(key: unknown): Group | undefined;
|
|
17
|
+
keys(): IterableIterator<unknown>;
|
|
18
|
+
refresh(e: Entity, ceid: EID): void;
|
|
19
|
+
setOnGroupEnter(callback: (group: Group) => void): void;
|
|
20
|
+
setOnGroupExit(callback: (key: unknown, group: Group) => void): void;
|
|
21
|
+
private _addToBucket;
|
|
22
|
+
private _assign;
|
|
23
|
+
private _removeFromBucket;
|
|
24
|
+
}
|
|
@@ -1,33 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Predicate } from "./query.06.predicate.js";
|
|
3
|
-
export class Group {
|
|
4
|
-
constructor(world, key) {
|
|
5
|
-
this._entities = new Set();
|
|
6
|
-
this._world = world;
|
|
7
|
-
this.key = key;
|
|
8
|
-
}
|
|
9
|
-
get count() {
|
|
10
|
-
return this._entities.size;
|
|
11
|
-
}
|
|
12
|
-
has(e) {
|
|
13
|
-
return this._entities.has(e);
|
|
14
|
-
}
|
|
15
|
-
[Symbol.iterator]() {
|
|
16
|
-
return this._entities[Symbol.iterator]();
|
|
17
|
-
}
|
|
18
|
-
forEach(arg0, arg1, arg2) {
|
|
19
|
-
forEachInjected(this._world, this._entities, arg0, arg1, arg2);
|
|
20
|
-
}
|
|
21
|
-
/** @internal */
|
|
22
|
-
_add(e) {
|
|
23
|
-
this._entities.add(e);
|
|
24
|
-
}
|
|
25
|
-
/** @internal */
|
|
26
|
-
_remove(e) {
|
|
27
|
-
this._entities.delete(e);
|
|
28
|
-
return this._entities.size === 0;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
1
|
+
import { Group } from "./group.js";
|
|
31
2
|
export class Grouping {
|
|
32
3
|
constructor(world, keyOf, watchEids) {
|
|
33
4
|
this.groups = new Map();
|
|
@@ -36,17 +7,9 @@ export class Grouping {
|
|
|
36
7
|
this._keyOf = keyOf;
|
|
37
8
|
this._watchEids = new Set(watchEids);
|
|
38
9
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
keys() {
|
|
43
|
-
return this.groups.keys();
|
|
44
|
-
}
|
|
45
|
-
setOnGroupEnter(callback) {
|
|
46
|
-
this._onGroupEnter = callback;
|
|
47
|
-
}
|
|
48
|
-
setOnGroupExit(callback) {
|
|
49
|
-
this._onGroupExit = callback;
|
|
10
|
+
clear() {
|
|
11
|
+
this.groups.clear();
|
|
12
|
+
this._entityKeys.clear();
|
|
50
13
|
}
|
|
51
14
|
enter(e) {
|
|
52
15
|
this._assign(e, this._keyOf(e));
|
|
@@ -58,15 +21,34 @@ export class Grouping {
|
|
|
58
21
|
}
|
|
59
22
|
this._entityKeys.delete(e);
|
|
60
23
|
}
|
|
61
|
-
|
|
62
|
-
|
|
24
|
+
get(key) {
|
|
25
|
+
return this.groups.get(key);
|
|
26
|
+
}
|
|
27
|
+
keys() {
|
|
28
|
+
return this.groups.keys();
|
|
29
|
+
}
|
|
30
|
+
refresh(e, ceid) {
|
|
31
|
+
if (!this._watchEids.has(ceid)) {
|
|
63
32
|
return;
|
|
64
33
|
}
|
|
65
34
|
this._assign(e, this._keyOf(e));
|
|
66
35
|
}
|
|
67
|
-
|
|
68
|
-
this.
|
|
69
|
-
|
|
36
|
+
setOnGroupEnter(callback) {
|
|
37
|
+
this._onGroupEnter = callback;
|
|
38
|
+
}
|
|
39
|
+
setOnGroupExit(callback) {
|
|
40
|
+
this._onGroupExit = callback;
|
|
41
|
+
}
|
|
42
|
+
_addToBucket(e, key) {
|
|
43
|
+
let group = this.groups.get(key);
|
|
44
|
+
if (group === undefined) {
|
|
45
|
+
group = new Group(this._world, key);
|
|
46
|
+
this.groups.set(key, group);
|
|
47
|
+
group._add(e);
|
|
48
|
+
this._onGroupEnter?.(group);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
group._add(e);
|
|
70
52
|
}
|
|
71
53
|
_assign(e, newKey) {
|
|
72
54
|
const oldKey = this._entityKeys.get(e);
|
|
@@ -83,17 +65,6 @@ export class Grouping {
|
|
|
83
65
|
this._addToBucket(e, newKey);
|
|
84
66
|
this._entityKeys.set(e, newKey);
|
|
85
67
|
}
|
|
86
|
-
_addToBucket(e, key) {
|
|
87
|
-
let group = this.groups.get(key);
|
|
88
|
-
if (group === undefined) {
|
|
89
|
-
group = new Group(this._world, key);
|
|
90
|
-
this.groups.set(key, group);
|
|
91
|
-
group._add(e);
|
|
92
|
-
this._onGroupEnter?.(group);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
group._add(e);
|
|
96
|
-
}
|
|
97
68
|
_removeFromBucket(e, key) {
|
|
98
69
|
const group = this.groups.get(key);
|
|
99
70
|
if (group === undefined) {
|
|
@@ -105,6 +76,4 @@ export class Grouping {
|
|
|
105
76
|
}
|
|
106
77
|
}
|
|
107
78
|
}
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=query.07.groups.js.map
|
|
79
|
+
//# sourceMappingURL=grouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/query/grouping.ts"],"names":[],"mappings":"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"}
|
package/dist/query/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export
|
|
1
|
+
import "./grouped_query.js";
|
|
2
|
+
export { SOURCE_TRACKED_QUERY_ERROR } from "./constants.js";
|
|
3
|
+
export { Group } from "./group.js";
|
|
4
|
+
export { GroupedQuery } from "./grouped_query.js";
|
|
5
|
+
export { Grouping } from "./grouping.js";
|
|
6
|
+
export { Query } from "./query.js";
|
package/dist/query/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
1
|
+
import "./grouped_query.js";
|
|
2
|
+
export { SOURCE_TRACKED_QUERY_ERROR } from "./constants.js";
|
|
3
|
+
export { Group } from "./group.js";
|
|
4
|
+
export { GroupedQuery } from "./grouped_query.js";
|
|
5
|
+
export { Grouping } from "./grouping.js";
|
|
6
|
+
export { Query } from "./query.js";
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
package/dist/query/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|