@oasys/oecs 0.4.0 → 0.5.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 (272) hide show
  1. package/CHANGELOG.md +553 -0
  2. package/README.md +42 -31
  3. package/dist/core/ecs/access_check.d.cts +77 -0
  4. package/dist/core/ecs/access_check.d.ts +8 -8
  5. package/dist/core/ecs/access_check.d.ts.map +1 -1
  6. package/dist/core/ecs/archetype.d.cts +486 -0
  7. package/dist/core/ecs/archetype.d.ts +23 -11
  8. package/dist/core/ecs/archetype.d.ts.map +1 -1
  9. package/dist/core/ecs/archetype_graph.d.cts +96 -0
  10. package/dist/core/ecs/archetype_graph.d.ts +96 -0
  11. package/dist/core/ecs/archetype_graph.d.ts.map +1 -0
  12. package/dist/core/ecs/builtin_relations.d.cts +43 -0
  13. package/dist/core/ecs/builtin_relations.d.ts +8 -8
  14. package/dist/core/ecs/builtin_relations.d.ts.map +1 -1
  15. package/dist/core/ecs/command_log.d.cts +116 -0
  16. package/dist/core/ecs/command_log.d.ts +13 -10
  17. package/dist/core/ecs/command_log.d.ts.map +1 -1
  18. package/dist/core/ecs/component.d.cts +176 -0
  19. package/dist/core/ecs/component.d.ts +75 -5
  20. package/dist/core/ecs/component.d.ts.map +1 -1
  21. package/dist/core/ecs/compute_backend.d.cts +37 -0
  22. package/dist/core/ecs/compute_backend.d.ts +2 -2
  23. package/dist/core/ecs/debug_names.d.cts +7 -0
  24. package/dist/core/ecs/debug_names.d.ts +7 -0
  25. package/dist/core/ecs/debug_names.d.ts.map +1 -0
  26. package/dist/core/ecs/deferred_commands.d.cts +55 -0
  27. package/dist/core/ecs/deferred_commands.d.ts +55 -0
  28. package/dist/core/ecs/deferred_commands.d.ts.map +1 -0
  29. package/dist/core/ecs/dispatch_trace.d.cts +93 -0
  30. package/dist/core/ecs/dispatch_trace.d.ts +3 -3
  31. package/dist/core/ecs/ecs.d.cts +562 -0
  32. package/dist/core/ecs/ecs.d.ts +314 -285
  33. package/dist/core/ecs/ecs.d.ts.map +1 -1
  34. package/dist/core/ecs/ecs_memory.d.cts +179 -0
  35. package/dist/core/ecs/ecs_memory.d.ts +1 -1
  36. package/dist/core/ecs/entity.d.cts +34 -0
  37. package/dist/core/ecs/entity.d.ts +7 -1
  38. package/dist/core/ecs/entity.d.ts.map +1 -1
  39. package/dist/core/ecs/entity_allocator.d.cts +59 -0
  40. package/dist/core/ecs/entity_allocator.d.ts +59 -0
  41. package/dist/core/ecs/entity_allocator.d.ts.map +1 -0
  42. package/dist/core/ecs/event.d.cts +79 -0
  43. package/dist/core/ecs/event.d.ts +36 -11
  44. package/dist/core/ecs/event.d.ts.map +1 -1
  45. package/dist/core/ecs/event_registry.d.cts +22 -0
  46. package/dist/core/ecs/event_registry.d.ts +22 -0
  47. package/dist/core/ecs/event_registry.d.ts.map +1 -0
  48. package/dist/core/ecs/facades.d.cts +158 -0
  49. package/dist/core/ecs/facades.d.ts +158 -0
  50. package/dist/core/ecs/facades.d.ts.map +1 -0
  51. package/dist/core/ecs/frame_stepper.d.cts +58 -0
  52. package/dist/core/ecs/frame_stepper.d.ts +58 -0
  53. package/dist/core/ecs/frame_stepper.d.ts.map +1 -0
  54. package/dist/core/ecs/frame_trace.d.cts +133 -0
  55. package/dist/core/ecs/frame_trace.d.ts +5 -5
  56. package/dist/core/ecs/frame_trace.d.ts.map +1 -1
  57. package/dist/core/ecs/host_commands.d.cts +274 -0
  58. package/dist/core/ecs/host_commands.d.ts +53 -31
  59. package/dist/core/ecs/host_commands.d.ts.map +1 -1
  60. package/dist/core/ecs/index.d.cts +46 -0
  61. package/dist/core/ecs/index.d.ts +45 -40
  62. package/dist/core/ecs/index.d.ts.map +1 -1
  63. package/dist/core/ecs/observer.d.cts +173 -0
  64. package/dist/core/ecs/observer.d.ts +43 -12
  65. package/dist/core/ecs/observer.d.ts.map +1 -1
  66. package/dist/core/ecs/query.d.cts +718 -0
  67. package/dist/core/ecs/query.d.ts +251 -90
  68. package/dist/core/ecs/query.d.ts.map +1 -1
  69. package/dist/core/ecs/ref.d.cts +31 -0
  70. package/dist/core/ecs/ref.d.ts +3 -3
  71. package/dist/core/ecs/relation.d.cts +243 -0
  72. package/dist/core/ecs/relation.d.ts +26 -14
  73. package/dist/core/ecs/relation.d.ts.map +1 -1
  74. package/dist/core/ecs/relation_service.d.cts +235 -0
  75. package/dist/core/ecs/relation_service.d.ts +235 -0
  76. package/dist/core/ecs/relation_service.d.ts.map +1 -0
  77. package/dist/core/ecs/resource.d.cts +53 -0
  78. package/dist/core/ecs/resource.d.ts +25 -5
  79. package/dist/core/ecs/resource.d.ts.map +1 -1
  80. package/dist/core/ecs/resource_registry.d.cts +20 -0
  81. package/dist/core/ecs/resource_registry.d.ts +20 -0
  82. package/dist/core/ecs/resource_registry.d.ts.map +1 -0
  83. package/dist/core/ecs/resume.d.cts +85 -0
  84. package/dist/core/ecs/resume.d.ts +6 -6
  85. package/dist/core/ecs/resume.d.ts.map +1 -1
  86. package/dist/core/ecs/run_condition.d.cts +81 -0
  87. package/dist/core/ecs/run_condition.d.ts +15 -9
  88. package/dist/core/ecs/run_condition.d.ts.map +1 -1
  89. package/dist/core/ecs/schedule.d.cts +142 -0
  90. package/dist/core/ecs/schedule.d.ts +15 -6
  91. package/dist/core/ecs/schedule.d.ts.map +1 -1
  92. package/dist/core/ecs/snapshot_service.d.cts +94 -0
  93. package/dist/core/ecs/snapshot_service.d.ts +94 -0
  94. package/dist/core/ecs/snapshot_service.d.ts.map +1 -0
  95. package/dist/core/ecs/sparse_store.d.cts +110 -0
  96. package/dist/core/ecs/sparse_store.d.ts +5 -2
  97. package/dist/core/ecs/sparse_store.d.ts.map +1 -1
  98. package/dist/core/ecs/store.d.cts +950 -0
  99. package/dist/core/ecs/store.d.ts +143 -342
  100. package/dist/core/ecs/store.d.ts.map +1 -1
  101. package/dist/core/ecs/store_layout_listener.d.cts +23 -0
  102. package/dist/core/ecs/system.d.cts +250 -0
  103. package/dist/core/ecs/system.d.ts +138 -22
  104. package/dist/core/ecs/system.d.ts.map +1 -1
  105. package/dist/{utils/arrays.d.ts → core/ecs/utils/arrays.d.cts} +1 -0
  106. package/dist/core/ecs/utils/error.d.cts +61 -0
  107. package/dist/core/ecs/utils/error.d.ts +12 -2
  108. package/dist/core/ecs/utils/error.d.ts.map +1 -1
  109. package/dist/core/store/action_ring.d.cts +136 -0
  110. package/dist/core/store/allocator.d.cts +238 -0
  111. package/dist/core/store/allocator.d.ts.map +1 -1
  112. package/dist/core/store/buffer_backed_column.d.cts +69 -0
  113. package/dist/core/store/buffer_backed_column.d.ts +2 -2
  114. package/dist/core/store/column_store.d.cts +273 -0
  115. package/dist/core/store/column_store.d.ts +18 -10
  116. package/dist/core/store/column_store.d.ts.map +1 -1
  117. package/dist/core/store/command_dispatch.d.cts +52 -0
  118. package/dist/core/store/command_ring.d.cts +107 -0
  119. package/dist/core/store/descriptor.d.cts +80 -0
  120. package/dist/core/store/descriptor.d.ts +1 -1
  121. package/dist/core/store/descriptor.d.ts.map +1 -1
  122. package/dist/core/store/entity_index.d.cts +108 -0
  123. package/dist/core/store/event_ring.d.cts +95 -0
  124. package/dist/core/store/extend.d.cts +39 -0
  125. package/dist/core/store/extend.d.ts +3 -73
  126. package/dist/core/store/extend.d.ts.map +1 -1
  127. package/dist/core/store/grow.d.cts +34 -0
  128. package/dist/core/store/grow.d.ts +4 -9
  129. package/dist/core/store/grow.d.ts.map +1 -1
  130. package/dist/core/store/header.d.cts +64 -0
  131. package/dist/core/store/header.d.ts +1 -1
  132. package/dist/core/store/header.d.ts.map +1 -1
  133. package/dist/core/store/index.d.cts +17 -0
  134. package/dist/core/store/index.d.ts +16 -15
  135. package/dist/core/store/index.d.ts.map +1 -1
  136. package/dist/core/store/layout_ops.d.cts +152 -0
  137. package/dist/core/store/layout_ops.d.ts +152 -0
  138. package/dist/core/store/layout_ops.d.ts.map +1 -0
  139. package/dist/core/store/region_table.d.cts +74 -0
  140. package/dist/core/store/region_table.d.ts +1 -1
  141. package/dist/core/store/region_table.d.ts.map +1 -1
  142. package/dist/core/store/snapshot.d.cts +43 -0
  143. package/dist/core/store/snapshot.d.ts +2 -2
  144. package/dist/core/store/state_hash.d.cts +38 -0
  145. package/dist/core/store/state_hash.d.ts +1 -1
  146. package/dist/core/store/store_regions.d.cts +38 -0
  147. package/dist/core/store/store_regions.d.ts +1 -1
  148. package/dist/core/store/vendored_abi/abi.d.ts +43 -0
  149. package/dist/core/store/{__generated__ → vendored_abi}/abi.d.ts.map +1 -1
  150. package/dist/dev_flag.d.cts +17 -0
  151. package/dist/dev_flag.d.ts +17 -0
  152. package/dist/dev_flag.d.ts.map +1 -0
  153. package/dist/extensions/editor/editor.d.cts +170 -0
  154. package/dist/extensions/editor/editor.d.ts +43 -22
  155. package/dist/extensions/editor/editor.d.ts.map +1 -1
  156. package/dist/extensions/editor/field_handle.d.cts +40 -0
  157. package/dist/extensions/editor/field_handle.d.ts +8 -3
  158. package/dist/extensions/editor/field_handle.d.ts.map +1 -1
  159. package/dist/extensions/editor/index.cjs +1 -1
  160. package/dist/extensions/editor/index.d.cts +21 -0
  161. package/dist/extensions/editor/index.d.ts +2 -2
  162. package/dist/extensions/editor/index.js +116 -88
  163. package/dist/extensions/reactive/ecs_sync.d.cts +214 -0
  164. package/dist/extensions/reactive/ecs_sync.d.ts +26 -22
  165. package/dist/extensions/reactive/ecs_sync.d.ts.map +1 -1
  166. package/dist/extensions/reactive/index.cjs +1 -1
  167. package/dist/extensions/reactive/index.d.cts +23 -0
  168. package/dist/extensions/reactive/index.d.ts +1 -1
  169. package/dist/extensions/reactive/index.js +106 -116
  170. package/dist/extensions/solid/index.cjs +1 -1
  171. package/dist/extensions/solid/index.d.cts +6 -0
  172. package/dist/extensions/solid/index.d.ts +2 -2
  173. package/dist/extensions/solid/index.js +8 -4
  174. package/dist/extensions/solid/kernel_solid.d.cts +45 -0
  175. package/dist/extensions/solid/kernel_solid.d.ts +6 -3
  176. package/dist/extensions/solid/kernel_solid.d.ts.map +1 -1
  177. package/dist/host_commands-BF8QMi3c.cjs +1 -0
  178. package/dist/host_commands-i4cAeyL5.js +2318 -0
  179. package/dist/index.cjs +1 -2
  180. package/dist/index.d.cts +66 -0
  181. package/dist/index.d.ts +50 -1
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +4469 -5933
  184. package/dist/internal.cjs +2 -0
  185. package/dist/internal.d.cts +20 -0
  186. package/dist/internal.d.ts +20 -0
  187. package/dist/internal.d.ts.map +1 -0
  188. package/dist/internal.js +141 -0
  189. package/dist/primitives.cjs +1 -1
  190. package/dist/primitives.d.cts +18 -0
  191. package/dist/primitives.d.ts +6 -6
  192. package/dist/primitives.js +24 -23
  193. package/dist/reactive/array.d.ts +24 -0
  194. package/dist/reactive/array.d.ts.map +1 -0
  195. package/dist/reactive/index.cjs +1 -0
  196. package/dist/reactive/index.d.cts +11 -0
  197. package/dist/reactive/index.d.ts +11 -0
  198. package/dist/reactive/index.d.ts.map +1 -0
  199. package/dist/reactive/index.js +18 -0
  200. package/dist/reactive/interop.d.cts +19 -0
  201. package/dist/{core/reactive → reactive}/interop.d.ts +1 -1
  202. package/dist/reactive/interop.d.ts.map +1 -0
  203. package/dist/reactive/kernel.d.cts +73 -0
  204. package/dist/{core/reactive → reactive}/kernel.d.ts +5 -3
  205. package/dist/reactive/kernel.d.ts.map +1 -0
  206. package/dist/reactive/map.d.ts +16 -0
  207. package/dist/reactive/map.d.ts.map +1 -0
  208. package/dist/reactive/shallow.d.cts +11 -0
  209. package/dist/reactive/shallow.d.ts +11 -0
  210. package/dist/reactive/shallow.d.ts.map +1 -0
  211. package/dist/reactive/struct.d.cts +10 -0
  212. package/dist/{core/reactive → reactive}/struct.d.ts +1 -1
  213. package/dist/reactive/struct.d.ts.map +1 -0
  214. package/dist/shallow-DQ8aG51_.cjs +1 -0
  215. package/dist/shallow-DfnAm9vG.js +150 -0
  216. package/dist/shared-BU1Cd40h.js +103 -0
  217. package/dist/shared-BymrGTyR.cjs +1 -0
  218. package/dist/shared.cjs +1 -1
  219. package/dist/shared.d.cts +22 -0
  220. package/dist/shared.d.ts +2 -2
  221. package/dist/shared.js +1 -1
  222. package/dist/topological_sort-BDvEyb9W.cjs +1 -0
  223. package/dist/topological_sort-DK6EjpWa.js +135 -0
  224. package/dist/type_primitives/assertions.d.cts +32 -0
  225. package/dist/type_primitives/assertions.d.ts +13 -1
  226. package/dist/type_primitives/assertions.d.ts.map +1 -1
  227. package/dist/type_primitives/binary_heap/binary_heap.d.cts +37 -0
  228. package/dist/type_primitives/bitset/bitset.d.cts +54 -0
  229. package/dist/type_primitives/brand.d.cts +23 -0
  230. package/dist/type_primitives/error.d.cts +16 -0
  231. package/dist/type_primitives/error.d.ts +4 -3
  232. package/dist/type_primitives/error.d.ts.map +1 -1
  233. package/dist/type_primitives/index.d.cts +13 -0
  234. package/dist/type_primitives/index.d.ts +9 -9
  235. package/dist/type_primitives/sparse_map/sparse_map.d.cts +30 -0
  236. package/dist/type_primitives/sparse_set/sparse_set.d.cts +28 -0
  237. package/dist/type_primitives/topological_sort/topological_sort.d.cts +29 -0
  238. package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +127 -0
  239. package/dist/typed_arrays-BcXcnzB4.js +258 -0
  240. package/dist/typed_arrays-D3NmwtCG.cjs +1 -0
  241. package/dist/utils/error.d.cts +6 -0
  242. package/dist/version.d.cts +10 -0
  243. package/dist/version.d.ts +10 -0
  244. package/dist/version.d.ts.map +1 -0
  245. package/package.json +102 -19
  246. package/dist/array-CxbPyiHO.cjs +0 -1
  247. package/dist/array-uFR7Q8fU.js +0 -132
  248. package/dist/core/reactive/array.d.ts.map +0 -1
  249. package/dist/core/reactive/index.cjs +0 -1
  250. package/dist/core/reactive/index.d.ts +0 -10
  251. package/dist/core/reactive/index.d.ts.map +0 -1
  252. package/dist/core/reactive/index.js +0 -17
  253. package/dist/core/reactive/interop.d.ts.map +0 -1
  254. package/dist/core/reactive/kernel.d.ts.map +0 -1
  255. package/dist/core/reactive/map.d.ts.map +0 -1
  256. package/dist/core/reactive/struct.d.ts.map +0 -1
  257. package/dist/log/console_sink.d.ts +0 -4
  258. package/dist/log/console_sink.d.ts.map +0 -1
  259. package/dist/log/index.d.ts +0 -3
  260. package/dist/log/index.d.ts.map +0 -1
  261. package/dist/log/logger.d.ts +0 -27
  262. package/dist/log/logger.d.ts.map +0 -1
  263. package/dist/shared-BXSZnxx4.cjs +0 -1
  264. package/dist/shared-C678TAPY.js +0 -99
  265. package/dist/topological_sort-DlRpSrxu.js +0 -391
  266. package/dist/topological_sort-WAT-VHb-.cjs +0 -1
  267. package/dist/utils/arrays.d.ts.map +0 -1
  268. package/dist/utils/constants.d.ts.map +0 -1
  269. /package/dist/{utils/constants.d.ts → core/ecs/utils/constants.d.cts} +0 -0
  270. /package/dist/core/store/{__generated__/abi.d.ts → vendored_abi/abi.d.cts} +0 -0
  271. /package/dist/{core/reactive/array.d.ts → reactive/array.d.cts} +0 -0
  272. /package/dist/{core/reactive/map.d.ts → reactive/map.d.cts} +0 -0
