@oasys/oecs 0.5.3 → 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 +1399 -276
  2. package/README.md +327 -169
  3. package/dist/core/ecs/access_check.d.cts +31 -31
  4. package/dist/core/ecs/access_check.d.ts +31 -31
  5. package/dist/core/ecs/access_check.d.ts.map +1 -1
  6. package/dist/core/ecs/archetype.d.cts +273 -205
  7. package/dist/core/ecs/archetype.d.ts +273 -205
  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 +34 -34
  13. package/dist/core/ecs/archetype_graph.d.ts +34 -34
  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 +30 -30
  28. package/dist/core/ecs/command_log.d.ts +30 -30
  29. package/dist/core/ecs/command_log.d.ts.map +1 -1
  30. package/dist/core/ecs/component.d.cts +45 -44
  31. package/dist/core/ecs/component.d.ts +45 -44
  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 +337 -276
  46. package/dist/core/ecs/ecs.d.ts +337 -276
  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 +24 -22
  57. package/dist/core/ecs/entity_allocator.d.ts +24 -22
  58. package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
  59. package/dist/core/ecs/event.d.cts +37 -23
  60. package/dist/core/ecs/event.d.ts +37 -23
  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 +34 -34
  69. package/dist/core/ecs/frame_trace.d.ts +34 -34
  70. package/dist/core/ecs/frame_trace.d.ts.map +1 -1
  71. package/dist/core/ecs/host_commands.d.cts +107 -89
  72. package/dist/core/ecs/host_commands.d.ts +107 -89
  73. package/dist/core/ecs/host_commands.d.ts.map +1 -1
  74. package/dist/core/ecs/index.d.cts +22 -12
  75. package/dist/core/ecs/index.d.ts +22 -12
  76. package/dist/core/ecs/index.d.ts.map +1 -1
  77. package/dist/core/ecs/observer.d.cts +41 -122
  78. package/dist/core/ecs/observer.d.ts +41 -122
  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 +219 -568
  90. package/dist/core/ecs/query.d.ts +219 -568
  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 +129 -16
  102. package/dist/core/ecs/ref.d.ts +129 -16
  103. package/dist/core/ecs/ref.d.ts.map +1 -1
  104. package/dist/core/ecs/relation.d.cts +105 -186
  105. package/dist/core/ecs/relation.d.ts +105 -186
  106. package/dist/core/ecs/relation.d.ts.map +1 -1
  107. package/dist/core/ecs/resource.d.cts +14 -14
  108. package/dist/core/ecs/resource.d.ts +14 -14
  109. package/dist/core/ecs/resource_registry.d.cts +6 -6
  110. package/dist/core/ecs/resource_registry.d.ts +6 -6
  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 +98 -114
  119. package/dist/core/ecs/schedule.d.ts +98 -114
  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 +110 -53
  131. package/dist/core/ecs/sparse_store.d.ts +110 -53
  132. package/dist/core/ecs/sparse_store.d.ts.map +1 -1
  133. package/dist/core/ecs/store.d.cts +644 -511
  134. package/dist/core/ecs/store.d.ts +644 -511
  135. package/dist/core/ecs/store.d.ts.map +1 -1
  136. package/dist/core/ecs/store_layout_listener.d.cts +8 -8
  137. package/dist/core/ecs/store_layout_listener.d.ts +8 -8
  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 +151 -66
  142. package/dist/core/ecs/system.d.ts +151 -66
  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 +87 -4
  154. package/dist/core/ecs/utils/error.d.ts +87 -4
  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 +48 -49
  163. package/dist/core/store/action_ring.d.ts +48 -49
  164. package/dist/core/store/action_ring.d.ts.map +1 -1
  165. package/dist/core/store/allocator.d.cts +166 -114
  166. package/dist/core/store/allocator.d.ts +166 -114
  167. package/dist/core/store/allocator.d.ts.map +1 -1
  168. package/dist/core/store/buffer_backed_column.d.cts +21 -22
  169. package/dist/core/store/buffer_backed_column.d.ts +21 -22
  170. package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
  171. package/dist/core/store/column_store.d.cts +138 -100
  172. package/dist/core/store/column_store.d.ts +138 -100
  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 +41 -45
  178. package/dist/core/store/command_ring.d.ts +41 -45
  179. package/dist/core/store/command_ring.d.ts.map +1 -1
  180. package/dist/core/store/descriptor.d.cts +35 -18
  181. package/dist/core/store/descriptor.d.ts +35 -18
  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 +40 -42
  187. package/dist/core/store/event_ring.d.ts +40 -42
  188. package/dist/core/store/event_ring.d.ts.map +1 -1
  189. package/dist/core/store/extend.d.cts +15 -9
  190. package/dist/core/store/extend.d.ts +15 -9
  191. package/dist/core/store/extend.d.ts.map +1 -1
  192. package/dist/core/store/grow.d.cts +3 -3
  193. package/dist/core/store/grow.d.ts +3 -3
  194. package/dist/core/store/grow.d.ts.map +1 -1
  195. package/dist/core/store/header.d.cts +37 -33
  196. package/dist/core/store/header.d.ts +37 -33
  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 +72 -63
  202. package/dist/core/store/layout_ops.d.ts +72 -63
  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 +14 -14
  211. package/dist/core/store/state_hash.d.ts +14 -14
  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 +16 -11
  225. package/dist/index.d.ts +16 -11
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.development.cjs +1 -1
  228. package/dist/index.development.js +6709 -5729
  229. package/dist/index.js +5664 -4743
  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 +56 -56
  244. package/dist/{extensions → plugins}/editor/editor.d.ts +56 -56
  245. package/dist/plugins/editor/editor.d.ts.map +1 -0
  246. package/dist/{extensions → plugins}/editor/field_handle.d.cts +13 -13
  247. package/dist/{extensions → plugins}/editor/field_handle.d.ts +13 -13
  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} +83 -66
  257. package/dist/{extensions/editor/index.js → plugins/editor.js} +83 -66
  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 +93 -105
  302. package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +93 -105
  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 +18 -17
  411. package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +18 -17
  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 +4 -4
  415. package/dist/version.d.ts +4 -4
  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-3jyFfWNg.js +0 -2326
  465. package/dist/host_commands-DNf0f6ko.cjs +0 -1
  466. package/dist/internal-C9jjL90H.js +0 -2485
  467. package/dist/internal-RZN14uMw.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-9S1pY_Iw.js +0 -159
  502. package/dist/shallow-C5YmTbtb.cjs +0 -1
  503. package/dist/shallow-DQ8aG51_.cjs +0 -1
  504. package/dist/shallow-DfnAm9vG.js +0 -150
  505. package/dist/shared-BMXh9hxm.cjs +0 -1
  506. package/dist/shared-DQKK0i-E.js +0 -109
  507. package/dist/topological_sort-BDvEyb9W.cjs +0 -1
  508. package/dist/topological_sort-DK6EjpWa.js +0 -135
  509. package/dist/typed_arrays-BcXcnzB4.js +0 -258
  510. package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
