@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,6 +1,9 @@
|
|
|
1
1
|
import { Brand, TypedArrayTag } from '../../type_primitives/index.cjs';
|
|
2
2
|
import { ComponentSchema } from './component.cjs';
|
|
3
|
-
|
|
3
|
+
import { AccessorColumns } from './ref.cjs';
|
|
4
|
+
import { SparseRestoreError } from '../restore_errors.cjs';
|
|
5
|
+
export { SparseRestoreError };
|
|
6
|
+
/** Sparse-component handle id. A separate id space from `ComponentID`. It
|
|
4
7
|
* indexes `Store`'s `sparseStores`, never the archetype mask, which is the
|
|
5
8
|
* mechanism by which sparse components escape the 128-bit identity cap. */
|
|
6
9
|
export type SparseComponentID = Brand<number, "sparse_component_id">;
|
|
@@ -8,65 +11,120 @@ declare const __sparseSchema: unique symbol;
|
|
|
8
11
|
export type SparseComponentDef<S extends ComponentSchema = ComponentSchema> = SparseComponentID & {
|
|
9
12
|
readonly [__sparseSchema]: S;
|
|
10
13
|
};
|
|
11
|
-
/** Recover a sparse def's schema type
|
|
14
|
+
/** Recover a sparse def's schema type, the sparse sibling of `SchemaOf`
|
|
12
15
|
* (component.ts), used by the typed `SystemContext` sparse surface. */
|
|
13
16
|
export type SparseSchemaOf<D> = D extends SparseComponentDef<infer S extends ComponentSchema> ? S : never;
|
|
14
|
-
/** One sparse component's membership + data. Pure data structure
|
|
15
|
-
* owns liveness checks and dev-mode error throwing
|
|
16
|
-
* entity indices and field
|
|
17
|
+
/** One sparse component's membership + data. Pure data structure, the `Store`
|
|
18
|
+
* owns liveness checks and dev-mode error throwing. This class only knows
|
|
19
|
+
* entity indices and field values. */
|
|
17
20
|
export declare class SparseComponentStore {
|
|
18
|
-
/** entity index → field-value row (length = field count; `[]` for a tag). */
|
|
19
|
-
private readonly _data;
|
|
20
21
|
readonly fieldNames: string[];
|
|
21
22
|
readonly fieldTypes: TypedArrayTag[];
|
|
22
23
|
readonly fieldIndex: Record<string, number>;
|
|
24
|
+
/** The columns a ref or cursor reads through (ref.ts): the field columns at
|
|
25
|
+
* the global ids of their names, `NO_COLUMN` elsewhere. Refilled in place
|
|
26
|
+
* on every grow, so its identity is stable for the life of the store. */
|
|
27
|
+
readonly accCols: AccessorColumns;
|
|
28
|
+
/** One column for each field, indexed by entity index. All of one length,
|
|
29
|
+
* `_cap`. Replaced together on a grow. */
|
|
30
|
+
private _cols;
|
|
31
|
+
/** The numeric type tag of each field, for the kind-split element writes. */
|
|
32
|
+
private readonly _kinds;
|
|
33
|
+
/** True when every field is `f64`: the value writes then take one inline
|
|
34
|
+
* loop whose site sees `Float64Array` alone. */
|
|
35
|
+
private readonly _allF64;
|
|
36
|
+
/** The global name id of each field, in schema order. */
|
|
37
|
+
private readonly _gids;
|
|
38
|
+
/** The index capacity of `_cols` and `_pos`. */
|
|
39
|
+
private _cap;
|
|
40
|
+
/** Entity index → position in `_dense`, or `-1` when not a member. */
|
|
41
|
+
private _pos;
|
|
42
|
+
/** The member indices, valid in `[0, _size)`. */
|
|
43
|
+
private _dense;
|
|
44
|
+
private _size;
|
|
45
|
+
/** The row ticks, one for each entity index, or `null` until `trackTicks`.
|
|
46
|
+
* The row grain of change detection for a sparse component: `setField` and
|
|
47
|
+
* a mutable cursor's `at` stamp the member's entry, and a join zeroes it,
|
|
48
|
+
* because an add is structural. Grows with the columns. A scheduling
|
|
49
|
+
* artifact: not in the snapshot or the hash. */
|
|
50
|
+
ticks: Uint32Array | null;
|
|
51
|
+
/** The change tick of the last stamp on any member: the gate an entity-level
|
|
52
|
+
* onSet drain reads before it walks the members. */
|
|
53
|
+
changedTick: number;
|
|
54
|
+
/** The change tick below which every record was drained. See
|
|
55
|
+
* `Store.drainSparseSet`. */
|
|
56
|
+
drainTick: number;
|
|
57
|
+
/** The `run` of the last `Store.drainSparseSet`. A second drain at the same
|
|
58
|
+
* run returns the first one's array, so several consumers of the change
|
|
59
|
+
* feed share one drain instead of taking the members away from each
|
|
60
|
+
* other. */
|
|
61
|
+
lastDrainRun: number;
|
|
23
62
|
constructor(fieldNames: string[], fieldTypes: TypedArrayTag[]);
|
|
24
63
|
/** Number of entities holding this sparse component. */
|
|
25
64
|
get size(): number;
|
|
26
|
-
/** Live entity indices that hold this component
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
65
|
+
/** Live entity indices that hold this component, as a view over the member
|
|
66
|
+
* list at the time of the call (iteration order is insertion and swap order.
|
|
67
|
+
* Not canonical). The view has a fixed length: a later add or remove is not
|
|
68
|
+
* visible through it, and a remove moves the last member into the hole. For
|
|
69
|
+
* a walk that must see its own mutations, loop `size` with `indexAt`, as the
|
|
70
|
+
* query driver does. For the determinism surface use `canonicalIndices`. */
|
|
71
|
+
get indices(): Uint32Array;
|
|
72
|
+
/** The member index at position `i` of the member list, `0 <= i < size`.
|
|
73
|
+
* Reads the live list, so a walk over `size` sees a swap-remove and an
|
|
74
|
+
* append made during the walk, exactly as a walk over a shrinking array
|
|
75
|
+
* did. */
|
|
76
|
+
indexAt(i: number): number;
|
|
77
|
+
/** Live entity indices in **canonical** (ascending) order, the determinism
|
|
78
|
+
* ordering for `stateHash`, snapshot and restore. The native
|
|
79
|
+
* `indices` order is insertion and swap order and would make two worlds with
|
|
80
|
+
* identical contents reached by different add and remove histories diverge, so
|
|
81
|
+
* the cold determinism paths sort here. Allocates a sorted copy each call,
|
|
82
|
+
* so never call it on the hot query path. Indices are 20-bit entity indices,
|
|
37
83
|
* so the subtraction comparator can't overflow. */
|
|
38
84
|
canonicalIndices(): number[];
|
|
39
|
-
/** The field-value row for `index` (length = field count
|
|
40
|
-
* or `undefined` if `index` isn't a member.
|
|
41
|
-
* determinism paths (`stateHash`, snapshot)
|
|
85
|
+
/** The field-value row for `index` (length = field count, `[]` for a tag),
|
|
86
|
+
* or `undefined` if `index` isn't a member. A copy, read out of the columns
|
|
87
|
+
* for the determinism paths (`stateHash`, snapshot). Mutate via `setField`. */
|
|
42
88
|
getRow(index: number): readonly number[] | undefined;
|
|
43
|
-
/** Drop all membership + data. Restore path only
|
|
89
|
+
/** Drop all membership + data. Restore path only, `restoreSparseStores`
|
|
44
90
|
* repopulates a cleared store from snapshot bytes. */
|
|
45
91
|
clear(): void;
|
|
46
|
-
/** Insert the positional field-value `row` for `index
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
setRawRow(index: number, row: number[]): void;
|
|
92
|
+
/** Insert the positional field-value `row` for `index`. Restore path only.
|
|
93
|
+
* It bypasses the name→index mapping `setRow` does, because snapshot bytes
|
|
94
|
+
* are already positional. Each value converts to its field's type. */
|
|
95
|
+
setRawRow(index: number, row: readonly number[]): void;
|
|
50
96
|
has(index: number): boolean;
|
|
51
97
|
/** Insert or overwrite the row for `index`, building it from `values`.
|
|
52
|
-
* Fields absent from `values` default to 0
|
|
53
|
-
|
|
54
|
-
|
|
98
|
+
* Fields absent from `values` default to 0. A tag stores nothing. Each
|
|
99
|
+
* value converts to its field's type, as a typed array converts it. */
|
|
100
|
+
setRow(index: number, values: Record<string, number | undefined>): void;
|
|
101
|
+
/** Drop `index`'s membership. Returns whether it was present. The data at
|
|
102
|
+
* the index stays until the next add overwrites it. */
|
|
55
103
|
remove(index: number): boolean;
|
|
56
104
|
/** Read one field, or `undefined` if `index` doesn't hold this component. */
|
|
57
105
|
getField(index: number, fieldIdx: number): number | undefined;
|
|
58
|
-
/** Write one field
|
|
59
|
-
|
|
106
|
+
/** Write one field, and stamp the row tick with `tick` when the store keeps
|
|
107
|
+
* one. Returns `false` (no-op) if `index` isn't a member. */
|
|
108
|
+
setField(index: number, fieldIdx: number, value: number, tick: number): boolean;
|
|
109
|
+
/** Keep a row tick for each entity index. Idempotent, never undone. */
|
|
110
|
+
trackTicks(): void;
|
|
111
|
+
/** Forget every record. A restore replaces the members and their values,
|
|
112
|
+
* so a tick that survived it would name a write that never happened. */
|
|
113
|
+
resetTicks(): void;
|
|
114
|
+
/** Make `index` a member, growing the columns to fit it. No-op for a
|
|
115
|
+
* member. */
|
|
116
|
+
private _join;
|
|
117
|
+
/** Double the index capacity until `index` fits, and move every column and
|
|
118
|
+
* the position map across. The accessor column array is refilled in place,
|
|
119
|
+
* so a held cursor keeps reading the live columns. */
|
|
120
|
+
private _growToFit;
|
|
60
121
|
}
|
|
61
|
-
|
|
62
|
-
constructor(message: string);
|
|
63
|
-
}
|
|
64
|
-
/** Serialize a registry of sparse stores into a self-contained byte buffer —
|
|
122
|
+
/** Serialize a registry of sparse stores into a self-contained byte buffer,
|
|
65
123
|
* the **sparse half** of a world snapshot (the dense half is the SAB snapshot,
|
|
66
|
-
* `
|
|
67
|
-
* entity-index) order so the bytes are independent of insertion
|
|
124
|
+
* `columnStoreBytesView`). Members are emitted in canonical (ascending
|
|
125
|
+
* entity-index) order so the bytes are independent of insertion and removal
|
|
68
126
|
* history: two worlds with identical sparse contents reached by different
|
|
69
|
-
* mutation orders serialize byte-for-byte the same
|
|
127
|
+
* mutation orders serialize byte-for-byte the same.
|
|
70
128
|
*
|
|
71
129
|
* Layout (all integers little-endian, to match the dense SAB snapshot and stay
|
|
72
130
|
* architecture-independent):
|
|
@@ -78,33 +136,32 @@ export declare class SparseRestoreError extends Error {
|
|
|
78
136
|
* u32 memberCount
|
|
79
137
|
* repeat memberCount times (canonical entity-index order):
|
|
80
138
|
* u32 entityIndex
|
|
81
|
-
* f64 × fieldCount (the positional field row
|
|
139
|
+
* f64 × fieldCount (the positional field row, none for a tag)
|
|
82
140
|
*
|
|
83
141
|
* `fieldCount` is redundant with the registered schema but is written so
|
|
84
142
|
* `restoreSparseStores` can reject a snapshot whose shape doesn't match the
|
|
85
|
-
* stores it's restoring into
|
|
143
|
+
* stores it's restoring into. `schemaHash` (a `schemaFingerprint` over the
|
|
86
144
|
* field names + types) goes further and rejects a buffer whose shape matches
|
|
87
|
-
* field-for-field but whose field **identity** doesn't
|
|
145
|
+
* field-for-field but whose field **identity** doesn't. */
|
|
88
146
|
export declare function snapshotSparseStores(stores: readonly SparseComponentStore[]): Uint8Array;
|
|
89
147
|
/** Repopulate already-registered sparse stores from `snapshotSparseStores`
|
|
90
148
|
* bytes, giving full-equality round-trip (membership + data). The `stores`
|
|
91
|
-
* registry must already exist with the same shape the snapshot was taken from
|
|
92
|
-
*
|
|
149
|
+
* registry must already exist with the same shape the snapshot was taken from.
|
|
150
|
+
* Restore replays data into a world whose sparse components are registered
|
|
93
151
|
* in the same order (the registration is code, not snapshot state). Each store
|
|
94
152
|
* is cleared first, so restoring is idempotent and drops any pre-existing rows.
|
|
95
153
|
*
|
|
96
154
|
* Throws `SparseRestoreError` on any shape or identity mismatch (store count,
|
|
97
155
|
* field count, schema-hash field identity, an entity index past `MAX_INDEX`,
|
|
98
|
-
* or a truncated
|
|
99
|
-
* The index bound matters because the
|
|
100
|
-
*
|
|
101
|
-
*
|
|
156
|
+
* or a truncated or over-long buffer) rather than silently corrupting state.
|
|
157
|
+
* The index bound matters because the columns of a store grow to fit the
|
|
158
|
+
* highest member index, an unvalidated crafted u32 (up to ~4.29e9) would ask
|
|
159
|
+
* for a multi-GB column for each field. */
|
|
102
160
|
export declare function restoreSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
|
|
103
161
|
/** Read-only validation of a `snapshotSparseStores` buffer against the live
|
|
104
|
-
* registry,
|
|
105
|
-
* shape
|
|
106
|
-
* closed on a sparse-registration mismatch
|
|
107
|
-
* column data. Throws `SparseRestoreError` on any mismatch
|
|
108
|
-
export declare function
|
|
109
|
-
export {};
|
|
162
|
+
* registry, without mutating any store. Mirrors `restoreSparseStores`'s
|
|
163
|
+
* shape, field-identity, index-bounds and frame checks so `Store.restore` can fail
|
|
164
|
+
* closed on a sparse-registration mismatch before the dense mount overwrites live
|
|
165
|
+
* column data. Throws `SparseRestoreError` on any mismatch or malformed buffer. */
|
|
166
|
+
export declare function assertSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
|
|
110
167
|
//# sourceMappingURL=sparse_store.d.ts.map
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Brand, TypedArrayTag } from '../../type_primitives/index.js';
|
|
2
2
|
import { ComponentSchema } from './component.js';
|
|
3
|
-
|
|
3
|
+
import { AccessorColumns } from './ref.js';
|
|
4
|
+
import { SparseRestoreError } from '../restore_errors.js';
|
|
5
|
+
export { SparseRestoreError };
|
|
6
|
+
/** Sparse-component handle id. A separate id space from `ComponentID`. It
|
|
4
7
|
* indexes `Store`'s `sparseStores`, never the archetype mask, which is the
|
|
5
8
|
* mechanism by which sparse components escape the 128-bit identity cap. */
|
|
6
9
|
export type SparseComponentID = Brand<number, "sparse_component_id">;
|
|
@@ -8,65 +11,120 @@ declare const __sparseSchema: unique symbol;
|
|
|
8
11
|
export type SparseComponentDef<S extends ComponentSchema = ComponentSchema> = SparseComponentID & {
|
|
9
12
|
readonly [__sparseSchema]: S;
|
|
10
13
|
};
|
|
11
|
-
/** Recover a sparse def's schema type
|
|
14
|
+
/** Recover a sparse def's schema type, the sparse sibling of `SchemaOf`
|
|
12
15
|
* (component.ts), used by the typed `SystemContext` sparse surface. */
|
|
13
16
|
export type SparseSchemaOf<D> = D extends SparseComponentDef<infer S extends ComponentSchema> ? S : never;
|
|
14
|
-
/** One sparse component's membership + data. Pure data structure
|
|
15
|
-
* owns liveness checks and dev-mode error throwing
|
|
16
|
-
* entity indices and field
|
|
17
|
+
/** One sparse component's membership + data. Pure data structure, the `Store`
|
|
18
|
+
* owns liveness checks and dev-mode error throwing. This class only knows
|
|
19
|
+
* entity indices and field values. */
|
|
17
20
|
export declare class SparseComponentStore {
|
|
18
|
-
/** entity index → field-value row (length = field count; `[]` for a tag). */
|
|
19
|
-
private readonly _data;
|
|
20
21
|
readonly fieldNames: string[];
|
|
21
22
|
readonly fieldTypes: TypedArrayTag[];
|
|
22
23
|
readonly fieldIndex: Record<string, number>;
|
|
24
|
+
/** The columns a ref or cursor reads through (ref.ts): the field columns at
|
|
25
|
+
* the global ids of their names, `NO_COLUMN` elsewhere. Refilled in place
|
|
26
|
+
* on every grow, so its identity is stable for the life of the store. */
|
|
27
|
+
readonly accCols: AccessorColumns;
|
|
28
|
+
/** One column for each field, indexed by entity index. All of one length,
|
|
29
|
+
* `_cap`. Replaced together on a grow. */
|
|
30
|
+
private _cols;
|
|
31
|
+
/** The numeric type tag of each field, for the kind-split element writes. */
|
|
32
|
+
private readonly _kinds;
|
|
33
|
+
/** True when every field is `f64`: the value writes then take one inline
|
|
34
|
+
* loop whose site sees `Float64Array` alone. */
|
|
35
|
+
private readonly _allF64;
|
|
36
|
+
/** The global name id of each field, in schema order. */
|
|
37
|
+
private readonly _gids;
|
|
38
|
+
/** The index capacity of `_cols` and `_pos`. */
|
|
39
|
+
private _cap;
|
|
40
|
+
/** Entity index → position in `_dense`, or `-1` when not a member. */
|
|
41
|
+
private _pos;
|
|
42
|
+
/** The member indices, valid in `[0, _size)`. */
|
|
43
|
+
private _dense;
|
|
44
|
+
private _size;
|
|
45
|
+
/** The row ticks, one for each entity index, or `null` until `trackTicks`.
|
|
46
|
+
* The row grain of change detection for a sparse component: `setField` and
|
|
47
|
+
* a mutable cursor's `at` stamp the member's entry, and a join zeroes it,
|
|
48
|
+
* because an add is structural. Grows with the columns. A scheduling
|
|
49
|
+
* artifact: not in the snapshot or the hash. */
|
|
50
|
+
ticks: Uint32Array | null;
|
|
51
|
+
/** The change tick of the last stamp on any member: the gate an entity-level
|
|
52
|
+
* onSet drain reads before it walks the members. */
|
|
53
|
+
changedTick: number;
|
|
54
|
+
/** The change tick below which every record was drained. See
|
|
55
|
+
* `Store.drainSparseSet`. */
|
|
56
|
+
drainTick: number;
|
|
57
|
+
/** The `run` of the last `Store.drainSparseSet`. A second drain at the same
|
|
58
|
+
* run returns the first one's array, so several consumers of the change
|
|
59
|
+
* feed share one drain instead of taking the members away from each
|
|
60
|
+
* other. */
|
|
61
|
+
lastDrainRun: number;
|
|
23
62
|
constructor(fieldNames: string[], fieldTypes: TypedArrayTag[]);
|
|
24
63
|
/** Number of entities holding this sparse component. */
|
|
25
64
|
get size(): number;
|
|
26
|
-
/** Live entity indices that hold this component
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
65
|
+
/** Live entity indices that hold this component, as a view over the member
|
|
66
|
+
* list at the time of the call (iteration order is insertion and swap order.
|
|
67
|
+
* Not canonical). The view has a fixed length: a later add or remove is not
|
|
68
|
+
* visible through it, and a remove moves the last member into the hole. For
|
|
69
|
+
* a walk that must see its own mutations, loop `size` with `indexAt`, as the
|
|
70
|
+
* query driver does. For the determinism surface use `canonicalIndices`. */
|
|
71
|
+
get indices(): Uint32Array;
|
|
72
|
+
/** The member index at position `i` of the member list, `0 <= i < size`.
|
|
73
|
+
* Reads the live list, so a walk over `size` sees a swap-remove and an
|
|
74
|
+
* append made during the walk, exactly as a walk over a shrinking array
|
|
75
|
+
* did. */
|
|
76
|
+
indexAt(i: number): number;
|
|
77
|
+
/** Live entity indices in **canonical** (ascending) order, the determinism
|
|
78
|
+
* ordering for `stateHash`, snapshot and restore. The native
|
|
79
|
+
* `indices` order is insertion and swap order and would make two worlds with
|
|
80
|
+
* identical contents reached by different add and remove histories diverge, so
|
|
81
|
+
* the cold determinism paths sort here. Allocates a sorted copy each call,
|
|
82
|
+
* so never call it on the hot query path. Indices are 20-bit entity indices,
|
|
37
83
|
* so the subtraction comparator can't overflow. */
|
|
38
84
|
canonicalIndices(): number[];
|
|
39
|
-
/** The field-value row for `index` (length = field count
|
|
40
|
-
* or `undefined` if `index` isn't a member.
|
|
41
|
-
* determinism paths (`stateHash`, snapshot)
|
|
85
|
+
/** The field-value row for `index` (length = field count, `[]` for a tag),
|
|
86
|
+
* or `undefined` if `index` isn't a member. A copy, read out of the columns
|
|
87
|
+
* for the determinism paths (`stateHash`, snapshot). Mutate via `setField`. */
|
|
42
88
|
getRow(index: number): readonly number[] | undefined;
|
|
43
|
-
/** Drop all membership + data. Restore path only
|
|
89
|
+
/** Drop all membership + data. Restore path only, `restoreSparseStores`
|
|
44
90
|
* repopulates a cleared store from snapshot bytes. */
|
|
45
91
|
clear(): void;
|
|
46
|
-
/** Insert the positional field-value `row` for `index
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
setRawRow(index: number, row: number[]): void;
|
|
92
|
+
/** Insert the positional field-value `row` for `index`. Restore path only.
|
|
93
|
+
* It bypasses the name→index mapping `setRow` does, because snapshot bytes
|
|
94
|
+
* are already positional. Each value converts to its field's type. */
|
|
95
|
+
setRawRow(index: number, row: readonly number[]): void;
|
|
50
96
|
has(index: number): boolean;
|
|
51
97
|
/** Insert or overwrite the row for `index`, building it from `values`.
|
|
52
|
-
* Fields absent from `values` default to 0
|
|
53
|
-
|
|
54
|
-
|
|
98
|
+
* Fields absent from `values` default to 0. A tag stores nothing. Each
|
|
99
|
+
* value converts to its field's type, as a typed array converts it. */
|
|
100
|
+
setRow(index: number, values: Record<string, number | undefined>): void;
|
|
101
|
+
/** Drop `index`'s membership. Returns whether it was present. The data at
|
|
102
|
+
* the index stays until the next add overwrites it. */
|
|
55
103
|
remove(index: number): boolean;
|
|
56
104
|
/** Read one field, or `undefined` if `index` doesn't hold this component. */
|
|
57
105
|
getField(index: number, fieldIdx: number): number | undefined;
|
|
58
|
-
/** Write one field
|
|
59
|
-
|
|
106
|
+
/** Write one field, and stamp the row tick with `tick` when the store keeps
|
|
107
|
+
* one. Returns `false` (no-op) if `index` isn't a member. */
|
|
108
|
+
setField(index: number, fieldIdx: number, value: number, tick: number): boolean;
|
|
109
|
+
/** Keep a row tick for each entity index. Idempotent, never undone. */
|
|
110
|
+
trackTicks(): void;
|
|
111
|
+
/** Forget every record. A restore replaces the members and their values,
|
|
112
|
+
* so a tick that survived it would name a write that never happened. */
|
|
113
|
+
resetTicks(): void;
|
|
114
|
+
/** Make `index` a member, growing the columns to fit it. No-op for a
|
|
115
|
+
* member. */
|
|
116
|
+
private _join;
|
|
117
|
+
/** Double the index capacity until `index` fits, and move every column and
|
|
118
|
+
* the position map across. The accessor column array is refilled in place,
|
|
119
|
+
* so a held cursor keeps reading the live columns. */
|
|
120
|
+
private _growToFit;
|
|
60
121
|
}
|
|
61
|
-
|
|
62
|
-
constructor(message: string);
|
|
63
|
-
}
|
|
64
|
-
/** Serialize a registry of sparse stores into a self-contained byte buffer —
|
|
122
|
+
/** Serialize a registry of sparse stores into a self-contained byte buffer,
|
|
65
123
|
* the **sparse half** of a world snapshot (the dense half is the SAB snapshot,
|
|
66
|
-
* `
|
|
67
|
-
* entity-index) order so the bytes are independent of insertion
|
|
124
|
+
* `columnStoreBytesView`). Members are emitted in canonical (ascending
|
|
125
|
+
* entity-index) order so the bytes are independent of insertion and removal
|
|
68
126
|
* history: two worlds with identical sparse contents reached by different
|
|
69
|
-
* mutation orders serialize byte-for-byte the same
|
|
127
|
+
* mutation orders serialize byte-for-byte the same.
|
|
70
128
|
*
|
|
71
129
|
* Layout (all integers little-endian, to match the dense SAB snapshot and stay
|
|
72
130
|
* architecture-independent):
|
|
@@ -78,33 +136,32 @@ export declare class SparseRestoreError extends Error {
|
|
|
78
136
|
* u32 memberCount
|
|
79
137
|
* repeat memberCount times (canonical entity-index order):
|
|
80
138
|
* u32 entityIndex
|
|
81
|
-
* f64 × fieldCount (the positional field row
|
|
139
|
+
* f64 × fieldCount (the positional field row, none for a tag)
|
|
82
140
|
*
|
|
83
141
|
* `fieldCount` is redundant with the registered schema but is written so
|
|
84
142
|
* `restoreSparseStores` can reject a snapshot whose shape doesn't match the
|
|
85
|
-
* stores it's restoring into
|
|
143
|
+
* stores it's restoring into. `schemaHash` (a `schemaFingerprint` over the
|
|
86
144
|
* field names + types) goes further and rejects a buffer whose shape matches
|
|
87
|
-
* field-for-field but whose field **identity** doesn't
|
|
145
|
+
* field-for-field but whose field **identity** doesn't. */
|
|
88
146
|
export declare function snapshotSparseStores(stores: readonly SparseComponentStore[]): Uint8Array;
|
|
89
147
|
/** Repopulate already-registered sparse stores from `snapshotSparseStores`
|
|
90
148
|
* bytes, giving full-equality round-trip (membership + data). The `stores`
|
|
91
|
-
* registry must already exist with the same shape the snapshot was taken from
|
|
92
|
-
*
|
|
149
|
+
* registry must already exist with the same shape the snapshot was taken from.
|
|
150
|
+
* Restore replays data into a world whose sparse components are registered
|
|
93
151
|
* in the same order (the registration is code, not snapshot state). Each store
|
|
94
152
|
* is cleared first, so restoring is idempotent and drops any pre-existing rows.
|
|
95
153
|
*
|
|
96
154
|
* Throws `SparseRestoreError` on any shape or identity mismatch (store count,
|
|
97
155
|
* field count, schema-hash field identity, an entity index past `MAX_INDEX`,
|
|
98
|
-
* or a truncated
|
|
99
|
-
* The index bound matters because the
|
|
100
|
-
*
|
|
101
|
-
*
|
|
156
|
+
* or a truncated or over-long buffer) rather than silently corrupting state.
|
|
157
|
+
* The index bound matters because the columns of a store grow to fit the
|
|
158
|
+
* highest member index, an unvalidated crafted u32 (up to ~4.29e9) would ask
|
|
159
|
+
* for a multi-GB column for each field. */
|
|
102
160
|
export declare function restoreSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
|
|
103
161
|
/** Read-only validation of a `snapshotSparseStores` buffer against the live
|
|
104
|
-
* registry,
|
|
105
|
-
* shape
|
|
106
|
-
* closed on a sparse-registration mismatch
|
|
107
|
-
* column data. Throws `SparseRestoreError` on any mismatch
|
|
108
|
-
export declare function
|
|
109
|
-
export {};
|
|
162
|
+
* registry, without mutating any store. Mirrors `restoreSparseStores`'s
|
|
163
|
+
* shape, field-identity, index-bounds and frame checks so `Store.restore` can fail
|
|
164
|
+
* closed on a sparse-registration mismatch before the dense mount overwrites live
|
|
165
|
+
* column data. Throws `SparseRestoreError` on any mismatch or malformed buffer. */
|
|
166
|
+
export declare function assertSparseStores(stores: readonly SparseComponentStore[], bytes: Uint8Array): void;
|
|
110
167
|
//# sourceMappingURL=sparse_store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sparse_store.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/sparse_store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sparse_store.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/sparse_store.ts"],"names":[],"mappings":"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"}
|