@adobe/data 0.1.2 → 0.2.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/.cursorrules +28 -0
- package/.eslintrc.cjs +48 -0
- package/.github/CONTRIBUTING.md +47 -0
- package/CODE_OF_CONDUCT.md +79 -0
- package/LICENSE +21 -0
- package/README.md +2 -2
- package/asconfig.json +22 -0
- package/assembly/index.ts +85 -0
- package/assembly/tsconfig.json +17 -0
- package/c/build_run.sh +2 -0
- package/c/vector_addition +0 -0
- package/c/vector_addition.c +125 -0
- package/{cache/functions/types.js → config/license.js} +0 -2
- package/docs/perftest.html +28 -0
- package/index.html +10 -0
- package/package.json +50 -27
- package/scripts/deploy-docs.sh +41 -0
- package/{assembly-test/assembly.test.js → src/assembly-test/assembly.test.ts} +4 -4
- package/src/cache/async-cache.ts +38 -0
- package/{cache/blob-store.test.js → src/cache/blob-store.test.ts} +41 -7
- package/src/cache/blob-store.ts +278 -0
- package/src/cache/data-cache.test.ts +61 -0
- package/src/cache/data-cache.ts +183 -0
- package/src/cache/expiring-data-cache.test.ts +81 -0
- package/src/cache/expiring-data-cache.ts +61 -0
- package/src/cache/fallback-async-cache.ts +49 -0
- package/src/cache/functions/async-data-function.ts +25 -0
- package/src/cache/functions/functions.test.ts +84 -0
- package/{cache/functions/get-cached.test.js → src/cache/functions/get-cached.test.ts} +24 -7
- package/{cache/functions/get-cached.js → src/cache/functions/get-cached.ts} +12 -6
- package/{cache/functions/hashing/blob-to-hash.js → src/cache/functions/hashing/blob-to-hash.ts} +20 -18
- package/{cache/functions/hashing/buffer-to-hash.js → src/cache/functions/hashing/buffer-to-hash.ts} +7 -7
- package/src/cache/functions/hashing/hashing.test.ts +95 -0
- package/{cache/functions/hashing/index.js → src/cache/functions/hashing/index.ts} +1 -1
- package/{cache/functions/hashing/json-to-hash.js → src/cache/functions/hashing/json-to-hash.ts} +3 -3
- package/{cache/functions/hashing/string-to-hash.js → src/cache/functions/hashing/string-to-hash.ts} +11 -10
- package/{cache/functions/index.js → src/cache/functions/index.ts} +2 -4
- package/{cache/functions/memoize.js → src/cache/functions/memoize.ts} +22 -15
- package/src/cache/functions/prevent-parallel-execution.ts +50 -0
- package/src/cache/get-persistent-cache.ts +62 -0
- package/{cache/index.js → src/cache/index.ts} +9 -3
- package/src/cache/managed-array.ts +243 -0
- package/{cache/managed-async-cache.browser.test.js → src/cache/managed-async-cache.browser.test.ts} +27 -24
- package/src/cache/managed-async-cache.ts +78 -0
- package/src/cache/memory-allocator.ts +176 -0
- package/src/cache/memory-async-cache.ts +51 -0
- package/src/data.ts +38 -0
- package/src/ecs/README.md +21 -0
- package/src/ecs/archetype/archetype.ts +39 -0
- package/src/ecs/archetype/create-archetype.test.ts +115 -0
- package/src/ecs/archetype/create-archetype.ts +52 -0
- package/src/ecs/archetype/delete-row.test.ts +110 -0
- package/src/ecs/archetype/delete-row.ts +37 -0
- package/src/ecs/archetype/index.ts +24 -0
- package/src/ecs/component-schemas.ts +24 -0
- package/src/ecs/core-components.ts +443 -0
- package/src/ecs/database/create-database.test.ts +745 -0
- package/src/ecs/database/create-database.ts +205 -0
- package/src/ecs/database/database.ts +81 -0
- package/src/ecs/database/index.ts +24 -0
- package/src/ecs/database/observe-dependent-value.test.ts +198 -0
- package/src/ecs/database/observe-dependent-value.ts +78 -0
- package/src/ecs/database/transactional-store/create-transactional-store.test.ts +250 -0
- package/src/ecs/database/transactional-store/create-transactional-store.ts +281 -0
- package/{ecs/ecs/ecs-types.js → src/ecs/database/transactional-store/index.ts} +1 -2
- package/src/ecs/database/transactional-store/transactional-store.ts +80 -0
- package/src/ecs/entity-location-table/create-entity-location-table.test.ts +170 -0
- package/src/ecs/entity-location-table/create-entity-location-table.ts +96 -0
- package/src/ecs/entity-location-table/entity-location-table.ts +30 -0
- package/src/ecs/entity-location-table/entity-location.ts +34 -0
- package/src/ecs/entity-location-table/index.ts +23 -0
- package/src/ecs/entity.ts +26 -0
- package/src/ecs/index.ts +26 -0
- package/src/ecs/store/core/core.ts +71 -0
- package/src/ecs/store/core/create-core.test.ts +440 -0
- package/src/ecs/store/core/create-core.ts +168 -0
- package/{cache/async-cache.js → src/ecs/store/core/index.ts} +1 -2
- package/src/ecs/store/create-store.test.ts +562 -0
- package/src/ecs/store/create-store.ts +97 -0
- package/src/ecs/store/index.ts +23 -0
- package/{types/types.js → src/ecs/store/resource-components.ts} +2 -6
- package/src/ecs/store/store.ts +55 -0
- package/src/equals-shallow.test.ts +133 -0
- package/src/equals-shallow.ts +37 -0
- package/src/equals.test.ts +175 -0
- package/src/equals.ts +70 -0
- package/src/index.ts +27 -0
- package/src/internal/array-buffer-like/copy.ts +469 -0
- package/src/internal/array-buffer-like/grow.ts +53 -0
- package/{core/index.js → src/internal/array-buffer-like/index.ts} +4 -4
- package/src/internal/array-buffer-like/is-array-buffer.ts +445 -0
- package/src/internal/array-buffer-like/is-shared-array-buffer.ts +445 -0
- package/{core/functions/is-async-generator.js → src/internal/async-generator/is-async-generator.ts} +2 -2
- package/{core/schema.js → src/internal/data-view-32/create-data-view-32.ts} +8 -11
- package/src/internal/data-view-32/data-view-32.ts +447 -0
- package/{ecs/action-ecs/index.js → src/internal/data-view-32/index.ts} +2 -2
- package/src/internal/function/memoize-factory.ts +12 -0
- package/src/internal/object/index.ts +23 -0
- package/{cache/functions/bind-functions.js → src/internal/object/map-entries.ts} +6 -11
- package/src/internal/promise/is-promise.ts +28 -0
- package/src/internal/typed-array/get-byte-size.ts +50 -0
- package/src/internal/typed-array/index.ts +24 -0
- package/src/internal/typed-array/typed-array-constructer.ts +32 -0
- package/src/internal/typed-array/typed-array.ts +25 -0
- package/src/is-data.ts +47 -0
- package/src/lit/decorators/apply-decorator.ts +24 -0
- package/src/lit/decorators/apply-service-decorators.ts +13 -0
- package/src/lit/decorators/index.ts +24 -0
- package/src/lit/decorators/require-service.ts +19 -0
- package/src/lit/elements/index.ts +3 -0
- package/src/lit/elements/service-application.ts +26 -0
- package/src/lit/elements/service-context.ts +3 -0
- package/src/lit/elements/service-element.ts +18 -0
- package/src/lit/hooks/component/component.ts +10 -0
- package/src/lit/hooks/component/stack.ts +17 -0
- package/src/lit/hooks/index.ts +13 -0
- package/src/lit/hooks/use-connected.ts +39 -0
- package/src/lit/hooks/use-effect.ts +17 -0
- package/src/lit/hooks/use-element.ts +8 -0
- package/src/lit/hooks/use-memo.ts +14 -0
- package/src/lit/hooks/use-observable-values.ts +9 -0
- package/src/lit/hooks/use-observable.ts +13 -0
- package/src/lit/hooks/use-ref.ts +6 -0
- package/src/lit/hooks/use-resize-observer.ts +27 -0
- package/src/lit/hooks/use-state.ts +17 -0
- package/src/lit/hooks/use-window-event.ts +14 -0
- package/src/lit/hooks/with-hooks.ts +20 -0
- package/src/lit/index.ts +3 -0
- package/src/mutable-clone.ts +29 -0
- package/{core/data.test.js → src/normalize.test.ts} +22 -22
- package/src/normalize.ts +37 -0
- package/src/observe/create-observable-event.ts +47 -0
- package/src/observe/create-observable-state.ts +51 -0
- package/src/observe/create-persisted-state.test.ts +143 -0
- package/src/observe/create-persisted-state.ts +60 -0
- package/src/observe/create-query-state.ts +70 -0
- package/{observe/from-array.js → src/observe/from-array.ts} +14 -3
- package/{service/service.js → src/observe/from-constant.ts} +13 -4
- package/{observe/from-element-id.js → src/observe/from-element-id.ts} +44 -39
- package/src/observe/from-element-properties-and-events.ts +47 -0
- package/{observe/from-element-property.js → src/observe/from-element-property.ts} +33 -25
- package/src/observe/from-promise-with-error.ts +51 -0
- package/src/observe/from-promise.ts +49 -0
- package/src/observe/from-properties.ts +67 -0
- package/{observe/index.js → src/observe/index.ts} +4 -1
- package/src/observe/observe.test.ts +467 -0
- package/src/observe/to-promise.ts +40 -0
- package/src/observe/to-properties.ts +41 -0
- package/src/observe/types.ts +40 -0
- package/src/observe/with-async-map.ts +37 -0
- package/src/observe/with-batch.test.ts +141 -0
- package/src/observe/with-batch.ts +67 -0
- package/{core/data.js → src/observe/with-cache.ts} +32 -26
- package/src/observe/with-copy.ts +32 -0
- package/src/observe/with-deduplicate-data.ts +43 -0
- package/src/observe/with-deduplicate.ts +41 -0
- package/src/observe/with-default.ts +48 -0
- package/src/observe/with-lazy.test.ts +68 -0
- package/{core/functions/is-promise.js → src/observe/with-lazy.ts} +17 -5
- package/{observe/with-map-data.js → src/observe/with-map-data.ts} +9 -3
- package/src/observe/with-map.ts +36 -0
- package/src/observe/with-optional.ts +47 -0
- package/src/observe/with-unwrap.ts +54 -0
- package/src/old-ecs/action-ecs/action-ecs.test.ts +420 -0
- package/src/old-ecs/action-ecs/action-ecs.ts +274 -0
- package/src/old-ecs/action-ecs/action-types.ts +178 -0
- package/{core/functions/index.js → src/old-ecs/action-ecs/index.ts} +8 -5
- package/{service/sequential-action.js → src/old-ecs/action-ecs/sequential-action.ts} +19 -4
- package/src/old-ecs/core-ecs/core-ecs-serialization.test.ts +244 -0
- package/src/old-ecs/core-ecs/core-ecs-types.ts +183 -0
- package/src/old-ecs/core-ecs/core-ecs.test.ts +474 -0
- package/src/old-ecs/core-ecs/core-ecs.ts +640 -0
- package/src/old-ecs/core-ecs/index.ts +30 -0
- package/src/old-ecs/ecs/ecs-types.ts +189 -0
- package/src/old-ecs/ecs/ecs-where-functions.ts +95 -0
- package/src/old-ecs/ecs/ecs.test.ts +461 -0
- package/src/old-ecs/ecs/ecs.ts +279 -0
- package/{ecs/core-ecs/core-ecs-types.js → src/old-ecs/ecs/index.ts} +2 -2
- package/src/old-ecs/entity.ts +26 -0
- package/{ecs/index.js → src/old-ecs/index.ts} +1 -1
- package/{ecs/transaction-ecs/index.js → src/old-ecs/transaction-ecs/index.ts} +0 -1
- package/src/old-ecs/transaction-ecs/transaction-ecs.test.ts +725 -0
- package/src/old-ecs/transaction-ecs/transaction-ecs.ts +283 -0
- package/src/old-ecs/transaction-ecs/transaction-types.ts +248 -0
- package/src/old-ecs/transaction-ecs/transactions.ts +243 -0
- package/src/perftest/ecs-perf.ts +255 -0
- package/src/perftest/helper-functions.ts +31 -0
- package/src/perftest/horizon-perf.ts +132 -0
- package/{perftest/index.js → src/perftest/index.ts} +9 -7
- package/src/perftest/perf-test.ts +193 -0
- package/src/perftest/perf.md +90 -0
- package/src/perftest/vanilla-perf.ts +136 -0
- package/src/schema/boolean.ts +5 -0
- package/src/schema/dynamic/deep-merge.test.ts +100 -0
- package/src/schema/dynamic/deep-merge.ts +67 -0
- package/src/schema/dynamic/enumerate-patches.test.ts +235 -0
- package/src/schema/dynamic/enumerate-patches.ts +90 -0
- package/src/schema/dynamic/get-dynamic-schema.test.ts +129 -0
- package/src/schema/dynamic/get-dynamic-schema.ts +48 -0
- package/src/schema/dynamic/index.ts +22 -0
- package/src/schema/f32.ts +30 -0
- package/src/schema/i32.ts +31 -0
- package/src/schema/index.ts +32 -0
- package/{cache/functions/omit.js → src/schema/nullable.ts} +10 -7
- package/src/schema/schema.ts +229 -0
- package/src/schema/time.ts +5 -0
- package/src/schema/true.ts +26 -0
- package/src/schema/tuple.ts +5 -0
- package/src/schema/u32.ts +31 -0
- package/src/schema/validation/is-valid.test.ts +43 -0
- package/{core/functions/array-equals.js → src/schema/validation/is-valid.ts} +8 -10
- package/src/schema/validation/validate.test.ts +120 -0
- package/src/schema/validation/validate.ts +41 -0
- package/{core/functions/with-validation.test.js → src/schema/validation/with-validation.test.ts} +28 -12
- package/{core/functions/with-validation.js → src/schema/validation/with-validation.ts} +14 -10
- package/src/schema.test.ts +55 -0
- package/src/service/add-observable-actions.ts +207 -0
- package/{service/index.js → src/service/index.ts} +4 -4
- package/src/service/is-service.ts +7 -0
- package/src/service/progressive-result.ts +141 -0
- package/src/service/service.ts +27 -0
- package/src/table/add-row.ts +42 -0
- package/src/table/create-table.ts +36 -0
- package/src/table/delete-row.ts +42 -0
- package/src/table/ensure-capacity.ts +37 -0
- package/src/table/get-row-data.ts +31 -0
- package/src/table/index.ts +29 -0
- package/src/table/row-index.ts +26 -0
- package/src/table/table.ts +32 -0
- package/src/table/update-row.ts +35 -0
- package/src/tsconfig.json +6 -0
- package/src/typed-buffer/copy-to-gpu-buffer.ts +23 -0
- package/{cache/expiring-data-cache.js → src/typed-buffer/create-array-buffer.ts} +31 -25
- package/src/typed-buffer/create-number-buffer.ts +90 -0
- package/src/typed-buffer/create-struct-buffer.ts +93 -0
- package/src/typed-buffer/create-typed-buffer.ts +49 -0
- package/src/typed-buffer/index.ts +26 -0
- package/src/typed-buffer/structs/assert-struct.ts +37 -0
- package/src/typed-buffer/structs/create-read-struct.test.ts +202 -0
- package/src/typed-buffer/structs/create-read-struct.ts +77 -0
- package/src/typed-buffer/structs/create-write-struct.ts +73 -0
- package/src/typed-buffer/structs/get-field-offset.ts +36 -0
- package/src/typed-buffer/structs/get-struct-layout.test.ts +146 -0
- package/src/typed-buffer/structs/get-struct-layout.ts +222 -0
- package/src/typed-buffer/structs/index.ts +22 -0
- package/src/typed-buffer/structs/read-struct.ts +25 -0
- package/src/typed-buffer/structs/struct-layout.ts +465 -0
- package/src/typed-buffer/structs/write-struct.test.ts +195 -0
- package/src/typed-buffer/structs/write-struct.ts +25 -0
- package/src/typed-buffer/typed-buffer.test.ts +253 -0
- package/src/typed-buffer/typed-buffer.ts +41 -0
- package/src/types/assert.ts +22 -0
- package/src/types/equal.ts +24 -0
- package/{types/index.js → src/types/index.ts} +3 -1
- package/src/types/types.ts +166 -0
- package/tsconfig-base.json +25 -0
- package/tsconfig.json +8 -0
- package/typedoc.json +22 -0
- package/vite.config.js +16 -0
- package/assembly/index.d.ts +0 -30
- package/assembly/index.js +0 -18
- package/assembly/index.wasm +0 -0
- package/assembly/index.wasm.map +0 -1
- package/assembly-test/assembly.test.d.ts +0 -1
- package/assembly-test/assembly.test.js.map +0 -1
- package/cache/async-cache.d.ts +0 -15
- package/cache/async-cache.js.map +0 -1
- package/cache/blob-store.d.ts +0 -94
- package/cache/blob-store.js +0 -191
- package/cache/blob-store.js.map +0 -1
- package/cache/blob-store.test.d.ts +0 -1
- package/cache/blob-store.test.js.map +0 -1
- package/cache/data-cache.d.ts +0 -38
- package/cache/data-cache.js +0 -96
- package/cache/data-cache.js.map +0 -1
- package/cache/data-cache.test.d.ts +0 -1
- package/cache/data-cache.test.js +0 -50
- package/cache/data-cache.test.js.map +0 -1
- package/cache/expiring-data-cache.d.ts +0 -6
- package/cache/expiring-data-cache.js.map +0 -1
- package/cache/expiring-data-cache.test.d.ts +0 -1
- package/cache/expiring-data-cache.test.js +0 -62
- package/cache/expiring-data-cache.test.js.map +0 -1
- package/cache/fallback-async-cache.d.ts +0 -7
- package/cache/fallback-async-cache.js +0 -22
- package/cache/fallback-async-cache.js.map +0 -1
- package/cache/functions/bind-functions.d.ts +0 -6
- package/cache/functions/bind-functions.js.map +0 -1
- package/cache/functions/functions.test.d.ts +0 -1
- package/cache/functions/functions.test.js +0 -79
- package/cache/functions/functions.test.js.map +0 -1
- package/cache/functions/get-cached.d.ts +0 -11
- package/cache/functions/get-cached.js.map +0 -1
- package/cache/functions/get-cached.test.d.ts +0 -1
- package/cache/functions/get-cached.test.js.map +0 -1
- package/cache/functions/hashing/blob-to-hash.d.ts +0 -4
- package/cache/functions/hashing/blob-to-hash.js.map +0 -1
- package/cache/functions/hashing/buffer-to-hash.d.ts +0 -4
- package/cache/functions/hashing/buffer-to-hash.js.map +0 -1
- package/cache/functions/hashing/hashing.test.d.ts +0 -1
- package/cache/functions/hashing/hashing.test.js +0 -95
- package/cache/functions/hashing/hashing.test.js.map +0 -1
- package/cache/functions/hashing/index.d.ts +0 -4
- package/cache/functions/hashing/index.js.map +0 -1
- package/cache/functions/hashing/json-to-hash.d.ts +0 -4
- package/cache/functions/hashing/json-to-hash.js.map +0 -1
- package/cache/functions/hashing/string-to-hash.d.ts +0 -4
- package/cache/functions/hashing/string-to-hash.js.map +0 -1
- package/cache/functions/index.d.ts +0 -5
- package/cache/functions/index.js.map +0 -1
- package/cache/functions/memoize.d.ts +0 -12
- package/cache/functions/memoize.js.map +0 -1
- package/cache/functions/omit.d.ts +0 -1
- package/cache/functions/omit.js.map +0 -1
- package/cache/functions/prevent-parallel-execution.d.ts +0 -7
- package/cache/functions/prevent-parallel-execution.js +0 -25
- package/cache/functions/prevent-parallel-execution.js.map +0 -1
- package/cache/functions/types.d.ts +0 -1
- package/cache/functions/types.js.map +0 -1
- package/cache/get-persistent-cache.d.ts +0 -12
- package/cache/get-persistent-cache.js +0 -23
- package/cache/get-persistent-cache.js.map +0 -1
- package/cache/index.d.ts +0 -3
- package/cache/index.js.map +0 -1
- package/cache/managed-array.d.ts +0 -23
- package/cache/managed-array.js +0 -160
- package/cache/managed-array.js.map +0 -1
- package/cache/managed-async-cache.browser.test.d.ts +0 -1
- package/cache/managed-async-cache.browser.test.js.map +0 -1
- package/cache/managed-async-cache.d.ts +0 -4
- package/cache/managed-async-cache.js +0 -45
- package/cache/managed-async-cache.js.map +0 -1
- package/cache/memory-allocator.d.ts +0 -23
- package/cache/memory-allocator.js +0 -94
- package/cache/memory-allocator.js.map +0 -1
- package/cache/memory-async-cache.d.ts +0 -6
- package/cache/memory-async-cache.js +0 -23
- package/cache/memory-async-cache.js.map +0 -1
- package/core/data.d.ts +0 -22
- package/core/data.js.map +0 -1
- package/core/data.test.d.ts +0 -1
- package/core/data.test.js.map +0 -1
- package/core/functions/array-equals.d.ts +0 -1
- package/core/functions/array-equals.js.map +0 -1
- package/core/functions/deep-merge.d.ts +0 -31
- package/core/functions/deep-merge.js +0 -51
- package/core/functions/deep-merge.js.map +0 -1
- package/core/functions/deep-merge.test.d.ts +0 -1
- package/core/functions/deep-merge.test.js +0 -94
- package/core/functions/deep-merge.test.js.map +0 -1
- package/core/functions/index.d.ts +0 -4
- package/core/functions/index.js.map +0 -1
- package/core/functions/is-async-generator.d.ts +0 -1
- package/core/functions/is-async-generator.js.map +0 -1
- package/core/functions/is-promise.d.ts +0 -1
- package/core/functions/is-promise.js.map +0 -1
- package/core/functions/with-validation.d.ts +0 -5
- package/core/functions/with-validation.js.map +0 -1
- package/core/functions/with-validation.test.d.ts +0 -1
- package/core/functions/with-validation.test.js.map +0 -1
- package/core/index.d.ts +0 -3
- package/core/index.js.map +0 -1
- package/core/schema.d.ts +0 -86
- package/core/schema.js.map +0 -1
- package/core/schema.test.d.ts +0 -1
- package/core/schema.test.js +0 -16
- package/core/schema.test.js.map +0 -1
- package/ecs/action-ecs/action-ecs.d.ts +0 -19
- package/ecs/action-ecs/action-ecs.js +0 -203
- package/ecs/action-ecs/action-ecs.js.map +0 -1
- package/ecs/action-ecs/action-ecs.test.d.ts +0 -1
- package/ecs/action-ecs/action-ecs.test.js +0 -362
- package/ecs/action-ecs/action-ecs.test.js.map +0 -1
- package/ecs/action-ecs/action-types.d.ts +0 -106
- package/ecs/action-ecs/action-types.js +0 -19
- package/ecs/action-ecs/action-types.js.map +0 -1
- package/ecs/action-ecs/index.d.ts +0 -2
- package/ecs/action-ecs/index.js.map +0 -1
- package/ecs/core-ecs/core-ecs-serialization.test.d.ts +0 -1
- package/ecs/core-ecs/core-ecs-serialization.test.js +0 -230
- package/ecs/core-ecs/core-ecs-serialization.test.js.map +0 -1
- package/ecs/core-ecs/core-ecs-types.d.ts +0 -141
- package/ecs/core-ecs/core-ecs-types.js.map +0 -1
- package/ecs/core-ecs/core-ecs.d.ts +0 -7
- package/ecs/core-ecs/core-ecs.js +0 -492
- package/ecs/core-ecs/core-ecs.js.map +0 -1
- package/ecs/core-ecs/core-ecs.test.d.ts +0 -1
- package/ecs/core-ecs/core-ecs.test.js +0 -404
- package/ecs/core-ecs/core-ecs.test.js.map +0 -1
- package/ecs/core-ecs/index.d.ts +0 -1
- package/ecs/core-ecs/index.js +0 -2
- package/ecs/core-ecs/index.js.map +0 -1
- package/ecs/ecs/ecs-types.d.ts +0 -132
- package/ecs/ecs/ecs-types.js.map +0 -1
- package/ecs/ecs/ecs-where-functions.d.ts +0 -6
- package/ecs/ecs/ecs-where-functions.js +0 -91
- package/ecs/ecs/ecs-where-functions.js.map +0 -1
- package/ecs/ecs/ecs.d.ts +0 -13
- package/ecs/ecs/ecs.js +0 -177
- package/ecs/ecs/ecs.js.map +0 -1
- package/ecs/ecs/ecs.test.d.ts +0 -1
- package/ecs/ecs/ecs.test.js +0 -399
- package/ecs/ecs/ecs.test.js.map +0 -1
- package/ecs/ecs/index.d.ts +0 -3
- package/ecs/ecs/index.js +0 -3
- package/ecs/ecs/index.js.map +0 -1
- package/ecs/index.d.ts +0 -4
- package/ecs/index.js.map +0 -1
- package/ecs/transaction-ecs/index.d.ts +0 -2
- package/ecs/transaction-ecs/index.js.map +0 -1
- package/ecs/transaction-ecs/transaction-ecs.d.ts +0 -11
- package/ecs/transaction-ecs/transaction-ecs.js +0 -184
- package/ecs/transaction-ecs/transaction-ecs.js.map +0 -1
- package/ecs/transaction-ecs/transaction-ecs.test.d.ts +0 -1
- package/ecs/transaction-ecs/transaction-ecs.test.js +0 -599
- package/ecs/transaction-ecs/transaction-ecs.test.js.map +0 -1
- package/ecs/transaction-ecs/transaction-types.d.ts +0 -135
- package/ecs/transaction-ecs/transaction-types.js +0 -2
- package/ecs/transaction-ecs/transaction-types.js.map +0 -1
- package/ecs/transaction-ecs/transactions.d.ts +0 -5
- package/ecs/transaction-ecs/transactions.js +0 -158
- package/ecs/transaction-ecs/transactions.js.map +0 -1
- package/index.d.ts +0 -1
- package/index.js +0 -23
- package/index.js.map +0 -1
- package/observe/create-observable-event.d.ts +0 -10
- package/observe/create-observable-event.js +0 -22
- package/observe/create-observable-event.js.map +0 -1
- package/observe/create-observable-state.d.ts +0 -7
- package/observe/create-observable-state.js +0 -27
- package/observe/create-observable-state.js.map +0 -1
- package/observe/create-persisted-state.d.ts +0 -11
- package/observe/create-persisted-state.js +0 -31
- package/observe/create-persisted-state.js.map +0 -1
- package/observe/create-persisted-state.test.d.ts +0 -1
- package/observe/create-persisted-state.test.js +0 -124
- package/observe/create-persisted-state.test.js.map +0 -1
- package/observe/from-array.d.ts +0 -5
- package/observe/from-array.js.map +0 -1
- package/observe/from-constant.d.ts +0 -5
- package/observe/from-constant.js +0 -12
- package/observe/from-constant.js.map +0 -1
- package/observe/from-element-id.d.ts +0 -7
- package/observe/from-element-id.js.map +0 -1
- package/observe/from-element-properties-and-events.d.ts +0 -2
- package/observe/from-element-properties-and-events.js +0 -18
- package/observe/from-element-properties-and-events.js.map +0 -1
- package/observe/from-element-property.d.ts +0 -11
- package/observe/from-element-property.js.map +0 -1
- package/observe/from-promise-with-error.d.ts +0 -7
- package/observe/from-promise-with-error.js +0 -27
- package/observe/from-promise-with-error.js.map +0 -1
- package/observe/from-promise.d.ts +0 -6
- package/observe/from-promise.js +0 -22
- package/observe/from-promise.js.map +0 -1
- package/observe/from-properties.d.ts +0 -10
- package/observe/from-properties.js +0 -33
- package/observe/from-properties.js.map +0 -1
- package/observe/index.d.ts +0 -27
- package/observe/index.js.map +0 -1
- package/observe/observe.test.d.ts +0 -7
- package/observe/observe.test.js +0 -417
- package/observe/observe.test.js.map +0 -1
- package/observe/to-promise.d.ts +0 -8
- package/observe/to-promise.js +0 -18
- package/observe/to-promise.js.map +0 -1
- package/observe/to-properties.d.ts +0 -11
- package/observe/to-properties.js +0 -9
- package/observe/to-properties.js.map +0 -1
- package/observe/types.d.ts +0 -17
- package/observe/types.js +0 -2
- package/observe/types.js.map +0 -1
- package/observe/with-async-map.d.ts +0 -6
- package/observe/with-async-map.js +0 -12
- package/observe/with-async-map.js.map +0 -1
- package/observe/with-cache.d.ts +0 -6
- package/observe/with-cache.js +0 -33
- package/observe/with-cache.js.map +0 -1
- package/observe/with-copy.d.ts +0 -5
- package/observe/with-copy.js +0 -10
- package/observe/with-copy.js.map +0 -1
- package/observe/with-deduplicate-data.d.ts +0 -7
- package/observe/with-deduplicate-data.js +0 -18
- package/observe/with-deduplicate-data.js.map +0 -1
- package/observe/with-deduplicate.d.ts +0 -6
- package/observe/with-deduplicate.js +0 -19
- package/observe/with-deduplicate.js.map +0 -1
- package/observe/with-default.d.ts +0 -6
- package/observe/with-default.js +0 -21
- package/observe/with-default.js.map +0 -1
- package/observe/with-map-data.d.ts +0 -7
- package/observe/with-map-data.js.map +0 -1
- package/observe/with-map.d.ts +0 -5
- package/observe/with-map.js +0 -11
- package/observe/with-map.js.map +0 -1
- package/observe/with-optional.d.ts +0 -5
- package/observe/with-optional.js +0 -20
- package/observe/with-optional.js.map +0 -1
- package/observe/with-unwrap.d.ts +0 -5
- package/observe/with-unwrap.js +0 -26
- package/observe/with-unwrap.js.map +0 -1
- package/perftest/ecs-perf.d.ts +0 -49
- package/perftest/ecs-perf.js +0 -230
- package/perftest/ecs-perf.js.map +0 -1
- package/perftest/helper-functions.d.ts +0 -1
- package/perftest/helper-functions.js +0 -31
- package/perftest/helper-functions.js.map +0 -1
- package/perftest/horizon-perf.d.ts +0 -22
- package/perftest/horizon-perf.js +0 -126
- package/perftest/horizon-perf.js.map +0 -1
- package/perftest/index.d.ts +0 -1
- package/perftest/index.js.map +0 -1
- package/perftest/perf-test.d.ts +0 -18
- package/perftest/perf-test.js +0 -124
- package/perftest/perf-test.js.map +0 -1
- package/perftest/vanilla-perf.d.ts +0 -38
- package/perftest/vanilla-perf.js +0 -128
- package/perftest/vanilla-perf.js.map +0 -1
- package/schemas/index.d.ts +0 -1
- package/schemas/index.js +0 -23
- package/schemas/index.js.map +0 -1
- package/schemas/schemas.d.ts +0 -45
- package/schemas/schemas.js +0 -39
- package/schemas/schemas.js.map +0 -1
- package/service/add-observable-actions.d.ts +0 -29
- package/service/add-observable-actions.js +0 -108
- package/service/add-observable-actions.js.map +0 -1
- package/service/index.d.ts +0 -4
- package/service/index.js.map +0 -1
- package/service/progressive-result.d.ts +0 -96
- package/service/progressive-result.js +0 -99
- package/service/progressive-result.js.map +0 -1
- package/service/sequential-action.d.ts +0 -18
- package/service/sequential-action.js.map +0 -1
- package/service/service.d.ts +0 -4
- package/service/service.js.map +0 -1
- package/tsconfig.tsbuildinfo +0 -1
- package/types/index.d.ts +0 -1
- package/types/index.js.map +0 -1
- package/types/types.d.ts +0 -61
- package/types/types.js.map +0 -1
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
22
|
+
import { Data } from "../../index.js";
|
|
23
|
+
import { FromSchema, Schema } from "../../schema/schema.js";
|
|
24
|
+
import {
|
|
25
|
+
Archetype,
|
|
26
|
+
ECS,
|
|
27
|
+
ECSArchetypes,
|
|
28
|
+
ECSComponents,
|
|
29
|
+
ECSResources,
|
|
30
|
+
SelectOptions,
|
|
31
|
+
} from "../ecs/ecs-types.js";
|
|
32
|
+
import { createECS } from "../ecs/ecs.js";
|
|
33
|
+
import {
|
|
34
|
+
CoreComponents,
|
|
35
|
+
Entity,
|
|
36
|
+
EntityValues,
|
|
37
|
+
} from "../core-ecs/core-ecs-types.js";
|
|
38
|
+
import {
|
|
39
|
+
Transaction,
|
|
40
|
+
TransactionChanges,
|
|
41
|
+
TransactionCommit,
|
|
42
|
+
TransactionECS,
|
|
43
|
+
TransactionOptions,
|
|
44
|
+
} from "./transaction-types.js";
|
|
45
|
+
import { createECSTransaction } from "./transactions.js";
|
|
46
|
+
import { Observe } from "../../observe/types.js";
|
|
47
|
+
import { equalsShallow } from "../../equals-shallow.js";
|
|
48
|
+
|
|
49
|
+
// we want to cache this a well on each array.
|
|
50
|
+
function isASubsetOfB(a: readonly any[], b: readonly any[]) {
|
|
51
|
+
if (a !== b) {
|
|
52
|
+
const bSet = new Set(b);
|
|
53
|
+
for (const value of a) {
|
|
54
|
+
if (!bSet.has(value)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Creates a new TransactionECS.
|
|
64
|
+
* Transactional ECS instances do not allow direct write access.
|
|
65
|
+
* Instead you use transactions to make changes to the ECS.
|
|
66
|
+
* They also provide observability for changes to the ECS.
|
|
67
|
+
*/
|
|
68
|
+
export function createTransactionECS<
|
|
69
|
+
C extends ECSComponents, // name => Component Value Type
|
|
70
|
+
A extends ECSArchetypes, // name => Entity Values Type
|
|
71
|
+
R extends ECSResources, // name => Resource Value Type
|
|
72
|
+
>(ecs: ECS<C, A, R> = createECS()): TransactionECS<C, A, R> {
|
|
73
|
+
const { components, archetypes, resources, ...rest } = ecs;
|
|
74
|
+
const withComponents = <
|
|
75
|
+
S extends { [K: string]: Schema },
|
|
76
|
+
T = { [K in keyof S]: FromSchema<S[K]> },
|
|
77
|
+
>(
|
|
78
|
+
newComponents: S
|
|
79
|
+
): any => {
|
|
80
|
+
ecs.withComponents(newComponents);
|
|
81
|
+
return tecs as any;
|
|
82
|
+
};
|
|
83
|
+
const withArchetypes = <S extends { [K: string]: ReadonlyArray<keyof C> }>(
|
|
84
|
+
newArchetypes: S
|
|
85
|
+
): any => {
|
|
86
|
+
ecs.withArchetypes(newArchetypes);
|
|
87
|
+
return tecs as any;
|
|
88
|
+
};
|
|
89
|
+
const withResources = <S extends { [K: string]: Data }>(
|
|
90
|
+
newResources: S
|
|
91
|
+
): any => {
|
|
92
|
+
ecs.withResources(newResources);
|
|
93
|
+
return tecs as any;
|
|
94
|
+
};
|
|
95
|
+
const transactionObservers = new Set<
|
|
96
|
+
(transaction: TransactionCommit<C>) => void
|
|
97
|
+
>();
|
|
98
|
+
const notifyTransactions = (
|
|
99
|
+
transaction: TransactionCommit<C>,
|
|
100
|
+
changed: TransactionChanges<C>
|
|
101
|
+
) => {
|
|
102
|
+
// notify all transaction observers.
|
|
103
|
+
for (const observer of transactionObservers) {
|
|
104
|
+
observer(transaction);
|
|
105
|
+
}
|
|
106
|
+
// notify all observers of the entities and components that changed.
|
|
107
|
+
const observers = new Set<() => void>();
|
|
108
|
+
const addObservers = <K>(map: Map<K, Set<() => void>>, key: K) => {
|
|
109
|
+
const set = map.get(key);
|
|
110
|
+
if (set) {
|
|
111
|
+
for (const observer of set) {
|
|
112
|
+
observers.add(observer);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
for (const entity of changed.entities) {
|
|
117
|
+
addObservers(entityObservers, entity);
|
|
118
|
+
}
|
|
119
|
+
for (const name of changed.components) {
|
|
120
|
+
addObservers(componentObservers, name);
|
|
121
|
+
}
|
|
122
|
+
for (const archetype of changed.archetypes) {
|
|
123
|
+
for (const observedArchetype of archetypeObservers.keys()) {
|
|
124
|
+
const isSubset = isASubsetOfB(
|
|
125
|
+
observedArchetype.components,
|
|
126
|
+
archetype.components
|
|
127
|
+
);
|
|
128
|
+
if (isSubset) {
|
|
129
|
+
addObservers(archetypeObservers, observedArchetype);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
for (const observer of observers) {
|
|
134
|
+
observer();
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const transactions = (
|
|
138
|
+
callback: (transaction: TransactionCommit<C>) => void
|
|
139
|
+
) => {
|
|
140
|
+
transactionObservers.add(callback);
|
|
141
|
+
return () => transactionObservers.delete(callback);
|
|
142
|
+
};
|
|
143
|
+
const createTransaction = (
|
|
144
|
+
options?: TransactionOptions
|
|
145
|
+
): Transaction<C, A, R> => {
|
|
146
|
+
return createECSTransaction(
|
|
147
|
+
tecs,
|
|
148
|
+
ecs,
|
|
149
|
+
{ undoable: true, createdTime: Date.now(), createdBy: "", ...options },
|
|
150
|
+
notifyTransactions
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
const addToMapSet = <K, T>(key: K, map: Map<K, Set<T>>, value: T) => {
|
|
154
|
+
let set = map.get(key);
|
|
155
|
+
if (set) {
|
|
156
|
+
set.add(value);
|
|
157
|
+
} else {
|
|
158
|
+
map.set(key, (set = new Set([value])));
|
|
159
|
+
}
|
|
160
|
+
return () => {
|
|
161
|
+
set!.delete(value);
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
const entityObservers = new Map<Entity, Set<() => void>>();
|
|
165
|
+
const observeEntityChanges = (entity: Entity) => (callback: () => void) => {
|
|
166
|
+
return addToMapSet(entity, entityObservers, callback);
|
|
167
|
+
};
|
|
168
|
+
function observeEntityValues<K extends keyof A>(
|
|
169
|
+
id: Entity,
|
|
170
|
+
archetype: Archetype<K> & Partial<EntityValues<C>>
|
|
171
|
+
): Observe<A[K] | null | undefined>;
|
|
172
|
+
function observeEntityValues(
|
|
173
|
+
id: Entity
|
|
174
|
+
): Observe<EntityValues<C> | undefined>;
|
|
175
|
+
function observeEntityValues<A>(
|
|
176
|
+
id: Entity,
|
|
177
|
+
archetype?: Archetype<A> & Partial<EntityValues<C>>
|
|
178
|
+
) {
|
|
179
|
+
return (callback: (value: A | null | undefined) => void) => {
|
|
180
|
+
const notify = () => {
|
|
181
|
+
callback(ecs.getEntityValues(id, archetype!));
|
|
182
|
+
};
|
|
183
|
+
// callback immediately to get the current value.
|
|
184
|
+
notify();
|
|
185
|
+
// callback again whenever the entity changes.
|
|
186
|
+
const entityChanges = observeEntityChanges(id);
|
|
187
|
+
return entityChanges(notify);
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const componentObservers = new Map<keyof C, Set<() => void>>();
|
|
191
|
+
const resourceObservables = new Map<keyof R, Observe<R[keyof R]>>();
|
|
192
|
+
|
|
193
|
+
const observeResource = <K extends keyof R>(key: K) => {
|
|
194
|
+
// Return cached observable if it exists
|
|
195
|
+
const cached = resourceObservables.get(key);
|
|
196
|
+
if (cached) {
|
|
197
|
+
return cached as Observe<R[K]>;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Create new observable
|
|
201
|
+
const observable = (callback: (value: R[K]) => void) => {
|
|
202
|
+
const notify = () => {
|
|
203
|
+
callback(resources[key]);
|
|
204
|
+
};
|
|
205
|
+
// callback immediately to get the current value.
|
|
206
|
+
notify();
|
|
207
|
+
// callback again whenever the resource changes.
|
|
208
|
+
const resourceChanges = observeComponent(key as keyof C);
|
|
209
|
+
return resourceChanges(notify);
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
// Cache the observable
|
|
213
|
+
resourceObservables.set(key, observable);
|
|
214
|
+
return observable;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
const observeComponent =
|
|
218
|
+
<K extends keyof C>(component: K) =>
|
|
219
|
+
(callback: () => void) => {
|
|
220
|
+
return addToMapSet(component, componentObservers, callback);
|
|
221
|
+
};
|
|
222
|
+
const archetypeObservers = new Map<Archetype<unknown>, Set<() => void>>();
|
|
223
|
+
const observeArchetypeChanges =
|
|
224
|
+
<A extends CoreComponents>(archetype: Archetype<A>) =>
|
|
225
|
+
(callback: () => void) => {
|
|
226
|
+
return addToMapSet(archetype, archetypeObservers, callback);
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
const observeArchetypeEntities = <A extends CoreComponents>(
|
|
230
|
+
archetype: Archetype<A>,
|
|
231
|
+
options?: Omit<SelectOptions<C, A>, "components">
|
|
232
|
+
): Observe<Entity[]> => {
|
|
233
|
+
return (callback) => {
|
|
234
|
+
let lastValue: Entity[] | undefined;
|
|
235
|
+
const notify = () => {
|
|
236
|
+
const newValue = ecs.selectEntities(archetype, options);
|
|
237
|
+
if (!lastValue || !equalsShallow(lastValue, newValue)) {
|
|
238
|
+
lastValue = newValue;
|
|
239
|
+
callback(newValue);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
notify();
|
|
243
|
+
return observeArchetypeChanges(archetype)(notify);
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
const createResourceObserver = () => {
|
|
248
|
+
const handler = {
|
|
249
|
+
get(target: any, prop: string | symbol) {
|
|
250
|
+
if (typeof prop === 'string' && prop in resources) {
|
|
251
|
+
return observeResource(prop as keyof R);
|
|
252
|
+
}
|
|
253
|
+
return target[prop];
|
|
254
|
+
},
|
|
255
|
+
apply(target: any, thisArg: any, args: any[]) {
|
|
256
|
+
return target.apply(thisArg, args);
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
return new Proxy(observeResource, handler);
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
const tecs = {
|
|
264
|
+
...rest,
|
|
265
|
+
withComponents,
|
|
266
|
+
withArchetypes,
|
|
267
|
+
withResources,
|
|
268
|
+
createTransaction,
|
|
269
|
+
observe: {
|
|
270
|
+
transactions,
|
|
271
|
+
resource: createResourceObserver(),
|
|
272
|
+
entityValues: observeEntityValues,
|
|
273
|
+
entityChanges: observeEntityChanges,
|
|
274
|
+
componentChanges: observeComponent,
|
|
275
|
+
archetypeChanges: observeArchetypeChanges,
|
|
276
|
+
archetypeEntities: observeArchetypeEntities,
|
|
277
|
+
},
|
|
278
|
+
components,
|
|
279
|
+
archetypes,
|
|
280
|
+
resources,
|
|
281
|
+
} as const satisfies TransactionECS<C, A, R>;
|
|
282
|
+
return tecs;
|
|
283
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
22
|
+
import { Data } from "../../index.js";
|
|
23
|
+
import { Observe } from "../../observe/types.js";
|
|
24
|
+
import { FromSchema, Schema } from "../../schema/schema.js";
|
|
25
|
+
import { Simplify } from "../../types/types.js";
|
|
26
|
+
import {
|
|
27
|
+
EntityCreateValues,
|
|
28
|
+
Entity,
|
|
29
|
+
EntityValues,
|
|
30
|
+
EntityUpdateValues,
|
|
31
|
+
CoreComponents,
|
|
32
|
+
} from "../core-ecs/core-ecs-types.js";
|
|
33
|
+
import {
|
|
34
|
+
Archetype,
|
|
35
|
+
ECS,
|
|
36
|
+
ECSArchetypes,
|
|
37
|
+
ECSComponents,
|
|
38
|
+
ECSResources,
|
|
39
|
+
ECSWrite,
|
|
40
|
+
SelectOptions,
|
|
41
|
+
} from "../ecs/ecs-types.js";
|
|
42
|
+
|
|
43
|
+
export interface TransactionECS<
|
|
44
|
+
C extends ECSComponents, // name => Component Value Type
|
|
45
|
+
A extends ECSArchetypes, // name => Entity Values Type
|
|
46
|
+
R extends ECSResources, // name => Resource Value Type
|
|
47
|
+
> extends Pick<
|
|
48
|
+
ECS<C, A, R>,
|
|
49
|
+
| "components"
|
|
50
|
+
| "archetypes"
|
|
51
|
+
| "getComponentValue"
|
|
52
|
+
| "getArchetype"
|
|
53
|
+
| "getEntityValues"
|
|
54
|
+
| "countEntities"
|
|
55
|
+
| "selectEntities"
|
|
56
|
+
| "selectEntityValues"
|
|
57
|
+
| "toJSON"
|
|
58
|
+
>,
|
|
59
|
+
TransactionProvider<C, A, R> {
|
|
60
|
+
resources: { +readonly [K in keyof R]: R[K] };
|
|
61
|
+
|
|
62
|
+
withComponents<
|
|
63
|
+
S extends { [K: string]: Schema },
|
|
64
|
+
T = { -readonly [K in keyof S]: FromSchema<S[K]> },
|
|
65
|
+
>(
|
|
66
|
+
components: S
|
|
67
|
+
): TransactionECS<Simplify<C & T>, A, R>;
|
|
68
|
+
withArchetypes<S extends { [K: string]: ReadonlyArray<keyof C> }>(
|
|
69
|
+
archetypes: S
|
|
70
|
+
): TransactionECS<
|
|
71
|
+
C,
|
|
72
|
+
Simplify<A & { [AN in keyof S]: Archetype<{ [PN in S[AN][number]]: C[PN] }> }>,
|
|
73
|
+
R
|
|
74
|
+
>;
|
|
75
|
+
withResources<S extends { [K: string]: Data }>(
|
|
76
|
+
resources: S
|
|
77
|
+
): TransactionECS<C, A, Simplify<R & S>>;
|
|
78
|
+
|
|
79
|
+
observe: TransactionObservables<C, A, R>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface TransactionObservables<
|
|
83
|
+
C extends ECSComponents = any, // name => Component Value Type
|
|
84
|
+
A extends ECSArchetypes = any, // name => Entity Values Type
|
|
85
|
+
R extends ECSResources = any, // name => Resource Value Type
|
|
86
|
+
> {
|
|
87
|
+
transactions: Observe<TransactionCommit<C>>;
|
|
88
|
+
resource: {
|
|
89
|
+
// function call resource (legacy)
|
|
90
|
+
<K extends keyof R>(key: K): Observe<R[K]>;
|
|
91
|
+
} & {
|
|
92
|
+
// property access resource (new)
|
|
93
|
+
[K in keyof R]: Observe<R[K]>;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
entityValues<A extends Archetype>(
|
|
97
|
+
id: Entity,
|
|
98
|
+
archetype: A & Partial<EntityValues<C>>
|
|
99
|
+
): Observe<EntityValuesFor<A> | null | undefined>;
|
|
100
|
+
entityValues(id: Entity): Observe<EntityValues<C> | undefined>;
|
|
101
|
+
|
|
102
|
+
entityChanges(entity: Entity): Observe<void>;
|
|
103
|
+
componentChanges<K extends keyof C>(component: K): Observe<void>;
|
|
104
|
+
archetypeChanges<A extends CoreComponents>(
|
|
105
|
+
archetype: Archetype<A>
|
|
106
|
+
): Observe<void>;
|
|
107
|
+
|
|
108
|
+
archetypeEntities<A extends CoreComponents>(
|
|
109
|
+
archetype: Archetype<A>,
|
|
110
|
+
options?: Omit<SelectOptions<C, A>, "components">
|
|
111
|
+
): Observe<Entity[]>;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Options when creating an ECSTransaction.
|
|
116
|
+
*/
|
|
117
|
+
export interface TransactionOptions {
|
|
118
|
+
/**
|
|
119
|
+
* Will this transaction be added to the undo stack?
|
|
120
|
+
* Defaults to true.
|
|
121
|
+
*/
|
|
122
|
+
undoable?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* When was this transactions created in UTC time.
|
|
125
|
+
*/
|
|
126
|
+
createdTime?: number;
|
|
127
|
+
/**
|
|
128
|
+
* The unique identifier for the user creating the transaction.
|
|
129
|
+
*/
|
|
130
|
+
createdBy?: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
interface TransactionProvider<
|
|
134
|
+
C extends ECSComponents, // name => Component Value Type
|
|
135
|
+
A extends ECSArchetypes, // name => Entity Values Type
|
|
136
|
+
R extends ECSResources, // name => Resource Value Type
|
|
137
|
+
> {
|
|
138
|
+
createTransaction(options?: TransactionOptions): Transaction<C, A, R>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Type alias for a CreateOperation in the ECS (Entity Component System).
|
|
143
|
+
* Represents an operation to create a new entity with the specified components.
|
|
144
|
+
* @template C - Components used by the entity.
|
|
145
|
+
*/
|
|
146
|
+
export type TransactionCreateOperation<C> = {
|
|
147
|
+
type: "create";
|
|
148
|
+
values: EntityCreateValues<C>;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Type alias for an UpdateOperation in the ECS (Entity Component System).
|
|
153
|
+
* Represents an operation to update an existing entity with the specified components.
|
|
154
|
+
* @template C - Components used by the entity.
|
|
155
|
+
*/
|
|
156
|
+
export type TransactionUpdateOperation<C> = {
|
|
157
|
+
type: "update";
|
|
158
|
+
entity: Entity;
|
|
159
|
+
values: EntityUpdateValues<C>;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Type alias for a DeleteOperation in the ECS (Entity Component System).
|
|
164
|
+
* Represents an operation to delete an existing entity.
|
|
165
|
+
*/
|
|
166
|
+
export type TransactionDeleteOperation = { type: "delete"; entity: Entity };
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Type alias for a WriteOperation in the ECS (Entity Component System).
|
|
170
|
+
* Represents an operation to create, update, or delete an entity.
|
|
171
|
+
* @template C - Components used by the entity.
|
|
172
|
+
*/
|
|
173
|
+
export type TransactionWriteOperation<C> =
|
|
174
|
+
| TransactionCreateOperation<C>
|
|
175
|
+
| TransactionUpdateOperation<C>
|
|
176
|
+
| TransactionDeleteOperation;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Represents a completed transaction in the ECS, which can either be a commit or a cancel.
|
|
180
|
+
* @template C - Components used in the transaction.
|
|
181
|
+
*/
|
|
182
|
+
export type TransactionComplete<C> = TransactionCommit<C> | TransactionCancel;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Represents a committed transaction in the ECS.
|
|
186
|
+
* @template C - Components used in the transaction.
|
|
187
|
+
*/
|
|
188
|
+
export interface TransactionCommit<C> {
|
|
189
|
+
committed: true; // Indicates that the transaction has been committed
|
|
190
|
+
options: TransactionOptions; // Options for the transaction
|
|
191
|
+
redoOperations: TransactionWriteOperation<C>[]; // Operations to redo the transaction
|
|
192
|
+
undoOperations: TransactionWriteOperation<C>[]; // Operations to undo the transaction
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Represents a cancelled transaction in the ECS.
|
|
197
|
+
*/
|
|
198
|
+
export interface TransactionCancel {
|
|
199
|
+
committed: false; // Indicates that the transaction has been cancelled
|
|
200
|
+
options: TransactionOptions; // Options for the transaction
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export interface Transaction<
|
|
204
|
+
C extends ECSComponents, // name => Component Value Type
|
|
205
|
+
A extends ECSArchetypes, // name => Entity Values Type
|
|
206
|
+
R extends ECSResources, // name => Resource Value Type
|
|
207
|
+
> extends TransactionProvider<C, A, R>,
|
|
208
|
+
ECSWrite<C> {
|
|
209
|
+
readonly ecs: TransactionECS<C, A, R>;
|
|
210
|
+
readonly options: Required<TransactionOptions>;
|
|
211
|
+
readonly resources: { -readonly [K in keyof R]: R[K] };
|
|
212
|
+
batch(operations: TransactionWriteOperation<C>[]): this;
|
|
213
|
+
commit(): TransactionCommit<C>;
|
|
214
|
+
cancel(): TransactionCancel;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* @internal
|
|
219
|
+
*/
|
|
220
|
+
export interface TransactionChanges<C extends ECSComponents> {
|
|
221
|
+
readonly entities: Set<Entity>;
|
|
222
|
+
readonly components: Set<keyof C>;
|
|
223
|
+
readonly archetypes: Set<Archetype>;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* @internal
|
|
228
|
+
*/
|
|
229
|
+
export type TransactionCommitFor<ECS> =
|
|
230
|
+
ECS extends TransactionECS<infer C, infer A, infer R>
|
|
231
|
+
? TransactionCommit<C>
|
|
232
|
+
: never;
|
|
233
|
+
/**
|
|
234
|
+
* @internal
|
|
235
|
+
*/
|
|
236
|
+
export type TransactionFor<ECS> =
|
|
237
|
+
ECS extends TransactionECS<infer C, infer A, infer R>
|
|
238
|
+
? Transaction<C, A, R>
|
|
239
|
+
: never;
|
|
240
|
+
/**
|
|
241
|
+
* @internal
|
|
242
|
+
*/
|
|
243
|
+
export type EntityValuesFor<T> =
|
|
244
|
+
T extends TransactionECS<infer C, infer A, infer R>
|
|
245
|
+
? EntityValues<C>
|
|
246
|
+
: T extends Archetype<infer E>
|
|
247
|
+
? E
|
|
248
|
+
: never;
|