@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
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { ComponentDef, ComponentHandle, ComponentSchema, EntityID, CompleteFieldValues, HostCommand, HostCommandQueue, SpawnEntries } from '../../core/ecs/index.cjs';
|
|
2
2
|
/**
|
|
3
|
-
* Reads the committed value of one `(entity, component, field)` slot
|
|
3
|
+
* Reads the committed value of one `(entity, component, field)` slot, the editor
|
|
4
4
|
* uses it to seed a `setField` inverse with the value the edit replaced. Wire it
|
|
5
|
-
* to
|
|
6
|
-
*
|
|
5
|
+
* to a live read channel, such as a `@oasys/oecs/solid` view, or to
|
|
6
|
+
* `ecs.getField`. `undefined` for an unknown slot falls back to `0`.
|
|
7
7
|
*/
|
|
8
8
|
export type FieldReader = (entityId: EntityID, def: ComponentDef, field: string) => number | undefined;
|
|
9
9
|
/**
|
|
10
10
|
* A reified, undoable unit of editor work: the `forward` commands and their
|
|
11
11
|
* `inverse`, both plain `HostCommand` data on the one bus. The arrays are mutable
|
|
12
|
-
* internally (the spawn
|
|
12
|
+
* internally (the spawn and despawn id finalizers patch a slot at apply time) but the
|
|
13
13
|
* type handed back from {@link Editor.transaction} is read-only.
|
|
14
14
|
*/
|
|
15
15
|
export interface EditorTransaction {
|
|
@@ -17,24 +17,24 @@ export interface EditorTransaction {
|
|
|
17
17
|
readonly inverse: readonly HostCommand[];
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Accumulates the `forward
|
|
20
|
+
* Accumulates the `forward` and `inverse` commands for one transaction. Each method
|
|
21
21
|
* appends a forward command and its inverse, computing the inverse from the
|
|
22
|
-
* shadow
|
|
22
|
+
* shadow and read channel where needed. Spawn and despawn install id-finalizers
|
|
23
23
|
* (via `HostCommand.onSpawned`) that patch the apply-time id into the right slot.
|
|
24
24
|
*
|
|
25
|
-
* Obtained from {@link Editor.transaction}
|
|
25
|
+
* Obtained from {@link Editor.transaction}. Never constructed directly.
|
|
26
26
|
*/
|
|
27
27
|
export declare class TransactionBuilder {
|
|
28
|
-
private readonly
|
|
29
|
-
private readonly
|
|
30
|
-
/** Values staged by
|
|
28
|
+
private readonly _readField;
|
|
29
|
+
private readonly _shadow;
|
|
30
|
+
/** Values staged by this build, layered over the editor's shared shadow. Kept
|
|
31
31
|
* transaction-local so an aborted build (the callback throws before commit)
|
|
32
|
-
* leaves the shared shadow untouched
|
|
33
|
-
* `pendingField` and seed the
|
|
34
|
-
* held. The one merge point into the shared shadow is commit's `
|
|
35
|
-
private readonly
|
|
32
|
+
* leaves the shared shadow untouched, a phantom staged value would poison
|
|
33
|
+
* `pendingField` and seed the next edit's inverse with a value the world never
|
|
34
|
+
* held. The one merge point into the shared shadow is commit's `_applyShadow`. */
|
|
35
|
+
private readonly _staged;
|
|
36
36
|
/** @internal */
|
|
37
|
-
constructor(
|
|
37
|
+
constructor(_readField: FieldReader, _shadow: Map<string, number>);
|
|
38
38
|
private get _txn();
|
|
39
39
|
/**
|
|
40
40
|
* Spawn an entity carrying `components`. Inverse: despawn the created entity,
|
|
@@ -45,26 +45,26 @@ export declare class TransactionBuilder {
|
|
|
45
45
|
spawn<Defs extends readonly ComponentDef[]>(components: SpawnEntries<Defs>, onSpawned?: (entityId: EntityID) => void): this;
|
|
46
46
|
/**
|
|
47
47
|
* Despawn `entityId`. Inverse: respawn from `restore` (the components+values to
|
|
48
|
-
* recreate
|
|
49
|
-
*
|
|
48
|
+
* recreate, read them from the channel before despawning). Undo respawns the
|
|
49
|
+
* data, not the identity: the new entity gets a fresh id, and the respawn's
|
|
50
50
|
* `onSpawned` rewrites this despawn's target so redo removes the respawned
|
|
51
51
|
* entity rather than the dead original.
|
|
52
52
|
*/
|
|
53
53
|
despawn<Defs extends readonly ComponentDef[]>(entityId: EntityID, restore: SpawnEntries<Defs>): this;
|
|
54
54
|
/**
|
|
55
55
|
* Set `field` of `def` on `entityId` to `value`. Inverse: set it back to the value
|
|
56
|
-
* this edit replaced
|
|
56
|
+
* this edit replaced, read from the staged overlay and shadow (so stacked edits,
|
|
57
57
|
* within one build or before a commit, invert correctly) or, failing that, the
|
|
58
58
|
* read channel (`0` if unknown).
|
|
59
59
|
*/
|
|
60
60
|
setField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, value: number): this;
|
|
61
61
|
/** Attach `def` (with complete `values`) to `entityId`. Inverse: remove it.
|
|
62
|
-
* Bare `add
|
|
62
|
+
* Bare `add`, the namespaced-handle grammar (matches `ctx.commands.add` and
|
|
63
63
|
* the queue's `add`), not `addComponent`. */
|
|
64
64
|
add<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, values: CompleteFieldValues<S>): this;
|
|
65
65
|
/**
|
|
66
66
|
* Detach `def` from `entityId`. Inverse: re-add it from `restore` (the field values
|
|
67
|
-
* to recreate
|
|
67
|
+
* to recreate, read them from the channel before removing). Bare `remove`, see `add`.
|
|
68
68
|
*/
|
|
69
69
|
remove<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, restore: CompleteFieldValues<S>): this;
|
|
70
70
|
/** Disable `entityId`. Inverse: enable it. */
|
|
@@ -73,40 +73,40 @@ export declare class TransactionBuilder {
|
|
|
73
73
|
enable(entityId: EntityID): this;
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* The editor's undo
|
|
77
|
-
* reified {@link EditorTransaction} pushed onto the undo stack
|
|
78
|
-
* enqueue its inverse
|
|
79
|
-
* (`spawn`, `setField`, …) are sugar for one-command transactions
|
|
76
|
+
* The editor's undo and redo manager over a {@link HostCommandQueue}. Each action is a
|
|
77
|
+
* reified {@link EditorTransaction} pushed onto the undo stack. `undo()` and `redo()`
|
|
78
|
+
* enqueue its inverse and forward on the same bus. The single-action methods
|
|
79
|
+
* (`spawn`, `setField`, …) are sugar for one-command transactions. `transaction`
|
|
80
80
|
* groups several into one undo entry.
|
|
81
81
|
*
|
|
82
82
|
* Construct with the queue and a {@link FieldReader} for the committed read
|
|
83
83
|
* channel (used to seed `setField` inverses).
|
|
84
84
|
*/
|
|
85
85
|
export declare class Editor {
|
|
86
|
-
private readonly
|
|
87
|
-
private readonly
|
|
88
|
-
private readonly
|
|
89
|
-
private readonly
|
|
90
|
-
/** onChange subscribers
|
|
91
|
-
private readonly
|
|
86
|
+
private readonly _queue;
|
|
87
|
+
private readonly _readField;
|
|
88
|
+
private readonly _undoStack;
|
|
89
|
+
private readonly _redoStack;
|
|
90
|
+
/** onChange subscribers, see {@link onChange}. */
|
|
91
|
+
private readonly _listeners;
|
|
92
92
|
/** Per-`(entity, component, field)` shadow of edited values, for inverse correctness. */
|
|
93
|
-
private readonly
|
|
94
|
-
constructor(
|
|
93
|
+
private readonly _shadow;
|
|
94
|
+
constructor(_queue: HostCommandQueue, _readField: FieldReader);
|
|
95
95
|
/**
|
|
96
|
-
* Group several actions into
|
|
97
|
-
* {@link TransactionBuilder}
|
|
98
|
-
* commands
|
|
96
|
+
* Group several actions into one undo entry. Build them on the passed
|
|
97
|
+
* {@link TransactionBuilder}. The whole group commits, which enqueues its
|
|
98
|
+
* forward commands, and lands on the undo stack atomically, clearing the redo stack.
|
|
99
99
|
*/
|
|
100
100
|
transaction(build: (tx: TransactionBuilder) => void): EditorTransaction;
|
|
101
101
|
/** Spawn `components` as its own undo entry. `onSpawned` reports the new id. */
|
|
102
102
|
spawn<Defs extends readonly ComponentDef[]>(components: SpawnEntries<Defs>, onSpawned?: (entityId: EntityID) => void): EditorTransaction;
|
|
103
|
-
/** Despawn `entityId` as its own undo entry
|
|
103
|
+
/** Despawn `entityId` as its own undo entry. `restore` recreates it on undo. */
|
|
104
104
|
despawn<Defs extends readonly ComponentDef[]>(entityId: EntityID, restore: SpawnEntries<Defs>): EditorTransaction;
|
|
105
105
|
/** Set one field as its own undo entry. */
|
|
106
106
|
setField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, value: number): EditorTransaction;
|
|
107
107
|
/** Attach a component as its own undo entry. Bare `add` (see `TransactionBuilder.add`). */
|
|
108
108
|
add<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, values: CompleteFieldValues<S>): EditorTransaction;
|
|
109
|
-
/** Detach a component as its own undo entry
|
|
109
|
+
/** Detach a component as its own undo entry. `restore` re-adds it on undo. Bare `remove`. */
|
|
110
110
|
remove<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, restore: CompleteFieldValues<S>): EditorTransaction;
|
|
111
111
|
/** Disable `entityId` as its own undo entry. */
|
|
112
112
|
disable(entityId: EntityID): EditorTransaction;
|
|
@@ -114,7 +114,7 @@ export declare class Editor {
|
|
|
114
114
|
enable(entityId: EntityID): EditorTransaction;
|
|
115
115
|
/**
|
|
116
116
|
* Undo the most recent transaction: enqueue its inverse commands (in reverse
|
|
117
|
-
* order
|
|
117
|
+
* order, a group unwinds last-action-first) on the bus and move it to the redo
|
|
118
118
|
* stack. Returns `false` if the undo stack is empty.
|
|
119
119
|
*/
|
|
120
120
|
undo(): boolean;
|
|
@@ -126,47 +126,47 @@ export declare class Editor {
|
|
|
126
126
|
redo(): boolean;
|
|
127
127
|
/** Drop both stacks (e.g. on load). Does not touch the world. */
|
|
128
128
|
clear(): void;
|
|
129
|
-
/** Current stack depths
|
|
129
|
+
/** Current stack depths, for an "Undo (3)" or "Redo" affordance. */
|
|
130
130
|
depths(): {
|
|
131
131
|
undo: number;
|
|
132
132
|
redo: number;
|
|
133
133
|
};
|
|
134
|
-
/** `true` when `undo()` would do something
|
|
134
|
+
/** `true` when `undo()` would do something, allocation-free. */
|
|
135
135
|
get canUndo(): boolean;
|
|
136
|
-
/** `true` when `redo()` would do something
|
|
136
|
+
/** `true` when `redo()` would do something, allocation-free. */
|
|
137
137
|
get canRedo(): boolean;
|
|
138
138
|
/**
|
|
139
|
-
* Subscribe to undo
|
|
140
|
-
* redo, and clear
|
|
139
|
+
* Subscribe to undo-stack and redo-stack changes: fires after every commit, undo,
|
|
140
|
+
* redo, and clear, the push signal an "Undo (3)" affordance needs instead
|
|
141
141
|
* of polling `depths()` per frame. Returns an unsubscribe function.
|
|
142
|
-
* Callbacks run synchronously in subscription order
|
|
143
|
-
* `canRedo`
|
|
142
|
+
* Callbacks run synchronously in subscription order. Read `canUndo`,
|
|
143
|
+
* `canRedo` and `depths()` inside.
|
|
144
144
|
*/
|
|
145
145
|
onChange(cb: () => void): () => void;
|
|
146
|
-
private
|
|
146
|
+
private _notify;
|
|
147
147
|
/** Read one committed `(entity, component, field)` slot through the reader
|
|
148
|
-
* this editor was constructed with
|
|
148
|
+
* this editor was constructed with, the default read for `fieldHandle`
|
|
149
149
|
* when no channel thunk is supplied. */
|
|
150
150
|
committedField(entityId: EntityID, def: ComponentDef, field: string): number | undefined;
|
|
151
151
|
/**
|
|
152
152
|
* The pending value the editor believes for a field that the committed read
|
|
153
|
-
* channel has
|
|
153
|
+
* channel has not caught up to yet (the shadow), or `undefined` if none. Lets an
|
|
154
154
|
* inspector echo an edit between the `set` and the tick that commits it.
|
|
155
155
|
*
|
|
156
156
|
* Self-resolving: once the read channel reports the shadowed value (the edit
|
|
157
|
-
* landed)
|
|
158
|
-
* component removed)
|
|
157
|
+
* landed), or reports `undefined` (the slot is gone: entity despawned or
|
|
158
|
+
* component removed), the entry is dropped and this returns `undefined`, so
|
|
159
159
|
* `pending` does not outlive its set→commit window and shadow a later external
|
|
160
160
|
* write, nor a dead slot's lifetime. The one
|
|
161
161
|
* residual: if an external write changes the field to a *different* value within
|
|
162
162
|
* the same window before this is next consulted, `pending` can read stale until
|
|
163
163
|
* the next edit to the slot. `value` (the read channel) is always the source of
|
|
164
|
-
* truth
|
|
164
|
+
* truth. `pending` is only the optimistic bridge.
|
|
165
165
|
*/
|
|
166
166
|
pendingField(entityId: EntityID, def: ComponentHandle, field: string): number | undefined;
|
|
167
167
|
/** Enqueue forward commands, record the transaction, clear redo, sync shadow. */
|
|
168
|
-
private
|
|
169
|
-
/** Keep the setField shadow in step with the commands
|
|
170
|
-
private
|
|
168
|
+
private _commit;
|
|
169
|
+
/** Keep the setField shadow in step with the commands only enqueued. */
|
|
170
|
+
private _applyShadow;
|
|
171
171
|
}
|
|
172
172
|
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { ComponentDef, ComponentHandle, ComponentSchema, EntityID, CompleteFieldValues, HostCommand, HostCommandQueue, SpawnEntries } from '../../core/ecs/index.js';
|
|
2
2
|
/**
|
|
3
|
-
* Reads the committed value of one `(entity, component, field)` slot
|
|
3
|
+
* Reads the committed value of one `(entity, component, field)` slot, the editor
|
|
4
4
|
* uses it to seed a `setField` inverse with the value the edit replaced. Wire it
|
|
5
|
-
* to
|
|
6
|
-
*
|
|
5
|
+
* to a live read channel, such as a `@oasys/oecs/solid` view, or to
|
|
6
|
+
* `ecs.getField`. `undefined` for an unknown slot falls back to `0`.
|
|
7
7
|
*/
|
|
8
8
|
export type FieldReader = (entityId: EntityID, def: ComponentDef, field: string) => number | undefined;
|
|
9
9
|
/**
|
|
10
10
|
* A reified, undoable unit of editor work: the `forward` commands and their
|
|
11
11
|
* `inverse`, both plain `HostCommand` data on the one bus. The arrays are mutable
|
|
12
|
-
* internally (the spawn
|
|
12
|
+
* internally (the spawn and despawn id finalizers patch a slot at apply time) but the
|
|
13
13
|
* type handed back from {@link Editor.transaction} is read-only.
|
|
14
14
|
*/
|
|
15
15
|
export interface EditorTransaction {
|
|
@@ -17,24 +17,24 @@ export interface EditorTransaction {
|
|
|
17
17
|
readonly inverse: readonly HostCommand[];
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Accumulates the `forward
|
|
20
|
+
* Accumulates the `forward` and `inverse` commands for one transaction. Each method
|
|
21
21
|
* appends a forward command and its inverse, computing the inverse from the
|
|
22
|
-
* shadow
|
|
22
|
+
* shadow and read channel where needed. Spawn and despawn install id-finalizers
|
|
23
23
|
* (via `HostCommand.onSpawned`) that patch the apply-time id into the right slot.
|
|
24
24
|
*
|
|
25
|
-
* Obtained from {@link Editor.transaction}
|
|
25
|
+
* Obtained from {@link Editor.transaction}. Never constructed directly.
|
|
26
26
|
*/
|
|
27
27
|
export declare class TransactionBuilder {
|
|
28
|
-
private readonly
|
|
29
|
-
private readonly
|
|
30
|
-
/** Values staged by
|
|
28
|
+
private readonly _readField;
|
|
29
|
+
private readonly _shadow;
|
|
30
|
+
/** Values staged by this build, layered over the editor's shared shadow. Kept
|
|
31
31
|
* transaction-local so an aborted build (the callback throws before commit)
|
|
32
|
-
* leaves the shared shadow untouched
|
|
33
|
-
* `pendingField` and seed the
|
|
34
|
-
* held. The one merge point into the shared shadow is commit's `
|
|
35
|
-
private readonly
|
|
32
|
+
* leaves the shared shadow untouched, a phantom staged value would poison
|
|
33
|
+
* `pendingField` and seed the next edit's inverse with a value the world never
|
|
34
|
+
* held. The one merge point into the shared shadow is commit's `_applyShadow`. */
|
|
35
|
+
private readonly _staged;
|
|
36
36
|
/** @internal */
|
|
37
|
-
constructor(
|
|
37
|
+
constructor(_readField: FieldReader, _shadow: Map<string, number>);
|
|
38
38
|
private get _txn();
|
|
39
39
|
/**
|
|
40
40
|
* Spawn an entity carrying `components`. Inverse: despawn the created entity,
|
|
@@ -45,26 +45,26 @@ export declare class TransactionBuilder {
|
|
|
45
45
|
spawn<Defs extends readonly ComponentDef[]>(components: SpawnEntries<Defs>, onSpawned?: (entityId: EntityID) => void): this;
|
|
46
46
|
/**
|
|
47
47
|
* Despawn `entityId`. Inverse: respawn from `restore` (the components+values to
|
|
48
|
-
* recreate
|
|
49
|
-
*
|
|
48
|
+
* recreate, read them from the channel before despawning). Undo respawns the
|
|
49
|
+
* data, not the identity: the new entity gets a fresh id, and the respawn's
|
|
50
50
|
* `onSpawned` rewrites this despawn's target so redo removes the respawned
|
|
51
51
|
* entity rather than the dead original.
|
|
52
52
|
*/
|
|
53
53
|
despawn<Defs extends readonly ComponentDef[]>(entityId: EntityID, restore: SpawnEntries<Defs>): this;
|
|
54
54
|
/**
|
|
55
55
|
* Set `field` of `def` on `entityId` to `value`. Inverse: set it back to the value
|
|
56
|
-
* this edit replaced
|
|
56
|
+
* this edit replaced, read from the staged overlay and shadow (so stacked edits,
|
|
57
57
|
* within one build or before a commit, invert correctly) or, failing that, the
|
|
58
58
|
* read channel (`0` if unknown).
|
|
59
59
|
*/
|
|
60
60
|
setField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, value: number): this;
|
|
61
61
|
/** Attach `def` (with complete `values`) to `entityId`. Inverse: remove it.
|
|
62
|
-
* Bare `add
|
|
62
|
+
* Bare `add`, the namespaced-handle grammar (matches `ctx.commands.add` and
|
|
63
63
|
* the queue's `add`), not `addComponent`. */
|
|
64
64
|
add<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, values: CompleteFieldValues<S>): this;
|
|
65
65
|
/**
|
|
66
66
|
* Detach `def` from `entityId`. Inverse: re-add it from `restore` (the field values
|
|
67
|
-
* to recreate
|
|
67
|
+
* to recreate, read them from the channel before removing). Bare `remove`, see `add`.
|
|
68
68
|
*/
|
|
69
69
|
remove<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, restore: CompleteFieldValues<S>): this;
|
|
70
70
|
/** Disable `entityId`. Inverse: enable it. */
|
|
@@ -73,40 +73,40 @@ export declare class TransactionBuilder {
|
|
|
73
73
|
enable(entityId: EntityID): this;
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* The editor's undo
|
|
77
|
-
* reified {@link EditorTransaction} pushed onto the undo stack
|
|
78
|
-
* enqueue its inverse
|
|
79
|
-
* (`spawn`, `setField`, …) are sugar for one-command transactions
|
|
76
|
+
* The editor's undo and redo manager over a {@link HostCommandQueue}. Each action is a
|
|
77
|
+
* reified {@link EditorTransaction} pushed onto the undo stack. `undo()` and `redo()`
|
|
78
|
+
* enqueue its inverse and forward on the same bus. The single-action methods
|
|
79
|
+
* (`spawn`, `setField`, …) are sugar for one-command transactions. `transaction`
|
|
80
80
|
* groups several into one undo entry.
|
|
81
81
|
*
|
|
82
82
|
* Construct with the queue and a {@link FieldReader} for the committed read
|
|
83
83
|
* channel (used to seed `setField` inverses).
|
|
84
84
|
*/
|
|
85
85
|
export declare class Editor {
|
|
86
|
-
private readonly
|
|
87
|
-
private readonly
|
|
88
|
-
private readonly
|
|
89
|
-
private readonly
|
|
90
|
-
/** onChange subscribers
|
|
91
|
-
private readonly
|
|
86
|
+
private readonly _queue;
|
|
87
|
+
private readonly _readField;
|
|
88
|
+
private readonly _undoStack;
|
|
89
|
+
private readonly _redoStack;
|
|
90
|
+
/** onChange subscribers, see {@link onChange}. */
|
|
91
|
+
private readonly _listeners;
|
|
92
92
|
/** Per-`(entity, component, field)` shadow of edited values, for inverse correctness. */
|
|
93
|
-
private readonly
|
|
94
|
-
constructor(
|
|
93
|
+
private readonly _shadow;
|
|
94
|
+
constructor(_queue: HostCommandQueue, _readField: FieldReader);
|
|
95
95
|
/**
|
|
96
|
-
* Group several actions into
|
|
97
|
-
* {@link TransactionBuilder}
|
|
98
|
-
* commands
|
|
96
|
+
* Group several actions into one undo entry. Build them on the passed
|
|
97
|
+
* {@link TransactionBuilder}. The whole group commits, which enqueues its
|
|
98
|
+
* forward commands, and lands on the undo stack atomically, clearing the redo stack.
|
|
99
99
|
*/
|
|
100
100
|
transaction(build: (tx: TransactionBuilder) => void): EditorTransaction;
|
|
101
101
|
/** Spawn `components` as its own undo entry. `onSpawned` reports the new id. */
|
|
102
102
|
spawn<Defs extends readonly ComponentDef[]>(components: SpawnEntries<Defs>, onSpawned?: (entityId: EntityID) => void): EditorTransaction;
|
|
103
|
-
/** Despawn `entityId` as its own undo entry
|
|
103
|
+
/** Despawn `entityId` as its own undo entry. `restore` recreates it on undo. */
|
|
104
104
|
despawn<Defs extends readonly ComponentDef[]>(entityId: EntityID, restore: SpawnEntries<Defs>): EditorTransaction;
|
|
105
105
|
/** Set one field as its own undo entry. */
|
|
106
106
|
setField<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, value: number): EditorTransaction;
|
|
107
107
|
/** Attach a component as its own undo entry. Bare `add` (see `TransactionBuilder.add`). */
|
|
108
108
|
add<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, values: CompleteFieldValues<S>): EditorTransaction;
|
|
109
|
-
/** Detach a component as its own undo entry
|
|
109
|
+
/** Detach a component as its own undo entry. `restore` re-adds it on undo. Bare `remove`. */
|
|
110
110
|
remove<S extends ComponentSchema>(entityId: EntityID, def: ComponentDef<S>, restore: CompleteFieldValues<S>): EditorTransaction;
|
|
111
111
|
/** Disable `entityId` as its own undo entry. */
|
|
112
112
|
disable(entityId: EntityID): EditorTransaction;
|
|
@@ -114,7 +114,7 @@ export declare class Editor {
|
|
|
114
114
|
enable(entityId: EntityID): EditorTransaction;
|
|
115
115
|
/**
|
|
116
116
|
* Undo the most recent transaction: enqueue its inverse commands (in reverse
|
|
117
|
-
* order
|
|
117
|
+
* order, a group unwinds last-action-first) on the bus and move it to the redo
|
|
118
118
|
* stack. Returns `false` if the undo stack is empty.
|
|
119
119
|
*/
|
|
120
120
|
undo(): boolean;
|
|
@@ -126,47 +126,47 @@ export declare class Editor {
|
|
|
126
126
|
redo(): boolean;
|
|
127
127
|
/** Drop both stacks (e.g. on load). Does not touch the world. */
|
|
128
128
|
clear(): void;
|
|
129
|
-
/** Current stack depths
|
|
129
|
+
/** Current stack depths, for an "Undo (3)" or "Redo" affordance. */
|
|
130
130
|
depths(): {
|
|
131
131
|
undo: number;
|
|
132
132
|
redo: number;
|
|
133
133
|
};
|
|
134
|
-
/** `true` when `undo()` would do something
|
|
134
|
+
/** `true` when `undo()` would do something, allocation-free. */
|
|
135
135
|
get canUndo(): boolean;
|
|
136
|
-
/** `true` when `redo()` would do something
|
|
136
|
+
/** `true` when `redo()` would do something, allocation-free. */
|
|
137
137
|
get canRedo(): boolean;
|
|
138
138
|
/**
|
|
139
|
-
* Subscribe to undo
|
|
140
|
-
* redo, and clear
|
|
139
|
+
* Subscribe to undo-stack and redo-stack changes: fires after every commit, undo,
|
|
140
|
+
* redo, and clear, the push signal an "Undo (3)" affordance needs instead
|
|
141
141
|
* of polling `depths()` per frame. Returns an unsubscribe function.
|
|
142
|
-
* Callbacks run synchronously in subscription order
|
|
143
|
-
* `canRedo`
|
|
142
|
+
* Callbacks run synchronously in subscription order. Read `canUndo`,
|
|
143
|
+
* `canRedo` and `depths()` inside.
|
|
144
144
|
*/
|
|
145
145
|
onChange(cb: () => void): () => void;
|
|
146
|
-
private
|
|
146
|
+
private _notify;
|
|
147
147
|
/** Read one committed `(entity, component, field)` slot through the reader
|
|
148
|
-
* this editor was constructed with
|
|
148
|
+
* this editor was constructed with, the default read for `fieldHandle`
|
|
149
149
|
* when no channel thunk is supplied. */
|
|
150
150
|
committedField(entityId: EntityID, def: ComponentDef, field: string): number | undefined;
|
|
151
151
|
/**
|
|
152
152
|
* The pending value the editor believes for a field that the committed read
|
|
153
|
-
* channel has
|
|
153
|
+
* channel has not caught up to yet (the shadow), or `undefined` if none. Lets an
|
|
154
154
|
* inspector echo an edit between the `set` and the tick that commits it.
|
|
155
155
|
*
|
|
156
156
|
* Self-resolving: once the read channel reports the shadowed value (the edit
|
|
157
|
-
* landed)
|
|
158
|
-
* component removed)
|
|
157
|
+
* landed), or reports `undefined` (the slot is gone: entity despawned or
|
|
158
|
+
* component removed), the entry is dropped and this returns `undefined`, so
|
|
159
159
|
* `pending` does not outlive its set→commit window and shadow a later external
|
|
160
160
|
* write, nor a dead slot's lifetime. The one
|
|
161
161
|
* residual: if an external write changes the field to a *different* value within
|
|
162
162
|
* the same window before this is next consulted, `pending` can read stale until
|
|
163
163
|
* the next edit to the slot. `value` (the read channel) is always the source of
|
|
164
|
-
* truth
|
|
164
|
+
* truth. `pending` is only the optimistic bridge.
|
|
165
165
|
*/
|
|
166
166
|
pendingField(entityId: EntityID, def: ComponentHandle, field: string): number | undefined;
|
|
167
167
|
/** Enqueue forward commands, record the transaction, clear redo, sync shadow. */
|
|
168
|
-
private
|
|
169
|
-
/** Keep the setField shadow in step with the commands
|
|
170
|
-
private
|
|
168
|
+
private _commit;
|
|
169
|
+
/** Keep the setField shadow in step with the commands only enqueued. */
|
|
170
|
+
private _applyShadow;
|
|
171
171
|
}
|
|
172
172
|
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/plugins/editor/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,38 +2,38 @@ import { ComponentDef, ComponentSchema, EntityID } from '../../core/ecs/index.cj
|
|
|
2
2
|
import { Editor } from './editor.cjs';
|
|
3
3
|
/**
|
|
4
4
|
* A two-way handle on one `(entity, component, field)` slot. `value` reads the
|
|
5
|
-
*
|
|
5
|
+
* live channel, tracked when read inside a tracking scope. `set` enqueues an
|
|
6
6
|
* undoable `setField` command via the editor.
|
|
7
7
|
*/
|
|
8
8
|
export interface FieldHandle {
|
|
9
9
|
/**
|
|
10
|
-
* The field's current value through the
|
|
10
|
+
* The field's current value through the live read channel, `undefined`
|
|
11
11
|
* until the channel has it (e.g. before the spawn's first commit). Read inside
|
|
12
|
-
* a tracking scope to subscribe to the channel
|
|
13
|
-
*
|
|
12
|
+
* a tracking scope to subscribe to the channel. The value reflects the last
|
|
13
|
+
* committed tick, so a fresh `set` shows up on the next tick.
|
|
14
14
|
*/
|
|
15
15
|
readonly value: number | undefined;
|
|
16
|
-
/** Enqueue an undoable `setField` for this slot
|
|
16
|
+
/** Enqueue an undoable `setField` for this slot. Applied at the next tick. */
|
|
17
17
|
set(value: number): void;
|
|
18
18
|
/**
|
|
19
19
|
* The editor's pending (not-yet-committed) value for this slot, or `undefined`
|
|
20
|
-
* if none
|
|
20
|
+
* if none, an untracked read of the editor shadow, for an optimistic echo
|
|
21
21
|
* between the `set` and its commit. Self-resolves to `undefined` once the read
|
|
22
|
-
* channel catches up, so it does not outlive the edit.
|
|
23
|
-
* `value`
|
|
24
|
-
* truth.
|
|
22
|
+
* channel catches up, so it does not outlive the edit. It does not subscribe,
|
|
23
|
+
* so it is no substitute for `value` inside a tracking scope. `value` is the
|
|
24
|
+
* source of truth.
|
|
25
25
|
*/
|
|
26
26
|
readonly pending: number | undefined;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Build a {@link FieldHandle} for one `(entityId, def, field)` slot. `read` is the
|
|
30
|
-
* tracked read of the
|
|
31
|
-
* `() =>
|
|
30
|
+
* tracked read of the live channel for this field, for example
|
|
31
|
+
* `() => view.cell(entityId)()?.x`. `set` routes through `editor.setField`, so the
|
|
32
32
|
* edit is queued, batched, and undoable.
|
|
33
33
|
*
|
|
34
34
|
* `read` is optional: omitted, the handle reads through the editor's own
|
|
35
35
|
* committed-channel reader (`editor.committedField`). That default is correct
|
|
36
|
-
* but
|
|
36
|
+
* but untracked, so pass the channel thunk when the handle's `value` must
|
|
37
37
|
* subscribe inside a tracking scope.
|
|
38
38
|
*/
|
|
39
39
|
export declare function fieldHandle<S extends ComponentSchema>(editor: Editor, entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, read?: () => number | undefined): FieldHandle;
|
|
@@ -2,38 +2,38 @@ import { ComponentDef, ComponentSchema, EntityID } from '../../core/ecs/index.js
|
|
|
2
2
|
import { Editor } from './editor.js';
|
|
3
3
|
/**
|
|
4
4
|
* A two-way handle on one `(entity, component, field)` slot. `value` reads the
|
|
5
|
-
*
|
|
5
|
+
* live channel, tracked when read inside a tracking scope. `set` enqueues an
|
|
6
6
|
* undoable `setField` command via the editor.
|
|
7
7
|
*/
|
|
8
8
|
export interface FieldHandle {
|
|
9
9
|
/**
|
|
10
|
-
* The field's current value through the
|
|
10
|
+
* The field's current value through the live read channel, `undefined`
|
|
11
11
|
* until the channel has it (e.g. before the spawn's first commit). Read inside
|
|
12
|
-
* a tracking scope to subscribe to the channel
|
|
13
|
-
*
|
|
12
|
+
* a tracking scope to subscribe to the channel. The value reflects the last
|
|
13
|
+
* committed tick, so a fresh `set` shows up on the next tick.
|
|
14
14
|
*/
|
|
15
15
|
readonly value: number | undefined;
|
|
16
|
-
/** Enqueue an undoable `setField` for this slot
|
|
16
|
+
/** Enqueue an undoable `setField` for this slot. Applied at the next tick. */
|
|
17
17
|
set(value: number): void;
|
|
18
18
|
/**
|
|
19
19
|
* The editor's pending (not-yet-committed) value for this slot, or `undefined`
|
|
20
|
-
* if none
|
|
20
|
+
* if none, an untracked read of the editor shadow, for an optimistic echo
|
|
21
21
|
* between the `set` and its commit. Self-resolves to `undefined` once the read
|
|
22
|
-
* channel catches up, so it does not outlive the edit.
|
|
23
|
-
* `value`
|
|
24
|
-
* truth.
|
|
22
|
+
* channel catches up, so it does not outlive the edit. It does not subscribe,
|
|
23
|
+
* so it is no substitute for `value` inside a tracking scope. `value` is the
|
|
24
|
+
* source of truth.
|
|
25
25
|
*/
|
|
26
26
|
readonly pending: number | undefined;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Build a {@link FieldHandle} for one `(entityId, def, field)` slot. `read` is the
|
|
30
|
-
* tracked read of the
|
|
31
|
-
* `() =>
|
|
30
|
+
* tracked read of the live channel for this field, for example
|
|
31
|
+
* `() => view.cell(entityId)()?.x`. `set` routes through `editor.setField`, so the
|
|
32
32
|
* edit is queued, batched, and undoable.
|
|
33
33
|
*
|
|
34
34
|
* `read` is optional: omitted, the handle reads through the editor's own
|
|
35
35
|
* committed-channel reader (`editor.committedField`). That default is correct
|
|
36
|
-
* but
|
|
36
|
+
* but untracked, so pass the channel thunk when the handle's `value` must
|
|
37
37
|
* subscribe inside a tracking scope.
|
|
38
38
|
*/
|
|
39
39
|
export declare function fieldHandle<S extends ComponentSchema>(editor: Editor, entityId: EntityID, def: ComponentDef<S>, field: string & keyof S, read?: () => number | undefined): FieldHandle;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field_handle.d.ts","sourceRoot":"","sources":["../../../src/plugins/editor/field_handle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,8EAA8E;IAC9E,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,EACpD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EACpB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,EACvB,IAAI,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GAC7B,WAAW,CAcb"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host write seam's editor layer.
|
|
3
|
+
*
|
|
4
|
+
* Reified undo and redo, and the inspector field handle, built on the shipped
|
|
5
|
+
* typed `HostCommandQueue`. Undo and redo are application policy, so this ships
|
|
6
|
+
* on its own subpath and not in the world core. A caller constructs an `Editor`
|
|
7
|
+
* itself, and a world installs nothing for it. It pulls no third-party
|
|
8
|
+
* dependency, because the field handle reads through a caller-supplied thunk.
|
|
9
|
+
*
|
|
10
|
+
* - `Editor`, reified `EditorTransaction`s on undo and redo stacks, with
|
|
11
|
+
* transaction grouping. `undo()` and `redo()` enqueue the inverse and forward on the
|
|
12
|
+
* same bus, applied at the next schedule head (undo is only another command).
|
|
13
|
+
* - `fieldHandle`, pairs a read of a live channel with a `setField` command, so
|
|
14
|
+
* an inspector field feels two-way while staying safe and undoable.
|
|
15
|
+
*
|
|
16
|
+
* Reachable as `@oasys/oecs/editor`. Pair it with `@oasys/oecs/solid`, whose
|
|
17
|
+
* `ecs.solid.component` and `ecs.solid.singleton` views are the read side the
|
|
18
|
+
* field handle reads through.
|
|
19
|
+
*/
|
|
20
|
+
export { Editor, TransactionBuilder, type EditorTransaction, type FieldReader } from './editor.cjs';
|
|
21
|
+
export { fieldHandle, type FieldHandle } from './field_handle.cjs';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host write seam's editor layer.
|
|
3
|
+
*
|
|
4
|
+
* Reified undo and redo, and the inspector field handle, built on the shipped
|
|
5
|
+
* typed `HostCommandQueue`. Undo and redo are application policy, so this ships
|
|
6
|
+
* on its own subpath and not in the world core. A caller constructs an `Editor`
|
|
7
|
+
* itself, and a world installs nothing for it. It pulls no third-party
|
|
8
|
+
* dependency, because the field handle reads through a caller-supplied thunk.
|
|
9
|
+
*
|
|
10
|
+
* - `Editor`, reified `EditorTransaction`s on undo and redo stacks, with
|
|
11
|
+
* transaction grouping. `undo()` and `redo()` enqueue the inverse and forward on the
|
|
12
|
+
* same bus, applied at the next schedule head (undo is only another command).
|
|
13
|
+
* - `fieldHandle`, pairs a read of a live channel with a `setField` command, so
|
|
14
|
+
* an inspector field feels two-way while staying safe and undoable.
|
|
15
|
+
*
|
|
16
|
+
* Reachable as `@oasys/oecs/editor`. Pair it with `@oasys/oecs/solid`, whose
|
|
17
|
+
* `ecs.solid.component` and `ecs.solid.singleton` views are the read side the
|
|
18
|
+
* field handle reads through.
|
|
19
|
+
*/
|
|
20
|
+
export { Editor, TransactionBuilder, type EditorTransaction, type FieldReader } from './editor.js';
|
|
21
|
+
export { fieldHandle, type FieldHandle } from './field_handle.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/editor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function o(r,t,e){return`${r}:${t.id}:${e}`}const a=new WeakMap;class h{constructor(t,e){this._readField=t,this._shadow=e,a.set(this,{forward:[],inverse:[]})}_staged=new Map;get _txn(){return a.get(this)}spawn(t,e){const s={kind:"despawn",eid:0};return this._txn.inverse.push(s),this._txn.forward.push({kind:"spawn",components:t,onSpawned:n=>{s.eid=n,e?.(n)}}),this}despawn(t,e){const s={kind:"despawn",eid:t};return this._txn.forward.push(s),this._txn.inverse.push({kind:"spawn",components:e,onSpawned:n=>{s.eid=n}}),this}setField(t,e,s,n){const i=o(t,e,s),d=this._staged.get(i)??this._shadow.get(i)??this._readField(t,e,s)??0;return this._staged.set(i,n),this._txn.forward.push({kind:"set_field",eid:t,def:e,field:s,value:n}),this._txn.inverse.push({kind:"set_field",eid:t,def:e,field:s,value:d}),this}add(t,e,s){return this._txn.forward.push({kind:"add_component",eid:t,def:e,values:s}),this._txn.inverse.push({kind:"remove_component",eid:t,def:e}),this}remove(t,e,s){return this._txn.forward.push({kind:"remove_component",eid:t,def:e}),this._txn.inverse.push({kind:"add_component",eid:t,def:e,values:s}),this}disable(t){return this._txn.forward.push({kind:"disable",eid:t}),this._txn.inverse.push({kind:"enable",eid:t}),this}enable(t){return this._txn.forward.push({kind:"enable",eid:t}),this._txn.inverse.push({kind:"disable",eid:t}),this}}class u{constructor(t,e){this._queue=t,this._readField=e}_undoStack=[];_redoStack=[];_listeners=[];_shadow=new Map;transaction(t){const e=new h(this._readField,this._shadow);return t(e),this._commit(a.get(e))}spawn(t,e){return this.transaction(s=>s.spawn(t,e))}despawn(t,e){return this.transaction(s=>s.despawn(t,e))}setField(t,e,s,n){return this.transaction(i=>i.setField(t,e,s,n))}add(t,e,s){return this.transaction(n=>n.add(t,e,s))}remove(t,e,s){return this.transaction(n=>n.remove(t,e,s))}disable(t){return this.transaction(e=>e.disable(t))}enable(t){return this.transaction(e=>e.enable(t))}undo(){const t=this._undoStack.pop();if(t===void 0)return!1;const e=t.inverse.slice().reverse();for(const s of e)this._queue.push(s);return this._applyShadow(e),this._redoStack.push(t),this._notify(),!0}redo(){const t=this._redoStack.pop();if(t===void 0)return!1;for(const e of t.forward)this._queue.push(e);return this._applyShadow(t.forward),this._undoStack.push(t),this._notify(),!0}clear(){this._undoStack.length=0,this._redoStack.length=0,this._shadow.clear(),this._notify()}depths(){return{undo:this._undoStack.length,redo:this._redoStack.length}}get canUndo(){return this._undoStack.length>0}get canRedo(){return this._redoStack.length>0}onChange(t){return this._listeners.push(t),()=>{const e=this._listeners.indexOf(t);e!==-1&&this._listeners.splice(e,1)}}_notify(){for(const t of this._listeners.slice())t()}committedField(t,e,s){return this._readField(t,e,s)}pendingField(t,e,s){const n=o(t,e,s),i=this._shadow.get(n);if(i===void 0)return;const d=this._readField(t,e,s);if(d===i||d===void 0){this._shadow.delete(n);return}return i}_commit(t){if(t.forward.length===0)return t;for(const e of t.forward)this._queue.push(e);return this._applyShadow(t.forward),this._undoStack.push(t),this._redoStack.length=0,this._notify(),t}_applyShadow(t){for(const e of t)e.kind==="set_field"&&this._shadow.set(o(e.eid,e.def,e.field),e.value)}}function c(r,t,e,s,n){return{get value(){return n!==void 0?n():r.committedField(t,e,s)},set(i){r.setField(t,e,s,i)},get pending(){return r.pendingField(t,e,s)}}}exports.Editor=u;exports.TransactionBuilder=h;exports.fieldHandle=c;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./editor/index.cjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./editor/index.js";
|