@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,126 @@
1
+ import { ComponentDef, ComponentID } from './component.js';
2
+ import { SparseComponentID } from './sparse_store.js';
3
+ import { RelationDef } from './relation.js';
4
+ import { BitSet } from '../../type_primitives/index.js';
5
+ /** The non-dense query terms, carried as one frozen record.
6
+ *
7
+ * Every term here leaves the dense component mask alone, so a query that
8
+ * carries one still shares its parent's live archetype list. They travel
9
+ * together through each derive (`and`, `not`, `or`) and through each
10
+ * driver seam below, so one parameter replaces the run of positional lists
11
+ * those signatures used to repeat.
12
+ *
13
+ * A query that carries none of them holds `NO_TERMS`. That is why
14
+ * `_carryNondense` decides with one reference comparison, where it used to
15
+ * test each term in turn. The old shape spread one term across a constructor
16
+ * parameter, a carry test and a `new Query` argument, and a term added to two
17
+ * of the three went unnoticed. Add a term by adding a field here and a line to
18
+ * `deriveTerms`.
19
+ *
20
+ * Cold path. Read once per `forEach` call, never per row. */
21
+ /** An archetype-level term a plugin contributes.
22
+ *
23
+ * The engine already answers three archetype questions with a bit mask: hold
24
+ * these, hold none of these, hold one of these. A term answers a fourth in
25
+ * whatever way the plugin wants, over the same input. `or(and(A, B), C)` is
26
+ * one, and so is any predicate over the component mask.
27
+ *
28
+ * Where it runs. Once per archetype, per query, at the rebuild the store's
29
+ * dirty epoch triggers. Never per row, and never per drive. A query that
30
+ * carries no term reaches a rebuild body byte-identical to today's.
31
+ *
32
+ * What the caller guarantees. `matches` is pure and stable: one archetype
33
+ * gives one answer for the life of the world. The archetype list is rebuilt
34
+ * from scratch on each epoch, so an unstable term does not corrupt the list,
35
+ * but it does make the matched set depend on when the epoch last advanced,
36
+ * which nothing else in the query engine does.
37
+ *
38
+ * Cold path. Build the term once and hold it. */
39
+ export interface ArchetypeTerm {
40
+ /** Names the term in a dev refusal. Diagnostics only, never a cache key. */
41
+ readonly name: string;
42
+ /** True when an archetype whose component mask is `mask` belongs. */
43
+ matches(mask: BitSet): boolean;
44
+ }
45
+ /** One operand of `and`, `or` or `not`. A component definition is a leaf, and
46
+ * holding it is the whole question. Any `ArchetypeTerm` is a node, which is
47
+ * how one combinator nests inside another. */
48
+ export type ArchetypeExpr = ComponentDef<any> | ArchetypeTerm;
49
+ /** Every operand holds. `and()` over nothing matches every archetype, the
50
+ * identity of the conjunction, so a fold over an empty list narrows nothing.
51
+ *
52
+ * Pair it with `where`: `q.where(and(Pos, Vel))`. Prefer `q.and(Pos, Vel)`
53
+ * when the operands are a flat list of definitions, because a dense term sets
54
+ * a mask bit and picks the archetypes, where an expression tests each one.
55
+ *
56
+ * Cold path. Build the expression once and hold it, because `where` caches on
57
+ * the term's identity. */
58
+ export declare function and(...terms: ArchetypeExpr[]): ArchetypeTerm;
59
+ /** One operand holds, or more. `or()` over nothing matches no archetype, the
60
+ * identity of the disjunction. Cold path, same caching rule as `and`. */
61
+ export declare function or(...terms: ArchetypeExpr[]): ArchetypeTerm;
62
+ /** No operand holds. Several operands read as one negated disjunction, which
63
+ * is the same set as the conjunction of each negation, so `not(A, B)` matches
64
+ * exactly what `Query.not(A, B)` matches. `not()` over nothing matches every
65
+ * archetype. Cold path, same caching rule as `and`. */
66
+ export declare function not(...terms: ArchetypeExpr[]): ArchetypeTerm;
67
+ export interface QueryTerms {
68
+ /** Sparse membership a matched entity must hold. Also carries the backing
69
+ * sparse id of each `(R, *)` relation term, which is how the wildcard
70
+ * reuses the sparse-match driver unchanged. */
71
+ readonly sparseIncludes: readonly SparseComponentID[];
72
+ /** Sparse membership a matched entity must not hold. */
73
+ readonly sparseExcludes: readonly SparseComponentID[];
74
+ /** Fetch-if-present terms. Does not narrow the matched set. Authorizes
75
+ * `getOptionalColumnRead` under `DEV`. */
76
+ readonly optionalTerms: readonly ComponentID[];
77
+ /** Include disabled rows. Widens the iteration bound from the enabled
78
+ * count to the total count. */
79
+ readonly includesDisabled: boolean;
80
+ /** `(R, *)` terms, recorded for the `DEV` `relationReads` access check
81
+ * alone. The driver reads the backing sparse id off `sparseIncludes`. */
82
+ readonly relationIncludes: readonly RelationDef[];
83
+ readonly relationExcludes: readonly RelationDef[];
84
+ /** Depth-ordering term. Reorders the matched entities, parents first. */
85
+ readonly hierarchyTerm: HierarchyTerm | null;
86
+ /** Archetype-level terms a plugin contributed. Narrows the matched set
87
+ * without touching the dense mask, so the derived query still shares the
88
+ * parent's live archetype list and the narrowing happens at the rebuild.
89
+ * Empty for every query the core builds. */
90
+ readonly archetypeTerms: readonly ArchetypeTerm[];
91
+ }
92
+ /** The terms of a query that declares none. Shared by every dense-only query,
93
+ * so the common path allocates nothing and `_carryNondense` compares one
94
+ * reference. Frozen: a mutation here would reach every such query. */
95
+ export declare const NO_TERMS: QueryTerms;
96
+ /** Build the terms for a derived query.
97
+ *
98
+ * The result never equals `NO_TERMS`, and `_carryNondense` depends on that.
99
+ * Every caller adds a term and none removes one, so a derive always widens the
100
+ * record. The zero-argument forms (`optional()`, `andSparse()`) return the
101
+ * receiver before they reach here, which is what keeps the rule true. A future
102
+ * term that can be removed breaks it, and must collapse an emptied record back
103
+ * to `NO_TERMS` here.
104
+ *
105
+ * Cold path: one call per cache miss on a derive, never per row. */
106
+ export declare function deriveTerms(base: QueryTerms, patch: Partial<QueryTerms>): QueryTerms;
107
+ /** No depth limit on a `.hierarchy(R)` term, yield every matched entity
108
+ * regardless of its depth in the tree. The default `maxDepth`. */
109
+ export declare const HIERARCHY_UNBOUNDED: number;
110
+ /** A `.hierarchy(R)` depth-ordering term. Records the exclusive relation
111
+ * whose tree defines the order and the (optional) max depth to yield. Stored on
112
+ * the Query and consumed by the `forEachEntity` hierarchy match path. Absent
113
+ * (`null`) for the common case. */
114
+ export interface HierarchyTerm {
115
+ /** The exclusive relation whose chain and tree defines the depth ordering. */
116
+ readonly relation: RelationDef;
117
+ /** Inclusive max depth to yield, where a root is 0. The walk skips an entity
118
+ * deeper than this. `HIERARCHY_UNBOUNDED` for no limit (bitECS `Hierarchy()`
119
+ * depth arg). */
120
+ readonly maxDepth: number;
121
+ }
122
+ export declare function termCacheKey(queryId: number, sparseId: number): number;
123
+ export declare function appendSparse(terms: readonly SparseComponentID[], id: number): readonly SparseComponentID[];
124
+ export declare function appendOptional(terms: readonly ComponentID[], id: number): readonly ComponentID[];
125
+ export declare function appendRelation(terms: readonly RelationDef[], def: RelationDef): readonly RelationDef[];
126
+ //# sourceMappingURL=query_terms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query_terms.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/query_terms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;KAcK;AAEL,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAmBpD;;;;;;;;;;;;;;;6DAe6D;AAC7D;;;;;;;;;;;;;;;;;iDAiBiD;AACjD,MAAM,WAAW,aAAa;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAQD;;8CAE8C;AAC9C,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;AAoB9D;;;;;;;;0BAQ0B;AAC1B,wBAAgB,GAAG,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAY5D;AAED;yEACyE;AACzE,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAY3D;AAED;;;uDAGuD;AACvD,wBAAgB,GAAG,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAY5D;AAED,MAAM,WAAW,UAAU;IAC1B;;mDAE+C;IAC/C,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtD,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtD;8CAC0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/C;mCAC+B;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC;6EACyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAC;IAClD,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7C;;;gDAG4C;IAC5C,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;CAClD;AAED;;sEAEsE;AACtE,eAAO,MAAM,QAAQ,EAAE,UASrB,CAAC;AAEH;;;;;;;;;oEASoE;AACpE,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAWpF;AAED;kEACkE;AAClE,eAAO,MAAM,mBAAmB,QAA2B,CAAC;AAE5D;;;mCAGmC;AACnC,MAAM,WAAW,aAAa;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B;;qBAEiB;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAaD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQtE;AAMD,wBAAgB,YAAY,CAC3B,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,EAAE,EAAE,MAAM,GACR,SAAS,iBAAiB,EAAE,CAK9B;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAKhG;AAID,wBAAgB,cAAc,CAC7B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,GAAG,EAAE,WAAW,GACd,SAAS,WAAW,EAAE,CAKxB"}
@@ -1,50 +1,29 @@
1
1
  import { ComponentSchema } from './component.cjs';
