@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
@@ -1,9 +1,8 @@
1
- import { Brand } from '../../type_primitives/index.cjs';
1
+ import { Brand, BitSet, TypedArrayTag } from '../../type_primitives/index.cjs';
2
2
  import { EntityID } from './entity.cjs';
3
- import { SparseComponentDef, SparseComponentStore } from './sparse_store.cjs';
4
- /** Relation handle id. A separate id space from `ComponentID` and
5
- * `SparseComponentID` it indexes the `RelationService` registry. The numeric
6
- * value is the registration order, stable for the lifetime of the ECS. */
3
+ import { Archetype } from './archetype.cjs';
4
+ import { QueryTerms } from './query_terms.cjs';
5
+ import { SparseComponentDef, SparseComponentID, SparseComponentStore } from './sparse_store.cjs';
7
6
  export type RelationID = Brand<number, "relation_id">;
8
7
  declare const __relationBrand: unique symbol;
9
8
  /** A relation's registration-time cardinality: `exclusive` = one target per
@@ -17,9 +16,9 @@ export type RelationDef<C extends RelationCardinality = RelationCardinality> = R
17
16
  /** Access sentinel for the `(*, T)` wildcard query iteration
18
17
  * (`Query.forEachRelatedTo`). A `(*, T)` term reads **every** registered
19
18
  * relation's reverse index to find sources of `T`, so it can't name a specific
20
- * relation in `relationReads` the way `withRelation(R)` (`(R, *)`) can. A
19
+ * relation in `relationReads` the way `andRelation(R)` (`(R, *)`) can. A
21
20
  * system that iterates a `(*, T)` wildcard lists `ANY_RELATION` in `relationReads`
22
- * instead; `accessCheck.checkRelationReadAny` honors it. The numeric value is a
21
+ * instead. `accessCheck.assertRelationReadAny` honors it. The numeric value is a
23
22
  * reserved sentinel far past any real registration-order relation id (relations are
24
23
  * minted from 0 upward), so it can never collide with a registered relation. */
25
24
  export declare const ANY_RELATION: RelationDef;
@@ -27,21 +26,21 @@ export declare const ANY_RELATION: RelationDef;
27
26
  * **targets** is destroyed. Chosen per-relation at registration, run at
28
27
  * destroy-flush (and the immediate-destroy path) off the reverse index:
29
28
  *
30
- * - **`delete`** cascade: destroy every source of the dead target too,
31
- * recursively for chains/trees (the canonical ChildOf case).
32
- * - **`clear`** remove the relation from every source; the sources survive.
33
- * - **`orphan`** leave the link intact but dangling. Reads stay safe (the
29
+ * - **`delete`**, cascade: destroy every source of the dead target too,
30
+ * recursively for chains and trees (the canonical ChildOf case).
31
+ * - **`clear`**, remove the relation from every source. The sources survive.
32
+ * - **`orphan`**, leave the link intact but dangling. Reads stay safe (the
34
33
  * reverse index is `EntityID`-keyed, so the dead handle never aliases a
35
- * recycled slot); `targetOf` returns a dead handle until the source
34
+ * recycled slot). `targetOf` returns a dead handle until the source
36
35
  * re-targets or is removed. This is the original behaviour and the default.
37
36
  */
38
37
  export type OnDeleteTarget = "delete" | "clear" | "orphan";
39
38
  /** Default on-target-delete policy: leave the link dangling (the original
40
39
  * behaviour, zero change for callers that don't opt in). */
41
40
  export declare const DEFAULT_ON_DELETE_TARGET: OnDeleteTarget;
