@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,61 +1,59 @@
1
1
  /**
2
- * Command ring WASM-side producer / TS-side consumer SPSC ring buffer
2
+ * Command ring. A WASM-side producer and TS-side consumer SPSC ring buffer
3
3
  * for structural-change intents emitted during `sim.tick()`.
4
4
  *
5
5
  * Layout:
6
6
  *
7
- * [ write_head: u32 ] slot 0..N-1, monotonic (NOT slot-modulo)
7
+ * [ write_head: u32 ] slot 0..N-1, monotonic (not slot-modulo)
8
8
  * [ read_head: u32 ] slot 0..N-1, monotonic
9
9
  * [ capacity: u32 ] slot count, power-of-two
10
- * [ overflow: u32 ] 0 = OK; 1 = WASM exhausted the ring this tick
10
+ * [ overflow: u32 ] 0 = OK, 1 = WASM exhausted the ring this tick
11
11
  * [ slot 0: 16 B ] opCode: u8, payload: [15]u8
12
12
  * [ slot 1: 16 B ] ...
13
13
  * ...
14
14
  *
15
15
  * SPSC contract (single host thread):
16
- * - Producer: WASM `sim.tick()`. Pushes 0..N commands during one tick;
16
+ * - Producer: the WASM tick. It pushes 0..N commands during one tick and
17
17
  * bumps `write_head` after each.
18
18
  * - Consumer: TS host, immediately after `wasm.tick()` returns. Drains
19
- * 0..N pending commands; bumps `read_head` after each.
19
+ * 0..N pending commands. Bumps `read_head` after each.
20
20
  * - The two never run concurrently (one host thread orchestrates
21
21
  * both). A later worker offload promotes the head
22
- * bumps to `Atomics.store`; that's an additive change without
22
+ * bumps to `Atomics.store`. That's an additive change without
23
23
  * altering the layout.
24
24
  *
25
25
  * Overflow:
26
26
  * - If WASM would write a slot when (`write_head - read_head == capacity`),
27
27
  * it sets `overflow = 1` and drops the command. TS treats overflow as
28
- * a hard error in dev builds; production logs and continues (a command
28
+ * a hard error in dev builds. Production logs and continues (a command
29
29
  * might be lost rather than crash the host).
30
30
  *
31
31
  * Slot format:
32
32
  * byte 0: opCode (u8). 0 is reserved as the empty-slot marker
33
- * (`COMMAND_OP_EMPTY`); all other codes are consumer-defined.
34
- * The engine never interprets a code — it drains
35
- * `(opCode, payload)` and hands them to the attached
36
- * consumer, which owns the opcode enum + payload codecs (the
37
- * game's live in `@internal/sim`'s `command_payloads.ts`).
33
+ * (`COMMAND_OP_EMPTY`), and every other code is
34
+ * consumer-defined. The engine never interprets a code. It
35
+ * drains `(opCode, payload)` and hands them to the attached
36
+ * consumer, which owns the opcode enum and the payload codecs.
38
37
  * bytes 1..15: payload, op-specific. Multi-byte fields may be
39
- * unaligned within the payload; readers must use byte-
40
- * oriented helpers (DataView in TS, `mem.readInt` in Zig).
38
+ * unaligned within the payload. Readers must use byte-
39
+ * oriented helpers, such as a `DataView` in TS.
41
40
  *
42
- * The ring lives BEFORE the layout-descriptor region in the SAB (right
43
- * after the 32-byte header) so its offset is stable across descriptor /
44
- * column-region growth. The host writes `header.command_ring_off` to
45
- * point at it during `createColumnStore`; absent ring is signalled by
41
+ * The ring lives before the layout-descriptor region in the SAB (right
42
+ * after the `STORE_HEADER_BYTES` header) so its offset is stable across
43
+ * descriptor growth and column-region growth. The host writes `header.command_ring_off` to
44
+ * point at it during `createColumnStore`. Absent ring is signalled by
46
45
  * `command_ring_off === 0`.
47
46
  */
48
47
  /** Total bytes for the ring header. */
49
48
  export declare const COMMAND_RING_HEADER_BYTES = 16;
50
- /** Fixed slot size 1-byte opCode + 15-byte payload. */
49
+ /** Fixed slot size, 1-byte opCode + 15-byte payload. */
51
50
  export declare const COMMAND_RING_SLOT_BYTES = 16;
52
51
  /** Default ring capacity in slots. 256 × 16 B = 4 KiB of ring data plus
53
- * 16 B header. Sized for the worst-case burst (peak spawn intents per
54
- * tick) × small safety margin. Tune up if a burst pushes past it
55
- * in the bench harness. */
52
+ * 16 B header. Sized for the worst-case burst of spawn intents in one tick,
53
+ * with a small safety margin. Tune it up when a burst pushes past it. */
56
54
  export declare const COMMAND_RING_DEFAULT_CAPACITY_SLOTS = 256;
57
- /** Byte offsets within the ring header. Mirrored on the Zig side in
58
- * `packages/sim/src/command_ring.zig` keep in sync. */
55
+ /** Byte offsets within the ring header. A reader on the module side mirrors
56
+ * these offsets, so a change here is an ABI change. */
59
57
  export declare const COMMAND_RING_HEADER_OFFSETS: {
60
58
  readonly write_head: 0;
61
59
  readonly read_head: 4;
@@ -64,9 +62,8 @@ export declare const COMMAND_RING_HEADER_OFFSETS: {
64
62
  };
65
63
  /** Op-code `0` is reserved across the SAB layer as the empty-slot marker
66
64
  * so a zero-initialised SAB doesn't appear to hold a valid command (mirror
67
- * of `EVENT_OP_EMPTY`). All non-zero codes are opaque to the engine
68
- * the attached consumer owns the opcode enum + payload codecs (the game's
69
- * `COMMAND_OP` + `SpawnUnitFields` live in `@internal/sim`). */
65
+ * of `EVENT_OP_EMPTY`). Every non-zero code is opaque to the engine, and
66
+ * the attached consumer owns the opcode enum and the payload codecs. */
70
67
  export declare const COMMAND_OP_EMPTY = 0;
