@oasys/oecs 0.5.4 → 0.6.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 (510) hide show
  1. package/CHANGELOG.md +1223 -266
  2. package/README.md +217 -112
  3. package/dist/core/ecs/access_check.d.cts +29 -29
  4. package/dist/core/ecs/access_check.d.ts +29 -29
  5. package/dist/core/ecs/access_check.d.ts.map +1 -1
  6. package/dist/core/ecs/archetype.d.cts +217 -209
  7. package/dist/core/ecs/archetype.d.ts +217 -209
  8. package/dist/core/ecs/archetype.d.ts.map +1 -1
  9. package/dist/core/ecs/archetype_closure.d.cts +23 -0
  10. package/dist/core/ecs/archetype_closure.d.ts +23 -0
  11. package/dist/core/ecs/archetype_closure.d.ts.map +1 -0
  12. package/dist/core/ecs/archetype_graph.d.cts +33 -33
  13. package/dist/core/ecs/archetype_graph.d.ts +33 -33
  14. package/dist/core/ecs/archetype_graph.d.ts.map +1 -1
  15. package/dist/core/ecs/archetype_types.d.cts +55 -0
  16. package/dist/core/ecs/archetype_types.d.ts +55 -0
  17. package/dist/core/ecs/archetype_types.d.ts.map +1 -0
  18. package/dist/core/ecs/change_feed.d.cts +53 -0
  19. package/dist/core/ecs/change_feed.d.ts +53 -0
  20. package/dist/core/ecs/change_feed.d.ts.map +1 -0
  21. package/dist/core/ecs/changed_query.d.cts +36 -0
  22. package/dist/core/ecs/changed_query.d.ts +36 -0
  23. package/dist/core/ecs/changed_query.d.ts.map +1 -0
  24. package/dist/core/ecs/chunk_columns.d.cts +49 -0
  25. package/dist/core/ecs/chunk_columns.d.ts +49 -0
  26. package/dist/core/ecs/chunk_columns.d.ts.map +1 -0
  27. package/dist/core/ecs/command_log.d.cts +26 -26
  28. package/dist/core/ecs/command_log.d.ts +26 -26
  29. package/dist/core/ecs/command_log.d.ts.map +1 -1
  30. package/dist/core/ecs/component.d.cts +43 -42
  31. package/dist/core/ecs/component.d.ts +43 -42
  32. package/dist/core/ecs/component.d.ts.map +1 -1
  33. package/dist/core/ecs/component_registry.d.cts +53 -0
  34. package/dist/core/ecs/component_registry.d.ts +53 -0
  35. package/dist/core/ecs/component_registry.d.ts.map +1 -0
  36. package/dist/core/ecs/compute_backend.d.cts +18 -7
  37. package/dist/core/ecs/compute_backend.d.ts +18 -7
  38. package/dist/core/ecs/compute_backend.d.ts.map +1 -1
  39. package/dist/core/ecs/deferred_commands.d.cts +15 -14
  40. package/dist/core/ecs/deferred_commands.d.ts +15 -14
  41. package/dist/core/ecs/deferred_commands.d.ts.map +1 -1
  42. package/dist/core/ecs/dispatch_trace.d.cts +32 -31
  43. package/dist/core/ecs/dispatch_trace.d.ts +32 -31
  44. package/dist/core/ecs/dispatch_trace.d.ts.map +1 -1
  45. package/dist/core/ecs/ecs.d.cts +289 -270
  46. package/dist/core/ecs/ecs.d.ts +289 -270
  47. package/dist/core/ecs/ecs.d.ts.map +1 -1
  48. package/dist/core/ecs/ecs_memory.d.cts +134 -136
  49. package/dist/core/ecs/ecs_memory.d.ts +134 -136
  50. package/dist/core/ecs/ecs_memory.d.ts.map +1 -1
  51. package/dist/core/ecs/ecs_options.d.cts +89 -0
  52. package/dist/core/ecs/ecs_options.d.ts +89 -0
  53. package/dist/core/ecs/ecs_options.d.ts.map +1 -0
  54. package/dist/core/ecs/entity.d.cts +4 -4
  55. package/dist/core/ecs/entity.d.ts +4 -4
  56. package/dist/core/ecs/entity_allocator.d.cts +20 -18
  57. package/dist/core/ecs/entity_allocator.d.ts +20 -18
  58. package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
  59. package/dist/core/ecs/event.d.cts +36 -22
  60. package/dist/core/ecs/event.d.ts +36 -22
  61. package/dist/core/ecs/event.d.ts.map +1 -1
  62. package/dist/core/ecs/facades.d.cts +12 -126
  63. package/dist/core/ecs/facades.d.ts +12 -126
  64. package/dist/core/ecs/facades.d.ts.map +1 -1
  65. package/dist/core/ecs/frame_stepper.d.cts +12 -12
  66. package/dist/core/ecs/frame_stepper.d.ts +12 -12
  67. package/dist/core/ecs/frame_stepper.d.ts.map +1 -1
  68. package/dist/core/ecs/frame_trace.d.cts +32 -32
  69. package/dist/core/ecs/frame_trace.d.ts +32 -32
  70. package/dist/core/ecs/frame_trace.d.ts.map +1 -1
  71. package/dist/core/ecs/host_commands.d.cts +103 -85
  72. package/dist/core/ecs/host_commands.d.ts +103 -85
  73. package/dist/core/ecs/host_commands.d.ts.map +1 -1
  74. package/dist/core/ecs/index.d.cts +21 -11
  75. package/dist/core/ecs/index.d.ts +21 -11
  76. package/dist/core/ecs/index.d.ts.map +1 -1
  77. package/dist/core/ecs/observer.d.cts +39 -120
  78. package/dist/core/ecs/observer.d.ts +39 -120
  79. package/dist/core/ecs/observer.d.ts.map +1 -1
  80. package/dist/core/ecs/phase.d.cts +79 -0
  81. package/dist/core/ecs/phase.d.ts +79 -0
  82. package/dist/core/ecs/phase.d.ts.map +1 -0
  83. package/dist/core/ecs/plugin.d.cts +125 -0
  84. package/dist/core/ecs/plugin.d.ts +125 -0
  85. package/dist/core/ecs/plugin.d.ts.map +1 -0
  86. package/dist/core/ecs/plugin_slots.d.cts +26 -0
  87. package/dist/core/ecs/plugin_slots.d.ts +26 -0
  88. package/dist/core/ecs/plugin_slots.d.ts.map +1 -0
  89. package/dist/core/ecs/query.d.cts +208 -578
  90. package/dist/core/ecs/query.d.ts +208 -578
  91. package/dist/core/ecs/query.d.ts.map +1 -1
  92. package/dist/core/ecs/query_cache.d.cts +130 -0
  93. package/dist/core/ecs/query_cache.d.ts +130 -0
  94. package/dist/core/ecs/query_cache.d.ts.map +1 -0
  95. package/dist/core/ecs/query_registry.d.cts +47 -0
  96. package/dist/core/ecs/query_registry.d.ts +47 -0
  97. package/dist/core/ecs/query_registry.d.ts.map +1 -0
  98. package/dist/core/ecs/query_terms.d.cts +126 -0
  99. package/dist/core/ecs/query_terms.d.ts +126 -0
  100. package/dist/core/ecs/query_terms.d.ts.map +1 -0
  101. package/dist/core/ecs/ref.d.cts +100 -39
  102. package/dist/core/ecs/ref.d.ts +100 -39
  103. package/dist/core/ecs/ref.d.ts.map +1 -1
  104. package/dist/core/ecs/relation.d.cts +101 -182
  105. package/dist/core/ecs/relation.d.ts +101 -182
  106. package/dist/core/ecs/relation.d.ts.map +1 -1
  107. package/dist/core/ecs/resource.d.cts +13 -13
  108. package/dist/core/ecs/resource.d.ts +13 -13
  109. package/dist/core/ecs/resource_registry.d.cts +5 -5
  110. package/dist/core/ecs/resource_registry.d.ts +5 -5
  111. package/dist/core/ecs/resource_registry.d.ts.map +1 -1
  112. package/dist/core/ecs/row_kinds.d.cts +24 -0
  113. package/dist/core/ecs/row_kinds.d.ts +24 -0
  114. package/dist/core/ecs/row_kinds.d.ts.map +1 -0
  115. package/dist/core/ecs/run_condition.d.cts +23 -23
  116. package/dist/core/ecs/run_condition.d.ts +23 -23
  117. package/dist/core/ecs/run_condition.d.ts.map +1 -1
  118. package/dist/core/ecs/schedule.d.cts +91 -120
  119. package/dist/core/ecs/schedule.d.ts +91 -120
  120. package/dist/core/ecs/schedule.d.ts.map +1 -1
  121. package/dist/core/ecs/schedule_plan.d.cts +33 -0
  122. package/dist/core/ecs/schedule_plan.d.ts +33 -0
  123. package/dist/core/ecs/schedule_plan.d.ts.map +1 -0
  124. package/dist/core/ecs/snapshot.d.cts +77 -0
  125. package/dist/core/ecs/snapshot.d.ts +77 -0
  126. package/dist/core/ecs/snapshot.d.ts.map +1 -0
  127. package/dist/core/ecs/snapshot_mount.d.cts +42 -0
  128. package/dist/core/ecs/snapshot_mount.d.ts +42 -0
  129. package/dist/core/ecs/snapshot_mount.d.ts.map +1 -0
  130. package/dist/core/ecs/sparse_store.d.cts +108 -51
  131. package/dist/core/ecs/sparse_store.d.ts +108 -51
  132. package/dist/core/ecs/sparse_store.d.ts.map +1 -1
  133. package/dist/core/ecs/store.d.cts +527 -473
  134. package/dist/core/ecs/store.d.ts +527 -473
  135. package/dist/core/ecs/store.d.ts.map +1 -1
  136. package/dist/core/ecs/store_layout_listener.d.cts +6 -6
  137. package/dist/core/ecs/store_layout_listener.d.ts +6 -6
  138. package/dist/core/ecs/store_types.d.cts +122 -0
  139. package/dist/core/ecs/store_types.d.ts +122 -0
  140. package/dist/core/ecs/store_types.d.ts.map +1 -0
  141. package/dist/core/ecs/system.d.cts +146 -61
  142. package/dist/core/ecs/system.d.ts +146 -61
  143. package/dist/core/ecs/system.d.ts.map +1 -1
  144. package/dist/core/ecs/system_context.d.cts +296 -0
  145. package/dist/core/ecs/system_context.d.ts +296 -0
  146. package/dist/core/ecs/system_context.d.ts.map +1 -0
  147. package/dist/core/ecs/system_set.d.cts +48 -0
  148. package/dist/core/ecs/system_set.d.ts +48 -0
  149. package/dist/core/ecs/system_set.d.ts.map +1 -0
  150. package/dist/core/ecs/utils/arrays.d.cts +15 -1
  151. package/dist/core/ecs/utils/arrays.d.ts +15 -1
  152. package/dist/core/ecs/utils/arrays.d.ts.map +1 -1
  153. package/dist/core/ecs/utils/error.d.cts +82 -6
  154. package/dist/core/ecs/utils/error.d.ts +82 -6
  155. package/dist/core/ecs/utils/error.d.ts.map +1 -1
  156. package/dist/core/ecs/utils/plugin_error.d.cts +10 -0
  157. package/dist/core/ecs/utils/plugin_error.d.ts +10 -0
  158. package/dist/core/ecs/utils/plugin_error.d.ts.map +1 -0
  159. package/dist/core/restore_errors.d.cts +30 -0
  160. package/dist/core/restore_errors.d.ts +30 -0
  161. package/dist/core/restore_errors.d.ts.map +1 -0
  162. package/dist/core/store/action_ring.d.cts +44 -44
  163. package/dist/core/store/action_ring.d.ts +44 -44
  164. package/dist/core/store/action_ring.d.ts.map +1 -1
  165. package/dist/core/store/allocator.d.cts +149 -95
  166. package/dist/core/store/allocator.d.ts +149 -95
  167. package/dist/core/store/allocator.d.ts.map +1 -1
  168. package/dist/core/store/buffer_backed_column.d.cts +17 -17
  169. package/dist/core/store/buffer_backed_column.d.ts +17 -17
  170. package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
  171. package/dist/core/store/column_store.d.cts +124 -86
  172. package/dist/core/store/column_store.d.ts +124 -86
  173. package/dist/core/store/column_store.d.ts.map +1 -1
  174. package/dist/core/store/command_dispatch.d.cts +14 -15
  175. package/dist/core/store/command_dispatch.d.ts +14 -15
  176. package/dist/core/store/command_dispatch.d.ts.map +1 -1
  177. package/dist/core/store/command_ring.d.cts +36 -39
  178. package/dist/core/store/command_ring.d.ts +36 -39
  179. package/dist/core/store/command_ring.d.ts.map +1 -1
  180. package/dist/core/store/descriptor.d.cts +34 -17
  181. package/dist/core/store/descriptor.d.ts +34 -17
  182. package/dist/core/store/descriptor.d.ts.map +1 -1
  183. package/dist/core/store/entity_index.d.cts +34 -35
  184. package/dist/core/store/entity_index.d.ts +34 -35
  185. package/dist/core/store/entity_index.d.ts.map +1 -1
  186. package/dist/core/store/event_ring.d.cts +36 -38
  187. package/dist/core/store/event_ring.d.ts +36 -38
  188. package/dist/core/store/event_ring.d.ts.map +1 -1
  189. package/dist/core/store/extend.d.cts +13 -7
  190. package/dist/core/store/extend.d.ts +13 -7
  191. package/dist/core/store/extend.d.ts.map +1 -1
  192. package/dist/core/store/grow.d.cts +2 -2
  193. package/dist/core/store/grow.d.ts +2 -2
  194. package/dist/core/store/grow.d.ts.map +1 -1
  195. package/dist/core/store/header.d.cts +31 -27
  196. package/dist/core/store/header.d.ts +31 -27
  197. package/dist/core/store/header.d.ts.map +1 -1
  198. package/dist/core/store/index.d.cts +10 -10
  199. package/dist/core/store/index.d.ts +10 -10
  200. package/dist/core/store/index.d.ts.map +1 -1
  201. package/dist/core/store/layout_ops.d.cts +71 -62
  202. package/dist/core/store/layout_ops.d.ts +71 -62
  203. package/dist/core/store/layout_ops.d.ts.map +1 -1
  204. package/dist/core/store/region_table.d.cts +28 -21
  205. package/dist/core/store/region_table.d.ts +28 -21
  206. package/dist/core/store/region_table.d.ts.map +1 -1
  207. package/dist/core/store/snapshot.d.cts +31 -16
  208. package/dist/core/store/snapshot.d.ts +31 -16
  209. package/dist/core/store/snapshot.d.ts.map +1 -1
  210. package/dist/core/store/state_hash.d.cts +12 -12
  211. package/dist/core/store/state_hash.d.ts +12 -12
  212. package/dist/core/store/state_hash.d.ts.map +1 -1
  213. package/dist/core/store/store_regions.d.cts +10 -10
  214. package/dist/core/store/store_regions.d.ts +10 -10
  215. package/dist/core/store/store_regions.d.ts.map +1 -1
  216. package/dist/core/store/vendored_abi/abi.d.cts +27 -2
  217. package/dist/core/store/vendored_abi/abi.d.ts +27 -2
  218. package/dist/core/store/vendored_abi/abi.d.ts.map +1 -1
  219. package/dist/host_commands-B2KMx8O2.cjs +1 -0
  220. package/dist/host_commands-ClVPvhSa.cjs +2 -0
  221. package/dist/host_commands-CwxVQS1z.js +1524 -0
  222. package/dist/host_commands-nJvTy88E.js +1667 -0
  223. package/dist/index.cjs +1 -1
  224. package/dist/index.d.cts +15 -10
  225. package/dist/index.d.ts +15 -10
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.development.cjs +1 -1
  228. package/dist/index.development.js +5804 -5203
  229. package/dist/index.js +5323 -4764
  230. package/dist/internal.cjs +2 -2
  231. package/dist/internal.d.cts +5 -2
  232. package/dist/internal.d.ts +5 -2
  233. package/dist/internal.d.ts.map +1 -1
  234. package/dist/internal.development.cjs +1 -1
  235. package/dist/internal.development.js +70 -20
  236. package/dist/internal.js +138 -83
  237. package/dist/plugins/abi-D3V-QUSf.cjs +1 -0
  238. package/dist/plugins/abi-NP8pNxpd.js +42 -0
  239. package/dist/plugins/arrays-Dr_1hCjL.js +28 -0
  240. package/dist/plugins/arrays-Dt-Joc4i.cjs +1 -0
  241. package/dist/plugins/assertions-gtDVfbnQ.js +6 -0
  242. package/dist/plugins/assertions-z5GQd_bB.cjs +1 -0
  243. package/dist/{extensions → plugins}/editor/editor.d.cts +54 -54
  244. package/dist/{extensions → plugins}/editor/editor.d.ts +54 -54
  245. package/dist/plugins/editor/editor.d.ts.map +1 -0
  246. package/dist/{extensions → plugins}/editor/field_handle.d.cts +12 -12
  247. package/dist/{extensions → plugins}/editor/field_handle.d.ts +12 -12
  248. package/dist/plugins/editor/field_handle.d.ts.map +1 -0
  249. package/dist/plugins/editor/index.d.cts +22 -0
  250. package/dist/plugins/editor/index.d.ts +22 -0
  251. package/dist/plugins/editor/index.d.ts.map +1 -0
  252. package/dist/plugins/editor.cjs +1 -0
  253. package/dist/plugins/editor.d.cts +1 -0
  254. package/dist/plugins/editor.d.ts +1 -0
  255. package/dist/plugins/editor.development.cjs +1 -0
  256. package/dist/{extensions/editor/index.development.js → plugins/editor.development.js} +81 -64
  257. package/dist/{extensions/editor/index.js → plugins/editor.js} +81 -64
  258. package/dist/plugins/events/event_channel.d.cts +13 -0
  259. package/dist/plugins/events/event_channel.d.ts +13 -0
  260. package/dist/plugins/events/event_channel.d.ts.map +1 -0
  261. package/dist/plugins/events/event_registry.d.cts +22 -0
  262. package/dist/plugins/events/event_registry.d.ts +22 -0
  263. package/dist/plugins/events/event_registry.d.ts.map +1 -0
  264. package/dist/plugins/events/facade.d.cts +26 -0
  265. package/dist/plugins/events/facade.d.ts +26 -0
  266. package/dist/plugins/events/facade.d.ts.map +1 -0
  267. package/dist/plugins/events/index.d.cts +10 -0
  268. package/dist/plugins/events/index.d.ts +10 -0
  269. package/dist/plugins/events/index.d.ts.map +1 -0
  270. package/dist/plugins/events.cjs +1 -0
  271. package/dist/plugins/events.d.cts +1 -0
  272. package/dist/plugins/events.d.ts +1 -0
  273. package/dist/plugins/events.development.cjs +1 -0
  274. package/dist/plugins/events.development.js +174 -0
  275. package/dist/plugins/events.js +159 -0
  276. package/dist/plugins/observers/index.d.cts +23 -0
  277. package/dist/plugins/observers/index.d.ts +23 -0
  278. package/dist/plugins/observers/index.d.ts.map +1 -0
  279. package/dist/plugins/observers/observer_registry.d.cts +101 -0
  280. package/dist/plugins/observers/observer_registry.d.ts +101 -0
  281. package/dist/plugins/observers/observer_registry.d.ts.map +1 -0
  282. package/dist/plugins/observers.cjs +1 -0
  283. package/dist/plugins/observers.d.cts +1 -0
  284. package/dist/plugins/observers.d.ts +1 -0
  285. package/dist/plugins/observers.development.cjs +1 -0
  286. package/dist/plugins/observers.development.js +431 -0
  287. package/dist/plugins/observers.js +403 -0
  288. package/dist/plugins/relation_store-BsoegrZh.js +313 -0
  289. package/dist/plugins/relation_store-DQKSnxsm.cjs +1 -0
  290. package/dist/plugins/relation_store-RBhpcE28.cjs +1 -0
  291. package/dist/plugins/relation_store-RqW5Snx6.js +328 -0
  292. package/dist/plugins/relations/builtin_relations.d.cts +48 -0
  293. package/dist/plugins/relations/builtin_relations.d.ts +48 -0
  294. package/dist/plugins/relations/builtin_relations.d.ts.map +1 -0
  295. package/dist/plugins/relations/facade.d.cts +73 -0
  296. package/dist/plugins/relations/facade.d.ts +73 -0
  297. package/dist/plugins/relations/facade.d.ts.map +1 -0
  298. package/dist/plugins/relations/index.d.cts +11 -0
  299. package/dist/plugins/relations/index.d.ts +11 -0
  300. package/dist/plugins/relations/index.d.ts.map +1 -0
  301. package/dist/{core/ecs → plugins/relations}/relation_service.d.cts +85 -97
  302. package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +85 -97
  303. package/dist/plugins/relations/relation_service.d.ts.map +1 -0
  304. package/dist/plugins/relations/relation_store.d.cts +177 -0
  305. package/dist/plugins/relations/relation_store.d.ts +177 -0
  306. package/dist/plugins/relations/relation_store.d.ts.map +1 -0
  307. package/dist/plugins/relations.cjs +1 -0
  308. package/dist/plugins/relations.d.cts +1 -0
  309. package/dist/plugins/relations.d.ts +1 -0
  310. package/dist/plugins/relations.development.cjs +1 -0
  311. package/dist/plugins/relations.development.js +603 -0
  312. package/dist/plugins/relations.js +553 -0
  313. package/dist/plugins/snapshots/index.d.cts +33 -0
  314. package/dist/plugins/snapshots/index.d.ts +33 -0
  315. package/dist/plugins/snapshots/index.d.ts.map +1 -0
  316. package/dist/plugins/snapshots/resume.d.cts +57 -0
  317. package/dist/plugins/snapshots/resume.d.ts +57 -0
  318. package/dist/plugins/snapshots/resume.d.ts.map +1 -0
  319. package/dist/plugins/snapshots/snapshot_service.d.cts +59 -0
  320. package/dist/plugins/snapshots/snapshot_service.d.ts +59 -0
  321. package/dist/plugins/snapshots/snapshot_service.d.ts.map +1 -0
  322. package/dist/plugins/snapshots.cjs +1 -0
  323. package/dist/plugins/snapshots.d.cts +1 -0
  324. package/dist/plugins/snapshots.d.ts +1 -0
  325. package/dist/plugins/snapshots.development.cjs +1 -0
  326. package/dist/plugins/snapshots.development.js +737 -0
  327. package/dist/plugins/snapshots.js +737 -0
  328. package/dist/plugins/solid/index.d.cts +8 -0
  329. package/dist/plugins/solid/index.d.ts +8 -0
  330. package/dist/plugins/solid/index.d.ts.map +1 -0
  331. package/dist/plugins/solid/solid.d.cts +97 -0
  332. package/dist/plugins/solid/solid.d.ts +97 -0
  333. package/dist/plugins/solid/solid.d.ts.map +1 -0
  334. package/dist/plugins/solid.cjs +1 -0
  335. package/dist/plugins/solid.d.cts +1 -0
  336. package/dist/plugins/solid.d.ts +1 -0
  337. package/dist/plugins/solid.development.cjs +1 -0
  338. package/dist/plugins/solid.development.js +319 -0
  339. package/dist/plugins/solid.js +319 -0
  340. package/dist/plugins/workers/index.d.cts +75 -0
  341. package/dist/plugins/workers/index.d.ts +75 -0
  342. package/dist/plugins/workers/index.d.ts.map +1 -0
  343. package/dist/plugins/workers/node_threads.d.cts +25 -0
  344. package/dist/plugins/workers/node_threads.d.ts +25 -0
  345. package/dist/plugins/workers/node_threads.d.ts.map +1 -0
  346. package/dist/plugins/workers/plan.d.cts +61 -0
  347. package/dist/plugins/workers/plan.d.ts +61 -0
  348. package/dist/plugins/workers/plan.d.ts.map +1 -0
  349. package/dist/plugins/workers/pool.d.cts +144 -0
  350. package/dist/plugins/workers/pool.d.ts +144 -0
  351. package/dist/plugins/workers/pool.d.ts.map +1 -0
  352. package/dist/plugins/workers/protocol.d.cts +112 -0
  353. package/dist/plugins/workers/protocol.d.ts +112 -0
  354. package/dist/plugins/workers/protocol.d.ts.map +1 -0
  355. package/dist/plugins/workers/worker_bind.d.cts +64 -0
  356. package/dist/plugins/workers/worker_bind.d.ts +64 -0
  357. package/dist/plugins/workers/worker_bind.d.ts.map +1 -0
  358. package/dist/plugins/workers/worker_loop.d.cts +14 -0
  359. package/dist/plugins/workers/worker_loop.d.ts +14 -0
  360. package/dist/plugins/workers/worker_loop.d.ts.map +1 -0
  361. package/dist/plugins/workers.cjs +1 -0
  362. package/dist/plugins/workers.d.cts +1 -0
  363. package/dist/plugins/workers.d.ts +1 -0
  364. package/dist/plugins/workers.development.cjs +1 -0
  365. package/dist/plugins/workers.development.js +596 -0
  366. package/dist/plugins/workers.js +474 -0
  367. package/dist/primitives.cjs +1 -1
  368. package/dist/primitives.d.cts +4 -4
  369. package/dist/primitives.d.ts +4 -4
  370. package/dist/primitives.development.cjs +1 -1
  371. package/dist/primitives.development.js +66 -22
  372. package/dist/primitives.js +66 -22
  373. package/dist/shared-BKl12xF1.js +132 -0
  374. package/dist/shared-Dk-pACZT.cjs +1 -0
  375. package/dist/shared.cjs +1 -1
  376. package/dist/shared.d.cts +7 -7
  377. package/dist/shared.d.ts +7 -7
  378. package/dist/shared.d.ts.map +1 -1
  379. package/dist/shared.development.cjs +1 -1
  380. package/dist/shared.development.js +4 -3
  381. package/dist/shared.js +4 -3
  382. package/dist/topological_sort-Cc_yXqPT.js +346 -0
  383. package/dist/topological_sort-vp1imU6D.cjs +1 -0
  384. package/dist/type_primitives/assertions.d.cts +12 -16
  385. package/dist/type_primitives/assertions.d.ts +12 -16
  386. package/dist/type_primitives/assertions.d.ts.map +1 -1
  387. package/dist/type_primitives/binary_heap/binary_heap.d.cts +2 -6
  388. package/dist/type_primitives/binary_heap/binary_heap.d.ts +2 -6
  389. package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
  390. package/dist/type_primitives/bitset/bitset.d.cts +7 -11
  391. package/dist/type_primitives/bitset/bitset.d.ts +7 -11
  392. package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
  393. package/dist/type_primitives/brand.d.cts +2 -7
  394. package/dist/type_primitives/brand.d.ts +2 -7
  395. package/dist/type_primitives/brand.d.ts.map +1 -1
  396. package/dist/type_primitives/error.d.cts +1 -2
  397. package/dist/type_primitives/error.d.ts +1 -2
  398. package/dist/type_primitives/error.d.ts.map +1 -1
  399. package/dist/type_primitives/index.d.cts +1 -1
  400. package/dist/type_primitives/index.d.ts +1 -1
  401. package/dist/type_primitives/sparse_map/sparse_map.d.cts +3 -7
  402. package/dist/type_primitives/sparse_map/sparse_map.d.ts +3 -7
  403. package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
  404. package/dist/type_primitives/sparse_set/sparse_set.d.cts +2 -6
  405. package/dist/type_primitives/sparse_set/sparse_set.d.ts +2 -6
  406. package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
  407. package/dist/type_primitives/topological_sort/topological_sort.d.cts +1 -5
  408. package/dist/type_primitives/topological_sort/topological_sort.d.ts +1 -5
  409. package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
  410. package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +16 -15
  411. package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +16 -15
  412. package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
  413. package/dist/utils/error.d.ts.map +1 -1
  414. package/dist/version.d.cts +3 -3
  415. package/dist/version.d.ts +3 -3
  416. package/dist/worker.cjs +1 -0
  417. package/dist/worker.d.cts +17 -0
  418. package/dist/worker.d.ts +17 -0
  419. package/dist/worker.d.ts.map +1 -0
  420. package/dist/worker.development.cjs +1 -0
  421. package/dist/worker.development.js +253 -0
  422. package/dist/worker.js +253 -0
  423. package/package.json +363 -191
  424. package/dist/core/ecs/builtin_relations.d.cts +0 -43
  425. package/dist/core/ecs/builtin_relations.d.ts +0 -43
  426. package/dist/core/ecs/builtin_relations.d.ts.map +0 -1
  427. package/dist/core/ecs/event_registry.d.cts +0 -22
  428. package/dist/core/ecs/event_registry.d.ts +0 -22
  429. package/dist/core/ecs/event_registry.d.ts.map +0 -1
  430. package/dist/core/ecs/relation_service.d.ts.map +0 -1
  431. package/dist/core/ecs/resume.d.cts +0 -85
  432. package/dist/core/ecs/resume.d.ts +0 -85
  433. package/dist/core/ecs/resume.d.ts.map +0 -1
  434. package/dist/core/ecs/snapshot_service.d.cts +0 -94
  435. package/dist/core/ecs/snapshot_service.d.ts +0 -94
  436. package/dist/core/ecs/snapshot_service.d.ts.map +0 -1
  437. package/dist/extensions/editor/editor.d.ts.map +0 -1
  438. package/dist/extensions/editor/field_handle.d.ts.map +0 -1
  439. package/dist/extensions/editor/index.cjs +0 -1
  440. package/dist/extensions/editor/index.d.cts +0 -21
  441. package/dist/extensions/editor/index.d.ts +0 -21
  442. package/dist/extensions/editor/index.d.ts.map +0 -1
  443. package/dist/extensions/editor/index.development.cjs +0 -1
  444. package/dist/extensions/reactive/ecs_sync.d.cts +0 -214
  445. package/dist/extensions/reactive/ecs_sync.d.ts +0 -214
  446. package/dist/extensions/reactive/ecs_sync.d.ts.map +0 -1
  447. package/dist/extensions/reactive/index.cjs +0 -1
  448. package/dist/extensions/reactive/index.d.cts +0 -23
  449. package/dist/extensions/reactive/index.d.ts +0 -23
  450. package/dist/extensions/reactive/index.d.ts.map +0 -1
  451. package/dist/extensions/reactive/index.development.cjs +0 -1
  452. package/dist/extensions/reactive/index.development.js +0 -215
  453. package/dist/extensions/reactive/index.js +0 -215
  454. package/dist/extensions/solid/index.cjs +0 -1
  455. package/dist/extensions/solid/index.d.cts +0 -6
  456. package/dist/extensions/solid/index.d.ts +0 -6
  457. package/dist/extensions/solid/index.d.ts.map +0 -1
  458. package/dist/extensions/solid/index.development.cjs +0 -1
  459. package/dist/extensions/solid/index.development.js +0 -40
  460. package/dist/extensions/solid/index.js +0 -36
  461. package/dist/extensions/solid/kernel_solid.d.cts +0 -45
  462. package/dist/extensions/solid/kernel_solid.d.ts +0 -45
  463. package/dist/extensions/solid/kernel_solid.d.ts.map +0 -1
  464. package/dist/host_commands-BlR3oZ3x.js +0 -2406
  465. package/dist/host_commands-C2cpU3yC.cjs +0 -1
  466. package/dist/internal-BoxWl4dG.js +0 -2565
  467. package/dist/internal-CGBEwfeB.cjs +0 -2
  468. package/dist/interop-CT-REx0W.cjs +0 -1
  469. package/dist/interop-CcY6ASQc.js +0 -18
  470. package/dist/interop-DqxleBo7.js +0 -18
  471. package/dist/interop-T1HZ-Dpa.cjs +0 -1
  472. package/dist/kernel-Cz2Kxlwl.js +0 -240
  473. package/dist/kernel-DgyrLFjW.js +0 -227
  474. package/dist/kernel-sw7ScKWu.cjs +0 -1
  475. package/dist/kernel-yWV3XnAb.cjs +0 -1
  476. package/dist/reactive/array.d.cts +0 -24
  477. package/dist/reactive/array.d.ts +0 -24
  478. package/dist/reactive/array.d.ts.map +0 -1
  479. package/dist/reactive/index.cjs +0 -1
  480. package/dist/reactive/index.d.cts +0 -11
  481. package/dist/reactive/index.d.ts +0 -11
  482. package/dist/reactive/index.d.ts.map +0 -1
  483. package/dist/reactive/index.development.cjs +0 -1
  484. package/dist/reactive/index.development.js +0 -18
  485. package/dist/reactive/index.js +0 -18
  486. package/dist/reactive/interop.d.cts +0 -19
  487. package/dist/reactive/interop.d.ts +0 -19
  488. package/dist/reactive/interop.d.ts.map +0 -1
  489. package/dist/reactive/kernel.d.cts +0 -73
  490. package/dist/reactive/kernel.d.ts +0 -73
  491. package/dist/reactive/kernel.d.ts.map +0 -1
  492. package/dist/reactive/map.d.cts +0 -16
  493. package/dist/reactive/map.d.ts +0 -16
  494. package/dist/reactive/map.d.ts.map +0 -1
  495. package/dist/reactive/shallow.d.cts +0 -11
  496. package/dist/reactive/shallow.d.ts +0 -11
  497. package/dist/reactive/shallow.d.ts.map +0 -1
  498. package/dist/reactive/struct.d.cts +0 -10
  499. package/dist/reactive/struct.d.ts +0 -10
  500. package/dist/reactive/struct.d.ts.map +0 -1
  501. package/dist/shallow-Bs39EPh1.js +0 -150
  502. package/dist/shallow-C5YmTbtb.cjs +0 -1
  503. package/dist/shallow-CiFC70Dz.js +0 -159
  504. package/dist/shallow-DQ8aG51_.cjs +0 -1
  505. package/dist/shared-B4v0L1cw.js +0 -109
  506. package/dist/shared-DU78k0pU.cjs +0 -1
  507. package/dist/topological_sort-BDvEyb9W.cjs +0 -1
  508. package/dist/topological_sort-DK6EjpWa.js +0 -135
  509. package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
  510. package/dist/typed_arrays-DIVwVy5_.js +0 -258
