@forgeax/engine-ecs 0.0.0-dev.8d955ade1c79
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/LICENSE +202 -0
- package/README.md +278 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__fixtures__/field-shape-fixture.d.ts +16 -0
- package/dist/__fixtures__/field-shape-fixture.d.ts.map +1 -0
- package/dist/__tests__/__fixtures__/inspect-scripts.snapshot.d.ts +3 -0
- package/dist/__tests__/__fixtures__/inspect-scripts.snapshot.d.ts.map +1 -0
- package/dist/__tests__/archetype.unit.test.d.ts +2 -0
- package/dist/__tests__/archetype.unit.test.d.ts.map +1 -0
- package/dist/__tests__/array-handle-element.test-d.d.ts +2 -0
- package/dist/__tests__/array-handle-element.test-d.d.ts.map +1 -0
- package/dist/__tests__/buffer-array-vocab.test-d.d.ts +2 -0
- package/dist/__tests__/buffer-array-vocab.test-d.d.ts.map +1 -0
- package/dist/__tests__/buffer-field-input-widen.unit.test.d.ts +2 -0
- package/dist/__tests__/buffer-field-input-widen.unit.test.d.ts.map +1 -0
- package/dist/__tests__/buffer-pool.test-d.d.ts +2 -0
- package/dist/__tests__/buffer-pool.test-d.d.ts.map +1 -0
- package/dist/__tests__/change-detection.unit.test.d.ts +2 -0
- package/dist/__tests__/change-detection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/command-buffer.test.d.ts +2 -0
- package/dist/__tests__/command-buffer.test.d.ts.map +1 -0
- package/dist/__tests__/commands-deferred.unit.test.d.ts +2 -0
- package/dist/__tests__/commands-deferred.unit.test.d.ts.map +1 -0
- package/dist/__tests__/component-catalog.test.d.ts +2 -0
- package/dist/__tests__/component-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/component-definition-identity.unit.test.d.ts +2 -0
- package/dist/__tests__/component-definition-identity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/component-nan-preflight.unit.test.d.ts +2 -0
- package/dist/__tests__/component-nan-preflight.unit.test.d.ts.map +1 -0
- package/dist/__tests__/component-schema.test-d.d.ts +2 -0
- package/dist/__tests__/component-schema.test-d.d.ts.map +1 -0
- package/dist/__tests__/component-schema.test.d.ts +2 -0
- package/dist/__tests__/component-schema.test.d.ts.map +1 -0
- package/dist/__tests__/define-component-options.test-d.d.ts +2 -0
- package/dist/__tests__/define-component-options.test-d.d.ts.map +1 -0
- package/dist/__tests__/deprecated-vocab-rejection.unit.test.d.ts +2 -0
- package/dist/__tests__/deprecated-vocab-rejection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/despawn-all.unit.test.d.ts +2 -0
- package/dist/__tests__/despawn-all.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ecs-core-reduction.characterization.test.d.ts +2 -0
- package/dist/__tests__/ecs-core-reduction.characterization.test.d.ts.map +1 -0
- package/dist/__tests__/ecs-core-reduction.perf.test.d.ts +2 -0
- package/dist/__tests__/ecs-core-reduction.perf.test.d.ts.map +1 -0
- package/dist/__tests__/ecs-error-code-31.test-d.d.ts +2 -0
- package/dist/__tests__/ecs-error-code-31.test-d.d.ts.map +1 -0
- package/dist/__tests__/entity-disabling.unit.test.d.ts +2 -0
- package/dist/__tests__/entity-disabling.unit.test.d.ts.map +1 -0
- package/dist/__tests__/entity-handle-codec-parity.unit.test.d.ts +2 -0
- package/dist/__tests__/entity-handle-codec-parity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/errors.unit.test.d.ts +2 -0
- package/dist/__tests__/errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/execution-conflict-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/execution-conflict-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/execution-shared-storage.unit.test.d.ts +2 -0
- package/dist/__tests__/execution-shared-storage.unit.test.d.ts.map +1 -0
- package/dist/__tests__/externalization-portable-value.unit.test.d.ts +2 -0
- package/dist/__tests__/externalization-portable-value.unit.test.d.ts.map +1 -0
- package/dist/__tests__/externalization-projection.unit.test.d.ts +2 -0
- package/dist/__tests__/externalization-projection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/externalization-render-read-lease.test-d.d.ts +2 -0
- package/dist/__tests__/externalization-render-read-lease.test-d.d.ts.map +1 -0
- package/dist/__tests__/externalization-render-read-lease.unit.test.d.ts +2 -0
- package/dist/__tests__/externalization-render-read-lease.unit.test.d.ts.map +1 -0
- package/dist/__tests__/externalization-root-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/externalization-root-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/field-enum-labels-reflection.test.d.ts +2 -0
- package/dist/__tests__/field-enum-labels-reflection.test.d.ts.map +1 -0
- package/dist/__tests__/field-shape-fixture.test.d.ts +2 -0
- package/dist/__tests__/field-shape-fixture.test.d.ts.map +1 -0
- package/dist/__tests__/field-transient-reflection.test.d.ts +2 -0
- package/dist/__tests__/field-transient-reflection.test.d.ts.map +1 -0
- package/dist/__tests__/field-value-type.test-d.d.ts +2 -0
- package/dist/__tests__/field-value-type.test-d.d.ts.map +1 -0
- package/dist/__tests__/fixed-update.unit.test.d.ts +2 -0
- package/dist/__tests__/fixed-update.unit.test.d.ts.map +1 -0
- package/dist/__tests__/handle.test-d.d.ts +2 -0
- package/dist/__tests__/handle.test-d.d.ts.map +1 -0
- package/dist/__tests__/hierarchy.unit.test.d.ts +2 -0
- package/dist/__tests__/hierarchy.unit.test.d.ts.map +1 -0
- package/dist/__tests__/managed-array-vocab.test-d.d.ts +2 -0
- package/dist/__tests__/managed-array-vocab.test-d.d.ts.map +1 -0
- package/dist/__tests__/minimal-example.test-d.d.ts +2 -0
- package/dist/__tests__/minimal-example.test-d.d.ts.map +1 -0
- package/dist/__tests__/name-read-types.test-d.d.ts +2 -0
- package/dist/__tests__/name-read-types.test-d.d.ts.map +1 -0
- package/dist/__tests__/plugin-service.test.d.ts +2 -0
- package/dist/__tests__/plugin-service.test.d.ts.map +1 -0
- package/dist/__tests__/query-combinations.unit.test.d.ts +2 -0
- package/dist/__tests__/query-combinations.unit.test.d.ts.map +1 -0
- package/dist/__tests__/query-light-extract-flat-column-ratio.perf.test.d.ts +2 -0
- package/dist/__tests__/query-light-extract-flat-column-ratio.perf.test.d.ts.map +1 -0
- package/dist/__tests__/query-storage-trends.perf.test.d.ts +2 -0
- package/dist/__tests__/query-storage-trends.perf.test.d.ts.map +1 -0
- package/dist/__tests__/query-trs-flat-column-ratio.perf.test.d.ts +2 -0
- package/dist/__tests__/query-trs-flat-column-ratio.perf.test.d.ts.map +1 -0
- package/dist/__tests__/query.unit.test.d.ts +2 -0
- package/dist/__tests__/query.unit.test.d.ts.map +1 -0
- package/dist/__tests__/relationship-index.perf.test.d.ts +2 -0
- package/dist/__tests__/relationship-index.perf.test.d.ts.map +1 -0
- package/dist/__tests__/relationship-index.test.d.ts +2 -0
- package/dist/__tests__/relationship-index.test.d.ts.map +1 -0
- package/dist/__tests__/scalar-field-type-owner.test-d.d.ts +2 -0
- package/dist/__tests__/scalar-field-type-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/schedule-determinism.unit.test.d.ts +2 -0
- package/dist/__tests__/schedule-determinism.unit.test.d.ts.map +1 -0
- package/dist/__tests__/schedule-inspection.unit.test.d.ts +2 -0
- package/dist/__tests__/schedule-inspection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/schedule-scope-error.unit.test.d.ts +2 -0
- package/dist/__tests__/schedule-scope-error.unit.test.d.ts.map +1 -0
- package/dist/__tests__/schedule-token.unit.test.d.ts +2 -0
- package/dist/__tests__/schedule-token.unit.test.d.ts.map +1 -0
- package/dist/__tests__/schema-vocab.test-d.d.ts +2 -0
- package/dist/__tests__/schema-vocab.test-d.d.ts.map +1 -0
- package/dist/__tests__/serialization.unit.test.d.ts +2 -0
- package/dist/__tests__/serialization.unit.test.d.ts.map +1 -0
- package/dist/__tests__/shared-kernel-eligibility.test-d.d.ts +2 -0
- package/dist/__tests__/shared-kernel-eligibility.test-d.d.ts.map +1 -0
- package/dist/__tests__/shared-kernel-eligibility.unit.test.d.ts +2 -0
- package/dist/__tests__/shared-kernel-eligibility.unit.test.d.ts.map +1 -0
- package/dist/__tests__/shared-ref-store.unit.test.d.ts +2 -0
- package/dist/__tests__/shared-ref-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/sparse-tag.unit.test.d.ts +2 -0
- package/dist/__tests__/sparse-tag.unit.test.d.ts.map +1 -0
- package/dist/__tests__/spawn-field-error.test-d.d.ts +2 -0
- package/dist/__tests__/spawn-field-error.test-d.d.ts.map +1 -0
- package/dist/__tests__/stale-error.test-d.d.ts +2 -0
- package/dist/__tests__/stale-error.test-d.d.ts.map +1 -0
- package/dist/__tests__/string-view-symmetry.test-d.d.ts +2 -0
- package/dist/__tests__/string-view-symmetry.test-d.d.ts.map +1 -0
- package/dist/__tests__/string-vocab.test-d.d.ts +2 -0
- package/dist/__tests__/string-vocab.test-d.d.ts.map +1 -0
- package/dist/__tests__/structure-epoch-boundaries.unit.test.d.ts +2 -0
- package/dist/__tests__/structure-epoch-boundaries.unit.test.d.ts.map +1 -0
- package/dist/__tests__/structure-epoch.unit.test.d.ts +2 -0
- package/dist/__tests__/structure-epoch.unit.test.d.ts.map +1 -0
- package/dist/__tests__/table-archetype-mapping.unit.test.d.ts +2 -0
- package/dist/__tests__/table-archetype-mapping.unit.test.d.ts.map +1 -0
- package/dist/__tests__/time.unit.test.d.ts +2 -0
- package/dist/__tests__/time.unit.test.d.ts.map +1 -0
- package/dist/__tests__/types.test-d.d.ts +2 -0
- package/dist/__tests__/types.test-d.d.ts.map +1 -0
- package/dist/__tests__/unique-ref-store.unit.test.d.ts +2 -0
- package/dist/__tests__/unique-ref-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/utils/handle-numeric.d.ts +14 -0
- package/dist/__tests__/utils/handle-numeric.d.ts.map +1 -0
- package/dist/__tests__/validation-root-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/validation-root-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-atomic-write.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-atomic-write.unit.test.d.ts.map +1 -0
- package/dist/__tests__/world-change-journal.unit.test.d.ts +2 -0
- package/dist/__tests__/world-change-journal.unit.test.d.ts.map +1 -0
- package/dist/__tests__/world-characterization.unit.test.d.ts +2 -0
- package/dist/__tests__/world-characterization.unit.test.d.ts.map +1 -0
- package/dist/__tests__/world-consumer-inference.test-d.d.ts +2 -0
- package/dist/__tests__/world-consumer-inference.test-d.d.ts.map +1 -0
- package/dist/__tests__/world-health.contract.test.d.ts +2 -0
- package/dist/__tests__/world-health.contract.test.d.ts.map +1 -0
- package/dist/__tests__/world-inspection.test.d.ts +2 -0
- package/dist/__tests__/world-inspection.test.d.ts.map +1 -0
- package/dist/__tests__/world-internal-identity.unit.test.d.ts +2 -0
- package/dist/__tests__/world-internal-identity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/world-managed-roundtrip.unit.test.d.ts +2 -0
- package/dist/__tests__/world-managed-roundtrip.unit.test.d.ts.map +1 -0
- package/dist/__tests__/world-scheduling.m4.test.d.ts +2 -0
- package/dist/__tests__/world-scheduling.m4.test.d.ts.map +1 -0
- package/dist/__tests__/world-unique-roundtrip.unit.test.d.ts +2 -0
- package/dist/__tests__/world-unique-roundtrip.unit.test.d.ts.map +1 -0
- package/dist/__tests__/world.test-d.d.ts +2 -0
- package/dist/__tests__/world.test-d.d.ts.map +1 -0
- package/dist/buffer-pool.d.ts +109 -0
- package/dist/buffer-pool.d.ts.map +1 -0
- package/dist/commands.d.ts +93 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/component-default-fallback.d.ts +88 -0
- package/dist/component-default-fallback.d.ts.map +1 -0
- package/dist/component-schema.d.ts +34 -0
- package/dist/component-schema.d.ts.map +1 -0
- package/dist/component-value-validate.d.ts +29 -0
- package/dist/component-value-validate.d.ts.map +1 -0
- package/dist/component.d.ts +581 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/entity-handle.d.ts +68 -0
- package/dist/entity-handle.d.ts.map +1 -0
- package/dist/entity.d.ts +86 -0
- package/dist/entity.d.ts.map +1 -0
- package/dist/errors/query-and-component-errors.d.ts +132 -0
- package/dist/errors/query-and-component-errors.d.ts.map +1 -0
- package/dist/errors/relationship-errors.d.ts +112 -0
- package/dist/errors/relationship-errors.d.ts.map +1 -0
- package/dist/errors/sprite-and-shared-errors.d.ts +107 -0
- package/dist/errors/sprite-and-shared-errors.d.ts.map +1 -0
- package/dist/errors/validation-errors.d.ts +229 -0
- package/dist/errors/validation-errors.d.ts.map +1 -0
- package/dist/errors.d.ts +763 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/execution/shared-kernel.d.ts +106 -0
- package/dist/execution/shared-kernel.d.ts.map +1 -0
- package/dist/externalization/index.d.ts +31 -0
- package/dist/externalization/index.d.ts.map +1 -0
- package/dist/externalization/index.mjs +298 -0
- package/dist/externalization/index.mjs.map +1 -0
- package/dist/index.d.ts +261 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +7422 -0
- package/dist/index.mjs.map +1 -0
- package/dist/internal.mjs +479 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/plugin-service.d.ts +11 -0
- package/dist/plugin-service.d.ts.map +1 -0
- package/dist/projection/index.d.ts +103 -0
- package/dist/projection/index.d.ts.map +1 -0
- package/dist/projection/index.mjs +615 -0
- package/dist/projection/index.mjs.map +1 -0
- package/dist/query/query.d.ts +58 -0
- package/dist/query/query.d.ts.map +1 -0
- package/dist/relationship-index.d.ts +81 -0
- package/dist/relationship-index.d.ts.map +1 -0
- package/dist/resource.d.ts +70 -0
- package/dist/resource.d.ts.map +1 -0
- package/dist/schedule-token.d.ts +16 -0
- package/dist/schedule-token.d.ts.map +1 -0
- package/dist/schedule.d.ts +271 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/shared-ref-store.d.ts +144 -0
- package/dist/shared-ref-store.d.ts.map +1 -0
- package/dist/shared.d.ts +3 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.mjs +364 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/storage/archetype-graph.d.ts +54 -0
- package/dist/storage/archetype-graph.d.ts.map +1 -0
- package/dist/storage/archetype.d.ts +23 -0
- package/dist/storage/archetype.d.ts.map +1 -0
- package/dist/storage/change-detection.d.ts +40 -0
- package/dist/storage/change-detection.d.ts.map +1 -0
- package/dist/storage/column.d.ts +111 -0
- package/dist/storage/column.d.ts.map +1 -0
- package/dist/storage/table.d.ts +29 -0
- package/dist/storage/table.d.ts.map +1 -0
- package/dist/time.d.ts +57 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/unique-ref-store.d.ts +105 -0
- package/dist/unique-ref-store.d.ts.map +1 -0
- package/dist/world-change-journal.d.ts +34 -0
- package/dist/world-change-journal.d.ts.map +1 -0
- package/dist/world-component-access.d.ts +265 -0
- package/dist/world-component-access.d.ts.map +1 -0
- package/dist/world-component-storage.d.ts +282 -0
- package/dist/world-component-storage.d.ts.map +1 -0
- package/dist/world-core.d.ts +39 -0
- package/dist/world-core.d.ts.map +1 -0
- package/dist/world-entity-lifecycle.d.ts +30 -0
- package/dist/world-entity-lifecycle.d.ts.map +1 -0
- package/dist/world-internal.d.ts +14 -0
- package/dist/world-internal.d.ts.map +1 -0
- package/dist/world-scheduling.d.ts +30 -0
- package/dist/world-scheduling.d.ts.map +1 -0
- package/dist/world.d.ts +620 -0
- package/dist/world.d.ts.map +1 -0
- package/package.json +77 -0
- package/src/__fixtures__/field-shape-fixture.ts +30 -0
- package/src/__tests__/__fixtures__/inspect-scripts.snapshot.ts +2 -0
- package/src/__tests__/archetype.unit.test.ts +1837 -0
- package/src/__tests__/array-handle-element.test-d.ts +34 -0
- package/src/__tests__/buffer-array-vocab.test-d.ts +53 -0
- package/src/__tests__/buffer-field-input-widen.unit.test.ts +99 -0
- package/src/__tests__/buffer-pool.test-d.ts +32 -0
- package/src/__tests__/change-detection.unit.test.ts +86 -0
- package/src/__tests__/command-buffer.test.ts +179 -0
- package/src/__tests__/commands-deferred.unit.test.ts +68 -0
- package/src/__tests__/component-catalog.test.ts +59 -0
- package/src/__tests__/component-definition-identity.unit.test.ts +24 -0
- package/src/__tests__/component-nan-preflight.unit.test.ts +186 -0
- package/src/__tests__/component-schema.test-d.ts +119 -0
- package/src/__tests__/component-schema.test.ts +55 -0
- package/src/__tests__/define-component-options.test-d.ts +35 -0
- package/src/__tests__/deprecated-vocab-rejection.unit.test.ts +59 -0
- package/src/__tests__/despawn-all.unit.test.ts +17 -0
- package/src/__tests__/ecs-core-reduction.characterization.test.ts +130 -0
- package/src/__tests__/ecs-core-reduction.perf.test.ts +260 -0
- package/src/__tests__/ecs-error-code-31.test-d.ts +42 -0
- package/src/__tests__/entity-disabling.unit.test.ts +37 -0
- package/src/__tests__/entity-handle-codec-parity.unit.test.ts +126 -0
- package/src/__tests__/errors.unit.test.ts +1456 -0
- package/src/__tests__/execution-conflict-boundary.unit.test.ts +123 -0
- package/src/__tests__/execution-shared-storage.unit.test.ts +40 -0
- package/src/__tests__/externalization-portable-value.unit.test.ts +275 -0
- package/src/__tests__/externalization-projection.unit.test.ts +325 -0
- package/src/__tests__/externalization-render-read-lease.test-d.ts +30 -0
- package/src/__tests__/externalization-render-read-lease.unit.test.ts +79 -0
- package/src/__tests__/externalization-root-surface.unit.test.ts +33 -0
- package/src/__tests__/field-enum-labels-reflection.test.ts +66 -0
- package/src/__tests__/field-shape-fixture.test.ts +61 -0
- package/src/__tests__/field-transient-reflection.test.ts +59 -0
- package/src/__tests__/field-value-type.test-d.ts +57 -0
- package/src/__tests__/fixed-update.unit.test.ts +78 -0
- package/src/__tests__/handle.test-d.ts +86 -0
- package/src/__tests__/hierarchy.unit.test.ts +2534 -0
- package/src/__tests__/managed-array-vocab.test-d.ts +137 -0
- package/src/__tests__/minimal-example.test-d.ts +42 -0
- package/src/__tests__/name-read-types.test-d.ts +72 -0
- package/src/__tests__/plugin-service.test.ts +13 -0
- package/src/__tests__/query-combinations.unit.test.ts +42 -0
- package/src/__tests__/query-light-extract-flat-column-ratio.perf.test.ts +252 -0
- package/src/__tests__/query-storage-trends.perf.test.ts +104 -0
- package/src/__tests__/query-trs-flat-column-ratio.perf.test.ts +194 -0
- package/src/__tests__/query.unit.test.ts +196 -0
- package/src/__tests__/relationship-index.perf.test.ts +126 -0
- package/src/__tests__/relationship-index.test.ts +70 -0
- package/src/__tests__/scalar-field-type-owner.test-d.ts +71 -0
- package/src/__tests__/schedule-determinism.unit.test.ts +36 -0
- package/src/__tests__/schedule-inspection.unit.test.ts +81 -0
- package/src/__tests__/schedule-scope-error.unit.test.ts +63 -0
- package/src/__tests__/schedule-token.unit.test.ts +54 -0
- package/src/__tests__/schema-vocab.test-d.ts +103 -0
- package/src/__tests__/serialization.unit.test.ts +2740 -0
- package/src/__tests__/shared-kernel-eligibility.test-d.ts +18 -0
- package/src/__tests__/shared-kernel-eligibility.unit.test.ts +78 -0
- package/src/__tests__/shared-ref-store.unit.test.ts +646 -0
- package/src/__tests__/sparse-tag.unit.test.ts +201 -0
- package/src/__tests__/spawn-field-error.test-d.ts +41 -0
- package/src/__tests__/stale-error.test-d.ts +208 -0
- package/src/__tests__/string-view-symmetry.test-d.ts +26 -0
- package/src/__tests__/string-vocab.test-d.ts +49 -0
- package/src/__tests__/structure-epoch-boundaries.unit.test.ts +39 -0
- package/src/__tests__/structure-epoch.unit.test.ts +48 -0
- package/src/__tests__/table-archetype-mapping.unit.test.ts +78 -0
- package/src/__tests__/time.unit.test.ts +79 -0
- package/src/__tests__/types.test-d.ts +38 -0
- package/src/__tests__/unique-ref-store.unit.test.ts +348 -0
- package/src/__tests__/utils/handle-numeric.ts +30 -0
- package/src/__tests__/validation-root-surface.unit.test.ts +15 -0
- package/src/__tests__/visibility-atomic-write.unit.test.ts +82 -0
- package/src/__tests__/world-change-journal.unit.test.ts +97 -0
- package/src/__tests__/world-characterization.unit.test.ts +408 -0
- package/src/__tests__/world-consumer-inference.test-d.ts +16 -0
- package/src/__tests__/world-health.contract.test.ts +87 -0
- package/src/__tests__/world-inspection.test.ts +37 -0
- package/src/__tests__/world-internal-identity.unit.test.ts +17 -0
- package/src/__tests__/world-managed-roundtrip.unit.test.ts +98 -0
- package/src/__tests__/world-scheduling.m4.test.ts +52 -0
- package/src/__tests__/world-unique-roundtrip.unit.test.ts +357 -0
- package/src/__tests__/world.test-d.ts +156 -0
- package/src/buffer-pool.ts +357 -0
- package/src/commands.ts +644 -0
- package/src/component-default-fallback.ts +236 -0
- package/src/component-schema.ts +92 -0
- package/src/component-value-validate.ts +135 -0
- package/src/component.ts +1268 -0
- package/src/entity-handle.ts +104 -0
- package/src/entity.ts +140 -0
- package/src/errors/query-and-component-errors.ts +200 -0
- package/src/errors/relationship-errors.ts +198 -0
- package/src/errors/sprite-and-shared-errors.ts +231 -0
- package/src/errors/validation-errors.ts +506 -0
- package/src/errors.ts +1464 -0
- package/src/execution/shared-kernel.ts +392 -0
- package/src/externalization/index.ts +170 -0
- package/src/index.ts +414 -0
- package/src/plugin-service.ts +35 -0
- package/src/projection/index.ts +318 -0
- package/src/query/query.ts +606 -0
- package/src/relationship-index.ts +175 -0
- package/src/resource.ts +106 -0
- package/src/schedule-token.ts +40 -0
- package/src/schedule.ts +846 -0
- package/src/shared-ref-store.ts +418 -0
- package/src/shared.ts +23 -0
- package/src/storage/archetype-graph.ts +166 -0
- package/src/storage/archetype.ts +78 -0
- package/src/storage/change-detection.ts +231 -0
- package/src/storage/column.ts +247 -0
- package/src/storage/table.ts +153 -0
- package/src/time.ts +122 -0
- package/src/unique-ref-store.ts +278 -0
- package/src/world-change-journal.ts +84 -0
- package/src/world-component-access.ts +1421 -0
- package/src/world-component-storage.ts +1178 -0
- package/src/world-core.ts +74 -0
- package/src/world-entity-lifecycle.ts +539 -0
- package/src/world-internal.ts +75 -0
- package/src/world-scheduling.ts +499 -0
- package/src/world.ts +1399 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Compile-time type-derivation tests for the FieldValueType<T> 4-keyword
|
|
2
|
+
// TypedArray contract after the M1 buffer/array vocab collapse (w2, AC-02).
|
|
3
|
+
//
|
|
4
|
+
// Locks the new contract: the four schema-vocab keywords for byte / typed
|
|
5
|
+
// array storage all resolve to a concrete TypedArray (or Uint8Array for the
|
|
6
|
+
// byte-only `buffer` family) without an intermediate view-class wrapper.
|
|
7
|
+
//
|
|
8
|
+
// FieldValueType<'array<f32>'> => Float32Array
|
|
9
|
+
// FieldValueType<'array<entity>'> => Uint32Array (Entity column storage)
|
|
10
|
+
// FieldValueType<'buffer'> => Uint8Array
|
|
11
|
+
// FieldValueType<'buffer<8>'> => Uint8Array
|
|
12
|
+
//
|
|
13
|
+
// Pre-M1 (before w4): array<...> derives to Var/FixedArrayView and buffer<N>
|
|
14
|
+
// is unrecognised — both shapes produce TS errors against the expected
|
|
15
|
+
// TypedArray equivalence below; this is the TDD red state.
|
|
16
|
+
//
|
|
17
|
+
// Post-M1 (after w4): the 4 keywords resolve directly to TypedArray and the
|
|
18
|
+
// expectTypeOf assertions hold.
|
|
19
|
+
|
|
20
|
+
import { describe, expectTypeOf, it } from 'vitest';
|
|
21
|
+
import type { FieldValueType, TypedArrayFor } from '../component';
|
|
22
|
+
|
|
23
|
+
describe('FieldValueType — buffer/array TypedArray contract (w2, AC-02)', () => {
|
|
24
|
+
it("FieldValueType<'array<f32>'> resolves to Float32Array", () => {
|
|
25
|
+
expectTypeOf<FieldValueType<'array<f32>'>>().toEqualTypeOf<Float32Array>();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("FieldValueType<'array<u32>'> resolves to Uint32Array", () => {
|
|
29
|
+
expectTypeOf<FieldValueType<'array<u32>'>>().toEqualTypeOf<Uint32Array>();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("FieldValueType<'array<entity>'> resolves to Uint32Array (Entity column storage)", () => {
|
|
33
|
+
expectTypeOf<FieldValueType<'array<entity>'>>().toEqualTypeOf<Uint32Array>();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("FieldValueType<'array<f32, 16>'> resolves to Float32Array (fixed capacity)", () => {
|
|
37
|
+
expectTypeOf<FieldValueType<'array<f32, 16>'>>().toEqualTypeOf<Float32Array>();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("FieldValueType<'buffer'> resolves to Uint8Array (variable byte slot)", () => {
|
|
41
|
+
expectTypeOf<FieldValueType<'buffer'>>().toEqualTypeOf<Uint8Array>();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("FieldValueType<'buffer<8>'> resolves to Uint8Array (fixed byte slot)", () => {
|
|
45
|
+
expectTypeOf<FieldValueType<'buffer<8>'>>().toEqualTypeOf<Uint8Array>();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('TypedArrayFor — public single-export contract (w2, AC-02)', () => {
|
|
50
|
+
it("TypedArrayFor<'f32'> is Float32Array", () => {
|
|
51
|
+
expectTypeOf<TypedArrayFor<'f32'>>().toEqualTypeOf<Float32Array>();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("TypedArrayFor<'u32'> is Uint32Array", () => {
|
|
55
|
+
expectTypeOf<TypedArrayFor<'u32'>>().toEqualTypeOf<Uint32Array>();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { FixedUpdate, Update } from '../schedule-token';
|
|
3
|
+
import { FixedTime, Time } from '../time';
|
|
4
|
+
import { World } from '../world';
|
|
5
|
+
|
|
6
|
+
describe('fixed update loop', () => {
|
|
7
|
+
it('runs zero, one, and multiple fixed iterations while preserving remainder', () => {
|
|
8
|
+
const world = new World();
|
|
9
|
+
const ticks: number[] = [];
|
|
10
|
+
world.addSystem(FixedUpdate, {
|
|
11
|
+
name: 'fixed',
|
|
12
|
+
queries: [],
|
|
13
|
+
fn: (_world) => ticks.push(_world.getResource<typeof FixedTime>(FixedTime).tick),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
expect(world.update(0.01).ok).toBe(true);
|
|
17
|
+
expect(world.update(0.01).ok).toBe(true);
|
|
18
|
+
expect(world.update(2 / 60).ok).toBe(true);
|
|
19
|
+
expect(ticks).toEqual([1, 2, 3]);
|
|
20
|
+
expect(world.getResource<typeof FixedTime>(FixedTime).tick).toBe(3);
|
|
21
|
+
expect(world.getResource<typeof FixedTime>(FixedTime).overstep).toBeCloseTo(1 / 300, 12);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('clamps before accumulating fixed time and records exact dropped metrics', () => {
|
|
25
|
+
const world = new World();
|
|
26
|
+
let fixedRuns = 0;
|
|
27
|
+
world.addSystem(FixedUpdate, { name: 'fixed', queries: [], fn: () => fixedRuns++ });
|
|
28
|
+
|
|
29
|
+
expect(world.update(5).ok).toBe(true);
|
|
30
|
+
const time = world.getResource<typeof Time>(Time);
|
|
31
|
+
const fixed = world.getResource<typeof FixedTime>(FixedTime);
|
|
32
|
+
expect(time.delta).toBe(0.1);
|
|
33
|
+
expect(fixedRuns).toBe(4);
|
|
34
|
+
expect(fixed.droppedUpdates).toBe(1);
|
|
35
|
+
expect(fixed.droppedSeconds).toBeCloseTo(1 / 60, 12);
|
|
36
|
+
expect(fixed.overstep).toBeCloseTo(1 / 60, 10);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('does not replay discarded catch-up time on the next healthy frame', () => {
|
|
40
|
+
const world = new World();
|
|
41
|
+
let fixedRuns = 0;
|
|
42
|
+
world.addSystem(FixedUpdate, { name: 'fixed', queries: [], fn: () => fixedRuns++ });
|
|
43
|
+
|
|
44
|
+
expect(world.update(5).ok).toBe(true);
|
|
45
|
+
const afterLargeFrame = world.getResource<typeof FixedTime>(FixedTime);
|
|
46
|
+
const largeFrameTick = afterLargeFrame.tick;
|
|
47
|
+
const largeFrameDroppedSeconds = afterLargeFrame.droppedSeconds;
|
|
48
|
+
const largeFrameDroppedUpdates = afterLargeFrame.droppedUpdates;
|
|
49
|
+
|
|
50
|
+
expect(world.update(1 / 60).ok).toBe(true);
|
|
51
|
+
const afterHealthyFrame = world.getResource<typeof FixedTime>(FixedTime);
|
|
52
|
+
expect(fixedRuns).toBe(5);
|
|
53
|
+
expect(afterHealthyFrame.tick).toBe(largeFrameTick + 1);
|
|
54
|
+
expect(afterHealthyFrame.droppedSeconds).toBe(largeFrameDroppedSeconds);
|
|
55
|
+
expect(afterHealthyFrame.droppedUpdates).toBe(largeFrameDroppedUpdates);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('runs Update before and after the intrinsic fixed node', () => {
|
|
59
|
+
const world = new World();
|
|
60
|
+
const trace: string[] = [];
|
|
61
|
+
world.addSystem(Update, {
|
|
62
|
+
name: 'before-fixed',
|
|
63
|
+
queries: [],
|
|
64
|
+
before: [FixedUpdate],
|
|
65
|
+
fn: () => trace.push('before'),
|
|
66
|
+
});
|
|
67
|
+
world.addSystem(FixedUpdate, { name: 'fixed', queries: [], fn: () => trace.push('fixed') });
|
|
68
|
+
world.addSystem(Update, {
|
|
69
|
+
name: 'after-fixed',
|
|
70
|
+
queries: [],
|
|
71
|
+
after: [FixedUpdate],
|
|
72
|
+
fn: () => trace.push('after'),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
expect(world.update(1 / 60).ok).toBe(true);
|
|
76
|
+
expect(trace).toEqual(['before', 'fixed', 'after']);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Compile-time type assertions for the Handle<T,M> brand (w1 + AC-02).
|
|
2
|
+
//
|
|
3
|
+
// Locks two phantom dimensions:
|
|
4
|
+
// - target T (the asset type tag, e.g. 'MeshAsset' / 'MaterialAsset')
|
|
5
|
+
// - mode M ('unique' | 'shared')
|
|
6
|
+
//
|
|
7
|
+
// AC-02 requires at least one @ts-expect-error proving cross-mode rejection.
|
|
8
|
+
// Cross-target rejection is also covered. Handle<T,M> still widens to number
|
|
9
|
+
// for GPU upload compatibility.
|
|
10
|
+
//
|
|
11
|
+
// w3: EntityHandle type-level assertions — EntityHandle is numeric (widens
|
|
12
|
+
// to number), and encodeEntity returns an EntityHandle (not a bare number).
|
|
13
|
+
|
|
14
|
+
import type { Handle } from '@forgeax/engine-types';
|
|
15
|
+
import { describe, expectTypeOf, it } from 'vitest';
|
|
16
|
+
import type { EntityHandle } from '../entity-handle';
|
|
17
|
+
|
|
18
|
+
describe('Handle<T,M> — phantom brand (w1)', () => {
|
|
19
|
+
it('Handle<T,M> structurally widens to number (GPU upload compatibility)', () => {
|
|
20
|
+
type H = Handle<'MeshAsset', 'shared'>;
|
|
21
|
+
expectTypeOf<H>().toMatchTypeOf<number>();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('Handle<T,managed> and Handle<T,unmanaged> are distinct types', () => {
|
|
25
|
+
type Managed = Handle<'MaterialAsset', 'unique'>;
|
|
26
|
+
type Unmanaged = Handle<'MaterialAsset', 'shared'>;
|
|
27
|
+
// Neither type is assignable to the other under TS structural rules
|
|
28
|
+
// because the phantom `__handle.mode` differs.
|
|
29
|
+
expectTypeOf<Managed>().not.toEqualTypeOf<Unmanaged>();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('Handle<A,M> and Handle<B,M> with distinct targets are distinct types', () => {
|
|
33
|
+
type Mesh = Handle<'MeshAsset', 'shared'>;
|
|
34
|
+
type Material = Handle<'MaterialAsset', 'shared'>;
|
|
35
|
+
expectTypeOf<Mesh>().not.toEqualTypeOf<Material>();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('plain number is not assignable to Handle<T,M> (brand prevents accidental construction)', () => {
|
|
39
|
+
type Mesh = Handle<'MeshAsset', 'shared'>;
|
|
40
|
+
const n = 42 as number;
|
|
41
|
+
// @ts-expect-error — plain number cannot be widened to a phantom-branded Handle
|
|
42
|
+
const h: Mesh = n;
|
|
43
|
+
void h;
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('Handle<T,managed> is not assignable to Handle<T,unmanaged> (cross-mode rejection — AC-02)', () => {
|
|
47
|
+
type Managed = Handle<'MaterialAsset', 'unique'>;
|
|
48
|
+
type Unmanaged = Handle<'MaterialAsset', 'shared'>;
|
|
49
|
+
const m = 0 as unknown as Managed;
|
|
50
|
+
// @ts-expect-error — managed handle cannot be assigned to an unmanaged slot
|
|
51
|
+
const u: Unmanaged = m;
|
|
52
|
+
void u;
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('Handle<T,unmanaged> is not assignable to Handle<T,managed> (cross-mode reverse)', () => {
|
|
56
|
+
type Managed = Handle<'MeshAsset', 'unique'>;
|
|
57
|
+
type Unmanaged = Handle<'MeshAsset', 'shared'>;
|
|
58
|
+
const u = 0 as unknown as Unmanaged;
|
|
59
|
+
// @ts-expect-error — unmanaged handle cannot be assigned to a managed slot
|
|
60
|
+
const m: Managed = u;
|
|
61
|
+
void m;
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('Handle<A,M> is not assignable to Handle<B,M> (cross-target rejection)', () => {
|
|
65
|
+
type Mesh = Handle<'MeshAsset', 'shared'>;
|
|
66
|
+
type Material = Handle<'MaterialAsset', 'shared'>;
|
|
67
|
+
const mesh = 0 as unknown as Mesh;
|
|
68
|
+
// @ts-expect-error — mesh handle cannot be assigned to a material handle slot
|
|
69
|
+
const mat: Material = mesh;
|
|
70
|
+
void mat;
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// w3: EntityHandle type-level assertions
|
|
75
|
+
describe('[w3] EntityHandle -- numeric brand', () => {
|
|
76
|
+
it('EntityHandle widens to number (runtime identity is a JS number)', () => {
|
|
77
|
+
expectTypeOf<EntityHandle>().toMatchTypeOf<number>();
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('plain number is not assignable to EntityHandle (brand prevents accidental construction)', () => {
|
|
81
|
+
const n = 42 as number;
|
|
82
|
+
// @ts-expect-error -- plain number cannot be widened to phantom-branded EntityHandle
|
|
83
|
+
const eh: EntityHandle = n;
|
|
84
|
+
void eh;
|
|
85
|
+
});
|
|
86
|
+
});
|