71
68
  /** Total bytes the ring occupies for `capacity_slots` slots. */
72
69
  export declare function commandRingBytes(capacitySlots: number): number;
@@ -74,26 +71,26 @@ export declare class CommandRingError extends Error {
74
71
  constructor(message: string);
75
72
  }
76
73
  /** Initialise the ring header at `ringOff` in the SAB. Zeroes
77
- * `write_head`, `read_head`, and `overflow_flag`; sets `capacity_slots`.
74
+ * `write_head`, `read_head`, and `overflow_flag`. Sets `capacity_slots`.
78
75
  * Slot bytes are left as-is (callers normally allocate the ring on a
79
76
  * fresh, zero-initialised SAB). */
80
77
  export declare function initCommandRing(view: DataView, ringOff: number, capacitySlots: number): void;
81
78
  /** Read live ring-header field. */
82
- export declare function ringWriteHead(view: DataView, ringOff: number): number;
83
- export declare function ringReadHead(view: DataView, ringOff: number): number;
84
- export declare function ringCapacitySlots(view: DataView, ringOff: number): number;
85
- export declare function ringOverflow(view: DataView, ringOff: number): boolean;
79
+ export declare function commandRingWriteHead(view: DataView, ringOff: number): number;
80
+ export declare function commandRingReadHead(view: DataView, ringOff: number): number;
81
+ export declare function commandRingCapacitySlots(view: DataView, ringOff: number): number;
82
+ export declare function commandRingOverflow(view: DataView, ringOff: number): boolean;
86
83
  /** Pending command count = `(write_head - read_head) mod 2^32`. The
87
- * `>>> 0` keeps the result a u32 in the wrap-around case (rings live for
88
- * the host's lifetime; 2^32 commands at 50 Hz 2 years, but the
89
- * arithmetic should be correct regardless). */
84
+ * `>>> 0` keeps the result a u32 in the wrap-around case. A ring lives for
85
+ * the host's lifetime, so a long-lived host can reach the wrap, and the
86
+ * arithmetic has to stay correct there. */
90
87
  export declare function pendingCommandCount(view: DataView, ringOff: number): number;
91
- /** Push a command into the ring from the TS side. Production producer is
92
- * WASM (via `command_ring.zig`); this is for host-side tests and for
93
- * symmetric tests across the two sides. Returns `false` on overflow and
88
+ /** Push a command into the ring from the TS side. The production producer is
89
+ * the WASM module, through its own ring writer. This is for host-side tests
90
+ * and for symmetric tests across the two sides. Returns `false` on overflow and
94
91
  * sets the overflow flag. Payload must be exactly 15 bytes. */
95
92
  export declare function pushCommand(view: DataView, ringOff: number, opCode: number, payload: Uint8Array): boolean;
96
- /** Read one command from the ring. Returns opCode (0 = empty/no
93
+ /** Read one command from the ring. Returns opCode (0 = empty, no
97
94
  * command) and fills `outPayload` (15 bytes) with the slot's payload.
98
95
  * When 0 is returned, `outPayload` is untouched. */
99
96
  export declare function popCommand(view: DataView, ringOff: number, outPayload: Uint8Array): number;
