@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
package/dist/inject.d.ts
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import { type ComponentInstance, type ComponentRef, type ComponentType } from "./component.js";
|
|
2
|
-
import { Entity } from "./entity/index.js";
|
|
2
|
+
import { Entity, type EID } from "./entity/index.js";
|
|
3
3
|
import { type World } from "./world/index.js";
|
|
4
4
|
import { type MaybeRequired } from "./dsl.js";
|
|
5
|
-
export type
|
|
6
|
-
|
|
5
|
+
export type TargetInject<J extends readonly ComponentType[] = readonly ComponentType[]> = {
|
|
6
|
+
target: readonly [ComponentRef, readonly [...J]];
|
|
7
7
|
};
|
|
8
8
|
export type DownInject<J extends readonly ComponentType[] = readonly ComponentType[]> = {
|
|
9
9
|
down: readonly [ComponentRef, readonly [...J]];
|
|
10
10
|
};
|
|
11
|
-
export type InjectElement = ComponentType |
|
|
11
|
+
export type InjectElement = ComponentType | TargetInject;
|
|
12
12
|
export type InjectTuple = readonly InjectElement[];
|
|
13
13
|
export type FanInjectElement = InjectElement | DownInject;
|
|
14
14
|
export type FanInjectTuple = readonly FanInjectElement[];
|
|
15
|
-
export type ResolvedInjectTerm =
|
|
16
|
-
|
|
15
|
+
export type ResolvedInjectTerm = EID | {
|
|
16
|
+
target: readonly [EID, readonly EID[]];
|
|
17
17
|
} | {
|
|
18
|
-
down: readonly [
|
|
18
|
+
down: readonly [EID, readonly EID[]];
|
|
19
19
|
};
|
|
20
20
|
/** Resolves the component instance type for one injected component class. */
|
|
21
21
|
type ResolvedComponentInstance<T> = T extends ComponentType ? InstanceType<T> : never;
|
|
22
22
|
type OptionalResolvedComponentInstances<J extends readonly ComponentType[]> = {
|
|
23
23
|
[K in keyof J]: InstanceType<J[K]> | undefined;
|
|
24
24
|
};
|
|
25
|
-
type MaybeResolvedInjectElement<T, R extends ComponentType[]> = T extends ComponentType ? [MaybeRequired<T, R>] : T extends
|
|
26
|
-
type RequiredResolvedInjectElement<T> = T extends ComponentType ? [ResolvedComponentInstance<T>] : T extends
|
|
25
|
+
type MaybeResolvedInjectElement<T, R extends ComponentType[]> = T extends ComponentType ? [MaybeRequired<T, R>] : T extends TargetInject<infer J> ? OptionalResolvedComponentInstances<J> : T extends DownInject<infer J> ? OptionalResolvedComponentInstances<J> : [];
|
|
26
|
+
type RequiredResolvedInjectElement<T> = T extends ComponentType ? [ResolvedComponentInstance<T>] : T extends TargetInject<infer J> ? OptionalResolvedComponentInstances<J> : T extends DownInject<infer J> ? OptionalResolvedComponentInstances<J> : [];
|
|
27
27
|
export type MaybeResolvedInjectTuple<J extends FanInjectTuple, R extends ComponentType[]> = J extends readonly [infer First, ...infer Rest extends FanInjectTuple] ? [...MaybeResolvedInjectElement<First, R>, ...MaybeResolvedInjectTuple<Rest, R>] : [];
|
|
28
28
|
export type RequiredResolvedInjectTuple<J extends InjectTuple> = J extends readonly [
|
|
29
29
|
infer First,
|
|
@@ -31,16 +31,16 @@ export type RequiredResolvedInjectTuple<J extends InjectTuple> = J extends reado
|
|
|
31
31
|
] ? [...RequiredResolvedInjectElement<First>, ...RequiredResolvedInjectTuple<Rest>] : [];
|
|
32
32
|
export declare function mapInject(world: World, inject: readonly FanInjectElement[]): ResolvedInjectTerm[];
|
|
33
33
|
export declare function injectArity(inject: readonly ResolvedInjectTerm[]): number;
|
|
34
|
-
export declare function getInjected(e: Entity, inject: readonly ResolvedInjectTerm[], requireDirectComponents: boolean, out: (ComponentInstance | undefined)[], exitSnapshot?: Map<
|
|
35
|
-
export declare function getInjectedWithSrc(e: Entity, inject: readonly ResolvedInjectTerm[], out: (ComponentInstance | undefined)[], src: (Entity | undefined)[], requireDirectComponents?: boolean, exitSnapshot?: Map<
|
|
36
|
-
export declare function directInjectEids(inject: readonly ResolvedInjectTerm[]):
|
|
34
|
+
export declare function getInjected(e: Entity, inject: readonly ResolvedInjectTerm[], requireDirectComponents: boolean, out: (ComponentInstance | undefined)[], exitSnapshot?: Map<EID, ComponentInstance>): void;
|
|
35
|
+
export declare function getInjectedWithSrc(e: Entity, inject: readonly ResolvedInjectTerm[], out: (ComponentInstance | undefined)[], src: (Entity | undefined)[], requireDirectComponents?: boolean, exitSnapshot?: Map<EID, ComponentInstance>): void;
|
|
36
|
+
export declare function directInjectEids(inject: readonly ResolvedInjectTerm[]): EID[];
|
|
37
37
|
/**
|
|
38
38
|
* Per-iteration cursor passed to `each` / `forEach` / `enter` / `exit` /
|
|
39
|
-
* `update` / `
|
|
39
|
+
* `update` / `orderBy` callbacks when the caller opts in by passing `Iter` as
|
|
40
40
|
* the first argument:
|
|
41
41
|
*
|
|
42
42
|
* ```ts
|
|
43
|
-
* system.each(Iter, [Body, {
|
|
43
|
+
* system.each(Iter, [Body, { target: [ChildOf, [Position]] }], (it, [body, pos]) => {
|
|
44
44
|
* it.entity; // the visited entity
|
|
45
45
|
* it.src[0]; // entity `body` was read from (the visited entity)
|
|
46
46
|
* it.src[1]; // entity `pos` was read from (the ChildOf target), or undefined
|
|
@@ -57,9 +57,10 @@ export declare class Iter {
|
|
|
57
57
|
entity: Entity;
|
|
58
58
|
/**
|
|
59
59
|
* Source entity for each injected component, in the same order as the
|
|
60
|
-
* resolved tuple: the visited entity for a directly-injected component,
|
|
61
|
-
*
|
|
62
|
-
* entity has no such relationship
|
|
60
|
+
* resolved tuple: the visited entity for a directly-injected component, the
|
|
61
|
+
* relationship target for a `target`-injected one, or the specific child for
|
|
62
|
+
* a `down`-injected one (`undefined` when the entity has no such relationship,
|
|
63
|
+
* target, or — for `down` — when the slot is unfilled).
|
|
63
64
|
*/
|
|
64
65
|
readonly src: (Entity | undefined)[];
|
|
65
66
|
constructor(arity: number);
|
package/dist/inject.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { Entity } from "./entity/index.js";
|
|
2
2
|
import { _resolveRelationship } from "./dsl.js";
|
|
3
|
-
function
|
|
4
|
-
return typeof value === "object" && value !== null && "
|
|
3
|
+
function _isTargetInject(value) {
|
|
4
|
+
return typeof value === "object" && value !== null && "target" in value;
|
|
5
5
|
}
|
|
6
6
|
function _isDownInject(value) {
|
|
7
7
|
return typeof value === "object" && value !== null && "down" in value;
|
|
8
8
|
}
|
|
9
9
|
export function mapInject(world, inject) {
|
|
10
10
|
return inject.map((term) => {
|
|
11
|
-
if (
|
|
11
|
+
if (_isTargetInject(term)) {
|
|
12
12
|
return {
|
|
13
|
-
|
|
13
|
+
target: [
|
|
14
|
+
_resolveRelationship(term.target[0], world),
|
|
15
|
+
term.target[1].map((C) => world.entity(C).eid),
|
|
16
|
+
],
|
|
14
17
|
};
|
|
15
18
|
}
|
|
16
19
|
if (_isDownInject(term)) {
|
|
@@ -27,7 +30,8 @@ export function mapInject(world, inject) {
|
|
|
27
30
|
export function injectArity(inject) {
|
|
28
31
|
let arity = 0;
|
|
29
32
|
inject.forEach((term) => {
|
|
30
|
-
arity +=
|
|
33
|
+
arity +=
|
|
34
|
+
typeof term === "number" ? 1 : "target" in term ? term.target[1].length : term.down[1].length;
|
|
31
35
|
});
|
|
32
36
|
return arity;
|
|
33
37
|
}
|
|
@@ -45,12 +49,12 @@ export function getInjected(e, inject, requireDirectComponents, out, exitSnapsho
|
|
|
45
49
|
if ("down" in term) {
|
|
46
50
|
throw new Error("down injection is only supported in each/forEach");
|
|
47
51
|
}
|
|
48
|
-
const
|
|
49
|
-
? e._get(term.
|
|
52
|
+
const targetEntity = e.has(term.target[0])
|
|
53
|
+
? e._get(term.target[0])?.target
|
|
50
54
|
: undefined;
|
|
51
|
-
term.
|
|
52
|
-
out[outIndex++] =
|
|
53
|
-
?
|
|
55
|
+
term.target[1].forEach((componentEid) => {
|
|
56
|
+
out[outIndex++] = targetEntity?.has(componentEid)
|
|
57
|
+
? targetEntity._get(componentEid)
|
|
54
58
|
: undefined;
|
|
55
59
|
});
|
|
56
60
|
});
|
|
@@ -71,14 +75,12 @@ export function getInjectedWithSrc(e, inject, out, src, requireDirectComponents
|
|
|
71
75
|
if ("down" in term) {
|
|
72
76
|
throw new Error("down injection is only supported in each/forEach");
|
|
73
77
|
}
|
|
74
|
-
const
|
|
75
|
-
? e._get(term.
|
|
78
|
+
const targetEntity = e.has(term.target[0])
|
|
79
|
+
? e._get(term.target[0])?.target
|
|
76
80
|
: undefined;
|
|
77
|
-
term.
|
|
78
|
-
out[outIndex] =
|
|
79
|
-
|
|
80
|
-
: undefined;
|
|
81
|
-
src[outIndex] = target;
|
|
81
|
+
term.target[1].forEach((componentEid) => {
|
|
82
|
+
out[outIndex] = targetEntity?.has(componentEid) ? targetEntity._get(componentEid) : undefined;
|
|
83
|
+
src[outIndex] = targetEntity;
|
|
82
84
|
outIndex++;
|
|
83
85
|
});
|
|
84
86
|
});
|
|
@@ -88,11 +90,11 @@ export function directInjectEids(inject) {
|
|
|
88
90
|
}
|
|
89
91
|
/**
|
|
90
92
|
* Per-iteration cursor passed to `each` / `forEach` / `enter` / `exit` /
|
|
91
|
-
* `update` / `
|
|
93
|
+
* `update` / `orderBy` callbacks when the caller opts in by passing `Iter` as
|
|
92
94
|
* the first argument:
|
|
93
95
|
*
|
|
94
96
|
* ```ts
|
|
95
|
-
* system.each(Iter, [Body, {
|
|
97
|
+
* system.each(Iter, [Body, { target: [ChildOf, [Position]] }], (it, [body, pos]) => {
|
|
96
98
|
* it.entity; // the visited entity
|
|
97
99
|
* it.src[0]; // entity `body` was read from (the visited entity)
|
|
98
100
|
* it.src[1]; // entity `pos` was read from (the ChildOf target), or undefined
|
|
@@ -200,8 +202,8 @@ function _findSingleDownInject(inject) {
|
|
|
200
202
|
slot++;
|
|
201
203
|
return;
|
|
202
204
|
}
|
|
203
|
-
if ("
|
|
204
|
-
slot += term.
|
|
205
|
+
if ("target" in term) {
|
|
206
|
+
slot += term.target[1].length;
|
|
205
207
|
return;
|
|
206
208
|
}
|
|
207
209
|
if (found !== undefined) {
|
|
@@ -215,7 +217,7 @@ function _findSingleDownInject(inject) {
|
|
|
215
217
|
function fillDownInject(child, componentEids, slot, out, src) {
|
|
216
218
|
componentEids.forEach((componentEid, offset) => {
|
|
217
219
|
const outIndex = slot + offset;
|
|
218
|
-
out[outIndex] = child.
|
|
220
|
+
out[outIndex] = child.has(componentEid) ? child._get(componentEid) : undefined;
|
|
219
221
|
if (src) {
|
|
220
222
|
src[outIndex] = child;
|
|
221
223
|
}
|
|
@@ -232,12 +234,12 @@ function getInjectedSkippingDown(e, inject, out) {
|
|
|
232
234
|
outIndex += term.down[1].length;
|
|
233
235
|
return;
|
|
234
236
|
}
|
|
235
|
-
const
|
|
236
|
-
? e._get(term.
|
|
237
|
+
const targetEntity = e.has(term.target[0])
|
|
238
|
+
? e._get(term.target[0])?.target
|
|
237
239
|
: undefined;
|
|
238
|
-
term.
|
|
239
|
-
out[outIndex++] =
|
|
240
|
-
?
|
|
240
|
+
term.target[1].forEach((componentEid) => {
|
|
241
|
+
out[outIndex++] = targetEntity?.has(componentEid)
|
|
242
|
+
? targetEntity._get(componentEid)
|
|
241
243
|
: undefined;
|
|
242
244
|
});
|
|
243
245
|
});
|
|
@@ -255,14 +257,12 @@ function getInjectedWithSrcSkippingDown(e, inject, out, src) {
|
|
|
255
257
|
outIndex += term.down[1].length;
|
|
256
258
|
return;
|
|
257
259
|
}
|
|
258
|
-
const
|
|
259
|
-
? e._get(term.
|
|
260
|
+
const targetEntity = e.has(term.target[0])
|
|
261
|
+
? e._get(term.target[0])?.target
|
|
260
262
|
: undefined;
|
|
261
|
-
term.
|
|
262
|
-
out[outIndex] =
|
|
263
|
-
|
|
264
|
-
: undefined;
|
|
265
|
-
src[outIndex] = target;
|
|
263
|
+
term.target[1].forEach((componentEid) => {
|
|
264
|
+
out[outIndex] = targetEntity?.has(componentEid) ? targetEntity._get(componentEid) : undefined;
|
|
265
|
+
src[outIndex] = targetEntity;
|
|
266
266
|
outIndex++;
|
|
267
267
|
});
|
|
268
268
|
});
|
package/dist/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"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"}
|
package/dist/module.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component } from "./component.js";
|
|
2
|
-
|
|
2
|
+
export type ModuleConfig<T extends Module<any>> = T extends Module<infer Config> ? Config : never;
|
|
3
3
|
/**
|
|
4
4
|
* Base class for built-in world modules.
|
|
5
5
|
*
|
|
@@ -10,8 +10,8 @@ import { type World } from "./world/index.js";
|
|
|
10
10
|
* User code does not instantiate `Module` subclasses directly; they are
|
|
11
11
|
* created and initialised by the world internally.
|
|
12
12
|
*/
|
|
13
|
-
export declare abstract class Module extends Component {
|
|
14
|
-
|
|
13
|
+
export declare abstract class Module<Config extends object | undefined = undefined> extends Component {
|
|
14
|
+
protected readonly moduleConfig?: Config;
|
|
15
15
|
/**
|
|
16
16
|
* Initialise this module.
|
|
17
17
|
*
|
|
@@ -19,5 +19,5 @@ export declare abstract class Module extends Component {
|
|
|
19
19
|
* registered. Implementations should register components, attach hooks, and
|
|
20
20
|
* perform any other world-level setup required by the module.
|
|
21
21
|
*/
|
|
22
|
-
abstract init(): void;
|
|
22
|
+
abstract init(config: Config): void;
|
|
23
23
|
}
|
package/dist/module.js
CHANGED
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C;;;;;;;;;GASG;AACH,MAAM,OAAgB,MAAsD,SAAQ,SAAS;CAW5F"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Module } from "../module.js";
|
|
2
|
+
import { type Entity } from "../entity/index.js";
|
|
3
|
+
/** Marker component tagging an entity as a pipeline phase anchor. */
|
|
4
|
+
export declare class Phase {
|
|
5
|
+
}
|
|
6
|
+
export declare const ON_LOAD = "vecs::OnLoad";
|
|
7
|
+
export declare const POST_LOAD = "vecs::PostLoad";
|
|
8
|
+
export declare const PRE_UPDATE = "vecs::PreUpdate";
|
|
9
|
+
export declare const ON_UPDATE = "vecs::OnUpdate";
|
|
10
|
+
export declare const ON_VALIDATE = "vecs::OnValidate";
|
|
11
|
+
export declare const POST_UPDATE = "vecs::PostUpdate";
|
|
12
|
+
export declare const PRE_STORE = "vecs::PreStore";
|
|
13
|
+
export declare const ON_STORE = "vecs::OnStore";
|
|
14
|
+
export declare const BUILTIN_PIPELINE_PHASES: readonly ["vecs::OnLoad", "vecs::PostLoad", "vecs::PreUpdate", "vecs::OnUpdate", "vecs::OnValidate", "vecs::PostUpdate", "vecs::PreStore", "vecs::OnStore"];
|
|
15
|
+
/** Insert an existing phase directly after an existing phase spine anchor. */
|
|
16
|
+
export declare function insertPhaseAfter(phase: Entity, anchor: Entity): Entity;
|
|
17
|
+
/** Built-in module that creates the default query-driven system pipeline. */
|
|
18
|
+
export declare class PipelineModule extends Module {
|
|
19
|
+
init(): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { System } from "../system.js";
|
|
2
|
+
import { Module } from "../module.js";
|
|
3
|
+
import { DependsOn, Traversable } from "./relationships.js";
|
|
4
|
+
/** Marker component tagging an entity as a pipeline phase anchor. */
|
|
5
|
+
export class Phase {
|
|
6
|
+
}
|
|
7
|
+
export const ON_LOAD = "vecs::OnLoad";
|
|
8
|
+
export const POST_LOAD = "vecs::PostLoad";
|
|
9
|
+
export const PRE_UPDATE = "vecs::PreUpdate";
|
|
10
|
+
export const ON_UPDATE = "vecs::OnUpdate";
|
|
11
|
+
export const ON_VALIDATE = "vecs::OnValidate";
|
|
12
|
+
export const POST_UPDATE = "vecs::PostUpdate";
|
|
13
|
+
export const PRE_STORE = "vecs::PreStore";
|
|
14
|
+
export const ON_STORE = "vecs::OnStore";
|
|
15
|
+
export const BUILTIN_PIPELINE_PHASES = [
|
|
16
|
+
ON_LOAD,
|
|
17
|
+
POST_LOAD,
|
|
18
|
+
PRE_UPDATE,
|
|
19
|
+
ON_UPDATE,
|
|
20
|
+
ON_VALIDATE,
|
|
21
|
+
POST_UPDATE,
|
|
22
|
+
PRE_STORE,
|
|
23
|
+
ON_STORE,
|
|
24
|
+
];
|
|
25
|
+
/** Insert an existing phase directly after an existing phase spine anchor. */
|
|
26
|
+
export function insertPhaseAfter(phase, anchor) {
|
|
27
|
+
assertPhase(phase, "phase");
|
|
28
|
+
assertPhase(anchor, "anchor");
|
|
29
|
+
const downstream = [...anchor.children(DependsOn)].filter((child) => child !== phase && child.has(Phase) && child.has(DependsOn));
|
|
30
|
+
phase.set(DependsOn, { target: anchor });
|
|
31
|
+
for (const child of downstream) {
|
|
32
|
+
child.set(DependsOn, { target: phase });
|
|
33
|
+
}
|
|
34
|
+
return phase;
|
|
35
|
+
}
|
|
36
|
+
function assertPhase(entity, label) {
|
|
37
|
+
if (!entity.has(Phase)) {
|
|
38
|
+
throw new Error(`insertPhaseAfter ${label} must have Phase`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Built-in module that creates the default query-driven system pipeline. */
|
|
42
|
+
export class PipelineModule extends Module {
|
|
43
|
+
init() {
|
|
44
|
+
const world = this.world;
|
|
45
|
+
world.component(Phase);
|
|
46
|
+
world.component(DependsOn).add(Traversable);
|
|
47
|
+
const phases = BUILTIN_PIPELINE_PHASES.map((name) => world.entity(name).add(Phase));
|
|
48
|
+
for (let i = 1; i < phases.length; i++) {
|
|
49
|
+
phases[i].set(DependsOn, { target: phases[i - 1] });
|
|
50
|
+
}
|
|
51
|
+
world.setPipeline({
|
|
52
|
+
with: { all: [System, { target: [DependsOn, Phase] }] },
|
|
53
|
+
cascade: DependsOn,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/modules/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Relationship } from "../component_meta.js";
|
|
2
|
+
import { type Entity } from "../entity/index.js";
|
|
3
|
+
/** Built-in parent-child relationship. */
|
|
4
|
+
export declare class ChildOf extends Relationship {
|
|
5
|
+
}
|
|
6
|
+
/** Built-in pipeline ordering relationship. */
|
|
7
|
+
export declare class DependsOn extends Relationship {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Built-in relationship marking a feedback **silence domain** for a query
|
|
11
|
+
* or system.
|
|
12
|
+
*
|
|
13
|
+
* When a query carries a `SilenceSource` pointing at a query entity, it
|
|
14
|
+
* ignores `update` notifications whose originating entity (the system
|
|
15
|
+
* that wrote the component) is a member of that query. Configure it through
|
|
16
|
+
* {@link Query.ignoreSource}.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SilenceSource extends Relationship {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Marker component used to tag a relationship component as traversable.
|
|
22
|
+
*
|
|
23
|
+
* Attach to a relationship-component entity (e.g. `ChildOf`) to enable
|
|
24
|
+
* automatic depth tracking: every entity carrying the tagged relationship
|
|
25
|
+
* gets a depth entry whose value is the number of hops to the nearest root
|
|
26
|
+
* (zero for roots).
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* world.component(ChildOf).add(Traversable);
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* The depth map is maintained reactively by {@link RelationshipsModule}.
|
|
33
|
+
*/
|
|
34
|
+
export declare class Traversable {
|
|
35
|
+
/** Entity to depth (hops to root, 0-based). */
|
|
36
|
+
depths: Map<Entity, number>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Relationship } from "../component_meta.js";
|
|
2
|
+
/** Built-in parent-child relationship. */
|
|
3
|
+
export class ChildOf extends Relationship {
|
|
4
|
+
}
|
|
5
|
+
/** Built-in pipeline ordering relationship. */
|
|
6
|
+
export class DependsOn extends Relationship {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Built-in relationship marking a feedback **silence domain** for a query
|
|
10
|
+
* or system.
|
|
11
|
+
*
|
|
12
|
+
* When a query carries a `SilenceSource` pointing at a query entity, it
|
|
13
|
+
* ignores `update` notifications whose originating entity (the system
|
|
14
|
+
* that wrote the component) is a member of that query. Configure it through
|
|
15
|
+
* {@link Query.ignoreSource}.
|
|
16
|
+
*/
|
|
17
|
+
export class SilenceSource extends Relationship {
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Marker component used to tag a relationship component as traversable.
|
|
21
|
+
*
|
|
22
|
+
* Attach to a relationship-component entity (e.g. `ChildOf`) to enable
|
|
23
|
+
* automatic depth tracking: every entity carrying the tagged relationship
|
|
24
|
+
* gets a depth entry whose value is the number of hops to the nearest root
|
|
25
|
+
* (zero for roots).
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* world.component(ChildOf).add(Traversable);
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* The depth map is maintained reactively by {@link RelationshipsModule}.
|
|
32
|
+
*/
|
|
33
|
+
export class Traversable {
|
|
34
|
+
constructor() {
|
|
35
|
+
/** Entity to depth (hops to root, 0-based). */
|
|
36
|
+
this.depths = new Map();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=relationship_types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship_types.js","sourceRoot":"","sources":["../../src/modules/relationship_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,0CAA0C;AAC1C,MAAM,OAAO,OAAQ,SAAQ,YAAY;CAAG;AAE5C,+CAA+C;AAC/C,MAAM,OAAO,SAAU,SAAQ,YAAY;CAAG;AAE9C;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;CAAG;AAElD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,WAAW;IAAxB;QACE,+CAA+C;QAC/C,WAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,CAAC;CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Module } from "../module.js";
|
|
2
|
+
export { ChildOf, DependsOn, SilenceSource, Traversable } from "./relationship_types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Built-in world module that registers the `ChildOf` relationship and
|
|
5
|
+
* maintains depth tracking for traversable relationships.
|
|
6
|
+
*
|
|
7
|
+
* Registered automatically by every {@link World}. It sets `ChildOf`'s
|
|
8
|
+
* `onDeleteTarget` cleanup policy to {@link CleanupPolicy.Delete}, so
|
|
9
|
+
* destroying a parent recursively destroys the children that target it through
|
|
10
|
+
* `ChildOf` (custom relationships default to `Remove`).
|
|
11
|
+
*
|
|
12
|
+
* When a relationship component entity has `Traversable` attached, the module
|
|
13
|
+
* installs `onAdd`, `onSet`, and `onRemove` hooks on that relationship so that
|
|
14
|
+
* every entity's depth is updated when the relationship is added, retargeted,
|
|
15
|
+
* or removed.
|
|
16
|
+
*
|
|
17
|
+
* Depth is computed by walking `entity.parent(relEid)` to the root. When an
|
|
18
|
+
* entity's depth changes, every descendant is recursively recomputed.
|
|
19
|
+
*/
|
|
20
|
+
export declare class RelationshipsModule extends Module {
|
|
21
|
+
init(): void;
|
|
22
|
+
private _cascadeUpdate;
|
|
23
|
+
private _depthOf;
|
|
24
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { CleanupPolicy } from "../component_meta.js";
|
|
2
|
+
import { Module } from "../module.js";
|
|
3
|
+
import { ChildOf, Traversable } from "./relationship_types.js";
|
|
4
|
+
export { ChildOf, DependsOn, SilenceSource, Traversable } from "./relationship_types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Built-in world module that registers the `ChildOf` relationship and
|
|
7
|
+
* maintains depth tracking for traversable relationships.
|
|
8
|
+
*
|
|
9
|
+
* Registered automatically by every {@link World}. It sets `ChildOf`'s
|
|
10
|
+
* `onDeleteTarget` cleanup policy to {@link CleanupPolicy.Delete}, so
|
|
11
|
+
* destroying a parent recursively destroys the children that target it through
|
|
12
|
+
* `ChildOf` (custom relationships default to `Remove`).
|
|
13
|
+
*
|
|
14
|
+
* When a relationship component entity has `Traversable` attached, the module
|
|
15
|
+
* installs `onAdd`, `onSet`, and `onRemove` hooks on that relationship so that
|
|
16
|
+
* every entity's depth is updated when the relationship is added, retargeted,
|
|
17
|
+
* or removed.
|
|
18
|
+
*
|
|
19
|
+
* Depth is computed by walking `entity.parent(relEid)` to the root. When an
|
|
20
|
+
* entity's depth changes, every descendant is recursively recomputed.
|
|
21
|
+
*/
|
|
22
|
+
export class RelationshipsModule extends Module {
|
|
23
|
+
init() {
|
|
24
|
+
const world = this.world;
|
|
25
|
+
const childOf = world.component(ChildOf);
|
|
26
|
+
const traversable = world.component(Traversable);
|
|
27
|
+
childOf.meta.onDeleteTarget = CleanupPolicy.Delete;
|
|
28
|
+
traversable.onAdd((rel, traversable) => {
|
|
29
|
+
const relEid = rel.eid;
|
|
30
|
+
rel
|
|
31
|
+
.onAdd((entity) => {
|
|
32
|
+
this._cascadeUpdate(entity, relEid, traversable);
|
|
33
|
+
})
|
|
34
|
+
.onSet((entity) => {
|
|
35
|
+
this._cascadeUpdate(entity, relEid, traversable);
|
|
36
|
+
})
|
|
37
|
+
.onRemove((entity) => {
|
|
38
|
+
traversable.depths.delete(entity);
|
|
39
|
+
for (const child of entity._childrenByEid(relEid) ?? []) {
|
|
40
|
+
this._cascadeUpdate(child, relEid, traversable);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
world.entities.forEach((entity) => {
|
|
44
|
+
if (entity.has(relEid)) {
|
|
45
|
+
this._cascadeUpdate(entity, relEid, traversable);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
childOf.add(Traversable);
|
|
50
|
+
}
|
|
51
|
+
_cascadeUpdate(entity, relEid, traversable, visited = new Set()) {
|
|
52
|
+
if (visited.has(entity)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
visited.add(entity);
|
|
56
|
+
if (entity.has(relEid)) {
|
|
57
|
+
traversable.depths.set(entity, this._depthOf(entity, relEid, traversable, new Set()));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
traversable.depths.delete(entity);
|
|
61
|
+
}
|
|
62
|
+
for (const child of entity._childrenByEid(relEid) ?? []) {
|
|
63
|
+
this._cascadeUpdate(child, relEid, traversable, visited);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
_depthOf(entity, relEid, traversable, visited) {
|
|
67
|
+
if (!entity.has(relEid) || visited.has(entity)) {
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
visited.add(entity);
|
|
71
|
+
const parent = entity.parent(relEid);
|
|
72
|
+
if (!parent) {
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
const parentDepth = traversable.depths.get(parent);
|
|
76
|
+
if (parentDepth !== undefined && !visited.has(parent)) {
|
|
77
|
+
return parentDepth + 1;
|
|
78
|
+
}
|
|
79
|
+
return this._depthOf(parent, relEid, traversable, visited) + 1;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=relationships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationships.js","sourceRoot":"","sources":["../../src/modules/relationships.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,9 +23,8 @@ export class Singleton {
|
|
|
23
23
|
*/
|
|
24
24
|
export class SingletonModule extends Module {
|
|
25
25
|
init() {
|
|
26
|
-
this.world.component(Singleton);
|
|
27
26
|
this.world.component(Singleton).onAdd((target) => {
|
|
28
|
-
const targetMeta = target.
|
|
27
|
+
const targetMeta = target.meta;
|
|
29
28
|
if (targetMeta.usageCount !== 0) {
|
|
30
29
|
throw new Error(`Cannot make component ${targetMeta.Class.name} singleton; ${targetMeta.usageCount} instance(s) already exist`);
|
|
31
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/modules/singleton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,SAAS;CAAG;AAEzB;;;;;;GAMG;AACH,MAAM,OAAO,eAAgB,SAAQ,MAAM;IAClC,IAAI;QACT,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/modules/singleton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,SAAS;CAAG;AAEzB;;;;;;GAMG;AACH,MAAM,OAAO,eAAgB,SAAQ,MAAM;IAClC,IAAI;QACT,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,MAAc,EAAQ,EAAE;YAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YAC/B,IAAI,UAAU,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,yBAAyB,UAAU,CAAC,KAAK,CAAC,IAAI,eAAe,UAAU,CAAC,UAAU,4BAA4B,CAC/G,CAAC;YACJ,CAAC;YAED,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1B,IAAI,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;oBACrD,MAAM,IAAI,KAAK,CACb,kCAAkC,UAAU,CAAC,KAAK,CAAC,IAAI,cAAc,MAAM,CAAC,GAAG,kCAAkC,MAAM,CAAC,GAAG,EAAE,CAC9H,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vworlds/vecs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.22",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"test:watch": "vitest",
|
|
25
25
|
"lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" --no-error-on-unmatched-pattern",
|
|
26
26
|
"typecheck": "tsc --noEmit",
|
|
27
|
-
"format:check": "prettier --check \"**/*.{ts,md}\""
|
|
27
|
+
"format:check": "prettier --check \"**/*.{ts,md}\" --ignore-path ../../.prettierignore"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"eventemitter3": "^4.0.7"
|