@@ -1,39 +1,56 @@
1
1
  import { InPlaceBufferAllocator } from '../store/index.js';
2
- /** Default byte ceiling of the growable backing mirrors
3
- * `growableSabAllocator`'s default (see its doc comment for the measured
4
- * footprint analysis that makes 256 MiB structurally unreachable). */
2
+ /** Default store base for the wasm backing, one WASM page. It clears nothing on
3
+ * its own. It is the smallest base that keeps the header off address 0, which a
4
+ * safe Zig or Rust build cannot read. A caller whose module reaches higher
5
+ * passes a base above that module's `__heap_base`. */
6
+ export declare const WASM_STORE_BASE_BYTES: number;
7
+ /**
8
+ * A store base that clears a module's own memory, read from the module.
9
+ *
10
+ * A compiled module owns the low addresses of its linear memory. Its data
11
+ * segment, its shadow stack and its heap all start there, and `__heap_base` is
12
+ * the first address above the segment and the stack. A store based below that
13
+ * overlaps the module. The loss is silent, because the region that lands under
14
+ * a module is the entity index and no digest folds it.
15
+ *
16
+ * `extraBytes` is the run-time heap the module allocates above `__heap_base`.
17
+ * Only the module can bound it, so the caller passes it. Pass the module's own
18
+ * peak, not a guess, because a store based inside the heap fails the same
19
+ * silent way.
20
+ *
21
+ * The result rounds up to a whole WASM page, so a grow of the module's memory
22
+ * never lands in the middle of the store's first page. Cold path, and a caller
23
+ * runs it once, between instantiation and `ECS.create`.
24
+ *
25
+ * @example
26
+ * const instance = await WebAssembly.instantiate(module, { env: { memory } });
27
+ * const ecs = ECS.create({
28
+ * memory: {
29
+ * backing: { wasm: { memory } },
30
+ * storeBase: storeBaseAbove(instance.exports, 4 * 1024 * 1024)
31
+ * }
32
+ * });
33
+ */
34
+ export declare function storeBaseAbove(exports: Record<string, unknown>, extraBytes?: number): number;
35
+ /** Default byte ceiling of every backing, mirrors `growableSabAllocator`'s
36
+ * default (see its doc comment for the measured footprint analysis that makes
37
+ * 256 MiB structurally unreachable). */
5
38
  export declare const DEFAULT_ECS_CAP_BYTES: number;
6
- /** Headroom multiplier applied to a budget's live column bytes: capacity
7
- * doubling plus abandoned in-place holes bound worst-case footprint at ~3×
8
- * live data (footprint analysis in `growableSabAllocator`'s doc). */
39
+ /** Headroom multiplier applied to an entity count's live column bytes: capacity
40
+ * doubling plus abandoned in-place holes bound the worst-case footprint at
41
+ * this multiple of the live data (footprint analysis in `growableSabAllocator`'s doc). */
9
42
  export declare const BUDGET_GROWTH_HEADROOM = 3;
10
- /** Default average fully-populated row stride assumed by the budget arm.
11
- * The instrumented 2-party workload measured ~49 B/entity; 64 rounds up. */
43
+ /** Default average fully-populated row stride assumed when the caller gives an
44
+ * entity count. A workload with two components uses less than this for each
45
+ * row, thus 64 rounds up and gives headroom. */
12
46
  export declare const BUDGET_DEFAULT_BYTES_PER_ENTITY = 64;