@@ -1,20 +1,82 @@
1
- import { Store } from './store';
2
- import { FrameTraceSink } from './frame_trace';
3
- import { Archetype, ArchetypeView } from './archetype';
4
- import { EntityID } from './entity';
5
- import { ComponentDef, ComponentID, ComponentSchema, FieldValues, MutableColumnsForSchema, ColumnsForSchema, BundleOrDef } from './component';
6
- import { SparseComponentDef, SparseComponentID } from './sparse_store';
7
- import { RelationDef } from './relation';
8
- import { ComponentRef, ReadonlyComponentRef } from './ref';
9
- import { EventKey, EventReader, EventSchema, SignalKey } from './event';
10
- import { ResourceKey } from './resource';
11
- import { BitSet } from '../../type_primitives';
1
+ import { Store } from './store.js';
2
+ import { FrameTraceSink } from './frame_trace.js';
3
+ import { Archetype, ArchetypeView } from './archetype.js';
4
+ import { EntityID } from './entity.js';
5
+ import { ComponentDef, ComponentHandle, ComponentID, MutableColumnsForSchema, ColumnsForSchema, AttachValuesArg, SchemaOf, DeclaredQueryTerm } from './component.js';
6
+ import { SparseComponentDef, SparseComponentID, SparseSchemaOf } from './sparse_store.js';
7
+ import { RelationDef } from './relation.js';
8
+ import { SystemAccess, DeclaredRead, DeclaredWrite, DeclaredAdd, DeclaredRemove, DeclaredSparseRead, DeclaredSparseWrite, DeclaredRelationRead, DeclaredRelationWrite, DeclaredResourceRead, DeclaredResourceWrite, DespawnArg } from './system.js';
9
+ import { ComponentRef, ReadonlyComponentRef } from './ref.js';
10
+ import { EventKey, EventReader, EventShape, SignalKey } from './event.js';
11
+ import { ResourceKey, ResourceValueOf } from './resource.js';
12
+ import { BitSet } from '../../type_primitives/index.js';
13
+ /** The query-driver seam on `Store` — the typed contract behind the
14
+ * underscore members `ecs.ts` and the query internals reach (M1). `Store`
15
+ * implements this; when the cache/driver layer is extracted (M2/H1) the
16
+ * interface retargets at the collaborator without touching consumers.
17
+ * `_tick` / `_trace` are deliberately mutable: `ECS.update()` advances the
18
+ * change tick and `ECS.setTrace` installs the sink through this seam. */
19
+ export interface QueryHost {
20
+ /** Change tick — advanced by `ECS.update()` each frame. */
21
+ _tick: number;
22
+ /** Dev-only frame-trace sink (`ECS.setTrace`); always null in prod. */
23
+ _trace: FrameTraceSink | null;
24
+ /** True once any component observer opted into per-entity dirty tracking —
25
+ * gates `_noteSet` at every write site. */
26
+ readonly _anyDirtyTracked: boolean;
27
+ /** Bumped when an archetype crosses empty↔non-empty — cached query
28
+ * archetype lists rebuild when their observed epoch is stale (#327). */
29
+ readonly _queryDirtyEpoch: number;
30
+ /** Record a per-entity onSet dirty mark for `def` (gated by
31
+ * `_anyDirtyTracked` at the call site). */
32
+ _noteSet(def: ComponentHandle, eid: EntityID): void;
33
+ /** Dev-only: buffered event count across dirty channels (mid-update emit
34
+ * detection in `ECS.update()`). */
35
+ _devBufferedEventCount(): number;
36
+ /** Second query-match path: sparse-term intersection (#469 / ADR-0011). */
37
+ _forEachSparseMatch(include: BitSet, exclude: BitSet | null, anyOf: BitSet | null, sparseInclude: readonly SparseComponentID[], sparseExclude: readonly SparseComponentID[], denseArchetypes: readonly Archetype[], cb: (entityId: EntityID) => void, includeDisabled: boolean): void;
38
+ /** Third query-match path: the `(*, T)` wildcard (#579). */
39
+ _forEachRelationTargetMatch(target: EntityID, include: BitSet, exclude: BitSet | null, anyOf: BitSet | null, sparseInclude: readonly SparseComponentID[], sparseExclude: readonly SparseComponentID[], includeDisabled: boolean, cb: (entityId: EntityID) => void): void;
40
+ /** Fourth query-match path: hierarchy depth ordering (#581). */
41
+ _forEachHierarchyMatch(include: BitSet, exclude: BitSet | null, anyOf: BitSet | null, sparseInclude: readonly SparseComponentID[], sparseExclude: readonly SparseComponentID[], denseArchetypes: readonly Archetype[], relation: RelationDef, maxDepth: number, includeDisabled: boolean, cb: (entityId: EntityID) => void): void;
42
+ }
12
43
  export interface QueryCacheEntry {
13
44
  includeMask: BitSet;
14
45
  excludeMask: BitSet | null;
15
46
  anyOfMask: BitSet | null;
16
47
  query: Query<any>;
17
48
  }
