@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,6 +1,9 @@
1
1
  import { Brand, TypedArrayTag } from '../../type_primitives/index.cjs';
2
2
  import { ComponentSchema } from './component.cjs';
3
- /** Sparse-component handle id. A separate id space from `ComponentID` — it
3
+ import { AccessorColumns } from './ref.cjs';
4
+ import { SparseRestoreError } from '../restore_errors.cjs';
5
+ export { SparseRestoreError };
6
+ /** Sparse-component handle id. A separate id space from `ComponentID`. It
4
7
  * indexes `Store`'s `sparseStores`, never the archetype mask, which is the
5
8
  * mechanism by which sparse components escape the 128-bit identity cap. */
6
9
  export type SparseComponentID = Brand<number, "sparse_component_id">;
@@ -8,63 +11,118 @@ declare const __sparseSchema: unique symbol;
8
11
  export type SparseComponentDef<S extends ComponentSchema = ComponentSchema> = SparseComponentID & {
9
12
  readonly [__sparseSchema]: S;
10
13
  };
11
- /** Recover a sparse def's schema type the sparse sibling of `SchemaOf`
14
+ /** Recover a sparse def's schema type, the sparse sibling of `SchemaOf`
12
15
  * (component.ts), used by the typed `SystemContext` sparse surface. */
13
16
  export type SparseSchemaOf<D> = D extends SparseComponentDef<infer S extends ComponentSchema> ? S : never;