2
- import { ArchetypeColumnLayout } from './archetype.cjs';
3
- import { AnyTypedArray, ColumnBacking } from '../../type_primitives/index.cjs';
4
- /** Maps component schema to scalar get/set properties: { x: number, y: number }. */
2
+ import { AnyTypedArray, TypedArrayTag } from '../../type_primitives/index.cjs';
3
+ /** Maps component schema to scalar get and set properties: { x: number, y: number }. */
5
4
  export type ComponentRef<S extends ComponentSchema> = {
6
5
  -readonly [K in keyof S]: number;
7
6
  };
8
7
  /**
9
8
  * Read-only view of a component reference. This is an **advisory** barrier,
10
9
  * not a runtime safety boundary: the `readonly` properties block field writes
11
- * at the type layer, but `createRef` installs working get/set on the shared
12
- * prototype for both `ref()` and `refRead()`, so a deliberate cast can
13
- * still write through (and would skip the change-tick bump `ref()` performs).
14
- * Treat it as "I promise I am only reading," enforced by the escape-hatch lint
15
- * (`bun run lint:escape-hatches`), not by the runtime.
10
+ * at the type layer, but the shared prototype installs working get and set for
11
+ * both `ref()` and `refRead()`, so a deliberate cast can still write through
12
+ * (and would skip the change-tick bump `ref()` performs). Treat it as "I
13
+ * promise I am only reading". The typechecker holds the promise. Nothing else
14
+ * does: no lint and no runtime check enforces it.
16
15
  */
