@vworlds/vecs 1.0.45 → 1.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +7 -1
  2. package/dist/component.d.ts +57 -60
  3. package/dist/component.js +24 -17
  4. package/dist/component.js.map +1 -1
  5. package/dist/component_meta.d.ts +67 -79
  6. package/dist/component_meta.js +331 -37
  7. package/dist/component_meta.js.map +1 -1
  8. package/dist/dsl.js +1 -1
  9. package/dist/dsl.js.map +1 -1
  10. package/dist/entity/entity.base.js +4 -0
  11. package/dist/entity/entity.base.js.map +1 -1
  12. package/dist/entity/entity.components.d.ts +39 -41
  13. package/dist/entity/entity.components.js +249 -82
  14. package/dist/entity/entity.components.js.map +1 -1
  15. package/dist/entity/entity.d.ts +1 -2
  16. package/dist/entity/entity.js +2 -3
  17. package/dist/entity/entity.js.map +1 -1
  18. package/dist/entity/entity.lifecycle.d.ts +7 -1
  19. package/dist/entity/entity.lifecycle.js +40 -50
  20. package/dist/entity/entity.lifecycle.js.map +1 -1
  21. package/dist/entity/entity.queries.js +30 -0
  22. package/dist/entity/entity.queries.js.map +1 -1
  23. package/dist/entity/entity.relationships.d.ts +4 -0
  24. package/dist/entity/entity.relationships.js +18 -10
  25. package/dist/entity/entity.relationships.js.map +1 -1
  26. package/dist/index.d.ts +7 -4
  27. package/dist/index.js +4 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/inject.d.ts +63 -14
  30. package/dist/inject.js +165 -89
  31. package/dist/inject.js.map +1 -1
  32. package/dist/modules/identity.js +2 -2
  33. package/dist/modules/identity.js.map +1 -1
  34. package/dist/modules/implements.js +2 -2
  35. package/dist/modules/implements.js.map +1 -1
  36. package/dist/modules/pipeline.js +5 -5
  37. package/dist/modules/pipeline.js.map +1 -1
  38. package/dist/modules/relationship_types.d.ts +70 -6
  39. package/dist/modules/relationship_types.js +70 -6
  40. package/dist/modules/relationship_types.js.map +1 -1
  41. package/dist/modules/relationships.d.ts +31 -9
  42. package/dist/modules/relationships.js +120 -44
  43. package/dist/modules/relationships.js.map +1 -1
  44. package/dist/modules/singleton.js +2 -2
  45. package/dist/modules/singleton.js.map +1 -1
  46. package/dist/modules/snapshot.d.ts +26 -0
  47. package/dist/modules/snapshot.js +45 -0
  48. package/dist/modules/snapshot.js.map +1 -0
  49. package/dist/modules/snapshot_types.d.ts +85 -0
  50. package/dist/modules/snapshot_types.js +130 -0
  51. package/dist/modules/snapshot_types.js.map +1 -0
  52. package/dist/package.json +2 -2
  53. package/dist/query/callbacks.d.ts +9 -7
  54. package/dist/query/callbacks.js +27 -41
  55. package/dist/query/callbacks.js.map +1 -1
  56. package/dist/query/grouped_query.js +7 -7
  57. package/dist/query/grouped_query.js.map +1 -1
  58. package/dist/query/grouping.d.ts +6 -2
  59. package/dist/query/grouping.js +84 -15
  60. package/dist/query/grouping.js.map +1 -1
  61. package/dist/query/query.d.ts +4 -4
  62. package/dist/query/query.js +37 -14
  63. package/dist/query/query.js.map +1 -1
  64. package/dist/snapshot/capture.d.ts +1 -0
  65. package/dist/snapshot/capture.js +212 -0
  66. package/dist/snapshot/capture.js.map +1 -0
  67. package/dist/snapshot/clone.d.ts +1 -0
  68. package/dist/snapshot/clone.js +107 -0
  69. package/dist/snapshot/clone.js.map +1 -0
  70. package/dist/snapshot/index.d.ts +5 -0
  71. package/dist/snapshot/index.js +21 -0
  72. package/dist/snapshot/index.js.map +1 -0
  73. package/dist/snapshot/preflight.d.ts +1 -0
  74. package/dist/snapshot/preflight.js +40 -0
  75. package/dist/snapshot/preflight.js.map +1 -0
  76. package/dist/snapshot/restore.d.ts +1 -0
  77. package/dist/snapshot/restore.js +111 -0
  78. package/dist/snapshot/restore.js.map +1 -0
  79. package/dist/snapshot/types.d.ts +135 -0
  80. package/dist/snapshot/types.js +26 -0
  81. package/dist/snapshot/types.js.map +1 -0
  82. package/dist/system.d.ts +3 -1
  83. package/dist/system.js +33 -23
  84. package/dist/system.js.map +1 -1
  85. package/dist/terms/all_term.js +19 -0
  86. package/dist/terms/all_term.js.map +1 -1
  87. package/dist/terms/any_term.js +19 -0
  88. package/dist/terms/any_term.js.map +1 -1
  89. package/dist/terms/not_term.js +4 -0
  90. package/dist/terms/not_term.js.map +1 -1
  91. package/dist/terms/target_term.d.ts +1 -2
  92. package/dist/terms/target_term.js +2 -4
  93. package/dist/terms/target_term.js.map +1 -1
  94. package/dist/terms/term.d.ts +2 -0
  95. package/dist/terms/term.js +59 -10
  96. package/dist/terms/term.js.map +1 -1
  97. package/dist/util/array_map.d.ts +43 -12
  98. package/dist/util/array_map.js +90 -41
  99. package/dist/util/array_map.js.map +1 -1
  100. package/dist/util/dense_set.js +26 -0
  101. package/dist/util/dense_set.js.map +1 -1
  102. package/dist/world/world.base.js +12 -0
  103. package/dist/world/world.base.js.map +1 -1
  104. package/dist/world/world.d.ts +7 -0
  105. package/dist/world/world.deferred.js +17 -0
  106. package/dist/world/world.deferred.js.map +1 -1
  107. package/dist/world/world.entities.d.ts +13 -2
  108. package/dist/world/world.entities.js +16 -2
  109. package/dist/world/world.entities.js.map +1 -1
  110. package/dist/world/world.js +15 -3
  111. package/dist/world/world.js.map +1 -1
  112. package/dist/world/world.pipeline.d.ts +2 -2
  113. package/dist/world/world.pipeline.js +4 -2
  114. package/dist/world/world.pipeline.js.map +1 -1
  115. package/dist/world/world.queries.d.ts +7 -0
  116. package/dist/world/world.queries.js +52 -0
  117. package/dist/world/world.queries.js.map +1 -1
  118. package/dist/world/world.transfers.d.ts +137 -0
  119. package/dist/world/world.transfers.js +188 -0
  120. package/dist/world/world.transfers.js.map +1 -0
  121. package/docs/README.md +18 -6
  122. package/docs/components.md +90 -53
  123. package/docs/concepts.md +21 -17
  124. package/docs/design-guide.md +125 -94
  125. package/docs/entities.md +62 -76
  126. package/docs/execution-model.md +26 -10
  127. package/docs/getting-started.md +6 -6
  128. package/docs/glossary.md +19 -10
  129. package/docs/modules.md +8 -8
  130. package/docs/queries-and-filters.md +15 -10
  131. package/docs/relationships.md +245 -124
  132. package/docs/snapshots.md +181 -0
  133. package/docs/systems.md +64 -21
  134. package/docs/utilities.md +10 -6
  135. package/package.json +2 -2
  136. package/skills/vecs/SKILL.md +5 -4