13
- /** Default archetype spread assumed by the budget arm when the consumer
14
- * doesn't declare one. Drives only the derived per-archetype column
15
- * capacity, not correctness — an under-declared spread just means earlier
16
- * (amortised) column doubling. */
47
+ /** Default archetype spread assumed when the caller doesn't declare one. Drives
48
+ * only the derived per-archetype column capacity, not correctness, an
49
+ * under-declared spread only means earlier (amortised) column doubling. */
17
50
  export declare const BUDGET_DEFAULT_ARCHETYPES = 8;
18
- /** Sizing intent: "I expect a world about this big." The engine derives
19
- * column capacity, entity-index reservation, and the byte cap from it, and
20
- * cap errors are phrased against this budget. */
21
- export interface EntityBudget {
22
- /** Expected peak live entities — the one number most callers know.
23
- * Bounded by the EntityID 20-bit index space (1<<20). */
24
- readonly entities: number;
25
- /** Expected distinct archetypes the entities spread across.
26
- * Default `BUDGET_DEFAULT_ARCHETYPES`. */
27
- readonly archetypes?: number;
28
- /** Average fully-populated row stride in bytes.
29
- * Default `BUDGET_DEFAULT_BYTES_PER_ENTITY`. */
30
- readonly bytesPerEntity?: number;
31
- }
32
- /** WASM-backed memory, first-class (#682). Either bring your own shared
33
- * `WebAssembly.Memory` (the server match context does — its sim factory
34
- * owns the memory), or declare page bounds and let the engine construct
35
- * it — replacing the hand-wired incantation that previously lived only in
36
- * `workbench/ecs/scripts/run-memory.ts`. */
51
+ /** WASM-backed memory. Either bring your own shared `WebAssembly.Memory`, which
52
+ * a consumer that instantiates the module itself already owns, or declare page
53
+ * bounds and let the engine construct it. */
37
54
  export type WasmMemoryArm = {
38
55
  readonly memory: WebAssembly.Memory;
39
56
  readonly initialPages?: never;
@@ -43,126 +60,108 @@ export type WasmMemoryArm = {
43
60
  readonly initialPages?: number;
44
61
  readonly memory?: never;
45
62
  };
46
- /** Pure-TS **heap** backing (#643 / ADR-0018 §1B): a plain fixed (non-resizable)
47
- * `ArrayBuffer` reserved at the cap up front, instead of a `SharedArrayBuffer`.
48
- * Needs no cross-origin isolation (COOP/COEP) and is the intended default for
49
- * embedders that can't set those headers (the oecs profile). Trade-off: no
50
- * worker offload and no WASM compute backend — both require a transferable
51
- * `SharedArrayBuffer`. An empty `{}` takes the default 256 MiB cap. */
52
- export interface HeapMemoryArm {
53
- /** Byte ceiling of the growable heap backing. Default
54
- * `DEFAULT_ECS_CAP_BYTES` (256 MiB), same hard-ceiling semantics as the
55
- * SAB backing (#380). */
56
- readonly maxBytes?: number;
57
- }
58
- /** Opt-in **shared-memory** backing (`@oasys/oecs/shared`): a growable
59
- * `SharedArrayBuffer` instead of a plain `ArrayBuffer`. Required for worker
60
- * offload and a WASM compute backend, but needs cross-origin isolation
61
- * (COOP/COEP) in browsers. Empty `{}` takes the default 256 MiB growable cap. */
62
- export interface SharedMemoryArm {
63
- /** Byte ceiling of the growable shared backing. Default
64
- * `DEFAULT_ECS_CAP_BYTES` (256 MiB), hard-ceiling semantics (#380). */
65
- readonly maxBytes?: number;
66
- }
67
- /** Pinnable on every arm: exact initial rows per archetype column. The
68
- * budget arm derives one when unpinned; every other arm defaults to
69
- * `DEFAULT_COLUMN_CAPACITY`. */
70
- interface ColumnCapacityPin {
71
- readonly columnCapacity?: number;
72
- }
73
63
  /**
74
- * The single sizing option on `ECSOptions.memory`. Key-discriminated
75
- * exactly one of `budget` | `maxBytes` | `wasm` | `allocator`, or none for
76
- * default sizing. The `never` fields make a two-arm literal a type error;
77
- * `resolveECSMemory` backstops untyped JS callers at runtime.
64
+ * What backs the world's bytes. This is the only axis with real exclusivity: a
65
+ * world has exactly one buffer, so these genuinely cannot combine. Sizing is a
66
+ * separate field and combines with all of them.
67
+ *
68
+ * "heap" a plain fixed `ArrayBuffer` reserved at the cap. No
69
+ * cross-origin isolation needed, and the default. Trade-off: no
70
+ * worker offload and no WASM compute backend, because both need
71
+ * a transferable `SharedArrayBuffer`.
72
+ * "shared" a growable `SharedArrayBuffer` (`@oasys/oecs/shared`).
73
+ * Enables worker offload and a WASM compute backend, and needs
74
+ * COOP and COEP in a browser. See `growableSabAllocator`'s doc for
75
+ * the JavaScriptCore write cost this backing carries.
76
+ * { wasm } the buffer is a `WebAssembly.Memory`, zero-copy with a WASM
77
+ * `ComputeBackend`.
78
+ * { allocator } expert escape hatch. Typed `InPlaceBufferAllocator` so only
79
+ * allocators that statically declare `isInPlace: true` compile.
80
+ * Give `maxBytes` beside it to declare the ceiling, which the
81
+ * index derivation then respects.
78
82
  */
79
- export type ECSMemoryOptions = ({
80
- readonly budget: EntityBudget;
81
- readonly maxBytes?: never;
82
- readonly wasm?: never;
83
- readonly allocator?: never;
84
- readonly heap?: never;
85
- readonly shared?: never;
86
- } & ColumnCapacityPin) | ({
87
- readonly maxBytes: number;
88
- readonly budget?: never;
89
- readonly wasm?: never;
90
- readonly allocator?: never;
91
- readonly heap?: never;
92
- readonly shared?: never;
93
- } & ColumnCapacityPin) | ({
83
+ export type MemoryBacking = "heap" | "shared" | {
94
84
  readonly wasm: WasmMemoryArm;
95
- readonly budget?: never;
96
- readonly maxBytes?: never;
97
85
  readonly allocator?: never;
98
- readonly heap?: never;
99
- readonly shared?: never;
100
- } & ColumnCapacityPin) | ({
101
- readonly heap: HeapMemoryArm;
102
- readonly budget?: never;
103
- readonly maxBytes?: never;
104
- readonly wasm?: never;
105
- readonly allocator?: never;
106
- readonly shared?: never;
107
- } & ColumnCapacityPin) | ({
108
- readonly shared: SharedMemoryArm;
109
- readonly budget?: never;
110
- readonly maxBytes?: never;
111
- readonly wasm?: never;
112
- readonly allocator?: never;
113
- readonly heap?: never;
114
- } & ColumnCapacityPin) | ({
115
- /** Expert escape hatch. Typed `InPlaceBufferAllocator` so only
116
- * allocators that statically declare `isInPlace: true` compile —
117
- * the ADR-0008 boundary. `DEFAULT_SAB_ALLOCATOR` is rejected by the
118
- * type system; non-in-place allocators stay snapshot/test-sizing
119
- * utilities. */
86
+ } | {
120
87
  readonly allocator: InPlaceBufferAllocator;
121
- /** The allocator owns its real ceiling; this hint only labels
122
- * diagnostics (cap errors, `memoryPlan.derivation`). */
123
- readonly capBytesHint?: number;
124
- readonly budget?: never;
125
- readonly maxBytes?: never;
126
- readonly wasm?: never;
127
- readonly heap?: never;
128
- readonly shared?: never;
129
- } & ColumnCapacityPin) | ({
130
- /** No sizing arm: default growable backing (256 MiB cap), with the
131
- * column capacity optionally pinned — the minimal migration from the
132
- * removed `initialCapacity` knob. */
133
- readonly budget?: never;
134
- readonly maxBytes?: never;
135
88
  readonly wasm?: never;
136
- readonly allocator?: never;
137
- readonly heap?: never;
138
- readonly shared?: never;
139
- } & ColumnCapacityPin);
89
+ };
90
+ /**
91
+ * How the world is sized and what backs it. Every field is optional and every
92
+ * combination is legal, the two axes do not police each other.
93
+ *
94
+ * Give `entities` when you know roughly how many the world holds. Give
95
+ * `maxBytes` when you know the ceiling instead. Give both when you know both:
96
+ * the count sizes the columns and the entity index, and the cap is yours.
97
+ */
98
+ export interface ECSMemoryOptions {
99
+ /** Expected peak live entities, the one number most callers know. Sizes the
100
+ * column capacity, the entity-index reservation and (unless `maxBytes` says
101
+ * otherwise) the byte cap. Bounded by the EntityID 20-bit index space
102
+ * (1<<20). */
103
+ readonly entities?: number;
104
+ /** Expected distinct archetypes the entities spread across. Shapes the
105
+ * derived column capacity only. Needs `entities`. Default
106
+ * `BUDGET_DEFAULT_ARCHETYPES`. */
107
+ readonly archetypes?: number;
108
+ /** Average fully-populated row stride in bytes. Shapes the derived cap only.
109
+ * Needs `entities`. Default `BUDGET_DEFAULT_BYTES_PER_ENTITY`. */
110
+ readonly bytesPerEntity?: number;
111
+ /** Byte ceiling of the backing, with hard-ceiling semantics and no
112
+ * grow-beyond fallback. Wins over a cap derived from `entities`. For the
113
+ * allocator backing this is a declaration: the allocator owns the real
114
+ * ceiling, but the index derivation believes this number. Default
115
+ * `DEFAULT_ECS_CAP_BYTES` (256 MiB). */
116
+ readonly maxBytes?: number;
117
+ /** Exact initial rows per archetype column. Overrides the derived value. */
118
+ readonly columnCapacity?: number;
119
+ /** What holds the bytes. Default `"heap"`. */
120
+ readonly backing?: MemoryBacking;
121
+ /** Byte offset inside the backing where the store header goes. Every offset
122
+ * the store writes is relative to it, and the store writes only inside
123
+ * `[storeBase, storeBase + capacity)`.
124
+ *
125
+ * Default 0 for the heap, shared and allocator backings. Default
126
+ * `WASM_STORE_BASE_BYTES` for the wasm backing, because a module owns the
127
+ * low addresses of its own linear memory and a safe Zig or Rust build traps
128
+ * on a read of address 0. Raise it above the module's `__heap_base` plus
129
+ * whatever the module allocates at run time.
130
+ *
131
+ * Must be an integer >= 0 and a multiple of `STORE_BASE_ALIGNMENT`. */
132
+ readonly storeBase?: number;
133
+ }
140
134
  /** What the caller's intent resolved to. Exposed as `ECS.memoryPlan` for
141
- * diagnostics; `intentLabel`/`budgetEntities`/`capBytes` also travel
142
- * into `Store` so cap errors speak the caller's language. */
135
+ * diagnostics. `intentLabel`, `budgetEntities` and `capBytes` also travel into
136
+ * `Store` so cap errors speak the caller's language. */
143
137
  export interface ResolvedECSMemory {
144
- readonly source: "default" | "budget" | "max_bytes" | "wasm" | "allocator" | "heap" | "shared";
138
+ /** Which backing holds the bytes, the axis-B answer. */
139
+ readonly source: "heap" | "shared" | "wasm" | "allocator";
140
+ /** Which sizing input drove the numbers, the axis-A answer. */
141
+ readonly sizing: "default" | "entities" | "maxBytes" | "entities+maxBytes";
145
142
  readonly allocator: InPlaceBufferAllocator;
146
143
  readonly columnCapacity: number;
147
144
  readonly entityIndexCapacity: number;
148
145
  /** Byte ceiling of the backing, `null` when unknowable from JS (a
149
- * bring-your-own `WebAssembly.Memory` hides its `maximum`; a custom
150
- * allocator owns its own cap unless hinted). */
146
+ * bring-your-own `WebAssembly.Memory` hides its `maximum`. A custom allocator
147
+ * owns its own cap unless `maxBytes` declared one). */
151
148
  readonly capBytes: number | null;
152
- /** Human phrasing of the declared intent reused verbatim in cap
153
- * errors so the failure names what the caller asked for. */
149
+ /** Human phrasing of the declared intent, reused verbatim in cap errors so
150
+ * the failure names what the caller asked for. */
154
151
  readonly intentLabel: string;
155
- /** The declared entity budget when the budget arm was used drives the
156
- * "N× the declared budget" cap-error diagnostic. */
152
+ /** The declared entity count when one was given, drives the "N× the
153
+ * declared budget" cap-error diagnostic. */
157
154
  readonly budgetEntities: number | null;
158
155
  /** How each derived number was arrived at, one line per decision. */
159
156
  readonly derivation: readonly string[];
160
- /** The backing `WebAssembly.Memory` when the wasm arm was used (both
161
- * bring-your-own and engine-constructed) — the consumer hands this to
162
- * its WASM `ComputeBackend` so the sim and the columns share bytes. */
157
+ /** Byte offset of the store header inside the backing. */
158
+ readonly storeBase: number;
159
+ /** The backing `WebAssembly.Memory` when the wasm backing was used (both
160
+ * bring-your-own and engine-constructed), the consumer hands this to its
161
+ * WASM `ComputeBackend` so the module and the columns share bytes. */
163
162
  readonly wasmMemory: WebAssembly.Memory | null;
164
163
  }