14
- /** One sparse component's membership + data. Pure data structure the `Store`
15
- * owns liveness checks and dev-mode error throwing; this class only knows
16
- * entity indices and field rows. */
17
+ /** One sparse component's membership + data. Pure data structure, the `Store`
18
+ * owns liveness checks and dev-mode error throwing. This class only knows
19
+ * entity indices and field values. */
17
20
  export declare class SparseComponentStore {
18
- /** entity index → field-value row (length = field count; `[]` for a tag). */
19
- private readonly _data;
20
21
  readonly fieldNames: string[];
21
22
  readonly fieldTypes: TypedArrayTag[];
22
23
  readonly fieldIndex: Record<string, number>;
24
+ /** The columns a ref or cursor reads through (ref.ts): the field columns at
25
+ * the global ids of their names, `NO_COLUMN` elsewhere. Refilled in place
26
+ * on every grow, so its identity is stable for the life of the store. */
27
+ readonly accCols: AccessorColumns;
28
+ /** One column for each field, indexed by entity index. All of one length,
29
+ * `_cap`. Replaced together on a grow. */
30
+ private _cols;
31
+ /** The numeric type tag of each field, for the kind-split element writes. */
32
+ private readonly _kinds;
33
+ /** True when every field is `f64`: the value writes then take one inline
34
+ * loop whose site sees `Float64Array` alone. */
35
+ private readonly _allF64;
36
+ /** The global name id of each field, in schema order. */
37
+ private readonly _gids;
38
+ /** The index capacity of `_cols` and `_pos`. */
39
+ private _cap;
40
+ /** Entity index → position in `_dense`, or `-1` when not a member. */
41
+ private _pos;
42
+ /** The member indices, valid in `[0, _size)`. */
43
+ private _dense;
44
+ private _size;
45
+ /** The row ticks, one for each entity index, or `null` until `trackTicks`.
46
+ * The row grain of change detection for a sparse component: `setField` and
47
+ * a mutable cursor's `at` stamp the member's entry, and a join zeroes it,
48
+ * because an add is structural. Grows with the columns. A scheduling
49
+ * artifact: not in the snapshot or the hash. */
50
+ ticks: Uint32Array | null;
51
+ /** The change tick of the last stamp on any member: the gate an entity-level
52
+ * onSet drain reads before it walks the members. */
53
+ changedTick: number;
54
+ /** The change tick below which every record was drained. See
55
+ * `Store.drainSparseSet`. */
56
+ drainTick: number;
57
+ /** The `run` of the last `Store.drainSparseSet`. A second drain at the same
58
+ * run returns the first one's array, so several consumers of the change
59
+ * feed share one drain instead of taking the members away from each
60
+ * other. */
61
+ lastDrainRun: number;
23
62
  constructor(fieldNames: string[], fieldTypes: TypedArrayTag[]);
24
63
  /** Number of entities holding this sparse component. */
25
64
  get size(): number;
26
- /** Live entity indices that hold this component (dense, iteration order is
27
- * SparseMap insertion/swap order NOT canonical). Used by the hot query
28
- * integration path; for the determinism surface use
29
- * `canonicalIndices` instead. */
30
- get indices(): readonly number[];
31
- /** Live entity indices in **canonical** (ascending) order the determinism
32
- * ordering for `stateHash` + snapshot/restore. The native
33
- * `indices` getter is insertion/swap order and would make two worlds with
34
- * identical contents reached by different add/remove histories diverge, so
35
- * the cold determinism paths sort here. Allocates a sorted copy each call;
36
- * never call it on the hot query path. Indices are 20-bit entity indices,
65
+ /** Live entity indices that hold this component, as a view over the member
66
+ * list at the time of the call (iteration order is insertion and swap order.
67
+ * Not canonical). The view has a fixed length: a later add or remove is not
68
+ * visible through it, and a remove moves the last member into the hole. For
69
+ * a walk that must see its own mutations, loop `size` with `indexAt`, as the
70
+ * query driver does. For the determinism surface use `canonicalIndices`. */
71
+ get indices(): Uint32Array;
72
+ /** The member index at position `i` of the member list, `0 <= i < size`.
73
+ * Reads the live list, so a walk over `size` sees a swap-remove and an
74
+ * append made during the walk, exactly as a walk over a shrinking array
75
+ * did. */
76
+ indexAt(i: number): number;
77
+ /** Live entity indices in **canonical** (ascending) order, the determinism
78
+ * ordering for `stateHash`, snapshot and restore. The native
79
+ * `indices` order is insertion and swap order and would make two worlds with
80
+ * identical contents reached by different add and remove histories diverge, so
81
+ * the cold determinism paths sort here. Allocates a sorted copy each call,
82
+ * so never call it on the hot query path. Indices are 20-bit entity indices,
37
83
  * so the subtraction comparator can't overflow. */
38
84
  canonicalIndices(): number[];
39
- /** The field-value row for `index` (length = field count; `[]` for a tag),
40
- * or `undefined` if `index` isn't a member. Read-only view for the
41
- * determinism paths (`stateHash`, snapshot); mutate via `setField`. */
85
+ /** The field-value row for `index` (length = field count, `[]` for a tag),
86
+ * or `undefined` if `index` isn't a member. A copy, read out of the columns
87
+ * for the determinism paths (`stateHash`, snapshot). Mutate via `setField`. */
42
88
  getRow(index: number): readonly number[] | undefined;
43
- /** Drop all membership + data. Restore path only `restoreSparseStores`
89
+ /** Drop all membership + data. Restore path only, `restoreSparseStores`
44
90
  * repopulates a cleared store from snapshot bytes. */
45
91
  clear(): void;
46
- /** Insert the positional field-value `row` for `index`, taking ownership of
47
- * the array. Restore path only; bypasses the name→index mapping `setRow`
48
- * does, because snapshot bytes are already positional. */
49
- setRawRow(index: number, row: number[]): void;
92
+ /** Insert the positional field-value `row` for `index`. Restore path only.
93
+ * It bypasses the name→index mapping `setRow` does, because snapshot bytes
94
+ * are already positional. Each value converts to its field's type. */
95
+ setRawRow(index: number, row: readonly number[]): void;
50
96
  has(index: number): boolean;
51
97
  /** Insert or overwrite the row for `index`, building it from `values`.
52
- * Fields absent from `values` default to 0; a tag stores `[]`. */
53
- setRow(index: number, values: Record<string, number>): void;
54
- /** Drop `index`'s membership + data. Returns whether it was present. */
98
+ * Fields absent from `values` default to 0. A tag stores nothing. Each
99
+ * value converts to its field's type, as a typed array converts it. */
100
+ setRow(index: number, values: Record<string, number | undefined>): void;
101
+ /** Drop `index`'s membership. Returns whether it was present. The data at
102
+ * the index stays until the next add overwrites it. */
55
103
  remove(index: number): boolean;
56
104
  /** Read one field, or `undefined` if `index` doesn't hold this component. */
57
105
  getField(index: number, fieldIdx: number): number | undefined;
58
- /** Write one field. Returns `false` (no-op) if `index` isn't a member. */
59
- setField(index: number, fieldIdx: number, value: number): boolean;
106
+ /** Write one field, and stamp the row tick with `tick` when the store keeps
107
+ * one. Returns `false` (no-op) if `index` isn't a member. */
108
+ setField(index: number, fieldIdx: number, value: number, tick: number): boolean;
109
+ /** Keep a row tick for each entity index. Idempotent, never undone. */
110
+ trackTicks(): void;
111
+ /** Forget every record. A restore replaces the members and their values,
112
+ * so a tick that survived it would name a write that never happened. */
113
+ resetTicks(): void;
114
+ /** Make `index` a member, growing the columns to fit it. No-op for a
115
+ * member. */
116
+ private _join;
117
+ /** Double the index capacity until `index` fits, and move every column and
118
+ * the position map across. The accessor column array is refilled in place,
119
+ * so a held cursor keeps reading the live columns. */
120
+ private _growToFit;
60
121
  }
