@oasys/oecs 0.5.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/CHANGELOG.md +1223 -266
  2. package/README.md +217 -112
  3. package/dist/core/ecs/access_check.d.cts +29 -29
  4. package/dist/core/ecs/access_check.d.ts +29 -29
  5. package/dist/core/ecs/access_check.d.ts.map +1 -1
  6. package/dist/core/ecs/archetype.d.cts +217 -209
  7. package/dist/core/ecs/archetype.d.ts +217 -209
  8. package/dist/core/ecs/archetype.d.ts.map +1 -1
  9. package/dist/core/ecs/archetype_closure.d.cts +23 -0
  10. package/dist/core/ecs/archetype_closure.d.ts +23 -0
  11. package/dist/core/ecs/archetype_closure.d.ts.map +1 -0
  12. package/dist/core/ecs/archetype_graph.d.cts +33 -33
  13. package/dist/core/ecs/archetype_graph.d.ts +33 -33
  14. package/dist/core/ecs/archetype_graph.d.ts.map +1 -1
  15. package/dist/core/ecs/archetype_types.d.cts +55 -0
  16. package/dist/core/ecs/archetype_types.d.ts +55 -0
  17. package/dist/core/ecs/archetype_types.d.ts.map +1 -0
  18. package/dist/core/ecs/change_feed.d.cts +53 -0
  19. package/dist/core/ecs/change_feed.d.ts +53 -0
  20. package/dist/core/ecs/change_feed.d.ts.map +1 -0
  21. package/dist/core/ecs/changed_query.d.cts +36 -0
  22. package/dist/core/ecs/changed_query.d.ts +36 -0
  23. package/dist/core/ecs/changed_query.d.ts.map +1 -0
  24. package/dist/core/ecs/chunk_columns.d.cts +49 -0
  25. package/dist/core/ecs/chunk_columns.d.ts +49 -0
  26. package/dist/core/ecs/chunk_columns.d.ts.map +1 -0
  27. package/dist/core/ecs/command_log.d.cts +26 -26
  28. package/dist/core/ecs/command_log.d.ts +26 -26
  29. package/dist/core/ecs/command_log.d.ts.map +1 -1
  30. package/dist/core/ecs/component.d.cts +43 -42
  31. package/dist/core/ecs/component.d.ts +43 -42
  32. package/dist/core/ecs/component.d.ts.map +1 -1
  33. package/dist/core/ecs/component_registry.d.cts +53 -0
  34. package/dist/core/ecs/component_registry.d.ts +53 -0
  35. package/dist/core/ecs/component_registry.d.ts.map +1 -0
  36. package/dist/core/ecs/compute_backend.d.cts +18 -7
  37. package/dist/core/ecs/compute_backend.d.ts +18 -7
  38. package/dist/core/ecs/compute_backend.d.ts.map +1 -1
  39. package/dist/core/ecs/deferred_commands.d.cts +15 -14
  40. package/dist/core/ecs/deferred_commands.d.ts +15 -14
  41. package/dist/core/ecs/deferred_commands.d.ts.map +1 -1
  42. package/dist/core/ecs/dispatch_trace.d.cts +32 -31
  43. package/dist/core/ecs/dispatch_trace.d.ts +32 -31
  44. package/dist/core/ecs/dispatch_trace.d.ts.map +1 -1
  45. package/dist/core/ecs/ecs.d.cts +289 -270
  46. package/dist/core/ecs/ecs.d.ts +289 -270
  47. package/dist/core/ecs/ecs.d.ts.map +1 -1
  48. package/dist/core/ecs/ecs_memory.d.cts +134 -136
  49. package/dist/core/ecs/ecs_memory.d.ts +134 -136
  50. package/dist/core/ecs/ecs_memory.d.ts.map +1 -1
  51. package/dist/core/ecs/ecs_options.d.cts +89 -0
  52. package/dist/core/ecs/ecs_options.d.ts +89 -0
  53. package/dist/core/ecs/ecs_options.d.ts.map +1 -0
  54. package/dist/core/ecs/entity.d.cts +4 -4
  55. package/dist/core/ecs/entity.d.ts +4 -4
  56. package/dist/core/ecs/entity_allocator.d.cts +20 -18
  57. package/dist/core/ecs/entity_allocator.d.ts +20 -18
  58. package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
  59. package/dist/core/ecs/event.d.cts +36 -22
  60. package/dist/core/ecs/event.d.ts +36 -22
  61. package/dist/core/ecs/event.d.ts.map +1 -1
  62. package/dist/core/ecs/facades.d.cts +12 -126
  63. package/dist/core/ecs/facades.d.ts +12 -126
  64. package/dist/core/ecs/facades.d.ts.map +1 -1
  65. package/dist/core/ecs/frame_stepper.d.cts +12 -12
  66. package/dist/core/ecs/frame_stepper.d.ts +12 -12
  67. package/dist/core/ecs/frame_stepper.d.ts.map +1 -1
  68. package/dist/core/ecs/frame_trace.d.cts +32 -32
  69. package/dist/core/ecs/frame_trace.d.ts +32 -32
  70. package/dist/core/ecs/frame_trace.d.ts.map +1 -1
  71. package/dist/core/ecs/host_commands.d.cts +103 -85
  72. package/dist/core/ecs/host_commands.d.ts +103 -85
  73. package/dist/core/ecs/host_commands.d.ts.map +1 -1
  74. package/dist/core/ecs/index.d.cts +21 -11
  75. package/dist/core/ecs/index.d.ts +21 -11
  76. package/dist/core/ecs/index.d.ts.map +1 -1
  77. package/dist/core/ecs/observer.d.cts +39 -120
  78. package/dist/core/ecs/observer.d.ts +39 -120
  79. package/dist/core/ecs/observer.d.ts.map +1 -1
  80. package/dist/core/ecs/phase.d.cts +79 -0
  81. package/dist/core/ecs/phase.d.ts +79 -0
  82. package/dist/core/ecs/phase.d.ts.map +1 -0
  83. package/dist/core/ecs/plugin.d.cts +125 -0
  84. package/dist/core/ecs/plugin.d.ts +125 -0
  85. package/dist/core/ecs/plugin.d.ts.map +1 -0
  86. package/dist/core/ecs/plugin_slots.d.cts +26 -0
  87. package/dist/core/ecs/plugin_slots.d.ts +26 -0
  88. package/dist/core/ecs/plugin_slots.d.ts.map +1 -0
  89. package/dist/core/ecs/query.d.cts +208 -578
  90. package/dist/core/ecs/query.d.ts +208 -578
  91. package/dist/core/ecs/query.d.ts.map +1 -1
  92. package/dist/core/ecs/query_cache.d.cts +130 -0
  93. package/dist/core/ecs/query_cache.d.ts +130 -0
  94. package/dist/core/ecs/query_cache.d.ts.map +1 -0
  95. package/dist/core/ecs/query_registry.d.cts +47 -0
  96. package/dist/core/ecs/query_registry.d.ts +47 -0
  97. package/dist/core/ecs/query_registry.d.ts.map +1 -0
  98. package/dist/core/ecs/query_terms.d.cts +126 -0
  99. package/dist/core/ecs/query_terms.d.ts +126 -0
  100. package/dist/core/ecs/query_terms.d.ts.map +1 -0
  101. package/dist/core/ecs/ref.d.cts +100 -39
  102. package/dist/core/ecs/ref.d.ts +100 -39
  103. package/dist/core/ecs/ref.d.ts.map +1 -1
  104. package/dist/core/ecs/relation.d.cts +101 -182
  105. package/dist/core/ecs/relation.d.ts +101 -182
  106. package/dist/core/ecs/relation.d.ts.map +1 -1
  107. package/dist/core/ecs/resource.d.cts +13 -13
  108. package/dist/core/ecs/resource.d.ts +13 -13
  109. package/dist/core/ecs/resource_registry.d.cts +5 -5
  110. package/dist/core/ecs/resource_registry.d.ts +5 -5
  111. package/dist/core/ecs/resource_registry.d.ts.map +1 -1
  112. package/dist/core/ecs/row_kinds.d.cts +24 -0
  113. package/dist/core/ecs/row_kinds.d.ts +24 -0
  114. package/dist/core/ecs/row_kinds.d.ts.map +1 -0
  115. package/dist/core/ecs/run_condition.d.cts +23 -23
  116. package/dist/core/ecs/run_condition.d.ts +23 -23
  117. package/dist/core/ecs/run_condition.d.ts.map +1 -1
  118. package/dist/core/ecs/schedule.d.cts +91 -120
  119. package/dist/core/ecs/schedule.d.ts +91 -120
  120. package/dist/core/ecs/schedule.d.ts.map +1 -1
  121. package/dist/core/ecs/schedule_plan.d.cts +33 -0
  122. package/dist/core/ecs/schedule_plan.d.ts +33 -0
  123. package/dist/core/ecs/schedule_plan.d.ts.map +1 -0
  124. package/dist/core/ecs/snapshot.d.cts +77 -0
  125. package/dist/core/ecs/snapshot.d.ts +77 -0
  126. package/dist/core/ecs/snapshot.d.ts.map +1 -0
  127. package/dist/core/ecs/snapshot_mount.d.cts +42 -0
  128. package/dist/core/ecs/snapshot_mount.d.ts +42 -0
  129. package/dist/core/ecs/snapshot_mount.d.ts.map +1 -0
  130. package/dist/core/ecs/sparse_store.d.cts +108 -51
  131. package/dist/core/ecs/sparse_store.d.ts +108 -51
  132. package/dist/core/ecs/sparse_store.d.ts.map +1 -1
  133. package/dist/core/ecs/store.d.cts +527 -473
  134. package/dist/core/ecs/store.d.ts +527 -473
  135. package/dist/core/ecs/store.d.ts.map +1 -1
  136. package/dist/core/ecs/store_layout_listener.d.cts +6 -6
  137. package/dist/core/ecs/store_layout_listener.d.ts +6 -6
  138. package/dist/core/ecs/store_types.d.cts +122 -0
  139. package/dist/core/ecs/store_types.d.ts +122 -0
  140. package/dist/core/ecs/store_types.d.ts.map +1 -0
  141. package/dist/core/ecs/system.d.cts +146 -61
  142. package/dist/core/ecs/system.d.ts +146 -61
  143. package/dist/core/ecs/system.d.ts.map +1 -1
  144. package/dist/core/ecs/system_context.d.cts +296 -0
  145. package/dist/core/ecs/system_context.d.ts +296 -0
  146. package/dist/core/ecs/system_context.d.ts.map +1 -0
  147. package/dist/core/ecs/system_set.d.cts +48 -0
  148. package/dist/core/ecs/system_set.d.ts +48 -0
  149. package/dist/core/ecs/system_set.d.ts.map +1 -0
  150. package/dist/core/ecs/utils/arrays.d.cts +15 -1
  151. package/dist/core/ecs/utils/arrays.d.ts +15 -1
  152. package/dist/core/ecs/utils/arrays.d.ts.map +1 -1
  153. package/dist/core/ecs/utils/error.d.cts +82 -6
  154. package/dist/core/ecs/utils/error.d.ts +82 -6
  155. package/dist/core/ecs/utils/error.d.ts.map +1 -1
  156. package/dist/core/ecs/utils/plugin_error.d.cts +10 -0
  157. package/dist/core/ecs/utils/plugin_error.d.ts +10 -0
  158. package/dist/core/ecs/utils/plugin_error.d.ts.map +1 -0
  159. package/dist/core/restore_errors.d.cts +30 -0
  160. package/dist/core/restore_errors.d.ts +30 -0
  161. package/dist/core/restore_errors.d.ts.map +1 -0
  162. package/dist/core/store/action_ring.d.cts +44 -44
  163. package/dist/core/store/action_ring.d.ts +44 -44
  164. package/dist/core/store/action_ring.d.ts.map +1 -1
  165. package/dist/core/store/allocator.d.cts +149 -95
  166. package/dist/core/store/allocator.d.ts +149 -95
  167. package/dist/core/store/allocator.d.ts.map +1 -1
  168. package/dist/core/store/buffer_backed_column.d.cts +17 -17
  169. package/dist/core/store/buffer_backed_column.d.ts +17 -17
  170. package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
  171. package/dist/core/store/column_store.d.cts +124 -86
  172. package/dist/core/store/column_store.d.ts +124 -86
  173. package/dist/core/store/column_store.d.ts.map +1 -1
  174. package/dist/core/store/command_dispatch.d.cts +14 -15
  175. package/dist/core/store/command_dispatch.d.ts +14 -15
  176. package/dist/core/store/command_dispatch.d.ts.map +1 -1
  177. package/dist/core/store/command_ring.d.cts +36 -39
  178. package/dist/core/store/command_ring.d.ts +36 -39
  179. package/dist/core/store/command_ring.d.ts.map +1 -1
  180. package/dist/core/store/descriptor.d.cts +34 -17
  181. package/dist/core/store/descriptor.d.ts +34 -17
  182. package/dist/core/store/descriptor.d.ts.map +1 -1
  183. package/dist/core/store/entity_index.d.cts +34 -35
  184. package/dist/core/store/entity_index.d.ts +34 -35
  185. package/dist/core/store/entity_index.d.ts.map +1 -1
  186. package/dist/core/store/event_ring.d.cts +36 -38
  187. package/dist/core/store/event_ring.d.ts +36 -38
  188. package/dist/core/store/event_ring.d.ts.map +1 -1
  189. package/dist/core/store/extend.d.cts +13 -7
  190. package/dist/core/store/extend.d.ts +13 -7
  191. package/dist/core/store/extend.d.ts.map +1 -1
  192. package/dist/core/store/grow.d.cts +2 -2
  193. package/dist/core/store/grow.d.ts +2 -2
  194. package/dist/core/store/grow.d.ts.map +1 -1
  195. package/dist/core/store/header.d.cts +31 -27
  196. package/dist/core/store/header.d.ts +31 -27
  197. package/dist/core/store/header.d.ts.map +1 -1
  198. package/dist/core/store/index.d.cts +10 -10
  199. package/dist/core/store/index.d.ts +10 -10
  200. package/dist/core/store/index.d.ts.map +1 -1
  201. package/dist/core/store/layout_ops.d.cts +71 -62
  202. package/dist/core/store/layout_ops.d.ts +71 -62
  203. package/dist/core/store/layout_ops.d.ts.map +1 -1
  204. package/dist/core/store/region_table.d.cts +28 -21
  205. package/dist/core/store/region_table.d.ts +28 -21
  206. package/dist/core/store/region_table.d.ts.map +1 -1
  207. package/dist/core/store/snapshot.d.cts +31 -16
  208. package/dist/core/store/snapshot.d.ts +31 -16
  209. package/dist/core/store/snapshot.d.ts.map +1 -1
  210. package/dist/core/store/state_hash.d.cts +12 -12
  211. package/dist/core/store/state_hash.d.ts +12 -12
  212. package/dist/core/store/state_hash.d.ts.map +1 -1
  213. package/dist/core/store/store_regions.d.cts +10 -10
  214. package/dist/core/store/store_regions.d.ts +10 -10
  215. package/dist/core/store/store_regions.d.ts.map +1 -1
  216. package/dist/core/store/vendored_abi/abi.d.cts +27 -2
  217. package/dist/core/store/vendored_abi/abi.d.ts +27 -2
  218. package/dist/core/store/vendored_abi/abi.d.ts.map +1 -1
  219. package/dist/host_commands-B2KMx8O2.cjs +1 -0
  220. package/dist/host_commands-ClVPvhSa.cjs +2 -0
  221. package/dist/host_commands-CwxVQS1z.js +1524 -0
  222. package/dist/host_commands-nJvTy88E.js +1667 -0
  223. package/dist/index.cjs +1 -1
  224. package/dist/index.d.cts +15 -10
  225. package/dist/index.d.ts +15 -10
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.development.cjs +1 -1
  228. package/dist/index.development.js +5804 -5203
  229. package/dist/index.js +5323 -4764
  230. package/dist/internal.cjs +2 -2
  231. package/dist/internal.d.cts +5 -2
  232. package/dist/internal.d.ts +5 -2
  233. package/dist/internal.d.ts.map +1 -1
  234. package/dist/internal.development.cjs +1 -1
  235. package/dist/internal.development.js +70 -20
  236. package/dist/internal.js +138 -83
  237. package/dist/plugins/abi-D3V-QUSf.cjs +1 -0
  238. package/dist/plugins/abi-NP8pNxpd.js +42 -0
  239. package/dist/plugins/arrays-Dr_1hCjL.js +28 -0
  240. package/dist/plugins/arrays-Dt-Joc4i.cjs +1 -0
  241. package/dist/plugins/assertions-gtDVfbnQ.js +6 -0
  242. package/dist/plugins/assertions-z5GQd_bB.cjs +1 -0
  243. package/dist/{extensions → plugins}/editor/editor.d.cts +54 -54
  244. package/dist/{extensions → plugins}/editor/editor.d.ts +54 -54
  245. package/dist/plugins/editor/editor.d.ts.map +1 -0
  246. package/dist/{extensions → plugins}/editor/field_handle.d.cts +12 -12
  247. package/dist/{extensions → plugins}/editor/field_handle.d.ts +12 -12
  248. package/dist/plugins/editor/field_handle.d.ts.map +1 -0
  249. package/dist/plugins/editor/index.d.cts +22 -0
  250. package/dist/plugins/editor/index.d.ts +22 -0
  251. package/dist/plugins/editor/index.d.ts.map +1 -0
  252. package/dist/plugins/editor.cjs +1 -0
  253. package/dist/plugins/editor.d.cts +1 -0
  254. package/dist/plugins/editor.d.ts +1 -0
  255. package/dist/plugins/editor.development.cjs +1 -0
  256. package/dist/{extensions/editor/index.development.js → plugins/editor.development.js} +81 -64
  257. package/dist/{extensions/editor/index.js → plugins/editor.js} +81 -64
  258. package/dist/plugins/events/event_channel.d.cts +13 -0
  259. package/dist/plugins/events/event_channel.d.ts +13 -0
  260. package/dist/plugins/events/event_channel.d.ts.map +1 -0
  261. package/dist/plugins/events/event_registry.d.cts +22 -0
  262. package/dist/plugins/events/event_registry.d.ts +22 -0
  263. package/dist/plugins/events/event_registry.d.ts.map +1 -0
  264. package/dist/plugins/events/facade.d.cts +26 -0
  265. package/dist/plugins/events/facade.d.ts +26 -0
  266. package/dist/plugins/events/facade.d.ts.map +1 -0
  267. package/dist/plugins/events/index.d.cts +10 -0
  268. package/dist/plugins/events/index.d.ts +10 -0
  269. package/dist/plugins/events/index.d.ts.map +1 -0
  270. package/dist/plugins/events.cjs +1 -0
  271. package/dist/plugins/events.d.cts +1 -0
  272. package/dist/plugins/events.d.ts +1 -0
  273. package/dist/plugins/events.development.cjs +1 -0
  274. package/dist/plugins/events.development.js +174 -0
  275. package/dist/plugins/events.js +159 -0
  276. package/dist/plugins/observers/index.d.cts +23 -0
  277. package/dist/plugins/observers/index.d.ts +23 -0
  278. package/dist/plugins/observers/index.d.ts.map +1 -0
  279. package/dist/plugins/observers/observer_registry.d.cts +101 -0
  280. package/dist/plugins/observers/observer_registry.d.ts +101 -0
  281. package/dist/plugins/observers/observer_registry.d.ts.map +1 -0
  282. package/dist/plugins/observers.cjs +1 -0
  283. package/dist/plugins/observers.d.cts +1 -0
  284. package/dist/plugins/observers.d.ts +1 -0
  285. package/dist/plugins/observers.development.cjs +1 -0
  286. package/dist/plugins/observers.development.js +431 -0
  287. package/dist/plugins/observers.js +403 -0
  288. package/dist/plugins/relation_store-BsoegrZh.js +313 -0
  289. package/dist/plugins/relation_store-DQKSnxsm.cjs +1 -0
  290. package/dist/plugins/relation_store-RBhpcE28.cjs +1 -0
  291. package/dist/plugins/relation_store-RqW5Snx6.js +328 -0
  292. package/dist/plugins/relations/builtin_relations.d.cts +48 -0
  293. package/dist/plugins/relations/builtin_relations.d.ts +48 -0
  294. package/dist/plugins/relations/builtin_relations.d.ts.map +1 -0
  295. package/dist/plugins/relations/facade.d.cts +73 -0
  296. package/dist/plugins/relations/facade.d.ts +73 -0
  297. package/dist/plugins/relations/facade.d.ts.map +1 -0
  298. package/dist/plugins/relations/index.d.cts +11 -0
  299. package/dist/plugins/relations/index.d.ts +11 -0
  300. package/dist/plugins/relations/index.d.ts.map +1 -0
  301. package/dist/{core/ecs → plugins/relations}/relation_service.d.cts +85 -97
  302. package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +85 -97
  303. package/dist/plugins/relations/relation_service.d.ts.map +1 -0
  304. package/dist/plugins/relations/relation_store.d.cts +177 -0
  305. package/dist/plugins/relations/relation_store.d.ts +177 -0
  306. package/dist/plugins/relations/relation_store.d.ts.map +1 -0
  307. package/dist/plugins/relations.cjs +1 -0
  308. package/dist/plugins/relations.d.cts +1 -0
  309. package/dist/plugins/relations.d.ts +1 -0
  310. package/dist/plugins/relations.development.cjs +1 -0
  311. package/dist/plugins/relations.development.js +603 -0
  312. package/dist/plugins/relations.js +553 -0
  313. package/dist/plugins/snapshots/index.d.cts +33 -0
  314. package/dist/plugins/snapshots/index.d.ts +33 -0
  315. package/dist/plugins/snapshots/index.d.ts.map +1 -0
  316. package/dist/plugins/snapshots/resume.d.cts +57 -0
  317. package/dist/plugins/snapshots/resume.d.ts +57 -0
  318. package/dist/plugins/snapshots/resume.d.ts.map +1 -0
  319. package/dist/plugins/snapshots/snapshot_service.d.cts +59 -0
  320. package/dist/plugins/snapshots/snapshot_service.d.ts +59 -0
  321. package/dist/plugins/snapshots/snapshot_service.d.ts.map +1 -0
  322. package/dist/plugins/snapshots.cjs +1 -0
  323. package/dist/plugins/snapshots.d.cts +1 -0
  324. package/dist/plugins/snapshots.d.ts +1 -0
  325. package/dist/plugins/snapshots.development.cjs +1 -0
  326. package/dist/plugins/snapshots.development.js +737 -0
  327. package/dist/plugins/snapshots.js +737 -0
  328. package/dist/plugins/solid/index.d.cts +8 -0
  329. package/dist/plugins/solid/index.d.ts +8 -0
  330. package/dist/plugins/solid/index.d.ts.map +1 -0
  331. package/dist/plugins/solid/solid.d.cts +97 -0
  332. package/dist/plugins/solid/solid.d.ts +97 -0
  333. package/dist/plugins/solid/solid.d.ts.map +1 -0
  334. package/dist/plugins/solid.cjs +1 -0
  335. package/dist/plugins/solid.d.cts +1 -0
  336. package/dist/plugins/solid.d.ts +1 -0
  337. package/dist/plugins/solid.development.cjs +1 -0
  338. package/dist/plugins/solid.development.js +319 -0
  339. package/dist/plugins/solid.js +319 -0
  340. package/dist/plugins/workers/index.d.cts +75 -0
  341. package/dist/plugins/workers/index.d.ts +75 -0
  342. package/dist/plugins/workers/index.d.ts.map +1 -0
  343. package/dist/plugins/workers/node_threads.d.cts +25 -0
  344. package/dist/plugins/workers/node_threads.d.ts +25 -0
  345. package/dist/plugins/workers/node_threads.d.ts.map +1 -0
  346. package/dist/plugins/workers/plan.d.cts +61 -0
  347. package/dist/plugins/workers/plan.d.ts +61 -0
  348. package/dist/plugins/workers/plan.d.ts.map +1 -0
  349. package/dist/plugins/workers/pool.d.cts +144 -0
  350. package/dist/plugins/workers/pool.d.ts +144 -0
  351. package/dist/plugins/workers/pool.d.ts.map +1 -0
  352. package/dist/plugins/workers/protocol.d.cts +112 -0
  353. package/dist/plugins/workers/protocol.d.ts +112 -0
  354. package/dist/plugins/workers/protocol.d.ts.map +1 -0
  355. package/dist/plugins/workers/worker_bind.d.cts +64 -0
  356. package/dist/plugins/workers/worker_bind.d.ts +64 -0
  357. package/dist/plugins/workers/worker_bind.d.ts.map +1 -0
  358. package/dist/plugins/workers/worker_loop.d.cts +14 -0
  359. package/dist/plugins/workers/worker_loop.d.ts +14 -0
  360. package/dist/plugins/workers/worker_loop.d.ts.map +1 -0
  361. package/dist/plugins/workers.cjs +1 -0
  362. package/dist/plugins/workers.d.cts +1 -0
  363. package/dist/plugins/workers.d.ts +1 -0
  364. package/dist/plugins/workers.development.cjs +1 -0
  365. package/dist/plugins/workers.development.js +596 -0
  366. package/dist/plugins/workers.js +474 -0
  367. package/dist/primitives.cjs +1 -1
  368. package/dist/primitives.d.cts +4 -4
  369. package/dist/primitives.d.ts +4 -4
  370. package/dist/primitives.development.cjs +1 -1
  371. package/dist/primitives.development.js +66 -22
  372. package/dist/primitives.js +66 -22
  373. package/dist/shared-BKl12xF1.js +132 -0
  374. package/dist/shared-Dk-pACZT.cjs +1 -0
  375. package/dist/shared.cjs +1 -1
  376. package/dist/shared.d.cts +7 -7
  377. package/dist/shared.d.ts +7 -7
  378. package/dist/shared.d.ts.map +1 -1
  379. package/dist/shared.development.cjs +1 -1
  380. package/dist/shared.development.js +4 -3
  381. package/dist/shared.js +4 -3
  382. package/dist/topological_sort-Cc_yXqPT.js +346 -0
  383. package/dist/topological_sort-vp1imU6D.cjs +1 -0
  384. package/dist/type_primitives/assertions.d.cts +12 -16
  385. package/dist/type_primitives/assertions.d.ts +12 -16
  386. package/dist/type_primitives/assertions.d.ts.map +1 -1
  387. package/dist/type_primitives/binary_heap/binary_heap.d.cts +2 -6
  388. package/dist/type_primitives/binary_heap/binary_heap.d.ts +2 -6
  389. package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
  390. package/dist/type_primitives/bitset/bitset.d.cts +7 -11
  391. package/dist/type_primitives/bitset/bitset.d.ts +7 -11
  392. package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
  393. package/dist/type_primitives/brand.d.cts +2 -7
  394. package/dist/type_primitives/brand.d.ts +2 -7
  395. package/dist/type_primitives/brand.d.ts.map +1 -1
  396. package/dist/type_primitives/error.d.cts +1 -2
  397. package/dist/type_primitives/error.d.ts +1 -2
  398. package/dist/type_primitives/error.d.ts.map +1 -1
  399. package/dist/type_primitives/index.d.cts +1 -1
  400. package/dist/type_primitives/index.d.ts +1 -1
  401. package/dist/type_primitives/sparse_map/sparse_map.d.cts +3 -7
  402. package/dist/type_primitives/sparse_map/sparse_map.d.ts +3 -7
  403. package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
  404. package/dist/type_primitives/sparse_set/sparse_set.d.cts +2 -6
  405. package/dist/type_primitives/sparse_set/sparse_set.d.ts +2 -6
  406. package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
  407. package/dist/type_primitives/topological_sort/topological_sort.d.cts +1 -5
  408. package/dist/type_primitives/topological_sort/topological_sort.d.ts +1 -5
  409. package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
  410. package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +16 -15
  411. package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +16 -15
  412. package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
  413. package/dist/utils/error.d.ts.map +1 -1
  414. package/dist/version.d.cts +3 -3
  415. package/dist/version.d.ts +3 -3
  416. package/dist/worker.cjs +1 -0
  417. package/dist/worker.d.cts +17 -0
  418. package/dist/worker.d.ts +17 -0
  419. package/dist/worker.d.ts.map +1 -0
  420. package/dist/worker.development.cjs +1 -0
  421. package/dist/worker.development.js +253 -0
  422. package/dist/worker.js +253 -0
  423. package/package.json +363 -191
  424. package/dist/core/ecs/builtin_relations.d.cts +0 -43
  425. package/dist/core/ecs/builtin_relations.d.ts +0 -43
  426. package/dist/core/ecs/builtin_relations.d.ts.map +0 -1
  427. package/dist/core/ecs/event_registry.d.cts +0 -22
  428. package/dist/core/ecs/event_registry.d.ts +0 -22
  429. package/dist/core/ecs/event_registry.d.ts.map +0 -1
  430. package/dist/core/ecs/relation_service.d.ts.map +0 -1
  431. package/dist/core/ecs/resume.d.cts +0 -85
  432. package/dist/core/ecs/resume.d.ts +0 -85
  433. package/dist/core/ecs/resume.d.ts.map +0 -1
  434. package/dist/core/ecs/snapshot_service.d.cts +0 -94
  435. package/dist/core/ecs/snapshot_service.d.ts +0 -94
  436. package/dist/core/ecs/snapshot_service.d.ts.map +0 -1
  437. package/dist/extensions/editor/editor.d.ts.map +0 -1
  438. package/dist/extensions/editor/field_handle.d.ts.map +0 -1
  439. package/dist/extensions/editor/index.cjs +0 -1
  440. package/dist/extensions/editor/index.d.cts +0 -21
  441. package/dist/extensions/editor/index.d.ts +0 -21
  442. package/dist/extensions/editor/index.d.ts.map +0 -1
  443. package/dist/extensions/editor/index.development.cjs +0 -1
  444. package/dist/extensions/reactive/ecs_sync.d.cts +0 -214
  445. package/dist/extensions/reactive/ecs_sync.d.ts +0 -214
  446. package/dist/extensions/reactive/ecs_sync.d.ts.map +0 -1
  447. package/dist/extensions/reactive/index.cjs +0 -1
  448. package/dist/extensions/reactive/index.d.cts +0 -23
  449. package/dist/extensions/reactive/index.d.ts +0 -23
  450. package/dist/extensions/reactive/index.d.ts.map +0 -1
  451. package/dist/extensions/reactive/index.development.cjs +0 -1
  452. package/dist/extensions/reactive/index.development.js +0 -215
  453. package/dist/extensions/reactive/index.js +0 -215
  454. package/dist/extensions/solid/index.cjs +0 -1
  455. package/dist/extensions/solid/index.d.cts +0 -6
  456. package/dist/extensions/solid/index.d.ts +0 -6
  457. package/dist/extensions/solid/index.d.ts.map +0 -1
  458. package/dist/extensions/solid/index.development.cjs +0 -1
  459. package/dist/extensions/solid/index.development.js +0 -40
  460. package/dist/extensions/solid/index.js +0 -36
  461. package/dist/extensions/solid/kernel_solid.d.cts +0 -45
  462. package/dist/extensions/solid/kernel_solid.d.ts +0 -45
  463. package/dist/extensions/solid/kernel_solid.d.ts.map +0 -1
  464. package/dist/host_commands-BlR3oZ3x.js +0 -2406
  465. package/dist/host_commands-C2cpU3yC.cjs +0 -1
  466. package/dist/internal-BoxWl4dG.js +0 -2565
  467. package/dist/internal-CGBEwfeB.cjs +0 -2
  468. package/dist/interop-CT-REx0W.cjs +0 -1
  469. package/dist/interop-CcY6ASQc.js +0 -18
  470. package/dist/interop-DqxleBo7.js +0 -18
  471. package/dist/interop-T1HZ-Dpa.cjs +0 -1
  472. package/dist/kernel-Cz2Kxlwl.js +0 -240
  473. package/dist/kernel-DgyrLFjW.js +0 -227
  474. package/dist/kernel-sw7ScKWu.cjs +0 -1
  475. package/dist/kernel-yWV3XnAb.cjs +0 -1
  476. package/dist/reactive/array.d.cts +0 -24
  477. package/dist/reactive/array.d.ts +0 -24
  478. package/dist/reactive/array.d.ts.map +0 -1
  479. package/dist/reactive/index.cjs +0 -1
  480. package/dist/reactive/index.d.cts +0 -11
  481. package/dist/reactive/index.d.ts +0 -11
  482. package/dist/reactive/index.d.ts.map +0 -1
  483. package/dist/reactive/index.development.cjs +0 -1
  484. package/dist/reactive/index.development.js +0 -18
  485. package/dist/reactive/index.js +0 -18
  486. package/dist/reactive/interop.d.cts +0 -19
  487. package/dist/reactive/interop.d.ts +0 -19
  488. package/dist/reactive/interop.d.ts.map +0 -1
  489. package/dist/reactive/kernel.d.cts +0 -73
  490. package/dist/reactive/kernel.d.ts +0 -73
  491. package/dist/reactive/kernel.d.ts.map +0 -1
  492. package/dist/reactive/map.d.cts +0 -16
  493. package/dist/reactive/map.d.ts +0 -16
  494. package/dist/reactive/map.d.ts.map +0 -1
  495. package/dist/reactive/shallow.d.cts +0 -11
  496. package/dist/reactive/shallow.d.ts +0 -11
  497. package/dist/reactive/shallow.d.ts.map +0 -1
  498. package/dist/reactive/struct.d.cts +0 -10
  499. package/dist/reactive/struct.d.ts +0 -10
  500. package/dist/reactive/struct.d.ts.map +0 -1
  501. package/dist/shallow-Bs39EPh1.js +0 -150
  502. package/dist/shallow-C5YmTbtb.cjs +0 -1
  503. package/dist/shallow-CiFC70Dz.js +0 -159
  504. package/dist/shallow-DQ8aG51_.cjs +0 -1
  505. package/dist/shared-B4v0L1cw.js +0 -109
  506. package/dist/shared-DU78k0pU.cjs +0 -1
  507. package/dist/topological_sort-BDvEyb9W.cjs +0 -1
  508. package/dist/topological_sort-DK6EjpWa.js +0 -135
  509. package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
  510. package/dist/typed_arrays-DIVwVy5_.js +0 -258
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `@oasys/oecs/solid`, the SolidJS plugin.
3
+ *
4
+ * `solid()` reads the store's change feed and writes Solid signals and stores
5
+ * directly. Nothing sits between the store and Solid.
6
+ */
7
+ export { solid, type ECSSolid, type RowReader, type SolidPlugin, type SolidComponentView, type SolidGrain, type SolidSingletonView, type SolidViewOptions } from './solid.cjs';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `@oasys/oecs/solid`, the SolidJS plugin.
3
+ *
4
+ * `solid()` reads the store's change feed and writes Solid signals and stores
5
+ * directly. Nothing sits between the store and Solid.
6
+ */
7
+ export { solid, type ECSSolid, type RowReader, type SolidPlugin, type SolidComponentView, type SolidGrain, type SolidSingletonView, type SolidViewOptions } from './solid.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/solid/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACN,KAAK,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { Accessor } from 'solid-js';
2
+ import { Store } from 'solid-js/store';
3
+ import { Plugin, ComponentDef, ComponentSchema, EntityID } from '../../core/ecs/index.cjs';
4
+ /**
5
+ * A read cursor over one entity's single-component state, handed to a
6
+ * projection. `field` reads a column under the `"column"` grain, and it reads
7
+ * by id through a cursor under the `"entity"` grain.
8
+ *
9
+ * The cursor is a reused mutable singleton, valid only during the synchronous
10
+ * `project` call for the current row. Read what you need and return. A captured
11
+ * reader reads the next row, because the next row mutates it in place.
12
+ */
13
+ export interface RowReader<S extends ComponentSchema> {
14
+ /** The entity of the row being projected. */
15
+ readonly eid: EntityID;
16
+ /** Read one field of the projected component, for the current row. */
17
+ field<K extends string & keyof S>(name: K): number;
18
+ }
19
+ /** Per-component grain of the set half of a view. */
20
+ export type SolidGrain = "entity" | "column";
21
+ /** The world surface this plugin adds. */
22
+ export interface SolidPlugin {
23
+ readonly solid: ECSSolid;
24
+ }
25
+ /** One component projected into one Solid signal per entity. */
26
+ export interface SolidComponentView<V> {
27
+ /** The row's live value, as one Solid signal. The first call for an id
28
+ * makes that signal, seeded with the value the view holds now, and every
29
+ * later call returns the same accessor. Bind it once for each row, in the
30
+ * row's own scope, and never inside a jsx expression that re-evaluates.
31
+ *
32
+ * `undefined` while the view does not hold the id. A cell outlives a
33
+ * delete, so the same accessor reports the row leaving and returning, and
34
+ * the view keeps every cell a caller ever asked for. */
35
+ cell(id: EntityID): Accessor<V | undefined>;
36
+ /** The live key set, for a keyed `<For each={view.keys()}>`. A new array
37
+ * only when membership changed. */
38
+ readonly keys: Accessor<readonly EntityID[]>;
39
+ dispose(): void;
40
+ }
41
+ export interface SolidViewOptions<V = unknown> {
42
+ /** `"entity"` publishes the rows the by-id write paths recorded. `"column"`
43
+ * republishes every enabled row of an archetype whose column changed, and
44
+ * costs the write path nothing. Default `"entity"`. */
45
+ grain?: SolidGrain;
46
+ /** Publish the current enabled members at creation. Default `true`. */
47
+ seedExisting?: boolean;
48
+ /** Value equality for each cell, handed to Solid as the signal's `equals`.
49
+ * An equal publish wakes nobody. Default is Solid's own `===`, so a
50
+ * projection that returns a fresh object every tick wakes its reader every
51
+ * tick unless it passes one. `fields` supplies its own. */
52
+ eq?: (a: V, b: V) => boolean;
53
+ }
54
+ /** One entity's fields, published into a Solid store with no key. */
55
+ export interface SolidSingletonView<V extends object> {
56
+ readonly value: Store<V>;
57
+ dispose(): void;
58
+ }
59
+ /** The `ecs.solid` facade. Each entry point returns a view and its disposer. */
60
+ export interface ECSSolid {
61
+ /** Project one component into one signal per entity. `project` runs once
62
+ * per published entity, and the reader it receives is a reused singleton:
63
+ * read what you need and return, never capture it. The projected value must
64
+ * not be a function, which a Solid setter reads as an updater. */
65
+ component<S extends ComponentSchema, V>(def: ComponentDef<S>, project: (row: RowReader<S>) => V, opts?: SolidViewOptions<V>): SolidComponentView<V>;
66
+ /** Sugar over {@link component}: publish a fixed field list as a
67
+ * `{ field: value }` record, with an `eq` that compares those fields. A
68
+ * fresh record per published entity, so prefer a scalar projection for a
69
+ * high-churn component. */
70
+ fields<S extends ComponentSchema, const F extends readonly (string & keyof S)[]>(def: ComponentDef<S>, fields: F, opts?: SolidViewOptions<{
71
+ [K in F[number]]: number;
72
+ }>): SolidComponentView<{
73
+ [K in F[number]]: number;
74
+ }>;
75
+ /** Publish one entity's fields into a keyless Solid store. A remove or a
76
+ * disable of that entity resets the fields to the values the store held at
77
+ * creation.
78
+ *
79
+ * A store, and not a signal per field: one entity carries a fixed key set,
80
+ * a publish writes only the fields that moved, and a reader tracks the
81
+ * field it reads. None of that sits on the per-entity path. */
82
+ singleton<S extends ComponentSchema, const F extends readonly (string & keyof S)[]>(def: ComponentDef<S>, eid: EntityID, fields: F, opts?: {
83
+ seedExisting?: boolean;
84
+ }): SolidSingletonView<{
85
+ [K in F[number]]: number;
86
+ }>;
87
+ }
88
+ /**
89
+ * The solid plugin, for `ECS.create({ plugins: [solid()] })`. It requires
90
+ * no other plugin, and observers are not involved.
91
+ *
92
+ * A world that installs it carries `ecs.solid`. A world that does not carries
93
+ * no member of that name, so `ecs.solid` is a compile error rather than a
94
+ * fault at run time. There is no reserved slot to name the missing import.
95
+ */
96
+ export declare function solid(): Plugin<SolidPlugin>;
97
+ //# sourceMappingURL=solid.d.ts.map
@@ -0,0 +1,97 @@
1
+ import { Accessor } from 'solid-js';
2
+ import { Store } from 'solid-js/store';
3
+ import { Plugin, ComponentDef, ComponentSchema, EntityID } from '../../core/ecs/index.js';
4
+ /**
5
+ * A read cursor over one entity's single-component state, handed to a
6
+ * projection. `field` reads a column under the `"column"` grain, and it reads
7
+ * by id through a cursor under the `"entity"` grain.
8
+ *
9
+ * The cursor is a reused mutable singleton, valid only during the synchronous
10
+ * `project` call for the current row. Read what you need and return. A captured
11
+ * reader reads the next row, because the next row mutates it in place.
12
+ */
13
+ export interface RowReader<S extends ComponentSchema> {
14
+ /** The entity of the row being projected. */
15
+ readonly eid: EntityID;
16
+ /** Read one field of the projected component, for the current row. */
17
+ field<K extends string & keyof S>(name: K): number;
18
+ }
19
+ /** Per-component grain of the set half of a view. */
20
+ export type SolidGrain = "entity" | "column";
21
+ /** The world surface this plugin adds. */
22
+ export interface SolidPlugin {
23
+ readonly solid: ECSSolid;
24
+ }
25
+ /** One component projected into one Solid signal per entity. */
26
+ export interface SolidComponentView<V> {
27
+ /** The row's live value, as one Solid signal. The first call for an id
28
+ * makes that signal, seeded with the value the view holds now, and every
29
+ * later call returns the same accessor. Bind it once for each row, in the
30
+ * row's own scope, and never inside a jsx expression that re-evaluates.
31
+ *
32
+ * `undefined` while the view does not hold the id. A cell outlives a
33
+ * delete, so the same accessor reports the row leaving and returning, and
34
+ * the view keeps every cell a caller ever asked for. */
35
+ cell(id: EntityID): Accessor<V | undefined>;
36
+ /** The live key set, for a keyed `<For each={view.keys()}>`. A new array
37
+ * only when membership changed. */
38
+ readonly keys: Accessor<readonly EntityID[]>;
39
+ dispose(): void;
40
+ }
41
+ export interface SolidViewOptions<V = unknown> {
42
+ /** `"entity"` publishes the rows the by-id write paths recorded. `"column"`
43
+ * republishes every enabled row of an archetype whose column changed, and
44
+ * costs the write path nothing. Default `"entity"`. */
45
+ grain?: SolidGrain;
46
+ /** Publish the current enabled members at creation. Default `true`. */
47
+ seedExisting?: boolean;
48
+ /** Value equality for each cell, handed to Solid as the signal's `equals`.
49
+ * An equal publish wakes nobody. Default is Solid's own `===`, so a
50
+ * projection that returns a fresh object every tick wakes its reader every
51
+ * tick unless it passes one. `fields` supplies its own. */
52
+ eq?: (a: V, b: V) => boolean;
53
+ }
54
+ /** One entity's fields, published into a Solid store with no key. */
55
+ export interface SolidSingletonView<V extends object> {
56
+ readonly value: Store<V>;
57
+ dispose(): void;
58
+ }
59
+ /** The `ecs.solid` facade. Each entry point returns a view and its disposer. */
60
+ export interface ECSSolid {
61
+ /** Project one component into one signal per entity. `project` runs once
62
+ * per published entity, and the reader it receives is a reused singleton:
63
+ * read what you need and return, never capture it. The projected value must
64
+ * not be a function, which a Solid setter reads as an updater. */
65
+ component<S extends ComponentSchema, V>(def: ComponentDef<S>, project: (row: RowReader<S>) => V, opts?: SolidViewOptions<V>): SolidComponentView<V>;
66
+ /** Sugar over {@link component}: publish a fixed field list as a
67
+ * `{ field: value }` record, with an `eq` that compares those fields. A
68
+ * fresh record per published entity, so prefer a scalar projection for a
69
+ * high-churn component. */
70
+ fields<S extends ComponentSchema, const F extends readonly (string & keyof S)[]>(def: ComponentDef<S>, fields: F, opts?: SolidViewOptions<{
71
+ [K in F[number]]: number;
72
+ }>): SolidComponentView<{
73
+ [K in F[number]]: number;
74
+ }>;
75
+ /** Publish one entity's fields into a keyless Solid store. A remove or a
76
+ * disable of that entity resets the fields to the values the store held at
77
+ * creation.
78
+ *
79
+ * A store, and not a signal per field: one entity carries a fixed key set,
80
+ * a publish writes only the fields that moved, and a reader tracks the
81
+ * field it reads. None of that sits on the per-entity path. */
82
+ singleton<S extends ComponentSchema, const F extends readonly (string & keyof S)[]>(def: ComponentDef<S>, eid: EntityID, fields: F, opts?: {
83
+ seedExisting?: boolean;
84
+ }): SolidSingletonView<{
85
+ [K in F[number]]: number;
86
+ }>;
87
+ }
88
+ /**
89
+ * The solid plugin, for `ECS.create({ plugins: [solid()] })`. It requires
90
+ * no other plugin, and observers are not involved.
91
+ *
92
+ * A world that installs it carries `ecs.solid`. A world that does not carries
93
+ * no member of that name, so `ecs.solid` is a compile error rather than a
94
+ * fault at run time. There is no reserved slot to name the missing import.
95
+ */
96
+ export declare function solid(): Plugin<SolidPlugin>;
97
+ //# sourceMappingURL=solid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../../../src/plugins/solid/solid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCK;AAEL,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAEX,MAAM,EAGN,YAAY,EACZ,eAAe,EACf,QAAQ,EAKR,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,eAAe;IACnD,6CAA6C;IAC7C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,sEAAsE;IACtE,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;CACnD;AAMD,qDAAqD;AACrD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7C,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CACzB;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACpC;;;;;;;4DAOwD;IACxD,IAAI,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5C;uCACmC;IACnC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IAC7C,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,OAAO;IAC5C;;2DAEuD;IACvD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;+DAG2D;IAC3D,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;CAC7B;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM;IACnD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,gFAAgF;AAChF,MAAM,WAAW,QAAQ;IACxB;;;sEAGkE;IAClE,SAAS,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,EACrC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EACjC,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACxB,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACzB;;;+BAG2B;IAC3B,MAAM,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,EAC9E,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,CAAC,EACT,IAAI,CAAC,EAAE,gBAAgB,CAAC;SAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM;KAAE,CAAC,GACnD,kBAAkB,CAAC;SAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM;KAAE,CAAC,CAAC;IACpD;;;;;;mEAM+D;IAC/D,SAAS,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,EACjF,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EACpB,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,CAAC,EACT,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,kBAAkB,CAAC;SAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM;KAAE,CAAC,CAAC;CACpD;AA6gBD;;;;;;;GAOG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC,CAQ3C"}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("solid-js"),p=require("solid-js/store"),b="solid";class w{eid=0;_cols;constructor(e){this._cols=e}field(e){return this._cols[e]}}class y{eid=0;row=0;_cols=new Map;_arch;_def;constructor(e){this._def=e}bind(e){this._arch=e,this._cols.clear()}field(e){let s=this._cols.get(e);return s===void 0&&(s=this._arch.getColumnRead(this._def,e),this._cols.set(e,s)),s[this.row]}}function f(c,e){const s=c?.id;if(typeof s!="number")throw new TypeError(`${e}: the definition is not a dense component, got ${String(c)}. Pass a dense component definition`);return s}class g{keys;pending=new Set;cid;wantsSet;_owner;_changes;_def;_project;_cursor;_entityReader;_columnReader;_setKeys;_values=new Map;_cellGet=new Map;_cellSet=new Map;_equals;_keysDirty=!1;_baseline;_disposed=!1;constructor(e,s,t,i,n,h,o){this._owner=e,this._changes=s.changes,this.cid=t,this._def=i,this._project=n,this.wantsSet=h==="entity",this._cursor=s.world.cursorRead(i),this._entityReader=new w(this._cursor),this._columnReader=h==="column"?new y(i):null,this._equals=o===void 0?void 0:(r,l)=>r===l||r!==void 0&&l!==void 0&&o(r,l),this._baseline=s.store.changeTick;const[d,_]=a.createSignal([]);this.keys=d,this._setKeys=_}cell(e){let s=this._cellGet.get(e);if(s===void 0){const t=this._values.get(e),[i,n]=this._equals===void 0?a.createSignal(t):a.createSignal(t,{equals:this._equals});s=i,this._cellGet.set(e,i),this._cellSet.set(e,n)}return s}seed(){const e=this._changes.collectEnabledWith(this.cid);for(let s=0;s<e.length;s++)this._publishOne(e[s]);this._flushKeys()}publish(e){if(this._columnReader!==null)this._changes.forEachChangedArchetype(this.cid,this._baseline,this._onArchetype),this._baseline=e;else{const s=this._changes.drainSet(this.cid,e),t=s.scanned;for(let n=0;n<t.length;n++)this._publishOne(t[n]);const i=s.listed;for(let n=0;n<i.length;n++){const h=i[n];this._isPublishable(h)&&this._publishOne(h)}}this.pending.size!==0&&(this.pending.forEach(this._resolvePending),this.pending.clear()),this._flushKeys()}dispose(){this._disposed||(this._disposed=!0,this._owner._remove(this))}_onArchetype=e=>{const s=this._columnReader;s.bind(e);const t=e.entityIds,i=e.entityCount;for(let n=0;n<i;n++){s.row=n;const h=t[n];s.eid=h,this._writeRow(h,this._project(s))}};_resolvePending=e=>{this._isPublishable(e)?this._publishOne(e):this._deleteOne(e)};_isPublishable(e){const s=this._changes;return s.isAlive(e)&&s.hasComponent(e,this._def)&&!s.isDisabled(e)}_publishOne(e){this._cursor.at(e),this._entityReader.eid=e,this._writeRow(e,this._project(this._entityReader))}_writeRow(e,s){const t=this._values.size;this._values.set(e,s),this._values.size!==t&&(this._keysDirty=!0);const i=this._cellSet.get(e);i!==void 0&&i(s)}_deleteOne(e){if(!this._values.delete(e))return;this._keysDirty=!0;const s=this._cellSet.get(e);s!==void 0&&s(void 0)}_flushKeys(){this._keysDirty&&(this._keysDirty=!1,this._setKeys(Array.from(this._values.keys())))}}class S{value;pending=new Set;cid;wantsSet=!0;_owner;_changes;_def;_eid;_fields;_defaults;_cursor;_cols;_write;_disposed=!1;constructor(e,s,t,i,n,h){this._owner=e,this._changes=s.changes,this.cid=t,this._def=i,this._eid=n,this._fields=h,this._cursor=s.world.cursorRead(i),this._cols=this._cursor;const o={};for(let l=0;l<h.length;l++)o[h[l]]=0;const[d,_]=p.createStore(o);this.value=d,this._write=_;const r=[];for(let l=0;l<h.length;l++)r.push(o[h[l]]);this._defaults=r}seed(){this._isPublishable()&&this._publish()}publish(e){const s=this._changes.drainSet(this.cid,e),t=s.scanned;let i=!1;for(let n=0;n<t.length;n++)t[n]===this._eid&&(i=!0);if(!i){const n=s.listed;for(let h=0;h<n.length;h++)n[h]===this._eid&&this._isPublishable()&&(i=!0)}i&&this._publish(),this.pending.size!==0&&(this.pending.has(this._eid)&&(this._isPublishable()?this._publish():this._reset()),this.pending.clear())}dispose(){this._disposed||(this._disposed=!0,this._owner._remove(this))}_isPublishable(){const e=this._changes,s=this._eid;return e.isAlive(s)&&e.hasComponent(s,this._def)&&!e.isDisabled(s)}_publish(){this._cursor.at(this._eid);const e=this._fields;for(let s=0;s<e.length;s++)this._write(e[s],this._cols[e[s]])}_reset(){const e=this._fields;for(let s=0;s<e.length;s++)this._write(e[s],this._defaults[s])}}class m{_host;_views=[];_byCid=new Map;constructor(e){this._host=e,e.changes.addStructuralHook(this._onStructural),e.onSettle(this._onSettle)}component(e,s,t={}){const i=f(e,"solid.component"),n=new g(this,this._host,i,e,s,t.grain??"entity",t.eq);return this._add(n),(t.seedExisting??!0)&&a.batch(()=>n.seed()),n}fields(e,s,t={}){const i=d=>{const _={};for(let r=0;r<s.length;r++)_[s[r]]=d.field(s[r]);return _},n=t.eq??((d,_)=>{const r=d,l=_;for(let u=0;u<s.length;u++)if(r[s[u]]!==l[s[u]])return!1;return!0}),h=f(e,"solid.fields"),o=new g(this,this._host,h,e,i,t.grain??"entity",n);return this._add(o),(t.seedExisting??!0)&&a.batch(()=>o.seed()),o}singleton(e,s,t,i={}){const n=f(e,"solid.singleton"),h=new S(this,this._host,n,e,s,t);return this._add(h),(i.seedExisting??!0)&&a.batch(()=>h.seed()),h}_remove(e){const s=this._views.indexOf(e);s>=0&&this._views.splice(s,1);const t=this._byCid.get(e.cid);if(t!==void 0){const i=t.indexOf(e);i>=0&&t.splice(i,1),t.length===0&&this._byCid.delete(e.cid)}this._reconfigure(e.cid)}_add(e){this._views.push(e);let s=this._byCid.get(e.cid);s===void 0&&(s=[],this._byCid.set(e.cid,s)),s.push(e),this._reconfigure(e.cid)}_reconfigure(e){const s=this._byCid.get(e);let t=!1,i=!1;if(s!==void 0)for(let h=0;h<s.length;h++)t=!0,s[h].wantsSet&&(i=!0);const n={add:t,remove:t,disable:t,enable:t,set:i};this._host.changes.configureObservation(b,e,n)}_onStructural=e=>{this._views.length!==0&&(this._record(e.addComp,e.addEid,e.addLen),this._record(e.remComp,e.remEid,e.remLen),this._record(e.disComp,e.disEid,e.disLen),this._record(e.enaComp,e.enaEid,e.enaLen))};_record(e,s,t){for(let i=0;i<t;i++){const n=this._byCid.get(e[i]);if(n===void 0)continue;const h=s[i];for(let o=0;o<n.length;o++)n[o].pending.add(h)}}_run=0;_publishAll=()=>{const e=this._views,s=this._run;for(let t=0;t<e.length;t++)e[t].publish(s)};_onSettle=e=>{this._views.length!==0&&(this._run=e,a.batch(this._publishAll))}}function v(){return{name:"solid",requires:[],install(c){return{solid:new m(c)}}}}exports.solid=v;
@@ -0,0 +1 @@
1
+ export * from "./solid/index.cjs";
@@ -0,0 +1 @@
1
+ export * from "./solid/index.js";
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("solid-js"),p=require("solid-js/store"),b="solid";class w{eid=0;_cols;constructor(e){this._cols=e}field(e){return this._cols[e]}}class y{eid=0;row=0;_cols=new Map;_arch;_def;constructor(e){this._def=e}bind(e){this._arch=e,this._cols.clear()}field(e){let s=this._cols.get(e);return s===void 0&&(s=this._arch.getColumnRead(this._def,e),this._cols.set(e,s)),s[this.row]}}function f(c,e){const s=c?.id;if(typeof s!="number")throw new TypeError(`${e}: the definition is not a dense component, got ${String(c)}. Pass a dense component definition`);return s}class g{keys;pending=new Set;cid;wantsSet;_owner;_changes;_def;_project;_cursor;_entityReader;_columnReader;_setKeys;_values=new Map;_cellGet=new Map;_cellSet=new Map;_equals;_keysDirty=!1;_baseline;_disposed=!1;constructor(e,s,t,i,n,h,o){this._owner=e,this._changes=s.changes,this.cid=t,this._def=i,this._project=n,this.wantsSet=h==="entity",this._cursor=s.world.cursorRead(i),this._entityReader=new w(this._cursor),this._columnReader=h==="column"?new y(i):null,this._equals=o===void 0?void 0:(r,l)=>r===l||r!==void 0&&l!==void 0&&o(r,l),this._baseline=s.store.changeTick;const[d,_]=a.createSignal([]);this.keys=d,this._setKeys=_}cell(e){let s=this._cellGet.get(e);if(s===void 0){const t=this._values.get(e),[i,n]=this._equals===void 0?a.createSignal(t):a.createSignal(t,{equals:this._equals});s=i,this._cellGet.set(e,i),this._cellSet.set(e,n)}return s}seed(){const e=this._changes.collectEnabledWith(this.cid);for(let s=0;s<e.length;s++)this._publishOne(e[s]);this._flushKeys()}publish(e){if(this._columnReader!==null)this._changes.forEachChangedArchetype(this.cid,this._baseline,this._onArchetype),this._baseline=e;else{const s=this._changes.drainSet(this.cid,e),t=s.scanned;for(let n=0;n<t.length;n++)this._publishOne(t[n]);const i=s.listed;for(let n=0;n<i.length;n++){const h=i[n];this._isPublishable(h)&&this._publishOne(h)}}this.pending.size!==0&&(this.pending.forEach(this._resolvePending),this.pending.clear()),this._flushKeys()}dispose(){this._disposed||(this._disposed=!0,this._owner._remove(this))}_onArchetype=e=>{const s=this._columnReader;s.bind(e);const t=e.entityIds,i=e.entityCount;for(let n=0;n<i;n++){s.row=n;const h=t[n];s.eid=h,this._writeRow(h,this._project(s))}};_resolvePending=e=>{this._isPublishable(e)?this._publishOne(e):this._deleteOne(e)};_isPublishable(e){const s=this._changes;return s.isAlive(e)&&s.hasComponent(e,this._def)&&!s.isDisabled(e)}_publishOne(e){this._cursor.at(e),this._entityReader.eid=e,this._writeRow(e,this._project(this._entityReader))}_writeRow(e,s){const t=this._values.size;this._values.set(e,s),this._values.size!==t&&(this._keysDirty=!0);const i=this._cellSet.get(e);i!==void 0&&i(s)}_deleteOne(e){if(!this._values.delete(e))return;this._keysDirty=!0;const s=this._cellSet.get(e);s!==void 0&&s(void 0)}_flushKeys(){this._keysDirty&&(this._keysDirty=!1,this._setKeys(Array.from(this._values.keys())))}}class S{value;pending=new Set;cid;wantsSet=!0;_owner;_changes;_def;_eid;_fields;_defaults;_cursor;_cols;_write;_disposed=!1;constructor(e,s,t,i,n,h){this._owner=e,this._changes=s.changes,this.cid=t,this._def=i,this._eid=n,this._fields=h,this._cursor=s.world.cursorRead(i),this._cols=this._cursor;const o={};for(let l=0;l<h.length;l++)o[h[l]]=0;const[d,_]=p.createStore(o);this.value=d,this._write=_;const r=[];for(let l=0;l<h.length;l++)r.push(o[h[l]]);this._defaults=r}seed(){this._isPublishable()&&this._publish()}publish(e){const s=this._changes.drainSet(this.cid,e),t=s.scanned;let i=!1;for(let n=0;n<t.length;n++)t[n]===this._eid&&(i=!0);if(!i){const n=s.listed;for(let h=0;h<n.length;h++)n[h]===this._eid&&this._isPublishable()&&(i=!0)}i&&this._publish(),this.pending.size!==0&&(this.pending.has(this._eid)&&(this._isPublishable()?this._publish():this._reset()),this.pending.clear())}dispose(){this._disposed||(this._disposed=!0,this._owner._remove(this))}_isPublishable(){const e=this._changes,s=this._eid;return e.isAlive(s)&&e.hasComponent(s,this._def)&&!e.isDisabled(s)}_publish(){this._cursor.at(this._eid);const e=this._fields;for(let s=0;s<e.length;s++)this._write(e[s],this._cols[e[s]])}_reset(){const e=this._fields;for(let s=0;s<e.length;s++)this._write(e[s],this._defaults[s])}}class m{_host;_views=[];_byCid=new Map;constructor(e){this._host=e,e.changes.addStructuralHook(this._onStructural),e.onSettle(this._onSettle)}component(e,s,t={}){const i=f(e,"solid.component"),n=new g(this,this._host,i,e,s,t.grain??"entity",t.eq);return this._add(n),(t.seedExisting??!0)&&a.batch(()=>n.seed()),n}fields(e,s,t={}){const i=d=>{const _={};for(let r=0;r<s.length;r++)_[s[r]]=d.field(s[r]);return _},n=t.eq??((d,_)=>{const r=d,l=_;for(let u=0;u<s.length;u++)if(r[s[u]]!==l[s[u]])return!1;return!0}),h=f(e,"solid.fields"),o=new g(this,this._host,h,e,i,t.grain??"entity",n);return this._add(o),(t.seedExisting??!0)&&a.batch(()=>o.seed()),o}singleton(e,s,t,i={}){const n=f(e,"solid.singleton"),h=new S(this,this._host,n,e,s,t);return this._add(h),(i.seedExisting??!0)&&a.batch(()=>h.seed()),h}_remove(e){const s=this._views.indexOf(e);s>=0&&this._views.splice(s,1);const t=this._byCid.get(e.cid);if(t!==void 0){const i=t.indexOf(e);i>=0&&t.splice(i,1),t.length===0&&this._byCid.delete(e.cid)}this._reconfigure(e.cid)}_add(e){this._views.push(e);let s=this._byCid.get(e.cid);s===void 0&&(s=[],this._byCid.set(e.cid,s)),s.push(e),this._reconfigure(e.cid)}_reconfigure(e){const s=this._byCid.get(e);let t=!1,i=!1;if(s!==void 0)for(let h=0;h<s.length;h++)t=!0,s[h].wantsSet&&(i=!0);const n={add:t,remove:t,disable:t,enable:t,set:i};this._host.changes.configureObservation(b,e,n)}_onStructural=e=>{this._views.length!==0&&(this._record(e.addComp,e.addEid,e.addLen),this._record(e.remComp,e.remEid,e.remLen),this._record(e.disComp,e.disEid,e.disLen),this._record(e.enaComp,e.enaEid,e.enaLen))};_record(e,s,t){for(let i=0;i<t;i++){const n=this._byCid.get(e[i]);if(n===void 0)continue;const h=s[i];for(let o=0;o<n.length;o++)n[o].pending.add(h)}}_run=0;_publishAll=()=>{const e=this._views,s=this._run;for(let t=0;t<e.length;t++)e[t].publish(s)};_onSettle=e=>{this._views.length!==0&&(this._run=e,a.batch(this._publishAll))}}function v(){return{name:"solid",requires:[],install(c){return{solid:new m(c)}}}}exports.solid=v;
@@ -0,0 +1,319 @@
1
+ import { batch as u, createSignal as f } from "solid-js";
2
+ import { createStore as b } from "solid-js/store";
3
+ const w = "solid";
4
+ class y {
5
+ eid = 0;
6
+ _cols;
7
+ constructor(e) {
8
+ this._cols = e;
9
+ }
10
+ field(e) {
11
+ return this._cols[e];
12
+ }
13
+ }
14
+ class m {
15
+ eid = 0;
16
+ row = 0;
17
+ _cols = /* @__PURE__ */ new Map();
18
+ _arch;
19
+ _def;
20
+ constructor(e) {
21
+ this._def = e;
22
+ }
23
+ bind(e) {
24
+ this._arch = e, this._cols.clear();
25
+ }
26
+ field(e) {
27
+ let s = this._cols.get(e);
28
+ return s === void 0 && (s = this._arch.getColumnRead(this._def, e), this._cols.set(e, s)), s[this.row];
29
+ }
30
+ }
31
+ function g(_, e) {
32
+ const s = _?.id;
33
+ if (typeof s != "number")
34
+ throw new TypeError(
35
+ `${e}: the definition is not a dense component, got ${String(_)}. Pass a dense component definition`
36
+ );
37
+ return s;
38
+ }
39
+ class p {
40
+ keys;
41
+ pending = /* @__PURE__ */ new Set();
42
+ cid;
43
+ wantsSet;
44
+ _owner;
45
+ _changes;
46
+ _def;
47
+ _project;
48
+ _cursor;
49
+ _entityReader;
50
+ _columnReader;
51
+ _setKeys;
52
+ /** What the view holds now, and the seed of a cell made later. The key set
53
+ * is derived from it, so a publish or a delete that changes its size marks
54
+ * the key signal dirty. */
55
+ _values = /* @__PURE__ */ new Map();
56
+ /** The cells a caller asked for. Two maps rather than one of pairs, so the
57
+ * publish takes one lookup and the accessor lookup stays off that path. */
58
+ _cellGet = /* @__PURE__ */ new Map();
59
+ _cellSet = /* @__PURE__ */ new Map();
60
+ _equals;
61
+ _keysDirty = !1;
62
+ _baseline;
63
+ _disposed = !1;
64
+ constructor(e, s, t, i, n, h, o) {
65
+ this._owner = e, this._changes = s.changes, this.cid = t, this._def = i, this._project = n, this.wantsSet = h === "entity", this._cursor = s.world.cursorRead(i), this._entityReader = new y(this._cursor), this._columnReader = h === "column" ? new m(i) : null, this._equals = o === void 0 ? void 0 : (r, l) => r === l || r !== void 0 && l !== void 0 && o(r, l), this._baseline = s.store.changeTick;
66
+ const [d, c] = f([]);
67
+ this.keys = d, this._setKeys = c;
68
+ }
69
+ cell(e) {
70
+ let s = this._cellGet.get(e);
71
+ if (s === void 0) {
72
+ const t = this._values.get(e), [i, n] = this._equals === void 0 ? f(t) : f(t, { equals: this._equals });
73
+ s = i, this._cellGet.set(e, i), this._cellSet.set(e, n);
74
+ }
75
+ return s;
76
+ }
77
+ /** Publish every current enabled member. Cold path, and the caller wraps it
78
+ * in a `batch`. */
79
+ seed() {
80
+ const e = this._changes.collectEnabledWith(this.cid);
81
+ for (let s = 0; s < e.length; s++) this._publishOne(e[s]);
82
+ this._flushKeys();
83
+ }
84
+ publish(e) {
85
+ if (this._columnReader !== null)
86
+ this._changes.forEachChangedArchetype(this.cid, this._baseline, this._onArchetype), this._baseline = e;
87
+ else {
88
+ const s = this._changes.drainSet(this.cid, e), t = s.scanned;
89
+ for (let n = 0; n < t.length; n++) this._publishOne(t[n]);
90
+ const i = s.listed;
91
+ for (let n = 0; n < i.length; n++) {
92
+ const h = i[n];
93
+ this._isPublishable(h) && this._publishOne(h);
94
+ }
95
+ }
96
+ this.pending.size !== 0 && (this.pending.forEach(this._resolvePending), this.pending.clear()), this._flushKeys();
97
+ }
98
+ dispose() {
99
+ this._disposed || (this._disposed = !0, this._owner._remove(this));
100
+ }
101
+ /** One archetype of the column grain. Bound once, so the sweep allocates no
102
+ * closure per tick. */
103
+ _onArchetype = (e) => {
104
+ const s = this._columnReader;
105
+ s.bind(e);
106
+ const t = e.entityIds, i = e.entityCount;
107
+ for (let n = 0; n < i; n++) {
108
+ s.row = n;
109
+ const h = t[n];
110
+ s.eid = h, this._writeRow(h, this._project(s));
111
+ }
112
+ };
113
+ /** One entity the structural hook recorded. Bound once, for the same
114
+ * reason as `_onArchetype`. */
115
+ _resolvePending = (e) => {
116
+ this._isPublishable(e) ? this._publishOne(e) : this._deleteOne(e);
117
+ };
118
+ _isPublishable(e) {
119
+ const s = this._changes;
120
+ return s.isAlive(e) && s.hasComponent(e, this._def) && !s.isDisabled(e);
121
+ }
122
+ _publishOne(e) {
123
+ this._cursor.at(e), this._entityReader.eid = e, this._writeRow(e, this._project(this._entityReader));
124
+ }
125
+ _writeRow(e, s) {
126
+ const t = this._values.size;
127
+ this._values.set(e, s), this._values.size !== t && (this._keysDirty = !0);
128
+ const i = this._cellSet.get(e);
129
+ i !== void 0 && i(s);
130
+ }
131
+ /** Drop the row. A row the view never held writes nothing, so a spawn and a
132
+ * despawn inside one tick leave Solid untouched. */
133
+ _deleteOne(e) {
134
+ if (!this._values.delete(e)) return;
135
+ this._keysDirty = !0;
136
+ const s = this._cellSet.get(e);
137
+ s !== void 0 && s(void 0);
138
+ }
139
+ _flushKeys() {
140
+ this._keysDirty && (this._keysDirty = !1, this._setKeys(Array.from(this._values.keys())));
141
+ }
142
+ }
143
+ class v {
144
+ value;
145
+ pending = /* @__PURE__ */ new Set();
146
+ cid;
147
+ wantsSet = !0;
148
+ _owner;
149
+ _changes;
150
+ _def;
151
+ _eid;
152
+ _fields;
153
+ /** The values the store held at creation, the reset target of a remove and
154
+ * of a disable. A Solid store has no row to delete here, so the channel
155
+ * states its empty value instead of a blind zero. */
156
+ _defaults;
157
+ _cursor;
158
+ _cols;
159
+ _write;
160
+ _disposed = !1;
161
+ constructor(e, s, t, i, n, h) {
162
+ this._owner = e, this._changes = s.changes, this.cid = t, this._def = i, this._eid = n, this._fields = h, this._cursor = s.world.cursorRead(i), this._cols = this._cursor;
163
+ const o = {};
164
+ for (let l = 0; l < h.length; l++) o[h[l]] = 0;
165
+ const [d, c] = b(o);
166
+ this.value = d, this._write = c;
167
+ const r = [];
168
+ for (let l = 0; l < h.length; l++) r.push(o[h[l]]);
169
+ this._defaults = r;
170
+ }
171
+ /** Publish the target's current fields, when it is there to read. Cold
172
+ * path, and the caller wraps it in a `batch`. */
173
+ seed() {
174
+ this._isPublishable() && this._publish();
175
+ }
176
+ publish(e) {
177
+ const s = this._changes.drainSet(this.cid, e), t = s.scanned;
178
+ let i = !1;
179
+ for (let n = 0; n < t.length; n++) t[n] === this._eid && (i = !0);
180
+ if (!i) {
181
+ const n = s.listed;
182
+ for (let h = 0; h < n.length; h++)
183
+ n[h] === this._eid && this._isPublishable() && (i = !0);
184
+ }
185
+ i && this._publish(), this.pending.size !== 0 && (this.pending.has(this._eid) && (this._isPublishable() ? this._publish() : this._reset()), this.pending.clear());
186
+ }
187
+ dispose() {
188
+ this._disposed || (this._disposed = !0, this._owner._remove(this));
189
+ }
190
+ _isPublishable() {
191
+ const e = this._changes, s = this._eid;
192
+ return e.isAlive(s) && e.hasComponent(s, this._def) && !e.isDisabled(s);
193
+ }
194
+ _publish() {
195
+ this._cursor.at(this._eid);
196
+ const e = this._fields;
197
+ for (let s = 0; s < e.length; s++) this._write(e[s], this._cols[e[s]]);
198
+ }
199
+ _reset() {
200
+ const e = this._fields;
201
+ for (let s = 0; s < e.length; s++) this._write(e[s], this._defaults[s]);
202
+ }
203
+ }
204
+ class S {
205
+ _host;
206
+ _views = [];
207
+ _byCid = /* @__PURE__ */ new Map();
208
+ constructor(e) {
209
+ this._host = e, e.changes.addStructuralHook(this._onStructural), e.onSettle(this._onSettle);
210
+ }
211
+ component(e, s, t = {}) {
212
+ const i = g(e, "solid.component"), n = new p(
213
+ this,
214
+ this._host,
215
+ i,
216
+ e,
217
+ s,
218
+ t.grain ?? "entity",
219
+ t.eq
220
+ );
221
+ return this._add(n), (t.seedExisting ?? !0) && u(() => n.seed()), n;
222
+ }
223
+ fields(e, s, t = {}) {
224
+ const i = (d) => {
225
+ const c = {};
226
+ for (let r = 0; r < s.length; r++) c[s[r]] = d.field(s[r]);
227
+ return c;
228
+ }, n = t.eq ?? ((d, c) => {
229
+ const r = d, l = c;
230
+ for (let a = 0; a < s.length; a++) if (r[s[a]] !== l[s[a]]) return !1;
231
+ return !0;
232
+ }), h = g(e, "solid.fields"), o = new p(
233
+ this,
234
+ this._host,
235
+ h,
236
+ e,
237
+ i,
238
+ t.grain ?? "entity",
239
+ n
240
+ );
241
+ return this._add(o), (t.seedExisting ?? !0) && u(() => o.seed()), o;
242
+ }
243
+ singleton(e, s, t, i = {}) {
244
+ const n = g(e, "solid.singleton"), h = new v(this, this._host, n, e, s, t);
245
+ return this._add(h), (i.seedExisting ?? !0) && u(() => h.seed()), h;
246
+ }
247
+ /** Drop a view and recompute its component's ask. Idempotent through the
248
+ * view's own disposed flag. */
249
+ _remove(e) {
250
+ const s = this._views.indexOf(e);
251
+ s >= 0 && this._views.splice(s, 1);
252
+ const t = this._byCid.get(e.cid);
253
+ if (t !== void 0) {
254
+ const i = t.indexOf(e);
255
+ i >= 0 && t.splice(i, 1), t.length === 0 && this._byCid.delete(e.cid);
256
+ }
257
+ this._reconfigure(e.cid);
258
+ }
259
+ _add(e) {
260
+ this._views.push(e);
261
+ let s = this._byCid.get(e.cid);
262
+ s === void 0 && (s = [], this._byCid.set(e.cid, s)), s.push(e), this._reconfigure(e.cid);
263
+ }
264
+ /** The OR of every live view's ask for `cid`. All-false on the last
265
+ * dispose, which is the same as never asking. Cold path. */
266
+ _reconfigure(e) {
267
+ const s = this._byCid.get(e);
268
+ let t = !1, i = !1;
269
+ if (s !== void 0)
270
+ for (let h = 0; h < s.length; h++)
271
+ t = !0, s[h].wantsSet && (i = !0);
272
+ const n = {
273
+ add: t,
274
+ remove: t,
275
+ disable: t,
276
+ enable: t,
277
+ set: i
278
+ };
279
+ this._host.changes.configureObservation(w, e, n);
280
+ }
281
+ /** Record the round's structural events, and write nothing. A view resolves
282
+ * them at settle, so an entity that arrives and leaves inside one tick
283
+ * never reaches Solid. */
284
+ _onStructural = (e) => {
285
+ this._views.length !== 0 && (this._record(e.addComp, e.addEid, e.addLen), this._record(e.remComp, e.remEid, e.remLen), this._record(e.disComp, e.disEid, e.disLen), this._record(e.enaComp, e.enaEid, e.enaLen));
286
+ };
287
+ _record(e, s, t) {
288
+ for (let i = 0; i < t; i++) {
289
+ const n = this._byCid.get(e[i]);
290
+ if (n === void 0) continue;
291
+ const h = s[i];
292
+ for (let o = 0; o < n.length; o++) n[o].pending.add(h);
293
+ }
294
+ }
295
+ /** The run tick of the settle in progress. It reaches `_publishAll` through
296
+ * a field so the batched body can be bound once. */
297
+ _run = 0;
298
+ _publishAll = () => {
299
+ const e = this._views, s = this._run;
300
+ for (let t = 0; t < e.length; t++) e[t].publish(s);
301
+ };
302
+ /** One Solid flush for the whole plugin, whatever the number of views.
303
+ * A world with no view calls `batch` never. */
304
+ _onSettle = (e) => {
305
+ this._views.length !== 0 && (this._run = e, u(this._publishAll));
306
+ };
307
+ }
308
+ function k() {
309
+ return {
310
+ name: "solid",
311
+ requires: [],
312
+ install(_) {
313
+ return { solid: new S(_) };
314
+ }
315
+ };
316
+ }
317
+ export {
318
+ k as solid
319
+ };