@@ -1,61 +1,59 @@
1
1
  /**
2
- * Command ring WASM-side producer / TS-side consumer SPSC ring buffer
2
+ * Command ring. A WASM-side producer and TS-side consumer SPSC ring buffer
3
3
  * for structural-change intents emitted during `sim.tick()`.
4
4
  *
5
5
  * Layout:
6
6
  *
7
- * [ write_head: u32 ] slot 0..N-1, monotonic (NOT slot-modulo)
7
+ * [ write_head: u32 ] slot 0..N-1, monotonic (not slot-modulo)
8
8
  * [ read_head: u32 ] slot 0..N-1, monotonic
9
9
  * [ capacity: u32 ] slot count, power-of-two
10
- * [ overflow: u32 ] 0 = OK; 1 = WASM exhausted the ring this tick
10
+ * [ overflow: u32 ] 0 = OK, 1 = WASM exhausted the ring this tick
11
11
  * [ slot 0: 16 B ] opCode: u8, payload: [15]u8
12
12
  * [ slot 1: 16 B ] ...
13
13
  * ...
14
14
  *
15
15
  * SPSC contract (single host thread):
16
- * - Producer: WASM `sim.tick()`. Pushes 0..N commands during one tick;
16
+ * - Producer: the WASM tick. It pushes 0..N commands during one tick and
17
17
  * bumps `write_head` after each.
18
18
  * - Consumer: TS host, immediately after `wasm.tick()` returns. Drains
19
- * 0..N pending commands; bumps `read_head` after each.
19
+ * 0..N pending commands. Bumps `read_head` after each.
20
20
  * - The two never run concurrently (one host thread orchestrates
21
21
  * both). A later worker offload promotes the head
22
- * bumps to `Atomics.store`; that's an additive change without
22
+ * bumps to `Atomics.store`. That's an additive change without
23
23
  * altering the layout.
24
24
  *
25
25
  * Overflow:
26
26
  * - If WASM would write a slot when (`write_head - read_head == capacity`),
27
27
  * it sets `overflow = 1` and drops the command. TS treats overflow as
28
- * a hard error in dev builds; production logs and continues (a command
28
+ * a hard error in dev builds. Production logs and continues (a command
29
29
  * might be lost rather than crash the host).
30
30
  *
31
31
  * Slot format:
32
32
  * byte 0: opCode (u8). 0 is reserved as the empty-slot marker
33
- * (`COMMAND_OP_EMPTY`); all other codes are consumer-defined.
34
- * The engine never interprets a code — it drains
35
- * `(opCode, payload)` and hands them to the attached
36
- * consumer, which owns the opcode enum + payload codecs (the
37
- * game's live in `@internal/sim`'s `command_payloads.ts`).
33
+ * (`COMMAND_OP_EMPTY`), and every other code is
34
+ * consumer-defined. The engine never interprets a code. It
35
+ * drains `(opCode, payload)` and hands them to the attached
36
+ * consumer, which owns the opcode enum and the payload codecs.
38
37
  * bytes 1..15: payload, op-specific. Multi-byte fields may be
39
- * unaligned within the payload; readers must use byte-
40
- * oriented helpers (DataView in TS, `mem.readInt` in Zig).
38
+ * unaligned within the payload. Readers must use byte-
39
+ * oriented helpers, such as a `DataView` in TS.
41
40
  *
42
- * The ring lives BEFORE the layout-descriptor region in the SAB (right
43
- * after the 32-byte header) so its offset is stable across descriptor /
44
- * column-region growth. The host writes `header.command_ring_off` to
45
- * point at it during `createColumnStore`; absent ring is signalled by
41
+ * The ring lives before the layout-descriptor region in the SAB (right
42
+ * after the `STORE_HEADER_BYTES` header) so its offset is stable across
43
+ * descriptor growth and column-region growth. The host writes `header.command_ring_off` to
44
+ * point at it during `createColumnStore`. Absent ring is signalled by
46
45
  * `command_ring_off === 0`.
47
46
  */
48
47
  /** Total bytes for the ring header. */
49
48
  export declare const COMMAND_RING_HEADER_BYTES = 16;
50
- /** Fixed slot size 1-byte opCode + 15-byte payload. */
49
+ /** Fixed slot size, 1-byte opCode + 15-byte payload. */
51
50
  export declare const COMMAND_RING_SLOT_BYTES = 16;
52
51
  /** Default ring capacity in slots. 256 × 16 B = 4 KiB of ring data plus
53
- * 16 B header. Sized for the worst-case burst (peak spawn intents per
54
- * tick) × small safety margin. Tune up if a burst pushes past it
55
- * in the bench harness. */
52
+ * 16 B header. Sized for the worst-case burst of spawn intents in one tick,
53
+ * with a small safety margin. Tune it up when a burst pushes past it. */
56
54
  export declare const COMMAND_RING_DEFAULT_CAPACITY_SLOTS = 256;
57
- /** Byte offsets within the ring header. Mirrored on the Zig side in
58
- * `packages/sim/src/command_ring.zig` keep in sync. */
55
+ /** Byte offsets within the ring header. A reader on the module side mirrors
56
+ * these offsets, so a change here is an ABI change. */
59
57
  export declare const COMMAND_RING_HEADER_OFFSETS: {
60
58
  readonly write_head: 0;
61
59
  readonly read_head: 4;
@@ -64,9 +62,8 @@ export declare const COMMAND_RING_HEADER_OFFSETS: {
64
62
  };
65
63
  /** Op-code `0` is reserved across the SAB layer as the empty-slot marker
66
64
  * so a zero-initialised SAB doesn't appear to hold a valid command (mirror
67
- * of `EVENT_OP_EMPTY`). All non-zero codes are opaque to the engine
68
- * the attached consumer owns the opcode enum + payload codecs (the game's
69
- * `COMMAND_OP` + `SpawnUnitFields` live in `@internal/sim`). */
65
+ * of `EVENT_OP_EMPTY`). Every non-zero code is opaque to the engine, and
66
+ * the attached consumer owns the opcode enum and the payload codecs. */
70
67
  export declare const COMMAND_OP_EMPTY = 0;
71
68
  /** Total bytes the ring occupies for `capacity_slots` slots. */
72
69
  export declare function commandRingBytes(capacitySlots: number): number;
@@ -74,26 +71,26 @@ export declare class CommandRingError extends Error {
74
71
  constructor(message: string);
75
72
  }
76
73
  /** Initialise the ring header at `ringOff` in the SAB. Zeroes
77
- * `write_head`, `read_head`, and `overflow_flag`; sets `capacity_slots`.
74
+ * `write_head`, `read_head`, and `overflow_flag`. Sets `capacity_slots`.
78
75
  * Slot bytes are left as-is (callers normally allocate the ring on a
79
76
  * fresh, zero-initialised SAB). */
80
77
  export declare function initCommandRing(view: DataView, ringOff: number, capacitySlots: number): void;
81
78
  /** Read live ring-header field. */