42
- /** Registration options. `exclusive` (one target per source) is the default;
43
- * pass `{ multi: true }` for a multi-target relation. The two are mutually
44
- * exclusive the union makes `{ exclusive: true, multi: true }` a compile
41
+ /** Registration options. `exclusive` (one target per source) is the default.
42
+ * Pass `{ multi: true }` for a multi-target relation. The two are mutually
43
+ * exclusive, the union makes `{ exclusive: true, multi: true }` a compile
45
44
  * error (it also throws at runtime, for JS callers). `onDeleteTarget` selects
46
45
  * the cleanup policy applied to sources when a target is destroyed (default
47
46
  * `orphan`). */
@@ -58,186 +57,106 @@ export type RelationOptions = {
58
57
  * sparse component. Field 0 of a single-field schema. */
59
58
  export declare const RELATION_TARGET_FIELD = "target";
60
59
  /** Receives one canonical `(source index, sorted targets)` set during a fold
61
- * over a multi relation's forward sets. Targets are ascending by id; empty sets
60
+ * over a multi relation's forward sets. Targets are ascending by id. Empty sets
62
61
  * are never yielded (see `forEachCanonicalTargetSet`). */
63
62
  export type CanonicalTargetSetFn = (sourceIndex: number, targets: readonly EntityID[]) => void;
64
63
  /** Receives one canonical `(source, target)` pair during a fold over a
65
64
  * relation's forward links. Sources ascend by entity index, each source's
66
- * targets ascend by id the determinism order. */
65
+ * targets ascend by id, the determinism order. */
67
66
  export type CanonicalPairFn = (source: EntityID, target: EntityID) => void;
68
67
  /** Maps a source entity **index** to its full `EntityID` (generation from the
69
68
  * live slot). Supplied by `Store`, which owns entity generations. */
70
69
  export type MakeSourceID = (index: number) => EntityID;
71
- /** One relation's derived side state. **Abstract over cardinality:** the
72
- * base owns the cardinality-agnostic **reverse index** (target → sources, keyed
73
- * by full `EntityID` so a recycled slot can't alias a dead target's sources) and
74
- * a handle on the backing `SparseComponentStore`; the forward representation and
75
- * its sparse interaction are owned by the concrete `ExclusiveRelationStore` /
76
- * `MultiRelationStore` (built by `makeRelationStore`).
70
+ /** One relation's side state, as the digest and the snapshot codec see it.
77
71
  *
78
- * The registry level (`Store` + `RelationService`) owns what is genuinely its
79
- * own entity liveness, registration, and destroy orchestration and drives
80
- * a relation through the virtual `link` /
81
- * `unlink` / `purgeSource` / `forEachCanonicalPair` / without ever
82
- * branching on cardinality. Each cardinality keeps forward link + reverse index
83
- * + sparse membership in lockstep inside one method on one class, so the
84
- * lockstep can't be broken by missing a scattered `if (rs.exclusive)` site. */
85
- export declare abstract class RelationStore {
86
- /** `true` → one target per source (target in the sparse field); `false` →
87
- * a set of targets per source. The cardinality discriminant survives as a
88
- * field because it is part of the snapshot header and the traversal/`targetOf`
89
- * mode guards — but the forward *mechanics* are virtual, not branched on it. */
72
+ * The relations plugin owns the class. Two core-adjacent readers walk it and
73
+ * neither needs the forward mutators: `Store.stateHash` folds the multi target
74
+ * sets, and the snapshot service serializes and rebuilds them. The narrow view
75
+ * is what lets those two speak about a relation store without the plugin. */
76
+ export interface RelationStoreView {
77
+ /** `true` one target per source, and the target rides the backing sparse
78
+ * field. `false` a target set per source, held beside the sparse tag. */
90
79
  readonly exclusive: boolean;
91
- /** Backing sparse component def: `{ target: f64 }` when exclusive, a tag when
92
- * multi. Carries membership (and the target, when exclusive). */
93
- readonly sparse: SparseComponentDef;
94
- /** Cleanup policy applied to this relation's sources when a target is
95
- * destroyed. `orphan` (the default) is a no-op the link dangles
96
- * safely. `Store` reads this at destroy-flush off `sourcesOf`. */
97
- readonly onDeleteTarget: OnDeleteTarget;
98
- /** The backing sparse store instance. Owned for registration/liveness by
99
- * `Store`, but the relation drives the forward/membership rows on it directly
100
- * — that is the cardinality interaction this class now encapsulates. */
101
- protected readonly _store: SparseComponentStore;
102
- /** target `EntityID` → set of source `EntityID`s. Keyed by the full id, not
103
- * the index, so a recycled target slot can't alias a dead target's sources.
104
- * An entry is dropped the moment its set empties (`unlinkReverse`). */
105
- private readonly _reverse;
106
- constructor(exclusive: boolean, sparse: SparseComponentDef, store: SparseComponentStore, onDeleteTarget: OnDeleteTarget);
107
- /** Record that `src` points at `tgt` in the reverse index. */
108
- protected linkReverse(tgt: EntityID, src: EntityID): void;
109
- /** Drop the `src → tgt` edge from the reverse index, removing the target's
110
- * entry entirely once its last source is gone (so a dead-target key doesn't
111
- * linger with an empty set). */
112
- protected unlinkReverse(tgt: EntityID, src: EntityID): void;
113
- /** Drop every reverse-index entry whose **target** is no longer alive,
114
- * returning the count dropped. The `orphan` policy intentionally
115
- * leaves a destroyed target's reverse entry intact (the link dangles
116
- * safely), so a long-lived source that orphan-points at a stream of
117
- * short-lived targets and never re-targets/dies accumulates dead-target keys
118
- * without bound. This is the reclaim primitive behind `Store.compactRelations`
119
- * — a cold path the host calls at scene/snapshot boundaries. It is
120
- * cardinality-free (reverse-index only), so it lives on the base unchanged.
121
- *
122
- * Pure index reclaim: the **forward** links (the exclusive sparse target
123
- * field, the multi forward set) are left untouched, so `targetOf` /
124
- * `targetsOf` still return the dangling dead handle exactly as `orphan`
125
- * promises. The reverse index is derived, so dropping a dead-target entry
126
- * changes nothing observable except `sourcesOf` on that dead handle (which
127
- * goes from the dangling sources to `[]` — meaningless either way, the target
128
- * is gone) and is faithfully rebuilt by snapshot/restore from the surviving
129
- * forward links. Only the **target** role can leak here: a destroyed *source*
130
- * is already unlinked from every reverse set by `purgeSource`, so a live
131
- * target's set never holds a dead source. `isAlive` is supplied by `Store`,
132
- * which owns entity liveness. Deleting during `Map` key iteration is
133
- * well-defined — already-visited and not-yet-reached keys are unaffected. */
134
- pruneDeadReverse(isAlive: (id: EntityID) => boolean): number;
135
- /** Sources that point at `tgt`, ascending by id (deterministic, cold-path
136
- * sort) — empty when none. */
137
- sourcesOf(tgt: EntityID): EntityID[];
138
- /** Drop every derived side index — the reverse index and (for multi) the
139
- * forward target sets. Restore path only (`restoreRelations`): the side
140
- * indices are rebuilt from scratch, so they're cleared first to stay
141
- * idempotent when restoring into a dirty world. The backing sparse store is
142
- * cleared separately by `restoreSparseStores`. */
80
+ /** Fold `cb` over the multi forward target sets in canonical order, and do
81
+ * nothing for an exclusive relation. */
82
+ forEachCanonicalTargetSet(cb: CanonicalTargetSetFn): void;
83
+ /** Drop every derived side index. The restore path clears before it
84
+ * rebuilds, so restoring into a dirty world is idempotent. */
143
85
  resetIndices(): void;
144
- /** Clear this relation's forward representation (multi: the side map;
145
- * exclusive: nothing its forward links live in the sparse store, cleared by
146
- * `restoreSparseStores`). */
147
- protected abstract _resetForward(): void;
148
- /** Add a `(R, tgt)` link from `src`, keeping forward link + membership +
149
- * reverse index in lockstep. Exclusive: replaces any existing target
150
- * (idempotent if `tgt` is already the target). Multi: adds to the set
151
- * (idempotent on a duplicate), establishing the membership tag on the first
152
- * target. `src` must be live — `Store` checks before delegating. */
153
- abstract link(src: EntityID, tgt: EntityID): void;
154
- /** Remove `(R, tgt)` from `src` — or, when `tgt` is omitted, every target of
155
- * `src` — keeping forward link + membership + reverse index in lockstep. A
156
- * no-op when the link isn't present. */
157
- abstract unlink(src: EntityID, tgt?: EntityID): void;
158
- /** Purge a destroyed **source**: drop its forward link(s) and unlink it from
159
- * every target's reverse set, but leave the sparse **membership** row alone —
160
- * `Store._purgeSparse` drops that (for every store) right after, so this
161
- * runs first and must not double-remove. */
162
- abstract purgeSource(src: EntityID): void;
163
- /** The single target of source `index`, or `undefined`. Exclusive reads the
164
- * sparse field; multi has no single target and returns `undefined` (matching
165
- * the production `targetOf`-on-multi read, which the `DEV` guard rejects). */
166
- abstract singleTarget(index: number): EntityID | undefined;
167
- /** All targets of source `index`, ascending by id — one or zero for
168
- * exclusive, the full sorted set for multi. The symmetric counterpart to
169
- * `sourcesOf`. */
170
- abstract targetsOf(index: number): EntityID[];
171
- /** Whether source `index` holds any target under this relation (sparse
172
- * membership). */
173
- abstract has(index: number): boolean;
174
- /** Fold `cb` over this relation's **multi** forward target sets in canonical
175
- * order (sources ascending by index, each source's targets ascending by id),
176
- * skipping empty sets. The single source of truth for the canonical multi
177
- * traversal shared by `stateHash`, `snapshotRelations`, and `pairsOf`.
178
- * Exclusive relations contribute via the sparse store, so this
179
- * is a no-op for them. */
180
- abstract forEachCanonicalTargetSet(cb: CanonicalTargetSetFn): void;
181
- /** Fold `cb` over every `(source, target)` pair of this relation in canonical
182
- * order — the `(R, *)` wildcard drive order. `makeId` maps a source
183
- * index to its full `EntityID`. Exclusive rides the backing store's
184
- * `canonicalIndices`; multi rides `forEachCanonicalTargetSet`. */
185
- abstract forEachCanonicalPair(makeId: MakeSourceID, cb: CanonicalPairFn): void;
186
- /** Rebuild the reverse index from the forward links after a restore.
187
- * Exclusive reads it back from the just-restored sparse target field (the
188
- * reverse index is never serialized); multi already rebuilt its reverse edges
189
- * in `restoreAddTarget`, so this is a no-op for it. `makeId` maps a source
190
- * index to its full `EntityID`. */
191
- abstract rebuildReverseFromForward(makeId: MakeSourceID): void;
192
- /** Restore one decoded multi forward edge `(source index → tgt)` plus its
193
- * reverse edge (the source's full `EntityID` is `src`). Multi only — the
194
- * snapshot header guards exclusive relations out before this is reached, so
195
- * the exclusive override throws defensively. */
196
- abstract restoreAddTarget(index: number, tgt: EntityID, src: EntityID): void;
86
+ /** Restore one decoded multi forward edge and its reverse edge. */
87
+ restoreAddTarget(index: number, tgt: EntityID, src: EntityID): void;
88
+ /** Rebuild the reverse index from the forward links after a restore. */
89
+ rebuildReverse(createId: MakeSourceID): void;
197
90
  }
198
- /** Build the right `RelationStore` for a cardinality. The only construction
199
- * site is `Store.registerRelation`, which resolves the backing sparse store and
200
- * hands it in so the relation can drive forward/membership rows directly. */
201
- export declare function makeRelationStore(exclusive: boolean, sparse: SparseComponentDef, store: SparseComponentStore, onDeleteTarget: OnDeleteTarget): RelationStore;
202
- /** Serialize the relation side data that does **not** live in the sparse store
203
- * — i.e. each **multi** relation's forward target sets (`Map<source index,
204
- * Set<target>>`). Exclusive relations store their target in the backing sparse
205
- * field, so they ride `snapshotSparseStores` and contribute only a header
206
- * here. The reverse index is fully derivable (from the sparse store for
207
- * exclusive, from these sets for multi), so it is never serialized — it is
208
- * rebuilt by `restoreRelations` + the caller's exclusive-reverse pass.
209
- *
210
- * Members are emitted in canonical order (sources ascending by entity index,
211
- * each source's targets ascending by id) so the bytes are independent of
212
- * add/remove history the same byte-level determinism invariant the sparse
213
- * snapshot holds. Layout (integers little-endian):
214
- *
215
- * u32 relationCount
216
- * repeat relationCount times (registration / id order):
217
- * u32 isMulti
218
- * if multi:
219
- * u32 sourceCount
220
- * repeat sourceCount times (ascending source index):
221
- * u32 sourceIndex
222
- * u32 targetCount
223
- * f64 × targetCount (target EntityIDs, ascending) */
224
- export declare function snapshotRelations(relations: readonly RelationStore[]): Uint8Array;
225
- /** Rebuild every relation's side indices from a `snapshotRelations` buffer and
226
- * the already-restored sparse stores. Each relation's indices are reset first
227
- * (idempotent into a dirty world), then:
91
+ /** What the relation service needs from `Store`, nothing more. The accessor
92
+ * members re-read the live field on every call, so capacity growth that
93
+ * reallocates `generations`, `entityArchetypes` or `entityRows` is always
94
+ * observed. Never cache their return values across mutations. */
95
+ export interface RelationServiceHost {
96
+ isAlive(id: EntityID): boolean;
97
+ hasSparse(entityId: EntityID, def: SparseComponentDef): boolean;
98
+ pushSparseStore(fieldNames: string[], fieldTypes: TypedArrayTag[]): SparseComponentDef;
99
+ sparseStoreOf(def: SparseComponentDef): SparseComponentStore;
100
+ sparseStores(): readonly SparseComponentStore[];
101
+ generations(): Int32Array;
102
+ entityArchetypes(): Int32Array;
103
+ entityRows(): Int32Array;
104
+ archetypes(): readonly Archetype[];
105
+ forEachSparseMatch(include: BitSet, exclude: BitSet | null, anyOf: BitSet | null, terms: QueryTerms, denseArchetypes: readonly Archetype[], cb: (entityId: EntityID) => void): void;
106
+ }
107
+ /** The relation service, as everything outside the plugin sees it.
228
108
  *
229
- * - **multi** forward target sets and their reverse edges are rebuilt from
230
- * `bytes` (the sets aren't in the sparse store, so the bytes are the only
231
- * source). `makeId` maps a source entity index to its full `EntityID`
232
- * (generation from the live slot) so reverse edges key correctly.
233
- * - **exclusive** — only the reset happens here; the reverse index is rebuilt
234
- * by the caller from the backing sparse store (which already round-tripped
235
- * through `restoreSparseStores`), since this function can't read it.
109
+ * `Store.relations` is public, so this is the whole crossing surface and not
110
+ * the world's half alone. The plugin's class implements it, and the compiler
111
+ * holds the two in step.
236
112
  *
237
- * Throws `SparseRestoreError` on any shape mismatch (relation count, an
238
- * exclusive/multi flag that disagrees with the registered relation, a multi
239
- * source index past `MAX_INDEX`, or a truncated / over-long buffer) rather than
240
- * silently building a corrupt index. */
241
- export declare function restoreRelations(relations: readonly RelationStore[], bytes: Uint8Array, makeId: (index: number) => EntityID): void;
113
+ * `purgeSource` and `cleanupTarget` are the one hot coupling: a dying entity
114
+ * loses its source role, and a target-death policy may cascade. Both sit
115
+ * behind a null test the destroy loop hoists, so a world without the plugin
116
+ * pays neither. Everything else is registration, a query driver or a `ctx`
117
+ * call, and cold. */
118
+ export interface RelationHooks {
119
+ /** The registry, in registration order. `Store.stateHash` and the snapshot
120
+ * service walk it. */
121
+ readonly stores: readonly RelationStoreView[];
122
+ /** Registered relation kinds. The destroy paths gate on this. */
123
+ readonly count: number;
124
+ /** Whether any relation registered a non-`orphan` `onDeleteTarget`. The
125
+ * destroy paths gate the reverse-index walk on it. */
126
+ readonly hasTargetCleanup: boolean;
127
+ /** Drop a destroyed entity's forward links and its reverse edges, and leave
128
+ * the sparse membership row to `Store`. Runs before the sparse purge. */
129
+ purgeSource(entityId: EntityID): void;
130
+ /** Apply each relation's target-death policy to the sources of a destroyed
131
+ * target. A `delete` policy appends the doomed sources to `cascade`. */
132
+ cleanupTarget(targetId: EntityID, cascade: EntityID[]): void;
133
+ /** Register a relation kind. The facade's typed overloads sit on top. */
134
+ registerRelation(opts?: RelationOptions): RelationDef;
135
+ addRelation(src: EntityID, def: RelationDef, tgt: EntityID): void;
136
+ removeRelation(src: EntityID, def: RelationDef, tgt?: EntityID): void;
137
+ targetOf(src: EntityID, def: RelationDef): EntityID | undefined;
138
+ targetsOf(src: EntityID, def: RelationDef): EntityID[];
139
+ sourcesOf(tgt: EntityID, def: RelationDef): EntityID[];
140
+ hasRelation(src: EntityID, def: RelationDef): boolean;
141
+ /** Every `(source, target)` pair of one relation, the `(R, *)` wildcard. */
142
+ pairsOf(def: RelationDef): readonly (readonly [EntityID, EntityID])[];
143
+ /** Every `(relation, source)` pointing at `tgt`, the `(*, T)` wildcard. */
144
+ sourcesOfAny(tgt: EntityID): readonly (readonly [RelationDef, EntityID])[];
145
+ /** The chain from `src` up to its root, nearest ancestor first. */
146
+ ancestorsOf(src: EntityID, def: RelationDef): EntityID[];
147
+ /** The root of the chain `src` sits on. */
148
+ rootOf(src: EntityID, def: RelationDef): EntityID;
149
+ /** The subtree under `root`, breadth-first, parents before children. */
150
+ cascadeOf(root: EntityID, def: RelationDef): EntityID[];
151
+ /** Drop every reverse entry whose target died, and report the count. */
152
+ compactRelations(): number;
153
+ /** The backing sparse component of a relation, which the query terms
154
+ * compose against. */
155
+ relationBackingSparseId(def: RelationDef): SparseComponentID;
156
+ /** Drive a `(*, T)` wildcard query. */
157
+ forEachTargetMatch(target: EntityID, include: BitSet, exclude: BitSet | null, anyOf: BitSet | null, terms: QueryTerms, cb: (entityId: EntityID) => void): void;
158
+ /** Drive a `hierarchy(R)` query, parents before children. */
159
+ forEachHierarchyMatch(include: BitSet, exclude: BitSet | null, anyOf: BitSet | null, terms: QueryTerms, denseArchetypes: readonly Archetype[], relation: RelationDef, maxDepth: number, cb: (entityId: EntityID) => void): void;
160
+ }
242
161
  export {};
243
162
  //# sourceMappingURL=relation.d.ts.map