@oasys/oecs 0.4.0 → 0.5.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 +553 -0
- package/README.md +42 -31
- package/dist/core/ecs/access_check.d.cts +77 -0
- package/dist/core/ecs/access_check.d.ts +8 -8
- package/dist/core/ecs/access_check.d.ts.map +1 -1
- package/dist/core/ecs/archetype.d.cts +486 -0
- package/dist/core/ecs/archetype.d.ts +23 -11
- package/dist/core/ecs/archetype.d.ts.map +1 -1
- package/dist/core/ecs/archetype_graph.d.cts +96 -0
- package/dist/core/ecs/archetype_graph.d.ts +96 -0
- package/dist/core/ecs/archetype_graph.d.ts.map +1 -0
- package/dist/core/ecs/builtin_relations.d.cts +43 -0
- package/dist/core/ecs/builtin_relations.d.ts +8 -8
- package/dist/core/ecs/builtin_relations.d.ts.map +1 -1
- package/dist/core/ecs/command_log.d.cts +116 -0
- package/dist/core/ecs/command_log.d.ts +13 -10
- package/dist/core/ecs/command_log.d.ts.map +1 -1
- package/dist/core/ecs/component.d.cts +176 -0
- package/dist/core/ecs/component.d.ts +75 -5
- package/dist/core/ecs/component.d.ts.map +1 -1
- package/dist/core/ecs/compute_backend.d.cts +37 -0
- package/dist/core/ecs/compute_backend.d.ts +2 -2
- package/dist/core/ecs/debug_names.d.cts +7 -0
- package/dist/core/ecs/debug_names.d.ts +7 -0
- package/dist/core/ecs/debug_names.d.ts.map +1 -0
- package/dist/core/ecs/deferred_commands.d.cts +55 -0
- package/dist/core/ecs/deferred_commands.d.ts +55 -0
- package/dist/core/ecs/deferred_commands.d.ts.map +1 -0
- package/dist/core/ecs/dispatch_trace.d.cts +93 -0
- package/dist/core/ecs/dispatch_trace.d.ts +3 -3
- package/dist/core/ecs/ecs.d.cts +562 -0
- package/dist/core/ecs/ecs.d.ts +314 -285
- package/dist/core/ecs/ecs.d.ts.map +1 -1
- package/dist/core/ecs/ecs_memory.d.cts +179 -0
- package/dist/core/ecs/ecs_memory.d.ts +1 -1
- package/dist/core/ecs/entity.d.cts +34 -0
- package/dist/core/ecs/entity.d.ts +7 -1
- package/dist/core/ecs/entity.d.ts.map +1 -1
- package/dist/core/ecs/entity_allocator.d.cts +59 -0
- package/dist/core/ecs/entity_allocator.d.ts +59 -0
- package/dist/core/ecs/entity_allocator.d.ts.map +1 -0
- package/dist/core/ecs/event.d.cts +79 -0
- package/dist/core/ecs/event.d.ts +36 -11
- package/dist/core/ecs/event.d.ts.map +1 -1
- package/dist/core/ecs/event_registry.d.cts +22 -0
- package/dist/core/ecs/event_registry.d.ts +22 -0
- package/dist/core/ecs/event_registry.d.ts.map +1 -0
- package/dist/core/ecs/facades.d.cts +158 -0
- package/dist/core/ecs/facades.d.ts +158 -0
- package/dist/core/ecs/facades.d.ts.map +1 -0
- package/dist/core/ecs/frame_stepper.d.cts +58 -0
- package/dist/core/ecs/frame_stepper.d.ts +58 -0
- package/dist/core/ecs/frame_stepper.d.ts.map +1 -0
- package/dist/core/ecs/frame_trace.d.cts +133 -0
- package/dist/core/ecs/frame_trace.d.ts +5 -5
- package/dist/core/ecs/frame_trace.d.ts.map +1 -1
- package/dist/core/ecs/host_commands.d.cts +274 -0
- package/dist/core/ecs/host_commands.d.ts +53 -31
- package/dist/core/ecs/host_commands.d.ts.map +1 -1
- package/dist/core/ecs/index.d.cts +46 -0
- package/dist/core/ecs/index.d.ts +45 -40
- package/dist/core/ecs/index.d.ts.map +1 -1
- package/dist/core/ecs/observer.d.cts +173 -0
- package/dist/core/ecs/observer.d.ts +43 -12
- package/dist/core/ecs/observer.d.ts.map +1 -1
- package/dist/core/ecs/query.d.cts +718 -0
- package/dist/core/ecs/query.d.ts +251 -90
- package/dist/core/ecs/query.d.ts.map +1 -1
- package/dist/core/ecs/ref.d.cts +31 -0
- package/dist/core/ecs/ref.d.ts +3 -3
- package/dist/core/ecs/relation.d.cts +243 -0
- package/dist/core/ecs/relation.d.ts +26 -14
- package/dist/core/ecs/relation.d.ts.map +1 -1
- package/dist/core/ecs/relation_service.d.cts +235 -0
- package/dist/core/ecs/relation_service.d.ts +235 -0
- package/dist/core/ecs/relation_service.d.ts.map +1 -0
- package/dist/core/ecs/resource.d.cts +53 -0
- package/dist/core/ecs/resource.d.ts +25 -5
- package/dist/core/ecs/resource.d.ts.map +1 -1
- package/dist/core/ecs/resource_registry.d.cts +20 -0
- package/dist/core/ecs/resource_registry.d.ts +20 -0
- package/dist/core/ecs/resource_registry.d.ts.map +1 -0
- package/dist/core/ecs/resume.d.cts +85 -0
- package/dist/core/ecs/resume.d.ts +6 -6
- package/dist/core/ecs/resume.d.ts.map +1 -1
- package/dist/core/ecs/run_condition.d.cts +81 -0
- package/dist/core/ecs/run_condition.d.ts +15 -9
- package/dist/core/ecs/run_condition.d.ts.map +1 -1
- package/dist/core/ecs/schedule.d.cts +142 -0
- package/dist/core/ecs/schedule.d.ts +15 -6
- package/dist/core/ecs/schedule.d.ts.map +1 -1
- package/dist/core/ecs/snapshot_service.d.cts +94 -0
- package/dist/core/ecs/snapshot_service.d.ts +94 -0
- package/dist/core/ecs/snapshot_service.d.ts.map +1 -0
- package/dist/core/ecs/sparse_store.d.cts +110 -0
- package/dist/core/ecs/sparse_store.d.ts +5 -2
- package/dist/core/ecs/sparse_store.d.ts.map +1 -1
- package/dist/core/ecs/store.d.cts +950 -0
- package/dist/core/ecs/store.d.ts +143 -342
- package/dist/core/ecs/store.d.ts.map +1 -1
- package/dist/core/ecs/store_layout_listener.d.cts +23 -0
- package/dist/core/ecs/system.d.cts +250 -0
- package/dist/core/ecs/system.d.ts +138 -22
- package/dist/core/ecs/system.d.ts.map +1 -1
- package/dist/{utils/arrays.d.ts → core/ecs/utils/arrays.d.cts} +1 -0
- package/dist/core/ecs/utils/error.d.cts +61 -0
- package/dist/core/ecs/utils/error.d.ts +12 -2
- package/dist/core/ecs/utils/error.d.ts.map +1 -1
- package/dist/core/store/action_ring.d.cts +136 -0
- package/dist/core/store/allocator.d.cts +238 -0
- package/dist/core/store/allocator.d.ts.map +1 -1
- package/dist/core/store/buffer_backed_column.d.cts +69 -0
- package/dist/core/store/buffer_backed_column.d.ts +2 -2
- package/dist/core/store/column_store.d.cts +273 -0
- package/dist/core/store/column_store.d.ts +18 -10
- package/dist/core/store/column_store.d.ts.map +1 -1
- package/dist/core/store/command_dispatch.d.cts +52 -0
- package/dist/core/store/command_ring.d.cts +107 -0
- package/dist/core/store/descriptor.d.cts +80 -0
- package/dist/core/store/descriptor.d.ts +1 -1
- package/dist/core/store/descriptor.d.ts.map +1 -1
- package/dist/core/store/entity_index.d.cts +108 -0
- package/dist/core/store/event_ring.d.cts +95 -0
- package/dist/core/store/extend.d.cts +39 -0
- package/dist/core/store/extend.d.ts +3 -73
- package/dist/core/store/extend.d.ts.map +1 -1
- package/dist/core/store/grow.d.cts +34 -0
- package/dist/core/store/grow.d.ts +4 -9
- package/dist/core/store/grow.d.ts.map +1 -1
- package/dist/core/store/header.d.cts +64 -0
- package/dist/core/store/header.d.ts +1 -1
- package/dist/core/store/header.d.ts.map +1 -1
- package/dist/core/store/index.d.cts +17 -0
- package/dist/core/store/index.d.ts +16 -15
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/layout_ops.d.cts +152 -0
- package/dist/core/store/layout_ops.d.ts +152 -0
- package/dist/core/store/layout_ops.d.ts.map +1 -0
- package/dist/core/store/region_table.d.cts +74 -0
- package/dist/core/store/region_table.d.ts +1 -1
- package/dist/core/store/region_table.d.ts.map +1 -1
- package/dist/core/store/snapshot.d.cts +43 -0
- package/dist/core/store/snapshot.d.ts +2 -2
- package/dist/core/store/state_hash.d.cts +38 -0
- package/dist/core/store/state_hash.d.ts +1 -1
- package/dist/core/store/store_regions.d.cts +38 -0
- package/dist/core/store/store_regions.d.ts +1 -1
- package/dist/core/store/vendored_abi/abi.d.ts +43 -0
- package/dist/core/store/{__generated__ → vendored_abi}/abi.d.ts.map +1 -1
- package/dist/dev_flag.d.cts +17 -0
- package/dist/dev_flag.d.ts +17 -0
- package/dist/dev_flag.d.ts.map +1 -0
- package/dist/extensions/editor/editor.d.cts +170 -0
- package/dist/extensions/editor/editor.d.ts +43 -22
- package/dist/extensions/editor/editor.d.ts.map +1 -1
- package/dist/extensions/editor/field_handle.d.cts +40 -0
- package/dist/extensions/editor/field_handle.d.ts +8 -3
- package/dist/extensions/editor/field_handle.d.ts.map +1 -1
- package/dist/extensions/editor/index.cjs +1 -1
- package/dist/extensions/editor/index.d.cts +21 -0
- package/dist/extensions/editor/index.d.ts +2 -2
- package/dist/extensions/editor/index.js +116 -88
- package/dist/extensions/reactive/ecs_sync.d.cts +214 -0
- package/dist/extensions/reactive/ecs_sync.d.ts +26 -22
- package/dist/extensions/reactive/ecs_sync.d.ts.map +1 -1
- package/dist/extensions/reactive/index.cjs +1 -1
- package/dist/extensions/reactive/index.d.cts +23 -0
- package/dist/extensions/reactive/index.d.ts +1 -1
- package/dist/extensions/reactive/index.js +106 -116
- package/dist/extensions/solid/index.cjs +1 -1
- package/dist/extensions/solid/index.d.cts +6 -0
- package/dist/extensions/solid/index.d.ts +2 -2
- package/dist/extensions/solid/index.js +8 -4
- package/dist/extensions/solid/kernel_solid.d.cts +45 -0
- package/dist/extensions/solid/kernel_solid.d.ts +6 -3
- package/dist/extensions/solid/kernel_solid.d.ts.map +1 -1
- package/dist/host_commands-BF8QMi3c.cjs +1 -0
- package/dist/host_commands-i4cAeyL5.js +2318 -0
- package/dist/index.cjs +1 -2
- package/dist/index.d.cts +66 -0
- package/dist/index.d.ts +50 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4469 -5933
- package/dist/internal.cjs +2 -0
- package/dist/internal.d.cts +20 -0
- package/dist/internal.d.ts +20 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +141 -0
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.d.cts +18 -0
- package/dist/primitives.d.ts +6 -6
- package/dist/primitives.js +24 -23
- package/dist/reactive/array.d.ts +24 -0
- package/dist/reactive/array.d.ts.map +1 -0
- package/dist/reactive/index.cjs +1 -0
- package/dist/reactive/index.d.cts +11 -0
- package/dist/reactive/index.d.ts +11 -0
- package/dist/reactive/index.d.ts.map +1 -0
- package/dist/reactive/index.js +18 -0
- package/dist/reactive/interop.d.cts +19 -0
- package/dist/{core/reactive → reactive}/interop.d.ts +1 -1
- package/dist/reactive/interop.d.ts.map +1 -0
- package/dist/reactive/kernel.d.cts +73 -0
- package/dist/{core/reactive → reactive}/kernel.d.ts +5 -3
- package/dist/reactive/kernel.d.ts.map +1 -0
- package/dist/reactive/map.d.ts +16 -0
- package/dist/reactive/map.d.ts.map +1 -0
- package/dist/reactive/shallow.d.cts +11 -0
- package/dist/reactive/shallow.d.ts +11 -0
- package/dist/reactive/shallow.d.ts.map +1 -0
- package/dist/reactive/struct.d.cts +10 -0
- package/dist/{core/reactive → reactive}/struct.d.ts +1 -1
- package/dist/reactive/struct.d.ts.map +1 -0
- package/dist/shallow-DQ8aG51_.cjs +1 -0
- package/dist/shallow-DfnAm9vG.js +150 -0
- package/dist/shared-BU1Cd40h.js +103 -0
- package/dist/shared-BymrGTyR.cjs +1 -0
- package/dist/shared.cjs +1 -1
- package/dist/shared.d.cts +22 -0
- package/dist/shared.d.ts +2 -2
- package/dist/shared.js +1 -1
- package/dist/topological_sort-BDvEyb9W.cjs +1 -0
- package/dist/topological_sort-DK6EjpWa.js +135 -0
- package/dist/type_primitives/assertions.d.cts +32 -0
- package/dist/type_primitives/assertions.d.ts +13 -1
- package/dist/type_primitives/assertions.d.ts.map +1 -1
- package/dist/type_primitives/binary_heap/binary_heap.d.cts +37 -0
- package/dist/type_primitives/bitset/bitset.d.cts +54 -0
- package/dist/type_primitives/brand.d.cts +23 -0
- package/dist/type_primitives/error.d.cts +16 -0
- package/dist/type_primitives/error.d.ts +4 -3
- package/dist/type_primitives/error.d.ts.map +1 -1
- package/dist/type_primitives/index.d.cts +13 -0
- package/dist/type_primitives/index.d.ts +9 -9
- package/dist/type_primitives/sparse_map/sparse_map.d.cts +30 -0
- package/dist/type_primitives/sparse_set/sparse_set.d.cts +28 -0
- package/dist/type_primitives/topological_sort/topological_sort.d.cts +29 -0
- package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +127 -0
- package/dist/typed_arrays-BcXcnzB4.js +258 -0
- package/dist/typed_arrays-D3NmwtCG.cjs +1 -0
- package/dist/utils/error.d.cts +6 -0
- package/dist/version.d.cts +10 -0
- package/dist/version.d.ts +10 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +102 -19
- package/dist/array-CxbPyiHO.cjs +0 -1
- package/dist/array-uFR7Q8fU.js +0 -132
- package/dist/core/reactive/array.d.ts.map +0 -1
- package/dist/core/reactive/index.cjs +0 -1
- package/dist/core/reactive/index.d.ts +0 -10
- package/dist/core/reactive/index.d.ts.map +0 -1
- package/dist/core/reactive/index.js +0 -17
- package/dist/core/reactive/interop.d.ts.map +0 -1
- package/dist/core/reactive/kernel.d.ts.map +0 -1
- package/dist/core/reactive/map.d.ts.map +0 -1
- package/dist/core/reactive/struct.d.ts.map +0 -1
- package/dist/log/console_sink.d.ts +0 -4
- package/dist/log/console_sink.d.ts.map +0 -1
- package/dist/log/index.d.ts +0 -3
- package/dist/log/index.d.ts.map +0 -1
- package/dist/log/logger.d.ts +0 -27
- package/dist/log/logger.d.ts.map +0 -1
- package/dist/shared-BXSZnxx4.cjs +0 -1
- package/dist/shared-C678TAPY.js +0 -99
- package/dist/topological_sort-DlRpSrxu.js +0 -391
- package/dist/topological_sort-WAT-VHb-.cjs +0 -1
- package/dist/utils/arrays.d.ts.map +0 -1
- package/dist/utils/constants.d.ts.map +0 -1
- /package/dist/{utils/constants.d.ts → core/ecs/utils/constants.d.cts} +0 -0
- /package/dist/core/store/{__generated__/abi.d.ts → vendored_abi/abi.d.cts} +0 -0
- /package/dist/{core/reactive/array.d.ts → reactive/array.d.cts} +0 -0
- /package/dist/{core/reactive/map.d.ts → reactive/map.d.cts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const Ge=require("./topological_sort-BDvEyb9W.cjs"),v=require("./shared-BymrGTyR.cjs");class Ve extends Error{constructor(t,n,r){super(t),this.isOperational=n,this.context=r,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}}var Xe=(e=>(e.ASSERTION_FAIL_CONDITION="ASSERTION_FAIL_CONDITION",e.VALIDATION_FAIL_CONDITION="VALIDATION_FAIL_CONDITION",e.ASSERTION_FAIL_NON_NULLABLE="ASSERTION_FAIL_NON_NULLABLE",e.ASSERTION_FAIL_UNREACHABLE="ASSERTION_FAIL_UNREACHABLE",e))(Xe||{});class ut extends Ve{constructor(t,n,r){super(n,!1,r),this.category=t}}function _t(e,t,n){return e}function ft(e){return e}function ht(e,t){throw new ut(Xe.ASSERTION_FAIL_UNREACHABLE,`Unhandled ${t}: ${String(e)}`)}var I=(e=>(e.EID_MAX_INDEX_OVERFLOW="EID_MAX_INDEX_OVERFLOW",e.EID_MAX_GEN_OVERFLOW="EID_MAX_GEN_OVERFLOW",e.COMPONENT_NOT_REGISTERED="COMPONENT_NOT_REGISTERED",e.COMPONENT_LIMIT_EXCEEDED="COMPONENT_LIMIT_EXCEEDED",e.ENTITY_NOT_ALIVE="ENTITY_NOT_ALIVE",e.CIRCULAR_SYSTEM_DEPENDENCY="CIRCULAR_SYSTEM_DEPENDENCY",e.DUPLICATE_SYSTEM="DUPLICATE_SYSTEM",e.ARCHETYPE_NOT_FOUND="ARCHETYPE_NOT_FOUND",e.RESOURCE_NOT_REGISTERED="RESOURCE_NOT_REGISTERED",e.RESOURCE_ALREADY_REGISTERED="RESOURCE_ALREADY_REGISTERED",e.EVENT_ALREADY_REGISTERED="EVENT_ALREADY_REGISTERED",e.EVENT_NOT_REGISTERED="EVENT_NOT_REGISTERED",e.FIELD_NOT_REGISTERED="FIELD_NOT_REGISTERED",e.RELATION_NOT_REGISTERED="RELATION_NOT_REGISTERED",e.RELATION_MODE_INVALID="RELATION_MODE_INVALID",e.RELATION_MODE_MISMATCH="RELATION_MODE_MISMATCH",e.RELATION_CYCLE="RELATION_CYCLE",e.SPARSE_CACHE_KEY_OVERFLOW="SPARSE_CACHE_KEY_OVERFLOW",e.SPARSE_QUERY_DENSE_PATH="SPARSE_QUERY_DENSE_PATH",e.HIERARCHY_ALREADY_SET="HIERARCHY_ALREADY_SET",e.HIERARCHY_INVALID_MAX_DEPTH="HIERARCHY_INVALID_MAX_DEPTH",e.OBSERVER_NON_CONVERGENT="OBSERVER_NON_CONVERGENT",e.OBSERVER_INVALID_CONFIG="OBSERVER_INVALID_CONFIG",e.OBSERVER_ONSET_EMIT="OBSERVER_ONSET_EMIT",e.INVALID_FIXED_TIMESTEP="INVALID_FIXED_TIMESTEP",e.INVALID_MAX_FIXED_STEPS="INVALID_MAX_FIXED_STEPS",e.INVALID_RECORDER_SCHEDULE="INVALID_RECORDER_SCHEDULE",e.EMPTY_ARCHETYPE_MATERIALIZE="EMPTY_ARCHETYPE_MATERIALIZE",e.COMPONENT_INDEX_INVARIANT="COMPONENT_INDEX_INVARIANT",e.OPTIONAL_TERM_NOT_DECLARED="OPTIONAL_TERM_NOT_DECLARED",e.QUERY_ACCESS_UNDECLARED="QUERY_ACCESS_UNDECLARED",e.ACCESS_UNDECLARED="ACCESS_UNDECLARED",e.QUERY_NOT_SINGLETON="QUERY_NOT_SINGLETON",e.INVALID_RUN_CONDITION="INVALID_RUN_CONDITION",e.SYSTEM_FN_ARITY="SYSTEM_FN_ARITY",e.PARTITION_APPEND_NEEDS_ENTITY_ROW="PARTITION_APPEND_NEEDS_ENTITY_ROW",e.PARTITION_BULK_INTO_DISABLED="PARTITION_BULK_INTO_DISABLED",e.ENTITY_NOT_DISABLED="ENTITY_NOT_DISABLED",e.STRUCTURAL_DURING_ITERATION="STRUCTURAL_DURING_ITERATION",e.BACKEND_ALREADY_ATTACHED="BACKEND_ALREADY_ATTACHED",e.DETERMINISM_DISABLED="DETERMINISM_DISABLED",e.NON_DETERMINISTIC_COLUMN_TYPE="NON_DETERMINISTIC_COLUMN_TYPE",e.INVALID_MEMORY_OPTIONS="INVALID_MEMORY_OPTIONS",e.STORE_CAP_EXCEEDED="STORE_CAP_EXCEEDED",e.REGION_NOT_DECLARED="REGION_NOT_DECLARED",e.COMMAND_LOG_TAG_COLLISION="COMMAND_LOG_TAG_COLLISION",e.INVALID_FRAME_STEP="INVALID_FRAME_STEP",e))(I||{});class S extends Ve{constructor(t,n,r){super(n??t,!0,r),this.category=t}}function Et(e){return e instanceof S}const mt=-1,gt=-1,pt=Object.freeze(Object.create(null)),Tt=2654435769,At=1367130551,B=1024,yt=0,It=31,St=1/60,wt=4,Nt=0,W=20,ye=(1<<W)-1,$=ye,Dt=It-W,ie=(1<<Dt)-1,Rt=ie,Ot=ie-1,me=ie<<W|$,Ct=(e,t)=>t<<W|e,F=e=>e&ye,bt=e=>e>>W,Ie=new WeakMap;function Ut(e,t){Ie.set(e,t)}function Lt(e){return Ie.get(e)}function vt(e){const t=Ie.get(e);return t!==void 0?`'${t}' (component ${e.id})`:`component ${e.id}`}const We=827148627,ze=0,j=4,qe=52,E={magic:0,sim_abi_version:4,view_stamp:8,capacity:12,archetype_count:16,layout_descriptor_off:20,command_ring_off:24,action_ring_off:28,entity_index_off:32,event_ring_off:36,region_table_off:40,region_table_count:44,bindings_off:48},Z=12,M={region_id:0,byte_offset:4,byte_length:8},ae=16,O={component_id:0,field_id:2,type_tag:4,byte_off:8,stride:12},ce=36,N={archetype_id:0,component_mask:4,row_count:20,row_capacity:24,column_count:28,enabled_count:32};function Mt(e,t){e.setUint32(E.magic,t.magic,!0),e.setUint32(E.sim_abi_version,t.simAbiVersion,!0),e.setUint32(E.view_stamp,t.viewStamp,!0),e.setUint32(E.capacity,t.capacity,!0),e.setUint32(E.archetype_count,t.archetypeCount,!0),e.setUint32(E.layout_descriptor_off,t.layoutDescriptorOff,!0),e.setUint32(E.command_ring_off,t.commandRingOff,!0),e.setUint32(E.action_ring_off,t.actionRingOff,!0),e.setUint32(E.entity_index_off,t.entityIndexOff,!0),e.setUint32(E.event_ring_off,t.eventRingOff,!0),e.setUint32(E.region_table_off,t.regionTableOff,!0),e.setUint32(E.region_table_count,t.regionTableCount,!0),e.setUint32(E.bindings_off,t.bindingsOff,!0)}function Pt(e){return{magic:e.getUint32(E.magic,!0),simAbiVersion:e.getUint32(E.sim_abi_version,!0),viewStamp:e.getUint32(E.view_stamp,!0),capacity:e.getUint32(E.capacity,!0),archetypeCount:e.getUint32(E.archetype_count,!0),layoutDescriptorOff:e.getUint32(E.layout_descriptor_off,!0),commandRingOff:e.getUint32(E.command_ring_off,!0),actionRingOff:e.getUint32(E.action_ring_off,!0),entityIndexOff:e.getUint32(E.entity_index_off,!0),eventRingOff:e.getUint32(E.event_ring_off,!0),regionTableOff:e.getUint32(E.region_table_off,!0),regionTableCount:e.getUint32(E.region_table_count,!0),bindingsOff:e.getUint32(E.bindings_off,!0)}}const g={u8:0,i8:1,u16:2,i16:3,u32:4,i32:5,f32:6,f64:7},ge=Object.freeze({[g.u8]:1,[g.i8]:1,[g.u16]:2,[g.i16]:2,[g.u32]:4,[g.i32]:4,[g.f32]:4,[g.f64]:8}),$t={u8:g.u8,i8:g.i8,u16:g.u16,i16:g.i16,u32:g.u32,i32:g.i32,f32:g.f32,f64:g.f64};function Bt(e,t,n){e.setUint16(t+O.component_id,n.componentId,!0),e.setUint16(t+O.field_id,n.fieldId,!0),e.setUint8(t+O.type_tag,n.typeTag),e.setUint32(t+O.byte_off,n.byteOff,!0),e.setUint16(t+O.stride,n.stride,!0)}function xt(e,t){return{componentId:e.getUint16(t+O.component_id,!0),fieldId:e.getUint16(t+O.field_id,!0),typeTag:e.getUint8(t+O.type_tag),byteOff:e.getUint32(t+O.byte_off,!0),stride:e.getUint16(t+O.stride,!0)}}const Ft=j*32;function Se(e){return ce+e*ae}function Ke(e,t,n){e.setUint32(t+N.archetype_id,n.archetypeId,!0);for(let s=0;s<j;s++)e.setUint32(t+N.component_mask+s*4,n.componentMask[s]??0,!0);e.setUint32(t+N.row_count,n.rowCount,!0),e.setUint32(t+N.row_capacity,n.rowCapacity,!0),e.setUint32(t+N.column_count,n.columns.length,!0),e.setUint32(t+N.enabled_count,n.enabledCount,!0);let r=t+ce;for(let s=0;s<n.columns.length;s++)Bt(e,r,n.columns[s]),r+=ae;return r}function Yt(e,t){const n=e.getUint32(t+N.column_count,!0),r=new Array(n);let s=t+ce;for(let i=0;i<n;i++)r[i]=xt(e,s),s+=ae;const o=new Array(j);for(let i=0;i<j;i++)o[i]=e.getUint32(t+N.component_mask+i*4,!0);return{archetypeId:e.getUint32(t+N.archetype_id,!0),componentMask:o,rowCount:e.getUint32(t+N.row_count,!0),rowCapacity:e.getUint32(t+N.row_capacity,!0),enabledCount:e.getUint32(t+N.enabled_count,!0),columns:r}}function kt(e,t,n){let r=t;for(let s=0;s<n.length;s++)r=Ke(e,r,n[s]);return r}function Ht(e,t,n){const r=new Array(n);let s=t;for(let o=0;o<n;o++){const i=Yt(e,s);r[o]=i,s+=Se(i.columns.length)}return r}function Gt(e){let t=0;for(let n=0;n<e.length;n++)t+=Se(e[n].columns.length);return t}const je=16,x=16,Vt=256,C={write_head:0,read_head:4,capacity_slots:8,overflow_flag:12},we=0;function ve(e){return je+e*x}function Xt(e){return e>0&&(e&e-1)===0}class L extends Error{constructor(t){super(t),this.name="CommandRingError"}}function Wt(e,t,n){if(!Xt(n))throw new L(`command ring capacity_slots must be a positive power of two (got ${n})`);e.setUint32(t+C.write_head,0,!0),e.setUint32(t+C.read_head,0,!0),e.setUint32(t+C.capacity_slots,n,!0),e.setUint32(t+C.overflow_flag,0,!0)}function zt(e,t){return e.getUint32(t+C.write_head,!0)}function qt(e,t){return e.getUint32(t+C.read_head,!0)}function Kt(e,t){return e.getUint32(t+C.capacity_slots,!0)}function jt(e,t,n){if(n.byteLength!==x-1)throw new L(`out_payload must be ${x-1} bytes (got ${n.byteLength})`);const r=zt(e,t),s=qt(e,t);if(r===s)return we;const o=Kt(e,t),i=s&o-1,c=t+je+i*x,a=e.getUint8(c),l=new Uint8Array(e.buffer,c+1,x-1);return n.set(l),e.setUint32(t+C.read_head,s+1>>>0,!0),a}function Qt(e,t,n){let r=0;const s=new Uint8Array(x-1);for(;;){const o=jt(e,t,s);if(o===we)return r;n(o,s.slice()),r++}}const J=16,D=12,Q={length:0,capacity:4},U=1<<20;function Me(e){if(e<0||!Number.isInteger(e))throw new Qe(`entity_index capacity must be a non-negative integer (got ${e})`);return J+e*D}function Zt(e){return e+J}function Jt(e,t){return e+J+t*4}function en(e,t){return e+J+t*8}class Qe extends Error{constructor(t){super(t),this.name="EntityIndexError"}}function tn(e,t,n){if(n<0||!Number.isInteger(n))throw new Qe(`entity_index capacity must be a non-negative integer (got ${n})`);e.setUint32(t+Q.length,0,!0),e.setUint32(t+Q.capacity,n,!0)}function nn(e,t,n){return{generations:new Int32Array(e,Zt(t),n),archetypes:new Int32Array(e,Jt(t,n),n),rows:new Int32Array(e,en(t,n),n)}}const sn=16,rn=16,on=256,G={write_head:0,read_head:4,capacity_slots:8,overflow_flag:12};function Pe(e){return sn+e*rn}function an(e){return e>0&&(e&e-1)===0}class cn extends Error{constructor(t){super(t),this.name="EventRingError"}}function dn(e,t,n){if(!an(n))throw new cn(`event ring capacity_slots must be a positive power of two (got ${n})`);e.setUint32(t+G.write_head,0,!0),e.setUint32(t+G.read_head,0,!0),e.setUint32(t+G.capacity_slots,n,!0),e.setUint32(t+G.overflow_flag,0,!0)}const ln=16,un=16,_n=256,V={write_head:0,read_head:4,capacity_slots:8,overflow_flag:12},fn=V.write_head/4,hn=V.read_head/4,En=V.capacity_slots/4,mn=V.overflow_flag/4;function gn(e,t){return new Int32Array(e.buffer,e.byteOffset+t,4)}function $e(e){return ln+e*un}function pn(e){return e>0&&(e&e-1)===0}class Be extends Error{constructor(t){super(t),this.name="ActionRingError"}}function Tn(e,t,n){if(!pn(n))throw new Be(`action ring capacity_slots must be a positive power of two (got ${n})`);if((e.byteOffset+t)%4!==0)throw new Be(`action ring header must be 4-byte aligned for Atomics (view.byteOffset ${e.byteOffset} + ring_off ${t} is not a multiple of 4)`);const r=gn(e,t);Atomics.store(r,fn,0),Atomics.store(r,hn,0),Atomics.store(r,En,n),Atomics.store(r,mn,0)}const q=[{name:"command_ring",headerOff:"command_ring_off",sizeFromOptions:e=>e.commandRingCapacitySlots!==void 0?ve(e.commandRingCapacitySlots):0,init:(e,t,n)=>Wt(e,t,n.commandRingCapacitySlots),regionBytes:(e,t)=>ve(e.getUint32(t+C.capacity_slots,!0)),readOptions:(e,t,n)=>{n.commandRingCapacitySlots=e.getUint32(t+C.capacity_slots,!0)}},{name:"entity_index",headerOff:"entity_index_off",sizeFromOptions:e=>e.entityIndexCapacity!==void 0?Me(e.entityIndexCapacity):0,init:(e,t,n)=>tn(e,t,n.entityIndexCapacity),regionBytes:(e,t)=>Me(e.getUint32(t+Q.capacity,!0)),readOptions:(e,t,n)=>{n.entityIndexCapacity=e.getUint32(t+Q.capacity,!0)}},{name:"event_ring",headerOff:"event_ring_off",sizeFromOptions:e=>e.eventRingCapacitySlots!==void 0?Pe(e.eventRingCapacitySlots):0,init:(e,t,n)=>dn(e,t,n.eventRingCapacitySlots),regionBytes:(e,t)=>Pe(e.getUint32(t+G.capacity_slots,!0)),readOptions:(e,t,n)=>{n.eventRingCapacitySlots=e.getUint32(t+G.capacity_slots,!0)}},{name:"action_ring",headerOff:"action_ring_off",sizeFromOptions:e=>e.actionRingCapacitySlots!==void 0?$e(e.actionRingCapacitySlots):0,init:(e,t,n)=>Tn(e,t,n.actionRingCapacitySlots),regionBytes:(e,t)=>$e(e.getUint32(t+V.capacity_slots,!0)),readOptions:(e,t,n)=>{n.actionRingCapacitySlots=e.getUint32(t+V.capacity_slots,!0)}}];class te extends Error{constructor(t){super(t),this.name="RegionRegistryError"}}function Ze(e){return e*Z}function Ne(e,t){const n=e.getUint32(E.region_table_count,!0);if(t+Ze(n)>e.byteLength)throw new te(`region table of ${n} entries at byte ${t} overruns the buffer (${e.byteLength} bytes)`);return n}function An(e){const t=new Set;for(let n=0;n<e.length;n++){const r=e[n];if(!Number.isInteger(r.id)||r.id<=0)throw new te(`region "${r.name}" has invalid id ${r.id} — region ids must be positive integers (0 is the absent sentinel)`);if(t.has(r.id))throw new te(`duplicate region id ${r.id} (region "${r.name}") — ids must be distinct within a consumer's region set`);if(t.add(r.id),!Number.isInteger(r.bytes)||r.bytes<=0)throw new te(`region "${r.name}" (id ${r.id}) has invalid byte size ${r.bytes} — must be a positive integer`)}}function yn(e,t,n){e.setUint32(t+M.region_id,n.regionId,!0),e.setUint32(t+M.byte_offset,n.byteOffset,!0),e.setUint32(t+M.byte_length,n.byteLength,!0)}function Je(e,t){return{regionId:e.getUint32(t+M.region_id,!0),byteOffset:e.getUint32(t+M.byte_offset,!0),byteLength:e.getUint32(t+M.byte_length,!0)}}function In(e,t,n){for(let r=0;r<n.length;r++)yn(e,t+r*Z,n[r])}function Sn(e,t,n){const r=new Array(n);for(let s=0;s<n;s++)r[s]=Je(e,t+s*Z);return r}function wn(e){const t=e.getUint32(E.region_table_off,!0);if(t===0)return[];const n=Ne(e,t);return Sn(e,t,n)}function Nn(e,t){const n=e.getUint32(E.region_table_off,!0);if(n===0)return 0;const r=Ne(e,n);for(let s=0;s<r;s++){const o=n+s*Z;if(e.getUint32(o+M.region_id,!0)===t)return e.getUint32(o+M.byte_offset,!0)}return 0}function Dn(e,t){const n=e.getUint32(E.region_table_off,!0);if(n===0)return null;const r=Ne(e,n);for(let s=0;s<r;s++){const o=Je(e,n+s*Z);if(o.regionId===t)return o}return null}function et(e,t){return e<<16|t}const de=2**31;class De extends Error{constructor(t){super(`SAB column layout offset ${t} reaches or exceeds the 2³¹ (${de}-byte) ceiling. Past 2 GiB the signed-32-bit bitwise alignment math wraps to negative/misaligned offsets. This is a structural limit independent of the (default 256 MiB) allocator cap — a single SAB cannot back more than ~2 GiB of column data (#382).`),this.name="StoreLayoutOverflowError"}}function Re(e,t){if(e+t>de)throw new De(e);return e+(t-1)&~(t-1)}function Rn(e,t,n,r){switch(t){case g.u8:return new Uint8Array(e,n,r);case g.i8:return new Int8Array(e,n,r);case g.u16:return new Uint16Array(e,n,r);case g.i16:return new Int16Array(e,n,r);case g.u32:return new Uint32Array(e,n,r);case g.i32:return new Int32Array(e,n,r);case g.f32:return new Float32Array(e,n,r);case g.f64:return new Float64Array(e,n,r)}}function On(e,t,n=0){const s=Gt(e.map(c=>({archetypeId:c.archetypeId,componentMask:c.componentMask,rowCount:0,enabledCount:0,rowCapacity:c.rowCapacity,columns:c.columns.map(a=>({componentId:a.componentId,fieldId:a.fieldId,typeTag:a.typeTag,byteOff:0,stride:ge[a.typeTag]}))})))+n;let o=t+s;const i=new Array(e.length);for(let c=0;c<e.length;c++){const a=e[c],l=new Array(a.columns.length);for(let d=0;d<a.columns.length;d++){const _=a.columns[d],f=ge[_.typeTag];o=Re(o,f),l[d]={componentId:_.componentId,fieldId:_.fieldId,typeTag:_.typeTag,byteOff:o,stride:f},o+=f*a.rowCapacity}i[c]={archetypeId:a.archetypeId,componentMask:a.componentMask,rowCount:0,enabledCount:0,rowCapacity:a.rowCapacity,columns:l}}if(o>de)throw new De(o);return{descriptors:i,totalBytes:o,regionBytes:s}}function Cn(e){const t=e;return typeof t._regionBytes=="number"&&typeof t._allocator=="function"&&typeof t._reservedDescriptorBytes=="number"}function bn(e,t=v.DEFAULT_SAB_ALLOCATOR,n={}){const r={};let s=qe;for(let y=0;y<q.length;y++){const b=q[y],z=b.sizeFromOptions(n);r[b.headerOff]=z===0?0:s,s+=z}const o=n.regions??[];An(o);const i=o.length,c=i>0?s:0;s+=Ze(i);const a=new Array(i);for(let y=0;y<o.length;y++){const b=o[y];a[y]={regionId:b.id,byteOffset:s,byteLength:b.bytes},s+=b.bytes}const l=n.bindingsRegionBytes??0,d=l===0?0:s;s+=l;const _=s,{descriptors:f,totalBytes:m,regionBytes:T}=On(e,_,n.reservedDescriptorBytes??0),u=t(m),h=new DataView(u),A={magic:We,simAbiVersion:ze,viewStamp:0,capacity:m,archetypeCount:e.length,layoutDescriptorOff:_,bindingsOff:d,regionTableOff:c,regionTableCount:i,commandRingOff:r.command_ring_off,entityIndexOff:r.entity_index_off,eventRingOff:r.event_ring_off,actionRingOff:r.action_ring_off};Mt(h,A),l>0&&new Uint8Array(u,d,l).fill(0);for(let y=0;y<q.length;y++){const b=q[y],z=r[b.headerOff];z!==0&&b.init(h,z,n)}c!==0&&In(h,c,a);for(let y=0;y<o.length;y++)o[y].init(h,a[y].byteOffset);kt(h,_,f);const Y=tt(u,f);return{buffer:u,view:h,header:A,archetypes:Y,_regionBytes:T,_allocator:t,_reservedDescriptorBytes:n.reservedDescriptorBytes??0}}function tt(e,t){const n=new Map;for(let r=0;r<t.length;r++){const s=t[r],o=new Array(s.columns.length),i=new Map;for(let c=0;c<s.columns.length;c++){const a=s.columns[c],l={componentId:a.componentId,fieldId:a.fieldId,typeTag:a.typeTag,byteOff:a.byteOff,stride:a.stride,view:Rn(e,a.typeTag,a.byteOff,s.rowCapacity)};o[c]=l,i.set(et(a.componentId,a.fieldId),l)}n.set(s.archetypeId,{archetypeId:s.archetypeId,componentMask:s.componentMask,rowCapacity:s.rowCapacity,columns:i,columnsInOrder:o})}return n}const nt=2166136261,Oe=16777619;function _e(e,t){return e=(e^t&255)>>>0,Math.imul(e,Oe)>>>0}function Un(e,t){return e=(e^t>>>0)>>>0,Math.imul(e,Oe)>>>0}class Ln{_data=new Ge.SparseMap;fieldNames;fieldTypes;fieldIndex;constructor(t,n){this.fieldNames=t,this.fieldTypes=n;const r=Object.create(null);for(let s=0;s<t.length;s++)r[t[s]]=s;this.fieldIndex=r}get size(){return this._data.size}get indices(){return this._data.keys}canonicalIndices(){return this._data.keys.slice().sort((t,n)=>t-n)}getRow(t){return this._data.get(t)}clear(){this._data.clear()}setRawRow(t,n){this._data.set(t,n)}has(t){return this._data.has(t)}setRow(t,n){const r=this.fieldNames,s=new Array(r.length);for(let o=0;o<r.length;o++){const i=n[r[o]];s[o]=i===void 0?0:i}this._data.set(t,s)}remove(t){return this._data.delete(t)}getField(t,n){const r=this._data.get(t);return r===void 0?void 0:r[n]}setField(t,n,r){const s=this._data.get(t);return s===void 0?!1:(s[n]=r,!0)}}class p extends Error{constructor(t){super(t),this.name="SparseRestoreError"}}const Ce=12,be=4,X=8;function Ue(e,t){let n=nt;const r=s=>{for(let o=0;o<s.length;o++)n=_e(n,s.charCodeAt(o))};for(let s=0;s<e.length;s++)r(e[s]),n=_e(n,31),r(t[s]),n=_e(n,30);return n>>>0}function vn(e){let t=4;for(let o=0;o<e.length;o++){const i=e[o],c=i.fieldNames.length;t+=Ce+i.size*(be+c*X)}const n=new Uint8Array(t),r=new DataView(n.buffer);let s=0;r.setUint32(s,e.length,!0),s+=4;for(let o=0;o<e.length;o++){const i=e[o],c=i.fieldNames.length,a=i.canonicalIndices();r.setUint32(s,c,!0),s+=4,r.setUint32(s,Ue(i.fieldNames,i.fieldTypes),!0),s+=4,r.setUint32(s,a.length,!0),s+=4;for(let l=0;l<a.length;l++){const d=a[l];r.setUint32(s,d,!0),s+=4;const _=i.getRow(d);for(let f=0;f<c;f++)r.setFloat64(s,_[f],!0),s+=X}}return n}function Mn(e,t){const n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=t.byteLength;let s=0;const o=c=>{if(s+c>r)throw new p(`sparse snapshot truncated: need ${c} more bytes at offset ${s}, have ${r-s}`)};o(4);const i=n.getUint32(s,!0);if(s+=4,i!==e.length)throw new p(`sparse store count mismatch: snapshot=${i}, registered=${e.length}`);for(let c=0;c<e.length;c++){const a=e[c];o(Ce);const l=n.getUint32(s,!0);s+=4;const d=n.getUint32(s,!0);s+=4;const _=n.getUint32(s,!0);if(s+=4,l!==a.fieldNames.length)throw new p(`sparse store ${c} field-count mismatch: snapshot=${l}, registered=${a.fieldNames.length}`);const f=Ue(a.fieldNames,a.fieldTypes);if(d!==f)throw new p(`sparse store ${c} schema identity mismatch: snapshot hash=${d}, registered=${f} (same field count, different field names/types — likely a registration-order divergence between the snapshot and restore worlds)`);a.clear();for(let m=0;m<_;m++){o(be+l*X);const T=n.getUint32(s,!0);if(s+=4,T>$)throw new p(`sparse store ${c} member ${m} entity index ${T} exceeds MAX_INDEX (${$})`);const u=new Array(l);for(let h=0;h<l;h++)u[h]=n.getFloat64(s,!0),s+=X;a.setRawRow(T,u)}}if(s!==r)throw new p(`sparse snapshot has ${r-s} trailing bytes after the last store (not a canonical encoding)`)}function Pn(e,t){const n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=t.byteLength;let s=0;const o=c=>{if(s+c>r)throw new p(`sparse snapshot truncated: need ${c} more bytes at offset ${s}, have ${r-s}`)};o(4);const i=n.getUint32(s,!0);if(s+=4,i!==e.length)throw new p(`sparse store count mismatch: snapshot=${i}, registered=${e.length}`);for(let c=0;c<e.length;c++){const a=e[c];o(Ce);const l=n.getUint32(s,!0);s+=4;const d=n.getUint32(s,!0);s+=4;const _=n.getUint32(s,!0);if(s+=4,l!==a.fieldNames.length)throw new p(`sparse store ${c} field-count mismatch: snapshot=${l}, registered=${a.fieldNames.length}`);const f=Ue(a.fieldNames,a.fieldTypes);if(d!==f)throw new p(`sparse store ${c} schema identity mismatch: snapshot hash=${d}, registered=${f} (same field count, different field names/types — likely a registration-order divergence between the snapshot and restore worlds)`);for(let m=0;m<_;m++){o(be+l*X);const T=n.getUint32(s,!0);if(s+=4,T>$)throw new p(`sparse store ${c} member ${m} entity index ${T} exceeds MAX_INDEX (${$})`);s+=l*X}}if(s!==r)throw new p(`sparse snapshot has ${r-s} trailing bytes after the last store (not a canonical encoding)`)}const pe=2147483647,$n="orphan",st="target",Bn=Object.freeze({});class rt{exclusive;sparse;onDeleteTarget;_store;_reverse=new Map;constructor(t,n,r,s){this.exclusive=t,this.sparse=n,this._store=r,this.onDeleteTarget=s}linkReverse(t,n){let r=this._reverse.get(t);r===void 0&&(r=new Set,this._reverse.set(t,r)),r.add(n)}unlinkReverse(t,n){const r=this._reverse.get(t);r!==void 0&&(r.delete(n),r.size===0&&this._reverse.delete(t))}pruneDeadReverse(t){let n=0;for(const r of this._reverse.keys())t(r)||(this._reverse.delete(r),n++);return n}sourcesOf(t){const n=this._reverse.get(t);if(n===void 0||n.size===0)return[];const r=new Array(n.size);let s=0;return n.forEach(o=>{r[s++]=o}),r.sort((o,i)=>o-i),r}resetIndices(){this._reverse.clear(),this._resetForward()}}class xn extends rt{constructor(t,n,r){super(!0,t,n,r)}_resetForward(){}link(t,n){const r=F(t),s=this._store.getField(r,0);if(s!==void 0){if(s===n)return;this.unlinkReverse(s,t)}this._store.setRow(r,{[st]:n}),this.linkReverse(n,t)}unlink(t,n){const r=F(t),s=this._store.getField(r,0);s!==void 0&&(n!==void 0&&s!==n||(this.unlinkReverse(s,t),this._store.remove(r)))}purgeSource(t){const n=F(t),r=this._store.getField(n,0);r!==void 0&&this.unlinkReverse(r,t)}singleTarget(t){const n=this._store.getField(t,0);return n===void 0?void 0:n}targetsOf(t){const n=this._store.getField(t,0);return n===void 0?[]:[n]}has(t){return this._store.has(t)}forEachCanonicalTargetSet(t){}forEachCanonicalPair(t,n){const r=this._store.canonicalIndices();for(let s=0;s<r.length;s++){const o=r[s];n(t(o),this._store.getField(o,0))}}rebuildReverseFromForward(t){const n=this._store.indices;for(let r=0;r<n.length;r++){const s=n[r];this.linkReverse(this._store.getField(s,0),t(s))}}restoreAddTarget(){throw new p("exclusive relation has no multi forward sources to restore (snapshot header should have guarded this)")}}class Fn extends rt{_forward=new Map;constructor(t,n,r){super(!1,t,n,r)}_resetForward(){this._forward.clear()}link(t,n){const r=F(t);let s=this._forward.get(r);s===void 0&&(s=new Set,this._forward.set(r,s),this._store.setRow(r,Bn)),s.add(n),this.linkReverse(n,t)}unlink(t,n){const r=F(t),s=this._forward.get(r);if(s!==void 0){if(n===void 0){this._forward.delete(r),s.forEach(o=>this.unlinkReverse(o,t)),this._store.remove(r);return}s.has(n)&&(s.delete(n),this.unlinkReverse(n,t),s.size===0&&(this._forward.delete(r),this._store.remove(r)))}}purgeSource(t){const n=F(t),r=this._forward.get(n);r!==void 0&&(this._forward.delete(n),r.forEach(s=>this.unlinkReverse(s,t)))}singleTarget(){}targetsOf(t){const n=this._forward.get(t);if(n===void 0||n.size===0)return[];const r=new Array(n.size);let s=0;return n.forEach(o=>{r[s++]=o}),r.sort((o,i)=>o-i),r}has(t){return this._store.has(t)}forEachCanonicalTargetSet(t){const n=Array.from(this._forward.keys()).sort((r,s)=>r-s);for(let r=0;r<n.length;r++){const s=this.targetsOf(n[r]);s.length!==0&&t(n[r],s)}}forEachCanonicalPair(t,n){this.forEachCanonicalTargetSet((r,s)=>{const o=t(r);for(let i=0;i<s.length;i++)n(o,s[i])})}rebuildReverseFromForward(){}restoreAddTarget(t,n,r){let s=this._forward.get(t);s===void 0&&(s=new Set,this._forward.set(t,s)),s.add(n),this.linkReverse(n,r)}}function Yn(e,t,n,r){return e?new xn(t,n,r):new Fn(t,n,r)}const ot=4,it=4,at=8,ne=8;function kn(e){const t=new Array(e.length);let n=4;for(let i=0;i<e.length;i++){n+=ot;const c=e[i];if(c.exclusive){t[i]=null;continue}const a=[];c.forEachCanonicalTargetSet((l,d)=>a.push([l,d])),t[i]=a,n+=it;for(let l=0;l<a.length;l++)n+=at+a[l][1].length*ne}const r=new Uint8Array(n),s=new DataView(r.buffer);let o=0;s.setUint32(o,e.length,!0),o+=4;for(let i=0;i<e.length;i++){s.setUint32(o,e[i].exclusive?0:1,!0),o+=4;const c=t[i];if(c!==null){s.setUint32(o,c.length,!0),o+=4;for(let a=0;a<c.length;a++){const l=c[a][0],d=c[a][1];s.setUint32(o,l,!0),o+=4,s.setUint32(o,d.length,!0),o+=4;for(let _=0;_<d.length;_++)s.setFloat64(o,d[_],!0),o+=ne}}}return r}function Hn(e,t,n){const r=new DataView(t.buffer,t.byteOffset,t.byteLength),s=t.byteLength;let o=0;const i=a=>{if(o+a>s)throw new p(`relation snapshot truncated: need ${a} more bytes at offset ${o}, have ${s-o}`)};for(let a=0;a<e.length;a++)e[a].resetIndices();i(4);const c=r.getUint32(o,!0);if(o+=4,c!==e.length)throw new p(`relation count mismatch: snapshot=${c}, registered=${e.length}`);for(let a=0;a<e.length;a++){const l=e[a];i(ot);const d=r.getUint32(o,!0);if(o+=4,d===1===l.exclusive)throw new p(`relation ${a} cardinality mismatch: snapshot ${d?"multi":"exclusive"}, registered ${l.exclusive?"exclusive":"multi"}`);if(l.exclusive)continue;i(it);const _=r.getUint32(o,!0);o+=4;for(let f=0;f<_;f++){i(at);const m=r.getUint32(o,!0);o+=4;const T=r.getUint32(o,!0);if(o+=4,m>$)throw new p(`relation ${a} source index ${m} exceeds MAX_INDEX (${$})`);i(T*ne);const u=n(m);for(let h=0;h<T;h++){const A=r.getFloat64(o,!0);o+=ne;const Y=A;if(!Number.isInteger(Y)||Y<0||Y>me)throw new p(`relation ${a} target ${Y} is not a well-formed packed EntityID (expected an integer in [0, ${me}])`);l.restoreAddTarget(m,A,u)}}}if(o!==s)throw new p(`relation snapshot has ${s-o} trailing bytes after the last relation (not a canonical encoding)`)}const xe=new WeakMap;function Gn(e){const t=new Set,n=new Set,r=new Set,s=new Set,o=new Set,i=new Set,c=new Set,a=new Set,l=new Set,d=new Set;for(let u=0;u<e.writes.length;u++){const h=e.writes[u].id;n.add(h),t.add(h),r.add(h)}for(let u=0;u<e.reads.length;u++)t.add(e.reads[u].id);for(let u=0;u<e.spawns.length;u++){const h=e.spawns[u];for(let A=0;A<h.length;A++)r.add(h[A].id)}for(let u=0;u<e.transitions.length;u++){const h=e.transitions[u];if(h.add)for(let A=0;A<h.add.length;A++)r.add(h.add[A].id);if(h.remove)for(let A=0;A<h.remove.length;A++)s.add(h.remove[A].id)}for(let u=0;u<e.despawns.length;u++)s.add(e.despawns[u].id);for(let u=0;u<e.resourceReads.length;u++)o.add(e.resourceReads[u]);for(let u=0;u<e.resourceWrites.length;u++){const h=e.resourceWrites[u];i.add(h),o.add(h)}const _=e.sparseWrites;if(_!==void 0)for(let u=0;u<_.length;u++){const h=_[u];a.add(h),c.add(h)}const f=e.sparseReads;if(f!==void 0)for(let u=0;u<f.length;u++)c.add(f[u]);const m=e.relationWrites;if(m!==void 0)for(let u=0;u<m.length;u++){const h=m[u];d.add(h),l.add(h)}const T=e.relationReads;if(T!==void 0)for(let u=0;u<T.length;u++)l.add(T[u]);return{reads:t,writes:n,addAllowed:r,removeAllowed:s,hasDespawns:e.despawns.length>0,resourceReads:o,resourceWrites:i,sparseReads:c,sparseWrites:a,relationReads:l,relationWrites:d}}function Vn(e){const t=xe.get(e);if(t!==void 0)return t;const n=Gn(e);return xe.set(e,n),n}const Fe=new WeakMap;function Xn(e){const t=new Set,n=new Set;if(e.reads!==void 0)for(let r=0;r<e.reads.length;r++)t.add(e.reads[r].id);if(e.resourceReads!==void 0)for(let r=0;r<e.resourceReads.length;r++)n.add(e.resourceReads[r]);return{reads:t,writes:new Set,addAllowed:new Set,removeAllowed:new Set,hasDespawns:!1,resourceReads:n,resourceWrites:new Set,sparseReads:new Set,sparseWrites:new Set,relationReads:new Set,relationWrites:new Set}}function Wn(e){const t=Fe.get(e);if(t!==void 0)return t;const n=Xn(e);return Fe.set(e,n),n}class zn{active=null;sets=null;activeName=null;exclusive=!1;enter(t){this.active=t,this.activeName=t.name??`system_${t.id}`,this.exclusive=t.exclusive===!0,this.sets=this.exclusive?null:Vn(t)}enterCondition(t){this.active=null,this.activeName=t.name,this.sets=Wn(t)}leave(){this.active=null,this.activeName=null,this.sets=null,this.exclusive=!1}isActive(){return this.sets!==null||this.exclusive}current(){return this.active}checkRead(t){this.sets!==null&&(this.sets.reads.has(t.id)||this.failComponent("read",t,"reads"))}checkWrite(t){this.sets!==null&&(this.sets.writes.has(t.id)||this.failComponent("write",t,"writes"))}checkAdd(t){this.sets!==null&&(this.sets.addAllowed.has(t.id)||this.failComponent("addComponent",t,"spawns / transitions.add / writes"))}checkRemove(t){this.sets!==null&&(this.sets.removeAllowed.has(t.id)||this.failComponent("removeComponent",t,"despawns / transitions.remove"))}checkDestroy(){if(this.sets===null||this.sets.hasDespawns)return;const t=this.activeName;throw new S(I.ACCESS_UNDECLARED,`system '${t}' called despawn but didn't declare any despawns — declare the components this system removes via despawn in its 'despawns'`,{system:t,op:"despawn"})}checkResourceRead(t){if(this.sets===null)return;const n=t;this.sets.resourceReads.has(n)||this.failResource("read",t,"resourceReads")}checkResourceWrite(t){if(this.sets===null)return;const n=t;this.sets.resourceWrites.has(n)||this.failResource("write",t,"resourceWrites")}checkSparseRead(t){if(this.sets===null)return;const n=t;this.sets.sparseReads.has(n)||this.failSparse("read",n,"sparseReads")}checkSparseWrite(t){if(this.sets===null)return;const n=t;this.sets.sparseWrites.has(n)||this.failSparse("write",n,"sparseWrites")}checkRelationRead(t){if(this.sets===null)return;const n=t;this.sets.relationReads.has(n)||this.failRelation("read",n,"relationReads")}checkRelationWrite(t){if(this.sets===null)return;const n=t;this.sets.relationWrites.has(n)||this.failRelation("write",n,"relationWrites")}checkRelationReadAny(){this.sets!==null&&(this.sets.relationReads.has(pe)||this.failRelation("(*, T) wildcard read",pe,"relationReads (as ANY_RELATION)"))}optionalScopes=[];enterOptionalScope(t){this.optionalScopes.push(t)}leaveOptionalScope(){this.optionalScopes.pop()}checkOptionalFetch(t){const n=this.optionalScopes.length;if(n===0)return;const r=this.optionalScopes[n-1],s=t.id;for(let o=0;o<r.length;o++)if(r[o]===s)return;throw new S(I.OPTIONAL_TERM_NOT_DECLARED,`getOptionalColumnRead fetched optional component ${s} but the iterating query didn't declare it — add .optional(component) to the query before fetching it`)}failComponent(t,n,r){const s=this.activeName,o=vt(n);throw new S(I.ACCESS_UNDECLARED,`system '${s}' performed ${t} on ${o} but didn't declare it — add it to '${r}' (see docs/api/systems.md)`,{system:s,op:t,component:n.id})}failSparse(t,n,r){const s=this.activeName;throw new S(I.ACCESS_UNDECLARED,`system '${s}' performed ${t} on sparse component ${n} but didn't declare it — add it to '${r}' (see docs/api/systems.md)`,{system:s,op:t,sparse:n})}failRelation(t,n,r){const s=this.activeName;throw new S(I.ACCESS_UNDECLARED,`system '${s}' performed ${t} on relation ${n} but didn't declare it — add it to '${r}' (see docs/api/systems.md)`,{system:s,op:t,relation:n})}failResource(t,n,r){const s=this.activeName,o=n.description??"<unnamed>";throw new S(I.ACCESS_UNDECLARED,`system '${s}' performed resource ${t} on '${o}' but didn't declare it — add the resource key to '${r}' (see docs/api/systems.md)`,{system:s,op:t,resource:o})}}const qn=new zn;var P=(e=>(e.PRE_STARTUP="PRE_STARTUP",e.STARTUP="STARTUP",e.POST_STARTUP="POST_STARTUP",e.FIXED_UPDATE="FIXED_UPDATE",e.PRE_UPDATE="PRE_UPDATE",e.UPDATE="UPDATE",e.POST_UPDATE="POST_UPDATE",e))(P||{});const fe=["PRE_STARTUP","STARTUP","POST_STARTUP"],he=["PRE_UPDATE","UPDATE","POST_UPDATE"];function Kn(e){return Object.freeze({name:e})}function jn(e){return!("fn"in e)}const K=Object.freeze([]);function Ee(e){return e===void 0?K:Array.isArray(e)?e:[e]}class Qn{labelSystems=new Map;sortedCache=new Map;systemIndex=new Map;systemLastRun=new Map;gatedSystems=new Map;setConditions=new Map;setOrdering=new Map;nextInsertionOrder=0;_backend=null;onWarn;constructor(t){this.onWarn=t??(n=>console.warn(n));for(let n=0;n<fe.length;n++)this.labelSystems.set(fe[n],[]);this.labelSystems.set("FIXED_UPDATE",[]);for(let n=0;n<he.length;n++)this.labelSystems.set(he[n],[])}addSystems(t,...n){for(const r of n){const s="system"in r,o=s?r.system:r,i=s?r.ordering:void 0,c=s?Ee(r.runIf):K,a=s?Ee(r.set):K,l={descriptor:o,insertionOrder:this.nextInsertionOrder++,before:new Set(i?.before??[]),after:new Set(i?.after??[]),conditions:c,sets:a};this.labelSystems.get(t).push(l),this.systemIndex.set(o,t),this.systemLastRun.set(o,0),(c.length>0||a.length>0)&&this.gatedSystems.set(o,l),this.sortedCache.delete(t)}}configureSet(t,n){const r=Ee(n.runIf);if(r.length>0){const s=this.setConditions.get(t);s===void 0?this.setConditions.set(t,[...r]):s.push(...r)}if(n.before!==void 0||n.after!==void 0){let s=this.setOrdering.get(t);s===void 0&&(s={before:new Set,after:new Set},this.setOrdering.set(t,s));for(const o of n.before??K)s.before.add(o);for(const o of n.after??K)s.after.add(o);this.sortedCache.clear()}}removeSystem(t){const n=this.systemIndex.get(t);if(n===void 0)return;const r=this.labelSystems.get(n),s=r.findIndex(o=>o.descriptor===t);if(s!==-1){const o=r.length-1;s!==o&&(r[s]=r[o]),r.pop();for(const i of r)i.before.delete(t),i.after.delete(t)}this.systemIndex.delete(t),this.systemLastRun.delete(t),this.gatedSystems.delete(t),this.sortedCache.delete(n)}setBackend(t){this._backend=t}runStartup(t,n){for(const r of fe)this.runLabel(r,t,Nt,n)}runUpdate(t,n,r){for(const s of he)this.runLabel(s,t,n,r)}runFixedUpdate(t,n,r){this.runLabel("FIXED_UPDATE",t,n,r)}hasFixedSystems(){return this.labelSystems.get("FIXED_UPDATE").length>0}getAllSystems(){const t=[];for(const n of this.labelSystems.values())for(const r of n)t.push(r.descriptor);return t}hasSystem(t){return this.systemIndex.has(t)}clear(){for(const t of this.labelSystems.values())t.length=0;this.sortedCache.clear(),this.systemIndex.clear(),this.systemLastRun.clear(),this.gatedSystems.clear(),this.setConditions.clear(),this.setOrdering.clear()}runLabel(t,n,r,s){const o=this.getSorted(t),i=this.gatedSystems.size>0,c=this._backend,a=i?new Map:void 0;for(let l=0;l<o.length;l++){const d=o[l];if(i){const f=this.gatedSystems.get(d);if(f!==void 0&&!this.shouldRun(f,n,a))continue}n.lastRunTick=this.systemLastRun.get(d)??0;const _=c!==null?d.backendHandle:void 0;try{_!==void 0?c.run(_):d.fn?.(n,r)}finally{}this.systemLastRun.set(d,s)}n.flush()}shouldRun(t,n,r){if(t.conditions.length>0&&!this.evalConditions(t.conditions,n))return!1;for(let s=0;s<t.sets.length;s++){const o=t.sets[s];let i=r.get(o);if(i===void 0){const c=this.setConditions.get(o);i=c===void 0||c.length===0?!0:this.evalConditions(c,n),r.set(o,i)}if(!i)return!1}return!0}evalConditions(t,n){for(let r=0;r<t.length;r++){const s=t[r];let o;try{o=s.evaluate(n)}finally{}if(!o)return!1}return!0}getSorted(t){const n=this.sortedCache.get(t);if(n!==void 0)return n;const r=this.labelSystems.get(t),s=this.sortSystems(r,t);return this.sortedCache.set(t,s),s}sortSystems(t,n){if(t.length===0)return[];const r=[],s=new Map,o=new Set,i=new Map;for(const d of t){r.push(d.descriptor),s.set(d.descriptor,d.insertionOrder),o.add(d.descriptor);for(let _=0;_<d.sets.length;_++){const f=d.sets[_];let m=i.get(f);m===void 0&&(m=[],i.set(f,m)),m.push(d.descriptor)}}const c=new Map;for(const d of t)c.set(d.descriptor,[]);for(const d of t){this.resolveEdges(d.descriptor,d.before,"before",o,i,c,n),this.resolveEdges(d.descriptor,d.after,"after",o,i,c,n);for(let _=0;_<d.sets.length;_++){const f=this.setOrdering.get(d.sets[_]);f!==void 0&&(this.resolveEdges(d.descriptor,f.before,"before",o,i,c,n),this.resolveEdges(d.descriptor,f.after,"after",o,i,c,n))}}const a=(d,_)=>s.get(d)-s.get(_),l=d=>d.name??`system_${d.id}`;try{return Ge.topologicalSort(r,c,a,l)}catch(d){throw d instanceof TypeError?new S(I.CIRCULAR_SYSTEM_DEPENDENCY,`Circular system dependency detected in ${n}: ${d.message}`):d}}resolveEdges(t,n,r,s,o,i,c){for(const a of n){if(jn(a)){const l=o.get(a);if(l===void 0)continue;for(let d=0;d<l.length;d++){const _=l[d];_!==t&&this.addDirectedEdge(t,_,r,i)}continue}s.has(a)&&this.addDirectedEdge(t,a,r,i)}}addDirectedEdge(t,n,r,s){r==="before"?s.get(t).push(n):s.get(n).push(t)}warnDroppedEdge(t,n,r,s){if(this.systemIndex.has(n))return;const o=i=>i.name??`system_${i.id}`;this.onWarn(`Schedule[${s}]: \`${o(t)}\` declares \`${r}\` ordering against \`${o(n)}\`, which is not registered in any phase — the constraint is ignored. Check for a typo or a missing add_systems() call.`)}}const se=1024,re=1024*se,Ye=64*se,H=256*re,Te=3,ct=64,dt=8,ke=4*re,He=e=>2**Math.ceil(Math.log2(Math.max(1,e))),ee=e=>2**Math.floor(Math.log2(Math.max(1,e))),k=(e,t,n)=>Math.min(n,Math.max(t,e)),w=e=>e>=re?`${(e/re).toFixed(1)} MiB`:e>=se?`${(e/se).toFixed(0)} KiB`:`${e} B`;function R(e,t){if(!Number.isInteger(t)||t<=0)throw new S(I.INVALID_MEMORY_OPTIONS,`memory.${e} must be a positive integer (got ${t})`)}function Zn(e){const t=["budget","maxBytes","wasm","allocator","heap","shared"].filter(s=>e!==void 0&&e[s]!==void 0);if(t.length>1)throw new S(I.INVALID_MEMORY_OPTIONS,`memory takes at most one of budget | maxBytes | wasm | allocator | heap | shared (got: ${t.join(", ")})`);const n=e?.columnCapacity;if(n!==void 0&&R("column_capacity",n),e?.budget!==void 0){const{entities:s}=e.budget,o=e.budget.archetypes??dt,i=e.budget.bytesPerEntity??ct;if(R("budget.entities",s),R("budget.archetypes",o),R("budget.bytes_per_entity",i),s>1<<20)throw new S(I.INVALID_MEMORY_OPTIONS,`memory.budget.entities=${s} exceeds the EntityID index space (1<<20 = ${1<<20})`);const c=n??k(He(Math.ceil(s/o)),64,1<<20),a=k(He(s*2),4096,1<<20),l=a*D,d=s*i*Te,_=Re(Math.max(l+d,ke),Ye);return{source:"budget",allocator:v.heapArraybufferAllocator(_),columnCapacity:c,entityIndexCapacity:a,capBytes:_,intentLabel:`budget of ${s} entities`,budgetEntities:s,derivation:[`column_capacity = ${n!==void 0?`${c} (pinned)`:`pow2(${s}/${o} per archetype) = ${c}`}`,`entity_index = pow2(2 × ${s}) = ${a} slots × ${D} B = ${w(l)}`,`columns = ${s} × ${i} B × ${Te} (double+holes headroom) = ${w(d)}`,`cap = align64K(max(index + columns, ${w(ke)} floor)) = ${w(_)}`],wasmMemory:null}}if(e?.maxBytes!==void 0){R("maxBytes",e.maxBytes);const s=n??B,o=k(ee(e.maxBytes/4/D),4096,U);return{source:"max_bytes",allocator:v.heapArraybufferAllocator(e.maxBytes),columnCapacity:s,entityIndexCapacity:o,capBytes:e.maxBytes,intentLabel:`explicit cap of ${w(e.maxBytes)}`,budgetEntities:null,derivation:[`cap = ${w(e.maxBytes)} (caller-declared)`,`column_capacity = ${s} (${n!==void 0?"pinned":"default"})`,`entity_index = floor_pow2(cap/4 ÷ ${D} B) = ${o} slots`],wasmMemory:null}}if(e?.wasm!==void 0){const s=e.wasm,o=n??B;if(s.memory!==void 0){if(!(s.memory.buffer instanceof SharedArrayBuffer))throw new S(I.INVALID_MEMORY_OPTIONS,"memory.wasm.memory must be constructed with `shared: true` — the SAB substrate requires a SharedArrayBuffer-backed WebAssembly.Memory (ADR-0004 / ADR-0018)");return{source:"wasm",allocator:v.wasmMemoryAllocator(s.memory),columnCapacity:o,entityIndexCapacity:U,capBytes:null,intentLabel:"caller-supplied WebAssembly.Memory",budgetEntities:null,derivation:["backing = wasm_memory_allocator(memory) — zero-copy with the sim (is_in_place ✓)","cap = the Memory's own `maximum` (declared by the caller; not readable from JS)",`column_capacity = ${o} (${n!==void 0?"pinned":"default"})`],wasmMemory:s.memory}}R("wasm.maximum_pages",s.maximumPages);const i=s.initialPages??Math.min(32,s.maximumPages);if(R("wasm.initial_pages",i),i>s.maximumPages)throw new S(I.INVALID_MEMORY_OPTIONS,`memory.wasm.initial_pages (${i}) exceeds maximum_pages (${s.maximumPages})`);const c=new WebAssembly.Memory({initial:i,maximum:s.maximumPages,shared:!0}),a=s.maximumPages*Ye,l=k(ee(a/4/D),4096,U);return{source:"wasm",allocator:v.wasmMemoryAllocator(c),columnCapacity:o,entityIndexCapacity:l,capBytes:a,intentLabel:`engine-constructed WebAssembly.Memory (max ${s.maximumPages} pages)`,budgetEntities:null,derivation:[`cap = ${s.maximumPages} pages × 64 KiB = ${w(a)} (Memory maximum)`,`initial = ${i} pages (${s.initialPages!==void 0?"declared":"default"})`,`entity_index = floor_pow2(cap/4 ÷ ${D} B) = ${l} slots`,`column_capacity = ${o} (${n!==void 0?"pinned":"default"})`],wasmMemory:c}}if(e?.allocator!==void 0){if(e.allocator.isInPlace!==!0)throw new S(I.INVALID_MEMORY_OPTIONS,"memory.allocator must declare `is_in_place: true` (ADR-0008): a live Store's flush loops hoist entity-index views across grows, so a non-in-place allocator (e.g. DEFAULT_SAB_ALLOCATOR) corrupts the entity→row mapping. Use growable_sab_allocator / wasm_memory_allocator; non-in-place allocators are snapshot/test sizing only.");const s=n??B,o=e.capBytesHint;return o!==void 0&&R("cap_bytes_hint",o),{source:"allocator",allocator:e.allocator,columnCapacity:s,entityIndexCapacity:U,capBytes:o??null,intentLabel:o!==void 0?`custom in-place allocator (cap hint ${w(o)})`:"custom in-place allocator",budgetEntities:null,derivation:["backing = caller allocator (is_in_place ✓ checked at construction)",o!==void 0?`cap = ${w(o)} (caller hint — diagnostics only; the allocator owns the real cap)`:"cap = allocator-owned (no hint)",`column_capacity = ${s} (${n!==void 0?"pinned":"default"})`],wasmMemory:null}}if(e?.heap!==void 0){e.heap.maxBytes!==void 0&&R("heap.maxBytes",e.heap.maxBytes);const s=e.heap.maxBytes??H,o=n??B,i=k(ee(s/4/D),4096,U);return{source:"heap",allocator:v.heapArraybufferAllocator(s),columnCapacity:o,entityIndexCapacity:i,capBytes:s,intentLabel:`pure-TS heap backing (${w(s)} growable cap, no SharedArrayBuffer)`,budgetEntities:null,derivation:[`backing = heap_arraybuffer_allocator(${w(s)}) — resizable ArrayBuffer, no SAB / no COOP+COEP (is_in_place ✓)`,"trade-off: no worker offload / no WASM backend (both need a transferable SharedArrayBuffer)",`column_capacity = ${o} (${n!==void 0?"pinned":"default"})`,`entity_index = floor_pow2(cap/4 ÷ ${D} B) = ${i} slots`],wasmMemory:null}}if(e?.shared!==void 0){e.shared.maxBytes!==void 0&&R("shared.maxBytes",e.shared.maxBytes);const s=e.shared.maxBytes??H,o=n??B,i=k(ee(s/4/D),4096,U);return{source:"shared",allocator:v.growableSabAllocator(s),columnCapacity:o,entityIndexCapacity:i,capBytes:s,intentLabel:`shared SharedArrayBuffer backing (${w(s)} growable cap, needs COOP/COEP)`,budgetEntities:null,derivation:[`backing = growable_sab_allocator(${w(s)}) — growable SharedArrayBuffer (is_in_place ✓); needs cross-origin isolation`,"enables worker offload + a WASM compute backend (transferable SharedArrayBuffer)",`column_capacity = ${o} (${n!==void 0?"pinned":"default"})`,`entity_index = floor_pow2(cap/4 ÷ ${D} B) = ${i} slots`],wasmMemory:null}}const r=n??B;return{source:"default",allocator:v.heapArraybufferAllocator(),columnCapacity:r,entityIndexCapacity:U,capBytes:H,intentLabel:`default sizing (${w(H)} growable cap)`,budgetEntities:null,derivation:[`cap = ${w(H)} (heap_arraybuffer_allocator default)`,`column_capacity = ${r} (${n!==void 0?"pinned":"DEFAULT_COLUMN_CAPACITY"})`,`entity_index = ${U} slots (full EntityID space, ~12 MiB virtual)`],wasmMemory:null}}function Jn(e,t){return{def:e,values:t}}function oe(e,t){switch(t.kind){case"spawn":{const n=e.commands.spawn();for(const r of t.components)e.commands.add(n,r.def,r.values);return t.onSpawned?.(n),n}case"despawn":e.commands.despawn(t.eid);return;case"add_component":e.commands.add(t.eid,t.def,t.values);return;case"remove_component":e.commands.remove(t.eid,t.def);return;case"set_field":e.setField(t.eid,t.def,t.field,t.value);return;case"disable":e.commands.disable(t.eid);return;case"enable":e.commands.enable(t.eid);return;default:return ht(t,"HostCommand kind")}}class lt{queued=[];spawn(t,n){this.queued.push({kind:"spawn",components:t,onSpawned:n})}despawn(t){this.queued.push({kind:"despawn",eid:t})}addComponent(t,n,r){this.queued.push({kind:"add_component",eid:t,def:n,values:r})}removeComponent(t,n){this.queued.push({kind:"remove_component",eid:t,def:n})}setField(t,n,r,s){this.queued.push({kind:"set_field",eid:t,def:n,field:r,value:s})}disable(t){this.queued.push({kind:"disable",eid:t})}enable(t){this.queued.push({kind:"enable",eid:t})}push(t){this.queued.push(t)}pending(){return this.queued.length}clear(){const t=this.queued.length;return this.queued.length=0,t}drain(t,n){const r=this.queued.length;if(r===0)return 0;if(n===void 0)for(let s=0;s<r;s++)oe(t,this.queued[s]);else for(let s=0;s<r;s++){const o=this.queued[s];n(o),oe(t,o)}return this.queued.splice(0,r),r}}const Le=x-1;function es(e){if(e===we)throw new L("cannot bind op_code 0 (reserved as the command-ring empty-slot marker)");if(e<0||e>255||!Number.isInteger(e))throw new L(`command op_code must be a u8 in [1, 255] (got ${e})`)}function le(e){const t=new Uint8Array(Le);return new DataView(t.buffer).setUint32(0,e,!0),t}function ue(e){return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(0,!0)}function ts(e,t){return{encode(n){if(n.kind!=="set_field")throw new L(`ringSetFieldCodec encodes a "set_field" command (got "${n.kind}")`);const r=new Uint8Array(Le),s=new DataView(r.buffer);return s.setUint32(0,n.eid,!0),s.setFloat64(4,n.value,!0),r},decode(n){const r=new DataView(n.buffer,n.byteOffset,n.byteLength);return{kind:"set_field",eid:r.getUint32(0,!0),def:e,field:t,value:r.getFloat64(4,!0)}}}}function ns(){return{encode(e){if(e.kind!=="despawn")throw new L(`ring_despawn_codec encodes a "despawn" command (got "${e.kind}")`);return le(e.eid)},decode:e=>({kind:"despawn",eid:ue(e)})}}function ss(){return{encode(e){if(e.kind!=="disable")throw new L(`ring_disable_codec encodes a "disable" command (got "${e.kind}")`);return le(e.eid)},decode:e=>({kind:"disable",eid:ue(e)})}}function rs(){return{encode(e){if(e.kind!=="enable")throw new L(`ring_enable_codec encodes an "enable" command (got "${e.kind}")`);return le(e.eid)},decode:e=>({kind:"enable",eid:ue(e)})}}function os(e){return{encode(t){if(t.kind!=="remove_component")throw new L(`ringRemoveComponentCodec encodes a "remove_component" command (got "${t.kind}")`);return le(t.eid)},decode:t=>({kind:"remove_component",eid:ue(t),def:e})}}class is{appliers=new Map;on(t,n){return es(t),this.appliers.set(t,n),this}off(t){return this.appliers.delete(t)}onCommand(t,n){return this.on(t,(r,s,o)=>{const i=n.decode(s);o?.(i),oe(r,i)})}drain(t,n,r,s){return Qt(n,r,(o,i)=>{const c=this.appliers.get(o);c!==void 0&&c(t,i,s)})}}const as=new Set([P.PRE_STARTUP,P.STARTUP,P.POST_STARTUP]),Ae=new WeakMap;function cs(e,t){const n=Ae.get(t);if(n===void 0)return!1;for(const r of n)e.removeSystem(r);return Ae.delete(t),t.clear(),!0}function ds(e,t){const n=new lt,r=[];Ae.set(n,r);const s=t?.name??"host_command_apply",o=t?.ring,i=t?.recorder,c=i?.record,a=t?.schedules??[P.PRE_STARTUP,P.PRE_UPDATE];if(i!==void 0&&a.includes(P.FIXED_UPDATE))throw new S(I.INVALID_RECORDER_SCHEDULE,"install_host_command_seam: a recorder cannot drain on SCHEDULE.FIXED_UPDATE — it would log the fixed-step dt instead of the host update(dt) and diverge on replay. Use a variable-update phase (PRE_UPDATE/UPDATE/POST_UPDATE).");for(const l of a){const d=!as.has(l),_=e.registerSystem({name:`${s}:${l}`,reads:[],writes:[],exclusive:!0,fn:(f,m)=>{if(i!==void 0&&d&&i.openTick(f.ecsTick,m),n.drain(f,c),o!==void 0){const T=e.columnStore,u=T.header.commandRingOff;u!==0&&o.drain(f,T.view,u,c)}}});e.addSystems(l,_),r.push(_)}return n}exports.ACTION_RING_DEFAULT_CAPACITY_SLOTS=_n;exports.ANY_RELATION=pe;exports.ARCHETYPE_DESCRIPTOR_HEADER_BYTES=ce;exports.ARCHETYPE_DESCRIPTOR_OFFSETS=N;exports.BUDGET_DEFAULT_ARCHETYPES=dt;exports.BUDGET_DEFAULT_BYTES_PER_ENTITY=ct;exports.BUDGET_GROWTH_HEADROOM=Te;exports.COLUMN_DESCRIPTOR_BYTES=ae;exports.COMMAND_RING_DEFAULT_CAPACITY_SLOTS=Vt;exports.COMPONENT_MASK_WORDS=j;exports.DEFAULT_COLUMN_CAPACITY=B;exports.DEFAULT_ECS_CAP_BYTES=H;exports.DEFAULT_FIXED_TIMESTEP=St;exports.DEFAULT_MAX_FIXED_STEPS=wt;exports.DEFAULT_ON_DELETE_TARGET=$n;exports.ECSError=S;exports.ECS_ERROR=I;exports.EMPTY_VALUES=pt;exports.ENTITY_INDEX_DEFAULT_CAPACITY=U;exports.ENTITY_INDEX_HEADER_BYTES=J;exports.ENTITY_INDEX_HEADER_OFFSETS=Q;exports.EVENT_RING_DEFAULT_CAPACITY_SLOTS=on;exports.FNV1A_OFFSET_BASIS=nt;exports.FNV1A_PRIME=Oe;exports.HASH_GOLDEN_RATIO=Tt;exports.HASH_SECONDARY_PRIME=At;exports.HOST_COMMAND_PAYLOAD_BYTES=Le;exports.HostCommandDispatcher=is;exports.HostCommandQueue=lt;exports.INDEX_BITS=W;exports.INDEX_MASK=ye;exports.INITIAL_GENERATION=yt;exports.MAX_ENTITY_ID=me;exports.MAX_GENERATION=ie;exports.MAX_INDEX=$;exports.MAX_LIVE_GENERATION=Ot;exports.NO_SWAP=gt;exports.RELATION_TARGET_FIELD=st;exports.RETIRED_GENERATION=Rt;exports.SCHEDULE=P;exports.SIM_ABI_VERSION=ze;exports.STORE_DESCRIPTOR_COMPONENT_LIMIT=Ft;exports.STORE_HEADER_BYTES=qe;exports.STORE_HEADER_OFFSETS=E;exports.STORE_MAGIC=We;exports.STORE_MAX_BYTE_OFFSET=de;exports.STORE_PREFIX_REGIONS=q;exports.Schedule=Qn;exports.SparseComponentStore=Ln;exports.SparseRestoreError=p;exports.StoreLayoutOverflowError=De;exports.TYPED_ARRAY_TAG_TO_TYPE_TAG=$t;exports.TYPE_TAG_STRIDE=ge;exports.UNASSIGNED=mt;exports.accessCheck=qn;exports.alignUp=Re;exports.applyHostCommand=oe;exports.archetypeDescriptorBytes=Se;exports.buildArchetypeViews=tt;exports.buildEntityIndexViews=nn;exports.columnKey=et;exports.componentDebugName=Lt;exports.createColumnStore=bn;exports.createEntityId=Ct;exports.findRegionEntry=Dn;exports.findRegionOffset=Nn;exports.fnv1aStepWord=Un;exports.getEntityGeneration=bt;exports.getEntityIndex=F;exports.installHostCommandSeam=ds;exports.isColumnStoreInternal=Cn;exports.isEcsError=Et;exports.makeRelationStore=Yn;exports.readHeaderRegionTable=wn;exports.readLayoutDescriptorRegion=Ht;exports.readStoreHeader=Pt;exports.resolveECSMemory=Zn;exports.restoreRelations=Hn;exports.restoreSparseStores=Mn;exports.ringDespawnCodec=ns;exports.ringDisableCodec=ss;exports.ringEnableCodec=rs;exports.ringRemoveComponentCodec=os;exports.ringSetFieldCodec=ts;exports.setComponentDebugName=Ut;exports.snapshotRelations=kn;exports.snapshotSparseStores=vn;exports.spawnEntry=Jn;exports.systemSet=Kn;exports.uninstallHostCommandSeam=cs;exports.unsafeCast=ft;exports.validateAndCast=_t;exports.validateSparseStores=Pn;exports.writeArchetypeDescriptor=Ke;
|