61
- export declare class SparseRestoreError extends Error {
62
- constructor(message: string);
63
- }
64
- /** Serialize a registry of sparse stores into a self-contained byte buffer —
122
+ /** Serialize a registry of sparse stores into a self-contained byte buffer,
65
123
  * the **sparse half** of a world snapshot (the dense half is the SAB snapshot,
66
- * `snapshotColumnStore`). Members are emitted in canonical (ascending
67
- * entity-index) order so the bytes are independent of insertion / removal
124
+ * `columnStoreBytesView`). Members are emitted in canonical (ascending
125
+ * entity-index) order so the bytes are independent of insertion and removal
68
126
  * history: two worlds with identical sparse contents reached by different
69
127
  * mutation orders serialize byte-for-byte the same.
70
128
  *
@@ -78,33 +136,32 @@ export declare class SparseRestoreError extends Error {
78
136
  * u32 memberCount
79
137
  * repeat memberCount times (canonical entity-index order):
80
138
  * u32 entityIndex
81
- * f64 × fieldCount (the positional field row; none for a tag)
139
+ * f64 × fieldCount (the positional field row, none for a tag)
82
140
  *
83
141
  * `fieldCount` is redundant with the registered schema but is written so
84
142
  * `restoreSparseStores` can reject a snapshot whose shape doesn't match the
85
- * stores it's restoring into; `schemaHash` (a `schemaFingerprint` over the
143
+ * stores it's restoring into. `schemaHash` (a `schemaFingerprint` over the
86
144
  * field names + types) goes further and rejects a buffer whose shape matches
87
145
  * field-for-field but whose field **identity** doesn't. */
88
146
  export declare function snapshotSparseStores(stores: readonly SparseComponentStore[]): Uint8Array;
89
147
  /** Repopulate already-registered sparse stores from `snapshotSparseStores`
90
148
  * bytes, giving full-equality round-trip (membership + data). The `stores`
91
- * registry must already exist with the same shape the snapshot was taken from
92
- * restore replays data into a world whose sparse components are registered
149
+ * registry must already exist with the same shape the snapshot was taken from.
150
+ * Restore replays data into a world whose sparse components are registered
93
151
  * in the same order (the registration is code, not snapshot state). Each store
94
152
  * is cleared first, so restoring is idempotent and drops any pre-existing rows.
95
153
  *
96
154
  * Throws `SparseRestoreError` on any shape or identity mismatch (store count,
97
155
  * field count, schema-hash field identity, an entity index past `MAX_INDEX`,
98
- * or a truncated / over-long buffer) rather than silently corrupting state.
99
- * The index bound matters because the index keys a `SparseMap` whose backing
100
- * array grows to `index` length — an unvalidated crafted u32 (up to ~4.29e9)
101
- * would allocate multi-GB. */
156
+ * or a truncated or over-long buffer) rather than silently corrupting state.
157
+ * The index bound matters because the columns of a store grow to fit the
158
+ * highest member index, an unvalidated crafted u32 (up to ~4.29e9) would ask
159
+ * for a multi-GB column for each field. */
102
160
  export declare function restoreSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