@@ -0,0 +1,296 @@
1
+ import { Store } from './store.cjs';
2
+ import { FrameTraceSink } from './frame_trace.cjs';
3
+ import { EntityID } from './entity.cjs';
4
+ import { ComponentDef, AttachValuesArg, SchemaOf, FieldValues } from './component.cjs';
5
+ import { SparseComponentDef, SparseSchemaOf } from './sparse_store.cjs';
6
+ import { RelationDef } from './relation.cjs';
7
+ import { SystemAccess, DeclaredRead, DeclaredWrite, DeclaredAdd, DeclaredRemove, DeclaredSparseRead, DeclaredSparseWrite, DeclaredRelationRead, DeclaredRelationWrite, DeclaredResourceRead, DeclaredResourceWrite, DespawnArg } from './system.cjs';
8
+ import { ComponentCursor, ComponentRef, ReadonlyComponentCursor, ReadonlyComponentRef } from './ref.cjs';
9
+ import { EventKey, EventReader, EventShape, SignalKey } from './event.cjs';
10
+ import { ResourceKey, ResourceValueOf } from './resource.cjs';
11
+ /**
12
+ * A `BundleOrDef` whose def is constrained to the enclosing system's declared
13
+ * add surface (system.ts). The bundle branch restates `Bundle`'s shape with
14
+ * the def slot narrowed, intersecting `Bundle<any> & { def: … }` instead
15
+ * would put two `ComponentDef` instantiations in one intersection, which TS
16
+ * relates leniently (see the access-typing notes in system.ts).
17
+ *
18
+ * The outer conditional is a deliberate no-op (`[D] extends [unknown]` is
19
+ * always true): it makes the variance of `D`, and therefore of the access
20
+ * param `A` threaded through `Commands` and `SystemContext`. Unmeasurable to
21
+ * the compiler. A measurable (plain-union) definition here gets `A` marked
22
+ * reliably contravariant, variance-based comparison then rejects
23
+ * `SystemContext<Narrow> → SystemContext` without the structural fallback,
24
+ * and every helper taking a bare `SystemContext` stops accepting typed
25
+ * contexts. Unmeasurable variance forces the structural path, where class
26
+ * methods compare bivariantly and the conversion holds.
27
+ *
28
+ * The inner `D extends ComponentDef ? … : never` Distributes over the declared
29
+ * add-set union, so each raw-literal branch carries its own def's schema
30
+ * (`Partial<FieldValues<SchemaOf<D>>>`) rather than the erased
31
+ * `Partial<Record<string, number>>`. A hand-written `{ def: Vel, values: { x }}`
32
+ * whose fields don't match its def is then rejected in a declared-access system,
33
+ * matching the `StrictBundles` guarantee on the `ecs.*` surface. A permissive
34
+ * context (`add: ComponentDef<any>`, an unnarrowed or `exclusive` system)
35
+ * keeps the loose shape, which is the point of opting out of narrowing. The
36
+ * outer no-op is preserved, so the variance invariant above still holds
37
+ * (verified: the `permissiveHelper(ctx)` assertion still compiles).
38
+ */
39
+ export type DeclaredBundleOrDef<D> = [D] extends [unknown] ? D extends ComponentDef ? D | {
40
+ readonly def: D;
41
+ readonly values: Readonly<Partial<FieldValues<SchemaOf<D>>>>;
42
+ } : never : never;
43
+ /**
44
+ * Deferred structural-command facade (Bevy `Commands`).
45
+ * Namespaces the deferred structural ops so the call site is self-documenting:
46
+ * `ctx.commands.add(e, …)` is *always* deferred (applied at the phase flush),
47
+ * ending the collision where `ecs.addComponent` (immediate) and a bare
48
+ * `ctx.addComponent` (deferred) would share a name with opposite timing. Takes
49
+ * varargs callable bundles, so one shape, `commands.spawn(bundle(Pos,{x,y}), bundle(Vel,{vx:1}))`,
50
+ * serves spawn and add. This is the only deferred surface: the bare
51
+ * `ctx.addComponent`, `ctx.removeComponent`, `ctx.disable` and `ctx.enable`
52
+ * duplicates were removed in 0.5.0, completing the receiver-implies-timing
53
+ * rule (`ecs.*` immediate, `ctx.commands.*` deferred) that 0.5.0 started for
54
+ * spawn and despawn.
55
+ *
56
+ * `A` narrows the def-taking methods to the enclosing system's declared access
57
+ * (system.ts). The default is fully permissive.
58
+ *
59
+ * `out A` (declared covariance) is deliberate: every use of `A` sits inside a
60
+ * declared-access conditional, whose variance the compiler cannot measure,
61
+ * left unannotated, the measured verdict rejects `Commands<Narrow> →
62
+ * Commands` (the direction every permissive consumer needs). Covariance is
63
+ * the honest direction: a context with more declared access is usable where
64
+ * one with less is expected. The checks themselves are per-instantiation, so
65
+ * the annotation does not weaken them.
66
+ */
67
+ export declare class Commands<out A extends SystemAccess = SystemAccess> {
68
+ private readonly _store;
69
+ constructor(_store: Store);
70
+ /** Spawn from bundles. The create is immediate, so the id returns now. The
71
+ * component attaches are deferred to the phase flush, so until that flush the
72
+ * entity exists in its empty and partial archetype and a query running later in
73
+ * the same phase can observe it half-built. (Same semantics as
74
+ * `ctx.commands.spawn()` followed by `ctx.commands.add`. A fully deferred
75
+ * id-reservation spawn, à la Bevy, is a separate follow-up.) */
76
+ spawn(...items: DeclaredBundleOrDef<A["add"]>[]): EntityID;
77
+ /** Attach bundles to an existing entity (deferred). Bundles zero-fill
78
+ * omitted fields. */
79
+ add(entityId: EntityID, ...items: DeclaredBundleOrDef<A["add"]>[]): this;
80
+ /** Explicit complete-values attach (deferred), the compile-checked shape
81
+ * where a typo'd or missing field is a compile error, mirroring the
82
+ * immediate `ecs.addComponent(e, def, values)`. Tags take no values
83
+ * argument (`AttachValuesArg`). */
84
+ add<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredAdd<A, D>, ...values: AttachValuesArg<SchemaOf<D>>): this;
85
+ /** Remove a component (deferred). */
86
+ remove<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRemove<A, D>): this;
87
+ /** Destroy an entity (deferred). */
88
+ despawn(entityId: DespawnArg<A>): this;
89
+ /** Buffer `entityId` to be disabled at the phase flush (idempotent).
90
+ * Deferred because a toggle is an in-archetype row swap, which would corrupt
91
+ * a `forEach` SoA loop iterating that archetype if applied mid-system (it
92
+ * reorders the dense columns being read). A disabled entity is excluded from
93
+ * default queries. Opt back in per query with `.includeDisabled()`. The
94
+ * immediate read is `ctx.isDisabled`. */
95
+ disable(entityId: EntityID): this;
96
+ /** Buffer `entityId` to be re-enabled at the phase flush (idempotent).
97
+ * Deferred for the same row-swap reason as `disable`. */
98
+ enable(entityId: EntityID): this;
99
+ }
100
+ /**
101
+ * The per-system world facade. `A` is the system's declared access surface
102
+ * (system.ts): the config-form `registerSystem` computes it from
103
+ * the literal `reads` and `writes`/… declarations and every guarded method below
104
+ * checks its handle argument against the matching union at compile time,
105
+ * the same rules `accessCheck` enforces at runtime in `DEV`. The default
106
+ * `A = SystemAccess` is fully permissive, so a bare `SystemContext` (helper
107
+ * functions, host-side code, explicitly-annotated escape hatches) behaves
108
+ * exactly as before, and every narrowed `SystemContext<…>` is assignable to
109
+ * it.
110
+ *
111
+ * `out A` (declared covariance) is deliberate, see `Commands` above: the
112
+ * declared-access conditionals are unmeasurable to the compiler, and the
113
+ * unannotated verdict rejects exactly the `SystemContext<Narrow> →
114
+ * SystemContext` conversion the whole design depends on.
115
+ */
116
+ export declare class SystemContext<out A extends SystemAccess = SystemAccess> {
117
+ private readonly _store;
118
+ lastRunTick: number;
119
+ /** Deferred structural-command facade. */
120
+ readonly commands: Commands<A>;
121
+ /** The frame tick: the count of `update()` calls so far. Run conditions
122
+ * read it. The change tick that a write stamps is a separate counter that
123
+ * advances before every system run, so it does not equal this value. */
124
+ get ecsTick(): number;
125
+ /** @internal Advance the change tick for the run that follows and return
126
+ * the new value. The schedule calls it before each system run and before
127
+ * each phase flush. Not for a system body. */
128
+ advanceChangeTick(): number;
129
+ /** @internal Copy every archetype's live row count into its descriptor.
130
+ * The schedule calls it before it dispatches a system to a compute backend,
131
+ * because a module reads the copy and a mutation earlier in the phase leaves
132
+ * it stale. The store returns on a flag when nothing is dirty, so a phase
133
+ * with no mutation pays that flag read for each dispatch. Not for a system
134
+ * body, a host outside the schedule calls `ecs.publishRowCounts()`. */
135
+ publishRowCounts(): void;
136
+ /** The world's frame-trace sink, or `null`. Lets the schedule
137
+ * fire `systemBegin` and `flush*` without reaching into the private store.
138
+ * Read only under `if (DEV)`. The seam is dead-code-eliminated in prod. */
139
+ get trace(): FrameTraceSink | null;
140
+ constructor(_store: Store);
141
+ isAlive(entityId: EntityID): boolean;
142
+ hasComponent(entityId: EntityID, def: ComponentDef): boolean;
143
+ getField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number;
144
+ /** Total sibling of {@link getField}, mirroring `ecs.tryGetField`. It reads
145
+ * `undefined` when the entity is dead or doesn't hold
146
+ * the component, instead of a dev throw or a prod garbage read. The safe way
147
+ * to probe-and-read in one call: `ctx.tryGetField(e, Health, "current") ?? 0`. */
148
+ tryGetField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number | undefined;
149
+ setField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, value: number): void;
150
+ /** Read-modify-write one field: `updateField(e, Gold, "value", v => v - cost)`
151
+ * is the one-line form of the `getField` → compute → `setField` round trip.
152
+ * Returns the written value. Same access-check and observer semantics as the
153
+ * two calls it composes (inlined here: the declared-access conditionals on
154
+ * those methods only resolve per `A` instantiation, so a body where `A` is
155
+ * still generic cannot call them without casts). */
156
+ updateField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, fn: (current: number) => number): number;
157
+ /**
158
+ * Record an entity as changed for a component's per-entity `onSet` observer.
159
+ * The SoA write idiom, `const { x } = cols.mut(D); x[i] = v` in a tight
160
+ * loop, bypasses the engine, which never sees the per-element writes, so a
161
+ * per-entity `onSet` consumer records the row by hand. This is the by-id
162
+ * form: a call, a resolve and a list push per row. The row form,
163
+ * `cols.ticks(D)[i] = cols.tick`, is one store per row, and the one to
164
+ * reach for inside a chunk loop. No-op for components without a
165
+ * per-entity onSet observer. `setField`, `ref` and a cursor record on
166
+ * their own.
167
+ */
168
+ markChanged(entityId: EntityID, def: ComponentDef): void;
169
+ /**
170
+ * Create a cached component reference for a single entity. Marks the
171
+ * component as changed (the mutable default, see `refRead` for the
172
+ * read-only variant to reach for when you are not mutating), and records
173
+ * the entity for a per-entity onSet observer. Both happen here, at
174
+ * creation: the accessor's setters write raw columns and cannot record,
175
+ * so the record is conservative, as the archetype stamp is. See ref.ts.
176
+ */
177
+ ref<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>, entityId: EntityID): ComponentRef<SchemaOf<D>>;
178
+ /**
179
+ * Create a cached read-only component reference for a single entity. Use
180
+ * this when you are not mutating. The returned `ReadonlyComponentRef<S>`
181
+ * is an *advisory* compile-time barrier (no `_changedTick` bump): the
182
+ * `readonly` typing blocks field writes at the type layer, but the
183
+ * underlying accessor shares its prototype with `ref()` and can still be
184
+ * written through a deliberate cast. See ref.ts.
185
+ */
186
+ refRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>, entityId: EntityID): ReadonlyComponentRef<SchemaOf<D>>;
187
+ /**
188
+ * A re-pointable single-entity cursor over `def`, the in-system twin of
189
+ * {@link ECS.cursor}, and the accessor to reach for when a system touches many
190
+ * entities **by id** rather than by query span.
191
+ *
192
+ * `ctx.ref` allocates one accessor for each entity. That allocation is the
193
+ * largest part of the cost of a read of one field by id, because to make an
194
+ * accessor costs much more than to move one. Make the cursor one time,
195
+ * outside the loop:
196
+ *
197
+ * const p = ctx.cursor(Pos);
198
+ * for (const e of hits) { p.at(e); p.x += p.y * dt; }
199
+ *
200
+ * Mutable: every `at()` stamps the change tick. Still prefer `forEachChunk` when
201
+ * a query can express the entity set, a cursor removes the per-entity
202
+ * allocation, not the per-entity archetype resolution.
203
+ */
204
+ cursor<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>): ComponentCursor<SchemaOf<D>>;
205
+ /** Read-only {@link cursor}: no change-tick stamp on `at()`. Advisory only,
206
+ * same caveat as `ctx.refRead`. */
207
+ cursorRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>): ReadonlyComponentCursor<SchemaOf<D>>;
208
+ /** Whether `entityId` is currently disabled (immediate read). Toggling is
209
+ * deferred, `ctx.commands.disable` and `ctx.commands.enable`. */
210
+ isDisabled(entityId: EntityID): boolean;
211
+ /** Tags take no values argument. Valued schemas require a complete one. */
212
+ addSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, ...values: AttachValuesArg<SparseSchemaOf<D>>): this;
213
+ removeSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>): this;
214
+ hasSparse(entityId: EntityID, def: SparseComponentDef): boolean;
215
+ getSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseRead<A, D>, field: string & keyof SparseSchemaOf<D>): number;
216
+ setSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, field: string & keyof SparseSchemaOf<D>, value: number): void;
217
+ /** A cursor over a sparse component, the sparse sibling of {@link cursor}
218
+ * and the fastest read by id in a system: `at()` writes the entity index and
219
+ * a field access is one load. Mutable. Declare the component in
220
+ * `sparseWrites`. See `ECS.sparseCursor`. */
221
+ sparseCursor<D extends SparseComponentDef<any>>(def: D & DeclaredSparseWrite<A, D>): ComponentCursor<SparseSchemaOf<D>>;
222
+ /** Whether the sparse component of `entityId` changed since the previous
223
+ * run of this system: its row tick is above `lastRunTick`. The row grain
224
+ * of change detection for a sparse component, as a pull. Needs row ticks
225
+ * (`ecs.trackRows(def)`, or an entity-level `onSet`), and throws
226
+ * `ROW_TICKS_NOT_TRACKED` without them. A non-member reads `false`. */
227
+ sparseChanged<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>, entityId: EntityID): boolean;
228
+ /** Read-only {@link sparseCursor}. Declare the component in `sparseReads`.
229
+ * Advisory only, same caveat as `ctx.cursorRead`. */
230
+ sparseCursorRead<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>): ReadonlyComponentCursor<SparseSchemaOf<D>>;
231
+ /** Add a `(R, tgt)` pair to `src` (exclusive replaces, multi adds). */
232
+ addRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt: EntityID): this;
233
+ /** Remove a `(R, tgt)` pair from `src`. For multi, omitting `tgt` removes all. */
234
+ removeRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt?: EntityID): this;
235
+ /** The single target of `src` under an exclusive relation, or `undefined`. */
236
+ targetOf<D extends RelationDef<"exclusive">>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID | undefined;
237
+ /** All targets of `src` under `R`, ascending by id. */
238
+ targetsOf<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
239
+ /** Sources pointing at `tgt` under `R` (the reverse index), ascending by id.
240
+ * `(entity, def)` order, matching `targetOf` and `targetsOf`. */
241
+ sourcesOf<D extends RelationDef>(tgt: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
242
+ /** Whether `src` holds any pair under `R`. */
243
+ hasRelation(src: EntityID, def: RelationDef): boolean;
244
+ /** Flush all deferred changes: structural (add and remove) first, then
245
+ * destructions. Republishes archetype row counts into the SAB
246
+ * descriptor at the end so any WASM scan running in the next phase
247
+ * sees fresh `row_count` fields. This is one of two publish sites,
248
+ * `ECS.update()` also republishes once at tick start, which covers
249
+ * host-side mutations between updates. The publish walks
250
+ * descriptors only. It doesn't touch column data, so paying it once per
251
+ * phase boundary is cheaper than the earlier pattern of paying it for each
252
+ * WASM-using system in each tick. The descriptor walk is gated
253
+ * on a dirty flag, so a read-only phase skips the walk entirely. */
254
+ flush(): void;
255
+ /**
256
+ * Emit an event (or a payload-less signal) onto its channel. The event is
257
+ * visible to every system that runs *later* in the same `update()` and is
258
+ * cleared at the tick's tail, events live exactly one tick, and there is no
259
+ * acknowledgement. The channel must have been registered at world setup with
260
+ * `ecs.events.register(key, fields)` or `registerSignal(key)`.
261
+ *
262
+ * @example
263
+ * const Damaged = eventKey<{ target: EntityID; amount: number }>("Damaged");
264
+ * ecs.events.register(Damaged, ["target", "amount"]);
265
+ * // inside a system:
266
+ * ctx.emit(Damaged, { target: e, amount: 10 });
267
+ */
268
+ emit(key: SignalKey): void;
269
+ emit<S extends EventShape<S>>(key: EventKey<S>, values: NoInfer<S>): void;
270
+ /**
271
+ * Read this tick's events on a channel. Returns an SoA reader over
272
+ * everything emitted *earlier in the same `update()`*, order systems so
273
+ * readers run after emitters, or they see an empty reader.
274
+ *
275
+ * @example
276
+ * const dmg = ctx.readEvents(Damaged); // SoA columns, one per field
277
+ * for (let i = 0; i < dmg.length; i++) {
278
+ * applyDamage(dmg.target[i], dmg.amount[i]);
279
+ * }
280
+ */
281
+ readEvents<S extends EventShape<S>>(key: EventKey<S>): EventReader<S>;
282
+ /** Read a resource (declared in `resourceReads`). The flat `ctx` surface verbs
283
+ * its accessors, `getResource`, `setResource`, `removeResource` and `hasResource`,
284
+ * matching `getField`, `setField` and `hasComponent`. The grouped `ecs.resources`
285
+ * facade drops the noun (`get`, `set`, `remove` and `has`) because its receiver
286
+ * already names it. */
287
+ getResource<K extends ResourceKey<any>>(key: K & DeclaredResourceRead<A, K>): ResourceValueOf<K>;
288
+ setResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>, value: ResourceValueOf<NoInfer<K>>): void;
289
+ /** Drop a resource mid-tick. A lifecycle mutation, so it is access-
290
+ * checked as a *write*, the system must declare the key in `resourceWrites`,
291
+ * which serialises it against readers and writers of the same resource. Fails
292
+ * closed on a missing key. */
293
+ removeResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>): void;
294
+ hasResource<T>(key: ResourceKey<T>): boolean;
295
+ }
296
+ //# sourceMappingURL=system_context.d.ts.map
@@ -0,0 +1,296 @@
1
+ import { Store } from './store.js';
2
+ import { FrameTraceSink } from './frame_trace.js';
3
+ import { EntityID } from './entity.js';
4
+ import { ComponentDef, AttachValuesArg, SchemaOf, FieldValues } from './component.js';
5
+ import { SparseComponentDef, SparseSchemaOf } from './sparse_store.js';
6
+ import { RelationDef } from './relation.js';
7
+ import { SystemAccess, DeclaredRead, DeclaredWrite, DeclaredAdd, DeclaredRemove, DeclaredSparseRead, DeclaredSparseWrite, DeclaredRelationRead, DeclaredRelationWrite, DeclaredResourceRead, DeclaredResourceWrite, DespawnArg } from './system.js';
8
+ import { ComponentCursor, ComponentRef, ReadonlyComponentCursor, ReadonlyComponentRef } from './ref.js';
9
+ import { EventKey, EventReader, EventShape, SignalKey } from './event.js';
10
+ import { ResourceKey, ResourceValueOf } from './resource.js';
11
+ /**
12
+ * A `BundleOrDef` whose def is constrained to the enclosing system's declared
13
+ * add surface (system.ts). The bundle branch restates `Bundle`'s shape with
14
+ * the def slot narrowed, intersecting `Bundle<any> & { def: … }` instead
15
+ * would put two `ComponentDef` instantiations in one intersection, which TS
16
+ * relates leniently (see the access-typing notes in system.ts).
17
+ *
18
+ * The outer conditional is a deliberate no-op (`[D] extends [unknown]` is
19
+ * always true): it makes the variance of `D`, and therefore of the access
20
+ * param `A` threaded through `Commands` and `SystemContext`. Unmeasurable to
21
+ * the compiler. A measurable (plain-union) definition here gets `A` marked
22
+ * reliably contravariant, variance-based comparison then rejects
23
+ * `SystemContext<Narrow> → SystemContext` without the structural fallback,
24
+ * and every helper taking a bare `SystemContext` stops accepting typed
25
+ * contexts. Unmeasurable variance forces the structural path, where class
26
+ * methods compare bivariantly and the conversion holds.
27
+ *
28
+ * The inner `D extends ComponentDef ? … : never` Distributes over the declared
29
+ * add-set union, so each raw-literal branch carries its own def's schema
30
+ * (`Partial<FieldValues<SchemaOf<D>>>`) rather than the erased
31
+ * `Partial<Record<string, number>>`. A hand-written `{ def: Vel, values: { x }}`
32
+ * whose fields don't match its def is then rejected in a declared-access system,
33
+ * matching the `StrictBundles` guarantee on the `ecs.*` surface. A permissive
34
+ * context (`add: ComponentDef<any>`, an unnarrowed or `exclusive` system)
35
+ * keeps the loose shape, which is the point of opting out of narrowing. The
36
+ * outer no-op is preserved, so the variance invariant above still holds
37
+ * (verified: the `permissiveHelper(ctx)` assertion still compiles).
38
+ */
39
+ export type DeclaredBundleOrDef<D> = [D] extends [unknown] ? D extends ComponentDef ? D | {
40
+ readonly def: D;
41
+ readonly values: Readonly<Partial<FieldValues<SchemaOf<D>>>>;
42
+ } : never : never;
43
+ /**
44
+ * Deferred structural-command facade (Bevy `Commands`).
45
+ * Namespaces the deferred structural ops so the call site is self-documenting:
46
+ * `ctx.commands.add(e, …)` is *always* deferred (applied at the phase flush),
47
+ * ending the collision where `ecs.addComponent` (immediate) and a bare
48
+ * `ctx.addComponent` (deferred) would share a name with opposite timing. Takes
49
+ * varargs callable bundles, so one shape, `commands.spawn(bundle(Pos,{x,y}), bundle(Vel,{vx:1}))`,
50
+ * serves spawn and add. This is the only deferred surface: the bare
51
+ * `ctx.addComponent`, `ctx.removeComponent`, `ctx.disable` and `ctx.enable`
52
+ * duplicates were removed in 0.5.0, completing the receiver-implies-timing
53
+ * rule (`ecs.*` immediate, `ctx.commands.*` deferred) that 0.5.0 started for
54
+ * spawn and despawn.
55
+ *
56
+ * `A` narrows the def-taking methods to the enclosing system's declared access
57
+ * (system.ts). The default is fully permissive.
58
+ *
59
+ * `out A` (declared covariance) is deliberate: every use of `A` sits inside a
60
+ * declared-access conditional, whose variance the compiler cannot measure,
61
+ * left unannotated, the measured verdict rejects `Commands<Narrow> →
62
+ * Commands` (the direction every permissive consumer needs). Covariance is
63
+ * the honest direction: a context with more declared access is usable where
64
+ * one with less is expected. The checks themselves are per-instantiation, so
65
+ * the annotation does not weaken them.
66
+ */
67
+ export declare class Commands<out A extends SystemAccess = SystemAccess> {
68
+ private readonly _store;
69
+ constructor(_store: Store);
70
+ /** Spawn from bundles. The create is immediate, so the id returns now. The
71
+ * component attaches are deferred to the phase flush, so until that flush the
72
+ * entity exists in its empty and partial archetype and a query running later in
73
+ * the same phase can observe it half-built. (Same semantics as
74
+ * `ctx.commands.spawn()` followed by `ctx.commands.add`. A fully deferred
75
+ * id-reservation spawn, à la Bevy, is a separate follow-up.) */
76
+ spawn(...items: DeclaredBundleOrDef<A["add"]>[]): EntityID;
77
+ /** Attach bundles to an existing entity (deferred). Bundles zero-fill
78
+ * omitted fields. */
79
+ add(entityId: EntityID, ...items: DeclaredBundleOrDef<A["add"]>[]): this;
80
+ /** Explicit complete-values attach (deferred), the compile-checked shape
81
+ * where a typo'd or missing field is a compile error, mirroring the
82
+ * immediate `ecs.addComponent(e, def, values)`. Tags take no values
83
+ * argument (`AttachValuesArg`). */
84
+ add<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredAdd<A, D>, ...values: AttachValuesArg<SchemaOf<D>>): this;
85
+ /** Remove a component (deferred). */
86
+ remove<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRemove<A, D>): this;
87
+ /** Destroy an entity (deferred). */
88
+ despawn(entityId: DespawnArg<A>): this;
89
+ /** Buffer `entityId` to be disabled at the phase flush (idempotent).
90
+ * Deferred because a toggle is an in-archetype row swap, which would corrupt
91
+ * a `forEach` SoA loop iterating that archetype if applied mid-system (it
92
+ * reorders the dense columns being read). A disabled entity is excluded from
93
+ * default queries. Opt back in per query with `.includeDisabled()`. The
94
+ * immediate read is `ctx.isDisabled`. */
95
+ disable(entityId: EntityID): this;
96
+ /** Buffer `entityId` to be re-enabled at the phase flush (idempotent).
97
+ * Deferred for the same row-swap reason as `disable`. */
98
+ enable(entityId: EntityID): this;
99
+ }
100
+ /**
101
+ * The per-system world facade. `A` is the system's declared access surface
102
+ * (system.ts): the config-form `registerSystem` computes it from
103
+ * the literal `reads` and `writes`/… declarations and every guarded method below
104
+ * checks its handle argument against the matching union at compile time,
105
+ * the same rules `accessCheck` enforces at runtime in `DEV`. The default
106
+ * `A = SystemAccess` is fully permissive, so a bare `SystemContext` (helper
107
+ * functions, host-side code, explicitly-annotated escape hatches) behaves
108
+ * exactly as before, and every narrowed `SystemContext<…>` is assignable to
109
+ * it.
110
+ *
111
+ * `out A` (declared covariance) is deliberate, see `Commands` above: the
112
+ * declared-access conditionals are unmeasurable to the compiler, and the
113
+ * unannotated verdict rejects exactly the `SystemContext<Narrow> →
114
+ * SystemContext` conversion the whole design depends on.
115
+ */
116
+ export declare class SystemContext<out A extends SystemAccess = SystemAccess> {
117
+ private readonly _store;
118
+ lastRunTick: number;
119
+ /** Deferred structural-command facade. */
120
+ readonly commands: Commands<A>;
121
+ /** The frame tick: the count of `update()` calls so far. Run conditions
122
+ * read it. The change tick that a write stamps is a separate counter that
123
+ * advances before every system run, so it does not equal this value. */
124
+ get ecsTick(): number;
125
+ /** @internal Advance the change tick for the run that follows and return
126
+ * the new value. The schedule calls it before each system run and before
127
+ * each phase flush. Not for a system body. */
128
+ advanceChangeTick(): number;
129
+ /** @internal Copy every archetype's live row count into its descriptor.
130
+ * The schedule calls it before it dispatches a system to a compute backend,
131
+ * because a module reads the copy and a mutation earlier in the phase leaves
132
+ * it stale. The store returns on a flag when nothing is dirty, so a phase
133
+ * with no mutation pays that flag read for each dispatch. Not for a system
134
+ * body, a host outside the schedule calls `ecs.publishRowCounts()`. */
135
+ publishRowCounts(): void;
136
+ /** The world's frame-trace sink, or `null`. Lets the schedule
137
+ * fire `systemBegin` and `flush*` without reaching into the private store.
138
+ * Read only under `if (DEV)`. The seam is dead-code-eliminated in prod. */
139
+ get trace(): FrameTraceSink | null;
140
+ constructor(_store: Store);
141
+ isAlive(entityId: EntityID): boolean;
142
+ hasComponent(entityId: EntityID, def: ComponentDef): boolean;
143
+ getField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number;
144
+ /** Total sibling of {@link getField}, mirroring `ecs.tryGetField`. It reads
145
+ * `undefined` when the entity is dead or doesn't hold
146
+ * the component, instead of a dev throw or a prod garbage read. The safe way
147
+ * to probe-and-read in one call: `ctx.tryGetField(e, Health, "current") ?? 0`. */
148
+ tryGetField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number | undefined;
149
+ setField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, value: number): void;
150
+ /** Read-modify-write one field: `updateField(e, Gold, "value", v => v - cost)`
151
+ * is the one-line form of the `getField` → compute → `setField` round trip.
152
+ * Returns the written value. Same access-check and observer semantics as the
153
+ * two calls it composes (inlined here: the declared-access conditionals on
154
+ * those methods only resolve per `A` instantiation, so a body where `A` is
155
+ * still generic cannot call them without casts). */
156
+ updateField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, fn: (current: number) => number): number;
157
+ /**
158
+ * Record an entity as changed for a component's per-entity `onSet` observer.
159
+ * The SoA write idiom, `const { x } = cols.mut(D); x[i] = v` in a tight
160
+ * loop, bypasses the engine, which never sees the per-element writes, so a
161
+ * per-entity `onSet` consumer records the row by hand. This is the by-id
162
+ * form: a call, a resolve and a list push per row. The row form,
163
+ * `cols.ticks(D)[i] = cols.tick`, is one store per row, and the one to
164
+ * reach for inside a chunk loop. No-op for components without a
165
+ * per-entity onSet observer. `setField`, `ref` and a cursor record on
166
+ * their own.
167
+ */
168
+ markChanged(entityId: EntityID, def: ComponentDef): void;
169
+ /**
170
+ * Create a cached component reference for a single entity. Marks the
171
+ * component as changed (the mutable default, see `refRead` for the
172
+ * read-only variant to reach for when you are not mutating), and records
173
+ * the entity for a per-entity onSet observer. Both happen here, at
174
+ * creation: the accessor's setters write raw columns and cannot record,
175
+ * so the record is conservative, as the archetype stamp is. See ref.ts.
176
+ */
177
+ ref<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>, entityId: EntityID): ComponentRef<SchemaOf<D>>;
178
+ /**
179
+ * Create a cached read-only component reference for a single entity. Use
180
+ * this when you are not mutating. The returned `ReadonlyComponentRef<S>`
181
+ * is an *advisory* compile-time barrier (no `_changedTick` bump): the
182
+ * `readonly` typing blocks field writes at the type layer, but the
183
+ * underlying accessor shares its prototype with `ref()` and can still be
184
+ * written through a deliberate cast. See ref.ts.
185
+ */
186
+ refRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>, entityId: EntityID): ReadonlyComponentRef<SchemaOf<D>>;
187
+ /**
188
+ * A re-pointable single-entity cursor over `def`, the in-system twin of
189
+ * {@link ECS.cursor}, and the accessor to reach for when a system touches many
190
+ * entities **by id** rather than by query span.
191
+ *
192
+ * `ctx.ref` allocates one accessor for each entity. That allocation is the
193
+ * largest part of the cost of a read of one field by id, because to make an
194
+ * accessor costs much more than to move one. Make the cursor one time,
195
+ * outside the loop:
196
+ *
197
+ * const p = ctx.cursor(Pos);
198
+ * for (const e of hits) { p.at(e); p.x += p.y * dt; }
199
+ *
200
+ * Mutable: every `at()` stamps the change tick. Still prefer `forEachChunk` when
201
+ * a query can express the entity set, a cursor removes the per-entity
202
+ * allocation, not the per-entity archetype resolution.
203
+ */
204
+ cursor<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>): ComponentCursor<SchemaOf<D>>;
205
+ /** Read-only {@link cursor}: no change-tick stamp on `at()`. Advisory only,
206
+ * same caveat as `ctx.refRead`. */
207
+ cursorRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>): ReadonlyComponentCursor<SchemaOf<D>>;
208
+ /** Whether `entityId` is currently disabled (immediate read). Toggling is
209
+ * deferred, `ctx.commands.disable` and `ctx.commands.enable`. */
210
+ isDisabled(entityId: EntityID): boolean;
211
+ /** Tags take no values argument. Valued schemas require a complete one. */
212
+ addSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, ...values: AttachValuesArg<SparseSchemaOf<D>>): this;
213
+ removeSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>): this;
214
+ hasSparse(entityId: EntityID, def: SparseComponentDef): boolean;
215
+ getSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseRead<A, D>, field: string & keyof SparseSchemaOf<D>): number;
216
+ setSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, field: string & keyof SparseSchemaOf<D>, value: number): void;
217
+ /** A cursor over a sparse component, the sparse sibling of {@link cursor}
218
+ * and the fastest read by id in a system: `at()` writes the entity index and
219
+ * a field access is one load. Mutable. Declare the component in
220
+ * `sparseWrites`. See `ECS.sparseCursor`. */
221
+ sparseCursor<D extends SparseComponentDef<any>>(def: D & DeclaredSparseWrite<A, D>): ComponentCursor<SparseSchemaOf<D>>;
222
+ /** Whether the sparse component of `entityId` changed since the previous
223
+ * run of this system: its row tick is above `lastRunTick`. The row grain
224
+ * of change detection for a sparse component, as a pull. Needs row ticks
225
+ * (`ecs.trackRows(def)`, or an entity-level `onSet`), and throws
226
+ * `ROW_TICKS_NOT_TRACKED` without them. A non-member reads `false`. */
227
+ sparseChanged<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>, entityId: EntityID): boolean;
228
+ /** Read-only {@link sparseCursor}. Declare the component in `sparseReads`.
229
+ * Advisory only, same caveat as `ctx.cursorRead`. */
230
+ sparseCursorRead<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>): ReadonlyComponentCursor<SparseSchemaOf<D>>;
231
+ /** Add a `(R, tgt)` pair to `src` (exclusive replaces, multi adds). */
232
+ addRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt: EntityID): this;
233
+ /** Remove a `(R, tgt)` pair from `src`. For multi, omitting `tgt` removes all. */
234
+ removeRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt?: EntityID): this;
235
+ /** The single target of `src` under an exclusive relation, or `undefined`. */
236
+ targetOf<D extends RelationDef<"exclusive">>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID | undefined;
237
+ /** All targets of `src` under `R`, ascending by id. */
238
+ targetsOf<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
239
+ /** Sources pointing at `tgt` under `R` (the reverse index), ascending by id.
240
+ * `(entity, def)` order, matching `targetOf` and `targetsOf`. */
241
+ sourcesOf<D extends RelationDef>(tgt: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
242
+ /** Whether `src` holds any pair under `R`. */
243
+ hasRelation(src: EntityID, def: RelationDef): boolean;
244
+ /** Flush all deferred changes: structural (add and remove) first, then
245
+ * destructions. Republishes archetype row counts into the SAB
246
+ * descriptor at the end so any WASM scan running in the next phase
247
+ * sees fresh `row_count` fields. This is one of two publish sites,
248
+ * `ECS.update()` also republishes once at tick start, which covers
249
+ * host-side mutations between updates. The publish walks
250
+ * descriptors only. It doesn't touch column data, so paying it once per
251
+ * phase boundary is cheaper than the earlier pattern of paying it for each
252
+ * WASM-using system in each tick. The descriptor walk is gated
253
+ * on a dirty flag, so a read-only phase skips the walk entirely. */
254
+ flush(): void;
255
+ /**
256
+ * Emit an event (or a payload-less signal) onto its channel. The event is
257
+ * visible to every system that runs *later* in the same `update()` and is
258
+ * cleared at the tick's tail, events live exactly one tick, and there is no
259
+ * acknowledgement. The channel must have been registered at world setup with
260
+ * `ecs.events.register(key, fields)` or `registerSignal(key)`.
261
+ *
262
+ * @example
263
+ * const Damaged = eventKey<{ target: EntityID; amount: number }>("Damaged");
264
+ * ecs.events.register(Damaged, ["target", "amount"]);
265
+ * // inside a system:
266
+ * ctx.emit(Damaged, { target: e, amount: 10 });
267
+ */
268
+ emit(key: SignalKey): void;
269
+ emit<S extends EventShape<S>>(key: EventKey<S>, values: NoInfer<S>): void;
270
+ /**
271
+ * Read this tick's events on a channel. Returns an SoA reader over
272
+ * everything emitted *earlier in the same `update()`*, order systems so
273
+ * readers run after emitters, or they see an empty reader.
274
+ *
275
+ * @example
276
+ * const dmg = ctx.readEvents(Damaged); // SoA columns, one per field
277
+ * for (let i = 0; i < dmg.length; i++) {
278
+ * applyDamage(dmg.target[i], dmg.amount[i]);
279
+ * }
280
+ */
281
+ readEvents<S extends EventShape<S>>(key: EventKey<S>): EventReader<S>;
282
+ /** Read a resource (declared in `resourceReads`). The flat `ctx` surface verbs
283
+ * its accessors, `getResource`, `setResource`, `removeResource` and `hasResource`,
284
+ * matching `getField`, `setField` and `hasComponent`. The grouped `ecs.resources`
285
+ * facade drops the noun (`get`, `set`, `remove` and `has`) because its receiver
286
+ * already names it. */
287
+ getResource<K extends ResourceKey<any>>(key: K & DeclaredResourceRead<A, K>): ResourceValueOf<K>;
288
+ setResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>, value: ResourceValueOf<NoInfer<K>>): void;
289
+ /** Drop a resource mid-tick. A lifecycle mutation, so it is access-
290
+ * checked as a *write*, the system must declare the key in `resourceWrites`,
291
+ * which serialises it against readers and writers of the same resource. Fails
292
+ * closed on a missing key. */
293
+ removeResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>): void;
294
+ hasResource<T>(key: ResourceKey<T>): boolean;
295
+ }
296
+ //# sourceMappingURL=system_context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system_context.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/system_context.ts"],"names":[],"mappings":"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"}