82
- export declare function ringWriteHead(view: DataView, ringOff: number): number;
83
- export declare function ringReadHead(view: DataView, ringOff: number): number;
84
- export declare function ringCapacitySlots(view: DataView, ringOff: number): number;
85
- export declare function ringOverflow(view: DataView, ringOff: number): boolean;
79
+ export declare function commandRingWriteHead(view: DataView, ringOff: number): number;
80
+ export declare function commandRingReadHead(view: DataView, ringOff: number): number;
81
+ export declare function commandRingCapacitySlots(view: DataView, ringOff: number): number;
82
+ export declare function commandRingOverflow(view: DataView, ringOff: number): boolean;
86
83
  /** Pending command count = `(write_head - read_head) mod 2^32`. The
87
- * `>>> 0` keeps the result a u32 in the wrap-around case (rings live for
88
- * the host's lifetime; 2^32 commands at 50 Hz 2 years, but the
89
- * arithmetic should be correct regardless). */
84
+ * `>>> 0` keeps the result a u32 in the wrap-around case. A ring lives for
85
+ * the host's lifetime, so a long-lived host can reach the wrap, and the
86
+ * arithmetic has to stay correct there. */
90
87
  export declare function pendingCommandCount(view: DataView, ringOff: number): number;
91
- /** Push a command into the ring from the TS side. Production producer is
92
- * WASM (via `command_ring.zig`); this is for host-side tests and for
93
- * symmetric tests across the two sides. Returns `false` on overflow and
88
+ /** Push a command into the ring from the TS side. The production producer is
89
+ * the WASM module, through its own ring writer. This is for host-side tests
90
+ * and for symmetric tests across the two sides. Returns `false` on overflow and
94
91
  * sets the overflow flag. Payload must be exactly 15 bytes. */
95
92
  export declare function pushCommand(view: DataView, ringOff: number, opCode: number, payload: Uint8Array): boolean;
96
- /** Read one command from the ring. Returns opCode (0 = empty/no
93
+ /** Read one command from the ring. Returns opCode (0 = empty, no
97
94
  * command) and fills `outPayload` (15 bytes) with the slot's payload.
98
95
  * When 0 is returned, `outPayload` is untouched. */
99
96
  export declare function popCommand(view: DataView, ringOff: number, outPayload: Uint8Array): number;