103
161
  /** Read-only validation of a `snapshotSparseStores` buffer against the live
104
- * registry, WITHOUT mutating any store. Mirrors `restoreSparseStores`'s
105
- * shape/field-identity/index-bounds/frame checks so `Store.restoreInto` can fail
106
- * closed on a sparse-registration mismatch BEFORE the dense mount overwrites live
107
- * column data. Throws `SparseRestoreError` on any mismatch / malformed buffer. */
108
- export declare function validateSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
109
- export {};
162
+ * registry, without mutating any store. Mirrors `restoreSparseStores`'s
163
+ * shape, field-identity, index-bounds and frame checks so `Store.restore` can fail
164
+ * closed on a sparse-registration mismatch before the dense mount overwrites live
165
+ * column data. Throws `SparseRestoreError` on any mismatch or malformed buffer. */
166
+ export declare function assertSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
110
167
  //# sourceMappingURL=sparse_store.d.ts.map
@@ -1,6 +1,9 @@
1
1
  import { Brand, TypedArrayTag } from '../../type_primitives/index.js';
2
2
  import { ComponentSchema } from './component.js';
3
- /** Sparse-component handle id. A separate id space from `ComponentID` — it
3
+ import { AccessorColumns } from './ref.js';
4
+ import { SparseRestoreError } from '../restore_errors.js';
5
+ export { SparseRestoreError };
6
+ /** Sparse-component handle id. A separate id space from `ComponentID`. It
4
7
  * indexes `Store`'s `sparseStores`, never the archetype mask, which is the
5
8
  * mechanism by which sparse components escape the 128-bit identity cap. */
6
9
  export type SparseComponentID = Brand<number, "sparse_component_id">;
@@ -8,63 +11,118 @@ declare const __sparseSchema: unique symbol;
8
11
  export type SparseComponentDef<S extends ComponentSchema = ComponentSchema> = SparseComponentID & {
9
12
  readonly [__sparseSchema]: S;
10
13
  };
11
- /** Recover a sparse def's schema type the sparse sibling of `SchemaOf`
14
+ /** Recover a sparse def's schema type, the sparse sibling of `SchemaOf`
12
15
  * (component.ts), used by the typed `SystemContext` sparse surface. */
13
16
  export type SparseSchemaOf<D> = D extends SparseComponentDef<infer S extends ComponentSchema> ? S : never;