49
+ /** One owner for every query-resolution cache (M2). Previously the dedup
50
+ * bucket map lived on `ECS` while `Query` populated eleven composition maps
51
+ * declared on the resolver interface — ownership split across two modules.
52
+ * All entries are structural (a query is minted once per unique term set and
53
+ * lives for the world's lifetime; components and queries are never
54
+ * unregistered), so there is no invalidation lifecycle — the maps are
55
+ * append-only. Key encodings are unchanged from the pre-extraction fields.
56
+ *
57
+ * The composition maps are exposed as readonly fields (not per-kind accessor
58
+ * pairs): the mutation protocol is uniform (`get` → miss → build → `set`) and
59
+ * hot enough that composition sites keep direct map access; the invariant
60
+ * this class carries is single ownership, not access mediation. */
61
+ export declare class QueryCache {
62
+ private readonly dedup;
63
+ readonly andSingle: Map<number, Query<any>>;
64
+ readonly notSingle: Map<number, Query<any>>;
65
+ readonly anyOfSingle: Map<number, Query<any>>;
66
+ readonly changedSingle: Map<number, ChangedQuery<any>>;
67
+ readonly optionalSingle: Map<number, Query<any>>;
68
+ readonly withSparseSingle: Map<number, Query<any>>;
69
+ readonly withoutSparseSingle: Map<number, Query<any>>;
70
+ readonly withRelationSingle: Map<number, Query<any>>;
71
+ readonly withoutRelationSingle: Map<number, Query<any>>;
72
+ readonly includeDisabledSingle: Map<number, Query<any>>;
73
+ readonly hierarchySingle: Map<number, Query<any>>;
74
+ /** Dedup lookup: bucket scan with full mask equality (buckets are
75
+ * typically 1–2 entries). */
76
+ findDedup(key: number, include: BitSet, exclude: BitSet | null, anyOf: BitSet | null): QueryCacheEntry | undefined;
77
+ /** Record a freshly minted query under its dedup key. */
78
+ addDedup(key: number, entry: QueryCacheEntry): void;
79
+ }
18
80
  export interface QueryResolver {
19
81
  _resolveQuery(include: BitSet, exclude: BitSet | null, anyOf: BitSet | null, defs: readonly ComponentDef[]): Query<any>;
20
82
  _getLastRunTick(): number;
@@ -22,17 +84,9 @@ export interface QueryResolver {
22
84
  _getCurrentTick(): number;
23
85
  _getQueryDirtyEpoch(): number;
24
86
  _nextQueryId(): number;
25
- _andSingleCache: Map<number, Query<any>>;
26
- _notSingleCache: Map<number, Query<any>>;
27
- _anyOfSingleCache: Map<number, Query<any>>;
28
- _changedSingleCache: Map<number, ChangedQuery<any>>;
29
- _optionalSingleCache: Map<number, Query<any>>;
30
- _withSparseSingleCache: Map<number, Query<any>>;
31
- _withoutSparseSingleCache: Map<number, Query<any>>;
32
- _withRelationSingleCache: Map<number, Query<any>>;
33
- _withoutRelationSingleCache: Map<number, Query<any>>;
34
- _includeDisabledSingleCache: Map<number, Query<any>>;
35
- _hierarchySingleCache: Map<number, Query<any>>;
87
+ /** All query-resolution caches — dedup + composition (M2). One owner; see
88
+ * `QueryCache` for the per-map keying/id-space notes. */
89
+ readonly _caches: QueryCache;
36
90
  /** Second query-match path (#469 / ADR-0011): drive iteration by sparse
37
91
  * membership rather than the archetype mask, yielding entities — sparse
38
92
  * members are scattered across archetypes, so there is no archetype-column
@@ -85,13 +139,15 @@ export interface HierarchyTerm {
85
139
  * object (a per-archetype-per-component cache refreshed in place), hiding the
86
140
  * change tick. Destructure the group immediately; don't retain it across calls.
87
141
  */
88
- export declare class ChunkColumns {
142
+ export declare class ChunkColumns<out Defs extends readonly ComponentDef<any>[] = readonly ComponentDef<any>[]> {
89
143
  /** @internal */ _arch: Archetype;
90
144
  /** @internal */ _tick: number;
91
- /** Mutable column group — `const { x, y } = cols.mut(Pos)`. Stamps the tick. */
92
- mut<S extends ComponentSchema>(def: ComponentDef<S>): MutableColumnsForSchema<S>;
93
- /** Read-only column group `const { vx, vy } = cols.read(Vel)`. No tick bump. */
94
- read<S extends ComponentSchema>(def: ComponentDef<S>): ColumnsForSchema<S>;
145
+ /** Mutable column group — `const { x, y } = cols.mut(Pos)`. Stamps the tick.
146
+ * `def` must be a term of the iterating query (POLISH_AUDIT #6). */
147
+ mut<D extends ComponentDef<any>>(def: D & DeclaredQueryTerm<Defs, D>): MutableColumnsForSchema<SchemaOf<D>>;
148
+ /** Read-only column group — `const { vx, vy } = cols.read(Vel)`. No tick bump.
149
+ * `def` must be a term of the iterating query (POLISH_AUDIT #6). */
150
+ read<D extends ComponentDef<any>>(def: D & DeclaredQueryTerm<Defs, D>): ColumnsForSchema<SchemaOf<D>>;
95
151
  }
96
152
  export declare class Query<Defs extends readonly ComponentDef[]> {
97
153
  private readonly _archetypes;
@@ -115,18 +171,37 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
115
171
  * against a query carrying sparse terms. These walk the dense archetype
116
172
  * list and never consult `_sparseInclude` / `_sparseExclude`, so on a
117
173
  * sparse-derived query they'd **fail open** — returning the unfiltered dense
118
- * result instead of the sparse-filtered one. Throw in `__DEV__` (compiled
174
+ * result instead of the sparse-filtered one. Throw in `DEV` (compiled
119
175
  * out of prod) steering the caller to `forEachEntity`, the only path that
120
176
  * honors sparse membership (#469). Mirrors `ChangedQuery`'s dev-guard on its
121
177
  * include-mask invariant. */
122
178
  private _assertDenseOnly;
179
+ /** Whether this query carries only dense terms — the precondition for the
180
+ * archetype-walk fast paths (`count`, `firstEntity`, `singleEntity`). */
181
+ private _isDenseOnly;
182
+ /** First matching entity, or `undefined` when the query matches none — the
183
+ * singleton read (`player`, `camera`) without hand-rolling a forEach +
184
+ * closure capture (POLISH_AUDIT M8). Dense-only queries answer from the
185
+ * first non-empty archetype in O(archetypes); queries with sparse /
186
+ * relation / hierarchy terms fall back to a full `forEachEntity` walk.
187
+ * "First" is iteration order, not spawn order — with more than one match
188
+ * the pick is arbitrary (use `singleEntity` to assert uniqueness). */
189
+ firstEntity(): EntityID | undefined;
190
+ /** The query's one matching entity. Dev-throws `QUERY_NOT_SINGLETON` when
191
+ * the match count is 0 or >1 — the singleton assertion for entities that
192
+ * must be unique (player, camera). Prod skips the count and returns the
193
+ * first match (`undefined` if none). */
194
+ singleEntity(): EntityID;
195
+ /** Count for non-dense queries — full `forEachEntity` walk. */
196
+ private _countViaWalk;
123
197
  /** Number of matching archetypes (including empty ones). */
124
198
  get archetypeCount(): number;
125
199
  /** Total entity count across all matching archetypes — enabled rows only by
126
200
  * default, or all rows when `includeDisabled()` (#577). Reads the partition
127
- * fields directly (not the flag-dependent `entityCount` getter). */
128
- count(): number;
129
- get archetypes(): readonly ArchetypeView[];
201
+ * fields directly (not the archetype's flag-dependent `entityCount`
202
+ * getter). */
203
+ get entityCount(): number;
204
+ get archetypes(): readonly ArchetypeView<Defs>[];
130
205
  /** Carry this query's non-dense terms — optional fetch-if-present (#575) and
131
206
  * sparse membership (#469) — onto a freshly composed dense query. `and` /
132
207
  * `not` / `anyOf` build the new dense mask via `_resolveQuery`, which is
@@ -194,7 +269,7 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
194
269
  private _withoutRelationOne;
195
270
  /** Build a derived query carrying new relation-wildcard terms. Threads the
196
271
  * backing-sparse ids (which the driver actually consumes) plus the relation
197
- * ids (which only the `__DEV__` access check consumes), reusing the dense /
272
+ * ids (which only the `DEV` access check consumes), reusing the dense /
198
273
  * optional / disabled state by reference — same rationale as `_deriveSparse`. */
199
274
  private _deriveRelation;
200
275
  /** Order this query's matched entities in **hierarchy depth order** over the
@@ -211,13 +286,13 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
211
286
  * no SoA column span — `forEach` / `count` reject a hierarchy query (like a
212
287
  * sparse term). **Exclusive relations only** (matches the traversal constraint
213
288
  * #474); a multi relation throws `RELATION_MODE_MISMATCH` at iteration, and a
214
- * cycle is a loud `RELATION_CYCLE` in `__DEV__` (a safe break in production).
289
+ * cycle is a loud `RELATION_CYCLE` in `DEV` (a safe break in production).
215
290
  * Requires `relationReads: [R]` (checked at iteration). Carried through
216
291
  * `and`/`not`/`anyOf` like the sparse terms (`_carryNondense`).
217
292
  *
218
293
  * `Defs` is unchanged — `R` is an ordering, not a required component (like
219
294
  * `not` / `anyOf`). Returns a new query; the unbounded form is cached. */
220
- hierarchy(relation: RelationDef, maxDepth?: number): Query<Defs>;
295
+ hierarchy(relation: RelationDef<"exclusive">, maxDepth?: number): Query<Defs>;
221
296
  /** Build a derived query carrying a hierarchy ordering term. Reuses this
222
297
  * query's dense / sparse / optional / disabled / relation-wildcard state by
223
298
  * reference (the matched set is unchanged) — same rationale as `_deriveSparse`. */
@@ -225,7 +300,7 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
225
300
  /** Assert every `(R, *)` wildcard term on this query was declared in the
226
301
  * system's `relationReads` (#579 / #496). Iteration-time (`forEachEntity` /
227
302
  * `forEachRelatedTo`), not construction-time, so it is robust to queries
228
- * built outside a system — same rationale as the data-op checks. `__DEV__` only;
303
+ * built outside a system — same rationale as the data-op checks. `DEV` only;
229
304
  * outside a system `checkRelationRead` is a no-op. */
230
305
  private _checkRelationAccess;
231
306
  /** Iterate every source related to `target` under **any** relation — the
@@ -245,7 +320,7 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
245
320
  * and without each `T`. Read each column per archetype span via
246
321
  * `arch.getOptionalColumnRead(T, field)` (column when present, `undefined`
247
322
  * when absent). `.optional(T)` is the *declaration* that authorizes that fetch:
248
- * inside `forEach`, `getOptionalColumnRead` throws in `__DEV__` if `T` was
323
+ * inside `forEach`, `getOptionalColumnRead` throws in `DEV` if `T` was
249
324
  * not declared here (#592) — the read-side analog of `reads:[T]`, which is also
250
325
  * still required for access coverage (both checks fire, even on the absent
251
326
  * span). The term is carried through `and`/`not`/`anyOf` (see
@@ -271,7 +346,7 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
271
346
  * touch the dense mask, so it reuses this query's live archetype list and is
272
347
  * carried through `and`/`not`/`anyOf` like the sparse/optional terms. */
273
348
  includeDisabled(): Query<Defs>;
274
- forEach(cb: (arch: ArchetypeView) => void): void;
349
+ forEach(cb: (arch: ArchetypeView<Defs>) => void): void;
275
350
  /** @internal — cold `includeDisabled` wrapper for `forEach` (#577), split out
276
351
  * (#649) so the all-rows flag dance (`_setIterAllRows` + try/finally) stays
277
352
  * out of `forEach`'s inlined hot body. The default (enabled-only) query never
@@ -300,9 +375,9 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
300
375
  * allocated per pass and reused across that pass's archetypes. Honours
301
376
  * `includeDisabled()` exactly like `forEach` (the bound widens to the
302
377
  * disabled tail); dense-only like `forEach` (sparse/relation/hierarchy terms
303
- * throw in `__DEV__` — iterate those with `forEachEntity`).
378
+ * throw in `DEV` — iterate those with `forEachEntity`).
304
379
  */
305
- eachChunk(cb: (cols: ChunkColumns, count: number) => void): void;
380
+ eachChunk(cb: (cols: ChunkColumns<Defs>, count: number) => void): void;
306
381
  /** @internal — shared body for `eachChunk`'s default and `includeDisabled`
307
382
  * paths. The `ChunkColumns` cursor is allocated per call (a 2-field object whose
308
383
  * cost doesn't scale with the per-row work) rather than cached on the query, so
@@ -321,7 +396,7 @@ export declare class Query<Defs extends readonly ComponentDef[]> {
321
396
  * would silently change behaviour for arrow-expression bodies that happen
322
397
  * to return a truthy value.
323
398
  */
324
- forEachUntil(cb: (arch: ArchetypeView) => boolean): boolean;
399
+ forEachUntil(cb: (arch: ArchetypeView<Defs>) => boolean): boolean;
325
400
  /** @internal — shared body for `forEachUntil`'s default and
326
401
  * `includeDisabled` paths. Same dev-mode optional-term scope as
327
402
  * `forEach` (#592). */
@@ -400,59 +475,128 @@ export declare class QueryBuilder {
400
475
  constructor(_resolver: QueryResolver);
401
476
  with<T extends ComponentDef[]>(...defs: T): Query<T>;
402
477
  }
478
+ /**
479
+ * A `BundleOrDef` whose def is constrained to the enclosing system's declared
480
+ * add surface (§typestate). The bundle branch restates `Bundle`'s shape with
481
+ * the def slot narrowed — intersecting `Bundle<any> & { def: … }` instead
482
+ * would put two `ComponentDef` instantiations in one intersection, which TS
483
+ * relates leniently (see system.ts §typestate notes).
484
+ *
485
+ * The outer conditional is a deliberate no-op (`[D] extends [unknown]` is
486
+ * always true): it makes the variance of `D` — and therefore of the access
487
+ * param `A` threaded through `Commands` / `SystemContext` — UNMEASURABLE to
488
+ * the compiler. A measurable (plain-union) definition here gets `A` marked
489
+ * reliably contravariant, variance-based comparison then rejects
490
+ * `SystemContext<Narrow> → SystemContext` without the structural fallback,
491
+ * and every helper taking a bare `SystemContext` stops accepting typed
492
+ * contexts. Unmeasurable variance forces the structural path, where class
493
+ * methods compare bivariantly and the conversion holds.
494
+ */
495
+ export type DeclaredBundleOrDef<D> = [D] extends [unknown] ? D | {
496
+ readonly def: D;
497
+ readonly values: Readonly<Partial<Record<string, number>>>;
498
+ } : never;
403
499
  /**
404
500
  * Deferred structural-command facade (§ctx.commands — Bevy `Commands`).
405
501
  * Namespaces the deferred structural ops so the call site is self-documenting:
406
502
  * `ctx.commands.add(e, …)` is *always* deferred (applied at the phase flush),
407
- * ending the collision where `ecs.addComponent` (immediate) and the bare
408
- * `ctx.addComponent` (deferred) share a name with opposite timing. Takes
503
+ * ending the collision where `ecs.addComponent` (immediate) and a bare
504
+ * `ctx.addComponent` (deferred) would share a name with opposite timing. Takes
409
505
  * varargs callable bundles, so one shape — `commands.spawn(bundle(Pos,{x,y}), bundle(Vel,{vx:1}))`
410
- * — serves spawn and add. The legacy `ctx.addComponent`/etc. stay for now;
411
- * the intent is for `ctx.commands.*` to become the only deferred surface.
506
+ * — serves spawn and add. This is the ONLY deferred surface: the bare
507
+ * `ctx.addComponent` / `ctx.removeComponent` / `ctx.disable` / `ctx.enable`
508
+ * duplicates were removed in 0.5.0, completing the receiver-implies-timing
509
+ * rule (`ecs.*` immediate, `ctx.commands.*` deferred) that 0.5.0 started for
510
+ * spawn/despawn.
511
+ *
512
+ * `A` narrows the def-taking methods to the enclosing system's declared access
513
+ * (§typestate, system.ts); the default is fully permissive.
514
+ *
515
+ * `out A` (declared covariance) is deliberate: every use of `A` sits inside a
516
+ * declared-access conditional, whose variance the compiler cannot measure —
517
+ * left unannotated, the measured verdict rejects `Commands<Narrow> →
518
+ * Commands` (the direction every permissive consumer needs). Covariance is
519
+ * the honest direction: a context with MORE declared access is usable where
520
+ * one with less is expected. The checks themselves are per-instantiation, so
521
+ * the annotation does not weaken them.
412
522
  */
413
- export declare class Commands {
523
+ export declare class Commands<out A extends SystemAccess = SystemAccess> {
414
524
  private readonly store;
415
525
  constructor(store: Store);
416
526
  /** Spawn from bundles. Create is immediate (the id is returned now); the
417
527
  * component attaches are deferred to the phase flush — so until that flush the
418
528
  * entity exists in its empty/partial archetype and a query running later in
419
529
  * the same phase can observe it half-built. (Same semantics as
420
- * `ctx.createEntity` + `ctx.addComponent`; fully-deferred id-reservation
530
+ * `ctx.commands.spawn()` + `ctx.addComponent`; fully-deferred id-reservation
421
531
  * spawn, à la Bevy, is a separate follow-up.) */
422
- spawn(...items: BundleOrDef[]): EntityID;
423
- /** Attach bundles to an existing entity (deferred). */
424
- add(entityId: EntityID, ...items: BundleOrDef[]): this;
532
+ spawn(...items: DeclaredBundleOrDef<A["add"]>[]): EntityID;
533
+ /** Attach bundles to an existing entity (deferred). Bundles zero-fill
534
+ * omitted fields. */
535
+ add(entityId: EntityID, ...items: DeclaredBundleOrDef<A["add"]>[]): this;
536
+ /** Explicit complete-values attach (deferred) — the compile-checked shape
537
+ * where a typo'd or missing field is a compile error, mirroring the
538
+ * immediate `ecs.addComponent(e, def, values)`. Tags take no values
539
+ * argument (`AttachValuesArg`). */
540
+ add<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredAdd<A, D>, ...values: AttachValuesArg<SchemaOf<D>>): this;
425
541
  /** Remove a component (deferred). */
426
- remove(entityId: EntityID, def: ComponentDef): this;
542
+ remove<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRemove<A, D>): this;
427
543
  /** Destroy an entity (deferred). */
428
- despawn(entityId: EntityID): this;
429
- /** Disable an entity (deferred). */
544
+ despawn(entityId: DespawnArg<A>): this;
545
+ /** Buffer `entityId` to be disabled at the phase flush (idempotent, #577).
546
+ * Deferred because a toggle is an in-archetype row swap, which would corrupt
547
+ * a `forEach` SoA loop iterating that archetype if applied mid-system (it
548
+ * reorders the dense columns being read). A disabled entity is excluded from
549
+ * default queries; opt back in per query with `.includeDisabled()`. The
550
+ * immediate read is `ctx.isDisabled`. */
430
551
  disable(entityId: EntityID): this;
431
- /** Re-enable an entity (deferred). */
552
+ /** Buffer `entityId` to be re-enabled at the phase flush (idempotent).
553
+ * Deferred for the same row-swap reason as `disable`. */
432
554
  enable(entityId: EntityID): this;
433
555
  }
434
- export declare class SystemContext {
556
+ /**
557
+ * The per-system world facade. `A` is the system's declared access surface
558
+ * (§typestate, system.ts): the config-form `registerSystem` computes it from
559
+ * the literal `reads`/`writes`/… declarations and every guarded method below
560
+ * checks its handle argument against the matching union at compile time —
561
+ * the same rules `accessCheck` enforces at runtime in `DEV`. The default
562
+ * `A = SystemAccess` is fully permissive, so a bare `SystemContext` (helper
563
+ * functions, host-side code, explicitly-annotated escape hatches) behaves
564
+ * exactly as before, and every narrowed `SystemContext<…>` is assignable to
565
+ * it.
566
+ *
567
+ * `out A` (declared covariance) is deliberate — see `Commands` above: the
568
+ * declared-access conditionals are unmeasurable to the compiler, and the
569
+ * unannotated verdict rejects exactly the `SystemContext<Narrow> →
570
+ * SystemContext` conversion the whole design depends on.
571
+ */
572
+ export declare class SystemContext<out A extends SystemAccess = SystemAccess> {
435
573
  private readonly store;
436
574
  lastRunTick: number;
437
575
  /** Deferred structural-command facade (§ctx.commands). */
438
- readonly commands: Commands;
576
+ readonly commands: Commands<A>;
439
577
  /** Current ECS tick. Use this for write ticks in getColumn. */
440
578
  get ecsTick(): number;
441
579
  /** The world's frame-trace sink (ADR-0030), or `null`. Lets the schedule
442
580
  * fire `systemStart`/`flush*` without reaching into the private store.
443
- * Read only under `if (__DEV__)`; the seam is dead-code-eliminated in prod. */
581
+ * Read only under `if (DEV)`; the seam is dead-code-eliminated in prod. */
444
582
  get _trace(): FrameTraceSink | null;
445
583
  constructor(store: Store);
446
- createEntity(): EntityID;
447
584
  isAlive(entityId: EntityID): boolean;
448
585
  hasComponent(entityId: EntityID, def: ComponentDef): boolean;
449
- getField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S): number;
450
- setField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, value: number): void;
586
+ getField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number;
587
+ /** Total sibling of {@link getField}, mirroring `ecs.tryGetField`
588
+ * (POLISH_AUDIT #9): `undefined` when the entity is dead or doesn't hold
589
+ * the component, instead of a dev throw / prod garbage read. The safe way
590
+ * to probe-and-read in one call: `ctx.tryGetField(e, Health, "current") ?? 0`. */
591
+ tryGetField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number | undefined;
592
+ setField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, value: number): void;
451
593
  /** Read-modify-write one field: `updateField(e, Gold, "value", v => v - cost)`
452
594
  * is the one-line form of the `getField` → compute → `setField` round trip.
453
595
  * Returns the written value. Same access-check and observer semantics as the
454
- * two calls it composes. */
455
- updateField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, fn: (current: number) => number): number;
596
+ * two calls it composes (inlined here: the declared-access conditionals on
597
+ * those methods only resolve per `A` instantiation, so a body where `A` is
598
+ * still generic cannot call them without casts). */
599
+ updateField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, fn: (current: number) => number): number;
456
600
  /**
457
601
  * Record an entity as changed for a component's per-entity `onSet` observer
458
602
  * (#517 §1 / ADR-0013). The SoA write idiom — `const col = arch.getColumn(D,
@@ -469,7 +613,7 @@ export declare class SystemContext {
469
613
  * component as changed (the mutable default — see `refRead` for the
470
614
  * read-only variant to reach for when you are not mutating). See ref.ts.
471
615
  */
472
- ref<S extends ComponentSchema>(def: ComponentDef<S>, entityId: EntityID): ComponentRef<S>;
616
+ ref<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>, entityId: EntityID): ComponentRef<SchemaOf<D>>;
473
617
  /**
474
618
  * Create a cached read-only component reference for a single entity. Use
475
619
  * this when you are not mutating. The returned `ReadonlyComponentRef<S>`
@@ -478,34 +622,27 @@ export declare class SystemContext {
478
622
  * underlying accessor shares its prototype with `ref()` and can still be
479
623
  * written through a §10c-policed cast. See ref.ts.
480
624
  */
481
- refRead<S extends ComponentSchema>(def: ComponentDef<S>, entityId: EntityID): ReadonlyComponentRef<S>;
482
- /** Buffer an entity for deferred destruction (applied at phase flush). */
483
- destroyEntity(id: EntityID): this;
484
- addComponent(entityId: EntityID, def: ComponentDef<Record<string, never>>): this;
485
- addComponent<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, values: FieldValues<S>): this;
486
- removeComponent(entityId: EntityID, def: ComponentDef): this;
487
- /** Buffer `entityId` to be disabled at the phase flush (idempotent). */
488
- disable(entityId: EntityID): this;
489
- /** Buffer `entityId` to be re-enabled at the phase flush (idempotent). */
490
- enable(entityId: EntityID): this;
491
- /** Whether `entityId` is currently disabled (immediate read). */
625
+ refRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>, entityId: EntityID): ReadonlyComponentRef<SchemaOf<D>>;
626
+ /** Whether `entityId` is currently disabled (immediate read). Toggling is
627
+ * deferred — `ctx.commands.disable` / `ctx.commands.enable` (#577). */
492
628
  isDisabled(entityId: EntityID): boolean;
