@typeonce/ritmo 0.7.0 → 0.8.0

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 (87) hide show
  1. package/dist/Command.d.ts +102 -17
  2. package/dist/Command.d.ts.map +1 -1
  3. package/dist/Command.js +10 -8
  4. package/dist/Command.js.map +1 -1
  5. package/dist/Condition.d.ts +12 -1
  6. package/dist/Condition.d.ts.map +1 -1
  7. package/dist/Condition.js.map +1 -1
  8. package/dist/Debug.d.ts +63 -7
  9. package/dist/Debug.d.ts.map +1 -1
  10. package/dist/Descriptor.d.ts +36 -3
  11. package/dist/Descriptor.d.ts.map +1 -1
  12. package/dist/Descriptor.js +11 -3
  13. package/dist/Descriptor.js.map +1 -1
  14. package/dist/Entity.d.ts +12 -4
  15. package/dist/Entity.d.ts.map +1 -1
  16. package/dist/Entity.js.map +1 -1
  17. package/dist/EntityScope.d.ts +20 -1
  18. package/dist/EntityScope.d.ts.map +1 -1
  19. package/dist/EntityScope.js +8 -2
  20. package/dist/EntityScope.js.map +1 -1
  21. package/dist/Machine.d.ts +55 -33
  22. package/dist/Machine.d.ts.map +1 -1
  23. package/dist/Machine.js +6 -2
  24. package/dist/Machine.js.map +1 -1
  25. package/dist/Query.d.ts +48 -4
  26. package/dist/Query.d.ts.map +1 -1
  27. package/dist/Query.js +32 -4
  28. package/dist/Query.js.map +1 -1
  29. package/dist/Runtime.d.ts +3 -0
  30. package/dist/Runtime.d.ts.map +1 -1
  31. package/dist/Runtime.js +330 -24
  32. package/dist/Runtime.js.map +1 -1
  33. package/dist/Schema.d.ts +141 -25
  34. package/dist/Schema.d.ts.map +1 -1
  35. package/dist/Schema.js +29 -3
  36. package/dist/Schema.js.map +1 -1
  37. package/dist/Snapshot.d.ts +14 -0
  38. package/dist/Snapshot.d.ts.map +1 -1
  39. package/dist/Snapshot.js.map +1 -1
  40. package/dist/System.d.ts +64 -7
  41. package/dist/System.d.ts.map +1 -1
  42. package/dist/System.js +32 -0
  43. package/dist/System.js.map +1 -1
  44. package/dist/internal/debug.d.ts +7 -0
  45. package/dist/internal/debug.d.ts.map +1 -1
  46. package/dist/internal/debug.js +97 -6
  47. package/dist/internal/debug.js.map +1 -1
  48. package/dist/internal/equal.d.ts +8 -0
  49. package/dist/internal/equal.d.ts.map +1 -0
  50. package/dist/internal/equal.js +38 -0
  51. package/dist/internal/equal.js.map +1 -0
  52. package/dist/internal/fragments.d.ts.map +1 -1
  53. package/dist/internal/fragments.js +11 -1
  54. package/dist/internal/fragments.js.map +1 -1
  55. package/dist/internal/game.d.ts.map +1 -1
  56. package/dist/internal/game.js +33 -5
  57. package/dist/internal/game.js.map +1 -1
  58. package/dist/internal/order.d.ts.map +1 -1
  59. package/dist/internal/order.js +4 -2
  60. package/dist/internal/order.js.map +1 -1
  61. package/dist/internal/queries.d.ts.map +1 -1
  62. package/dist/internal/queries.js +30 -8
  63. package/dist/internal/queries.js.map +1 -1
  64. package/dist/internal/requirements.d.ts +26 -0
  65. package/dist/internal/requirements.d.ts.map +1 -0
  66. package/dist/internal/requirements.js +46 -0
  67. package/dist/internal/requirements.js.map +1 -0
  68. package/package.json +1 -1
  69. package/src/Command.ts +149 -29
  70. package/src/Condition.ts +17 -1
  71. package/src/Debug.ts +64 -7
  72. package/src/Descriptor.ts +55 -10
  73. package/src/Entity.ts +13 -4
  74. package/src/EntityScope.ts +21 -2
  75. package/src/Machine.ts +68 -34
  76. package/src/Query.ts +71 -7
  77. package/src/Runtime.ts +336 -22
  78. package/src/Schema.ts +185 -28
  79. package/src/Snapshot.ts +4 -0
  80. package/src/System.ts +75 -6
  81. package/src/internal/debug.ts +104 -8
  82. package/src/internal/equal.ts +31 -0
  83. package/src/internal/fragments.ts +12 -2
  84. package/src/internal/game.ts +51 -5
  85. package/src/internal/order.ts +8 -4
  86. package/src/internal/queries.ts +34 -10
  87. package/src/internal/requirements.ts +71 -0