@@ -0,0 +1,130 @@
1
+ // Snapshot policy trait, its policy values, and the declaration helpers that
2
+ // read and write them.
3
+ //
4
+ // Everything `component.ts` needs lives here rather than in `snapshot.ts`, which
5
+ // pulls in `module.ts` and would close the `component.ts` -> `module.ts` ->
6
+ // `component.ts` cycle at class-definition time. `SnapshotModule` keeps only the
7
+ // runtime invariants it installs, mirroring the `relationship_types.ts` /
8
+ // `relationships.ts` split.
9
+ import { Relationship } from "../component_meta.js";
10
+ /**
11
+ * Built-in pair-form trait declaring how {@link World.snapshotSubtree} captures
12
+ * one component type.
13
+ *
14
+ * The trait is attached to the **component entity**, not to ordinary entities,
15
+ * and its target selects the policy. It is exclusive, one-of
16
+ * {@link OneOf | restricted to its own children}. Configure it through the
17
+ * owning module; declarations affect future captures, while each existing
18
+ * snapshot retains the materializer bound at its capture time.
19
+ *
20
+ * ```ts
21
+ * // Declare "this type never crosses worlds" (resources, live queries, engines).
22
+ * world.component(PhysicsEngine).snapshotPolicy(DontSnapshot);
23
+ *
24
+ * // Declare a bespoke capture that drops runtime handles.
25
+ * world.component(Body).snapshotPolicy(CustomSnapshot, {
26
+ * capture: (body) => ({ ...body, _bodyId: undefined }),
27
+ * materialize: (data) => Object.assign(new Body(), data),
28
+ * });
29
+ * ```
30
+ *
31
+ * A type with no {@link OnSnapshot} edge uses {@link ClonePublic}, so ordinary
32
+ * plain-data components need no declaration at all.
33
+ */
34
+ export class OnSnapshot extends Relationship {
35
+ constructor() {
36
+ super(...arguments);
37
+ /**
38
+ * Capture hook for the {@link CustomSnapshot} policy. `undefined` for every
39
+ * other policy.
40
+ */
41
+ this.capture = undefined;
42
+ /**
43
+ * Materialize hook for the {@link CustomSnapshot} policy. `undefined` for
44
+ * every other policy.
45
+ */
46
+ this.materialize = undefined;
47
+ }
48
+ }
49
+ /**
50
+ * Default snapshot policy: construct a fresh instance of the component class
51
+ * and clone the source instance's own enumerable fields onto it.
52
+ *
53
+ * Shallow, and therefore exactly as aliasing-sensitive as `set`: a component
54
+ * holding a nested object shares it with the source until something copies it.
55
+ * A type that must not carry runtime handles across worlds needs its own
56
+ * policy — see {@link CustomSnapshot}.
57
+ */
58
+ export class ClonePublic {
59
+ }
60
+ /**
61
+ * Snapshot policy declaring that a component type never crosses worlds.
62
+ *
63
+ * Use it for attached resources and other instances whose identity is bound to
64
+ * a single world: live queries and systems, engine handles, socket sessions.
65
+ * A snapshot silently omits an unselected `DontSnapshot` type, but *selecting*
66
+ * one explicitly is a preflight error, so a caller cannot silently lose state
67
+ * it asked for.
68
+ */
69
+ export class DontSnapshot {
70
+ }
71
+ /**
72
+ * Snapshot policy delegating capture and materialization to the owner.
73
+ *
74
+ * Register it with {@link Component.snapshotPolicy}, passing the `capture` and
75
+ * `materialize` callbacks; the callbacks are stored on that component entity's
76
+ * own {@link OnSnapshot} edge, so each component type keeps a separate policy.
77
+ */
78
+ export class CustomSnapshot {
79
+ }
80
+ /** @internal The policy a component type resolves to when it declares none. */
81
+ export const CLONE_PUBLIC = { kind: "clone" };
82
+ /** @internal The policy a component type resolves to when it is excluded. */
83
+ export const NO_SNAPSHOT = { kind: "none" };
84
+ /**
85
+ * @internal Attach `policy` to `component`'s {@link OnSnapshot} edge and store
86
+ * the custom callbacks when the policy needs them.
87
+ *
88
+ * Called by `Component.snapshotPolicy`; the `OnSnapshot` hooks installed by
89
+ * `SnapshotModule` enforce the setup-time invariant.
90
+ */
91
+ export function _declareSnapshotPolicy(component, policy, capture, materialize) {
92
+ const world = component.world;
93
+ const target = world.component(policy);
94
+ component.add(OnSnapshot, target);
95
+ component.set(OnSnapshot, {
96
+ capture: policy === CustomSnapshot ? capture : undefined,
97
+ materialize: policy === CustomSnapshot ? materialize : undefined,
98
+ });
99
+ }
100
+ /**
101
+ * @internal Resolve the capture policy declared for `meta` in `world`.
102
+ *
103
+ * A type with no {@link OnSnapshot} declaration resolves to {@link CLONE_PUBLIC}.
104
+ *
105
+ * @throws If an `OnSnapshot` edge selects {@link CustomSnapshot} without both
106
+ * callbacks, which would otherwise restore as a silently empty component.
107
+ */
108
+ export function _resolveSnapshotPolicy(world, meta) {
109
+ const onSnapshot = world.component(OnSnapshot);
110
+ const declaration = world.getEntity(meta.eid)?.get(onSnapshot.eid);
111
+ if (declaration === undefined) {
112
+ return CLONE_PUBLIC;
113
+ }
114
+ const policy = declaration._target();
115
+ if (policy === undefined || policy.eid === world.component(ClonePublic).eid) {
116
+ return CLONE_PUBLIC;
117
+ }
118
+ if (policy.eid !== world.component(CustomSnapshot).eid) {
119
+ return NO_SNAPSHOT;
120
+ }
121
+ if (declaration.capture === undefined || declaration.materialize === undefined) {
122
+ throw new Error(`OnSnapshot policy for ${meta.Class.name} selects CustomSnapshot without capture and materialize callbacks`);
123
+ }
124
+ return {
125
+ kind: "custom",
126
+ capture: declaration.capture,
127
+ materialize: declaration.materialize,
128
+ };
129
+ }
130
+ //# sourceMappingURL=snapshot_types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot_types.js","sourceRoot":"","sources":["../../src/modules/snapshot_types.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,uBAAuB;AACvB,EAAE;AACF,iFAAiF;AACjF,4EAA4E;AAC5E,iFAAiF;AACjF,0EAA0E;AAC1E,4BAA4B;AAG5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoBpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,UAAW,SAAQ,YAAY;IAA5C;;QACE;;;WAGG;QACI,YAAO,GAAgC,SAAS,CAAC;QAExD;;;WAGG;QACI,gBAAW,GAAoC,SAAS,CAAC;IAClE,CAAC;CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;CAAG;AAE3B;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;CAAG;AAE5B;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;CAAG;AAkB9B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAA2B,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAEtE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,MAA0B,EAC1B,OAAyB,EACzB,WAAiC;IAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;QACxB,OAAO,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACxD,WAAW,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAY,EAAE,IAAmB;IACtE,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAA2B,CAAC;IAC7F,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5E,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;QACvD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,CAAC,KAAK,CAAC,IAAI,mEAAmE,CAC5G,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,WAAW,EAAE,WAAW,CAAC,WAAW;KACrC,CAAC;AACJ,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vworlds/vecs",
3
- "version": "1.0.45",
3
+ "version": "1.0.46",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -15,7 +15,7 @@
15
15
  "prepack": "npm run build",