493
- addSparse(entityId: EntityID, def: SparseComponentDef<Record<string, never>>): this;
494
- addSparse<S extends ComponentSchema>(entityId: EntityID, def: SparseComponentDef<S>, values: FieldValues<S>): this;
495
- removeSparse(entityId: EntityID, def: SparseComponentDef): this;
629
+ /** Tags take no values argument; valued schemas require a complete one. */
630
+ addSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, ...values: AttachValuesArg<SparseSchemaOf<D>>): this;
631
+ removeSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>): this;
496
632
  hasSparse(entityId: EntityID, def: SparseComponentDef): boolean;
497
- getSparseField<S extends ComponentSchema>(entityId: EntityID, def: SparseComponentDef<S>, field: string & keyof S): number;
498
- setSparseField<S extends ComponentSchema>(entityId: EntityID, def: SparseComponentDef<S>, field: string & keyof S, value: number): void;
633
+ getSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseRead<A, D>, field: string & keyof SparseSchemaOf<D>): number;
634
+ setSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, field: string & keyof SparseSchemaOf<D>, value: number): void;
499
635
  /** Add a `(R, tgt)` pair to `src` (exclusive replaces, multi adds). */
500
- addRelation(src: EntityID, def: RelationDef, tgt: EntityID): this;
636
+ addRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt: EntityID): this;
501
637
  /** Remove a `(R, tgt)` pair from `src`; for multi, omitting `tgt` removes all. */