17
16
  export type ReadonlyComponentRef<S extends ComponentSchema> = {
18
17
  readonly [K in keyof S]: number;
19
18
  };
20
- /** Minimal column group shape needed by createRef. */
21
- export interface RefColumnGroup {
22
- readonly layout: ArchetypeColumnLayout;
23
- readonly columns: ColumnBacking<AnyTypedArray>[];
24
- }
25
- /**
26
- * Create a ComponentRef bound to a specific row in a column group.
27
- * The prototype is built once per column group and cached; subsequent
28
- * calls for the same group only allocate the lightweight ref object.
29
- */
30
- export declare function createRef<S extends ComponentSchema>(group: RefColumnGroup, row: number): ComponentRef<S>;
31
- interface CursorInternal {
32
- /** The current archetype's row plane (`Archetype._bufs`), index-parallel with
33
- * its `_flatColumns`. Re-read on every `at()`; safe to hold between `at()` and
34
- * a field access because `_syncRowPlane` refills it in place. */
35
- _bufs: AnyTypedArray[];
36
- /** Where this component's columns start in `_bufs` for the current archetype. */
37
- _off: number;
38
- _row: number;
39
- }
40
- /** Mutable single-entity cursor: field get/set plus `at(entity)`. */
19
+ /** Mutable single-entity cursor: field get and set plus `at(entity)`. */
41
20
  export type ComponentCursor<S extends ComponentSchema> = {
42
21
  -readonly [K in keyof S]: number;
43
22
  } & CursorSeek;