14
- /** One sparse component's membership + data. Pure data structure the `Store`
15
- * owns liveness checks and dev-mode error throwing; this class only knows
16
- * entity indices and field rows. */
17
+ /** One sparse component's membership + data. Pure data structure, the `Store`
18
+ * owns liveness checks and dev-mode error throwing. This class only knows
19
+ * entity indices and field values. */
17
20
  export declare class SparseComponentStore {
18
- /** entity index → field-value row (length = field count; `[]` for a tag). */
19
- private readonly _data;
20
21
  readonly fieldNames: string[];
21
22
  readonly fieldTypes: TypedArrayTag[];
22
23
  readonly fieldIndex: Record<string, number>;
24
+ /** The columns a ref or cursor reads through (ref.ts): the field columns at
25
+ * the global ids of their names, `NO_COLUMN` elsewhere. Refilled in place
26
+ * on every grow, so its identity is stable for the life of the store. */
27
+ readonly accCols: AccessorColumns;
28
+ /** One column for each field, indexed by entity index. All of one length,
29
+ * `_cap`. Replaced together on a grow. */
30
+ private _cols;
31
+ /** The numeric type tag of each field, for the kind-split element writes. */
32
+ private readonly _kinds;
33
+ /** True when every field is `f64`: the value writes then take one inline
34
+ * loop whose site sees `Float64Array` alone. */
35
+ private readonly _allF64;
36
+ /** The global name id of each field, in schema order. */
37
+ private readonly _gids;
38
+ /** The index capacity of `_cols` and `_pos`. */
39
+ private _cap;
40
+ /** Entity index → position in `_dense`, or `-1` when not a member. */
41
+ private _pos;
42
+ /** The member indices, valid in `[0, _size)`. */
43
+ private _dense;
44
+ private _size;
45
+ /** The row ticks, one for each entity index, or `null` until `trackTicks`.
46
+ * The row grain of change detection for a sparse component: `setField` and
47
+ * a mutable cursor's `at` stamp the member's entry, and a join zeroes it,
48
+ * because an add is structural. Grows with the columns. A scheduling
49
+ * artifact: not in the snapshot or the hash. */
50
+ ticks: Uint32Array | null;
51
+ /** The change tick of the last stamp on any member: the gate an entity-level
52
+ * onSet drain reads before it walks the members. */
53
+ changedTick: number;
54
+ /** The change tick below which every record was drained. See
55
+ * `Store.drainSparseSet`. */
56
+ drainTick: number;
57
+ /** The `run` of the last `Store.drainSparseSet`. A second drain at the same
58
+ * run returns the first one's array, so several consumers of the change
59
+ * feed share one drain instead of taking the members away from each
60
+ * other. */
61
+ lastDrainRun: number;
23
62
  constructor(fieldNames: string[], fieldTypes: TypedArrayTag[]);
24
63
  /** Number of entities holding this sparse component. */
25
64
  get size(): number;
26
- /** Live entity indices that hold this component (dense, iteration order is
27
- * SparseMap insertion/swap order NOT canonical). Used by the hot query
28
- * integration path; for the determinism surface use
29
- * `canonicalIndices` instead. */
30
- get indices(): readonly number[];
31
- /** Live entity indices in **canonical** (ascending) order the determinism
32
- * ordering for `stateHash` + snapshot/restore. The native
33
- * `indices` getter is insertion/swap order and would make two worlds with
34
- * identical contents reached by different add/remove histories diverge, so
35
- * the cold determinism paths sort here. Allocates a sorted copy each call;
36
- * never call it on the hot query path. Indices are 20-bit entity indices,
65
+ /** Live entity indices that hold this component, as a view over the member
66
+ * list at the time of the call (iteration order is insertion and swap order.
67
+ * Not canonical). The view has a fixed length: a later add or remove is not
68
+ * visible through it, and a remove moves the last member into the hole. For
69
+ * a walk that must see its own mutations, loop `size` with `indexAt`, as the
70
+ * query driver does. For the determinism surface use `canonicalIndices`. */
71
+ get indices(): Uint32Array;
72
+ /** The member index at position `i` of the member list, `0 <= i < size`.
73
+ * Reads the live list, so a walk over `size` sees a swap-remove and an
74
+ * append made during the walk, exactly as a walk over a shrinking array
75
+ * did. */
76
+ indexAt(i: number): number;
77
+ /** Live entity indices in **canonical** (ascending) order, the determinism
78
+ * ordering for `stateHash`, snapshot and restore. The native
79
+ * `indices` order is insertion and swap order and would make two worlds with
80
+ * identical contents reached by different add and remove histories diverge, so
81
+ * the cold determinism paths sort here. Allocates a sorted copy each call,
82
+ * so never call it on the hot query path. Indices are 20-bit entity indices,
37
83
  * so the subtraction comparator can't overflow. */
38
84
  canonicalIndices(): number[];
39
- /** The field-value row for `index` (length = field count; `[]` for a tag),
40
- * or `undefined` if `index` isn't a member. Read-only view for the
41
- * determinism paths (`stateHash`, snapshot); mutate via `setField`. */
85
+ /** The field-value row for `index` (length = field count, `[]` for a tag),
86
+ * or `undefined` if `index` isn't a member. A copy, read out of the columns
87
+ * for the determinism paths (`stateHash`, snapshot). Mutate via `setField`. */
42
88
  getRow(index: number): readonly number[] | undefined;
43
- /** Drop all membership + data. Restore path only `restoreSparseStores`
89
+ /** Drop all membership + data. Restore path only, `restoreSparseStores`
44
90
  * repopulates a cleared store from snapshot bytes. */
45
91
  clear(): void;
46
- /** Insert the positional field-value `row` for `index`, taking ownership of
47
- * the array. Restore path only; bypasses the name→index mapping `setRow`
48
- * does, because snapshot bytes are already positional. */
49
- setRawRow(index: number, row: number[]): void;
92
+ /** Insert the positional field-value `row` for `index`. Restore path only.
93
+ * It bypasses the name→index mapping `setRow` does, because snapshot bytes
94
+ * are already positional. Each value converts to its field's type. */
95
+ setRawRow(index: number, row: readonly number[]): void;
50
96
  has(index: number): boolean;
51
97
  /** Insert or overwrite the row for `index`, building it from `values`.
52
- * Fields absent from `values` default to 0; a tag stores `[]`. */
53
- setRow(index: number, values: Record<string, number>): void;
54
- /** Drop `index`'s membership + data. Returns whether it was present. */
98
+ * Fields absent from `values` default to 0. A tag stores nothing. Each
99
+ * value converts to its field's type, as a typed array converts it. */
100
+ setRow(index: number, values: Record<string, number | undefined>): void;
101
+ /** Drop `index`'s membership. Returns whether it was present. The data at
102
+ * the index stays until the next add overwrites it. */
55
103
  remove(index: number): boolean;
56
104
  /** Read one field, or `undefined` if `index` doesn't hold this component. */
57
105
  getField(index: number, fieldIdx: number): number | undefined;
58
- /** Write one field. Returns `false` (no-op) if `index` isn't a member. */
59
- setField(index: number, fieldIdx: number, value: number): boolean;
106
+ /** Write one field, and stamp the row tick with `tick` when the store keeps
107
+ * one. Returns `false` (no-op) if `index` isn't a member. */
108
+ setField(index: number, fieldIdx: number, value: number, tick: number): boolean;
109
+ /** Keep a row tick for each entity index. Idempotent, never undone. */
110
+ trackTicks(): void;
111
+ /** Forget every record. A restore replaces the members and their values,
112
+ * so a tick that survived it would name a write that never happened. */
113
+ resetTicks(): void;
114
+ /** Make `index` a member, growing the columns to fit it. No-op for a
115
+ * member. */
116
+ private _join;
117
+ /** Double the index capacity until `index` fits, and move every column and
118
+ * the position map across. The accessor column array is refilled in place,
119
+ * so a held cursor keeps reading the live columns. */
120
+ private _growToFit;
60
121
  }