@@ -125,11 +125,11 @@ export const makeQueryEngine = (world) => {
125
125
  withoutRelations: query.withoutRelations,
126
126
  withRelated: unique(withRelated),
127
127
  withoutRelated: query.withoutRelated,
128
- filters: query.filters.map((filter) => {
129
- const ordinal = world.ordinalOf(filter.descriptor);
128
+ filters: query.filters.map((filter) => (filter.kind === "anyOf" ? filter.filters : [filter]).map((member) => {
129
+ const ordinal = world.ordinalOf(member.descriptor);
130
130
  world.trackChanges(ordinal);
131
- return { kind: filter.kind, ordinal };
132
- }),
131
+ return { kind: member.kind, ordinal };
132
+ })),
133
133
  slots,
134
134
  proofSlots,
135
135
  writeSlots,
@@ -182,14 +182,36 @@ export const makeQueryEngine = (world) => {
182
182
  };
183
183
  const matchesFilters = (state, record, since) => {
184
184
  for (const filter of state.filters) {
185
- const matched = filter.kind === "added"
186
- ? world.addedSince(record, filter.ordinal, since)
187
- : world.changedSince(record, filter.ordinal, since);
185
+ let matched = false;
186
+ for (const member of filter) {
187
+ matched = member.kind === "added"
188
+ ? world.addedSince(record, member.ordinal, since)
189
+ : world.changedSince(record, member.ordinal, since);
190
+ if (matched)
191
+ break;
192
+ }
188
193
  if (!matched)
189
194
  return false;
190
195
  }
191
196
  return true;
192
197
  };
198
+ /**
199
+ * Ids that may pass one filter (may repeat), or `undefined` when a change
200
+ * log no longer covers `since`. An `anyOf` is the union of its members' logs.
201
+ */
202
+ const filterCandidates = (filter, since) => {
203
+ if (filter.length === 1)
204
+ return world.changedCandidates(filter[0].ordinal, since);
205
+ const union = [];
206
+ for (const member of filter) {
207
+ const logged = world.changedCandidates(member.ordinal, since);
208
+ if (logged === undefined)
209
+ return undefined;
210
+ for (const id of logged)
211
+ union.push(id);
212
+ }
213
+ return union;
214
+ };
193
215
  const relatedIds = (relation, id) => world.relatedSourceIds(relation, id).map(world.entityIdOf);
194
216
  const makeCell = (plan, record) => {
195
217
  switch (plan.mode) {
@@ -363,7 +385,7 @@ export const makeQueryEngine = (world) => {
363
385
  // bounds the candidates for either filter.
364
386
  let candidates;
365
387
  for (const filter of state.filters) {
366
- const logged = world.changedCandidates(filter.ordinal, since);
388
+ const logged = filterCandidates(filter, since);
367
389
  if (logged === undefined)
368
390
  continue;
369
391
  if (logged.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Runtime side of `Schema.requires`: the requirement index built once per
3
+ * bound schema, used to expand `Game.System.spawns(...)`, to check commands
4
+ * when they are applied, and to check restored entities.
5
+ *
6
+ * The compile-time counterpart lives in `Command.ts` (spawn, insert, remove)
7
+ * and `Schema.ts` (`ValidateRequires`).
8
+ */
9
+ import type { Descriptor } from "../Descriptor.ts";
10
+ import type { Schema } from "../Schema.ts";
11
+ type ComponentDescriptor = Descriptor<"component", string, any>;
12
+ export interface RequirementIndex {
13
+ /** Whether the schema declares any requirement. */
14
+ readonly empty: boolean;
15
+ /** Component name to the components it directly requires. */
16
+ readonly requires: ReadonlyMap<string, ReadonlyArray<ComponentDescriptor>>;
17
+ /** Component name to the components that directly require it. */
18
+ readonly requiredBy: ReadonlyMap<string, ReadonlyArray<ComponentDescriptor>>;
19
+ }
20
+ export declare const requirementIndex: (schema: Schema.Any) => RequirementIndex;
21
+ /** `components` and everything they require, transitively, without duplicates. */
22
+ export declare const withRequired: (index: RequirementIndex, components: ReadonlyArray<ComponentDescriptor>) => ReadonlyArray<ComponentDescriptor>;
23
+ /** The first requirement `held` breaks, as `[requirer, missing]`, or `undefined`. */
24
+ export declare const firstMissing: (index: RequirementIndex, held: (name: string) => boolean, names: Iterable<string>) => readonly [string, string] | undefined;
25
+ export {};
26
+ //# sourceMappingURL=requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,KAAK,mBAAmB,GAAG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAC1E,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAA;CAC7E;AAQD,eAAO,MAAM,gBAAgB,WAAY,MAAM,CAAC,GAAG,KAAG,gBAUrD,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,YAAY,UAChB,gBAAgB,cACX,aAAa,CAAC,mBAAmB,CAAC,KAC7C,aAAa,CAAC,mBAAmB,CAYnC,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,YAAY,UAChB,gBAAgB,QACjB,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,SACxB,QAAQ,CAAC,MAAM,CAAC,KACtB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAO9B,CAAA"}
@@ -0,0 +1,46 @@
1
+ const push = (map, key, value) => {
2
+ const list = map.get(key);
3
+ if (list === undefined)
4
+ map.set(key, [value]);
5
+ else if (!list.some((entry) => entry.name === value.name))
6
+ list.push(value);
7
+ };
8
+ export const requirementIndex = (schema) => {
9
+ const requires = new Map();
10
+ const requiredBy = new Map();
11
+ for (const requirement of schema.requires) {
12
+ for (const required of requirement.required) {
13
+ push(requires, requirement.component.name, required);
14
+ push(requiredBy, required.name, requirement.component);
15
+ }
16
+ }
17
+ return { empty: requires.size === 0, requires, requiredBy };
18
+ };
19
+ /** `components` and everything they require, transitively, without duplicates. */
20
+ export const withRequired = (index, components) => {
21
+ if (index.empty)
22
+ return components;
23
+ const result = [];
24
+ const seen = new Set();
25
+ const visit = (descriptor) => {
26
+ if (seen.has(descriptor.name))
27
+ return;
28
+ seen.add(descriptor.name);
29
+ result.push(descriptor);
30
+ for (const required of index.requires.get(descriptor.name) ?? [])
31
+ visit(required);
32
+ };
33
+ components.forEach(visit);
34
+ return result;
35
+ };
36
+ /** The first requirement `held` breaks, as `[requirer, missing]`, or `undefined`. */
37
+ export const firstMissing = (index, held, names) => {
38
+ for (const name of names) {
39
+ for (const required of index.requires.get(name) ?? []) {
40
+ if (!held(required.name))
41
+ return [name, required.name];
42
+ }
43
+ }
44
+ return undefined;
45
+ };
46
+ //# sourceMappingURL=requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"AAsBA,MAAM,IAAI,GAAG,CAAC,GAA4C,EAAE,GAAW,EAAE,KAA0B,EAAQ,EAAE;IAC3G,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACzB,IAAI,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;SACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAoB,EAAE;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsC,CAAA;IAC9D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsC,CAAA;IAChE,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACpD,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;AAC7D,CAAC,CAAA;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAAuB,EACvB,UAA8C,EACV,EAAE;IACtC,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,UAAU,CAAA;IAClC,MAAM,MAAM,GAA+B,EAAE,CAAA;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,KAAK,GAAG,CAAC,UAA+B,EAAQ,EAAE;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAM;QACrC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACnF,CAAC,CAAA;IACD,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAAuB,EACvB,IAA+B,EAC/B,KAAuB,EACgB,EAAE;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeonce/ritmo",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "The agent-first type safe ECS runtime",
5
5
  "author": "Sandro Maglione",
6
6
  "license": "MIT",
package/src/Command.ts CHANGED
@@ -65,7 +65,7 @@ import * as Entity from "./Entity.ts"
65
65
  import type * as EntityScope from "./EntityScope.ts"
66
66
  import type * as Relation from "./Relation.ts"
67
67
  import * as Result from "./Result.ts"
68
- import type { Schema } from "./Schema.ts"
68
+ import type { RequirementPair, Schema } from "./Schema.ts"
69
69
 
70
70
  /**
71
71
  * Type-level helpers for staged entity construction.
@@ -206,9 +206,10 @@ export type DeferredCommand<S extends Schema.Any> = {
206
206
  export interface InternalWorld<S extends Schema.Any> {
207
207
  /**
208
208
  * Creates the entity for an id reserved by `commands.spawn(...)` with its
209
- * staged components.
209
+ * staged components. Returns `false`, creating nothing, when the
210
+ * components break a `Schema.requires` requirement.
210
211
  */
211
- readonly spawnEntity: (id: Entity.EntityId<S, any>, components: ReadonlyArray<Entity.StagedComponent>) => void
212
+ readonly spawnEntity: (id: Entity.EntityId<S, any>, components: ReadonlyArray<Entity.StagedComponent>) => boolean
212
213
  /**
213
214
  * Removes an entity and its outgoing and incoming relations.
214
215
  */
@@ -225,13 +226,15 @@ export interface InternalWorld<S extends Schema.Any> {
225
226
  */
226
227
  readonly destroyEntityScope: (scope: EntityScope.EntityScope.Any) => void
227
228
  /**
228
- * Removes a component from a live entity.
229
+ * Removes components from a live entity, all or none: nothing is removed
230
+ * when that would leave a component without one it requires.
229
231
  */
230
- readonly removeComponent: (id: Entity.EntityId<S, any>, descriptor: Descriptor<"component", string, any>) => void
232
+ readonly removeComponents: (id: Entity.EntityId<S, any>, descriptors: ReadonlyArray<Descriptor<"component", string, any>>) => void
231
233
  /**
232
- * Inserts or replaces a component on a live entity.
234
+ * Inserts or replaces components on a live entity, all or none: nothing is
235
+ * written when an inserted component would miss one it requires.
233
236
  */
234
- readonly writeComponent: (id: Entity.EntityId<S, any>, descriptor: Descriptor<"component", string, any>, value: unknown) => void
237
+ readonly insertComponents: (id: Entity.EntityId<S, any>, entries: ReadonlyArray<Entity.StagedComponent>) => void
235
238
  /**
236
239
  * Attempts to attach one relation edge between two live entities.
237
240
  */
@@ -542,6 +545,103 @@ declare const spawnedTypeId: unique symbol
542
545
  export type SpawnedId<S extends Schema.Any, Root, Components extends string> =
543
546
  Entity.EntityId<S, Root> & { readonly [spawnedTypeId]: (_: never) => Components }
544
547
 
548
+ /** The requirements (`[requirer, required]`) of the components in `Held` that `Held` lacks. */
549
+ type MissingPairs<S extends Schema.Any, Held extends string> =
550
+ Extract<Schema.Requires<S>, readonly [Held, string]> extends infer Pair
551
+ ? Pair extends readonly [string, infer To extends string]
552
+ ? To extends Held ? never : Pair
553
+ : never
554
+ : never
555
+
556
+ /** One message per missing requirement: `"Player requires Velocity"`. */
557
+ type MissingMessages<Pairs> = Pairs extends readonly [infer From extends string, infer To extends string] ? `${From} requires ${To}` : never
558
+
559
+ /**
560
+ * Accepts a draft holding every requirement of every component it holds.
561
+ * Direct requirements are enough: each required component must be held
562
+ * too, with its own requirements.
563
+ */
564
+ type DraftRequirementsMet<S extends Schema.Any, Held extends string> =
565
+ [MissingPairs<S, Held>] extends [never]
566
+ ? unknown
567
+ : Fix<`${MissingMessages<MissingPairs<S, Held>>}: add the missing entries to the draft`>
568
+
569
+ /** What an insert or remove target is known to hold: a query match's proof, or a `SpawnedId`'s draft. A raw id proves nothing. */
570
+ type TargetHolds<E> =
571
+ E extends { readonly kind: "EntityRef" | "EntityMut"; readonly __proves?: (_: never) => infer Proves }
572
+ ? Names<Proves>
573
+ : E extends { readonly [spawnedTypeId]: (_: never) => infer Spawned extends string }
574
+ ? Spawned
575
+ : never
576
+
577
+ /** What a remove target is known to lack: its query's `without`. */
578
+ type TargetLacks<E> =
579
+ E extends { readonly kind: "EntityRef" | "EntityMut"; readonly __lacks?: (_: never) => infer Lacks }
580
+ ? Names<Lacks>
581
+ : never
582
+
583
+ type EntryNames<Entries extends ReadonlyArray<readonly [ComponentDescriptor, unknown]>> = Names<Entries[number][0]>
584
+
585
+ /** Inserted components with requirements neither inserted alongside nor proven held by the target. */
586
+ type InsertRequirementsMet<S extends Schema.Any, E, Entries extends ReadonlyArray<readonly [ComponentDescriptor, unknown]>> =
587
+ [MissingPairs<S, EntryNames<Entries> | TargetHolds<E>> & readonly [EntryNames<Entries>, string]] extends [never]
588
+ ? unknown
589
+ : Fix<`${MissingMessages<MissingPairs<S, EntryNames<Entries> | TargetHolds<E>> & readonly [EntryNames<Entries>, string]>}: insert it in the same call, or pass match.entity from a query that proves it`>
590
+
591
+ /**
592
+ * Removing `Removed` is sound when every component that requires one of
593
+ * them is removed in the same call or proven absent by the target's query
594
+ * (`without`): otherwise the entity may keep a requirer without its
595
+ * requirement.
596
+ */
597
+ type RemoveViolations<S extends Schema.Any, E, Removed extends string> =
598
+ Extract<Schema.Requires<S>, readonly [string, Removed]> extends infer Pair
599
+ ? Pair extends readonly [infer From extends string, infer To extends string]
600
+ ? From extends Removed | TargetLacks<E>
601
+ ? never
602
+ : `${To} is required by ${From}: remove ${From} in the same call, or match the entity with a query that has without: [${From}]`
603
+ : never
604
+ : never
605
+
606
+ type RemoveRequirementsMet<S extends Schema.Any, E, Removed extends string> =
607
+ [RemoveViolations<S, E, Removed>] extends [never] ? unknown : Fix<RemoveViolations<S, E, Removed>>
608
+
609
+ /** A remove target: `match.entity`, or the id `spawn` returned in this run; never a raw id. */
610
+ type RemoveTargetAllowed<S extends Schema.Any, Root, E> =
611
+ E extends { readonly kind: "EntityRef" | "EntityMut"; readonly id: Entity.EntityId<S, Root> }
612
+ ? unknown
613
+ : E extends SpawnedId<S, Root, string>
614
+ ? unknown
615
+ : Fix<"remove needs an entity from a query (pass match.entity) or the id spawn returned in this run, not a raw id">
616
+
617
+ /** The transitive closure of the names `N` require (cycles stop). */
618
+ type RequiredClosure<Pairs extends RequirementPair, N extends string, Seen extends string = never> =
619
+ [Exclude<N, Seen>] extends [never]
620
+ ? Seen
621
+ : RequiredClosure<Pairs, Extract<Pairs, readonly [Exclude<N, Seen>, string]>[1], Seen | N>
622
+
623
+ /**
624
+ * The component descriptors that `Names` require, transitively
625
+ * (`Schema.requires`): what `Game.System.spawns(...)` also allows.
626
+ */
627
+ export type RequiredDescriptors<S extends Schema.Any, Names extends string> =
628
+ // Non-literal names (an unresolved descriptor, alone or next to known ones) would never
629
+ // close: leave the error to the descriptor.
630
+ 0 extends 1 & Names
631
+ ? never
632
+ : string extends Names
633
+ ? never
634
+ : [Extract<Schema.Requires<S>, readonly [Names, string]>] extends [never]
635
+ ? never
636
+ : Extract<Schema.ComponentDescriptor<S>, { readonly name: Exclude<RequiredClosure<Schema.Requires<S>, Names>, Names> }>
637
+
638
+ type SchemaComponent<S extends Schema.Any> = Extract<Schema.Components<S>[keyof Schema.Components<S>], ComponentDescriptor>
639
+
640
+ /** An entity a system has proven something about: `match.entity`, or the id `spawn` returned. */
641
+ type EntityTarget<S extends Schema.Any, Root> =
642
+ | { readonly kind: "EntityRef" | "EntityMut"; readonly id: Entity.EntityId<S, Root> }
643
+ | SpawnedId<S, Root, string>
644
+
545
645
  /** The keys every member of a union of proofs requires (what a draft holds in every case). */
546
646
  type RequiredKeys<P> = P extends unknown ? { [K in keyof P]-?: {} extends Pick<P, K> ? never : K }[keyof P] & string : never
547
647
  type MissingSomewhere<P, All> = P extends unknown ? Exclude<All, RequiredKeys<P>> : never
@@ -574,33 +674,44 @@ export interface CommandsApi<
574
674
  > {
575
675
  /**
576
676
  * Queues a staged entity for spawning and returns its stable runtime id.
677
+ *
678
+ * The draft must hold every component its components require
679
+ * (`Schema.requires`); drafts are checked here, so a partial draft built
680
+ * with `Game.Command.spawn(...)` and completed with `extend(...)` is fine.
577
681
  */
578
682
  readonly spawn: [Spawns] extends [never]
579
683
  ? MethodNotDeclared<"spawn", "spawns">
580
- : <P extends Entity.ComponentProof>(draft: Entity.EntityDraft<S, P, Root> & DraftAllowed<P, Spawns>) => SpawnedId<S, Root, HeldNames<P>>
684
+ : <P extends Entity.ComponentProof>(draft: Entity.EntityDraft<S, P, Root> & DraftAllowed<P, Spawns> & DraftRequirementsMet<S, HeldNames<P>>) => SpawnedId<S, Root, HeldNames<P>>
581
685
  /**
582
686
  * Queues an entity spawn owned by one lifetime scope (removed together
583
- * with `despawnScope(...)`).
687
+ * with `despawnScope(...)`). The draft is checked like `spawn(...)`.
584
688
  */
585
689
  readonly spawnIn: [Spawns] extends [never]
586
690
  ? MethodNotDeclared<"spawnIn", "spawns">
587
691
  : <P extends Entity.ComponentProof>(
588
692
  scope: EntityScope.EntityScope<string, Root>,
589
- draft: Entity.EntityDraft<S, P, Root> & DraftAllowed<P, Spawns>
693
+ draft: Entity.EntityDraft<S, P, Root> & DraftAllowed<P, Spawns> & DraftRequirementsMet<S, HeldNames<P>>
590
694
  ) => SpawnedId<S, Root, HeldNames<P>>
591
695
  /**
592
696
  * Queues component inserts (or replacements) on an existing entity, applied
593
697
  * at the next `applyDeferred()`. To change a value now, on an entity you
594
- * matched, write through a query (`Game.Query.write`) instead.
698
+ * matched, write through a query (`Game.Query.write`) instead; components
699
+ * declared `immutable: true` change only through `insert`.
700
+ *
701
+ * Pass `match.entity`: its query proves what the entity holds, which must
702
+ * cover what the inserted components require (`Schema.requires`) together
703
+ * with the entries inserted in the same call. The id `spawn` returned in
704
+ * this run proves its draft. A raw `EntityId` proves nothing, so it only
705
+ * inserts components without requirements.
595
706
  *
596
707
  * Entries must already be valid; validate raw input with
597
708
  * `Game.Command.entryRaw(...)` first.
598
709
  */
599
710
  readonly insert: [Inserts] extends [never]
600
711
  ? MethodNotDeclared<"insert", "inserts">
601
- : <const Entries extends ReadonlyArray<SchemaEntry<S>>>(
602
- entity: Entity.EntityId<S, Root>,
603
- ...entries: Entries & EntriesAllowed<Entries, Inserts>
712
+ : <const E extends Entity.EntityId<S, Root> | EntityTarget<S, Root>, const Entries extends ReadonlyArray<SchemaEntry<S>>>(
713
+ entity: E,
714
+ ...entries: Entries & EntriesAllowed<Entries, Inserts> & InsertRequirementsMet<S, E, Entries>
604
715
  ) => Entity.EntityId<S, Root>
605
716
  /**
606
717
  * Queues an entity removal. A despawned entity stays visible to queries
@@ -613,7 +724,7 @@ export interface CommandsApi<
613
724
  */
614
725
  readonly despawn: [Despawns] extends [never]
615
726
  ? MethodNotDeclared<"despawn", "despawns">
616
- : <const E>(entity: E & DespawnAllowed<E, Despawns>) => void
727
+ : <const E>(entity: unknown extends DespawnAllowed<E, Despawns> ? E : DespawnAllowed<E, Despawns>) => void
617
728
  /**
618
729
  * Queues removal of every entity owned by one lifetime scope.
619
730
  */
@@ -621,13 +732,22 @@ export interface CommandsApi<
621
732
  ? MethodNotDeclared<"despawnScope", "despawnsScope">
622
733
  : (scope: Scopes) => void
623
734
  /**
624
- * Queues a component removal on an existing entity.
735
+ * Queues the removal of one or more components from an existing entity,
736
+ * applied together at the next `applyDeferred()`.
737
+ *
738
+ * Pass `match.entity` from a query, or the id `spawn` returned in this run;
739
+ * never a raw id. A component another one requires (`Schema.requires`) can
740
+ * only go together with that requirer, in the same call, or from an
741
+ * entity whose query has `without: [Requirer]`.
625
742
  */
626
743
  readonly remove: [Removes] extends [never]
627
744
  ? MethodNotDeclared<"remove", "removes">
628
- : <D extends Extract<Schema.Components<S>[keyof Schema.Components<S>], ComponentDescriptor>>(
629
- entity: Entity.EntityId<S, Root>,
630
- descriptor: D & RemoveAllowed<D, Removes>
745
+ : <
746
+ const E,
747
+ const Ds extends readonly [SchemaComponent<S>, ...Array<SchemaComponent<S>>]
748
+ >(
749
+ entity: unknown extends RemoveTargetAllowed<S, Root, E> ? E : RemoveTargetAllowed<S, Root, E>,
750
+ ...descriptors: Ds & RemoveAllowed<Ds[number], Removes> & RemoveRequirementsMet<S, E, Names<Ds[number]>>
631
751
  ) => Entity.EntityId<S, Root>
632
752
  /**
633
753
  * Queues one live relation mutation for deferred application.
@@ -664,10 +784,10 @@ export interface CommandsApi<
664
784
  export interface CommandQueue<S extends Schema.Any, Root = unknown> {
665
785
  readonly spawn: (draft: Entity.EntityDraft<S, any, Root>) => Entity.EntityId<S, Root>
666
786
  readonly spawnIn: (scope: EntityScope.EntityScope<string, Root>, draft: Entity.EntityDraft<S, any, Root>) => Entity.EntityId<S, Root>
667
- readonly insert: (entity: Entity.EntityId<S, Root>, ...entries: ReadonlyArray<SchemaEntry<S>>) => Entity.EntityId<S, Root>
787
+ readonly insert: (entity: Entity.EntityId<S, Root> | { readonly id: Entity.EntityId<S, Root> }, ...entries: ReadonlyArray<SchemaEntry<S>>) => Entity.EntityId<S, Root>
668
788
  readonly despawn: (entity: Entity.EntityId<S, Root> | { readonly id: Entity.EntityId<S, Root> }) => void
669
789
  readonly despawnScope: (scope: EntityScope.EntityScope<string, Root>) => void
670
- readonly remove: (entity: Entity.EntityId<S, Root>, descriptor: ComponentDescriptor) => Entity.EntityId<S, Root>
790
+ readonly remove: (entity: Entity.EntityId<S, Root> | { readonly id: Entity.EntityId<S, Root> }, ...descriptors: ReadonlyArray<ComponentDescriptor>) => Entity.EntityId<S, Root>
671
791
  readonly relate: (entity: Entity.EntityId<S, Root>, relation: Relation.Relation.Any, target: Entity.EntityId<S, Root>) => void
672
792
  readonly unrelate: (entity: Entity.EntityId<S, Root>, relation: Relation.Relation.Any) => void
673
793
  readonly reorderChildren: (entity: Entity.EntityId<S, Root>, relation: Relation.Relation.Hierarchy, children: ReadonlyArray<Entity.EntityId<S, Root>>) => void
@@ -700,7 +820,7 @@ export const makeCommands = <S extends Schema.Any, Root = unknown>(
700
820
  queue.push({
701
821
  tag: "spawn",
702
822
  apply(world) {
703
- world.spawnEntity(id, draft.components)
823
+ if (!world.spawnEntity(id, draft.components)) return
704
824
  for (const stagedRelation of draft.relations) {
705
825
  world.tryRelate(id, stagedRelation.relation, stagedRelation.target)
706
826
  }
@@ -713,7 +833,7 @@ export const makeCommands = <S extends Schema.Any, Root = unknown>(
713
833
  queue.push({
714
834
  tag: "spawnIn",
715
835
  apply(world) {
716
- world.spawnEntity(id, draft.components)
836
+ if (!world.spawnEntity(id, draft.components)) return
717
837
  world.assignEntityScope(id, scope)
718
838
  for (const stagedRelation of draft.relations) {
719
839
  world.tryRelate(id, stagedRelation.relation, stagedRelation.target)
@@ -722,13 +842,12 @@ export const makeCommands = <S extends Schema.Any, Root = unknown>(
722
842
  })
723
843
  return id
724
844
  },
725
- insert(entity, ...entries) {
845
+ insert(target, ...entries) {
846
+ const entity = typeof target === "object" ? target.id : target
726
847
  queue.push({
727
848
  tag: "insert",
728
849
  apply(world) {
729
- for (const [descriptor, value] of entries) {
730
- world.writeComponent(entity, descriptor, value)
731
- }
850
+ world.insertComponents(entity, entries)
732
851
  }
733
852
  })
734
853
  return entity
@@ -750,11 +869,12 @@ export const makeCommands = <S extends Schema.Any, Root = unknown>(
750
869
  }
751
870
  })
752
871
  },
753
- remove(entity, descriptor) {
872
+ remove(target, ...descriptors) {
873
+ const entity = typeof target === "object" ? target.id : target
754
874
  queue.push({
755
875
  tag: "remove",
756
876
  apply(world) {
757
- world.removeComponent(entity, descriptor)
877
+ world.removeComponents(entity, descriptors)
758
878
  }
759
879
  })
760
880
  return entity
package/src/Condition.ts CHANGED
@@ -45,10 +45,25 @@ type AnyQuery = Query.Query.Any<any>
45
45
  /** Access categories a check may declare. */
46
46
  export interface CheckAccessInput {
47
47
  readonly queries?: Record<string, AnyQuery>
48
- readonly resources?: Record<string, System.ResourceRead<Descriptor<"resource", string, any>>>
48
+ readonly resources?: Record<string, CheckResourceAccess>
49
49
  readonly machines?: Record<string, Machine.MachineRead<Machine.StateMachine.Any>>
50
50
  }
51
51
 
52
+ /** Accepted at the constraint so `ExactCheckAccess` can reject the last two with a message naming the fix. */
53
+ type CheckResourceAccess =
54
+ | System.ResourceRead<Descriptor<"resource", string, any>>
55
+ | System.ResourceChanged<Descriptor<"resource", string, any>>
56
+ | System.ResourceWrite<Descriptor<"resource", string, any>>
57
+
58
+ /** A check reads committed values and owns no cursor: `changedResource` and `writeResource` slots become a message naming the fix. */
59
+ type CheckResources<Resources> = {
60
+ readonly [K in keyof Resources]: Resources[K] extends { readonly mode: "changed" }
61
+ ? "changedResource consumes a per-reader cursor, which a check does not have: use Game.System.readResource here, and changedResource in the gated system"
62
+ : Resources[K] extends { readonly mode: "write" }
63
+ ? "a check cannot write resources: use Game.System.readResource"
64
+ : Resources[K]
65
+ }
66
+
52
67
  type QueryWriteAccess<Q extends AnyQuery> =
53
68
  Extract<Q["selection"][keyof Q["selection"]], { readonly mode: "write" }>
54
69
 
@@ -72,6 +87,7 @@ export type ExactCheckAccess<Access extends CheckAccessInput> = Access & {
72
87
  readonly queries?: Access["queries"] extends Record<string, AnyQuery>
73
88
  ? StatelessQueries<Access["queries"]>
74
89
  : never
90
+ readonly resources?: CheckResources<Access["resources"]>
75
91
  }
76
92
 
77
93
  /** What a check's predicate sees: its declared resources, machines, and queries, read-only. */