502
- removeRelation(src: EntityID, def: RelationDef, tgt?: EntityID): this;
638
+ removeRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt?: EntityID): this;
503
639
  /** The single target of `src` under an exclusive relation, or `undefined`. */
504
- targetOf(src: EntityID, def: RelationDef): EntityID | undefined;
640
+ targetOf<D extends RelationDef<"exclusive">>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID | undefined;
505
641
  /** All targets of `src` under `R`, ascending by id. */
506
- targetsOf(src: EntityID, def: RelationDef): EntityID[];
507
- /** Sources pointing at `tgt` under `R` (the reverse index), ascending by id. */
508
- sourcesOf(def: RelationDef, tgt: EntityID): EntityID[];
642
+ targetsOf<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
643
+ /** Sources pointing at `tgt` under `R` (the reverse index), ascending by id.
644
+ * `(entity, def)` order, matching `targetOf` / `targetsOf`. */
645
+ sourcesOf<D extends RelationDef>(tgt: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
509
646
  /** Whether `src` holds any pair under `R`. */
510
647
  hasRelation(src: EntityID, def: RelationDef): boolean;
511
648
  /** Flush all deferred changes: structural (add/remove) first, then
@@ -520,16 +657,40 @@ export declare class SystemContext {
520
657
  * WASM-using system per tick. After #336 the descriptor walk is gated
521
658
  * on a dirty flag, so read-only phases skip the walk entirely. */
522
659
  flush(): void;
660
+ /**
661
+ * Emit an event (or a payload-less signal) onto its channel. The event is
662
+ * visible to every system that runs *later* in the same `update()` and is
663
+ * cleared at the tick's tail — events live exactly one tick, there is no
664
+ * ack/consume. The channel must have been registered at world setup via
665
+ * `ecs.events.register(key, fields)` / `registerSignal(key)`.
666
+ *
667
+ * @example
668
+ * const Damaged = eventKey<{ target: EntityID; amount: number }>("Damaged");
669
+ * ecs.events.register(Damaged, ["target", "amount"]);
670
+ * // inside a system:
671
+ * ctx.emit(Damaged, { target: e, amount: 10 });
672
+ */
523
673
  emit(key: SignalKey): void;
524
- emit<S extends EventSchema>(key: EventKey<S>, values: S): void;
525
- read<S extends EventSchema>(key: EventKey<S>): EventReader<S>;
526
- resource<T>(key: ResourceKey<T>): T;
527
- setResource<T>(key: ResourceKey<T>, value: T): void;
674
+ emit<S extends EventShape<S>>(key: EventKey<S>, values: NoInfer<S>): void;
675
+ /**
676
+ * Read this tick's events on a channel. Returns an SoA reader over
677
+ * everything emitted *earlier in the same `update()`* — order systems so
678
+ * readers run after emitters, or they see an empty reader.
679
+ *
680
+ * @example
681
+ * const dmg = ctx.read(Damaged); // SoA columns, one per field
682
+ * for (let i = 0; i < dmg.length; i++) {
683
+ * applyDamage(dmg.target[i], dmg.amount[i]);
684
+ * }
685
+ */
686
+ read<S extends EventShape<S>>(key: EventKey<S>): EventReader<S>;
687
+ resource<K extends ResourceKey<any>>(key: K & DeclaredResourceRead<A, K>): ResourceValueOf<K>;
688
+ setResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>, value: ResourceValueOf<NoInfer<K>>): void;
528
689
  /** Drop a resource mid-tick (#798). A lifecycle mutation, so it is access-
529
690
  * checked as a *write* — the system must declare the key in `resourceWrites`,
530
691
  * which serialises it against readers/writers of the same resource. Fails
531
692
  * closed on a missing key. */