61
- export declare class SparseRestoreError extends Error {
62
- constructor(message: string);
63
- }
64
- /** Serialize a registry of sparse stores into a self-contained byte buffer —
122
+ /** Serialize a registry of sparse stores into a self-contained byte buffer,
65
123
  * the **sparse half** of a world snapshot (the dense half is the SAB snapshot,
66
- * `snapshotColumnStore`). Members are emitted in canonical (ascending
67
- * entity-index) order so the bytes are independent of insertion / removal
124
+ * `columnStoreBytesView`). Members are emitted in canonical (ascending
125
+ * entity-index) order so the bytes are independent of insertion and removal
68
126
  * history: two worlds with identical sparse contents reached by different
69
127
  * mutation orders serialize byte-for-byte the same.
70
128
  *
@@ -78,33 +136,32 @@ export declare class SparseRestoreError extends Error {
78
136
  * u32 memberCount
79
137
  * repeat memberCount times (canonical entity-index order):
80
138
  * u32 entityIndex
81
- * f64 × fieldCount (the positional field row; none for a tag)
139
+ * f64 × fieldCount (the positional field row, none for a tag)
82
140
  *
83
141
  * `fieldCount` is redundant with the registered schema but is written so
84
142
  * `restoreSparseStores` can reject a snapshot whose shape doesn't match the
85
- * stores it's restoring into; `schemaHash` (a `schemaFingerprint` over the
143
+ * stores it's restoring into. `schemaHash` (a `schemaFingerprint` over the
86
144
  * field names + types) goes further and rejects a buffer whose shape matches
87
145
  * field-for-field but whose field **identity** doesn't. */
88
146
  export declare function snapshotSparseStores(stores: readonly SparseComponentStore[]): Uint8Array;