44
23
  /**
45
24
  * Read-only cursor. **Advisory**, exactly like `ReadonlyComponentRef`: the
46
25
  * prototype carries working setters for both variants, so a deliberate cast
47
- * can still write through and would skip the change-tick bump the mutable
26
+ * can still write through, and would skip the change-tick bump the mutable
48
27
  * variant performs.
49
28
  */
50
29
  export type ReadonlyComponentCursor<S extends ComponentSchema> = {
@@ -57,27 +36,109 @@ export interface CursorSeek {
57
36
  *
58
37
  * Returns the cursor, so a single-expression read stays one expression:
59
38
  * `ecs.cursor(Pos).at(e).x`. In a loop, prefer calling it as a statement and
60
- * reading fields off the cursor that is the form the allocation-free path
39
+ * reading fields off the cursor, that is the form the allocation-free path
61
40
  * exists for.
62
41
  */
63
42
  at(entity: import('./entity.cjs').EntityID): this;
64
43
  }
44
+ /**
45
+ * The columns an accessor reads: one component's columns in one archetype,
46
+ * indexed by the global id of each field's name (`internFieldName`), with holes at
47
+ * the ids of names the component does not have. The archetype owns one such
48
+ * array for each component it holds (`Archetype._accCols`) and refills it in
49
+ * place whenever a buffer moves (grow, refresh), so a held array stays current.
50
+ */
51
+ export type AccessorColumns = AnyTypedArray[];
52
+ /** The own state of an accessor: two reserved names that registration
53
+ * refuses as field names (`RESERVED_FIELD_NAMES`). Every accessor writes these
54
+ * two in the same order, and thus has the same shape. Write them as literals
55
+ * at a hot site. See the note at the top of the file. */
56
+ export interface Accessor {
57
+ __cols: AccessorColumns;
58
+ __row: number;
59
+ }
60
+ /** Field names a component cannot have, because an accessor owns them. `at`
61
+ * is not here: it is the cursor's own method, and only a cursor over the
62
+ * component rejects it, so a component with such a field keeps every other
63
+ * path. */
64
+ export declare const RESERVED_FIELD_NAMES: readonly string[];
65
65
  /**
66
66
  * `at()` needs the archetype and row for an entity, and only the Store can
67
67
  * resolve those. Passing the whole Store into the cursor would hand it (and its
68
- * users) the mutation surface; this is the one operation it actually needs,
68
+ * users) the mutation surface. This is the one operation it actually needs,
69
69
  * supplied as a closure by whoever creates the cursor.
70
70
  *
71
- * The binder also carries the mutable/read-only difference: `Store.cursorBinder`
71
+ * The binder also carries the mutable and read-only difference: `Store.cursorBinder`
72
72
  * closes over whether to stamp the change tick, so the variant is settled once
73
73
  * at creation instead of branched on per `at()`.
74
74
  */
75
- export type CursorBinder = (cursor: CursorInternal, entity: unknown) => void;
75
+ export type CursorBinder = (cursor: Accessor, entity: unknown) => void;
76
+ /** The DEV-only check a sparse cursor runs on `at()`: access, liveness and
77
+ * membership (`Store.sparseCursorCheck`). Production code never calls it, so
78
+ * the sparse `at` is one mask and one field write. */
79
+ export type SparseCursorCheck = (entity: unknown) => void;
80
+ /**
81
+ * The global id of field name `name`. The first call for a name assigns the
82
+ * id and installs the name's accessor on the shared prototype, with the
83
+ * literal that `kind` selects. A later call with a different `kind` replaces
84
+ * that accessor with the mixed one, one time. Every other call returns the id
85
+ * and changes nothing.
86
+ */
87
+ export declare function internFieldName(name: string, kind: TypedArrayTag): number;
88
+ /** The global name id of each field of a component, in schema order. Made one
89
+ * time at component registration. The archetype places the component's columns
90
+ * at these ids in its accessor column arrays. */
91
+ export declare function fieldGids(fieldNames: readonly string[], fieldTypes: readonly TypedArrayTag[]): Int32Array;
92
+ /** The column at every id of a name the component does not have. An
93
+ * `AccessorColumns` array is packed with it (no holes), so a column load in an
94
+ * accessor never has to test for a hole. It is empty, so a read through it
95
+ * gives `undefined` and a write is dropped: the same silence a wrong field
96
+ * read had before, and DEV names the mistake through `checkedCol`. */
97
+ export declare const NO_COLUMN: AnyTypedArray;
76
98
  /**
77
- * Build a cursor over `fieldNames`, bound by `bind`. The prototype (field
78
- * accessors by ordinal, plus `at`) is built once per component and cached; each
79
- * call allocates one small object, and then nothing per entity.
99
+ * Create a ref bound to `row` of `cols`: one `Object.create` on the shared
100
+ * prototype and two field writes. Nothing else is allocated for each ref.
101
+ */
102
+ export declare function createRef<S extends ComponentSchema>(cols: AccessorColumns, row: number): ComponentRef<S>;
103
+ /**
104
+ * Build a cursor over a component whose fields are `fieldNames`, bound by
105
+ * `bind`. One small object, and then nothing per entity. `at` is an own data
106
+ * property defined directly, and not assigned, so that an accessor named `at`
107
+ * on the shared prototype (a field of some other component) cannot intercept
108
+ * the write. `cols` is the column array the cursor starts on: a dense cursor
109
+ * starts on `EMPTY_COLS` and its binder writes the archetype's array on each
110
+ * `at()`. A sparse cursor starts on its store's array, which never changes
111
+ * identity, so its binder writes the row alone.
112
+ */
113
+ export declare function createCursor<S extends ComponentSchema>(fieldNames: readonly string[], bind: CursorBinder, cols?: AccessorColumns): ComponentCursor<S>;
114
+ /** What a mutable sparse cursor stamps on each `at()`: the sparse store's
115
+ * row ticks, `null` until the component tracks them, and its component-level
116
+ * change tick. The store object itself, seen through this shape. */
117
+ export interface SparseTickPlane {
118
+ ticks: Uint32Array | null;
119
+ changedTick: number;
120
+ }
121
+ /** Where the stamp's value comes from: the store's change tick. */
122
+ export interface ChangeClock {
123
+ readonly changeTick: number;
124
+ }
125
+ /**
126
+ * Build a cursor over a sparse component. The columns are id-indexed, so
127
+ * `at()` is one mask and one field write, and the column array is the store's
128
+ * own, given at creation and never replaced (the store refills it in place).
129
+ *
130
+ * This is a separate function with its own `at` literal, and not
131
+ * `createCursor` with a different binder, on purpose. A dense cursor's `at`
132
+ * calls its binder through one call site, and that site inlines the binder as
133
+ * long as it sees one function. A sparse binder is a different function, so a
134
+ * world with both kinds of cursor would make that site megamorphic and cost
135
+ * both kinds a call on every `at()`. Separate literals keep separate sites,
136
+ * one for each kind. Measured.
137
+ *
138
+ * A mutable cursor (`plane` given) also records the entity for the row grain
139
+ * of change detection, on each `at()`, as the dense cursor does: one load and
140
+ * one branch while the component keeps no row ticks, two stores once it does.
141
+ * The read-only cursor keeps the bare literal.
80
142
  */
81
- export declare function createCursor<S extends ComponentSchema>(fieldNames: readonly string[], bind: CursorBinder): ComponentCursor<S>;
82
- export {};
143
+ export declare function createSparseCursor<S extends ComponentSchema>(fieldNames: readonly string[], cols: AccessorColumns, check: SparseCursorCheck, plane?: SparseTickPlane | null, clock?: ChangeClock | null): ComponentCursor<S>;
83
144
  //# sourceMappingURL=ref.d.ts.map
@@ -1,50 +1,29 @@
1
1
  import { ComponentSchema } from './component.js';
2
- import { ArchetypeColumnLayout } from './archetype.js';
3
- import { AnyTypedArray, ColumnBacking } from '../../type_primitives/index.js';
4
- /** Maps component schema to scalar get/set properties: { x: number, y: number }. */
2
+ import { AnyTypedArray, TypedArrayTag } from '../../type_primitives/index.js';
3
+ /** Maps component schema to scalar get and set properties: { x: number, y: number }. */
5
4
  export type ComponentRef<S extends ComponentSchema> = {
6
5
  -readonly [K in keyof S]: number;
7
6
  };
8
7
  /**
9
8
  * Read-only view of a component reference. This is an **advisory** barrier,
10
9
  * not a runtime safety boundary: the `readonly` properties block field writes
11
- * at the type layer, but `createRef` installs working get/set on the shared
12
- * prototype for both `ref()` and `refRead()`, so a deliberate cast can
13
- * still write through (and would skip the change-tick bump `ref()` performs).
14
- * Treat it as "I promise I am only reading," enforced by the escape-hatch lint
15
- * (`bun run lint:escape-hatches`), not by the runtime.
10
+ * at the type layer, but the shared prototype installs working get and set for
11
+ * both `ref()` and `refRead()`, so a deliberate cast can still write through
12
+ * (and would skip the change-tick bump `ref()` performs). Treat it as "I
13
+ * promise I am only reading". The typechecker holds the promise. Nothing else
14
+ * does: no lint and no runtime check enforces it.
16
15
  */
17
16
  export type ReadonlyComponentRef<S extends ComponentSchema> = {
18
17
  readonly [K in keyof S]: number;
19
18
  };
20
- /** Minimal column group shape needed by createRef. */
21
- export interface RefColumnGroup {
22
- readonly layout: ArchetypeColumnLayout;
23
- readonly columns: ColumnBacking<AnyTypedArray>[];
24
- }
25
- /**
26
- * Create a ComponentRef bound to a specific row in a column group.
27
- * The prototype is built once per column group and cached; subsequent
28
- * calls for the same group only allocate the lightweight ref object.
29
- */
30
- export declare function createRef<S extends ComponentSchema>(group: RefColumnGroup, row: number): ComponentRef<S>;
31
- interface CursorInternal {
32
- /** The current archetype's row plane (`Archetype._bufs`), index-parallel with
33
- * its `_flatColumns`. Re-read on every `at()`; safe to hold between `at()` and
34
- * a field access because `_syncRowPlane` refills it in place. */
35
- _bufs: AnyTypedArray[];
36
- /** Where this component's columns start in `_bufs` for the current archetype. */
37
- _off: number;
38
- _row: number;
39
- }
40
- /** Mutable single-entity cursor: field get/set plus `at(entity)`. */
19
+ /** Mutable single-entity cursor: field get and set plus `at(entity)`. */
41
20
  export type ComponentCursor<S extends ComponentSchema> = {
42
21
  -readonly [K in keyof S]: number;
43
22
  } & CursorSeek;
44
23
  /**
45
24
  * Read-only cursor. **Advisory**, exactly like `ReadonlyComponentRef`: the
46
25
  * prototype carries working setters for both variants, so a deliberate cast
47
- * can still write through and would skip the change-tick bump the mutable
26
+ * can still write through, and would skip the change-tick bump the mutable
48
27
  * variant performs.
49
28
  */
50
29
  export type ReadonlyComponentCursor<S extends ComponentSchema> = {
@@ -57,27 +36,109 @@ export interface CursorSeek {
57
36
  *
58
37
  * Returns the cursor, so a single-expression read stays one expression:
59
38
  * `ecs.cursor(Pos).at(e).x`. In a loop, prefer calling it as a statement and
60
- * reading fields off the cursor that is the form the allocation-free path
39
+ * reading fields off the cursor, that is the form the allocation-free path
61
40
  * exists for.
62
41
  */
63
42
  at(entity: import('./entity.js').EntityID): this;
64
43
  }
44
+ /**
45
+ * The columns an accessor reads: one component's columns in one archetype,
46
+ * indexed by the global id of each field's name (`internFieldName`), with holes at
47
+ * the ids of names the component does not have. The archetype owns one such
48
+ * array for each component it holds (`Archetype._accCols`) and refills it in
49
+ * place whenever a buffer moves (grow, refresh), so a held array stays current.
50
+ */
51
+ export type AccessorColumns = AnyTypedArray[];
52
+ /** The own state of an accessor: two reserved names that registration
53
+ * refuses as field names (`RESERVED_FIELD_NAMES`). Every accessor writes these
54
+ * two in the same order, and thus has the same shape. Write them as literals
55
+ * at a hot site. See the note at the top of the file. */
56
+ export interface Accessor {
57
+ __cols: AccessorColumns;
58
+ __row: number;
59
+ }
60
+ /** Field names a component cannot have, because an accessor owns them. `at`
61
+ * is not here: it is the cursor's own method, and only a cursor over the
62
+ * component rejects it, so a component with such a field keeps every other
63
+ * path. */
64
+ export declare const RESERVED_FIELD_NAMES: readonly string[];
65
65
  /**
66
66
  * `at()` needs the archetype and row for an entity, and only the Store can
67
67
  * resolve those. Passing the whole Store into the cursor would hand it (and its
68
- * users) the mutation surface; this is the one operation it actually needs,
68
+ * users) the mutation surface. This is the one operation it actually needs,
69
69
  * supplied as a closure by whoever creates the cursor.
70
70
  *
71
- * The binder also carries the mutable/read-only difference: `Store.cursorBinder`
71
+ * The binder also carries the mutable and read-only difference: `Store.cursorBinder`
72
72
  * closes over whether to stamp the change tick, so the variant is settled once
73
73
  * at creation instead of branched on per `at()`.
74
74
  */
75
- export type CursorBinder = (cursor: CursorInternal, entity: unknown) => void;
75
+ export type CursorBinder = (cursor: Accessor, entity: unknown) => void;
76
+ /** The DEV-only check a sparse cursor runs on `at()`: access, liveness and
77
+ * membership (`Store.sparseCursorCheck`). Production code never calls it, so
78
+ * the sparse `at` is one mask and one field write. */
79
+ export type SparseCursorCheck = (entity: unknown) => void;
80
+ /**
81
+ * The global id of field name `name`. The first call for a name assigns the
82
+ * id and installs the name's accessor on the shared prototype, with the
83
+ * literal that `kind` selects. A later call with a different `kind` replaces
84
+ * that accessor with the mixed one, one time. Every other call returns the id
85
+ * and changes nothing.
86
+ */
87
+ export declare function internFieldName(name: string, kind: TypedArrayTag): number;
88
+ /** The global name id of each field of a component, in schema order. Made one
89
+ * time at component registration. The archetype places the component's columns
90
+ * at these ids in its accessor column arrays. */
91
+ export declare function fieldGids(fieldNames: readonly string[], fieldTypes: readonly TypedArrayTag[]): Int32Array;
92
+ /** The column at every id of a name the component does not have. An
93
+ * `AccessorColumns` array is packed with it (no holes), so a column load in an
94
+ * accessor never has to test for a hole. It is empty, so a read through it
95
+ * gives `undefined` and a write is dropped: the same silence a wrong field
96
+ * read had before, and DEV names the mistake through `checkedCol`. */
97
+ export declare const NO_COLUMN: AnyTypedArray;
76
98
  /**
77
- * Build a cursor over `fieldNames`, bound by `bind`. The prototype (field
78
- * accessors by ordinal, plus `at`) is built once per component and cached; each
79
- * call allocates one small object, and then nothing per entity.
99
+ * Create a ref bound to `row` of `cols`: one `Object.create` on the shared
100
+ * prototype and two field writes. Nothing else is allocated for each ref.
101
+ */
102
+ export declare function createRef<S extends ComponentSchema>(cols: AccessorColumns, row: number): ComponentRef<S>;
103
+ /**
104
+ * Build a cursor over a component whose fields are `fieldNames`, bound by
105
+ * `bind`. One small object, and then nothing per entity. `at` is an own data
106
+ * property defined directly, and not assigned, so that an accessor named `at`
107
+ * on the shared prototype (a field of some other component) cannot intercept
108
+ * the write. `cols` is the column array the cursor starts on: a dense cursor
109
+ * starts on `EMPTY_COLS` and its binder writes the archetype's array on each
110
+ * `at()`. A sparse cursor starts on its store's array, which never changes
111
+ * identity, so its binder writes the row alone.
112
+ */
113
+ export declare function createCursor<S extends ComponentSchema>(fieldNames: readonly string[], bind: CursorBinder, cols?: AccessorColumns): ComponentCursor<S>;
114
+ /** What a mutable sparse cursor stamps on each `at()`: the sparse store's
115
+ * row ticks, `null` until the component tracks them, and its component-level
116
+ * change tick. The store object itself, seen through this shape. */
117
+ export interface SparseTickPlane {
118
+ ticks: Uint32Array | null;
119
+ changedTick: number;
120
+ }
121
+ /** Where the stamp's value comes from: the store's change tick. */
122
+ export interface ChangeClock {
123
+ readonly changeTick: number;
124
+ }
125
+ /**
126
+ * Build a cursor over a sparse component. The columns are id-indexed, so
127
+ * `at()` is one mask and one field write, and the column array is the store's
128
+ * own, given at creation and never replaced (the store refills it in place).
129
+ *
130
+ * This is a separate function with its own `at` literal, and not
131
+ * `createCursor` with a different binder, on purpose. A dense cursor's `at`
132
+ * calls its binder through one call site, and that site inlines the binder as
133
+ * long as it sees one function. A sparse binder is a different function, so a
134
+ * world with both kinds of cursor would make that site megamorphic and cost
135
+ * both kinds a call on every `at()`. Separate literals keep separate sites,
136
+ * one for each kind. Measured.
137
+ *
138
+ * A mutable cursor (`plane` given) also records the entity for the row grain
139
+ * of change detection, on each `at()`, as the dense cursor does: one load and
140
+ * one branch while the component keeps no row ticks, two stores once it does.
141
+ * The read-only cursor keeps the bare literal.
80
142
  */
81
- export declare function createCursor<S extends ComponentSchema>(fieldNames: readonly string[], bind: CursorBinder): ComponentCursor<S>;
82
- export {};
143
+ export declare function createSparseCursor<S extends ComponentSchema>(fieldNames: readonly string[], cols: AccessorColumns, check: SparseCursorCheck, plane?: SparseTickPlane | null, clock?: ChangeClock | null): ComponentCursor<S>;
83
144
  //# sourceMappingURL=ref.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkCK;AAEL,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG1E,oFAAoF;AACpF,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,eAAe,IAAI;IACrD,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAChC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,eAAe,IAAI;IAC7D,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAC/B,CAAC;AAMF,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;CACjD;AAWD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,eAAe,EAClD,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,MAAM,GACT,YAAY,CAAC,CAAC,CAAC,CAwBjB;AA2CD,UAAU,cAAc;IACvB;;qEAEiE;IACjE,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED,qEAAqE;AACrE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,eAAe,IAAI;IACxD,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAChC,GAAG,UAAU,CAAC;AAEf;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,eAAe,IAAI;IAChE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAC/B,GAAG,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IAC1B;;;;;;;;OAQG;IACH,EAAE,CAAC,MAAM,EAAE,OAAO,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC9C;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAU7E;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,eAAe,EACrD,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,IAAI,EAAE,YAAY,GAChB,eAAe,CAAC,CAAC,CAAC,CA8CpB"}
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2FK;AAEL,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAW1E,wFAAwF;AACxF,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,eAAe,IAAI;IACrD,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAChC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,eAAe,IAAI;IAC7D,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAC/B,CAAC;AAEF,yEAAyE;AACzE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,eAAe,IAAI;IACxD,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAChC,GAAG,UAAU,CAAC;AAEf;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,eAAe,IAAI;IAChE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAC/B,GAAG,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IAC1B;;;;;;;;OAQG;IACH,EAAE,CAAC,MAAM,EAAE,OAAO,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,EAAE,CAAC;AAE9C;;;yDAGyD;AACzD,MAAM,WAAW,QAAQ;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;;WAGW;AACX,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAwB,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAEvE;;sDAEsD;AACtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAU1D;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAezE;AAED;;iDAEiD;AACjD,wBAAgB,SAAS,CACxB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,UAAU,EAAE,SAAS,aAAa,EAAE,GAClC,UAAU,CAKZ;AAED;;;;sEAIsE;AACtE,eAAO,MAAM,SAAS,EAAE,aAAmC,CAAC;AA+I5D;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,eAAe,EAClD,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,GACT,YAAY,CAAC,CAAC,CAAC,CAKjB;AA+DD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,eAAe,EACrD,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,IAAI,EAAE,YAAY,EAClB,IAAI,GAAE,eAA4B,GAChC,eAAe,CAAC,CAAC,CAAC,CA2BpB;AAED;;oEAEoE;AACpE,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,eAAe,EAC3D,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,iBAAiB,EACxB,KAAK,GAAE,eAAe,GAAG,IAAW,EACpC,KAAK,GAAE,WAAW,GAAG,IAAW,GAC9B,eAAe,CAAC,CAAC,CAAC,CAyCpB"}