532
- removeResource<T>(key: ResourceKey<T>): void;
693
+ removeResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>): void;
533
694
  hasResource<T>(key: ResourceKey<T>): boolean;
534
695
  }
535
696
  export declare class ChangedQuery<Defs extends readonly ComponentDef[]> {
@@ -544,7 +705,7 @@ export declare class ChangedQuery<Defs extends readonly ComponentDef[]> {
544
705
  anyOf(...comps: ComponentDef[]): ChangedQuery<Defs>;
545
706
  /** Permit optional-component data access in the loop (mirrors `Query.optional`). */
546
707
  optional(...defs: ComponentDef[]): ChangedQuery<Defs>;
547
- forEach(cb: (arch: ArchetypeView) => void): void;
708
+ forEach(cb: (arch: ArchetypeView<Defs>) => void): void;
548
709
  /** @internal — cold `includeDisabled` wrapper (#577), split out of `forEach`
549
710
  * (#649) so the all-rows flag dance stays out of the inlined hot body. */
550
711
  private _forEachIncludeDisabled;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { ComponentSchema } from './component.cjs';
2
+ import { ArchetypeColumnLayout } from './archetype.cjs';
3
+ import { AnyTypedArray, ColumnBacking } from '../../type_primitives/index.cjs';
4
+ /** Maps component schema to scalar get/set properties: { x: number, y: number }. */
5
+ export type ComponentRef<S extends ComponentSchema> = {
6
+ -readonly [K in keyof S]: number;
7
+ };
8
+ /**
9
+ * Read-only view of a component reference. This is an **advisory** barrier,
10
+ * not a runtime safety boundary: the `readonly` properties block field writes
11
+ * at the type layer, but `createRef` installs working get/set on the shared
12
+ * prototype for both `ref()` and `refRead()`, so a §10c-policed cast can
13
+ * still write through (and would skip the change-tick bump `ref()` performs).
14
+ * Treat it as "I promise I am only reading," enforced by the escape-hatch lint
15
+ * (`bun run lint:escape-hatches`), not by the runtime.
16
+ */
17
+ export type ReadonlyComponentRef<S extends ComponentSchema> = {
18
+ readonly [K in keyof S]: number;
19
+ };
20
+ /** Minimal column group shape needed by createRef. */
21
+ export interface RefColumnGroup {
22
+ readonly layout: ArchetypeColumnLayout;
23
+ readonly columns: ColumnBacking<AnyTypedArray>[];
24
+ }
25
+ /**
26
+ * Create a ComponentRef bound to a specific row in a column group.
27
+ * The prototype is built once per column group and cached; subsequent
28
+ * calls for the same group only allocate the lightweight ref object.
29
+ */
30
+ export declare function createRef<S extends ComponentSchema>(group: RefColumnGroup, row: number): ComponentRef<S>;
31
+ //# sourceMappingURL=ref.d.ts.map
@@ -1,6 +1,6 @@
1
- import { ComponentSchema } from './component';
2
- import { ArchetypeColumnLayout } from './archetype';
3
- import { AnyTypedArray, ColumnBacking } from '../../type_primitives';
1
+ import { ComponentSchema } from './component.js';
2
+ import { ArchetypeColumnLayout } from './archetype.js';
3
+ import { AnyTypedArray, ColumnBacking } from '../../type_primitives/index.js';
4
4
  /** Maps component schema to scalar get/set properties: { x: number, y: number }. */
5
5
  export type ComponentRef<S extends ComponentSchema> = {
6
6
  -readonly [K in keyof S]: number;