89
147
  /** Repopulate already-registered sparse stores from `snapshotSparseStores`
90
148
  * bytes, giving full-equality round-trip (membership + data). The `stores`
91
- * registry must already exist with the same shape the snapshot was taken from
92
- * restore replays data into a world whose sparse components are registered
149
+ * registry must already exist with the same shape the snapshot was taken from.
150
+ * Restore replays data into a world whose sparse components are registered
93
151
  * in the same order (the registration is code, not snapshot state). Each store
94
152
  * is cleared first, so restoring is idempotent and drops any pre-existing rows.
95
153
  *
96
154
  * Throws `SparseRestoreError` on any shape or identity mismatch (store count,
97
155
  * field count, schema-hash field identity, an entity index past `MAX_INDEX`,
98
- * or a truncated / over-long buffer) rather than silently corrupting state.
99
- * The index bound matters because the index keys a `SparseMap` whose backing
100
- * array grows to `index` length — an unvalidated crafted u32 (up to ~4.29e9)
101
- * would allocate multi-GB. */
156
+ * or a truncated or over-long buffer) rather than silently corrupting state.
157
+ * The index bound matters because the columns of a store grow to fit the
158
+ * highest member index, an unvalidated crafted u32 (up to ~4.29e9) would ask
159
+ * for a multi-GB column for each field. */
102
160
  export declare function restoreSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
103
161
  /** Read-only validation of a `snapshotSparseStores` buffer against the live
104
- * registry, WITHOUT mutating any store. Mirrors `restoreSparseStores`'s
105
- * shape/field-identity/index-bounds/frame checks so `Store.restoreInto` can fail
106
- * closed on a sparse-registration mismatch BEFORE the dense mount overwrites live
107
- * column data. Throws `SparseRestoreError` on any mismatch / malformed buffer. */
108
- export declare function validateSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
109
- export {};
162
+ * registry, without mutating any store. Mirrors `restoreSparseStores`'s
163
+ * shape, field-identity, index-bounds and frame checks so `Store.restore` can fail
164
+ * closed on a sparse-registration mismatch before the dense mount overwrites live
165
+ * column data. Throws `SparseRestoreError` on any mismatch or malformed buffer. */
166
+ export declare function assertSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
110
167
  //# sourceMappingURL=sparse_store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sparse_store.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/sparse_store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;KA0BK;AAEL,OAAO,EAAE,KAAK,EAAa,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;2EAE2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAOrE,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAE5C,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI,iBAAiB,GAAG;IACjG,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;CAC7B,CAAC;AAEF;uEACuE;AACvE,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,kBAAkB,CAAC,MAAM,CAAC,SAAS,eAAe,CAAC,GAC1F,CAAC,GACD,KAAK,CAAC;AAET;;oCAEoC;AACpC,qBAAa,oBAAoB;IAChC,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,SAAgB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrC,SAAgB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5C,SAAgB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEvC,UAAU,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE;IAQ7D,wDAAwD;IACxD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;qCAGiC;IACjC,IAAW,OAAO,IAAI,SAAS,MAAM,EAAE,CAEtC;IAED;;;;;;uDAMmD;IAC5C,gBAAgB,IAAI,MAAM,EAAE;IAInC;;2EAEuE;IAChE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS;IAI3D;0DACsD;IAC/C,KAAK,IAAI,IAAI;IAIpB;;8DAE0D;IACnD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7C,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIlC;sEACkE;IAC3D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAUlE,wEAAwE;IACjE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC,6EAA6E;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKpE,0EAA0E;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAMxE;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI3B;AAuCD;;;;;;;;;;;;;;;;;;;;;;;2DAuB2D;AAC3D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,UAAU,CAuCxF;AAED;;;;;;;;;;;;8BAY8B;AAC9B,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,KAAK,EAAE,UAAU,GACf,IAAI,CAkEN;AAED;;;;kFAIkF;AAClF,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,KAAK,EAAE,UAAU,GACf,IAAI,CA4DN"}
1
+ {"version":3,"file":"sparse_store.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/sparse_store.ts"],"names":[],"mappings":"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"}