@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.
- package/CHANGELOG.md +1223 -266
- package/README.md +217 -112
- package/dist/core/ecs/access_check.d.cts +29 -29
- package/dist/core/ecs/access_check.d.ts +29 -29
- package/dist/core/ecs/access_check.d.ts.map +1 -1
- package/dist/core/ecs/archetype.d.cts +217 -209
- package/dist/core/ecs/archetype.d.ts +217 -209
- package/dist/core/ecs/archetype.d.ts.map +1 -1
- package/dist/core/ecs/archetype_closure.d.cts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts.map +1 -0
- package/dist/core/ecs/archetype_graph.d.cts +33 -33
- package/dist/core/ecs/archetype_graph.d.ts +33 -33
- package/dist/core/ecs/archetype_graph.d.ts.map +1 -1
- package/dist/core/ecs/archetype_types.d.cts +55 -0
- package/dist/core/ecs/archetype_types.d.ts +55 -0
- package/dist/core/ecs/archetype_types.d.ts.map +1 -0
- package/dist/core/ecs/change_feed.d.cts +53 -0
- package/dist/core/ecs/change_feed.d.ts +53 -0
- package/dist/core/ecs/change_feed.d.ts.map +1 -0
- package/dist/core/ecs/changed_query.d.cts +36 -0
- package/dist/core/ecs/changed_query.d.ts +36 -0
- package/dist/core/ecs/changed_query.d.ts.map +1 -0
- package/dist/core/ecs/chunk_columns.d.cts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts.map +1 -0
- package/dist/core/ecs/command_log.d.cts +26 -26
- package/dist/core/ecs/command_log.d.ts +26 -26
- package/dist/core/ecs/command_log.d.ts.map +1 -1
- package/dist/core/ecs/component.d.cts +43 -42
- package/dist/core/ecs/component.d.ts +43 -42
- package/dist/core/ecs/component.d.ts.map +1 -1
- package/dist/core/ecs/component_registry.d.cts +53 -0
- package/dist/core/ecs/component_registry.d.ts +53 -0
- package/dist/core/ecs/component_registry.d.ts.map +1 -0
- package/dist/core/ecs/compute_backend.d.cts +18 -7
- package/dist/core/ecs/compute_backend.d.ts +18 -7
- package/dist/core/ecs/compute_backend.d.ts.map +1 -1
- package/dist/core/ecs/deferred_commands.d.cts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts.map +1 -1
- package/dist/core/ecs/dispatch_trace.d.cts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts.map +1 -1
- package/dist/core/ecs/ecs.d.cts +289 -270
- package/dist/core/ecs/ecs.d.ts +289 -270
- package/dist/core/ecs/ecs.d.ts.map +1 -1
- package/dist/core/ecs/ecs_memory.d.cts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts.map +1 -1
- package/dist/core/ecs/ecs_options.d.cts +89 -0
- package/dist/core/ecs/ecs_options.d.ts +89 -0
- package/dist/core/ecs/ecs_options.d.ts.map +1 -0
- package/dist/core/ecs/entity.d.cts +4 -4
- package/dist/core/ecs/entity.d.ts +4 -4
- package/dist/core/ecs/entity_allocator.d.cts +20 -18
- package/dist/core/ecs/entity_allocator.d.ts +20 -18
- package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
- package/dist/core/ecs/event.d.cts +36 -22
- package/dist/core/ecs/event.d.ts +36 -22
- package/dist/core/ecs/event.d.ts.map +1 -1
- package/dist/core/ecs/facades.d.cts +12 -126
- package/dist/core/ecs/facades.d.ts +12 -126
- package/dist/core/ecs/facades.d.ts.map +1 -1
- package/dist/core/ecs/frame_stepper.d.cts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts.map +1 -1
- package/dist/core/ecs/frame_trace.d.cts +32 -32
- package/dist/core/ecs/frame_trace.d.ts +32 -32
- package/dist/core/ecs/frame_trace.d.ts.map +1 -1
- package/dist/core/ecs/host_commands.d.cts +103 -85
- package/dist/core/ecs/host_commands.d.ts +103 -85
- package/dist/core/ecs/host_commands.d.ts.map +1 -1
- package/dist/core/ecs/index.d.cts +21 -11
- package/dist/core/ecs/index.d.ts +21 -11
- package/dist/core/ecs/index.d.ts.map +1 -1
- package/dist/core/ecs/observer.d.cts +39 -120
- package/dist/core/ecs/observer.d.ts +39 -120
- package/dist/core/ecs/observer.d.ts.map +1 -1
- package/dist/core/ecs/phase.d.cts +79 -0
- package/dist/core/ecs/phase.d.ts +79 -0
- package/dist/core/ecs/phase.d.ts.map +1 -0
- package/dist/core/ecs/plugin.d.cts +125 -0
- package/dist/core/ecs/plugin.d.ts +125 -0
- package/dist/core/ecs/plugin.d.ts.map +1 -0
- package/dist/core/ecs/plugin_slots.d.cts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts.map +1 -0
- package/dist/core/ecs/query.d.cts +208 -578
- package/dist/core/ecs/query.d.ts +208 -578
- package/dist/core/ecs/query.d.ts.map +1 -1
- package/dist/core/ecs/query_cache.d.cts +130 -0
- package/dist/core/ecs/query_cache.d.ts +130 -0
- package/dist/core/ecs/query_cache.d.ts.map +1 -0
- package/dist/core/ecs/query_registry.d.cts +47 -0
- package/dist/core/ecs/query_registry.d.ts +47 -0
- package/dist/core/ecs/query_registry.d.ts.map +1 -0
- package/dist/core/ecs/query_terms.d.cts +126 -0
- package/dist/core/ecs/query_terms.d.ts +126 -0
- package/dist/core/ecs/query_terms.d.ts.map +1 -0
- package/dist/core/ecs/ref.d.cts +100 -39
- package/dist/core/ecs/ref.d.ts +100 -39
- package/dist/core/ecs/ref.d.ts.map +1 -1
- package/dist/core/ecs/relation.d.cts +101 -182
- package/dist/core/ecs/relation.d.ts +101 -182
- package/dist/core/ecs/relation.d.ts.map +1 -1
- package/dist/core/ecs/resource.d.cts +13 -13
- package/dist/core/ecs/resource.d.ts +13 -13
- package/dist/core/ecs/resource_registry.d.cts +5 -5
- package/dist/core/ecs/resource_registry.d.ts +5 -5
- package/dist/core/ecs/resource_registry.d.ts.map +1 -1
- package/dist/core/ecs/row_kinds.d.cts +24 -0
- package/dist/core/ecs/row_kinds.d.ts +24 -0
- package/dist/core/ecs/row_kinds.d.ts.map +1 -0
- package/dist/core/ecs/run_condition.d.cts +23 -23
- package/dist/core/ecs/run_condition.d.ts +23 -23
- package/dist/core/ecs/run_condition.d.ts.map +1 -1
- package/dist/core/ecs/schedule.d.cts +91 -120
- package/dist/core/ecs/schedule.d.ts +91 -120
- package/dist/core/ecs/schedule.d.ts.map +1 -1
- package/dist/core/ecs/schedule_plan.d.cts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts.map +1 -0
- package/dist/core/ecs/snapshot.d.cts +77 -0
- package/dist/core/ecs/snapshot.d.ts +77 -0
- package/dist/core/ecs/snapshot.d.ts.map +1 -0
- package/dist/core/ecs/snapshot_mount.d.cts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts.map +1 -0
- package/dist/core/ecs/sparse_store.d.cts +108 -51
- package/dist/core/ecs/sparse_store.d.ts +108 -51
- package/dist/core/ecs/sparse_store.d.ts.map +1 -1
- package/dist/core/ecs/store.d.cts +527 -473
- package/dist/core/ecs/store.d.ts +527 -473
- package/dist/core/ecs/store.d.ts.map +1 -1
- package/dist/core/ecs/store_layout_listener.d.cts +6 -6
- package/dist/core/ecs/store_layout_listener.d.ts +6 -6
- package/dist/core/ecs/store_types.d.cts +122 -0
- package/dist/core/ecs/store_types.d.ts +122 -0
- package/dist/core/ecs/store_types.d.ts.map +1 -0
- package/dist/core/ecs/system.d.cts +146 -61
- package/dist/core/ecs/system.d.ts +146 -61
- package/dist/core/ecs/system.d.ts.map +1 -1
- package/dist/core/ecs/system_context.d.cts +296 -0
- package/dist/core/ecs/system_context.d.ts +296 -0
- package/dist/core/ecs/system_context.d.ts.map +1 -0
- package/dist/core/ecs/system_set.d.cts +48 -0
- package/dist/core/ecs/system_set.d.ts +48 -0
- package/dist/core/ecs/system_set.d.ts.map +1 -0
- package/dist/core/ecs/utils/arrays.d.cts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts.map +1 -1
- package/dist/core/ecs/utils/error.d.cts +82 -6
- package/dist/core/ecs/utils/error.d.ts +82 -6
- package/dist/core/ecs/utils/error.d.ts.map +1 -1
- package/dist/core/ecs/utils/plugin_error.d.cts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts.map +1 -0
- package/dist/core/restore_errors.d.cts +30 -0
- package/dist/core/restore_errors.d.ts +30 -0
- package/dist/core/restore_errors.d.ts.map +1 -0
- package/dist/core/store/action_ring.d.cts +44 -44
- package/dist/core/store/action_ring.d.ts +44 -44
- package/dist/core/store/action_ring.d.ts.map +1 -1
- package/dist/core/store/allocator.d.cts +149 -95
- package/dist/core/store/allocator.d.ts +149 -95
- package/dist/core/store/allocator.d.ts.map +1 -1
- package/dist/core/store/buffer_backed_column.d.cts +17 -17
- package/dist/core/store/buffer_backed_column.d.ts +17 -17
- package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
- package/dist/core/store/column_store.d.cts +124 -86
- package/dist/core/store/column_store.d.ts +124 -86
- package/dist/core/store/column_store.d.ts.map +1 -1
- package/dist/core/store/command_dispatch.d.cts +14 -15
- package/dist/core/store/command_dispatch.d.ts +14 -15
- package/dist/core/store/command_dispatch.d.ts.map +1 -1
- package/dist/core/store/command_ring.d.cts +36 -39
- package/dist/core/store/command_ring.d.ts +36 -39
- package/dist/core/store/command_ring.d.ts.map +1 -1
- package/dist/core/store/descriptor.d.cts +34 -17
- package/dist/core/store/descriptor.d.ts +34 -17
- package/dist/core/store/descriptor.d.ts.map +1 -1
- package/dist/core/store/entity_index.d.cts +34 -35
- package/dist/core/store/entity_index.d.ts +34 -35
- package/dist/core/store/entity_index.d.ts.map +1 -1
- package/dist/core/store/event_ring.d.cts +36 -38
- package/dist/core/store/event_ring.d.ts +36 -38
- package/dist/core/store/event_ring.d.ts.map +1 -1
- package/dist/core/store/extend.d.cts +13 -7
- package/dist/core/store/extend.d.ts +13 -7
- package/dist/core/store/extend.d.ts.map +1 -1
- package/dist/core/store/grow.d.cts +2 -2
- package/dist/core/store/grow.d.ts +2 -2
- package/dist/core/store/grow.d.ts.map +1 -1
- package/dist/core/store/header.d.cts +31 -27
- package/dist/core/store/header.d.ts +31 -27
- package/dist/core/store/header.d.ts.map +1 -1
- package/dist/core/store/index.d.cts +10 -10
- package/dist/core/store/index.d.ts +10 -10
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/layout_ops.d.cts +71 -62
- package/dist/core/store/layout_ops.d.ts +71 -62
- package/dist/core/store/layout_ops.d.ts.map +1 -1
- package/dist/core/store/region_table.d.cts +28 -21
- package/dist/core/store/region_table.d.ts +28 -21
- package/dist/core/store/region_table.d.ts.map +1 -1
- package/dist/core/store/snapshot.d.cts +31 -16
- package/dist/core/store/snapshot.d.ts +31 -16
- package/dist/core/store/snapshot.d.ts.map +1 -1
- package/dist/core/store/state_hash.d.cts +12 -12
- package/dist/core/store/state_hash.d.ts +12 -12
- package/dist/core/store/state_hash.d.ts.map +1 -1
- package/dist/core/store/store_regions.d.cts +10 -10
- package/dist/core/store/store_regions.d.ts +10 -10
- package/dist/core/store/store_regions.d.ts.map +1 -1
- package/dist/core/store/vendored_abi/abi.d.cts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts.map +1 -1
- package/dist/host_commands-B2KMx8O2.cjs +1 -0
- package/dist/host_commands-ClVPvhSa.cjs +2 -0
- package/dist/host_commands-CwxVQS1z.js +1524 -0
- package/dist/host_commands-nJvTy88E.js +1667 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +15 -10
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.development.cjs +1 -1
- package/dist/index.development.js +5804 -5203
- package/dist/index.js +5323 -4764
- package/dist/internal.cjs +2 -2
- package/dist/internal.d.cts +5 -2
- package/dist/internal.d.ts +5 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.development.cjs +1 -1
- package/dist/internal.development.js +70 -20
- package/dist/internal.js +138 -83
- package/dist/plugins/abi-D3V-QUSf.cjs +1 -0
- package/dist/plugins/abi-NP8pNxpd.js +42 -0
- package/dist/plugins/arrays-Dr_1hCjL.js +28 -0
- package/dist/plugins/arrays-Dt-Joc4i.cjs +1 -0
- package/dist/plugins/assertions-gtDVfbnQ.js +6 -0
- package/dist/plugins/assertions-z5GQd_bB.cjs +1 -0
- package/dist/{extensions → plugins}/editor/editor.d.cts +54 -54
- package/dist/{extensions → plugins}/editor/editor.d.ts +54 -54
- package/dist/plugins/editor/editor.d.ts.map +1 -0
- package/dist/{extensions → plugins}/editor/field_handle.d.cts +12 -12
- package/dist/{extensions → plugins}/editor/field_handle.d.ts +12 -12
- package/dist/plugins/editor/field_handle.d.ts.map +1 -0
- package/dist/plugins/editor/index.d.cts +22 -0
- package/dist/plugins/editor/index.d.ts +22 -0
- package/dist/plugins/editor/index.d.ts.map +1 -0
- package/dist/plugins/editor.cjs +1 -0
- package/dist/plugins/editor.d.cts +1 -0
- package/dist/plugins/editor.d.ts +1 -0
- package/dist/plugins/editor.development.cjs +1 -0
- package/dist/{extensions/editor/index.development.js → plugins/editor.development.js} +81 -64
- package/dist/{extensions/editor/index.js → plugins/editor.js} +81 -64
- package/dist/plugins/events/event_channel.d.cts +13 -0
- package/dist/plugins/events/event_channel.d.ts +13 -0
- package/dist/plugins/events/event_channel.d.ts.map +1 -0
- package/dist/plugins/events/event_registry.d.cts +22 -0
- package/dist/plugins/events/event_registry.d.ts +22 -0
- package/dist/plugins/events/event_registry.d.ts.map +1 -0
- package/dist/plugins/events/facade.d.cts +26 -0
- package/dist/plugins/events/facade.d.ts +26 -0
- package/dist/plugins/events/facade.d.ts.map +1 -0
- package/dist/plugins/events/index.d.cts +10 -0
- package/dist/plugins/events/index.d.ts +10 -0
- package/dist/plugins/events/index.d.ts.map +1 -0
- package/dist/plugins/events.cjs +1 -0
- package/dist/plugins/events.d.cts +1 -0
- package/dist/plugins/events.d.ts +1 -0
- package/dist/plugins/events.development.cjs +1 -0
- package/dist/plugins/events.development.js +174 -0
- package/dist/plugins/events.js +159 -0
- package/dist/plugins/observers/index.d.cts +23 -0
- package/dist/plugins/observers/index.d.ts +23 -0
- package/dist/plugins/observers/index.d.ts.map +1 -0
- package/dist/plugins/observers/observer_registry.d.cts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts.map +1 -0
- package/dist/plugins/observers.cjs +1 -0
- package/dist/plugins/observers.d.cts +1 -0
- package/dist/plugins/observers.d.ts +1 -0
- package/dist/plugins/observers.development.cjs +1 -0
- package/dist/plugins/observers.development.js +431 -0
- package/dist/plugins/observers.js +403 -0
- package/dist/plugins/relation_store-BsoegrZh.js +313 -0
- package/dist/plugins/relation_store-DQKSnxsm.cjs +1 -0
- package/dist/plugins/relation_store-RBhpcE28.cjs +1 -0
- package/dist/plugins/relation_store-RqW5Snx6.js +328 -0
- package/dist/plugins/relations/builtin_relations.d.cts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts.map +1 -0
- package/dist/plugins/relations/facade.d.cts +73 -0
- package/dist/plugins/relations/facade.d.ts +73 -0
- package/dist/plugins/relations/facade.d.ts.map +1 -0
- package/dist/plugins/relations/index.d.cts +11 -0
- package/dist/plugins/relations/index.d.ts +11 -0
- package/dist/plugins/relations/index.d.ts.map +1 -0
- package/dist/{core/ecs → plugins/relations}/relation_service.d.cts +85 -97
- package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +85 -97
- package/dist/plugins/relations/relation_service.d.ts.map +1 -0
- package/dist/plugins/relations/relation_store.d.cts +177 -0
- package/dist/plugins/relations/relation_store.d.ts +177 -0
- package/dist/plugins/relations/relation_store.d.ts.map +1 -0
- package/dist/plugins/relations.cjs +1 -0
- package/dist/plugins/relations.d.cts +1 -0
- package/dist/plugins/relations.d.ts +1 -0
- package/dist/plugins/relations.development.cjs +1 -0
- package/dist/plugins/relations.development.js +603 -0
- package/dist/plugins/relations.js +553 -0
- package/dist/plugins/snapshots/index.d.cts +33 -0
- package/dist/plugins/snapshots/index.d.ts +33 -0
- package/dist/plugins/snapshots/index.d.ts.map +1 -0
- package/dist/plugins/snapshots/resume.d.cts +57 -0
- package/dist/plugins/snapshots/resume.d.ts +57 -0
- package/dist/plugins/snapshots/resume.d.ts.map +1 -0
- package/dist/plugins/snapshots/snapshot_service.d.cts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts.map +1 -0
- package/dist/plugins/snapshots.cjs +1 -0
- package/dist/plugins/snapshots.d.cts +1 -0
- package/dist/plugins/snapshots.d.ts +1 -0
- package/dist/plugins/snapshots.development.cjs +1 -0
- package/dist/plugins/snapshots.development.js +737 -0
- package/dist/plugins/snapshots.js +737 -0
- package/dist/plugins/solid/index.d.cts +8 -0
- package/dist/plugins/solid/index.d.ts +8 -0
- package/dist/plugins/solid/index.d.ts.map +1 -0
- package/dist/plugins/solid/solid.d.cts +97 -0
- package/dist/plugins/solid/solid.d.ts +97 -0
- package/dist/plugins/solid/solid.d.ts.map +1 -0
- package/dist/plugins/solid.cjs +1 -0
- package/dist/plugins/solid.d.cts +1 -0
- package/dist/plugins/solid.d.ts +1 -0
- package/dist/plugins/solid.development.cjs +1 -0
- package/dist/plugins/solid.development.js +319 -0
- package/dist/plugins/solid.js +319 -0
- package/dist/plugins/workers/index.d.cts +75 -0
- package/dist/plugins/workers/index.d.ts +75 -0
- package/dist/plugins/workers/index.d.ts.map +1 -0
- package/dist/plugins/workers/node_threads.d.cts +25 -0
- package/dist/plugins/workers/node_threads.d.ts +25 -0
- package/dist/plugins/workers/node_threads.d.ts.map +1 -0
- package/dist/plugins/workers/plan.d.cts +61 -0
- package/dist/plugins/workers/plan.d.ts +61 -0
- package/dist/plugins/workers/plan.d.ts.map +1 -0
- package/dist/plugins/workers/pool.d.cts +144 -0
- package/dist/plugins/workers/pool.d.ts +144 -0
- package/dist/plugins/workers/pool.d.ts.map +1 -0
- package/dist/plugins/workers/protocol.d.cts +112 -0
- package/dist/plugins/workers/protocol.d.ts +112 -0
- package/dist/plugins/workers/protocol.d.ts.map +1 -0
- package/dist/plugins/workers/worker_bind.d.cts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts.map +1 -0
- package/dist/plugins/workers/worker_loop.d.cts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts.map +1 -0
- package/dist/plugins/workers.cjs +1 -0
- package/dist/plugins/workers.d.cts +1 -0
- package/dist/plugins/workers.d.ts +1 -0
- package/dist/plugins/workers.development.cjs +1 -0
- package/dist/plugins/workers.development.js +596 -0
- package/dist/plugins/workers.js +474 -0
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.d.cts +4 -4
- package/dist/primitives.d.ts +4 -4
- package/dist/primitives.development.cjs +1 -1
- package/dist/primitives.development.js +66 -22
- package/dist/primitives.js +66 -22
- package/dist/shared-BKl12xF1.js +132 -0
- package/dist/shared-Dk-pACZT.cjs +1 -0
- package/dist/shared.cjs +1 -1
- package/dist/shared.d.cts +7 -7
- package/dist/shared.d.ts +7 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.development.cjs +1 -1
- package/dist/shared.development.js +4 -3
- package/dist/shared.js +4 -3
- package/dist/topological_sort-Cc_yXqPT.js +346 -0
- package/dist/topological_sort-vp1imU6D.cjs +1 -0
- package/dist/type_primitives/assertions.d.cts +12 -16
- package/dist/type_primitives/assertions.d.ts +12 -16
- package/dist/type_primitives/assertions.d.ts.map +1 -1
- package/dist/type_primitives/binary_heap/binary_heap.d.cts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
- package/dist/type_primitives/bitset/bitset.d.cts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
- package/dist/type_primitives/brand.d.cts +2 -7
- package/dist/type_primitives/brand.d.ts +2 -7
- package/dist/type_primitives/brand.d.ts.map +1 -1
- package/dist/type_primitives/error.d.cts +1 -2
- package/dist/type_primitives/error.d.ts +1 -2
- package/dist/type_primitives/error.d.ts.map +1 -1
- package/dist/type_primitives/index.d.cts +1 -1
- package/dist/type_primitives/index.d.ts +1 -1
- package/dist/type_primitives/sparse_map/sparse_map.d.cts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
- package/dist/type_primitives/sparse_set/sparse_set.d.cts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
- package/dist/type_primitives/topological_sort/topological_sort.d.cts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
- package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +16 -15
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +16 -15
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/version.d.cts +3 -3
- package/dist/version.d.ts +3 -3
- package/dist/worker.cjs +1 -0
- package/dist/worker.d.cts +17 -0
- package/dist/worker.d.ts +17 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.development.cjs +1 -0
- package/dist/worker.development.js +253 -0
- package/dist/worker.js +253 -0
- package/package.json +363 -191
- package/dist/core/ecs/builtin_relations.d.cts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts.map +0 -1
- package/dist/core/ecs/event_registry.d.cts +0 -22
- package/dist/core/ecs/event_registry.d.ts +0 -22
- package/dist/core/ecs/event_registry.d.ts.map +0 -1
- package/dist/core/ecs/relation_service.d.ts.map +0 -1
- package/dist/core/ecs/resume.d.cts +0 -85
- package/dist/core/ecs/resume.d.ts +0 -85
- package/dist/core/ecs/resume.d.ts.map +0 -1
- package/dist/core/ecs/snapshot_service.d.cts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts.map +0 -1
- package/dist/extensions/editor/editor.d.ts.map +0 -1
- package/dist/extensions/editor/field_handle.d.ts.map +0 -1
- package/dist/extensions/editor/index.cjs +0 -1
- package/dist/extensions/editor/index.d.cts +0 -21
- package/dist/extensions/editor/index.d.ts +0 -21
- package/dist/extensions/editor/index.d.ts.map +0 -1
- package/dist/extensions/editor/index.development.cjs +0 -1
- package/dist/extensions/reactive/ecs_sync.d.cts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts.map +0 -1
- package/dist/extensions/reactive/index.cjs +0 -1
- package/dist/extensions/reactive/index.d.cts +0 -23
- package/dist/extensions/reactive/index.d.ts +0 -23
- package/dist/extensions/reactive/index.d.ts.map +0 -1
- package/dist/extensions/reactive/index.development.cjs +0 -1
- package/dist/extensions/reactive/index.development.js +0 -215
- package/dist/extensions/reactive/index.js +0 -215
- package/dist/extensions/solid/index.cjs +0 -1
- package/dist/extensions/solid/index.d.cts +0 -6
- package/dist/extensions/solid/index.d.ts +0 -6
- package/dist/extensions/solid/index.d.ts.map +0 -1
- package/dist/extensions/solid/index.development.cjs +0 -1
- package/dist/extensions/solid/index.development.js +0 -40
- package/dist/extensions/solid/index.js +0 -36
- package/dist/extensions/solid/kernel_solid.d.cts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts.map +0 -1
- package/dist/host_commands-BlR3oZ3x.js +0 -2406
- package/dist/host_commands-C2cpU3yC.cjs +0 -1
- package/dist/internal-BoxWl4dG.js +0 -2565
- package/dist/internal-CGBEwfeB.cjs +0 -2
- package/dist/interop-CT-REx0W.cjs +0 -1
- package/dist/interop-CcY6ASQc.js +0 -18
- package/dist/interop-DqxleBo7.js +0 -18
- package/dist/interop-T1HZ-Dpa.cjs +0 -1
- package/dist/kernel-Cz2Kxlwl.js +0 -240
- package/dist/kernel-DgyrLFjW.js +0 -227
- package/dist/kernel-sw7ScKWu.cjs +0 -1
- package/dist/kernel-yWV3XnAb.cjs +0 -1
- package/dist/reactive/array.d.cts +0 -24
- package/dist/reactive/array.d.ts +0 -24
- package/dist/reactive/array.d.ts.map +0 -1
- package/dist/reactive/index.cjs +0 -1
- package/dist/reactive/index.d.cts +0 -11
- package/dist/reactive/index.d.ts +0 -11
- package/dist/reactive/index.d.ts.map +0 -1
- package/dist/reactive/index.development.cjs +0 -1
- package/dist/reactive/index.development.js +0 -18
- package/dist/reactive/index.js +0 -18
- package/dist/reactive/interop.d.cts +0 -19
- package/dist/reactive/interop.d.ts +0 -19
- package/dist/reactive/interop.d.ts.map +0 -1
- package/dist/reactive/kernel.d.cts +0 -73
- package/dist/reactive/kernel.d.ts +0 -73
- package/dist/reactive/kernel.d.ts.map +0 -1
- package/dist/reactive/map.d.cts +0 -16
- package/dist/reactive/map.d.ts +0 -16
- package/dist/reactive/map.d.ts.map +0 -1
- package/dist/reactive/shallow.d.cts +0 -11
- package/dist/reactive/shallow.d.ts +0 -11
- package/dist/reactive/shallow.d.ts.map +0 -1
- package/dist/reactive/struct.d.cts +0 -10
- package/dist/reactive/struct.d.ts +0 -10
- package/dist/reactive/struct.d.ts.map +0 -1
- package/dist/shallow-Bs39EPh1.js +0 -150
- package/dist/shallow-C5YmTbtb.cjs +0 -1
- package/dist/shallow-CiFC70Dz.js +0 -159
- package/dist/shallow-DQ8aG51_.cjs +0 -1
- package/dist/shared-B4v0L1cw.js +0 -109
- package/dist/shared-DU78k0pU.cjs +0 -1
- package/dist/topological_sort-BDvEyb9W.cjs +0 -1
- package/dist/topological_sort-DK6EjpWa.js +0 -135
- package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
- 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
|
+
};
|