165
- /** Subset of the plan `Store` needs to phrase cap/overflow errors in the
164
+ /** Subset of the plan `Store` needs to phrase cap and overflow errors in the
166
165
  * caller's terms. */
167
166
  export interface ECSMemoryCapContext {
168
167
  readonly capBytes: number | null;
@@ -170,10 +169,9 @@ export interface ECSMemoryCapContext {
170
169
  readonly budgetEntities: number | null;
171
170
  }
172
171
  /**
173
- * Turn a consumer's sizing intent into a concrete memory plan. Pure apart
174
- * from allocator/Memory construction; throws `INVALID_MEMORY_OPTIONS` on a
175
- * malformed option set at construction, not first-grow.
172
+ * Turn a consumer's sizing intent into a concrete memory plan. Pure apart from
173
+ * allocator and Memory construction. Throws `INVALID_MEMORY_OPTIONS` on a malformed
174
+ * option set, at construction, not first-grow.
176
175
  */
177
176
  export declare function resolveECSMemory(opts?: ECSMemoryOptions): ResolvedECSMemory;
178
- export {};
179
177
  //# sourceMappingURL=ecs_memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecs_memory.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/ecs_memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecs_memory.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/ecs_memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { StoreRegionSpec } from '../store/index.cjs';
2
+ import { ECSMemoryOptions } from './ecs_memory.cjs';
3
+ /** Every key `ECSOptions` accepts, the constructor's dev-mode typo tripwire
4
+ * checks unknown keys against this (kept adjacent so additions stay in sync). */
5
+ export declare const ECS_OPTION_KEYS: ReadonlySet<string>;
6
+ export interface ECSOptions {
7
+ fixedTimestep?: number;
8
+ maxFixedSteps?: number;
9
+ /** Sink for dev-mode engine diagnostics (currently the schedule's
10
+ * dropped-ordering-edge warning). Defaults to `console.warn`. Mirrors the
11
+ * `FrameTraceSink` seam's injectable style, no global logger. */
12
+ onWarn?: (message: string) => void;
13
+ /** How the world's memory is sized and backed. Two independent axes, two
14
+ * independent fields, every combination of them is legal.
15
+ *
16
+ * How big: `entities` (with optional `archetypes` and `bytesPerEntity` to
17
+ * shape the derivation) or `maxBytes`, or both. Give both when you know
18
+ * both: the count sizes the columns and the entity index, the cap is yours.
19
+ *
20
+ * What backs it: `backing`, `"heap"` (default, a plain fixed ArrayBuffer),
21
+ * `"shared"` (a SharedArrayBuffer, for worker offload or a WASM backend),
22
+ * `{ wasm }` (the buffer is a WebAssembly.Memory) or `{ allocator }` (the
23
+ * expert escape hatch, in-place-typed).
24
+ *
25
+ * `columnCapacity` pins the rows per archetype column on any combination.
26
+ * Omitted ⇒ heap backing, a fixed 256 MiB reservation and 1024-row columns.
27
+ * The resolved plan is exposed as `ECS.memoryPlan`. */
28
+ memory?: ECSMemoryOptions;
29
+ /** Consumer-declared SAB regions, forwarded to `Store`. Each
30
+ * `StoreRegionSpec` carries an opaque `region_id`, a precomputed byte size,
31
+ * and an `init` closure. The engine lays them out generically and exposes
32
+ * them through `regionHandle(id)` and `regionOffset(id)`. A consumer
33
+ * supplies the specs. The engine ships no region of its own. Replaces the
34
+ * eight game-named region options
35
+ * (`terrain_map_radius`, `spatial_grid_*`, `army_*`, `flow_field_*`,
36
+ * `actionRingCapacitySlots`) the ECS used to carry. */
37
+ regions?: readonly StoreRegionSpec[];
38
+ /** Byte size of the opt-in bindings region, forwarded to `Store`.
39
+ * A consumer that attaches a WASM `ComputeBackend` passes its own size,
40
+ * computed from its own binding manifest, so the host can publish the
41
+ * `(component_id, field_id)` ids the accelerated systems read. Omitted or
42
+ * 0 ⇒ no region, and a pure-TS world pays
43
+ * nothing for the WASM seam. The size is a runtime input, not an engine ABI
44
+ * constant. It is de-welded from the generated ABI. */
45
+ bindingsRegionBytes?: number;
46
+ /** Opt into the **determinism surface**, forwarded to
47
+ * `Store`. Default `false`. When `false`, the canonical-ordering methods
48
+ * (`stateHash`, `snapshotSparse`, `restoreSparse`) throw
49
+ * `DETERMINISM_DISABLED`. When `true`, today's replay and hash behavior is
50
+ * reproduced bit-for-bit. Determinism is the implementer's choice. A host
51
+ * that verifies a replay opts in. A host that rolls back with diffs, and
52
+ * never re-runs the frame, leaves it off. The flag gates only that
53
+ * surface: memory-safety
54
+ * invariants (the in-place SAB allocator) and the `enabled_count`
55
+ * partition are always-on regardless. */
56
+ deterministic?: boolean;
57
+ }
58
+ /** The fixed-timestep drives the `while (accumulator >= dt)` catch-up loop in
59
+ * `update()`. A non-positive `dt` makes that loop non-terminating (the
60
+ * accumulator never decreases), and a non-finite `dt` poisons `fixedAlpha`,
61
+ * so reject both at the configuration boundary rather than hanging mid-tick. */
62
+ export declare function validateFixedTimestep(value: number): number;
63
+ /** The spiral-of-death clamp in `update()` is `maxAcc = maxFixedSteps *
64
+ * fixedTimestep; if (accumulator > maxAcc) accumulator = maxAcc`. A non-finite
65
+ * `maxFixedSteps` makes `maxAcc` non-finite so the clamp never fires and a large
66
+ * `dt` runs `while (accumulator >= fixedTimestep)` unboundedly, the exact hang
67
+ * the clamp exists to prevent. A `0` clamps the accumulator to 0, so no fixed
68
+ * system runs. Validate it as a finite integer ≥ 1, the way `fixedTimestep` is. */
69
+ export declare function validateMaxFixedSteps(value: number): number;
70
+ /**
71
+ * DEV-only: reject a value that is not a template.
72
+ *
73
+ * `spawn` and `spawnMany` take a template from `ECS.template(...)`. Two
74
+ * mistakes are usual. The caller gives a component definition (`ecs.spawn(Pos)`).
75
+ * Or the caller gives a bundle (`ecs.spawn(Pos({ x: 0 }))`). The types reject
76
+ * both. An untyped call site does not.
77
+ *
78
+ * Without this check the value goes to the store. The store then reads
79
+ * `template.archetypeId`, which is `undefined`. The failure is a `TypeError`
80
+ * about `materializesRows`, from a frame deep in the store. That error names
81
+ * the wrong place, and it does not tell the caller what to do.
82
+ *
83
+ * A template is a plain object with a numeric `archetypeId`. A component
84
+ * definition is a function. A bundle is an object with `values` and no
85
+ * `archetypeId`. The test below separates all three, and it names the
86
+ * alternative for each one.
87
+ */
88
+ export declare function assertTemplate(value: unknown, op: string): void;
89
+ //# sourceMappingURL=ecs_options.d.ts.map
@@ -0,0 +1,89 @@
1
+ import { StoreRegionSpec } from '../store/index.js';
2
+ import { ECSMemoryOptions } from './ecs_memory.js';
3
+ /** Every key `ECSOptions` accepts, the constructor's dev-mode typo tripwire
4
+ * checks unknown keys against this (kept adjacent so additions stay in sync). */
5
+ export declare const ECS_OPTION_KEYS: ReadonlySet<string>;
6
+ export interface ECSOptions {
7
+ fixedTimestep?: number;
8
+ maxFixedSteps?: number;
9
+ /** Sink for dev-mode engine diagnostics (currently the schedule's
10
+ * dropped-ordering-edge warning). Defaults to `console.warn`. Mirrors the
11
+ * `FrameTraceSink` seam's injectable style, no global logger. */
12
+ onWarn?: (message: string) => void;
13
+ /** How the world's memory is sized and backed. Two independent axes, two
14
+ * independent fields, every combination of them is legal.
15
+ *
16
+ * How big: `entities` (with optional `archetypes` and `bytesPerEntity` to
17
+ * shape the derivation) or `maxBytes`, or both. Give both when you know
18
+ * both: the count sizes the columns and the entity index, the cap is yours.
19
+ *
20
+ * What backs it: `backing`, `"heap"` (default, a plain fixed ArrayBuffer),
21
+ * `"shared"` (a SharedArrayBuffer, for worker offload or a WASM backend),
22
+ * `{ wasm }` (the buffer is a WebAssembly.Memory) or `{ allocator }` (the
23
+ * expert escape hatch, in-place-typed).
24
+ *
25
+ * `columnCapacity` pins the rows per archetype column on any combination.
26
+ * Omitted ⇒ heap backing, a fixed 256 MiB reservation and 1024-row columns.
27
+ * The resolved plan is exposed as `ECS.memoryPlan`. */
28
+ memory?: ECSMemoryOptions;
29
+ /** Consumer-declared SAB regions, forwarded to `Store`. Each
30
+ * `StoreRegionSpec` carries an opaque `region_id`, a precomputed byte size,
31
+ * and an `init` closure. The engine lays them out generically and exposes
32
+ * them through `regionHandle(id)` and `regionOffset(id)`. A consumer
33
+ * supplies the specs. The engine ships no region of its own. Replaces the
34
+ * eight game-named region options
35
+ * (`terrain_map_radius`, `spatial_grid_*`, `army_*`, `flow_field_*`,
36
+ * `actionRingCapacitySlots`) the ECS used to carry. */
37
+ regions?: readonly StoreRegionSpec[];
38
+ /** Byte size of the opt-in bindings region, forwarded to `Store`.
39
+ * A consumer that attaches a WASM `ComputeBackend` passes its own size,
40
+ * computed from its own binding manifest, so the host can publish the
41
+ * `(component_id, field_id)` ids the accelerated systems read. Omitted or
42
+ * 0 ⇒ no region, and a pure-TS world pays
43
+ * nothing for the WASM seam. The size is a runtime input, not an engine ABI
44
+ * constant. It is de-welded from the generated ABI. */
45
+ bindingsRegionBytes?: number;
46
+ /** Opt into the **determinism surface**, forwarded to
47
+ * `Store`. Default `false`. When `false`, the canonical-ordering methods
48
+ * (`stateHash`, `snapshotSparse`, `restoreSparse`) throw
49
+ * `DETERMINISM_DISABLED`. When `true`, today's replay and hash behavior is
50
+ * reproduced bit-for-bit. Determinism is the implementer's choice. A host
51
+ * that verifies a replay opts in. A host that rolls back with diffs, and
52
+ * never re-runs the frame, leaves it off. The flag gates only that
53
+ * surface: memory-safety
54
+ * invariants (the in-place SAB allocator) and the `enabled_count`
55
+ * partition are always-on regardless. */
56
+ deterministic?: boolean;
57
+ }
58
+ /** The fixed-timestep drives the `while (accumulator >= dt)` catch-up loop in
59
+ * `update()`. A non-positive `dt` makes that loop non-terminating (the
60
+ * accumulator never decreases), and a non-finite `dt` poisons `fixedAlpha`,
61
+ * so reject both at the configuration boundary rather than hanging mid-tick. */
62
+ export declare function validateFixedTimestep(value: number): number;
63
+ /** The spiral-of-death clamp in `update()` is `maxAcc = maxFixedSteps *
64
+ * fixedTimestep; if (accumulator > maxAcc) accumulator = maxAcc`. A non-finite
65
+ * `maxFixedSteps` makes `maxAcc` non-finite so the clamp never fires and a large
66
+ * `dt` runs `while (accumulator >= fixedTimestep)` unboundedly, the exact hang
67
+ * the clamp exists to prevent. A `0` clamps the accumulator to 0, so no fixed
68
+ * system runs. Validate it as a finite integer ≥ 1, the way `fixedTimestep` is. */
69
+ export declare function validateMaxFixedSteps(value: number): number;
70
+ /**
71
+ * DEV-only: reject a value that is not a template.
72
+ *
73
+ * `spawn` and `spawnMany` take a template from `ECS.template(...)`. Two
74
+ * mistakes are usual. The caller gives a component definition (`ecs.spawn(Pos)`).
75
+ * Or the caller gives a bundle (`ecs.spawn(Pos({ x: 0 }))`). The types reject
76
+ * both. An untyped call site does not.
77
+ *
78
+ * Without this check the value goes to the store. The store then reads
79
+ * `template.archetypeId`, which is `undefined`. The failure is a `TypeError`
80
+ * about `materializesRows`, from a frame deep in the store. That error names
81
+ * the wrong place, and it does not tell the caller what to do.
82
+ *
83
+ * A template is a plain object with a numeric `archetypeId`. A component
84
+ * definition is a function. A bundle is an object with `values` and no
85
+ * `archetypeId`. The test below separates all three, and it names the
86
+ * alternative for each one.
87
+ */
88
+ export declare function assertTemplate(value: unknown, op: string): void;
89
+ //# sourceMappingURL=ecs_options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecs_options.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/ecs_options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;KAaK;AAEL,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD;iFACiF;AACjF,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAW9C,CAAC;AAEH,MAAM,WAAW,UAAU;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;qEAEiE;IACjE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;;;;;;;;;;;2DAcuD;IACvD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;;;2DAOuD;IACvD,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC;;;;;;2DAMuD;IACvD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;6CASyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;gFAGgF;AAChF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED;;;;;mFAKmF;AACnF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CA6B/D"}
@@ -3,11 +3,11 @@ import { ECSError } from './utils/error.cjs';
3
3
  export type EntityID = Brand<number, "entity_id">;
4
4
  /**
5
5
  * Compile-time readonly view of a `Uint32Array` whose elements are packed
6
- * `EntityID`s `Archetype.entityIds` returns this, so `ids[i]` is already
6
+ * `EntityID`s, `Archetype.entityIds` returns this, so `ids[i]` is already
7
7
  * branded and consumers don't re-brand by hand. Blocks index writes at the
8
8
  * type layer.
9
9
  *
10
- * **Advisory, not a runtime barrier** same caveat as `ReadonlyColumn`: the
10
+ * **Advisory, not a runtime barrier**, same caveat as `ReadonlyColumn`: the
11
11
  * underlying value is the live mutable buffer, and indexing past
12
12
  * `totalCount - 1` reads stale slots (the brand can't catch that).
13
13
  */
@@ -27,8 +27,8 @@ export declare const createEntityId: (index: number, generation: number) => Enti
27
27
  export declare const getEntityIndex: (id: EntityID) => number;
28
28
  export declare const getEntityGeneration: (id: EntityID) => number;
29
29
  /** Build the `ENTITY_NOT_ALIVE` error every dev-mode liveness guard throws:
30
- * names the failing operation, the packed id, and its decoded index/generation
31
- * so the user can see WHICH handle went stale without decoding by hand.
30
+ * names the failing operation, the packed id, and its decoded index and generation
31
+ * so the user can see which handle went stale without decoding by hand.
32
32
  * `detail` appends op-specific context (e.g. the component being read). */
33
33
  export declare const entityNotAliveError: (op: string, id: EntityID, detail?: string) => ECSError;
34
34
  //# sourceMappingURL=entity.d.ts.map
@@ -3,11 +3,11 @@ import { ECSError } from './utils/error.js';
3
3
  export type EntityID = Brand<number, "entity_id">;
4
4
  /**
5
5
  * Compile-time readonly view of a `Uint32Array` whose elements are packed
6
- * `EntityID`s `Archetype.entityIds` returns this, so `ids[i]` is already
6
+ * `EntityID`s, `Archetype.entityIds` returns this, so `ids[i]` is already
7
7
  * branded and consumers don't re-brand by hand. Blocks index writes at the
8
8
  * type layer.
9
9
  *
10
- * **Advisory, not a runtime barrier** same caveat as `ReadonlyColumn`: the
10
+ * **Advisory, not a runtime barrier**, same caveat as `ReadonlyColumn`: the
11
11
  * underlying value is the live mutable buffer, and indexing past
12
12
  * `totalCount - 1` reads stale slots (the brand can't catch that).
13
13
  */
@@ -27,8 +27,8 @@ export declare const createEntityId: (index: number, generation: number) => Enti
27
27
  export declare const getEntityIndex: (id: EntityID) => number;
28
28
  export declare const getEntityGeneration: (id: EntityID) => number;
29
29
  /** Build the `ENTITY_NOT_ALIVE` error every dev-mode liveness guard throws:
30
- * names the failing operation, the packed id, and its decoded index/generation
31
- * so the user can see WHICH handle went stale without decoding by hand.
30
+ * names the failing operation, the packed id, and its decoded index and generation
31
+ * so the user can see which handle went stale without decoding by hand.
32
32
  * `detail` appends op-specific context (e.g. the component being read). */
33
33
  export declare const entityNotAliveError: (op: string, id: EntityID, detail?: string) => ECSError;
34
34
  //# sourceMappingURL=entity.d.ts.map