@oasys/oecs 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1399 -276
- package/README.md +327 -169
- package/dist/core/ecs/access_check.d.cts +31 -31
- package/dist/core/ecs/access_check.d.ts +31 -31
- package/dist/core/ecs/access_check.d.ts.map +1 -1
- package/dist/core/ecs/archetype.d.cts +273 -205
- package/dist/core/ecs/archetype.d.ts +273 -205
- 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 +34 -34
- package/dist/core/ecs/archetype_graph.d.ts +34 -34
- 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 +30 -30
- package/dist/core/ecs/command_log.d.ts +30 -30
- package/dist/core/ecs/command_log.d.ts.map +1 -1
- package/dist/core/ecs/component.d.cts +45 -44
- package/dist/core/ecs/component.d.ts +45 -44
- 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 +337 -276
- package/dist/core/ecs/ecs.d.ts +337 -276
- 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 +24 -22
- package/dist/core/ecs/entity_allocator.d.ts +24 -22
- package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
- package/dist/core/ecs/event.d.cts +37 -23
- package/dist/core/ecs/event.d.ts +37 -23
- 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 +34 -34
- package/dist/core/ecs/frame_trace.d.ts +34 -34
- package/dist/core/ecs/frame_trace.d.ts.map +1 -1
- package/dist/core/ecs/host_commands.d.cts +107 -89
- package/dist/core/ecs/host_commands.d.ts +107 -89
- package/dist/core/ecs/host_commands.d.ts.map +1 -1
- package/dist/core/ecs/index.d.cts +22 -12
- package/dist/core/ecs/index.d.ts +22 -12
- package/dist/core/ecs/index.d.ts.map +1 -1
- package/dist/core/ecs/observer.d.cts +41 -122
- package/dist/core/ecs/observer.d.ts +41 -122
- 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 +219 -568
- package/dist/core/ecs/query.d.ts +219 -568
- 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 +129 -16
- package/dist/core/ecs/ref.d.ts +129 -16
- package/dist/core/ecs/ref.d.ts.map +1 -1
- package/dist/core/ecs/relation.d.cts +105 -186
- package/dist/core/ecs/relation.d.ts +105 -186
- package/dist/core/ecs/relation.d.ts.map +1 -1
- package/dist/core/ecs/resource.d.cts +14 -14
- package/dist/core/ecs/resource.d.ts +14 -14
- package/dist/core/ecs/resource_registry.d.cts +6 -6
- package/dist/core/ecs/resource_registry.d.ts +6 -6
- 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 +98 -114
- package/dist/core/ecs/schedule.d.ts +98 -114
- 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 +110 -53
- package/dist/core/ecs/sparse_store.d.ts +110 -53
- package/dist/core/ecs/sparse_store.d.ts.map +1 -1
- package/dist/core/ecs/store.d.cts +644 -511
- package/dist/core/ecs/store.d.ts +644 -511
- package/dist/core/ecs/store.d.ts.map +1 -1
- package/dist/core/ecs/store_layout_listener.d.cts +8 -8
- package/dist/core/ecs/store_layout_listener.d.ts +8 -8
- 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 +151 -66
- package/dist/core/ecs/system.d.ts +151 -66
- 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 +87 -4
- package/dist/core/ecs/utils/error.d.ts +87 -4
- 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 +48 -49
- package/dist/core/store/action_ring.d.ts +48 -49
- package/dist/core/store/action_ring.d.ts.map +1 -1
- package/dist/core/store/allocator.d.cts +166 -114
- package/dist/core/store/allocator.d.ts +166 -114
- package/dist/core/store/allocator.d.ts.map +1 -1
- package/dist/core/store/buffer_backed_column.d.cts +21 -22
- package/dist/core/store/buffer_backed_column.d.ts +21 -22
- package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
- package/dist/core/store/column_store.d.cts +138 -100
- package/dist/core/store/column_store.d.ts +138 -100
- 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 +41 -45
- package/dist/core/store/command_ring.d.ts +41 -45
- package/dist/core/store/command_ring.d.ts.map +1 -1
- package/dist/core/store/descriptor.d.cts +35 -18
- package/dist/core/store/descriptor.d.ts +35 -18
- 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 +40 -42
- package/dist/core/store/event_ring.d.ts +40 -42
- package/dist/core/store/event_ring.d.ts.map +1 -1
- package/dist/core/store/extend.d.cts +15 -9
- package/dist/core/store/extend.d.ts +15 -9
- package/dist/core/store/extend.d.ts.map +1 -1
- package/dist/core/store/grow.d.cts +3 -3
- package/dist/core/store/grow.d.ts +3 -3
- package/dist/core/store/grow.d.ts.map +1 -1
- package/dist/core/store/header.d.cts +37 -33
- package/dist/core/store/header.d.ts +37 -33
- 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 +72 -63
- package/dist/core/store/layout_ops.d.ts +72 -63
- 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 +14 -14
- package/dist/core/store/state_hash.d.ts +14 -14
- 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 +16 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.development.cjs +1 -1
- package/dist/index.development.js +6709 -5729
- package/dist/index.js +5664 -4743
- 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 +56 -56
- package/dist/{extensions → plugins}/editor/editor.d.ts +56 -56
- package/dist/plugins/editor/editor.d.ts.map +1 -0
- package/dist/{extensions → plugins}/editor/field_handle.d.cts +13 -13
- package/dist/{extensions → plugins}/editor/field_handle.d.ts +13 -13
- 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} +83 -66
- package/dist/{extensions/editor/index.js → plugins/editor.js} +83 -66
- 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 +93 -105
- package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +93 -105
- 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 +18 -17
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +18 -17
- 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 +4 -4
- package/dist/version.d.ts +4 -4
- 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-3jyFfWNg.js +0 -2326
- package/dist/host_commands-DNf0f6ko.cjs +0 -1
- package/dist/internal-C9jjL90H.js +0 -2485
- package/dist/internal-RZN14uMw.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-9S1pY_Iw.js +0 -159
- package/dist/shallow-C5YmTbtb.cjs +0 -1
- package/dist/shallow-DQ8aG51_.cjs +0 -1
- package/dist/shallow-DfnAm9vG.js +0 -150
- package/dist/shared-BMXh9hxm.cjs +0 -1
- package/dist/shared-DQKK0i-E.js +0 -109
- package/dist/topological_sort-BDvEyb9W.cjs +0 -1
- package/dist/topological_sort-DK6EjpWa.js +0 -135
- package/dist/typed_arrays-BcXcnzB4.js +0 -258
- package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { ComponentDef, ComponentSchema, CompleteFieldValues, FieldValues } from './component.cjs';
|
|
2
2
|
import { ECS } from './ecs.cjs';
|
|
3
3
|
import { EntityID } from './entity.cjs';
|
|
4
|
-
import { SystemContext } from './
|
|
5
|
-
import {
|
|
4
|
+
import { SystemContext } from './system_context.cjs';
|
|
5
|
+
import { SchedulePhase } from './phase.cjs';
|
|
6
6
|
import { PayloadCodec } from '../store/index.cjs';
|
|
7
7
|
/** One component to attach to a freshly spawned entity. `values` are required
|
|
8
|
-
* and complete as a *strictness* choice, not a runtime need:
|
|
9
|
-
* attach path (deferred included
|
|
8
|
+
* and complete as a *strictness* choice, not a runtime need: every
|
|
9
|
+
* attach path (deferred included, `writeFields`'s `?? 0`) zero-fills omitted
|
|
10
10
|
* fields, same as templates. A host command is a reified, replayable record,
|
|
11
11
|
* so it carries explicit intent for every field rather than relying on the
|
|
12
|
-
* zero-fill
|
|
12
|
+
* zero-fill. A tag component takes `{}`. Build type-safely with `spawnEntry`. */
|
|
13
13
|
export interface SpawnEntry {
|
|
14
14
|
readonly def: ComponentDef;
|
|
15
15
|
readonly values: FieldValues<ComponentSchema>;
|
|
@@ -17,34 +17,34 @@ export interface SpawnEntry {
|
|
|
17
17
|
/** Extracts the schema out of a `ComponentDef` handle. */
|
|
18
18
|
type SchemaOf<D extends ComponentDef> = D extends ComponentDef<infer S> ? S : ComponentSchema;
|
|
19
19
|
/** One schema-checked spawn entry: `values` is complete for its own def (see
|
|
20
|
-
* the `SpawnEntry` doc
|
|
21
|
-
* zero-fills
|
|
20
|
+
* the `SpawnEntry` doc, explicit intent per field, though the attach path
|
|
21
|
+
* zero-fills), and a tag takes exactly `{}`. */
|
|
22
22
|
export type SpawnEntryFor<D extends ComponentDef> = {
|
|
23
23
|
readonly def: D;
|
|
24
24
|
readonly values: CompleteFieldValues<SchemaOf<D>>;
|
|
25
25
|
};
|
|
26
|
-
/** The entries tuple for `HostCommandQueue.spawn
|
|
26
|
+
/** The entries tuple for `HostCommandQueue.spawn`, each element's `values` is
|
|
27
27
|
* checked against its own `def`'s schema. Unlike the authoring-side bundle
|
|
28
|
-
* varargs (`StrictBundles
|
|
28
|
+
* varargs (`StrictBundles`, `Partial`, a template and attach zero-fills omitted
|
|
29
29
|
* fields), a host command demands complete values: it is a reified, replayable
|
|
30
30
|
* record, so every field is explicit even though the attach path would
|
|
31
|
-
* zero-fill
|
|
32
|
-
*
|
|
31
|
+
* zero-fill. This is the one attach surface that stays on entry-objects.
|
|
32
|
+
* It is transport (record and replay, editor undo), not authoring. */
|
|
33
33
|
export type SpawnEntries<Defs extends readonly ComponentDef[]> = readonly [
|
|
34
34
|
...{
|
|
35
35
|
[K in keyof Defs]: SpawnEntryFor<Defs[K]>;
|
|
36
36
|
}
|
|
37
37
|
];
|
|
38
|
-
/** Type-checked `SpawnEntry` constructor
|
|
38
|
+
/** Type-checked `SpawnEntry` constructor, keeps `values` aligned to `def`'s
|
|
39
39
|
* schema at the call site even though the stored entry is schema-erased. */
|
|
40
40
|
export declare function spawnEntry<S extends ComponentSchema>(def: ComponentDef<S>, values: CompleteFieldValues<S>): SpawnEntry;
|
|
41
41
|
/**
|
|
42
42
|
* A single world mutation, as plain data. Every transport (typed queue today, a
|
|
43
|
-
* SAB ring codec tomorrow) and every consumer (editor undo, record
|
|
43
|
+
* SAB ring codec tomorrow) and every consumer (editor undo, record and replay)
|
|
44
44
|
* speaks this one vocabulary, applied by the one `applyHostCommand` dispatch.
|
|
45
45
|
*
|
|
46
|
-
* Component fields are `string`
|
|
47
|
-
* union stays flat
|
|
46
|
+
* Component fields are `string` and `def: ComponentDef` (schema-erased) so the
|
|
47
|
+
* union stays flat. The typed `HostCommandQueue` methods preserve type-safety at
|
|
48
48
|
* the enqueue site. `applyHostCommand` re-applies them through `SystemContext`,
|
|
49
49
|
* which type-checks because `ComponentDef` defaults its schema to
|
|
50
50
|
* `ComponentSchema` (whose `keyof` is `string`).
|
|
@@ -53,7 +53,7 @@ export type HostCommand = {
|
|
|
53
53
|
readonly kind: "spawn";
|
|
54
54
|
readonly components: readonly SpawnEntry[];
|
|
55
55
|
/** Fired with the new id once the spawn applies (the id only exists
|
|
56
|
-
* after the deferred create)
|
|
56
|
+
* after the deferred create), lets a producer or editor learn it. */
|
|
57
57
|
readonly onSpawned?: (entityId: EntityID) => void;
|
|
58
58
|
} | {
|
|
59
59
|
readonly kind: "despawn";
|
|
@@ -81,163 +81,163 @@ export type HostCommand = {
|
|
|
81
81
|
readonly eid: EntityID;
|
|
82
82
|
};
|
|
83
83
|
/**
|
|
84
|
-
*
|
|
84
|
+
* The one apply dispatch. Maps a `HostCommand` onto `SystemContext` ops. Only
|
|
85
85
|
* ever called from inside the blessed apply system, which holds the `ctx` and is
|
|
86
|
-
* `exclusive` (full access).
|
|
87
|
-
* add
|
|
88
|
-
* `setField` is immediate and
|
|
89
|
-
* `spawn`, otherwise `undefined`.
|
|
86
|
+
* `exclusive` (full access). A structural change (`spawn`, `despawn`, and a
|
|
87
|
+
* component add or remove) is deferred to the phase flush, exactly like a normal
|
|
88
|
+
* system's. `setField` is immediate and stamps the change tick. Returns the new
|
|
89
|
+
* entity for `spawn`, otherwise `undefined`.
|
|
90
90
|
*
|
|
91
|
-
* That immediate
|
|
92
|
-
* component the entity does
|
|
93
|
-
* enqueued in the
|
|
94
|
-
* deep in `
|
|
91
|
+
* That immediate and deferred split is a sharp edge: a `setField` targeting a
|
|
92
|
+
* component the entity does not yet have, because an `add` or `spawn`
|
|
93
|
+
* enqueued in the same drain is still pending its flush, would otherwise fail
|
|
94
|
+
* deep in `getColumnMut` with an opaque "component not registered". The `DEV`
|
|
95
95
|
* guard below turns that into an actionable message. The fix is structural, not a
|
|
96
|
-
* retry: pass the value in `add
|
|
96
|
+
* retry: pass the value in `add` and `spawnEntry` (which carries complete
|
|
97
97
|
* field values), or issue the `setField` on a later frame.
|
|
98
98
|
*/
|
|
99
99
|
export declare function applyHostCommand(ctx: SystemContext, cmd: HostCommand): EntityID | undefined;
|
|
100
100
|
/**
|
|
101
|
-
* The host-facing write handle.
|
|
102
|
-
*
|
|
101
|
+
* The host-facing write handle. A mutating method enqueues, off-schedule and
|
|
102
|
+
* pure. Nothing reaches the world until the apply system drains it at the next
|
|
103
103
|
* schedule head. Mirrors Bevy's `Commands` ergonomics over the flat `HostCommand`
|
|
104
104
|
* vocabulary. The returned-from-`installHostCommandSeam` instance is the
|
|
105
|
-
* write counterpart to the
|
|
105
|
+
* write counterpart to a read view the Solid plugin returns.
|
|
106
106
|
*/
|
|
107
107
|
export declare class HostCommandQueue {
|
|
108
|
-
private readonly
|
|
108
|
+
private readonly _pending;
|
|
109
109
|
/** Spawn an entity carrying `components`. `onSpawned` receives the new id
|
|
110
110
|
* once the spawn applies. Each entry's `values` is checked against its own
|
|
111
|
-
* `def`'s schema (`SpawnEntries`)
|
|
111
|
+
* `def`'s schema (`SpawnEntries`). The stored command stays schema-erased. */
|
|
112
112
|
spawn<Defs extends readonly ComponentDef[]>(components: SpawnEntries<Defs>, onSpawned?: (entityId: EntityID) => void): this;
|
|
113
113
|
despawn(entityId: EntityID): this;
|
|
114
114
|
/** Attach `def` (with complete `values`) to `entityId` (deferred to the
|
|
115
|
-
* drain). The namespaced-handle grammar
|
|
115
|
+
* drain). The namespaced-handle grammar, the queue is a commands buffer, so
|
|
116
116
|
* it drops the noun (`add`, not `addComponent`), matching `ctx.commands.add`
|
|
117
|
-
* and the queue's own bare `spawn
|
|
118
|
-
* complete (transport carries explicit intent per field
|
|
117
|
+
* and the queue's own bare `spawn`, `despawn`, `disable` and `enable`. Values are
|
|
118
|
+
* complete (transport carries explicit intent per field, see `spawnEntry`),
|
|
119
119
|
* unlike the authoring-side bundle sugar. */
|
|
120
120
|
add<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, values: CompleteFieldValues<S>): this;
|
|
121
121
|
/** Detach `def` from `entityId` (deferred to the drain). Bare `remove`
|
|
122
|
-
* matching `ctx.commands.remove
|
|
122
|
+
* matching `ctx.commands.remove`, see `add`. */
|
|
123
123
|
remove(entityId: EntityID, def: ComponentDef): this;
|
|
124
|
-
/** Set `field` of `def` on `entityId`. Applied
|
|
125
|
-
* the deferred structural ops
|
|
126
|
-
* `add
|
|
124
|
+
/** Set `field` of `def` on `entityId`. Applied immediately at the drain, unlike
|
|
125
|
+
* the deferred structural ops, so `def` must already be on `entityId`. Do not
|
|
126
|
+
* `add` and `spawn` `def` and `setField` it in the same frame: the add is
|
|
127
127
|
* still pending its flush when the immediate set runs (carry the value in
|
|
128
|
-
* `add
|
|
128
|
+
* `add` or `spawnEntry` instead). `applyHostCommand` throws an
|
|
129
129
|
* actionable error in `DEV` if you do. */
|
|
130
130
|
setField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, value: number): this;
|
|
131
131
|
disable(entityId: EntityID): this;
|
|
132
132
|
enable(entityId: EntityID): this;
|
|
133
133
|
/** Enqueue a pre-built command. The path for a SAB-ring codec, an editor's
|
|
134
|
-
* reified inverse, or a replay log
|
|
134
|
+
* reified inverse, or a replay log, all of which produce `HostCommand` data
|
|
135
135
|
* directly rather than calling the typed sugar above. */
|
|
136
136
|
push(cmd: HostCommand): this;
|
|
137
137
|
/** Commands buffered but not yet applied. */
|
|
138
|
-
get
|
|
139
|
-
/** Drop every buffered command without applying it
|
|
138
|
+
get pendingCount(): number;
|
|
139
|
+
/** Drop every buffered command without applying it, e.g. abandoning
|
|
140
140
|
* queued edits on a scene unload. Returns how many were dropped. Does not
|
|
141
141
|
* touch commands already drained into the world. */
|
|
142
142
|
clear(): number;
|
|
143
143
|
/**
|
|
144
144
|
* Apply and clear every buffered command. Called by the blessed apply system
|
|
145
|
-
* inside its schedule span
|
|
145
|
+
* inside its schedule span. Not part of the host-facing surface. Returns the
|
|
146
146
|
* count applied.
|
|
147
147
|
*
|
|
148
|
-
* `tap`, when present, is invoked with each command in apply order
|
|
149
|
-
* it is applied
|
|
150
|
-
* an
|
|
151
|
-
* un-recorded drain pays nothing
|
|
148
|
+
* `tap`, when present, is invoked with each command in apply order immediately before
|
|
149
|
+
* it is applied, the record and replay hook ({@link HostCommandRecorder}). It is
|
|
150
|
+
* an opt-in observer: the tap-free path keeps the original tight loop, so an
|
|
151
|
+
* un-recorded drain pays nothing.
|
|
152
152
|
*/
|
|
153
153
|
drain(ctx: SystemContext, tap?: (cmd: HostCommand) => void): number;
|
|
154
154
|
}
|
|
155
155
|
/** Bytes of the payload region inside one `command_ring` slot (15). The slot's
|
|
156
|
-
* leading byte is the opCode
|
|
156
|
+
* leading byte is the opCode. `COMMAND_RING_SLOT_BYTES` (16) is the whole slot. */
|
|
157
157
|
export declare const HOST_COMMAND_PAYLOAD_BYTES: number;
|
|
158
158
|
/**
|
|
159
|
-
* Ring codec for a `setField` on a
|
|
160
|
-
* are bound
|
|
159
|
+
* Ring codec for a `setField` on a fixed `(def, field)`. The component + field
|
|
160
|
+
* are bound into the codec, not carried in the bytes, the consumer-owned-codec
|
|
161
161
|
* rule (mirroring `command_dispatch`): the engine ships the mechanism, a
|
|
162
162
|
* consumer's codec knows which component+field an opcode means.
|
|
163
163
|
*
|
|
164
164
|
* Payload (15 B): `[ eid: u32 LE @0 ][ value: f64 LE @4 ][ _reserved: 3 B @12 ]`
|
|
165
165
|
*
|
|
166
|
-
* `value` rides as `f64
|
|
167
|
-
* range
|
|
166
|
+
* `value` rides as `f64`, which covers every numeric column type losslessly
|
|
167
|
+
* within range. The trailing 3 bytes stay zero. Packing the id as `u32` makes
|
|
168
168
|
* `setField` fit the 15-byte slot.
|
|
169
169
|
*/
|
|
170
170
|
export declare function ringSetFieldCodec<S extends ComponentSchema>(def: ComponentDef<S>, field: string & keyof S): PayloadCodec<HostCommand>;
|
|
171
|
-
/** Ring codec for `despawn
|
|
171
|
+
/** Ring codec for `despawn`, `[ eid: u32 LE @0 ]`, trailing 11 B reserved-zero. */
|
|
172
172
|
export declare function ringDespawnCodec(): PayloadCodec<HostCommand>;
|
|
173
|
-
/** Ring codec for `disable
|
|
173
|
+
/** Ring codec for `disable`, `[ eid: u32 LE @0 ]`, trailing 11 B reserved-zero. */
|
|
174
174
|
export declare function ringDisableCodec(): PayloadCodec<HostCommand>;
|
|
175
|
-
/** Ring codec for `enable
|
|
175
|
+
/** Ring codec for `enable`, `[ eid: u32 LE @0 ]`, trailing 11 B reserved-zero. */
|
|
176
176
|
export declare function ringEnableCodec(): PayloadCodec<HostCommand>;
|
|
177
177
|
/**
|
|
178
|
-
* Ring codec for `removeComponent` of a
|
|
179
|
-
* component bound into the codec (consumer-owned-codec rule). `spawn`
|
|
178
|
+
* Ring codec for `removeComponent` of a fixed `def`, `[ eid: u32 LE @0 ]`, the
|
|
179
|
+
* component bound into the codec (consumer-owned-codec rule). `spawn` and
|
|
180
180
|
* `addComponent` are deliberately absent: they carry component field values
|
|
181
181
|
* that don't fit the 15-byte slot generically, so they stay typed-transport-only
|
|
182
|
-
* (the prototype's finding
|
|
182
|
+
* (the prototype's finding, the in-process queue has no width limit).
|
|
183
183
|
*/
|
|
184
184
|
export declare function ringRemoveComponentCodec(def: ComponentDef): PayloadCodec<HostCommand>;
|
|
185
185
|
/** A ctx-aware applier for one ring opcode: runs on the system `ctx` (which the
|
|
186
186
|
* apply system holds) with the raw 15-byte payload. `tap`, when present, is the
|
|
187
|
-
* record
|
|
187
|
+
* record and replay hook, a generic, `onCommand`-bound applier decodes the
|
|
188
188
|
* slot to a `HostCommand` and feeds it to `tap` before applying, so ring-sourced
|
|
189
189
|
* commands land in the same log as typed-queue ones. A raw `on` applier (a
|
|
190
190
|
* consumer's own non-`HostCommand` op, e.g. the game's `spawn_unit`) has no
|
|
191
|
-
* `HostCommand` to surface and
|
|
191
|
+
* `HostCommand` to surface and ignores `tap`. */
|
|
192
192
|
export type RingCommandApplier = (ctx: SystemContext, payload: Uint8Array, tap?: (cmd: HostCommand) => void) => void;
|
|
193
193
|
/**
|
|
194
194
|
* Drains the SAB `command_ring` as the second host-command transport, dispatching
|
|
195
195
|
* each opcode to a bound applier. Two binding styles:
|
|
196
196
|
*
|
|
197
|
-
* - `onCommand(op, codec)
|
|
198
|
-
* through the
|
|
199
|
-
* uses). This is the generic cross-thread
|
|
200
|
-
* - `on(op, applier)
|
|
197
|
+
* - `onCommand(op, codec)`, decode the slot to a `HostCommand` and run it
|
|
198
|
+
* through the one `applyHostCommand` (the same dispatch the typed queue
|
|
199
|
+
* uses). This is the generic cross-thread and wire host-write path.
|
|
200
|
+
* - `on(op, applier)`, a raw ctx-aware handler for a consumer's own ring ops
|
|
201
201
|
* that aren't generic host commands (e.g. the game's `spawn_unit`, which runs
|
|
202
202
|
* a BFS placement + game spawn). Same drain, same ring: the "one bus".
|
|
203
203
|
*
|
|
204
|
-
* Opcodes + codecs are
|
|
204
|
+
* Opcodes + codecs are consumer-supplied, the engine ships the mechanism and the
|
|
205
205
|
* `ring_*_codec` factories, never the opcode numbers (mirrors `command_dispatch`).
|
|
206
206
|
*
|
|
207
|
-
* Exactly
|
|
207
|
+
* Exactly one dispatcher should drain a given ring, a second drain would consume
|
|
208
208
|
* the first's slots. The in-process apply system passes its dispatcher via
|
|
209
|
-
* `installHostCommandSeam({ ring })
|
|
209
|
+
* `installHostCommandSeam({ ring })`. A system that owns a timing-coupled drain
|
|
210
210
|
* point (e.g. `wave_spawn`, which must drain between the spatial-index build and
|
|
211
211
|
* the flow-field rebuild) constructs one and calls `drain` itself.
|
|
212
212
|
*/
|
|
213
213
|
export declare class HostCommandDispatcher {
|
|
214
|
-
private readonly
|
|
214
|
+
private readonly _appliers;
|
|
215
215
|
/** Bind a raw ctx-aware applier to `opCode`. Re-binding replaces. */
|
|
216
216
|
on(opCode: number, applier: RingCommandApplier): this;
|
|
217
|
-
/** Unbind `opCode
|
|
217
|
+
/** Unbind `opCode`. Returns whether a binding was removed. Subsequent
|
|
218
218
|
* slots carrying it hit the unknown-opcode path. */
|
|
219
219
|
off(opCode: number): boolean;
|
|
220
220
|
/** Bind a `HostCommand` codec to `opCode`: each matching slot is decoded and
|
|
221
|
-
* run through `applyHostCommand
|
|
222
|
-
* A drain-time `tap` (record
|
|
221
|
+
* run through `applyHostCommand`, the same dispatch the typed queue uses.
|
|
222
|
+
* A drain-time `tap` (record and replay) sees the decoded command before it
|
|
223
223
|
* applies, so ring-sourced commands share one log with the typed transport. */
|
|
224
224
|
onCommand(opCode: number, codec: PayloadCodec<HostCommand>): this;
|
|
225
225
|
/** Drain every pending slot, dispatching each to its bound applier. Unbound
|
|
226
|
-
* opcodes are skipped (the read head still advances
|
|
227
|
-
* `drainCommandRing`
|
|
228
|
-
* when present, is forwarded to each applier as the record
|
|
229
|
-
*
|
|
226
|
+
* opcodes are skipped (the read head still advances, matching
|
|
227
|
+
* `drainCommandRing` and `CommandDispatcher`). Returns slots drained. `tap`,
|
|
228
|
+
* when present, is forwarded to each applier as the record and replay hook.
|
|
229
|
+
* Only an `onCommand`-bound (generic `HostCommand`) opcode surfaces to it. */
|
|
230
230
|
drain(ctx: SystemContext, view: DataView, ringOff: number, tap?: (cmd: HostCommand) => void): number;
|
|
231
231
|
}
|
|
232
232
|
/**
|
|
233
|
-
* A per-tick sink the apply system feeds drained commands into
|
|
234
|
-
* of record
|
|
233
|
+
* A per-tick sink the apply system feeds drained commands into, the record side
|
|
234
|
+
* of record and replay. Declared structurally here (not imported from
|
|
235
235
|
* `command_log.ts`) so the seam needs no dependency on the recorder: the one-way
|
|
236
236
|
* edge is `command_log` → `host_commands`, never back. {@link HostCommandRecorder}
|
|
237
237
|
* is the in-tree implementation.
|
|
238
238
|
*
|
|
239
|
-
* The protocol the apply system follows: at each UPDATE
|
|
240
|
-
* `openTick(tick, dt)` to open that tick's bucket
|
|
239
|
+
* The protocol the apply system follows: at each `UPDATE`-phase drain it calls
|
|
240
|
+
* `openTick(tick, dt)` to open that tick's bucket. A `STARTUP`-phase drain skips
|
|
241
241
|
* `openTick`, so seed-time commands land in the recorder's startup bucket. Then
|
|
242
242
|
* every applied command (both transports) is handed to `record`.
|
|
243
243
|
*/
|
|
@@ -252,33 +252,51 @@ export interface HostCommandSink {
|
|
|
252
252
|
/** Options for {@link installHostCommandSeam}. */
|
|
253
253
|
export interface HostCommandSeamOptions {
|
|
254
254
|
/** Schedule phases whose head drains the queue. Default
|
|
255
|
-
* `[PRE_STARTUP, PRE_UPDATE]
|
|
256
|
-
|
|
255
|
+
* `[PRE_STARTUP, PRE_UPDATE]`, seed-time edits plus every frame. Either
|
|
256
|
+
* spelling of a phase is accepted, so a plugin drains at the phase its own
|
|
257
|
+
* `addPhase` returned. A phase of the startup loop drains at seed time, and
|
|
258
|
+
* a recorder buckets it as startup rather than as a tick. */
|
|
259
|
+
readonly schedules?: readonly SchedulePhase[];
|
|
257
260
|
/** Apply-system name (diagnostics). Default `"host_command_apply"`. */
|
|
258
261
|
readonly name?: string;
|
|
259
|
-
/** When provided, the apply system
|
|
260
|
-
* through this dispatcher at each schedule head
|
|
262
|
+
/** When provided, the apply system also drains the world's SAB `command_ring`
|
|
263
|
+
* through this dispatcher at each schedule head, the cross-thread and wire
|
|
261
264
|
* transport, resolving to the same `applyHostCommand` as the typed queue.
|
|
262
|
-
* The ECS `Store` always allocates a ring
|
|
265
|
+
* The ECS `Store` always allocates a ring. If one is somehow absent
|
|
263
266
|
* (`command_ring_off === 0`) the ring drain is a no-op. Bind opcodes with the
|
|
264
267
|
* `ring_*_codec` factories, or `dispatcher.on` for a consumer's own ops. */
|
|
265
268
|
readonly ring?: HostCommandDispatcher;
|
|
266
|
-
/** When provided, every command the apply system drains
|
|
267
|
-
* (typed queue
|
|
268
|
-
* tagged with the tick
|
|
269
|
+
/** When provided, every command the apply system drains, from both transports
|
|
270
|
+
* (typed queue and `onCommand`-bound ring ops), is logged into this sink,
|
|
271
|
+
* tagged with the tick and the `dt`, for record and replay. Off by default: an
|
|
269
272
|
* un-recorded seam keeps the original tap-free drain and pays nothing.
|
|
270
|
-
* {@link HostCommandRecorder} is the in-tree sink
|
|
273
|
+
* {@link HostCommandRecorder} is the in-tree sink. Replay it with
|
|
271
274
|
* `replayCommandLog`. */
|
|
272
275
|
readonly recorder?: HostCommandSink;
|
|
273
276
|
}
|
|
274
277
|
/**
|
|
275
|
-
* Tear down a seam installed by {@link installHostCommandSeam}
|
|
278
|
+
* Tear down a seam installed by {@link installHostCommandSeam}: removes
|
|
276
279
|
* its apply systems from the world's schedule and clears any still-buffered
|
|
277
280
|
* commands. The queue itself stays usable as a buffer, but nothing drains it
|
|
278
281
|
* until a new seam is installed. No-op (returns `false`) if `queue` was not
|
|
279
282
|
* produced by `installHostCommandSeam` on this world.
|
|
280
283
|
*/
|
|
281
284
|
export declare function uninstallHostCommandSeam(ecs: ECS, queue: HostCommandQueue): boolean;
|
|
285
|
+
/**
|
|
286
|
+
* Install the write seam on `world`: registers the blessed `exclusive`
|
|
287
|
+
* command-apply system at the head of the given schedules and returns the
|
|
288
|
+
* {@link HostCommandQueue} to enqueue into. Opt-in and explicit, the write
|
|
289
|
+
* counterpart to the Solid plugin's `solid()` read view.
|
|
290
|
+
*
|
|
291
|
+
* Call this before adding your own systems and before `ecs.startup()`: the
|
|
292
|
+
* apply system must be registered first so insertion order runs it at the head
|
|
293
|
+
* of its phase (a phase has no dedicated "first" slot), and the PRE_STARTUP
|
|
294
|
+
* drain only fires if it exists before startup.
|
|
295
|
+
*
|
|
296
|
+
* Lives in the world core, and not in a plugin: unlike the read side there is
|
|
297
|
+
* no framework dependency to quarantine. This is pure ECS plumbing over the
|
|
298
|
+
* deferred buffers and `SystemContext` the core already owns.
|
|
299
|
+
*/
|
|
282
300
|
export declare function installHostCommandSeam(ecs: ECS, opts?: HostCommandSeamOptions): HostCommandQueue;
|
|
283
301
|
export {};
|
|
284
302
|
//# sourceMappingURL=host_commands.d.ts.map
|