@@ -1 +1 @@
1
- {"version":3,"file":"command_ring.d.ts","sourceRoot":"","sources":["../../../src/core/store/command_ring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,uCAAuC;AACvC,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;2BAG2B;AAC3B,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD;yDACyD;AACzD,eAAO,MAAM,2BAA2B;;;;;CAK9B,CAAC;AAEX;;;;gEAIgE;AAChE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9D;AASD,qBAAa,gBAAiB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI3B;AAED;;;mCAGmC;AACnC,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAU5F;AAED,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpE;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAErE;AAED;;;+CAG+C;AAC/C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;+DAG+D;AAC/D,wBAAgB,WAAW,CAC1B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,GACjB,OAAO,CAmCT;AAED;;oDAEoD;AACpD,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAiB1F;AAED;;;;gEAIgE;AAChE,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,IAAI,GACpD,MAAM,CAWR"}
1
+ {"version":3,"file":"command_ring.d.ts","sourceRoot":"","sources":["../../../src/core/store/command_ring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,uCAAuC;AACvC,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,wDAAwD;AACxD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;yEAEyE;AACzE,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD;uDACuD;AACvD,eAAO,MAAM,2BAA2B;;;;;CAK9B,CAAC;AAEX;;;wEAGwE;AACxE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9D;AASD,qBAAa,gBAAiB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI3B;AAED;;;mCAGmC;AACnC,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAU5F;AAED,mCAAmC;AACnC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AACD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhF;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED;;;2CAG2C;AAC3C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;+DAG+D;AAC/D,wBAAgB,WAAW,CAC1B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,GACjB,OAAO,CA2CT;AAED;;oDAEoD;AACpD,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAqB1F;AAED;;;;gEAIgE;AAChE,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,IAAI,GACpD,MAAM,CAWR"}
@@ -1,8 +1,7 @@
1
- import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.cjs';
2
- export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
1
+ import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.cjs';
2
+ export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
3
3
  /** type_tag values for `ColumnDescriptor.type_tag`. The order matches the
4
- * TypedArrayTag union in `packages/std/type_primitives` so a tag's element
5
- * width is `TYPE_TAG_STRIDE[tag]`. */
4
+ * `TypedArrayTag` union, so a tag's element width is `TYPE_TAG_STRIDE[tag]`. */
6
5
  export declare const TYPE_TAG: {
7
6
  readonly u8: 0;
8
7
  readonly i8: 1;
@@ -18,9 +17,9 @@ export type TypeTagValue = (typeof TYPE_TAG)[keyof typeof TYPE_TAG];
18
17
  * `stride = TYPE_TAG_STRIDE[tag]` lookup is O(1) array access. */
19
18
  export declare const TYPE_TAG_STRIDE: Readonly<Record<TypeTagValue, number>>;
20
19
  /** String-tag → numeric-tag bridge. `TypedArrayTag` ("u8", "f32", …) is the
21
- * vocabulary the TS-side component registry speaks; `TypeTagValue` is the
20
+ * vocabulary the TS-side component registry speaks. `TypeTagValue` is the
22
21
  * numeric enum the SAB descriptors carry on the wire. Bridging happens at
23
- * the ECS↔SAB seam Archetype layouts come in as strings, ColumnSpecs go
22
+ * the ECS↔SAB seam. Archetype layouts come in as strings, ColumnSpecs go
24
23
  * out as integers. */
25
24
  export declare const TYPED_ARRAY_TAG_TO_TYPE_TAG: {
26
25
  readonly u8: 0;
@@ -36,18 +35,19 @@ export interface ColumnDescriptor {
36
35
  readonly componentId: number;
37
36
  readonly fieldId: number;
38
37
  readonly typeTag: TypeTagValue;
39
- /** Byte offset of the column's first row, measured from SAB byte 0. */
38
+ /** Byte offset of the column's first row, measured from the store base.
39
+ * A reader adds the base it mounted the store at. */
40
40
  readonly byteOff: number;
41
- /** Element width in bytes; should always equal `TYPE_TAG_STRIDE[type_tag]`. */
41
+ /** Element width in bytes. Should always equal `TYPE_TAG_STRIDE[type_tag]`. */
42
42
  readonly stride: number;
43
43
  }
44
44
  export declare function writeColumnDescriptor(view: DataView, off: number, c: ColumnDescriptor): void;
45
45
  export declare function readColumnDescriptor(view: DataView, off: number): ColumnDescriptor;
46
46
  /** Number of distinct components the cross-language ECS supports:
47
47
  * `COMPONENT_MASK_WORDS × 32` bits in the SAB archetype descriptor mask. The
48
- * Zig side matches archetypes purely on this mask, so a component whose ID is
48
+ * module side matches archetypes purely on this mask, so a component whose id is
49
49
  * ≥ this limit would be invisible there while the heap-side `BitSet` stayed
50
- * correct silently conflating archetypes that differ only in such a
50
+ * correct, silently conflating archetypes that differ only in such a
51
51
  * component. `Store.registerComponent` enforces this as a hard registration
52
52
  * ceiling so the overflow fails loudly instead. The mask is sized to
53
53
  * the `BitSet`'s `INITIAL_WORD_COUNT`, so a registry within the limit never
@@ -60,20 +60,37 @@ export interface ArchetypeDescriptor {
60
60
  readonly componentMask: readonly number[];
61
61
  readonly rowCount: number;
62
62
  readonly rowCapacity: number;
63
- /** Enabled-row count `≤ row_count`. Per-row entity-scan loops in
64
- * the WASM sim bound on this so disabled entities (swapped to the tail
65
- * `[enabled_count, row_count)`) are not simulated; row-indexed cross-entity
63
+ /** Enabled-row count `≤ row_count`. A compute backend's per-row entity-scan
64
+ * loops bound on this so disabled entities (swapped to the tail
65
+ * `[enabled_count, row_count)`) are not simulated. Row-indexed cross-entity
66
66
  * reads still use `row_count`. */
67
67
  readonly enabledCount: number;
68
68
  readonly columns: readonly ColumnDescriptor[];
69
69
  }
70
70
  /** Total bytes a descriptor will occupy, given its column count. Useful for
71
- * planning the layout descriptor region size up front. */
72
- export declare function archetypeDescriptorBytes(columnCount: number): number;
71
+ * planning the layout descriptor region size up front.
72
+ *
73
+ * `headerBytes` selects the header width and defaults to the current one. Pass
74
+ * `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES` to measure a version 0 region.
75
+ * Never pass it when planning a region the store will write. */
76
+ export declare function archetypeDescriptorBytes(columnCount: number, headerBytes?: number): number;
73
77
  export declare function writeArchetypeDescriptor(view: DataView, off: number, d: ArchetypeDescriptor): number;
74
- export declare function readArchetypeDescriptor(view: DataView, off: number): ArchetypeDescriptor;
78
+ /** Read one archetype descriptor at `off`.
79
+ *
80
+ * `headerBytes` says where this record's columns start and defaults to the
81
+ * current header width. A version 0 region needs
82
+ * `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because it holds no
83
+ * `entity_ids_off`. Every other field sits at the same offset in both widths,
84
+ * so nothing else here branches on the version. */
85
+ export declare function readArchetypeDescriptor(view: DataView, off: number, headerBytes?: number): ArchetypeDescriptor;
75
86
  export declare function writeLayoutDescriptorRegion(view: DataView, regionOff: number, descriptors: readonly ArchetypeDescriptor[]): number;
76
- export declare function readLayoutDescriptorRegion(view: DataView, regionOff: number, archetypeCount: number): readonly ArchetypeDescriptor[];
87
+ /** Walk `archetypeCount` descriptors from `regionOff`, in written order.
88
+ *
89
+ * `headerBytes` selects the archetype header width, and defaults to the current
90
+ * one. A caller that reads a version 0 store passes
91
+ * `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because the record stride is the
92
+ * only thing the narrower header changes. */
93
+ export declare function readLayoutDescriptorRegion(view: DataView, regionOff: number, archetypeCount: number, headerBytes?: number): readonly ArchetypeDescriptor[];
77
94
  /** Total bytes needed for a layout descriptor region holding these archetypes.
78
95
  * Use to size the SAB region between header end and the first column. */
79
96
  export declare function layoutDescriptorRegionBytes(descriptors: readonly ArchetypeDescriptor[]): number;
@@ -1,8 +1,7 @@
1
- import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.js';
2
- export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
1
+ import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.js';
2
+ export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
3
3
  /** type_tag values for `ColumnDescriptor.type_tag`. The order matches the
4
- * TypedArrayTag union in `packages/std/type_primitives` so a tag's element
5
- * width is `TYPE_TAG_STRIDE[tag]`. */
4
+ * `TypedArrayTag` union, so a tag's element width is `TYPE_TAG_STRIDE[tag]`. */
6
5
  export declare const TYPE_TAG: {
7
6
  readonly u8: 0;
8
7
  readonly i8: 1;
@@ -18,9 +17,9 @@ export type TypeTagValue = (typeof TYPE_TAG)[keyof typeof TYPE_TAG];
18
17
  * `stride = TYPE_TAG_STRIDE[tag]` lookup is O(1) array access. */
19
18
  export declare const TYPE_TAG_STRIDE: Readonly<Record<TypeTagValue, number>>;
20
19
  /** String-tag → numeric-tag bridge. `TypedArrayTag` ("u8", "f32", …) is the
21
- * vocabulary the TS-side component registry speaks; `TypeTagValue` is the
20
+ * vocabulary the TS-side component registry speaks. `TypeTagValue` is the
22
21
  * numeric enum the SAB descriptors carry on the wire. Bridging happens at
23
- * the ECS↔SAB seam Archetype layouts come in as strings, ColumnSpecs go
22
+ * the ECS↔SAB seam. Archetype layouts come in as strings, ColumnSpecs go
24
23
  * out as integers. */
25
24
  export declare const TYPED_ARRAY_TAG_TO_TYPE_TAG: {
26
25
  readonly u8: 0;
@@ -36,18 +35,19 @@ export interface ColumnDescriptor {
36
35
  readonly componentId: number;
37
36
  readonly fieldId: number;
38
37
  readonly typeTag: TypeTagValue;
39
- /** Byte offset of the column's first row, measured from SAB byte 0. */
38
+ /** Byte offset of the column's first row, measured from the store base.
39
+ * A reader adds the base it mounted the store at. */
40
40
  readonly byteOff: number;
41
- /** Element width in bytes; should always equal `TYPE_TAG_STRIDE[type_tag]`. */
41
+ /** Element width in bytes. Should always equal `TYPE_TAG_STRIDE[type_tag]`. */
42
42
  readonly stride: number;
43
43
  }
44
44
  export declare function writeColumnDescriptor(view: DataView, off: number, c: ColumnDescriptor): void;
45
45
  export declare function readColumnDescriptor(view: DataView, off: number): ColumnDescriptor;
46
46
  /** Number of distinct components the cross-language ECS supports:
47
47
  * `COMPONENT_MASK_WORDS × 32` bits in the SAB archetype descriptor mask. The
48
- * Zig side matches archetypes purely on this mask, so a component whose ID is
48
+ * module side matches archetypes purely on this mask, so a component whose id is
49
49
  * ≥ this limit would be invisible there while the heap-side `BitSet` stayed
50
- * correct silently conflating archetypes that differ only in such a
50
+ * correct, silently conflating archetypes that differ only in such a
51
51
  * component. `Store.registerComponent` enforces this as a hard registration
52
52
  * ceiling so the overflow fails loudly instead. The mask is sized to
53
53
  * the `BitSet`'s `INITIAL_WORD_COUNT`, so a registry within the limit never
@@ -60,20 +60,37 @@ export interface ArchetypeDescriptor {
60
60
  readonly componentMask: readonly number[];
61
61
  readonly rowCount: number;
62
62
  readonly rowCapacity: number;
63
- /** Enabled-row count `≤ row_count`. Per-row entity-scan loops in
64
- * the WASM sim bound on this so disabled entities (swapped to the tail
65
- * `[enabled_count, row_count)`) are not simulated; row-indexed cross-entity
63
+ /** Enabled-row count `≤ row_count`. A compute backend's per-row entity-scan
64
+ * loops bound on this so disabled entities (swapped to the tail
65
+ * `[enabled_count, row_count)`) are not simulated. Row-indexed cross-entity
66
66
  * reads still use `row_count`. */
67
67
  readonly enabledCount: number;
68
68
  readonly columns: readonly ColumnDescriptor[];
69
69
  }
70
70
  /** Total bytes a descriptor will occupy, given its column count. Useful for
71
- * planning the layout descriptor region size up front. */
72
- export declare function archetypeDescriptorBytes(columnCount: number): number;
71
+ * planning the layout descriptor region size up front.
72
+ *
73
+ * `headerBytes` selects the header width and defaults to the current one. Pass
74
+ * `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES` to measure a version 0 region.
75
+ * Never pass it when planning a region the store will write. */
76
+ export declare function archetypeDescriptorBytes(columnCount: number, headerBytes?: number): number;
73
77
  export declare function writeArchetypeDescriptor(view: DataView, off: number, d: ArchetypeDescriptor): number;
74
- export declare function readArchetypeDescriptor(view: DataView, off: number): ArchetypeDescriptor;
78
+ /** Read one archetype descriptor at `off`.
79
+ *
80
+ * `headerBytes` says where this record's columns start and defaults to the
81
+ * current header width. A version 0 region needs
82
+ * `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because it holds no
83
+ * `entity_ids_off`. Every other field sits at the same offset in both widths,
84
+ * so nothing else here branches on the version. */
85
+ export declare function readArchetypeDescriptor(view: DataView, off: number, headerBytes?: number): ArchetypeDescriptor;
75
86
  export declare function writeLayoutDescriptorRegion(view: DataView, regionOff: number, descriptors: readonly ArchetypeDescriptor[]): number;
76
- export declare function readLayoutDescriptorRegion(view: DataView, regionOff: number, archetypeCount: number): readonly ArchetypeDescriptor[];
87
+ /** Walk `archetypeCount` descriptors from `regionOff`, in written order.
88
+ *
89
+ * `headerBytes` selects the archetype header width, and defaults to the current
90
+ * one. A caller that reads a version 0 store passes
91
+ * `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because the record stride is the
92
+ * only thing the narrower header changes. */
93
+ export declare function readLayoutDescriptorRegion(view: DataView, regionOff: number, archetypeCount: number, headerBytes?: number): readonly ArchetypeDescriptor[];
77
94
  /** Total bytes needed for a layout descriptor region holding these archetypes.
78
95
  * Use to size the SAB region between header end and the first column. */
79
96
  export declare function layoutDescriptorRegionBytes(descriptors: readonly ArchetypeDescriptor[]): number;
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/core/store/descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAeH,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,4BAA4B,EAC5B,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,4BAA4B,EAC5B,oBAAoB,EACpB,CAAC;AAEF;;sCAEsC;AACtC,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEpE;kEACkE;AAClE,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CASjE,CAAC;AAEH;;;;sBAIsB;AACtB,eAAO,MAAM,2BAA2B;;;;;;;;;CAS9B,CAAC;AAUX,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAS5F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAQlF;AAeD;;;;;;;;oDAQoD;AACpD,eAAO,MAAM,gCAAgC,QAA4B,CAAC;AAE1E,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;uDACmD;IACnD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;sCAGkC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C;AAED;0DAC0D;AAC1D,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,CAAC,EAAE,mBAAmB,GACpB,MAAM,CAoBR;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAuBxF;AAcD,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,SAAS,mBAAmB,EAAE,GACzC,MAAM,CAMR;AAED,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACpB,SAAS,mBAAmB,EAAE,CAShC;AAED;yEACyE;AACzE,wBAAgB,2BAA2B,CAC1C,WAAW,EAAE,SAAS,mBAAmB,EAAE,GACzC,MAAM,CAMR"}
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/core/store/descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAYH,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,wCAAwC,EACxC,4BAA4B,EAC5B,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,wCAAwC,EACxC,4BAA4B,EAC5B,oBAAoB,EACpB,CAAC;AAEF;gFACgF;AAChF,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEpE;kEACkE;AAClE,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CASjE,CAAC;AAEH;;;;sBAIsB;AACtB,eAAO,MAAM,2BAA2B;;;;;;;;;CAS9B,CAAC;AAWX,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B;yDACqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAS5F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAQlF;AAkBD;;;;;;;;oDAQoD;AACpD,eAAO,MAAM,gCAAgC,QAA4B,CAAC;AAE1E,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;uDACmD;IACnD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;sCAGkC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C;AAED;;;;;gEAKgE;AAChE,wBAAgB,wBAAwB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAA0C,GACrD,MAAM,CAER;AAED,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,CAAC,EAAE,mBAAmB,GACpB,MAAM,CAyBR;AAED;;;;;;mDAMmD;AACnD,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAA0C,GACrD,mBAAmB,CAuBrB;AAcD,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,SAAS,mBAAmB,EAAE,GACzC,MAAM,CAMR;AAED;;;;;6CAK6C;AAC7C,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,MAA0C,GACrD,SAAS,mBAAmB,EAAE,CAShC;AAED;yEACyE;AACzE,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,CAM/F"}
@@ -1,18 +1,18 @@
1
1
  /**
2
- * Entity-index SAB region `EntityID` → `(archetype_id, row, generation)`
3
- * lookup table shared with the Zig sim.
2
+ * Entity-index SAB region, `EntityID` → `(archetype_id, row, generation)`
3
+ * lookup table shared with a compute backend.
4
4
  *
5
- * Every hot fixed-update system that needs to resolve an `EntityID`
6
- * held in a column (e.g. a component field that points at another
7
- * entity that entity's columns) has to do
8
- * `entityId → archetype + row` translation. WASM-into-TS callbacks
9
- * during `tick()` are forbidden, so the lookup
5
+ * Every hot fixed-update system that resolves an `EntityID`
6
+ * held in a column (a component field that points at another
7
+ * entity, and through it at that entity's columns) has to do
8
+ * `entityId → archetype + row` translation. A WASM-into-TS callback
9
+ * during a tick is forbidden, so the lookup
10
10
  * tables must live in shared memory.
11
11
  *
12
12
  * Layout:
13
13
  *
14
14
  * [ length: u32 ] high-water index (count of slots ever issued)
15
- * [ capacity: u32 ] backing-array length (slots × 1; not bytes)
15
+ * [ capacity: u32 ] backing-array length (slots × 1, not bytes)
16
16
  * [ _pad0: u32 ] alignment pad to 16 bytes
17
17
  * [ _pad1: u32 ] ───
18
18
  * [ generations[capacity]: i32 ]
@@ -21,26 +21,26 @@
21
21
  *
22
22
  * Sentinels:
23
23
  * - `generations[i] = 0` (INITIAL_GENERATION) for never-used slots.
24
- * Generation grows by 1 on every destroy; an `EntityID`'s generation
24
+ * Generation grows by 1 on every destroy. An `EntityID`'s generation
25
25
  * field matches `generations[index]` iff it's still alive.
26
26
  * - `archetypes[i] = -1` (UNASSIGNED) when the slot hasn't been placed
27
- * into an archetype, OR when the entity is destroyed.
28
- * - `rows[i] = -1` (UNASSIGNED) on destroy / not-placed.
27
+ * into an archetype, or when the entity is destroyed.
28
+ * - `rows[i] = -1` (`UNASSIGNED`) on a destroy, or when not placed.
29
29
  *
30
30
  * Field width: i32 (signed) on the TS side so `-1` round-trips through
31
- * `Int32Array` without unsigned coercion. Zig reads as i32 too bit
32
- * pattern is identical to u32 `0xFFFFFFFF` for the UNASSIGNED case, and
33
- * for valid archetype_ids (bounded by `MAX_INDEX = 2^20`) the sign bit
34
- * is never set, so signed/unsigned interpretation agrees.
31
+ * `Int32Array` without unsigned coercion. A module reads i32 too. The bit
32
+ * pattern is identical to u32 `0xFFFFFFFF` for the `UNASSIGNED` case, and
33
+ * for a valid archetype id (bounded by `MAX_INDEX`) the sign bit
34
+ * is never set, so signed and unsigned interpretation agree.
35
35
  *
36
36
  * Region placement: between command ring and descriptor region so the
37
- * offset is stable across descriptor / column-region growth (same
37
+ * offset is stable across descriptor growth and column-region growth (same
38
38
  * property the command ring gets). Grow path (when entityHighWater
39
- * exceeds `capacity`) uses `growColumnStore` slow path, same as
39
+ * exceeds `capacity`) uses `growColumnStore`, slow path, same as
40
40
  * descriptor-region overflow.
41
41
  *
42
- * Reading from Zig: see `packages/sim/src/entity_index.zig` for the
43
- * symmetric reader.
42
+ * A module reads the region with the symmetric reader: the header first,
43
+ * then the two i32 arrays it names.
44
44
  */
45
45
  /** Fixed bytes of the region header (length, capacity, two pad u32s for
46
46
  * 16-byte alignment of the i32 arrays that follow). */
@@ -48,24 +48,23 @@ export declare const ENTITY_INDEX_HEADER_BYTES = 16;
48
48
  /** Bytes per slot: three i32 columns. */
49
49
  export declare const ENTITY_INDEX_BYTES_PER_SLOT = 12;
50
50
  /** Byte offsets within the region header. Locked by the
51
- * `entity_index.test.ts` golden bytes; any change here is a
51
+ * `entity_index.test.ts` golden bytes. Any change here is a
52
52
  * `SIM_ABI_VERSION` bump. */
53
53
  export declare const ENTITY_INDEX_HEADER_OFFSETS: {
54
54
  readonly length: 0;
55
55
  readonly capacity: 4;
56
56
  };
57
- /** Default initial slot count when the engine creates a Store. Matches
58
- * `MAX_INDEX = (1 << 20) - 1 + 1 = 1_048_576` (the EntityID 20-bit index
59
- * range, see `entity.ts`), so the region pre-sizes to the entire
60
- * addressable entity space and `createEntity` can never run out under
61
- * the default. 1M × 12 B 12 MiB SAB region — virtual memory only;
62
- * physical pages allocate lazily via OS page-fault on first touch, so
63
- * the typical 1000-entity workload pays for ~12 KiB physical even though the
64
- * virtual reservation is 12 MiB.
57
+ /** Default initial slot count when the engine creates a Store. It is
58
+ * `MAX_INDEX + 1`, the whole `EntityID` 20-bit index range (see `entity.ts`),
59
+ * so the region pre-sizes to the entire addressable entity space and
60
+ * `createEntity` can never run out under the default. That reservation is
61
+ * virtual memory only. Physical pages allocate lazily, through an OS page
62
+ * fault on first touch, so a small workload keeps a small resident footprint
63
+ * whatever the reservation is.
65
64
  *
66
- * Tests / benches can pass a smaller `StoreOptions.entityIndexCapacity`
67
- * to bench tighter reservations. A future PR will replace this with
68
- * on-demand growth via `growColumnStore` so the default can drop. */
65
+ * A caller can pass a smaller `CreateColumnStoreOptions.entityIndexCapacity`
66
+ * for a tighter reservation. On-demand growth through `growColumnStore` would
67
+ * let the default drop. */
69
68
  export declare const ENTITY_INDEX_DEFAULT_CAPACITY: number;
70
69
  /** Total region bytes for `capacity` slots: header + 3 i32 columns. */
71
70
  export declare function entityIndexRegionBytes(capacity: number): number;
@@ -81,7 +80,7 @@ export declare class EntityIndexError extends Error {
81
80
  /** Initialise the region header at `regionOff`. Sets `length=0` and
82
81
  * `capacity=<arg>`. The i32 arrays past the header are left untouched
83
82
  * (callers normally allocate the region on a fresh, zero-initialised
84
- * SAB; generation 0 is the INITIAL_GENERATION sentinel, archetype/row
83
+ * SAB. Generation 0 is the INITIAL_GENERATION sentinel, archetype and row
85
84
  * sentinels of 0 are caught by `length=0` so no read reaches them). */
86
85
  export declare function initEntityIndexRegion(view: DataView, regionOff: number, capacity: number): void;
87
86
  /** Read the region's current length (high-water index, ≤ capacity). */
@@ -94,13 +93,13 @@ export declare function entityIndexCapacity(view: DataView, regionOff: number):
94
93
  export declare function setEntityIndexLength(view: DataView, regionOff: number, length: number): void;
95
94
  /** Materialise the three Int32Array views over the region's column data
96
95
  * for use by the engine's Store. The views live as long as the
97
- * SharedArrayBuffer hasn't been reallocated refresh on `view_stamp`
96
+ * SharedArrayBuffer hasn't been reallocated, refresh on `view_stamp`
98
97
  * bump (the engine's `_onBufferResized` callback).
99
98
  *
100
99
  * Three separate views (not a single struct-of-arrays object) because
101
100
  * the engine's hot paths benefit from each being a direct typed-array
102
- * read; V8 specialises `arr[i] = v` aggressively for typed arrays. */
103
- export declare function buildEntityIndexViews(buffer: ArrayBufferLike, regionOff: number, capacity: number): {
101
+ * read. V8 specialises `arr[i] = v` aggressively for typed arrays. */
102
+ export declare function createEntityIndexViews(buffer: ArrayBufferLike, regionOff: number, capacity: number): {
104
103
  readonly generations: Int32Array;
105
104
  readonly archetypes: Int32Array;
106
105
  readonly rows: Int32Array;