16
16
  "build": "npm run clean && npm run compile",
17
17
  "compile": "tsc -p tsconfig.build.json && cp \"./package.json\" ./dist/",
18
- "bench:ecs": "NODE_OPTIONS=--max-old-space-size=32768 RUN_VECS_ECS_BENCH=1 vitest run tests/ecs.bench.test.ts --pool=forks --poolOptions.forks.singleFork",
18
+ "bench:ecs": "NODE_OPTIONS=--max-old-space-size=32768 RUN_VECS_ECS_BENCH=1 vitest run tests/ecs.bench.test.ts --pool=forks --maxWorkers=1 --reporter=default",
19
19
  "test": "vitest run",
20
20
  "test:watch": "vitest",
21
21
  "lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" --no-error-on-unmatched-pattern",
@@ -1,18 +1,20 @@
1
1
  import { type ComponentInstance, type ComponentType } from "../component.js";
2
2
  import { Entity, type EID } from "../entity/index.js";
3
- import { type InjectElement, type InjectSnapshot, type InjectSnapshotTypes, type InjectTuple } from "../inject.js";
3
+ import { type InjectElement, type InjectSnapshot, type InjectTuple } from "../inject.js";
4
4
  import type { InjectCallbackOptions, OrderByOptions, UpdateCallbackOptions } from "./options.js";
5
5
  import { OrderedSet } from "../util/ordered_set.js";
6
6
  import { type World } from "../world/index.js";
7
7
  export type EntityCallback = (e: Entity, snapshot?: InjectSnapshot) => void;
8
+ export type InjectSnapshotter = (e: Entity) => InjectSnapshot;
8
9
  export type ComponentCallback = (e: Entity, c: ComponentInstance) => void;
9
- export declare function makeEnterCallback(world: World, arg0: InjectTuple | InjectCallbackOptions<InjectTuple> | ((e: Entity) => void), arg1?: Function): {
10
+ /**
11
+ * Build the shared enter/exit callback wrapper: resolve the injected tuple live
12
+ * when no snapshot is provided, or replay a snapshot captured when the event
13
+ * was routed (a System's inbox-queued enter/exit).
14
+ */
15
+ export declare function makeEnterExitCallback(world: World, arg0: InjectTuple | InjectCallbackOptions<InjectTuple> | ((e: Entity) => void), arg1?: Function): {
10
16
  callback: EntityCallback;
11
- snapshotTypes: InjectSnapshotTypes | undefined;
12
- };
13
- export declare function makeExitCallback(world: World, arg0: InjectTuple | InjectCallbackOptions<InjectTuple> | ((e: Entity) => void), arg1?: (...args: any[]) => void): {
14
- callback: EntityCallback;
15
- snapshotTypes: InjectSnapshotTypes | undefined;
17
+ snapshotter: InjectSnapshotter | undefined;
16
18
  };
17
19
  export declare function makeSortedEntitySet(world: World, arg0: readonly InjectElement[] | OrderByOptions<InjectTuple>, arg1?: Function): {
18
20
  set: OrderedSet<Entity>;
@@ -1,69 +1,55 @@
1
- import { directInjectEids, directInjectSnapshotTypes, getInjected, getInjectedWithSrc, injectArity, Iter, mapInject, wantsIter, } from "../inject.js";
1
+ import { getInjected, getInjectedWithSrc, injectArity, injectWatchEids, Iter, mapInject, replayInjectedSnapshot, replayInjectedSnapshotWithSrc, snapshotInjected, wantsIter, } from "../inject.js";
2
2
  import { OrderedSet } from "../util/ordered_set.js";
3
- export function makeEnterCallback(world, arg0, arg1) {
3
+ /**
4
+ * Build the shared enter/exit callback wrapper: resolve the injected tuple live
5
+ * when no snapshot is provided, or replay a snapshot captured when the event
6
+ * was routed (a System's inbox-queued enter/exit).
7
+ */
8
+ export function makeEnterExitCallback(world, arg0, arg1) {
4
9
  if (typeof arg0 === "function") {
5
10
  // Wrap so the drain's extra snapshot argument never leaks to a plain
6
- // (non-injecting) enter callback — it observes only the entity.
11
+ // (non-injecting) callback — it observes only the entity.
7
12
  const fn = arg0;
8
- return { callback: (e) => fn(e), snapshotTypes: undefined };
13
+ return { callback: (e) => fn(e), snapshotter: undefined };
9
14
  }
10
15
  const { components, useIter } = normalizeInjectCallbackArgs(arg0);
11
16
  const cb = arg1;
12
17
  const inject = mapInject(world, components);
13
- // Mirror exit: capture the injected components so a System's inbox-queued enter
14
- // still resolves them even if the entity is destroyed before the inbox drains.
15
- // Snapshots store component references, so live entities see current values.
16
- const snapshotTypes = directInjectSnapshotTypes(inject);
17
18
  const arity = injectArity(inject);
19
+ const snapshotter = (e) => snapshotInjected(e, inject, arity);
18
20
  if (useIter) {
19
- const callback = (e, enterSnapshot) => {
21
+ const callback = (e, snapshot) => {
20
22
  const injected = new Array(arity);
21
23
  const it = new Iter(arity);
22
24
  it.entity = e;
23
- getInjectedWithSrc(e, inject, injected, it.src, true, enterSnapshot);
25
+ if (snapshot === undefined) {
26
+ getInjectedWithSrc(e, inject, injected, it.src, true);
27
+ }
28
+ else {
29
+ replayInjectedSnapshotWithSrc(inject, snapshot, true, injected, it.src);
30
+ }
24
31
  cb(it, injected);
25
32
  };
26
- return { callback, snapshotTypes };
33
+ return { callback, snapshotter };
27
34
  }
28
- const callback = (e, enterSnapshot) => {
35
+ const callback = (e, snapshot) => {
29
36
  const injected = new Array(arity);
30
- getInjected(e, inject, true, injected, enterSnapshot);
31
- cb(e, injected);
32
- };
33
- return { callback, snapshotTypes };
34
- }
35
- export function makeExitCallback(world, arg0, arg1) {
36
- if (typeof arg0 === "function") {
37
- return { callback: arg0, snapshotTypes: undefined };
38
- }
39
- const { components, useIter } = normalizeInjectCallbackArgs(arg0);
40
- const cb = arg1;
41
- const inject = mapInject(world, components);
42
- const snapshotTypes = directInjectSnapshotTypes(inject);
43
- const arity = injectArity(inject);
44
- if (useIter) {
45
- const callback = (e, exitSnapshot) => {
46
- const injected = new Array(arity);
47
- const it = new Iter(arity);
48
- it.entity = e;
49
- getInjectedWithSrc(e, inject, injected, it.src, true, exitSnapshot);
50
- cb(it, injected);
51
- };
52
- return { callback, snapshotTypes };
53
- }
54
- const callback = (e, exitSnapshot) => {
55
- const injected = new Array(arity);
56
- getInjected(e, inject, true, injected, exitSnapshot);
37
+ if (snapshot === undefined) {
38
+ getInjected(e, inject, true, injected);
39
+ }
40
+ else {
41
+ replayInjectedSnapshot(inject, snapshot, true, injected);
42
+ }
57
43
  cb(e, injected);
58
44
  };
59
- return { callback, snapshotTypes };
45
+ return { callback, snapshotter };
60
46
  }
61
47
  export function makeSortedEntitySet(world, arg0, arg1) {
62
48
  const { components, useIter } = normalizeInjectCallbackArgs(arg0);
63
49
  const cb = arg1;
64
50
  const inject = mapInject(world, components);
65
51
  const arity = injectArity(inject);
66
- const watchEids = directInjectEids(inject);
52
+ const watchEids = injectWatchEids(inject);
67
53
  if (useIter) {
68
54
  const itA = new Iter(arity);
69
55
  const itB = new Iter(arity);
@@ -1 +1 @@
1
- {"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/query/callbacks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/query/callbacks.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { _resolveRelationship } from "../dsl.js";
2
2
  import { Entity } from "../entity/index.js";
3
- import { directInjectEids, getInjected, injectArity, mapInject, } from "../inject.js";
3
+ import { getInjected, injectArity, injectWatchEids, mapInject, } from "../inject.js";
4
4
  import { Grouping } from "./grouping.js";
5
5
  import { registerGroupedQueryPrototype } from "./grouped_query_registry.js";
6
6
  import { Query } from "./query.js";
@@ -36,23 +36,23 @@ export class GroupedQuery extends Query {
36
36
  if (this._grouping !== undefined) {
37
37
  throw new Error(`query '${this.name}' is already grouped`);
38
38
  }
39
- let keyOf;
39
+ let keysOf;
40
40
  let watchEids;
41
41
  if (typeof arg1 === "function") {
42
42
  const components = arg0;
43
43
  const inject = mapInject(this.world, components);
44
44
  const arity = injectArity(inject);
45
45
  const resolved = new Array(arity);
46
- keyOf = (e) => {
46
+ keysOf = (e) => {
47
47
  getInjected(e, inject, false, resolved);
48
- return arg1(e, resolved);
48
+ return [arg1(e, resolved)];
49
49
  };
50
- watchEids = directInjectEids(inject);
50
+ watchEids = injectWatchEids(inject);
51
51
  this._composeGroupMembership(components);
52
52
  }
53
53
  else {
54
54
  const relEid = _resolveRelationship(arg0, this.world);
55
- keyOf = (e) => e.target(relEid);
55
+ keysOf = (e) => e.targets(relEid);
56
56
  watchEids = [relEid];
57
57
  this._composeGroupMembership([arg0]);
58
58
  }
@@ -60,7 +60,7 @@ export class GroupedQuery extends Query {
60
60
  this._watchlistBitmask.add(ceid);
61
61
  }
62
62
  this.track();
63
- this._grouping = new Grouping(this.world, keyOf, watchEids);
63
+ this._grouping = new Grouping(this.world, keysOf, watchEids);
64
64
  return this;
65
65
  }
66
66
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"grouped_query.js","sourceRoot":"","sources":["../../src/query/grouped_query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,EAAY,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,SAAS,GAEV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,YAAY,GAAgC,IAAI,GAAG,EAAE,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,YAA0D,SAAQ,KAAQ;IAGrF,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,gBAAgB;IACG,MAAM,CAAC,CAAS;QACjC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB;IACG,KAAK,CAAC,CAAS;QAChC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,gBAAgB;IACT,WAAW,CAChB,IAAgD,EAChD,IAAwC;QAExC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,KAA6B,CAAC;QAClC,IAAI,SAAgB,CAAC;QACrB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAmC,CAAC;YACvD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;gBACpB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACxC,OAAO,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC3B,CAAC,CAAC;YACF,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,IAAI,CAAC,uBAAuB,CAAC,CAAC,IAAoB,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IACA,eAAe,CAAC,CAAS,EAAE,IAAS,EAAE,CAAoB;QACxE,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClC,2EAA2E;QAC3E,yEAAyE;QACzE,4DAA4D;QAC5D,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACa,eAAe;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,OAAO;QACrB,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,SAAU,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,GAAM;QACjB,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,CAA4B,CAAC;IAC7D,CAAC;IAEM,MAAM;QACX,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,YAAY,CAAC,MAAM,EAAE,CAE/D,CAAC;IACJ,CAAC;IAEM,SAAS;QACd,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,EAAE,CAAwB,CAAC;IAChF,CAAC;IAEM,YAAY,CAAC,QAAsC;QACxD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,QAAkC,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,WAAW,CAAC,QAA8C;QAC/D,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,QAAgD,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,uBAAuB,CAAC,IAAwB;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAuB,EAAE,CAC3B,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,UAAU,IAAI,GAAG,YAAY,MAAM,CAChF,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;CACF;AAED,6BAA6B,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"grouped_query.js","sourceRoot":"","sources":["../../src/query/grouped_query.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,12 @@ import { Group } from "./group.js";
4
4
  export declare class Grouping {
5
5
  readonly groups: Map<unknown, Group<unknown, []>>;
6
6
  private readonly _entityKeys;
7
- private readonly _keyOf;
7
+ private readonly _keysOf;
8
8
  private readonly _watchEids;
9
9
  private readonly _world;
10
10
  private _onGroupEnter;
11
11
  private _onGroupExit;
12
- constructor(world: World, keyOf: (e: Entity) => unknown, watchEids: Iterable<EID>);
12
+ constructor(world: World, keysOf: (e: Entity) => Iterable<unknown>, watchEids: Iterable<EID>);
13
13
  clear(): void;
14
14
  enter(e: Entity): void;
15
15
  exit(e: Entity): void;
@@ -20,5 +20,9 @@ export declare class Grouping {
20
20
  setOnGroupExit(callback: (key: unknown, group: Group) => void): void;
21
21
  private _addToBucket;
22
22
  private _assign;
23
+ private _assignOne;
24
+ private _diffKeys;
25
+ private _forEachKey;
26
+ private _hasKey;
23
27
  private _removeFromBucket;
24
28
  }
@@ -1,10 +1,10 @@
1
1
  import { Group } from "./group.js";
2
2
  export class Grouping {
3
- constructor(world, keyOf, watchEids) {
3
+ constructor(world, keysOf, watchEids) {
4
4
  this.groups = new Map();
5
5
  this._entityKeys = new Map();
6
6
  this._world = world;
7
- this._keyOf = keyOf;
7
+ this._keysOf = keysOf;
8
8
  this._watchEids = new Set(watchEids);
9
9
  }
10
10
  clear() {
@@ -12,12 +12,12 @@ export class Grouping {
12
12
  this._entityKeys.clear();
13
13
  }
14
14
  enter(e) {
15
- this._assign(e, this._keyOf(e));
15
+ this._assign(e, this._keysOf(e));
16
16
  }
17
17
  exit(e) {
18
- const key = this._entityKeys.get(e);
19
- if (key !== undefined) {
20
- this._removeFromBucket(e, key);
18
+ const keys = this._entityKeys.get(e);
19
+ if (keys !== undefined) {
20
+ this._forEachKey(keys, (key) => this._removeFromBucket(e, key));
21
21
  }
22
22
  this._entityKeys.delete(e);
23
23
  }
@@ -31,7 +31,7 @@ export class Grouping {
31
31
  if (!this._watchEids.has(ceid)) {
32
32
  return;
33
33
  }
34
- this._assign(e, this._keyOf(e));
34
+ this._assign(e, this._keysOf(e));
35
35
  }
36
36
  setOnGroupEnter(callback) {
37
37
  this._onGroupEnter = callback;
@@ -50,21 +50,90 @@ export class Grouping {
50
50
  }
51
51
  group._add(e);
52
52
  }
53
- _assign(e, newKey) {
54
- const oldKey = this._entityKeys.get(e);
55
- if (oldKey === newKey) {
56
- return;
53
+ _assign(e, keys) {
54
+ const oldKeys = this._entityKeys.get(e);
55
+ let first = undefined;
56
+ let newKeys = undefined;
57
+ let count = 0;
58
+ for (const key of keys) {
59
+ if (key === undefined) {
60
+ continue;
61
+ }
62
+ count++;
63
+ if (count === 1) {
64
+ first = key;
65
+ }
66
+ else {
67
+ (newKeys ?? (newKeys = new Set([first]))).add(key);
68
+ }
57
69
  }
58
- if (oldKey !== undefined) {
59
- this._removeFromBucket(e, oldKey);
70
+ if (newKeys !== undefined) {
71
+ this._diffKeys(e, oldKeys, newKeys);
72
+ this._entityKeys.set(e, newKeys);
73
+ return;
60
74
  }
61
- if (newKey === undefined) {
75
+ if (count === 0) {
76
+ if (oldKeys !== undefined) {
77
+ this._forEachKey(oldKeys, (key) => this._removeFromBucket(e, key));
78
+ }
62
79
  this._entityKeys.delete(e);
63
80
  return;
64
81
  }
65
- this._addToBucket(e, newKey);
82
+ this._assignOne(e, oldKeys, first);
83
+ }
84
+ _assignOne(e, oldKeys, newKey) {
85
+ if (oldKeys === undefined) {
86
+ this._addToBucket(e, newKey);
87
+ this._entityKeys.set(e, newKey);
88
+ return;
89
+ }
90
+ if (oldKeys instanceof Set) {
91
+ oldKeys.forEach((key) => {
92
+ if (key !== newKey) {
93
+ this._removeFromBucket(e, key);
94
+ }
95
+ });
96
+ if (!oldKeys.has(newKey)) {
97
+ this._addToBucket(e, newKey);
98
+ }
99
+ }
100
+ else if (oldKeys !== newKey) {
101
+ this._removeFromBucket(e, oldKeys);
102
+ this._addToBucket(e, newKey);
103
+ }
66
104
  this._entityKeys.set(e, newKey);
67
105
  }
106
+ _diffKeys(e, oldKeys, newKeys) {
107
+ this._forEachKey(oldKeys, (key) => {
108
+ if (!newKeys.has(key)) {
109
+ this._removeFromBucket(e, key);
110
+ }
111
+ });
112
+ newKeys.forEach((key) => {
113
+ if (!this._hasKey(oldKeys, key)) {
114
+ this._addToBucket(e, key);
115
+ }
116
+ });
117
+ }
118
+ _forEachKey(keys, fn) {
119
+ if (keys === undefined) {
120
+ return;
121
+ }
122
+ if (keys instanceof Set) {
123
+ keys.forEach(fn);
124
+ return;
125
+ }
126
+ fn(keys);
127
+ }
128
+ _hasKey(keys, key) {
129
+ if (keys === undefined) {
130
+ return false;
131
+ }
132
+ if (keys instanceof Set) {
133
+ return keys.has(key);
134
+ }
135
+ return keys === key;
136
+ }
68
137
  _removeFromBucket(e, key) {
69
138
  const group = this.groups.get(key);
70
139
  if (group === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/query/grouping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/query/grouping.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentType } from "../component.js";
1
+ import { type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentType, type Relationship } from "../component.js";
2
2
  import { type ExtractSpecsRequired, type QueryDSL, type QuerySpec } from "../dsl.js";
3
3
  import { Entity, type EID } from "../entity/index.js";
4
4
  import { Iter, type FanInjectTuple, type InjectTuple, type MaybeResolvedInjectTuple, type RequiredResolvedInjectTuple } from "../inject.js";
@@ -69,9 +69,9 @@ export declare class Query<R extends ComponentType[] = []> implements TermConsum
69
69
  relationship: ComponentRef;
70
70
  }): GroupedQuery<Entity, R>;
71
71
  ignoreSource(source: QueryDSL | Query): this;
72
- add<C extends ComponentClass>(Class: C): this;
73
- add(ceid: EID): this;
74
- add(entity: Entity): this;
72
+ add<C extends ComponentClass>(Class: C, ...target: InstanceType<C> extends Relationship ? [target: ComponentRef] : []): this;
73
+ add(ceid: EID, target?: ComponentRef): this;
74
+ add(entity: Entity, target?: ComponentRef): this;
75
75
  remove<C extends ComponentType>(Class: C): this;
76
76
  remove(ceid: EID): this;
77
77
  remove(entity: Entity): this;