@adobe/data 0.9.2 → 0.9.5
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 +1 -1
- package/assembly/index.wasm.map +1 -1
- package/assembly/package.json +1 -0
- package/assembly-test/assembly.test.js +1 -21
- package/assembly-test/assembly.test.js.map +1 -1
- package/blob/blob-handle.js +1 -21
- package/blob/blob-handle.js.map +1 -1
- package/blob/blob-meta.js.map +1 -1
- package/blob/index.js +1 -21
- package/blob/index.js.map +1 -1
- package/blob/package.json +1 -0
- package/cache/async-cache.js +1 -21
- package/cache/async-cache.js.map +1 -1
- package/cache/blob-store.js +1 -21
- package/cache/blob-store.js.map +1 -1
- package/cache/blob-store.test.js +1 -21
- package/cache/blob-store.test.js.map +1 -1
- package/cache/data-cache.js.map +1 -1
- package/cache/data-cache.test.js +1 -21
- package/cache/data-cache.test.js.map +1 -1
- package/cache/expiring-data-cache.js +1 -21
- package/cache/expiring-data-cache.js.map +1 -1
- package/cache/expiring-data-cache.test.js +1 -21
- package/cache/expiring-data-cache.test.js.map +1 -1
- package/cache/fallback-async-cache.js.map +1 -1
- package/cache/functions/async-data-function.js +1 -21
- package/cache/functions/async-data-function.js.map +1 -1
- package/cache/functions/functions.test.js +1 -21
- package/cache/functions/functions.test.js.map +1 -1
- package/cache/functions/get-cached.js +1 -21
- package/cache/functions/get-cached.js.map +1 -1
- package/cache/functions/get-cached.test.js +1 -21
- package/cache/functions/get-cached.test.js.map +1 -1
- package/cache/functions/hashing/array-buffer-to-hex.js +1 -21
- package/cache/functions/hashing/array-buffer-to-hex.js.map +1 -1
- package/cache/functions/hashing/blob-to-hash.js +1 -21
- package/cache/functions/hashing/blob-to-hash.js.map +1 -1
- package/cache/functions/hashing/buffer-to-hash.js +1 -21
- package/cache/functions/hashing/buffer-to-hash.js.map +1 -1
- package/cache/functions/hashing/hashing.test.js +1 -21
- package/cache/functions/hashing/hashing.test.js.map +1 -1
- package/cache/functions/hashing/index.js +1 -21
- package/cache/functions/hashing/index.js.map +1 -1
- package/cache/functions/hashing/json-to-hash.js +1 -21
- package/cache/functions/hashing/json-to-hash.js.map +1 -1
- package/cache/functions/hashing/string-to-hash.js +1 -21
- package/cache/functions/hashing/string-to-hash.js.map +1 -1
- package/cache/functions/index.js +1 -21
- package/cache/functions/index.js.map +1 -1
- package/cache/functions/memoize.js +1 -21
- package/cache/functions/memoize.js.map +1 -1
- package/cache/functions/prevent-parallel-execution.js.map +1 -1
- package/cache/get-persistent-cache.js.map +1 -1
- package/cache/index.js +1 -21
- package/cache/index.js.map +1 -1
- package/cache/managed-array.js.map +1 -1
- package/cache/managed-async-cache.browser.test.js +1 -21
- package/cache/managed-async-cache.browser.test.js.map +1 -1
- package/cache/managed-async-cache.js.map +1 -1
- package/cache/memory-allocator.js +1 -21
- package/cache/memory-allocator.js.map +1 -1
- package/cache/memory-async-cache.js.map +1 -1
- package/cache/package.json +1 -0
- package/data.js +1 -21
- package/data.js.map +1 -1
- package/ecs/archetype/archetype.js.map +1 -1
- package/ecs/archetype/create-archetype.js +1 -21
- package/ecs/archetype/create-archetype.js.map +1 -1
- package/ecs/archetype/create-archetype.test.js +1 -21
- package/ecs/archetype/create-archetype.test.js.map +1 -1
- package/ecs/archetype/delete-row.js +1 -21
- package/ecs/archetype/delete-row.js.map +1 -1
- package/ecs/archetype/delete-row.test.js +1 -21
- package/ecs/archetype/delete-row.test.js.map +1 -1
- package/ecs/archetype/index.js +1 -21
- package/ecs/archetype/index.js.map +1 -1
- package/ecs/database/calculate-system-order.js +1 -21
- package/ecs/database/calculate-system-order.js.map +1 -1
- package/ecs/database/calculate-system-order.test.js +1 -21
- package/ecs/database/calculate-system-order.test.js.map +1 -1
- package/ecs/database/combine-plugins-test.d.ts +39 -0
- package/ecs/database/combine-plugins-test.js +3 -0
- package/ecs/database/combine-plugins-test.js.map +1 -0
- package/ecs/database/combine-plugins.d.ts +24 -0
- package/ecs/database/combine-plugins.js +27 -0
- package/ecs/database/combine-plugins.js.map +1 -0
- package/ecs/database/create-plugin.d.ts +54 -55
- package/ecs/database/create-plugin.js +65 -43
- package/ecs/database/create-plugin.js.map +1 -1
- package/ecs/database/create-plugin.test.js +157 -86
- package/ecs/database/create-plugin.test.js.map +1 -1
- package/ecs/database/create-plugin.type-test.d.ts +1 -0
- package/ecs/database/create-plugin.type-test.js +667 -0
- package/ecs/database/create-plugin.type-test.js.map +1 -0
- package/ecs/database/database-schema/create-database-schema-test.js +1 -21
- package/ecs/database/database-schema/create-database-schema-test.js.map +1 -1
- package/ecs/database/database-schema/create-database-schema.d.ts +3 -3
- package/ecs/database/database-schema/create-database-schema.js +1 -21
- package/ecs/database/database-schema/create-database-schema.js.map +1 -1
- package/ecs/database/database-schema/database-schema.d.ts +3 -3
- package/ecs/database/database-schema/database-schema.js +1 -21
- package/ecs/database/database-schema/database-schema.js.map +1 -1
- package/ecs/database/database-schema/index.js +1 -21
- package/ecs/database/database-schema/index.js.map +1 -1
- package/ecs/database/database.d.ts +34 -46
- package/ecs/database/database.js +6 -37
- package/ecs/database/database.js.map +1 -1
- package/ecs/database/database.test.js +18 -33
- package/ecs/database/database.test.js.map +1 -1
- package/ecs/database/index.js +1 -21
- package/ecs/database/index.js.map +1 -1
- package/ecs/database/observe-dependent-value.js +1 -21
- package/ecs/database/observe-dependent-value.js.map +1 -1
- package/ecs/database/observe-dependent-value.test.js +1 -21
- package/ecs/database/observe-dependent-value.test.js.map +1 -1
- package/ecs/database/observe-select-entities.js +1 -21
- package/ecs/database/observe-select-entities.js.map +1 -1
- package/ecs/database/observe-select-entities.performance.test.js +1 -21
- package/ecs/database/observe-select-entities.performance.test.js.map +1 -1
- package/ecs/database/observe-select-entities.test.js +1 -21
- package/ecs/database/observe-select-entities.test.js.map +1 -1
- package/ecs/database/observed/create-observed-database.js +1 -17
- package/ecs/database/observed/create-observed-database.js.map +1 -1
- package/ecs/database/observed/create-observed-database.test.js +6 -6
- package/ecs/database/observed/create-observed-database.test.js.map +1 -1
- package/ecs/database/observed/observed-database.js +1 -17
- package/ecs/database/observed/observed-database.js.map +1 -1
- package/ecs/database/public/create-database-from-schema.test.js +1 -21
- package/ecs/database/public/create-database-from-schema.test.js.map +1 -1
- package/ecs/database/public/create-database-scheduler.test.d.ts +1 -0
- package/ecs/database/public/create-database-scheduler.test.js +67 -0
- package/ecs/database/public/create-database-scheduler.test.js.map +1 -0
- package/ecs/database/public/create-database.d.ts +19 -7
- package/ecs/database/public/create-database.js +76 -186
- package/ecs/database/public/create-database.js.map +1 -1
- package/ecs/database/public/create-database.test.js +190 -180
- package/ecs/database/public/create-database.test.js.map +1 -1
- package/ecs/database/public/create-database.type-test.d.ts +1 -0
- package/ecs/database/public/create-database.type-test.js +160 -0
- package/ecs/database/public/create-database.type-test.js.map +1 -0
- package/ecs/database/public/index.js +1 -20
- package/ecs/database/public/index.js.map +1 -1
- package/ecs/database/reconciling/create-reconciling-database.d.ts +2 -2
- package/ecs/database/reconciling/create-reconciling-database.js +1 -20
- package/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
- package/ecs/database/reconciling/create-reconciling-database.test.js +5 -6
- package/ecs/database/reconciling/create-reconciling-database.test.js.map +1 -1
- package/ecs/database/reconciling/reconciling-database.d.ts +2 -2
- package/ecs/database/reconciling/reconciling-database.js +1 -20
- package/ecs/database/reconciling/reconciling-database.js.map +1 -1
- package/ecs/database/reconciling/reconciling-entry.js +1 -20
- package/ecs/database/reconciling/reconciling-entry.js.map +1 -1
- package/ecs/database/transactional-store/apply-operations.js.map +1 -1
- package/ecs/database/transactional-store/coalesce-actions.js +1 -21
- package/ecs/database/transactional-store/coalesce-actions.js.map +1 -1
- package/ecs/database/transactional-store/coalesce-actions.test.js +1 -21
- package/ecs/database/transactional-store/coalesce-actions.test.js.map +1 -1
- package/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
- package/ecs/database/transactional-store/create-transactional-store.test.js +1 -21
- package/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
- package/ecs/database/transactional-store/index.js +1 -21
- package/ecs/database/transactional-store/index.js.map +1 -1
- package/ecs/database/transactional-store/patch-entity-values.js.map +1 -1
- package/ecs/database/transactional-store/transaction-options.js +1 -21
- package/ecs/database/transactional-store/transaction-options.js.map +1 -1
- package/ecs/database/transactional-store/transactional-store.js +1 -21
- package/ecs/database/transactional-store/transactional-store.js.map +1 -1
- package/ecs/database/type-inference-example.js +1 -0
- package/ecs/database/type-inference-example.js.map +1 -1
- package/ecs/database/undoable.js +1 -21
- package/ecs/database/undoable.js.map +1 -1
- package/ecs/entity-location-table/create-entity-location-table.js +1 -21
- package/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
- package/ecs/entity-location-table/create-entity-location-table.test.js +1 -21
- package/ecs/entity-location-table/create-entity-location-table.test.js.map +1 -1
- package/ecs/entity-location-table/entity-location.js.map +1 -1
- package/ecs/entity-location-table/index.js +1 -21
- package/ecs/entity-location-table/index.js.map +1 -1
- package/ecs/entity.js.map +1 -1
- package/ecs/index.d.ts +1 -2
- package/ecs/index.js +2 -22
- package/ecs/index.js.map +1 -1
- package/ecs/package.json +1 -0
- package/ecs/persistence-service/create-storage-persistence-service.js +1 -21
- package/ecs/persistence-service/create-storage-persistence-service.js.map +1 -1
- package/ecs/persistence-service/index.js +1 -21
- package/ecs/persistence-service/index.js.map +1 -1
- package/ecs/plugins/index.js +1 -21
- package/ecs/plugins/index.js.map +1 -1
- package/ecs/plugins/scheduler/index.js +1 -21
- package/ecs/plugins/scheduler/index.js.map +1 -1
- package/ecs/plugins/scheduler/scheduler.d.ts +7 -4
- package/ecs/plugins/scheduler/scheduler.js +18 -24
- package/ecs/plugins/scheduler/scheduler.js.map +1 -1
- package/ecs/resource-schemas.js +1 -21
- package/ecs/resource-schemas.js.map +1 -1
- package/ecs/store/action-functions.d.ts +9 -10
- package/ecs/store/action-functions.js +1 -0
- package/ecs/store/action-functions.js.map +1 -1
- package/ecs/store/archetype-components.d.ts +4 -2
- package/ecs/store/archetype-components.js +1 -21
- package/ecs/store/archetype-components.js.map +1 -1
- package/ecs/store/components.js +1 -21
- package/ecs/store/components.js.map +1 -1
- package/ecs/store/core/core.js +1 -21
- package/ecs/store/core/core.js.map +1 -1
- package/ecs/store/core/create-core.js +1 -21
- package/ecs/store/core/create-core.js.map +1 -1
- package/ecs/store/core/create-core.test.js +1 -21
- package/ecs/store/core/create-core.test.js.map +1 -1
- package/ecs/store/core/index.js +1 -21
- package/ecs/store/core/index.js.map +1 -1
- package/ecs/store/core/select-entities.js +1 -21
- package/ecs/store/core/select-entities.js.map +1 -1
- package/ecs/store/core/select-entities.test.js +1 -21
- package/ecs/store/core/select-entities.test.js.map +1 -1
- package/ecs/store/create-store-schema-test.js +1 -21
- package/ecs/store/create-store-schema-test.js.map +1 -1
- package/ecs/store/entity-select-options.js +1 -21
- package/ecs/store/entity-select-options.js.map +1 -1
- package/ecs/store/index.js +1 -21
- package/ecs/store/index.js.map +1 -1
- package/ecs/store/public/create-store.d.ts +1 -2
- package/ecs/store/public/create-store.js +1 -21
- package/ecs/store/public/create-store.js.map +1 -1
- package/ecs/store/public/create-store.test.js +1 -21
- package/ecs/store/public/create-store.test.js.map +1 -1
- package/ecs/store/resource-components.js +1 -21
- package/ecs/store/resource-components.js.map +1 -1
- package/ecs/store/store.d.ts +5 -5
- package/ecs/store/store.js.map +1 -1
- package/ecs/store/store.test.js +1 -21
- package/ecs/store/store.test.js.map +1 -1
- package/ecs/store/transaction-functions.d.ts +21 -0
- package/ecs/store/transaction-functions.js +2 -0
- package/ecs/store/transaction-functions.js.map +1 -0
- package/ecs/undo-redo-service/create-undo-redo-service.js +1 -21
- package/ecs/undo-redo-service/create-undo-redo-service.js.map +1 -1
- package/ecs/undo-redo-service/create-undo-redo-service.test.js +1 -21
- package/ecs/undo-redo-service/create-undo-redo-service.test.js.map +1 -1
- package/ecs/undo-redo-service/index.js +1 -21
- package/ecs/undo-redo-service/index.js.map +1 -1
- package/ecs/undo-redo-service/undo-redo-service.js +1 -21
- package/ecs/undo-redo-service/undo-redo-service.js.map +1 -1
- package/equals-shallow.js +1 -21
- package/equals-shallow.js.map +1 -1
- package/equals-shallow.test.js +1 -21
- package/equals-shallow.test.js.map +1 -1
- package/equals.js +1 -21
- package/equals.js.map +1 -1
- package/equals.test.js +1 -21
- package/equals.test.js.map +1 -1
- package/functions/apply-args.js +1 -21
- package/functions/apply-args.js.map +1 -1
- package/functions/blit.js +1 -21
- package/functions/blit.js.map +1 -1
- package/functions/copy-view-bytes.js +1 -21
- package/functions/copy-view-bytes.js.map +1 -1
- package/functions/index.js +1 -21
- package/functions/index.js.map +1 -1
- package/functions/merge-patch.js.map +1 -1
- package/functions/merge-patch.test.js +1 -21
- package/functions/merge-patch.test.js.map +1 -1
- package/functions/package.json +1 -0
- package/functions/serialization/codec.js +1 -21
- package/functions/serialization/codec.js.map +1 -1
- package/functions/serialization/index.js +1 -21
- package/functions/serialization/index.js.map +1 -1
- package/functions/serialization/register-blob-codecs.js.map +1 -1
- package/functions/serialization/register-typed-array-codecs.js.map +1 -1
- package/functions/serialization/serialization.test.js +1 -21
- package/functions/serialization/serialization.test.js.map +1 -1
- package/functions/serialization/serialize-to-blobs.js +1 -21
- package/functions/serialization/serialize-to-blobs.js.map +1 -1
- package/functions/serialization/serialize-to-blobs.test.js +1 -21
- package/functions/serialization/serialize-to-blobs.test.js.map +1 -1
- package/functions/serialization/serialize-to-json.js +1 -21
- package/functions/serialization/serialize-to-json.js.map +1 -1
- package/functions/serialization/serialize-to-json.test.js +1 -21
- package/functions/serialization/serialize-to-json.test.js.map +1 -1
- package/functions/serialization/serialize-to-storage.js +1 -21
- package/functions/serialization/serialize-to-storage.js.map +1 -1
- package/functions/serialization/serialize-to-storage.test.js +1 -21
- package/functions/serialization/serialize-to-storage.test.js.map +1 -1
- package/functions/serialization/serialize.js +1 -21
- package/functions/serialization/serialize.js.map +1 -1
- package/index.js +1 -21
- package/index.js.map +1 -1
- package/internal/array/index.js +1 -21
- package/internal/array/index.js.map +1 -1
- package/internal/array/topological-sort.js +1 -21
- package/internal/array/topological-sort.js.map +1 -1
- package/internal/array/topological-sort.test.js +1 -21
- package/internal/array/topological-sort.test.js.map +1 -1
- package/internal/array-buffer-like/copy.js +1 -21
- package/internal/array-buffer-like/copy.js.map +1 -1
- package/internal/array-buffer-like/index.js +1 -21
- package/internal/array-buffer-like/index.js.map +1 -1
- package/internal/array-buffer-like/is-array-buffer.js +1 -21
- package/internal/array-buffer-like/is-array-buffer.js.map +1 -1
- package/internal/array-buffer-like/is-shared-array-buffer.js +1 -21
- package/internal/array-buffer-like/is-shared-array-buffer.js.map +1 -1
- package/internal/array-buffer-like/resize.js +1 -21
- package/internal/array-buffer-like/resize.js.map +1 -1
- package/internal/async-generator/is-async-generator.js +1 -21
- package/internal/async-generator/is-async-generator.js.map +1 -1
- package/internal/data-view-32/create-data-view-32.js.map +1 -1
- package/internal/data-view-32/index.js +1 -21
- package/internal/data-view-32/index.js.map +1 -1
- package/internal/function/debounce.js +1 -21
- package/internal/function/debounce.js.map +1 -1
- package/internal/function/debounce.test.js +1 -21
- package/internal/function/debounce.test.js.map +1 -1
- package/internal/function/memoize-factory.js +1 -21
- package/internal/function/memoize-factory.js.map +1 -1
- package/internal/object/index.js +1 -21
- package/internal/object/index.js.map +1 -1
- package/internal/object/map-entries.js +1 -21
- package/internal/object/map-entries.js.map +1 -1
- package/internal/promise/is-promise.js +1 -21
- package/internal/promise/is-promise.js.map +1 -1
- package/internal/shared-array-buffer/create-shared-array-buffer.js +1 -21
- package/internal/shared-array-buffer/create-shared-array-buffer.js.map +1 -1
- package/internal/typed-array/get-byte-size.js.map +1 -1
- package/internal/typed-array/index.js +1 -21
- package/internal/typed-array/index.js.map +1 -1
- package/is-data.js +1 -21
- package/is-data.js.map +1 -1
- package/lit/decorators/apply-decorator.js +1 -21
- package/lit/decorators/apply-decorator.js.map +1 -1
- package/lit/decorators/apply-service-decorators.js +1 -21
- package/lit/decorators/apply-service-decorators.js.map +1 -1
- package/lit/decorators/index.js +1 -21
- package/lit/decorators/index.js.map +1 -1
- package/lit/decorators/require-service.js +1 -21
- package/lit/decorators/require-service.js.map +1 -1
- package/lit/elements/application-element copy.d.ts +9 -0
- package/lit/elements/application-element copy.js +62 -0
- package/lit/elements/application-element copy.js.map +1 -0
- package/lit/elements/application-element.js +1 -21
- package/lit/elements/application-element.js.map +1 -1
- package/lit/elements/application-host.js +1 -21
- package/lit/elements/application-host.js.map +1 -1
- package/lit/elements/database-element.d.ts +10 -0
- package/lit/elements/database-element.js +40 -0
- package/lit/elements/database-element.js.map +1 -0
- package/lit/elements/index.d.ts +1 -0
- package/lit/elements/index.js +2 -21
- package/lit/elements/index.js.map +1 -1
- package/lit/functions/index.js +1 -21
- package/lit/functions/index.js.map +1 -1
- package/lit/functions/iterate-self-and-ancestors.js +1 -21
- package/lit/functions/iterate-self-and-ancestors.js.map +1 -1
- package/lit/hooks/attach-decorator.js +1 -21
- package/lit/hooks/attach-decorator.js.map +1 -1
- package/lit/hooks/component/component.js +1 -21
- package/lit/hooks/component/component.js.map +1 -1
- package/lit/hooks/component/stack.js +1 -21
- package/lit/hooks/component/stack.js.map +1 -1
- package/lit/hooks/index.js +1 -21
- package/lit/hooks/index.js.map +1 -1
- package/lit/hooks/use-connected.js +1 -21
- package/lit/hooks/use-connected.js.map +1 -1
- package/lit/hooks/use-debounce.js +1 -21
- package/lit/hooks/use-debounce.js.map +1 -1
- package/lit/hooks/use-drag-observe.js +1 -21
- package/lit/hooks/use-drag-observe.js.map +1 -1
- package/lit/hooks/use-drag-transaction.d.ts +1 -1
- package/lit/hooks/use-drag-transaction.js +1 -21
- package/lit/hooks/use-drag-transaction.js.map +1 -1
- package/lit/hooks/use-draggable.js +1 -21
- package/lit/hooks/use-draggable.js.map +1 -1
- package/lit/hooks/use-effect.js +1 -21
- package/lit/hooks/use-effect.js.map +1 -1
- package/lit/hooks/use-element.js +1 -21
- package/lit/hooks/use-element.js.map +1 -1
- package/lit/hooks/use-memo.js +1 -21
- package/lit/hooks/use-memo.js.map +1 -1
- package/lit/hooks/use-observable-values.js +1 -21
- package/lit/hooks/use-observable-values.js.map +1 -1
- package/lit/hooks/use-observable.js +1 -21
- package/lit/hooks/use-observable.js.map +1 -1
- package/lit/hooks/use-ref.js +1 -21
- package/lit/hooks/use-ref.js.map +1 -1
- package/lit/hooks/use-resize-observer.js +1 -21
- package/lit/hooks/use-resize-observer.js.map +1 -1
- package/lit/hooks/use-state.js +1 -21
- package/lit/hooks/use-state.js.map +1 -1
- package/lit/hooks/use-updated.js +1 -21
- package/lit/hooks/use-updated.js.map +1 -1
- package/lit/hooks/use-window-event.js +1 -21
- package/lit/hooks/use-window-event.js.map +1 -1
- package/lit/hooks/with-hooks.js +1 -21
- package/lit/hooks/with-hooks.js.map +1 -1
- package/lit/index.js +1 -21
- package/lit/index.js.map +1 -1
- package/lit/package.json +1 -0
- package/math/aabb/center.js.map +1 -1
- package/math/aabb/face/aabb-face.test.js +1 -21
- package/math/aabb/face/aabb-face.test.js.map +1 -1
- package/math/aabb/face/functions.js +1 -21
- package/math/aabb/face/functions.js.map +1 -1
- package/math/aabb/face/index.js +1 -21
- package/math/aabb/face/index.js.map +1 -1
- package/math/aabb/face/public.js +1 -21
- package/math/aabb/face/public.js.map +1 -1
- package/math/aabb/face/schema.js +1 -21
- package/math/aabb/face/schema.js.map +1 -1
- package/math/aabb/index.js +1 -21
- package/math/aabb/index.js.map +1 -1
- package/math/aabb/layout.js +1 -21
- package/math/aabb/layout.js.map +1 -1
- package/math/aabb/line-intersection.js.map +1 -1
- package/math/aabb/line-intersection.test.js +1 -21
- package/math/aabb/line-intersection.test.js.map +1 -1
- package/math/aabb/public.js +1 -21
- package/math/aabb/public.js.map +1 -1
- package/math/aabb/schema.js +1 -21
- package/math/aabb/schema.js.map +1 -1
- package/math/aabb/unit.js.map +1 -1
- package/math/constants.js +1 -21
- package/math/constants.js.map +1 -1
- package/math/f32/index.js +1 -21
- package/math/f32/index.js.map +1 -1
- package/math/f32/public.js +1 -21
- package/math/f32/public.js.map +1 -1
- package/math/f32/schema.js +1 -21
- package/math/f32/schema.js.map +1 -1
- package/math/f64/index.js.map +1 -1
- package/math/f64/public.js +1 -21
- package/math/f64/public.js.map +1 -1
- package/math/f64/schema.js.map +1 -1
- package/math/i32/index.js +1 -21
- package/math/i32/index.js.map +1 -1
- package/math/i32/public.js +1 -21
- package/math/i32/public.js.map +1 -1
- package/math/i32/schema.js +1 -21
- package/math/i32/schema.js.map +1 -1
- package/math/index.js +1 -21
- package/math/index.js.map +1 -1
- package/math/line2/functions.js +1 -21
- package/math/line2/functions.js.map +1 -1
- package/math/line2/index.js +1 -21
- package/math/line2/index.js.map +1 -1
- package/math/line2/intersects.test.js +1 -21
- package/math/line2/intersects.test.js.map +1 -1
- package/math/line2/layout.js +1 -21
- package/math/line2/layout.js.map +1 -1
- package/math/line2/public.js +1 -21
- package/math/line2/public.js.map +1 -1
- package/math/line2/schema.js +1 -21
- package/math/line2/schema.js.map +1 -1
- package/math/line3/closest-point-on-line.test.js +1 -21
- package/math/line3/closest-point-on-line.test.js.map +1 -1
- package/math/line3/functions.js +1 -21
- package/math/line3/functions.js.map +1 -1
- package/math/line3/index.js +1 -21
- package/math/line3/index.js.map +1 -1
- package/math/line3/interpolate.test.js +1 -21
- package/math/line3/interpolate.test.js.map +1 -1
- package/math/line3/layout.js +1 -21
- package/math/line3/layout.js.map +1 -1
- package/math/line3/public.js +1 -21
- package/math/line3/public.js.map +1 -1
- package/math/line3/schema.js +1 -21
- package/math/line3/schema.js.map +1 -1
- package/math/line3/sub-line.test.js +1 -21
- package/math/line3/sub-line.test.js.map +1 -1
- package/math/mat4x4/functions.js +1 -21
- package/math/mat4x4/functions.js.map +1 -1
- package/math/mat4x4/index.js +1 -21
- package/math/mat4x4/index.js.map +1 -1
- package/math/mat4x4/layout.js +1 -21
- package/math/mat4x4/layout.js.map +1 -1
- package/math/mat4x4/public.js +1 -21
- package/math/mat4x4/public.js.map +1 -1
- package/math/mat4x4/schema.js +1 -21
- package/math/mat4x4/schema.js.map +1 -1
- package/math/package.json +1 -0
- package/math/plane/functions.js +1 -21
- package/math/plane/functions.js.map +1 -1
- package/math/plane/index.js +1 -21
- package/math/plane/index.js.map +1 -1
- package/math/plane/layout.js +1 -21
- package/math/plane/layout.js.map +1 -1
- package/math/plane/plane.test.js +1 -21
- package/math/plane/plane.test.js.map +1 -1
- package/math/plane/public.js +1 -21
- package/math/plane/public.js.map +1 -1
- package/math/plane/schema.js +1 -21
- package/math/plane/schema.js.map +1 -1
- package/math/quat/constants/functions.js +1 -21
- package/math/quat/constants/functions.js.map +1 -1
- package/math/quat/functions.js +1 -21
- package/math/quat/functions.js.map +1 -1
- package/math/quat/index.js +1 -21
- package/math/quat/index.js.map +1 -1
- package/math/quat/layout.js +1 -21
- package/math/quat/layout.js.map +1 -1
- package/math/quat/public.js +1 -21
- package/math/quat/public.js.map +1 -1
- package/math/quat/schema.js +1 -21
- package/math/quat/schema.js.map +1 -1
- package/math/u32/index.js +1 -21
- package/math/u32/index.js.map +1 -1
- package/math/u32/public.js +1 -21
- package/math/u32/public.js.map +1 -1
- package/math/u32/schema.js +1 -21
- package/math/u32/schema.js.map +1 -1
- package/math/vec2/functions.js +1 -21
- package/math/vec2/functions.js.map +1 -1
- package/math/vec2/index.js +1 -21
- package/math/vec2/index.js.map +1 -1
- package/math/vec2/layout.js +1 -21
- package/math/vec2/layout.js.map +1 -1
- package/math/vec2/public.js +1 -21
- package/math/vec2/public.js.map +1 -1
- package/math/vec2/schema.js +1 -21
- package/math/vec2/schema.js.map +1 -1
- package/math/vec3/functions.js +1 -21
- package/math/vec3/functions.js.map +1 -1
- package/math/vec3/index.js +1 -21
- package/math/vec3/index.js.map +1 -1
- package/math/vec3/layout.js +1 -21
- package/math/vec3/layout.js.map +1 -1
- package/math/vec3/public.js +1 -21
- package/math/vec3/public.js.map +1 -1
- package/math/vec3/schema.js +1 -21
- package/math/vec3/schema.js.map +1 -1
- package/math/vec4/functions.js +1 -21
- package/math/vec4/functions.js.map +1 -1
- package/math/vec4/index.js +1 -21
- package/math/vec4/index.js.map +1 -1
- package/math/vec4/layout.js +1 -21
- package/math/vec4/layout.js.map +1 -1
- package/math/vec4/public.js +1 -21
- package/math/vec4/public.js.map +1 -1
- package/math/vec4/schema.js +1 -21
- package/math/vec4/schema.js.map +1 -1
- package/mutable-clone.js +1 -21
- package/mutable-clone.js.map +1 -1
- package/mutable.js +1 -21
- package/mutable.js.map +1 -1
- package/normalize.js +1 -21
- package/normalize.js.map +1 -1
- package/normalize.test.js +1 -21
- package/normalize.test.js.map +1 -1
- package/observe/create-event.js.map +1 -1
- package/observe/create-persisted-state.js.map +1 -1
- package/observe/create-persisted-state.test.js +1 -21
- package/observe/create-persisted-state.test.js.map +1 -1
- package/observe/create-query-state.js +1 -21
- package/observe/create-query-state.js.map +1 -1
- package/observe/create-state.js.map +1 -1
- package/observe/from-array.js +1 -21
- package/observe/from-array.js.map +1 -1
- package/observe/from-constant.js.map +1 -1
- package/observe/from-element-id.js +1 -21
- package/observe/from-element-id.js.map +1 -1
- package/observe/from-element-properties-and-events.js.map +1 -1
- package/observe/from-element-property.js +1 -21
- package/observe/from-element-property.js.map +1 -1
- package/observe/from-promise-with-error.js.map +1 -1
- package/observe/from-promise.js.map +1 -1
- package/observe/from-properties.js.map +1 -1
- package/observe/index.js +1 -21
- package/observe/index.js.map +1 -1
- package/observe/observe.test.js +1 -21
- package/observe/observe.test.js.map +1 -1
- package/observe/package.json +1 -0
- package/observe/public.js +1 -21
- package/observe/public.js.map +1 -1
- package/observe/to-async-generator.js +1 -21
- package/observe/to-async-generator.js.map +1 -1
- package/observe/to-async-generator.test.js +1 -21
- package/observe/to-async-generator.test.js.map +1 -1
- package/observe/to-promise.js.map +1 -1
- package/observe/to-properties.js.map +1 -1
- package/observe/with-async-map.js.map +1 -1
- package/observe/with-batch.js.map +1 -1
- package/observe/with-batch.test.js +1 -21
- package/observe/with-batch.test.js.map +1 -1
- package/observe/with-cache.js.map +1 -1
- package/observe/with-copy.js.map +1 -1
- package/observe/with-deduplicate-data.js.map +1 -1
- package/observe/with-deduplicate.js.map +1 -1
- package/observe/with-default.js.map +1 -1
- package/observe/with-filter.js.map +1 -1
- package/observe/with-filter.test.js +1 -21
- package/observe/with-filter.test.js.map +1 -1
- package/observe/with-lazy.js.map +1 -1
- package/observe/with-lazy.test.js +1 -21
- package/observe/with-lazy.test.js.map +1 -1
- package/observe/with-map-data.js +1 -21
- package/observe/with-map-data.js.map +1 -1
- package/observe/with-map.js.map +1 -1
- package/observe/with-optional.js.map +1 -1
- package/observe/with-unwrap.js.map +1 -1
- package/old-ecs/action-ecs/action-ecs.js +1 -21
- package/old-ecs/action-ecs/action-ecs.js.map +1 -1
- package/old-ecs/action-ecs/action-ecs.test.js +1 -21
- package/old-ecs/action-ecs/action-ecs.test.js.map +1 -1
- package/old-ecs/action-ecs/action-types.js.map +1 -1
- package/old-ecs/action-ecs/index.js +1 -21
- package/old-ecs/action-ecs/index.js.map +1 -1
- package/old-ecs/action-ecs/sequential-action.js +1 -21
- package/old-ecs/action-ecs/sequential-action.js.map +1 -1
- package/old-ecs/core-ecs/core-ecs-serialization.test.js +1 -21
- package/old-ecs/core-ecs/core-ecs-serialization.test.js.map +1 -1
- package/old-ecs/core-ecs/core-ecs-types.js +1 -21
- package/old-ecs/core-ecs/core-ecs-types.js.map +1 -1
- package/old-ecs/core-ecs/core-ecs.js +1 -21
- package/old-ecs/core-ecs/core-ecs.js.map +1 -1
- package/old-ecs/core-ecs/core-ecs.test.js +1 -21
- package/old-ecs/core-ecs/core-ecs.test.js.map +1 -1
- package/old-ecs/ecs/ecs-types.js +1 -21
- package/old-ecs/ecs/ecs-types.js.map +1 -1
- package/old-ecs/ecs/ecs-where-functions.js +1 -21
- package/old-ecs/ecs/ecs-where-functions.js.map +1 -1
- package/old-ecs/ecs/ecs.js.map +1 -1
- package/old-ecs/ecs/ecs.test.js +1 -21
- package/old-ecs/ecs/ecs.test.js.map +1 -1
- package/old-ecs/ecs/index.js +1 -21
- package/old-ecs/ecs/index.js.map +1 -1
- package/old-ecs/entity.js.map +1 -1
- package/old-ecs/index.js +1 -21
- package/old-ecs/index.js.map +1 -1
- package/old-ecs/package.json +1 -0
- package/old-ecs/transaction-ecs/index.js +1 -21
- package/old-ecs/transaction-ecs/index.js.map +1 -1
- package/old-ecs/transaction-ecs/transaction-ecs.js.map +1 -1
- package/old-ecs/transaction-ecs/transaction-ecs.test.js +1 -21
- package/old-ecs/transaction-ecs/transaction-ecs.test.js.map +1 -1
- package/old-ecs/transaction-ecs/transactions.js +1 -21
- package/old-ecs/transaction-ecs/transactions.js.map +1 -1
- package/package.json +111 -3
- package/perftest/ecs-perf.js +1 -21
- package/perftest/ecs-perf.js.map +1 -1
- package/perftest/helper-functions.js +1 -21
- package/perftest/helper-functions.js.map +1 -1
- package/perftest/horizon-perf.js +1 -21
- package/perftest/horizon-perf.js.map +1 -1
- package/perftest/index.js +1 -21
- package/perftest/index.js.map +1 -1
- package/perftest/package.json +1 -0
- package/perftest/perf-test.js.map +1 -1
- package/perftest/vanilla-perf.js +1 -21
- package/perftest/vanilla-perf.js.map +1 -1
- package/samples/index.js +1 -21
- package/samples/index.js.map +1 -1
- package/samples/package.json +1 -0
- package/samples/todo/elements/todo-list/todo-list-presentation.js.map +1 -1
- package/samples/todo/elements/todo-list/todo-list.css.js +1 -21
- package/samples/todo/elements/todo-list/todo-list.css.js.map +1 -1
- package/samples/todo/elements/todo-list/todo-list.js +1 -21
- package/samples/todo/elements/todo-list/todo-list.js.map +1 -1
- package/samples/todo/elements/todo-row/index.js +1 -21
- package/samples/todo/elements/todo-row/index.js.map +1 -1
- package/samples/todo/elements/todo-row/todo-row-presentation.js +1 -21
- package/samples/todo/elements/todo-row/todo-row-presentation.js.map +1 -1
- package/samples/todo/elements/todo-row/todo-row.css.js +1 -21
- package/samples/todo/elements/todo-row/todo-row.css.js.map +1 -1
- package/samples/todo/elements/todo-row/todo-row.js +1 -21
- package/samples/todo/elements/todo-row/todo-row.js.map +1 -1
- package/samples/todo/elements/todo-toolbar/index.js +1 -21
- package/samples/todo/elements/todo-toolbar/index.js.map +1 -1
- package/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.js +1 -21
- package/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.js.map +1 -1
- package/samples/todo/elements/todo-toolbar/todo-toolbar.css.js +1 -21
- package/samples/todo/elements/todo-toolbar/todo-toolbar.css.js.map +1 -1
- package/samples/todo/elements/todo-toolbar/todo-toolbar.js +1 -21
- package/samples/todo/elements/todo-toolbar/todo-toolbar.js.map +1 -1
- package/samples/todo/elements/todo-undo-redo/index.js +1 -21
- package/samples/todo/elements/todo-undo-redo/index.js.map +1 -1
- package/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.js +1 -21
- package/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.js.map +1 -1
- package/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.js +1 -21
- package/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.js.map +1 -1
- package/samples/todo/elements/todo-undo-redo/todo-undo-redo.js +1 -21
- package/samples/todo/elements/todo-undo-redo/todo-undo-redo.js.map +1 -1
- package/samples/todo/services/dependent-state-service/create-dependent-state-service.js +1 -21
- package/samples/todo/services/dependent-state-service/create-dependent-state-service.js.map +1 -1
- package/samples/todo/services/dependent-state-service/dependent-state/all-todos.js.map +1 -1
- package/samples/todo/services/dependent-state-service/dependent-state/complete-todos.js.map +1 -1
- package/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.js.map +1 -1
- package/samples/todo/services/dependent-state-service/dependent-state/index.js +1 -21
- package/samples/todo/services/dependent-state-service/dependent-state/index.js.map +1 -1
- package/samples/todo/services/main-service/create-main-service.js.map +1 -1
- package/samples/todo/services/state-service/create-todo-database.d.ts +1 -1
- package/samples/todo/services/state-service/create-todo-database.js +1 -21
- package/samples/todo/services/state-service/create-todo-database.js.map +1 -1
- package/samples/todo/services/state-service/create-todo-store.js +1 -21
- package/samples/todo/services/state-service/create-todo-store.js.map +1 -1
- package/samples/todo/services/state-service/transactions/create-bulk-todos.js +1 -21
- package/samples/todo/services/state-service/transactions/create-bulk-todos.js.map +1 -1
- package/samples/todo/services/state-service/transactions/create-todo.js.map +1 -1
- package/samples/todo/services/state-service/transactions/create-todo.test.js +1 -21
- package/samples/todo/services/state-service/transactions/create-todo.test.js.map +1 -1
- package/samples/todo/services/state-service/transactions/delete-all-todos.js.map +1 -1
- package/samples/todo/services/state-service/transactions/delete-todo.js +1 -21
- package/samples/todo/services/state-service/transactions/delete-todo.js.map +1 -1
- package/samples/todo/services/state-service/transactions/delete-todo.test.js +1 -21
- package/samples/todo/services/state-service/transactions/delete-todo.test.js.map +1 -1
- package/samples/todo/services/state-service/transactions/drag-todo.js +1 -21
- package/samples/todo/services/state-service/transactions/drag-todo.js.map +1 -1
- package/samples/todo/services/state-service/transactions/index.js +1 -21
- package/samples/todo/services/state-service/transactions/index.js.map +1 -1
- package/samples/todo/services/state-service/transactions/reorder-todos.js.map +1 -1
- package/samples/todo/services/state-service/transactions/toggle-complete.js.map +1 -1
- package/samples/todo/services/state-service/transactions/toggle-complete.test.js +1 -21
- package/samples/todo/services/state-service/transactions/toggle-complete.test.js.map +1 -1
- package/samples/todo/todo-element.js.map +1 -1
- package/samples/todo/todo-host.js +1 -21
- package/samples/todo/todo-host.js.map +1 -1
- package/samples/todo/todo-main-element.js +1 -21
- package/samples/todo/todo-main-element.js.map +1 -1
- package/samples/todo/todo-sample.js +1 -21
- package/samples/todo/todo-sample.js.map +1 -1
- package/schema/boolean/index.js +1 -21
- package/schema/boolean/index.js.map +1 -1
- package/schema/boolean/public.js +1 -21
- package/schema/boolean/public.js.map +1 -1
- package/schema/boolean/schema.js.map +1 -1
- package/schema/dynamic/deep-merge.js.map +1 -1
- package/schema/dynamic/deep-merge.test.js +1 -21
- package/schema/dynamic/deep-merge.test.js.map +1 -1
- package/schema/dynamic/enumerate-patches.js.map +1 -1
- package/schema/dynamic/enumerate-patches.test.js +1 -21
- package/schema/dynamic/enumerate-patches.test.js.map +1 -1
- package/schema/dynamic/get-dynamic-schema.js +1 -21
- package/schema/dynamic/get-dynamic-schema.js.map +1 -1
- package/schema/dynamic/get-dynamic-schema.test.js +1 -21
- package/schema/dynamic/get-dynamic-schema.test.js.map +1 -1
- package/schema/dynamic/index.js +1 -21
- package/schema/dynamic/index.js.map +1 -1
- package/schema/index.js +1 -21
- package/schema/index.js.map +1 -1
- package/schema/nullable.js.map +1 -1
- package/schema/package.json +1 -0
- package/schema/public.js +1 -21
- package/schema/public.js.map +1 -1
- package/schema/schema.js +1 -21
- package/schema/schema.js.map +1 -1
- package/schema/time/index.js +1 -21
- package/schema/time/index.js.map +1 -1
- package/schema/time/public.js +1 -21
- package/schema/time/public.js.map +1 -1
- package/schema/time/schema.js +1 -21
- package/schema/time/schema.js.map +1 -1
- package/schema/to-type.js +1 -21
- package/schema/to-type.js.map +1 -1
- package/schema/to-vertex-buffer-layout.js +1 -21
- package/schema/to-vertex-buffer-layout.js.map +1 -1
- package/schema/to-vertex-buffer-layout.test.js +1 -21
- package/schema/to-vertex-buffer-layout.test.js.map +1 -1
- package/schema/true/index.js +1 -21
- package/schema/true/index.js.map +1 -1
- package/schema/true/public.js +1 -21
- package/schema/true/public.js.map +1 -1
- package/schema/true/schema.js.map +1 -1
- package/schema/tuple.js +1 -21
- package/schema/tuple.js.map +1 -1
- package/schema/validation/index.js +1 -21
- package/schema/validation/index.js.map +1 -1
- package/schema/validation/is-valid.js.map +1 -1
- package/schema/validation/is-valid.test.js +1 -21
- package/schema/validation/is-valid.test.js.map +1 -1
- package/schema/validation/validate.js +1 -21
- package/schema/validation/validate.js.map +1 -1
- package/schema/validation/validate.test.js +1 -21
- package/schema/validation/validate.test.js.map +1 -1
- package/schema/validation/with-validation.js.map +1 -1
- package/schema/validation/with-validation.test.js +1 -21
- package/schema/validation/with-validation.test.js.map +1 -1
- package/schema.test.js.map +1 -1
- package/service/add-observable-actions.js +1 -21
- package/service/add-observable-actions.js.map +1 -1
- package/service/disposable.js +1 -21
- package/service/disposable.js.map +1 -1
- package/service/index.js +1 -21
- package/service/index.js.map +1 -1
- package/service/is-service.js +1 -21
- package/service/is-service.js.map +1 -1
- package/service/package.json +1 -0
- package/service/progressive-result.js +1 -21
- package/service/progressive-result.js.map +1 -1
- package/service/service.js +1 -21
- package/service/service.js.map +1 -1
- package/table/add-row.js +1 -21
- package/table/add-row.js.map +1 -1
- package/table/copy-column-to-gpu-buffer.js +1 -21
- package/table/copy-column-to-gpu-buffer.js.map +1 -1
- package/table/create-table.js +1 -21
- package/table/create-table.js.map +1 -1
- package/table/create-table.test.js +1 -21
- package/table/create-table.test.js.map +1 -1
- package/table/delete-row.js.map +1 -1
- package/table/ensure-capacity.js.map +1 -1
- package/table/get-row-data.js.map +1 -1
- package/table/index.js +1 -21
- package/table/index.js.map +1 -1
- package/table/package.json +1 -0
- package/table/row-index.js.map +1 -1
- package/table/select-rows.js.map +1 -1
- package/table/select-rows.test.js +1 -21
- package/table/select-rows.test.js.map +1 -1
- package/table/table-compact.test.js +1 -21
- package/table/table-compact.test.js.map +1 -1
- package/table/table.js.map +1 -1
- package/table/update-row.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/typed-buffer/copy-to-gpu-buffer.js +1 -21
- package/typed-buffer/copy-to-gpu-buffer.js.map +1 -1
- package/typed-buffer/create-array-buffer.js.map +1 -1
- package/typed-buffer/create-array-buffer.test.js +1 -21
- package/typed-buffer/create-array-buffer.test.js.map +1 -1
- package/typed-buffer/create-const-buffer.copy.test.js +1 -21
- package/typed-buffer/create-const-buffer.copy.test.js.map +1 -1
- package/typed-buffer/create-const-buffer.js.map +1 -1
- package/typed-buffer/create-const-buffer.test.js +1 -21
- package/typed-buffer/create-const-buffer.test.js.map +1 -1
- package/typed-buffer/create-number-buffer.js +1 -21
- package/typed-buffer/create-number-buffer.js.map +1 -1
- package/typed-buffer/create-number-buffer.test.js +1 -21
- package/typed-buffer/create-number-buffer.test.js.map +1 -1
- package/typed-buffer/create-struct-buffer.copy.test.js +1 -21
- package/typed-buffer/create-struct-buffer.copy.test.js.map +1 -1
- package/typed-buffer/create-struct-buffer.js +1 -21
- package/typed-buffer/create-struct-buffer.js.map +1 -1
- package/typed-buffer/create-struct-buffer.test.js +1 -21
- package/typed-buffer/create-struct-buffer.test.js.map +1 -1
- package/typed-buffer/create-typed-buffer.js.map +1 -1
- package/typed-buffer/create-typed-buffer.test.js +1 -21
- package/typed-buffer/create-typed-buffer.test.js.map +1 -1
- package/typed-buffer/index.js +1 -21
- package/typed-buffer/index.js.map +1 -1
- package/typed-buffer/is-typed-buffer.js +1 -21
- package/typed-buffer/is-typed-buffer.js.map +1 -1
- package/typed-buffer/is-typed-buffer.test.js +1 -21
- package/typed-buffer/is-typed-buffer.test.js.map +1 -1
- package/typed-buffer/package.json +1 -0
- package/typed-buffer/register-typed-buffer-codecs.js +1 -21
- package/typed-buffer/register-typed-buffer-codecs.js.map +1 -1
- package/typed-buffer/structs/assert-struct.js.map +1 -1
- package/typed-buffer/structs/create-read-struct.js +1 -21
- package/typed-buffer/structs/create-read-struct.js.map +1 -1
- package/typed-buffer/structs/create-read-struct.test.js +1 -21
- package/typed-buffer/structs/create-read-struct.test.js.map +1 -1
- package/typed-buffer/structs/create-write-struct.js +1 -21
- package/typed-buffer/structs/create-write-struct.js.map +1 -1
- package/typed-buffer/structs/get-field-offset.js.map +1 -1
- package/typed-buffer/structs/get-struct-layout.js +1 -21
- package/typed-buffer/structs/get-struct-layout.js.map +1 -1
- package/typed-buffer/structs/get-struct-layout.test.js +1 -21
- package/typed-buffer/structs/get-struct-layout.test.js.map +1 -1
- package/typed-buffer/structs/index.js +1 -21
- package/typed-buffer/structs/index.js.map +1 -1
- package/typed-buffer/structs/write-struct.test.js +1 -21
- package/typed-buffer/structs/write-struct.test.js.map +1 -1
- package/typed-buffer/typed-buffer-equals.js +1 -21
- package/typed-buffer/typed-buffer-equals.js.map +1 -1
- package/typed-buffer/typed-buffer-equals.test.js +1 -21
- package/typed-buffer/typed-buffer-equals.test.js.map +1 -1
- package/typed-buffer/typed-buffer.js.map +1 -1
- package/typed-buffer/typed-buffer.test.js +1 -21
- package/typed-buffer/typed-buffer.test.js.map +1 -1
- package/types/index.js +1 -21
- package/types/index.js.map +1 -1
- package/types/package.json +1 -0
- package/types/replace.js.map +1 -1
- package/types/typed-array.js +1 -21
- package/types/typed-array.js.map +1 -1
- package/types/types.d.ts +1 -0
- package/types/types.js +1 -21
- package/types/types.js.map +1 -1
package/LICENSE
CHANGED
package/assembly/index.wasm.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["~lib/rt/common.ts","~lib/rt/tlsf.ts","~lib/shared/typeinfo.ts","~lib/rt/itcms.ts","assembly/index.ts"],"names":[],"mappings":"0HIsBS,EAAI,EAAJ,M,EAKkC,EAAJ,G,EACX,EAAK,EAAL,GAAR,GAAhB,EAGoB,EAAT,GAFK,EAAQ,EAAR,CAGL,GAEQ,CAAnB,GAP+C,E,GAAA,E,SAcrC,EAAS,EAAT,CAAZ,EAGA,EAAO,EAAI,EAAJ,C,EACM,EAA0B,EAAV,IAA2B,EAAV,IAA3B,GAAjB,IACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EAHc,EAAK,E,CAAL,E,IAOhB,EAAW,EAAJ,G,EACM,EAAgB,EAAV,GAA4B,EAAV,GAAlB,CAAjB,GACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EAHiB,E,GAAA,E,UAYP,EAAU,EAAS,EAAT,CAAV,CAAZ,EAGA,EAAO,EAAI,EAAJ,C,EAEM,EAA0B,EAAV,IAA2B,EAAV,IAA3B,GAAjB,IACA,EAAQ,E,CAAR,EAIqC,EAAV,IAH3B,EAAQ,E,CAAR,EAG4C,IAA3B,GAAjB,IACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EATc,EAAK,E,CAAL,E,IAahB,EAAW,EAAJ,G,EACM,EAAgB,EAAV,GAA4B,EAAV,GAAlB,CAAjB,GACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EAHiB,E,GAAA,E","sourceRoot":"./index","sourcesContent":["// Alignment guarantees\n\n// @ts-ignore: decorator\n@inline export const AL_BITS: u32 = 4; // 16 bytes to fit up to v128\n// @ts-ignore: decorator\n@inline export const AL_SIZE: usize = 1 << <usize>AL_BITS;\n// @ts-ignore: decorator\n@inline export const AL_MASK: usize = AL_SIZE - 1;\n\n// Extra debugging\n\n// @ts-ignore: decorator\n@inline export const DEBUG = true;\n// @ts-ignore: decorator\n@inline export const TRACE = false;\n// @ts-ignore: decorator\n@inline export const RTRACE = isDefined(ASC_RTRACE);\n// @ts-ignore: decorator\n@inline export const PROFILE = isDefined(ASC_PROFILE);\n\n// Memory manager\n\n// ╒════════════ Memory manager block layout (32-bit) ═════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤\n// │ MM info │ -4\n// ╞>ptr═══════════════════════════════════════════════════════════╡\n// │ ... │\n@unmanaged export class BLOCK {\n /** Memory manager info. */\n mmInfo: usize;\n}\n\n/** Overhead of a memory manager block. */\n// @ts-ignore: decorator\n@inline export const BLOCK_OVERHEAD: usize = offsetof<BLOCK>();\n\n/** Maximum size of a memory manager block's payload. */\n// @ts-ignore: decorator\n@inline export const BLOCK_MAXSIZE: usize = (1 << 30) - BLOCK_OVERHEAD;\n\n// Garbage collector\n\n// ╒══════════ Garbage collector object layout (32-bit) ═══════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤\n// │ Memory manager block │ -20\n// ╞═══════════════════════════════════════════════════════════════╡\n// │ GC info │ -16\n// ├───────────────────────────────────────────────────────────────┤\n// │ GC info │ -12\n// ├───────────────────────────────────────────────────────────────┤\n// │ RT id │ -8\n// ├───────────────────────────────────────────────────────────────┤\n// │ RT size │ -4\n// ╞>ptr═══════════════════════════════════════════════════════════╡\n// │ ... │\n@unmanaged export class OBJECT extends BLOCK {\n /** Garbage collector info. */\n gcInfo: u32;\n /** Garbage collector info. */\n gcInfo2: u32;\n /** Runtime class id. */\n rtId: u32;\n /** Runtime object size. */\n rtSize: u32;\n}\n\n/** Overhead of a garbage collector object. Excludes memory manager block overhead. */\n// @ts-ignore: decorator\n@inline export const OBJECT_OVERHEAD: usize = (offsetof<OBJECT>() - BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK;\n\n/** Maximum size of a garbage collector object's payload. */\n// @ts-ignore: decorator\n@inline export const OBJECT_MAXSIZE: usize = BLOCK_MAXSIZE - OBJECT_OVERHEAD;\n\n/** Total of memory manager and garbage collector overhead. */\n// @ts-ignore: decorator\n@inline export const TOTAL_OVERHEAD: usize = BLOCK_OVERHEAD + OBJECT_OVERHEAD;\n","import { AL_BITS, AL_SIZE, AL_MASK, DEBUG, BLOCK, BLOCK_OVERHEAD, BLOCK_MAXSIZE } from \"./common\";\nimport { oninit, onalloc, onresize, onmove, onfree } from \"./rtrace\";\nimport { E_ALLOCATION_TOO_LARGE } from \"../util/error\";\n\n// === The TLSF (Two-Level Segregate Fit) memory allocator ===\n// see: http://www.gii.upv.es/tlsf/\n\n// - `ffs(x)` is equivalent to `ctz(x)` with x != 0\n// - `fls(x)` is equivalent to `sizeof(x) * 8 - clz(x) - 1`\n\n// ╒══════════════ Block size interpretation (32-bit) ═════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─╫─┴─┴─┴─┤\n// │ | FL │ SB = SL + AL │ ◄─ usize\n// └───────────────────────────────────────────────┴───────╨───────┘\n// FL: first level, SL: second level, AL: alignment, SB: small block\n\n// @ts-ignore: decorator\n@inline const SL_BITS: u32 = 4;\n// @ts-ignore: decorator\n@inline const SL_SIZE: u32 = 1 << SL_BITS;\n\n// @ts-ignore: decorator\n@inline const SB_BITS: u32 = SL_BITS + AL_BITS;\n// @ts-ignore: decorator\n@inline const SB_SIZE: u32 = 1 << SB_BITS;\n\n// @ts-ignore: decorator\n@inline const FL_BITS: u32 = 31 - SB_BITS;\n\n// [00]: < 256B (SB) [12]: < 1M\n// [01]: < 512B [13]: < 2M\n// [02]: < 1K [14]: < 4M\n// [03]: < 2K [15]: < 8M\n// [04]: < 4K [16]: < 16M\n// [05]: < 8K [17]: < 32M\n// [06]: < 16K [18]: < 64M\n// [07]: < 32K [19]: < 128M\n// [08]: < 64K [20]: < 256M\n// [09]: < 128K [21]: < 512M\n// [10]: < 256K [22]: <= 1G - OVERHEAD\n// [11]: < 512K\n// VMs limit to 2GB total (currently), making one 1G block max (or three 512M etc.) due to block overhead\n\n// Tags stored in otherwise unused alignment bits\n\n// @ts-ignore: decorator\n@inline const FREE: usize = 1 << 0;\n// @ts-ignore: decorator\n@inline const LEFTFREE: usize = 1 << 1;\n// @ts-ignore: decorator\n@inline const TAGS_MASK: usize = FREE | LEFTFREE; // <= AL_MASK\n\n// ╒════════════════════ Block layout (32-bit) ════════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┼─┤ ┐\n// │ size │L│F│ ◄─┐ info overhead\n// ╞>ptr═══════════════════════════════════════════════════════╧═╧═╡ │ ┘\n// │ if free: ◄ prev │ ◄─┤ usize\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ if free: next ► │ ◄─┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... │ │ >= 0\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ if free: back ▲ │ ◄─┘\n// └───────────────────────────────────────────────────────────────┘ >= MIN SIZE\n// F: FREE, L: LEFTFREE\n@unmanaged export class Block extends BLOCK {\n\n /** Previous free block, if any. Only valid if free, otherwise part of payload. */\n prev: Block | null;\n /** Next free block, if any. Only valid if free, otherwise part of payload. */\n next: Block | null;\n\n // If the block is free, there is a 'back'reference at its end pointing at its start.\n}\n\n// Block constants. A block must have a minimum size of three pointers so it can hold `prev`,\n// `next` and `back` if free.\n\n// @ts-ignore: decorator\n@inline const BLOCK_MINSIZE: usize = ((3 * sizeof<usize>() + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD; // prev + next + back\n// @ts-ignore: decorator\n// @inline const BLOCK_MAXSIZE: usize = 1 << (FL_BITS + SB_BITS - 1); // exclusive, lives in common.ts\n\n/** Gets the left block of a block. Only valid if the left block is free. */\n// @ts-ignore: decorator\n@inline function GETFREELEFT(block: Block): Block {\n return load<Block>(changetype<usize>(block) - sizeof<usize>());\n}\n\n/** Gets the right block of a block by advancing to the right by its size. */\n// @ts-ignore: decorator\n@inline function GETRIGHT(block: Block): Block {\n return changetype<Block>(changetype<usize>(block) + BLOCK_OVERHEAD + (block.mmInfo & ~TAGS_MASK));\n}\n\n// ╒═════════════════════ Root layout (32-bit) ════════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ┐\n// │ 0 | flMap S│ ◄────┐\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ slMap[0] S │ ◄─┐ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[1] │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ u32 │\n// │ slMap[22] │ ◄─┘ │\n// ╞═══════════════════════════════════════════════════════════════╡ usize\n// │ head[0] │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ head[367] │ ◄────┤\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ tail │ ◄────┘\n// └───────────────────────────────────────────────────────────────┘ SIZE ┘\n// S: Small blocks map\n@unmanaged class Root {\n /** First level bitmap. */\n flMap: usize;\n}\n\n// Root constants. Where stuff is stored inside of the root structure.\n\n// @ts-ignore: decorator\n@inline const SL_START: usize = sizeof<usize>();\n// @ts-ignore: decorator\n@inline const SL_END: usize = SL_START + (FL_BITS << alignof<u32>());\n// @ts-ignore: decorator\n@inline const HL_START: usize = (SL_END + AL_MASK) & ~AL_MASK;\n// @ts-ignore: decorator\n@inline const HL_END: usize = HL_START + FL_BITS * SL_SIZE * sizeof<usize>();\n// @ts-ignore: decorator\n@inline const ROOT_SIZE: usize = HL_END + sizeof<usize>();\n\n// @ts-ignore: decorator\n@lazy export let ROOT: Root = changetype<Root>(0); // unsafe initializion below\n\n/** Gets the second level map of the specified first level. */\n// @ts-ignore: decorator\n@inline function GETSL(root: Root, fl: usize): u32 {\n return load<u32>(\n changetype<usize>(root) + (fl << alignof<u32>()),\n SL_START\n );\n}\n\n/** Sets the second level map of the specified first level. */\n// @ts-ignore: decorator\n@inline function SETSL(root: Root, fl: usize, slMap: u32): void {\n store<u32>(\n changetype<usize>(root) + (fl << alignof<u32>()),\n slMap,\n SL_START\n );\n}\n\n/** Gets the head of the free list for the specified combination of first and second level. */\n// @ts-ignore: decorator\n@inline function GETHEAD(root: Root, fl: usize, sl: u32): Block | null {\n return load<Block>(\n changetype<usize>(root) + (((fl << SL_BITS) + <usize>sl) << alignof<usize>()),\n HL_START\n );\n}\n\n/** Sets the head of the free list for the specified combination of first and second level. */\n// @ts-ignore: decorator\n@inline function SETHEAD(root: Root, fl: usize, sl: u32, head: Block | null): void {\n store<Block | null>(\n changetype<usize>(root) + (((fl << SL_BITS) + <usize>sl) << alignof<usize>()),\n head,\n HL_START\n );\n}\n\n/** Gets the tail block.. */\n// @ts-ignore: decorator\n@inline function GETTAIL(root: Root): Block {\n return load<Block>(\n changetype<usize>(root),\n HL_END\n );\n}\n\n/** Sets the tail block. */\n// @ts-ignore: decorator\n@inline function SETTAIL(root: Root, tail: Block): void {\n store<Block>(\n changetype<usize>(root),\n tail,\n HL_END\n );\n}\n\n/** Inserts a previously used block back into the free list. */\nfunction insertBlock(root: Root, block: Block): void {\n if (DEBUG) assert(block); // cannot be null\n let blockInfo = block.mmInfo;\n if (DEBUG) assert(blockInfo & FREE); // must be free\n\n let right = GETRIGHT(block);\n let rightInfo = right.mmInfo;\n\n // merge with right block if also free\n if (rightInfo & FREE) {\n removeBlock(root, right);\n block.mmInfo = blockInfo = blockInfo + BLOCK_OVERHEAD + (rightInfo & ~TAGS_MASK); // keep block tags\n right = GETRIGHT(block);\n rightInfo = right.mmInfo;\n // 'back' is set below\n }\n\n // merge with left block if also free\n if (blockInfo & LEFTFREE) {\n let left = GETFREELEFT(block);\n let leftInfo = left.mmInfo;\n if (DEBUG) assert(leftInfo & FREE); // must be free according to right tags\n removeBlock(root, left);\n block = left;\n block.mmInfo = blockInfo = leftInfo + BLOCK_OVERHEAD + (blockInfo & ~TAGS_MASK); // keep left tags\n // 'back' is set below\n }\n\n right.mmInfo = rightInfo | LEFTFREE;\n // reference to right is no longer used now, hence rightInfo is not synced\n\n // we now know the size of the block\n let size = blockInfo & ~TAGS_MASK;\n if (DEBUG) assert(size >= BLOCK_MINSIZE); // must be a valid size\n if (DEBUG) assert(changetype<usize>(block) + BLOCK_OVERHEAD + size == changetype<usize>(right)); // must match\n\n // set 'back' to itself at the end of block\n store<Block>(changetype<usize>(right) - sizeof<usize>(), block);\n\n // mapping_insert\n let fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = <u32>(size >> AL_BITS);\n } else {\n const inv: usize = sizeof<usize>() * 8 - 1;\n let boundedSize = min(size, BLOCK_MAXSIZE);\n fl = inv - clz<usize>(boundedSize);\n sl = <u32>((boundedSize >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range\n\n // perform insertion\n let head = GETHEAD(root, fl, sl);\n block.prev = null;\n block.next = head;\n if (head) head.prev = block;\n SETHEAD(root, fl, sl, block);\n\n // update first and second level maps\n root.flMap |= (1 << fl);\n SETSL(root, fl, GETSL(root, fl) | (1 << sl));\n}\n\n/** Removes a free block from internal lists. */\nfunction removeBlock(root: Root, block: Block): void {\n let blockInfo = block.mmInfo;\n if (DEBUG) assert(blockInfo & FREE); // must be free\n let size = blockInfo & ~TAGS_MASK;\n if (DEBUG) assert(size >= BLOCK_MINSIZE); // must be valid\n\n // mapping_insert\n let fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = <u32>(size >> AL_BITS);\n } else {\n const inv: usize = sizeof<usize>() * 8 - 1;\n let boundedSize = min(size, BLOCK_MAXSIZE);\n fl = inv - clz<usize>(boundedSize);\n sl = <u32>((boundedSize >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range\n\n // link previous and next free block\n let prev = block.prev;\n let next = block.next;\n if (prev) prev.next = next;\n if (next) next.prev = prev;\n\n // update head if we are removing it\n if (block == GETHEAD(root, fl, sl)) {\n SETHEAD(root, fl, sl, next);\n\n // clear second level map if head is empty now\n if (!next) {\n let slMap = GETSL(root, fl);\n SETSL(root, fl, slMap &= ~(1 << sl));\n\n // clear first level map if second level is empty now\n if (!slMap) root.flMap &= ~(1 << fl);\n }\n }\n // note: does not alter left/back because it is likely that splitting\n // is performed afterwards, invalidating those changes. so, the caller\n // must perform those updates.\n}\n\nfunction roundSize(size: usize): usize {\n const halfMaxSize = BLOCK_MAXSIZE >> 1; // don't round last fl\n const inv: usize = sizeof<usize>() * 8 - 1;\n const invRound = inv - SL_BITS;\n return size < halfMaxSize\n ? size + (1 << (invRound - clz<usize>(size))) - 1\n : size;\n}\n\n/** Searches for a free block of at least the specified size. */\nfunction searchBlock(root: Root, size: usize): Block | null {\n // size was already asserted by caller\n\n // mapping_search\n let fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = <u32>(size >> AL_BITS);\n } else {\n const requestSize = roundSize(size);\n fl = sizeof<usize>() * 8 - 1 - clz<usize>(requestSize);\n sl = <u32>((requestSize >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range\n\n // search second level\n let slMap = GETSL(root, fl) & (~0 << sl);\n let head: Block | null = null;\n if (!slMap) {\n // search next larger first level\n let flMap = root.flMap & (~0 << (fl + 1));\n if (!flMap) {\n head = null;\n } else {\n fl = ctz<usize>(flMap);\n slMap = GETSL(root, fl);\n if (DEBUG) assert(slMap); // can't be zero if fl points here\n head = GETHEAD(root, fl, ctz<u32>(slMap));\n }\n } else {\n head = GETHEAD(root, fl, ctz<u32>(slMap));\n }\n return head;\n}\n\n/** Prepares the specified block before (re-)use, possibly splitting it. */\nfunction prepareBlock(root: Root, block: Block, size: usize): void {\n // size was already asserted by caller\n\n let blockInfo = block.mmInfo;\n if (DEBUG) assert(!((size + BLOCK_OVERHEAD) & AL_MASK)); // size must be aligned so the new block is\n\n // split if the block can hold another MINSIZE block incl. overhead\n let remaining = (blockInfo & ~TAGS_MASK) - size;\n if (remaining >= BLOCK_OVERHEAD + BLOCK_MINSIZE) {\n block.mmInfo = size | (blockInfo & LEFTFREE); // also discards FREE\n\n let spare = changetype<Block>(changetype<usize>(block) + BLOCK_OVERHEAD + size);\n spare.mmInfo = (remaining - BLOCK_OVERHEAD) | FREE; // not LEFTFREE\n insertBlock(root, spare); // also sets 'back'\n\n // otherwise tag block as no longer FREE and right as no longer LEFTFREE\n } else {\n block.mmInfo = blockInfo & ~FREE;\n GETRIGHT(block).mmInfo &= ~LEFTFREE;\n }\n}\n\n/** Adds more memory to the pool. */\nfunction addMemory(root: Root, start: usize, endU64: u64): bool {\n let end = <usize>endU64;\n if (DEBUG) assert(<u64>start <= endU64); // must be valid\n start = ((start + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD;\n end &= ~AL_MASK;\n\n let tail = GETTAIL(root);\n let tailInfo: usize = 0;\n if (tail) { // more memory\n if (DEBUG) assert(start >= changetype<usize>(tail) + BLOCK_OVERHEAD);\n\n // merge with current tail if adjacent\n const offsetToTail = AL_SIZE;\n if (start - offsetToTail == changetype<usize>(tail)) {\n start -= offsetToTail;\n tailInfo = tail.mmInfo;\n } else {\n // We don't do this, but a user might `memory.grow` manually\n // leading to non-adjacent pages managed by TLSF.\n }\n\n } else if (DEBUG) { // first memory\n assert(start >= changetype<usize>(root) + ROOT_SIZE); // starts after root\n }\n\n // check if size is large enough for a free block and the tail block\n let size = end - start;\n if (size < BLOCK_OVERHEAD + BLOCK_MINSIZE + BLOCK_OVERHEAD) {\n return false;\n }\n\n // left size is total minus its own and the zero-length tail's header\n let leftSize = size - 2 * BLOCK_OVERHEAD;\n let left = changetype<Block>(start);\n left.mmInfo = leftSize | FREE | (tailInfo & LEFTFREE);\n left.prev = null;\n left.next = null;\n\n // tail is a zero-length used block\n tail = changetype<Block>(start + BLOCK_OVERHEAD + leftSize);\n tail.mmInfo = 0 | LEFTFREE;\n SETTAIL(root, tail);\n\n insertBlock(root, left); // also merges with free left before tail / sets 'back'\n\n return true;\n}\n\n/** Grows memory to fit at least another block of the specified size. */\nfunction growMemory(root: Root, size: usize): void {\n if (ASC_LOW_MEMORY_LIMIT) {\n unreachable();\n return;\n }\n // Here, both rounding performed in searchBlock ...\n if (size >= SB_SIZE) {\n size = roundSize(size);\n }\n // and additional BLOCK_OVERHEAD must be taken into account. If we are going\n // to merge with the tail block, that's one time, otherwise it's two times.\n let pagesBefore = memory.size();\n size += BLOCK_OVERHEAD << usize((<usize>pagesBefore << 16) - BLOCK_OVERHEAD != changetype<usize>(GETTAIL(root)));\n let pagesNeeded = <i32>(((size + 0xffff) & ~0xffff) >>> 16);\n let pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (memory.grow(pagesWanted) < 0) {\n if (memory.grow(pagesNeeded) < 0) unreachable();\n }\n let pagesAfter = memory.size();\n addMemory(root, <usize>pagesBefore << 16, <u64>pagesAfter << 16);\n}\n\n/** Computes the size (excl. header) of a block. */\nfunction computeSize(size: usize): usize {\n // Size must be large enough and aligned minus preceeding overhead\n return size <= BLOCK_MINSIZE\n ? BLOCK_MINSIZE\n : ((size + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD;\n}\n\n/** Prepares and checks an allocation size. */\nfunction prepareSize(size: usize): usize {\n if (size > BLOCK_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE);\n return computeSize(size);\n}\n\n/** Initializes the root structure. */\nfunction initialize(): void {\n if (isDefined(ASC_RTRACE)) oninit(__heap_base);\n let rootOffset = (__heap_base + AL_MASK) & ~AL_MASK;\n let pagesBefore = memory.size();\n let pagesNeeded = <i32>((((rootOffset + ROOT_SIZE) + 0xffff) & ~0xffff) >>> 16);\n if (pagesNeeded > pagesBefore && memory.grow(pagesNeeded - pagesBefore) < 0) unreachable();\n let root = changetype<Root>(rootOffset);\n root.flMap = 0;\n SETTAIL(root, changetype<Block>(0));\n for (let fl: usize = 0; fl < FL_BITS; ++fl) {\n SETSL(root, fl, 0);\n for (let sl: u32 = 0; sl < SL_SIZE; ++sl) {\n SETHEAD(root, fl, sl, null);\n }\n }\n let memStart = rootOffset + ROOT_SIZE;\n if (ASC_LOW_MEMORY_LIMIT) {\n const memEnd = <u64>ASC_LOW_MEMORY_LIMIT & ~AL_MASK;\n if (memStart <= memEnd) addMemory(root, memStart, memEnd);\n else unreachable(); // low memory limit already exceeded\n } else {\n addMemory(root, memStart, <u64>memory.size() << 16);\n }\n ROOT = root;\n}\n\n/** Allocates a block of the specified size. */\nexport function allocateBlock(root: Root, size: usize): Block {\n let payloadSize = prepareSize(size);\n let block = searchBlock(root, payloadSize);\n if (!block) {\n growMemory(root, payloadSize);\n block = changetype<Block>(searchBlock(root, payloadSize));\n if (DEBUG) assert(block); // must be found now\n }\n if (DEBUG) assert((block.mmInfo & ~TAGS_MASK) >= payloadSize); // must fit\n removeBlock(root, block);\n prepareBlock(root, block, payloadSize);\n if (isDefined(ASC_RTRACE)) onalloc(block);\n return block;\n}\n\n/** Reallocates a block to the specified size. */\nexport function reallocateBlock(root: Root, block: Block, size: usize): Block {\n let payloadSize = prepareSize(size);\n let blockInfo = block.mmInfo;\n let blockSize = blockInfo & ~TAGS_MASK;\n\n // possibly split and update runtime size if it still fits\n if (payloadSize <= blockSize) {\n prepareBlock(root, block, payloadSize);\n if (isDefined(ASC_RTRACE)) {\n if (payloadSize != blockSize) onresize(block, BLOCK_OVERHEAD + blockSize);\n }\n return block;\n }\n\n // merge with right free block if merger is large enough\n let right = GETRIGHT(block);\n let rightInfo = right.mmInfo;\n if (rightInfo & FREE) {\n let mergeSize = blockSize + BLOCK_OVERHEAD + (rightInfo & ~TAGS_MASK);\n if (mergeSize >= payloadSize) {\n removeBlock(root, right);\n block.mmInfo = (blockInfo & TAGS_MASK) | mergeSize;\n prepareBlock(root, block, payloadSize);\n if (isDefined(ASC_RTRACE)) onresize(block, BLOCK_OVERHEAD + blockSize);\n return block;\n }\n }\n\n // otherwise move the block\n return moveBlock(root, block, size);\n}\n\n/** Moves a block to a new one of the specified size. */\nfunction moveBlock(root: Root, block: Block, newSize: usize): Block {\n let newBlock = allocateBlock(root, newSize);\n memory.copy(changetype<usize>(newBlock) + BLOCK_OVERHEAD, changetype<usize>(block) + BLOCK_OVERHEAD, block.mmInfo & ~TAGS_MASK);\n if (changetype<usize>(block) >= __heap_base) {\n if (isDefined(ASC_RTRACE)) onmove(block, newBlock);\n freeBlock(root, block);\n }\n return newBlock;\n}\n\n/** Frees a block. */\nexport function freeBlock(root: Root, block: Block): void {\n if (isDefined(ASC_RTRACE)) onfree(block);\n block.mmInfo = block.mmInfo | FREE;\n insertBlock(root, block);\n}\n\n/** Checks that a used block is valid to be freed or reallocated. */\nfunction checkUsedBlock(ptr: usize): Block {\n let block = changetype<Block>(ptr - BLOCK_OVERHEAD);\n assert(\n ptr != 0 && !(ptr & AL_MASK) && // must exist and be aligned\n !(block.mmInfo & FREE) // must be used\n );\n return block;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __alloc(size: usize): usize {\n if (!ROOT) initialize();\n return changetype<usize>(allocateBlock(ROOT, size)) + BLOCK_OVERHEAD;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __realloc(ptr: usize, size: usize): usize {\n if (!ROOT) initialize();\n return (ptr < __heap_base\n ? changetype<usize>(moveBlock(ROOT, checkUsedBlock(ptr), size))\n : changetype<usize>(reallocateBlock(ROOT, checkUsedBlock(ptr), size))\n ) + BLOCK_OVERHEAD;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __free(ptr: usize): void {\n if (ptr < __heap_base) return;\n if (!ROOT) initialize();\n freeBlock(ROOT, checkUsedBlock(ptr));\n}\n","// This file is shared with the compiler and must remain portable\n\n// ╒═══════════════════ Typeinfo interpretation ═══════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ◄─ __rtti_base\n// │ count │\n// ╞═══════════════════════════════════════════════════════════════╡ ┐\n// │ Typeinfo#flags [id=0] │ id < count\n// ├───────────────────────────────────────────────────────────────┤\n// │ ... │\n\n/** Runtime type information data structure. */\n@unmanaged\nexport class Typeinfo {\n /** Flags describing the shape of this class type. */\n flags: TypeinfoFlags = TypeinfoFlags.NONE;\n}\n\n/** Runtime type information flags. */\nexport const enum TypeinfoFlags {\n /** No specific flags. */\n NONE = 0,\n /** Type is an `ArrayBufferView`. */\n ARRAYBUFFERVIEW = 1 << 0,\n /** Type is an `Array`. */\n ARRAY = 1 << 1,\n /** Type is a `StaticArray`. */\n STATICARRAY = 1 << 2,\n /** Type is a `Set`. */\n SET = 1 << 3,\n /** Type is a `Map`. */\n MAP = 1 << 4,\n /** Type has no outgoing pointers. */\n POINTERFREE = 1 << 5,\n /** Value alignment of 1 byte. */\n VALUE_ALIGN_0 = 1 << 6,\n /** Value alignment of 2 bytes. */\n VALUE_ALIGN_1 = 1 << 7,\n /** Value alignment of 4 bytes. */\n VALUE_ALIGN_2 = 1 << 8,\n /** Value alignment of 8 bytes. */\n VALUE_ALIGN_3 = 1 << 9,\n /** Value alignment of 16 bytes. */\n VALUE_ALIGN_4 = 1 << 10,\n /** Value is a signed type. */\n VALUE_SIGNED = 1 << 11,\n /** Value is a float type. */\n VALUE_FLOAT = 1 << 12,\n /** Value type is nullable. */\n VALUE_NULLABLE = 1 << 13,\n /** Value type is managed. */\n VALUE_MANAGED = 1 << 14,\n /** Key alignment of 1 byte. */\n KEY_ALIGN_0 = 1 << 15,\n /** Key alignment of 2 bytes. */\n KEY_ALIGN_1 = 1 << 16,\n /** Key alignment of 4 bytes. */\n KEY_ALIGN_2 = 1 << 17,\n /** Key alignment of 8 bytes. */\n KEY_ALIGN_3 = 1 << 18,\n /** Key alignment of 16 bytes. */\n KEY_ALIGN_4 = 1 << 19,\n /** Key is a signed type. */\n KEY_SIGNED = 1 << 20,\n /** Key is a float type. */\n KEY_FLOAT = 1 << 21,\n /** Key type is nullable. */\n KEY_NULLABLE = 1 << 22,\n /** Key type is managed. */\n KEY_MANAGED = 1 << 23\n}\n","import { BLOCK, BLOCK_OVERHEAD, OBJECT_OVERHEAD, OBJECT_MAXSIZE, TOTAL_OVERHEAD, DEBUG, TRACE, RTRACE, PROFILE } from \"./common\";\nimport { onvisit, oncollect, oninterrupt, onyield } from \"./rtrace\";\nimport { TypeinfoFlags } from \"../shared/typeinfo\";\nimport { E_ALLOCATION_TOO_LARGE, E_ALREADY_PINNED, E_NOT_PINNED } from \"../util/error\";\n\n// === ITCMS: An incremental Tri-Color Mark & Sweep garbage collector ===\n// Adapted from Bach Le's μgc, see: https://github.com/bullno1/ugc\n\n// ╒═════════════╤══════════════ Colors ═══════════════════════════╕\n// │ Color │ Meaning │\n// ├─────────────┼─────────────────────────────────────────────────┤\n// │ WHITE* │ Unprocessed │\n// │ BLACK* │ Processed │\n// │ GRAY │ Processed with unprocessed children │\n// │ TRANSPARENT │ Manually pinned (always reachable) │\n// └─────────────┴─────────────────────────────────────────────────┘\n// * flipped between cycles\n\n// @ts-ignore: decorator\n@lazy let white = 0;\n// @ts-ignore: decorator\n@inline const gray = 2;\n// @ts-ignore: decorator\n@inline const transparent = 3;\n// @ts-ignore: decorator\n@inline const COLOR_MASK = 3;\n\n/** Size in memory of all objects currently managed by the GC. */\n// @ts-ignore: decorator\n@lazy let total: usize = 0;\n\n/** Currently transitioning from SWEEP to MARK state. */\n// @ts-ignore: decorator\n@inline const STATE_IDLE = 0;\n/** Currently marking reachable objects. */\n// @ts-ignore: decorator\n@inline const STATE_MARK = 1;\n/** Currently sweeping unreachable objects. */\n// @ts-ignore: decorator\n@inline const STATE_SWEEP = 2;\n/** Current collector state. */\n// @ts-ignore: decorator\n@lazy let state = STATE_IDLE;\n\n// @ts-ignore: decorator\n@lazy let fromSpace = initLazy(changetype<Object>(memory.data(offsetof<Object>())));\n// @ts-ignore: decorator\n@lazy let toSpace = initLazy(changetype<Object>(memory.data(offsetof<Object>())));\n// @ts-ignore: decorator\n@lazy let pinSpace = initLazy(changetype<Object>(memory.data(offsetof<Object>())));\n// @ts-ignore: decorator\n@lazy let iter: Object = changetype<Object>(0); // unsafe initializion below\n\nfunction initLazy(space: Object): Object {\n space.nextWithColor = changetype<usize>(space);\n space.prev = space;\n return space;\n}\n\n/** Visit cookie indicating scanning of an object. */\n// @ts-ignore: decorator\n@inline const VISIT_SCAN = 0;\n\n// ╒═══════════════ Managed object layout (32-bit) ════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤\n// │ Memory manager block │\n// ╞═══════════════════════════════════════════════════════════╤═══╡\n// │ next │ C │ = nextWithColor\n// ├───────────────────────────────────────────────────────────┴───┤\n// │ prev │\n// ├───────────────────────────────────────────────────────────────┤\n// │ rtId │\n// ├───────────────────────────────────────────────────────────────┤\n// │ rtSize │\n// ╞>ptr═══════════════════════════════════════════════════════════╡\n// │ ... │\n// C: color\n\n/** Represents a managed object in memory, consisting of a header followed by the object's data. */\n@unmanaged class Object extends BLOCK {\n /** Pointer to the next object with color flags stored in the alignment bits. */\n nextWithColor: usize; // *u32\n /** Pointer to the previous object. */\n prev: Object; // *u32\n /** Runtime id. */\n rtId: u32;\n /** Runtime size. */\n rtSize: u32;\n\n /** Gets the pointer to the next object. */\n get next(): Object {\n return changetype<Object>(this.nextWithColor & ~COLOR_MASK);\n }\n\n /** Sets the pointer to the next object. */\n set next(obj: Object) {\n this.nextWithColor = changetype<usize>(obj) | (this.nextWithColor & COLOR_MASK);\n }\n\n /** Gets this object's color. */\n get color(): i32 {\n return i32(this.nextWithColor & COLOR_MASK);\n }\n\n /** Sets this object's color. */\n set color(color: i32) {\n this.nextWithColor = (this.nextWithColor & ~COLOR_MASK) | color;\n }\n\n /** Gets the size of this object in memory. */\n get size(): usize {\n return BLOCK_OVERHEAD + (this.mmInfo & ~3);\n }\n\n /** Tests if this object is pointerfree. */\n get isPointerfree(): bool {\n let rtId = this.rtId;\n // 0: Object, 1: ArrayBuffer, 2: String\n return rtId <= idof<string>() || (__typeinfo(rtId) & TypeinfoFlags.POINTERFREE) != 0;\n }\n\n /** Unlinks this object from its list. */\n unlink(): void {\n let next = this.next;\n if (next == null) {\n if (DEBUG) assert(this.prev == null && changetype<usize>(this) < __heap_base);\n return; // static data not yet linked\n }\n let prev = this.prev;\n if (DEBUG) assert(prev);\n next.prev = prev;\n prev.next = next;\n }\n\n /** Links this object to the specified list, with the given color. */\n linkTo(list: Object, withColor: i32): void {\n let prev = list.prev;\n this.nextWithColor = changetype<usize>(list) | withColor;\n this.prev = prev;\n prev.next = this;\n list.prev = this;\n }\n\n /** Marks this object as gray, that is reachable with unscanned children. */\n makeGray(): void {\n if (this == iter) iter = assert(this.prev);\n this.unlink();\n this.linkTo(toSpace, this.isPointerfree ? i32(!white) : gray);\n }\n}\n\n/** Visits all objects considered to be program roots. */\nfunction visitRoots(cookie: u32): void {\n __visit_globals(cookie);\n let pn = pinSpace;\n let iter = pn.next;\n while (iter != pn) {\n if (DEBUG) assert(iter.color == transparent);\n __visit_members(changetype<usize>(iter) + TOTAL_OVERHEAD, cookie);\n iter = iter.next;\n }\n}\n\n/** Visits all objects on the stack. */\nfunction visitStack(cookie: u32): void {\n let ptr = __stack_pointer;\n while (ptr < __heap_base) {\n __visit(load<usize>(ptr), cookie);\n ptr += sizeof<usize>();\n }\n}\n\n/** Performs a single step according to the current state. */\nfunction step(): usize {\n // Magic constants responsible for pause times. Obtained experimentally\n // using the compiler compiling itself. 2048 budget pro run by default.\n const MARKCOST = isDefined(ASC_GC_MARKCOST) ? ASC_GC_MARKCOST : 1;\n const SWEEPCOST = isDefined(ASC_GC_SWEEPCOST) ? ASC_GC_SWEEPCOST : 10;\n let obj: Object;\n switch (state) {\n case STATE_IDLE: {\n state = STATE_MARK;\n visitCount = 0;\n visitRoots(VISIT_SCAN);\n iter = toSpace;\n return visitCount * MARKCOST;\n }\n case STATE_MARK: {\n let black = i32(!white);\n obj = iter.next;\n while (obj != toSpace) {\n iter = obj;\n if (obj.color != black) { // skip already-blacks (pointerfree)\n obj.color = black;\n visitCount = 0;\n __visit_members(changetype<usize>(obj) + TOTAL_OVERHEAD, VISIT_SCAN);\n return visitCount * MARKCOST;\n }\n obj = obj.next;\n }\n visitCount = 0;\n visitRoots(VISIT_SCAN);\n obj = iter.next;\n if (obj == toSpace) {\n visitStack(VISIT_SCAN);\n obj = iter.next;\n while (obj != toSpace) {\n if (obj.color != black) {\n obj.color = black;\n __visit_members(changetype<usize>(obj) + TOTAL_OVERHEAD, VISIT_SCAN);\n }\n obj = obj.next;\n }\n let from = fromSpace;\n fromSpace = toSpace;\n toSpace = from;\n white = black;\n iter = from.next;\n state = STATE_SWEEP;\n }\n return visitCount * MARKCOST;\n }\n case STATE_SWEEP: {\n obj = iter;\n if (obj != toSpace) {\n iter = obj.next;\n if (DEBUG) assert(obj.color == i32(!white)); // old white\n free(obj);\n return SWEEPCOST;\n }\n toSpace.nextWithColor = changetype<usize>(toSpace);\n toSpace.prev = toSpace;\n state = STATE_IDLE;\n break;\n }\n }\n return 0;\n}\n\n/** Frees an object. */\nfunction free(obj: Object): void {\n if (changetype<usize>(obj) < __heap_base) {\n obj.nextWithColor = 0; // may become linked again\n obj.prev = changetype<Object>(0);\n } else {\n total -= obj.size;\n if (isDefined(__finalize)) {\n __finalize(changetype<usize>(obj) + TOTAL_OVERHEAD);\n }\n __free(changetype<usize>(obj) + BLOCK_OVERHEAD);\n }\n}\n\n// Garbage collector interface\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __new(size: usize, id: i32): usize {\n if (size >= OBJECT_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE);\n if (total >= threshold) interrupt();\n let obj = changetype<Object>(__alloc(OBJECT_OVERHEAD + size) - BLOCK_OVERHEAD);\n obj.rtId = id;\n obj.rtSize = <u32>size;\n obj.linkTo(fromSpace, white); // inits next/prev\n total += obj.size;\n let ptr = changetype<usize>(obj) + TOTAL_OVERHEAD;\n // may be visited before being fully initialized, so must fill\n memory.fill(ptr, 0, size);\n return ptr;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __renew(oldPtr: usize, size: usize): usize {\n let oldObj = changetype<Object>(oldPtr - TOTAL_OVERHEAD);\n // Update object size if its block is large enough\n if (size <= (oldObj.mmInfo & ~3) - OBJECT_OVERHEAD) {\n oldObj.rtSize = <u32>size;\n return oldPtr;\n }\n // If not the same object anymore, we have to move it move it due to the\n // shadow stack potentially still referencing the old object\n let newPtr = __new(size, oldObj.rtId);\n memory.copy(newPtr, oldPtr, min(size, oldObj.rtSize));\n return newPtr;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __link(parentPtr: usize, childPtr: usize, expectMultiple: bool): void {\n // Write barrier is unnecessary if non-incremental\n if (!childPtr) return;\n if (DEBUG) assert(parentPtr);\n let child = changetype<Object>(childPtr - TOTAL_OVERHEAD);\n if (child.color == white) {\n let parent = changetype<Object>(parentPtr - TOTAL_OVERHEAD);\n let parentColor = parent.color;\n if (parentColor == i32(!white)) {\n // Maintain the invariant that no black object may point to a white object.\n if (expectMultiple) {\n // Move the barrier \"backward\". Suitable for containers receiving multiple stores.\n // Avoids a barrier for subsequent objects stored into the same container.\n parent.makeGray();\n } else {\n // Move the barrier \"forward\". Suitable for objects receiving isolated stores.\n child.makeGray();\n }\n } else if (parentColor == transparent && state == STATE_MARK) {\n // Pinned objects are considered 'black' during the mark phase.\n child.makeGray();\n }\n }\n}\n\n// @ts-ignore: decorator\n@lazy let visitCount = 0;\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __visit(ptr: usize, cookie: i32): void {\n if (!ptr) return;\n let obj = changetype<Object>(ptr - TOTAL_OVERHEAD);\n if (RTRACE) if (!onvisit(obj)) return;\n if (obj.color == white) {\n obj.makeGray();\n ++visitCount;\n }\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __pin(ptr: usize): usize {\n if (ptr) {\n let obj = changetype<Object>(ptr - TOTAL_OVERHEAD);\n if (obj.color == transparent) {\n throw new Error(E_ALREADY_PINNED);\n }\n obj.unlink(); // from fromSpace\n obj.linkTo(pinSpace, transparent);\n }\n return ptr;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __unpin(ptr: usize): void {\n if (!ptr) return;\n let obj = changetype<Object>(ptr - TOTAL_OVERHEAD);\n if (obj.color != transparent) {\n throw new Error(E_NOT_PINNED);\n }\n if (state == STATE_MARK) {\n // We may be right at the point after marking roots for the second time and\n // entering the sweep phase, in which case the object would be missed if it\n // is not only pinned but also a root. Make sure it isn't missed.\n obj.makeGray();\n } else {\n obj.unlink();\n obj.linkTo(fromSpace, white);\n }\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __collect(): void {\n if (TRACE) trace(\"GC (full) at\", 1, total);\n if (state > STATE_IDLE) {\n // finish current cycle\n while (state != STATE_IDLE) step();\n }\n // perform a full cycle\n step();\n while (state != STATE_IDLE) step();\n threshold = <usize>(<u64>total * IDLEFACTOR / 100) + GRANULARITY;\n if (TRACE) trace(\"GC (full) done at cur/max\", 2, total, memory.size() << 16);\n if (RTRACE || PROFILE) oncollect(total);\n}\n\n// Garbage collector automation\n\n/** How often to interrupt. The default of 1024 means \"interrupt each 1024 bytes allocated\". */\n// @ts-ignore: decorator\n@inline const GRANULARITY: usize = isDefined(ASC_GC_GRANULARITY) ? ASC_GC_GRANULARITY : 1024;\n/** How long to interrupt. The default of 200% means \"run at double the speed of allocations\". */\n// @ts-ignore: decorator\n@inline const STEPFACTOR: usize = isDefined(ASC_GC_SWEEPFACTOR) ? ASC_GC_SWEEPFACTOR : 200;\n/** How long to idle. The default of 200% means \"wait for memory to double before kicking in again\". */\n// @ts-ignore: decorator\n@inline const IDLEFACTOR: usize = isDefined(ASC_GC_IDLEFACTOR) ? ASC_GC_IDLEFACTOR : 200;\n\n/** Threshold of memory used by objects to exceed before interrupting again. */\n// @ts-ignore: decorator\n@lazy let threshold: usize = ((<usize>memory.size() << 16) - __heap_base) >> 1;\n\n/** Performs a reasonable amount of incremental GC steps. */\nfunction interrupt(): void {\n if (PROFILE) oninterrupt(total);\n if (TRACE) trace(\"GC (auto) at\", 1, total);\n let budget: isize = GRANULARITY * STEPFACTOR / 100;\n do {\n budget -= step();\n if (state == STATE_IDLE) {\n if (TRACE) trace(\"└ GC (auto) done at cur/max\", 2, total, memory.size() << 16);\n threshold = <usize>(<u64>total * IDLEFACTOR / 100) + GRANULARITY;\n if (PROFILE) onyield(total);\n return;\n }\n } while (budget > 0);\n if (TRACE) trace(\"└ GC (auto) ongoing at\", 1, total);\n threshold = total + GRANULARITY * usize(total - threshold < GRANULARITY);\n if (PROFILE) onyield(total);\n}\n","/*MIT License\n\n© Copyright 2025 Adobe. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.*/\nexport function add(a: i32, b: i32): i32 {\n return a + b;\n}\n\nexport function addF32Arrays(aPtr: usize, bPtr: usize, length: u32): void {\n // now handle any remaining elements\n for (let i: u32 = 0 /*length & ~7*/; i < length; i++) {\n const aOffset = aPtr + (i << 2); // i * 4 (each Float32 is 4 bytes)\n const bOffset = bPtr + (i << 2);\n\n const va = f32.load(aOffset);\n const vb = f32.load(bOffset);\n\n f32.store(aOffset, va + vb);\n }\n}\n\nexport function addF32ArraysSimd4(aPtr: usize, bPtr: usize, length: u32): void {\n const stride = 4; // Process 4 f32 elements per SIMD operation\n let i: u32 = 0;\n const end = length - stride;\n\n // Handle SIMD operations for chunks of 4 elements\n for (; i < end; i += stride) {\n v128.store(aPtr, f32x4.add(v128.load(aPtr), v128.load(bPtr)));\n aPtr += stride * sizeof<f32>();\n bPtr += stride * sizeof<f32>();\n }\n\n // Handle remaining elements that aren't divisible by 4\n for (; i < length; i++) {\n store<f32>(aPtr, load<f32>(aPtr) + load<f32>(bPtr));\n aPtr += sizeof<f32>();\n bPtr += sizeof<f32>();\n }\n}\n\nexport function addF32ArraysSimd4Unrolled(aPtr: usize, bPtr: usize, length: u32): void {\n const stride = 4; // Process 4 f32 elements per SIMD operation\n const unrollFactor = 2; // Number of SIMD operations per loop iteration\n const totalStride = stride * unrollFactor; // Total elements processed per loop iteration\n let i: u32 = 0;\n const end = length - (length % totalStride);\n\n // Handle SIMD operations for chunks of totalStride elements\n for (; i < end; i += totalStride) {\n // First SIMD operation\n v128.store(aPtr, f32x4.add(v128.load(aPtr), v128.load(bPtr)));\n aPtr += stride * sizeof<f32>();\n bPtr += stride * sizeof<f32>();\n\n // Second SIMD operation\n v128.store(aPtr, f32x4.add(v128.load(aPtr), v128.load(bPtr)));\n aPtr += stride * sizeof<f32>();\n bPtr += stride * sizeof<f32>();\n }\n\n // Handle remaining elements that aren't divisible by totalStride\n for (; i < length; i++) {\n store<f32>(aPtr, load<f32>(aPtr) + load<f32>(bPtr));\n aPtr += sizeof<f32>();\n bPtr += sizeof<f32>();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["~lib/rt/common.ts","~lib/rt/tlsf.ts","~lib/shared/typeinfo.ts","~lib/rt/itcms.ts","assembly/index.ts"],"names":[],"mappings":"0HIES,EAAI,EAAJ,M,EAKkC,EAAJ,G,EACX,EAAK,EAAL,GAAR,GAAhB,EAGoB,EAAT,GAFK,EAAQ,EAAR,CAGL,GAEQ,CAAnB,GAP+C,E,GAAA,E,SAcrC,EAAS,EAAT,CAAZ,EAGA,EAAO,EAAI,EAAJ,C,EACM,EAA0B,EAAV,IAA2B,EAAV,IAA3B,GAAjB,IACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EAHc,EAAK,E,CAAL,E,IAOhB,EAAW,EAAJ,G,EACM,EAAgB,EAAV,GAA4B,EAAV,GAAlB,CAAjB,GACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EAHiB,E,GAAA,E,UAYP,EAAU,EAAS,EAAT,CAAV,CAAZ,EAGA,EAAO,EAAI,EAAJ,C,EAEM,EAA0B,EAAV,IAA2B,EAAV,IAA3B,GAAjB,IACA,EAAQ,E,CAAR,EAIqC,EAAV,IAH3B,EAAQ,E,CAAR,EAG4C,IAA3B,GAAjB,IACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EATc,EAAK,E,CAAL,E,IAahB,EAAW,EAAJ,G,EACM,EAAgB,EAAV,GAA4B,EAAV,GAAlB,CAAjB,GACA,EAAQ,E,CAAR,EACA,EAAQ,E,CAAR,EAHiB,E,GAAA,E","sourceRoot":"./index","sourcesContent":["// Alignment guarantees\n\n// @ts-ignore: decorator\n@inline export const AL_BITS: u32 = 4; // 16 bytes to fit up to v128\n// @ts-ignore: decorator\n@inline export const AL_SIZE: usize = 1 << <usize>AL_BITS;\n// @ts-ignore: decorator\n@inline export const AL_MASK: usize = AL_SIZE - 1;\n\n// Extra debugging\n\n// @ts-ignore: decorator\n@inline export const DEBUG = true;\n// @ts-ignore: decorator\n@inline export const TRACE = false;\n// @ts-ignore: decorator\n@inline export const RTRACE = isDefined(ASC_RTRACE);\n// @ts-ignore: decorator\n@inline export const PROFILE = isDefined(ASC_PROFILE);\n\n// Memory manager\n\n// ╒════════════ Memory manager block layout (32-bit) ═════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤\n// │ MM info │ -4\n// ╞>ptr═══════════════════════════════════════════════════════════╡\n// │ ... │\n@unmanaged export class BLOCK {\n /** Memory manager info. */\n mmInfo: usize;\n}\n\n/** Overhead of a memory manager block. */\n// @ts-ignore: decorator\n@inline export const BLOCK_OVERHEAD: usize = offsetof<BLOCK>();\n\n/** Maximum size of a memory manager block's payload. */\n// @ts-ignore: decorator\n@inline export const BLOCK_MAXSIZE: usize = (1 << 30) - BLOCK_OVERHEAD;\n\n// Garbage collector\n\n// ╒══════════ Garbage collector object layout (32-bit) ═══════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤\n// │ Memory manager block │ -20\n// ╞═══════════════════════════════════════════════════════════════╡\n// │ GC info │ -16\n// ├───────────────────────────────────────────────────────────────┤\n// │ GC info │ -12\n// ├───────────────────────────────────────────────────────────────┤\n// │ RT id │ -8\n// ├───────────────────────────────────────────────────────────────┤\n// │ RT size │ -4\n// ╞>ptr═══════════════════════════════════════════════════════════╡\n// │ ... │\n@unmanaged export class OBJECT extends BLOCK {\n /** Garbage collector info. */\n gcInfo: u32;\n /** Garbage collector info. */\n gcInfo2: u32;\n /** Runtime class id. */\n rtId: u32;\n /** Runtime object size. */\n rtSize: u32;\n}\n\n/** Overhead of a garbage collector object. Excludes memory manager block overhead. */\n// @ts-ignore: decorator\n@inline export const OBJECT_OVERHEAD: usize = (offsetof<OBJECT>() - BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK;\n\n/** Maximum size of a garbage collector object's payload. */\n// @ts-ignore: decorator\n@inline export const OBJECT_MAXSIZE: usize = BLOCK_MAXSIZE - OBJECT_OVERHEAD;\n\n/** Total of memory manager and garbage collector overhead. */\n// @ts-ignore: decorator\n@inline export const TOTAL_OVERHEAD: usize = BLOCK_OVERHEAD + OBJECT_OVERHEAD;\n","import { AL_BITS, AL_SIZE, AL_MASK, DEBUG, BLOCK, BLOCK_OVERHEAD, BLOCK_MAXSIZE } from \"./common\";\nimport { oninit, onalloc, onresize, onmove, onfree } from \"./rtrace\";\nimport { E_ALLOCATION_TOO_LARGE } from \"../util/error\";\n\n// === The TLSF (Two-Level Segregate Fit) memory allocator ===\n// see: http://www.gii.upv.es/tlsf/\n\n// - `ffs(x)` is equivalent to `ctz(x)` with x != 0\n// - `fls(x)` is equivalent to `sizeof(x) * 8 - clz(x) - 1`\n\n// ╒══════════════ Block size interpretation (32-bit) ═════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─╫─┴─┴─┴─┤\n// │ | FL │ SB = SL + AL │ ◄─ usize\n// └───────────────────────────────────────────────┴───────╨───────┘\n// FL: first level, SL: second level, AL: alignment, SB: small block\n\n// @ts-ignore: decorator\n@inline const SL_BITS: u32 = 4;\n// @ts-ignore: decorator\n@inline const SL_SIZE: u32 = 1 << SL_BITS;\n\n// @ts-ignore: decorator\n@inline const SB_BITS: u32 = SL_BITS + AL_BITS;\n// @ts-ignore: decorator\n@inline const SB_SIZE: u32 = 1 << SB_BITS;\n\n// @ts-ignore: decorator\n@inline const FL_BITS: u32 = 31 - SB_BITS;\n\n// [00]: < 256B (SB) [12]: < 1M\n// [01]: < 512B [13]: < 2M\n// [02]: < 1K [14]: < 4M\n// [03]: < 2K [15]: < 8M\n// [04]: < 4K [16]: < 16M\n// [05]: < 8K [17]: < 32M\n// [06]: < 16K [18]: < 64M\n// [07]: < 32K [19]: < 128M\n// [08]: < 64K [20]: < 256M\n// [09]: < 128K [21]: < 512M\n// [10]: < 256K [22]: <= 1G - OVERHEAD\n// [11]: < 512K\n// VMs limit to 2GB total (currently), making one 1G block max (or three 512M etc.) due to block overhead\n\n// Tags stored in otherwise unused alignment bits\n\n// @ts-ignore: decorator\n@inline const FREE: usize = 1 << 0;\n// @ts-ignore: decorator\n@inline const LEFTFREE: usize = 1 << 1;\n// @ts-ignore: decorator\n@inline const TAGS_MASK: usize = FREE | LEFTFREE; // <= AL_MASK\n\n// ╒════════════════════ Block layout (32-bit) ════════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┼─┤ ┐\n// │ size │L│F│ ◄─┐ info overhead\n// ╞>ptr═══════════════════════════════════════════════════════╧═╧═╡ │ ┘\n// │ if free: ◄ prev │ ◄─┤ usize\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ if free: next ► │ ◄─┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... │ │ >= 0\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ if free: back ▲ │ ◄─┘\n// └───────────────────────────────────────────────────────────────┘ >= MIN SIZE\n// F: FREE, L: LEFTFREE\n@unmanaged export class Block extends BLOCK {\n\n /** Previous free block, if any. Only valid if free, otherwise part of payload. */\n prev: Block | null;\n /** Next free block, if any. Only valid if free, otherwise part of payload. */\n next: Block | null;\n\n // If the block is free, there is a 'back'reference at its end pointing at its start.\n}\n\n// Block constants. A block must have a minimum size of three pointers so it can hold `prev`,\n// `next` and `back` if free.\n\n// @ts-ignore: decorator\n@inline const BLOCK_MINSIZE: usize = ((3 * sizeof<usize>() + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD; // prev + next + back\n// @ts-ignore: decorator\n// @inline const BLOCK_MAXSIZE: usize = 1 << (FL_BITS + SB_BITS - 1); // exclusive, lives in common.ts\n\n/** Gets the left block of a block. Only valid if the left block is free. */\n// @ts-ignore: decorator\n@inline function GETFREELEFT(block: Block): Block {\n return load<Block>(changetype<usize>(block) - sizeof<usize>());\n}\n\n/** Gets the right block of a block by advancing to the right by its size. */\n// @ts-ignore: decorator\n@inline function GETRIGHT(block: Block): Block {\n return changetype<Block>(changetype<usize>(block) + BLOCK_OVERHEAD + (block.mmInfo & ~TAGS_MASK));\n}\n\n// ╒═════════════════════ Root layout (32-bit) ════════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ┐\n// │ 0 | flMap S│ ◄────┐\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ slMap[0] S │ ◄─┐ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[1] │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ u32 │\n// │ slMap[22] │ ◄─┘ │\n// ╞═══════════════════════════════════════════════════════════════╡ usize\n// │ head[0] │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ head[367] │ ◄────┤\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ tail │ ◄────┘\n// └───────────────────────────────────────────────────────────────┘ SIZE ┘\n// S: Small blocks map\n@unmanaged class Root {\n /** First level bitmap. */\n flMap: usize;\n}\n\n// Root constants. Where stuff is stored inside of the root structure.\n\n// @ts-ignore: decorator\n@inline const SL_START: usize = sizeof<usize>();\n// @ts-ignore: decorator\n@inline const SL_END: usize = SL_START + (FL_BITS << alignof<u32>());\n// @ts-ignore: decorator\n@inline const HL_START: usize = (SL_END + AL_MASK) & ~AL_MASK;\n// @ts-ignore: decorator\n@inline const HL_END: usize = HL_START + FL_BITS * SL_SIZE * sizeof<usize>();\n// @ts-ignore: decorator\n@inline const ROOT_SIZE: usize = HL_END + sizeof<usize>();\n\n// @ts-ignore: decorator\n@lazy export let ROOT: Root = changetype<Root>(0); // unsafe initializion below\n\n/** Gets the second level map of the specified first level. */\n// @ts-ignore: decorator\n@inline function GETSL(root: Root, fl: usize): u32 {\n return load<u32>(\n changetype<usize>(root) + (fl << alignof<u32>()),\n SL_START\n );\n}\n\n/** Sets the second level map of the specified first level. */\n// @ts-ignore: decorator\n@inline function SETSL(root: Root, fl: usize, slMap: u32): void {\n store<u32>(\n changetype<usize>(root) + (fl << alignof<u32>()),\n slMap,\n SL_START\n );\n}\n\n/** Gets the head of the free list for the specified combination of first and second level. */\n// @ts-ignore: decorator\n@inline function GETHEAD(root: Root, fl: usize, sl: u32): Block | null {\n return load<Block>(\n changetype<usize>(root) + (((fl << SL_BITS) + <usize>sl) << alignof<usize>()),\n HL_START\n );\n}\n\n/** Sets the head of the free list for the specified combination of first and second level. */\n// @ts-ignore: decorator\n@inline function SETHEAD(root: Root, fl: usize, sl: u32, head: Block | null): void {\n store<Block | null>(\n changetype<usize>(root) + (((fl << SL_BITS) + <usize>sl) << alignof<usize>()),\n head,\n HL_START\n );\n}\n\n/** Gets the tail block.. */\n// @ts-ignore: decorator\n@inline function GETTAIL(root: Root): Block {\n return load<Block>(\n changetype<usize>(root),\n HL_END\n );\n}\n\n/** Sets the tail block. */\n// @ts-ignore: decorator\n@inline function SETTAIL(root: Root, tail: Block): void {\n store<Block>(\n changetype<usize>(root),\n tail,\n HL_END\n );\n}\n\n/** Inserts a previously used block back into the free list. */\nfunction insertBlock(root: Root, block: Block): void {\n if (DEBUG) assert(block); // cannot be null\n let blockInfo = block.mmInfo;\n if (DEBUG) assert(blockInfo & FREE); // must be free\n\n let right = GETRIGHT(block);\n let rightInfo = right.mmInfo;\n\n // merge with right block if also free\n if (rightInfo & FREE) {\n removeBlock(root, right);\n block.mmInfo = blockInfo = blockInfo + BLOCK_OVERHEAD + (rightInfo & ~TAGS_MASK); // keep block tags\n right = GETRIGHT(block);\n rightInfo = right.mmInfo;\n // 'back' is set below\n }\n\n // merge with left block if also free\n if (blockInfo & LEFTFREE) {\n let left = GETFREELEFT(block);\n let leftInfo = left.mmInfo;\n if (DEBUG) assert(leftInfo & FREE); // must be free according to right tags\n removeBlock(root, left);\n block = left;\n block.mmInfo = blockInfo = leftInfo + BLOCK_OVERHEAD + (blockInfo & ~TAGS_MASK); // keep left tags\n // 'back' is set below\n }\n\n right.mmInfo = rightInfo | LEFTFREE;\n // reference to right is no longer used now, hence rightInfo is not synced\n\n // we now know the size of the block\n let size = blockInfo & ~TAGS_MASK;\n if (DEBUG) assert(size >= BLOCK_MINSIZE); // must be a valid size\n if (DEBUG) assert(changetype<usize>(block) + BLOCK_OVERHEAD + size == changetype<usize>(right)); // must match\n\n // set 'back' to itself at the end of block\n store<Block>(changetype<usize>(right) - sizeof<usize>(), block);\n\n // mapping_insert\n let fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = <u32>(size >> AL_BITS);\n } else {\n const inv: usize = sizeof<usize>() * 8 - 1;\n let boundedSize = min(size, BLOCK_MAXSIZE);\n fl = inv - clz<usize>(boundedSize);\n sl = <u32>((boundedSize >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range\n\n // perform insertion\n let head = GETHEAD(root, fl, sl);\n block.prev = null;\n block.next = head;\n if (head) head.prev = block;\n SETHEAD(root, fl, sl, block);\n\n // update first and second level maps\n root.flMap |= (1 << fl);\n SETSL(root, fl, GETSL(root, fl) | (1 << sl));\n}\n\n/** Removes a free block from internal lists. */\nfunction removeBlock(root: Root, block: Block): void {\n let blockInfo = block.mmInfo;\n if (DEBUG) assert(blockInfo & FREE); // must be free\n let size = blockInfo & ~TAGS_MASK;\n if (DEBUG) assert(size >= BLOCK_MINSIZE); // must be valid\n\n // mapping_insert\n let fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = <u32>(size >> AL_BITS);\n } else {\n const inv: usize = sizeof<usize>() * 8 - 1;\n let boundedSize = min(size, BLOCK_MAXSIZE);\n fl = inv - clz<usize>(boundedSize);\n sl = <u32>((boundedSize >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range\n\n // link previous and next free block\n let prev = block.prev;\n let next = block.next;\n if (prev) prev.next = next;\n if (next) next.prev = prev;\n\n // update head if we are removing it\n if (block == GETHEAD(root, fl, sl)) {\n SETHEAD(root, fl, sl, next);\n\n // clear second level map if head is empty now\n if (!next) {\n let slMap = GETSL(root, fl);\n SETSL(root, fl, slMap &= ~(1 << sl));\n\n // clear first level map if second level is empty now\n if (!slMap) root.flMap &= ~(1 << fl);\n }\n }\n // note: does not alter left/back because it is likely that splitting\n // is performed afterwards, invalidating those changes. so, the caller\n // must perform those updates.\n}\n\nfunction roundSize(size: usize): usize {\n const halfMaxSize = BLOCK_MAXSIZE >> 1; // don't round last fl\n const inv: usize = sizeof<usize>() * 8 - 1;\n const invRound = inv - SL_BITS;\n return size < halfMaxSize\n ? size + (1 << (invRound - clz<usize>(size))) - 1\n : size;\n}\n\n/** Searches for a free block of at least the specified size. */\nfunction searchBlock(root: Root, size: usize): Block | null {\n // size was already asserted by caller\n\n // mapping_search\n let fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = <u32>(size >> AL_BITS);\n } else {\n const requestSize = roundSize(size);\n fl = sizeof<usize>() * 8 - 1 - clz<usize>(requestSize);\n sl = <u32>((requestSize >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range\n\n // search second level\n let slMap = GETSL(root, fl) & (~0 << sl);\n let head: Block | null = null;\n if (!slMap) {\n // search next larger first level\n let flMap = root.flMap & (~0 << (fl + 1));\n if (!flMap) {\n head = null;\n } else {\n fl = ctz<usize>(flMap);\n slMap = GETSL(root, fl);\n if (DEBUG) assert(slMap); // can't be zero if fl points here\n head = GETHEAD(root, fl, ctz<u32>(slMap));\n }\n } else {\n head = GETHEAD(root, fl, ctz<u32>(slMap));\n }\n return head;\n}\n\n/** Prepares the specified block before (re-)use, possibly splitting it. */\nfunction prepareBlock(root: Root, block: Block, size: usize): void {\n // size was already asserted by caller\n\n let blockInfo = block.mmInfo;\n if (DEBUG) assert(!((size + BLOCK_OVERHEAD) & AL_MASK)); // size must be aligned so the new block is\n\n // split if the block can hold another MINSIZE block incl. overhead\n let remaining = (blockInfo & ~TAGS_MASK) - size;\n if (remaining >= BLOCK_OVERHEAD + BLOCK_MINSIZE) {\n block.mmInfo = size | (blockInfo & LEFTFREE); // also discards FREE\n\n let spare = changetype<Block>(changetype<usize>(block) + BLOCK_OVERHEAD + size);\n spare.mmInfo = (remaining - BLOCK_OVERHEAD) | FREE; // not LEFTFREE\n insertBlock(root, spare); // also sets 'back'\n\n // otherwise tag block as no longer FREE and right as no longer LEFTFREE\n } else {\n block.mmInfo = blockInfo & ~FREE;\n GETRIGHT(block).mmInfo &= ~LEFTFREE;\n }\n}\n\n/** Adds more memory to the pool. */\nfunction addMemory(root: Root, start: usize, endU64: u64): bool {\n let end = <usize>endU64;\n if (DEBUG) assert(<u64>start <= endU64); // must be valid\n start = ((start + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD;\n end &= ~AL_MASK;\n\n let tail = GETTAIL(root);\n let tailInfo: usize = 0;\n if (tail) { // more memory\n if (DEBUG) assert(start >= changetype<usize>(tail) + BLOCK_OVERHEAD);\n\n // merge with current tail if adjacent\n const offsetToTail = AL_SIZE;\n if (start - offsetToTail == changetype<usize>(tail)) {\n start -= offsetToTail;\n tailInfo = tail.mmInfo;\n } else {\n // We don't do this, but a user might `memory.grow` manually\n // leading to non-adjacent pages managed by TLSF.\n }\n\n } else if (DEBUG) { // first memory\n assert(start >= changetype<usize>(root) + ROOT_SIZE); // starts after root\n }\n\n // check if size is large enough for a free block and the tail block\n let size = end - start;\n if (size < BLOCK_OVERHEAD + BLOCK_MINSIZE + BLOCK_OVERHEAD) {\n return false;\n }\n\n // left size is total minus its own and the zero-length tail's header\n let leftSize = size - 2 * BLOCK_OVERHEAD;\n let left = changetype<Block>(start);\n left.mmInfo = leftSize | FREE | (tailInfo & LEFTFREE);\n left.prev = null;\n left.next = null;\n\n // tail is a zero-length used block\n tail = changetype<Block>(start + BLOCK_OVERHEAD + leftSize);\n tail.mmInfo = 0 | LEFTFREE;\n SETTAIL(root, tail);\n\n insertBlock(root, left); // also merges with free left before tail / sets 'back'\n\n return true;\n}\n\n/** Grows memory to fit at least another block of the specified size. */\nfunction growMemory(root: Root, size: usize): void {\n if (ASC_LOW_MEMORY_LIMIT) {\n unreachable();\n return;\n }\n // Here, both rounding performed in searchBlock ...\n if (size >= SB_SIZE) {\n size = roundSize(size);\n }\n // and additional BLOCK_OVERHEAD must be taken into account. If we are going\n // to merge with the tail block, that's one time, otherwise it's two times.\n let pagesBefore = memory.size();\n size += BLOCK_OVERHEAD << usize((<usize>pagesBefore << 16) - BLOCK_OVERHEAD != changetype<usize>(GETTAIL(root)));\n let pagesNeeded = <i32>(((size + 0xffff) & ~0xffff) >>> 16);\n let pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (memory.grow(pagesWanted) < 0) {\n if (memory.grow(pagesNeeded) < 0) unreachable();\n }\n let pagesAfter = memory.size();\n addMemory(root, <usize>pagesBefore << 16, <u64>pagesAfter << 16);\n}\n\n/** Computes the size (excl. header) of a block. */\nfunction computeSize(size: usize): usize {\n // Size must be large enough and aligned minus preceeding overhead\n return size <= BLOCK_MINSIZE\n ? BLOCK_MINSIZE\n : ((size + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD;\n}\n\n/** Prepares and checks an allocation size. */\nfunction prepareSize(size: usize): usize {\n if (size > BLOCK_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE);\n return computeSize(size);\n}\n\n/** Initializes the root structure. */\nfunction initialize(): void {\n if (isDefined(ASC_RTRACE)) oninit(__heap_base);\n let rootOffset = (__heap_base + AL_MASK) & ~AL_MASK;\n let pagesBefore = memory.size();\n let pagesNeeded = <i32>((((rootOffset + ROOT_SIZE) + 0xffff) & ~0xffff) >>> 16);\n if (pagesNeeded > pagesBefore && memory.grow(pagesNeeded - pagesBefore) < 0) unreachable();\n let root = changetype<Root>(rootOffset);\n root.flMap = 0;\n SETTAIL(root, changetype<Block>(0));\n for (let fl: usize = 0; fl < FL_BITS; ++fl) {\n SETSL(root, fl, 0);\n for (let sl: u32 = 0; sl < SL_SIZE; ++sl) {\n SETHEAD(root, fl, sl, null);\n }\n }\n let memStart = rootOffset + ROOT_SIZE;\n if (ASC_LOW_MEMORY_LIMIT) {\n const memEnd = <u64>ASC_LOW_MEMORY_LIMIT & ~AL_MASK;\n if (memStart <= memEnd) addMemory(root, memStart, memEnd);\n else unreachable(); // low memory limit already exceeded\n } else {\n addMemory(root, memStart, <u64>memory.size() << 16);\n }\n ROOT = root;\n}\n\n/** Allocates a block of the specified size. */\nexport function allocateBlock(root: Root, size: usize): Block {\n let payloadSize = prepareSize(size);\n let block = searchBlock(root, payloadSize);\n if (!block) {\n growMemory(root, payloadSize);\n block = changetype<Block>(searchBlock(root, payloadSize));\n if (DEBUG) assert(block); // must be found now\n }\n if (DEBUG) assert((block.mmInfo & ~TAGS_MASK) >= payloadSize); // must fit\n removeBlock(root, block);\n prepareBlock(root, block, payloadSize);\n if (isDefined(ASC_RTRACE)) onalloc(block);\n return block;\n}\n\n/** Reallocates a block to the specified size. */\nexport function reallocateBlock(root: Root, block: Block, size: usize): Block {\n let payloadSize = prepareSize(size);\n let blockInfo = block.mmInfo;\n let blockSize = blockInfo & ~TAGS_MASK;\n\n // possibly split and update runtime size if it still fits\n if (payloadSize <= blockSize) {\n prepareBlock(root, block, payloadSize);\n if (isDefined(ASC_RTRACE)) {\n if (payloadSize != blockSize) onresize(block, BLOCK_OVERHEAD + blockSize);\n }\n return block;\n }\n\n // merge with right free block if merger is large enough\n let right = GETRIGHT(block);\n let rightInfo = right.mmInfo;\n if (rightInfo & FREE) {\n let mergeSize = blockSize + BLOCK_OVERHEAD + (rightInfo & ~TAGS_MASK);\n if (mergeSize >= payloadSize) {\n removeBlock(root, right);\n block.mmInfo = (blockInfo & TAGS_MASK) | mergeSize;\n prepareBlock(root, block, payloadSize);\n if (isDefined(ASC_RTRACE)) onresize(block, BLOCK_OVERHEAD + blockSize);\n return block;\n }\n }\n\n // otherwise move the block\n return moveBlock(root, block, size);\n}\n\n/** Moves a block to a new one of the specified size. */\nfunction moveBlock(root: Root, block: Block, newSize: usize): Block {\n let newBlock = allocateBlock(root, newSize);\n memory.copy(changetype<usize>(newBlock) + BLOCK_OVERHEAD, changetype<usize>(block) + BLOCK_OVERHEAD, block.mmInfo & ~TAGS_MASK);\n if (changetype<usize>(block) >= __heap_base) {\n if (isDefined(ASC_RTRACE)) onmove(block, newBlock);\n freeBlock(root, block);\n }\n return newBlock;\n}\n\n/** Frees a block. */\nexport function freeBlock(root: Root, block: Block): void {\n if (isDefined(ASC_RTRACE)) onfree(block);\n block.mmInfo = block.mmInfo | FREE;\n insertBlock(root, block);\n}\n\n/** Checks that a used block is valid to be freed or reallocated. */\nfunction checkUsedBlock(ptr: usize): Block {\n let block = changetype<Block>(ptr - BLOCK_OVERHEAD);\n assert(\n ptr != 0 && !(ptr & AL_MASK) && // must exist and be aligned\n !(block.mmInfo & FREE) // must be used\n );\n return block;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __alloc(size: usize): usize {\n if (!ROOT) initialize();\n return changetype<usize>(allocateBlock(ROOT, size)) + BLOCK_OVERHEAD;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __realloc(ptr: usize, size: usize): usize {\n if (!ROOT) initialize();\n return (ptr < __heap_base\n ? changetype<usize>(moveBlock(ROOT, checkUsedBlock(ptr), size))\n : changetype<usize>(reallocateBlock(ROOT, checkUsedBlock(ptr), size))\n ) + BLOCK_OVERHEAD;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __free(ptr: usize): void {\n if (ptr < __heap_base) return;\n if (!ROOT) initialize();\n freeBlock(ROOT, checkUsedBlock(ptr));\n}\n","// This file is shared with the compiler and must remain portable\n\n// ╒═══════════════════ Typeinfo interpretation ═══════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ◄─ __rtti_base\n// │ count │\n// ╞═══════════════════════════════════════════════════════════════╡ ┐\n// │ Typeinfo#flags [id=0] │ id < count\n// ├───────────────────────────────────────────────────────────────┤\n// │ ... │\n\n/** Runtime type information data structure. */\n@unmanaged\nexport class Typeinfo {\n /** Flags describing the shape of this class type. */\n flags: TypeinfoFlags = TypeinfoFlags.NONE;\n}\n\n/** Runtime type information flags. */\nexport const enum TypeinfoFlags {\n /** No specific flags. */\n NONE = 0,\n /** Type is an `ArrayBufferView`. */\n ARRAYBUFFERVIEW = 1 << 0,\n /** Type is an `Array`. */\n ARRAY = 1 << 1,\n /** Type is a `StaticArray`. */\n STATICARRAY = 1 << 2,\n /** Type is a `Set`. */\n SET = 1 << 3,\n /** Type is a `Map`. */\n MAP = 1 << 4,\n /** Type has no outgoing pointers. */\n POINTERFREE = 1 << 5,\n /** Value alignment of 1 byte. */\n VALUE_ALIGN_0 = 1 << 6,\n /** Value alignment of 2 bytes. */\n VALUE_ALIGN_1 = 1 << 7,\n /** Value alignment of 4 bytes. */\n VALUE_ALIGN_2 = 1 << 8,\n /** Value alignment of 8 bytes. */\n VALUE_ALIGN_3 = 1 << 9,\n /** Value alignment of 16 bytes. */\n VALUE_ALIGN_4 = 1 << 10,\n /** Value is a signed type. */\n VALUE_SIGNED = 1 << 11,\n /** Value is a float type. */\n VALUE_FLOAT = 1 << 12,\n /** Value type is nullable. */\n VALUE_NULLABLE = 1 << 13,\n /** Value type is managed. */\n VALUE_MANAGED = 1 << 14,\n /** Key alignment of 1 byte. */\n KEY_ALIGN_0 = 1 << 15,\n /** Key alignment of 2 bytes. */\n KEY_ALIGN_1 = 1 << 16,\n /** Key alignment of 4 bytes. */\n KEY_ALIGN_2 = 1 << 17,\n /** Key alignment of 8 bytes. */\n KEY_ALIGN_3 = 1 << 18,\n /** Key alignment of 16 bytes. */\n KEY_ALIGN_4 = 1 << 19,\n /** Key is a signed type. */\n KEY_SIGNED = 1 << 20,\n /** Key is a float type. */\n KEY_FLOAT = 1 << 21,\n /** Key type is nullable. */\n KEY_NULLABLE = 1 << 22,\n /** Key type is managed. */\n KEY_MANAGED = 1 << 23\n}\n","import { BLOCK, BLOCK_OVERHEAD, OBJECT_OVERHEAD, OBJECT_MAXSIZE, TOTAL_OVERHEAD, DEBUG, TRACE, RTRACE, PROFILE } from \"./common\";\nimport { onvisit, oncollect, oninterrupt, onyield } from \"./rtrace\";\nimport { TypeinfoFlags } from \"../shared/typeinfo\";\nimport { E_ALLOCATION_TOO_LARGE, E_ALREADY_PINNED, E_NOT_PINNED } from \"../util/error\";\n\n// === ITCMS: An incremental Tri-Color Mark & Sweep garbage collector ===\n// Adapted from Bach Le's μgc, see: https://github.com/bullno1/ugc\n\n// ╒═════════════╤══════════════ Colors ═══════════════════════════╕\n// │ Color │ Meaning │\n// ├─────────────┼─────────────────────────────────────────────────┤\n// │ WHITE* │ Unprocessed │\n// │ BLACK* │ Processed │\n// │ GRAY │ Processed with unprocessed children │\n// │ TRANSPARENT │ Manually pinned (always reachable) │\n// └─────────────┴─────────────────────────────────────────────────┘\n// * flipped between cycles\n\n// @ts-ignore: decorator\n@lazy let white = 0;\n// @ts-ignore: decorator\n@inline const gray = 2;\n// @ts-ignore: decorator\n@inline const transparent = 3;\n// @ts-ignore: decorator\n@inline const COLOR_MASK = 3;\n\n/** Size in memory of all objects currently managed by the GC. */\n// @ts-ignore: decorator\n@lazy let total: usize = 0;\n\n/** Currently transitioning from SWEEP to MARK state. */\n// @ts-ignore: decorator\n@inline const STATE_IDLE = 0;\n/** Currently marking reachable objects. */\n// @ts-ignore: decorator\n@inline const STATE_MARK = 1;\n/** Currently sweeping unreachable objects. */\n// @ts-ignore: decorator\n@inline const STATE_SWEEP = 2;\n/** Current collector state. */\n// @ts-ignore: decorator\n@lazy let state = STATE_IDLE;\n\n// @ts-ignore: decorator\n@lazy let fromSpace = initLazy(changetype<Object>(memory.data(offsetof<Object>())));\n// @ts-ignore: decorator\n@lazy let toSpace = initLazy(changetype<Object>(memory.data(offsetof<Object>())));\n// @ts-ignore: decorator\n@lazy let pinSpace = initLazy(changetype<Object>(memory.data(offsetof<Object>())));\n// @ts-ignore: decorator\n@lazy let iter: Object = changetype<Object>(0); // unsafe initializion below\n\nfunction initLazy(space: Object): Object {\n space.nextWithColor = changetype<usize>(space);\n space.prev = space;\n return space;\n}\n\n/** Visit cookie indicating scanning of an object. */\n// @ts-ignore: decorator\n@inline const VISIT_SCAN = 0;\n\n// ╒═══════════════ Managed object layout (32-bit) ════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤\n// │ Memory manager block │\n// ╞═══════════════════════════════════════════════════════════╤═══╡\n// │ next │ C │ = nextWithColor\n// ├───────────────────────────────────────────────────────────┴───┤\n// │ prev │\n// ├───────────────────────────────────────────────────────────────┤\n// │ rtId │\n// ├───────────────────────────────────────────────────────────────┤\n// │ rtSize │\n// ╞>ptr═══════════════════════════════════════════════════════════╡\n// │ ... │\n// C: color\n\n/** Represents a managed object in memory, consisting of a header followed by the object's data. */\n@unmanaged class Object extends BLOCK {\n /** Pointer to the next object with color flags stored in the alignment bits. */\n nextWithColor: usize; // *u32\n /** Pointer to the previous object. */\n prev: Object; // *u32\n /** Runtime id. */\n rtId: u32;\n /** Runtime size. */\n rtSize: u32;\n\n /** Gets the pointer to the next object. */\n get next(): Object {\n return changetype<Object>(this.nextWithColor & ~COLOR_MASK);\n }\n\n /** Sets the pointer to the next object. */\n set next(obj: Object) {\n this.nextWithColor = changetype<usize>(obj) | (this.nextWithColor & COLOR_MASK);\n }\n\n /** Gets this object's color. */\n get color(): i32 {\n return i32(this.nextWithColor & COLOR_MASK);\n }\n\n /** Sets this object's color. */\n set color(color: i32) {\n this.nextWithColor = (this.nextWithColor & ~COLOR_MASK) | color;\n }\n\n /** Gets the size of this object in memory. */\n get size(): usize {\n return BLOCK_OVERHEAD + (this.mmInfo & ~3);\n }\n\n /** Tests if this object is pointerfree. */\n get isPointerfree(): bool {\n let rtId = this.rtId;\n // 0: Object, 1: ArrayBuffer, 2: String\n return rtId <= idof<string>() || (__typeinfo(rtId) & TypeinfoFlags.POINTERFREE) != 0;\n }\n\n /** Unlinks this object from its list. */\n unlink(): void {\n let next = this.next;\n if (next == null) {\n if (DEBUG) assert(this.prev == null && changetype<usize>(this) < __heap_base);\n return; // static data not yet linked\n }\n let prev = this.prev;\n if (DEBUG) assert(prev);\n next.prev = prev;\n prev.next = next;\n }\n\n /** Links this object to the specified list, with the given color. */\n linkTo(list: Object, withColor: i32): void {\n let prev = list.prev;\n this.nextWithColor = changetype<usize>(list) | withColor;\n this.prev = prev;\n prev.next = this;\n list.prev = this;\n }\n\n /** Marks this object as gray, that is reachable with unscanned children. */\n makeGray(): void {\n if (this == iter) iter = assert(this.prev);\n this.unlink();\n this.linkTo(toSpace, this.isPointerfree ? i32(!white) : gray);\n }\n}\n\n/** Visits all objects considered to be program roots. */\nfunction visitRoots(cookie: u32): void {\n __visit_globals(cookie);\n let pn = pinSpace;\n let iter = pn.next;\n while (iter != pn) {\n if (DEBUG) assert(iter.color == transparent);\n __visit_members(changetype<usize>(iter) + TOTAL_OVERHEAD, cookie);\n iter = iter.next;\n }\n}\n\n/** Visits all objects on the stack. */\nfunction visitStack(cookie: u32): void {\n let ptr = __stack_pointer;\n while (ptr < __heap_base) {\n __visit(load<usize>(ptr), cookie);\n ptr += sizeof<usize>();\n }\n}\n\n/** Performs a single step according to the current state. */\nfunction step(): usize {\n // Magic constants responsible for pause times. Obtained experimentally\n // using the compiler compiling itself. 2048 budget pro run by default.\n const MARKCOST = isDefined(ASC_GC_MARKCOST) ? ASC_GC_MARKCOST : 1;\n const SWEEPCOST = isDefined(ASC_GC_SWEEPCOST) ? ASC_GC_SWEEPCOST : 10;\n let obj: Object;\n switch (state) {\n case STATE_IDLE: {\n state = STATE_MARK;\n visitCount = 0;\n visitRoots(VISIT_SCAN);\n iter = toSpace;\n return visitCount * MARKCOST;\n }\n case STATE_MARK: {\n let black = i32(!white);\n obj = iter.next;\n while (obj != toSpace) {\n iter = obj;\n if (obj.color != black) { // skip already-blacks (pointerfree)\n obj.color = black;\n visitCount = 0;\n __visit_members(changetype<usize>(obj) + TOTAL_OVERHEAD, VISIT_SCAN);\n return visitCount * MARKCOST;\n }\n obj = obj.next;\n }\n visitCount = 0;\n visitRoots(VISIT_SCAN);\n obj = iter.next;\n if (obj == toSpace) {\n visitStack(VISIT_SCAN);\n obj = iter.next;\n while (obj != toSpace) {\n if (obj.color != black) {\n obj.color = black;\n __visit_members(changetype<usize>(obj) + TOTAL_OVERHEAD, VISIT_SCAN);\n }\n obj = obj.next;\n }\n let from = fromSpace;\n fromSpace = toSpace;\n toSpace = from;\n white = black;\n iter = from.next;\n state = STATE_SWEEP;\n }\n return visitCount * MARKCOST;\n }\n case STATE_SWEEP: {\n obj = iter;\n if (obj != toSpace) {\n iter = obj.next;\n if (DEBUG) assert(obj.color == i32(!white)); // old white\n free(obj);\n return SWEEPCOST;\n }\n toSpace.nextWithColor = changetype<usize>(toSpace);\n toSpace.prev = toSpace;\n state = STATE_IDLE;\n break;\n }\n }\n return 0;\n}\n\n/** Frees an object. */\nfunction free(obj: Object): void {\n if (changetype<usize>(obj) < __heap_base) {\n obj.nextWithColor = 0; // may become linked again\n obj.prev = changetype<Object>(0);\n } else {\n total -= obj.size;\n if (isDefined(__finalize)) {\n __finalize(changetype<usize>(obj) + TOTAL_OVERHEAD);\n }\n __free(changetype<usize>(obj) + BLOCK_OVERHEAD);\n }\n}\n\n// Garbage collector interface\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __new(size: usize, id: i32): usize {\n if (size >= OBJECT_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE);\n if (total >= threshold) interrupt();\n let obj = changetype<Object>(__alloc(OBJECT_OVERHEAD + size) - BLOCK_OVERHEAD);\n obj.rtId = id;\n obj.rtSize = <u32>size;\n obj.linkTo(fromSpace, white); // inits next/prev\n total += obj.size;\n let ptr = changetype<usize>(obj) + TOTAL_OVERHEAD;\n // may be visited before being fully initialized, so must fill\n memory.fill(ptr, 0, size);\n return ptr;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __renew(oldPtr: usize, size: usize): usize {\n let oldObj = changetype<Object>(oldPtr - TOTAL_OVERHEAD);\n // Update object size if its block is large enough\n if (size <= (oldObj.mmInfo & ~3) - OBJECT_OVERHEAD) {\n oldObj.rtSize = <u32>size;\n return oldPtr;\n }\n // If not the same object anymore, we have to move it move it due to the\n // shadow stack potentially still referencing the old object\n let newPtr = __new(size, oldObj.rtId);\n memory.copy(newPtr, oldPtr, min(size, oldObj.rtSize));\n return newPtr;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __link(parentPtr: usize, childPtr: usize, expectMultiple: bool): void {\n // Write barrier is unnecessary if non-incremental\n if (!childPtr) return;\n if (DEBUG) assert(parentPtr);\n let child = changetype<Object>(childPtr - TOTAL_OVERHEAD);\n if (child.color == white) {\n let parent = changetype<Object>(parentPtr - TOTAL_OVERHEAD);\n let parentColor = parent.color;\n if (parentColor == i32(!white)) {\n // Maintain the invariant that no black object may point to a white object.\n if (expectMultiple) {\n // Move the barrier \"backward\". Suitable for containers receiving multiple stores.\n // Avoids a barrier for subsequent objects stored into the same container.\n parent.makeGray();\n } else {\n // Move the barrier \"forward\". Suitable for objects receiving isolated stores.\n child.makeGray();\n }\n } else if (parentColor == transparent && state == STATE_MARK) {\n // Pinned objects are considered 'black' during the mark phase.\n child.makeGray();\n }\n }\n}\n\n// @ts-ignore: decorator\n@lazy let visitCount = 0;\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __visit(ptr: usize, cookie: i32): void {\n if (!ptr) return;\n let obj = changetype<Object>(ptr - TOTAL_OVERHEAD);\n if (RTRACE) if (!onvisit(obj)) return;\n if (obj.color == white) {\n obj.makeGray();\n ++visitCount;\n }\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __pin(ptr: usize): usize {\n if (ptr) {\n let obj = changetype<Object>(ptr - TOTAL_OVERHEAD);\n if (obj.color == transparent) {\n throw new Error(E_ALREADY_PINNED);\n }\n obj.unlink(); // from fromSpace\n obj.linkTo(pinSpace, transparent);\n }\n return ptr;\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __unpin(ptr: usize): void {\n if (!ptr) return;\n let obj = changetype<Object>(ptr - TOTAL_OVERHEAD);\n if (obj.color != transparent) {\n throw new Error(E_NOT_PINNED);\n }\n if (state == STATE_MARK) {\n // We may be right at the point after marking roots for the second time and\n // entering the sweep phase, in which case the object would be missed if it\n // is not only pinned but also a root. Make sure it isn't missed.\n obj.makeGray();\n } else {\n obj.unlink();\n obj.linkTo(fromSpace, white);\n }\n}\n\n// @ts-ignore: decorator\n@global @unsafe\nexport function __collect(): void {\n if (TRACE) trace(\"GC (full) at\", 1, total);\n if (state > STATE_IDLE) {\n // finish current cycle\n while (state != STATE_IDLE) step();\n }\n // perform a full cycle\n step();\n while (state != STATE_IDLE) step();\n threshold = <usize>(<u64>total * IDLEFACTOR / 100) + GRANULARITY;\n if (TRACE) trace(\"GC (full) done at cur/max\", 2, total, memory.size() << 16);\n if (RTRACE || PROFILE) oncollect(total);\n}\n\n// Garbage collector automation\n\n/** How often to interrupt. The default of 1024 means \"interrupt each 1024 bytes allocated\". */\n// @ts-ignore: decorator\n@inline const GRANULARITY: usize = isDefined(ASC_GC_GRANULARITY) ? ASC_GC_GRANULARITY : 1024;\n/** How long to interrupt. The default of 200% means \"run at double the speed of allocations\". */\n// @ts-ignore: decorator\n@inline const STEPFACTOR: usize = isDefined(ASC_GC_SWEEPFACTOR) ? ASC_GC_SWEEPFACTOR : 200;\n/** How long to idle. The default of 200% means \"wait for memory to double before kicking in again\". */\n// @ts-ignore: decorator\n@inline const IDLEFACTOR: usize = isDefined(ASC_GC_IDLEFACTOR) ? ASC_GC_IDLEFACTOR : 200;\n\n/** Threshold of memory used by objects to exceed before interrupting again. */\n// @ts-ignore: decorator\n@lazy let threshold: usize = ((<usize>memory.size() << 16) - __heap_base) >> 1;\n\n/** Performs a reasonable amount of incremental GC steps. */\nfunction interrupt(): void {\n if (PROFILE) oninterrupt(total);\n if (TRACE) trace(\"GC (auto) at\", 1, total);\n let budget: isize = GRANULARITY * STEPFACTOR / 100;\n do {\n budget -= step();\n if (state == STATE_IDLE) {\n if (TRACE) trace(\"└ GC (auto) done at cur/max\", 2, total, memory.size() << 16);\n threshold = <usize>(<u64>total * IDLEFACTOR / 100) + GRANULARITY;\n if (PROFILE) onyield(total);\n return;\n }\n } while (budget > 0);\n if (TRACE) trace(\"└ GC (auto) ongoing at\", 1, total);\n threshold = total + GRANULARITY * usize(total - threshold < GRANULARITY);\n if (PROFILE) onyield(total);\n}\n","// © 2026 Adobe. MIT License. See /LICENSE for details.\nexport function add(a: i32, b: i32): i32 {\n return a + b;\n}\n\nexport function addF32Arrays(aPtr: usize, bPtr: usize, length: u32): void {\n // now handle any remaining elements\n for (let i: u32 = 0 /*length & ~7*/; i < length; i++) {\n const aOffset = aPtr + (i << 2); // i * 4 (each Float32 is 4 bytes)\n const bOffset = bPtr + (i << 2);\n\n const va = f32.load(aOffset);\n const vb = f32.load(bOffset);\n\n f32.store(aOffset, va + vb);\n }\n}\n\nexport function addF32ArraysSimd4(aPtr: usize, bPtr: usize, length: u32): void {\n const stride = 4; // Process 4 f32 elements per SIMD operation\n let i: u32 = 0;\n const end = length - stride;\n\n // Handle SIMD operations for chunks of 4 elements\n for (; i < end; i += stride) {\n v128.store(aPtr, f32x4.add(v128.load(aPtr), v128.load(bPtr)));\n aPtr += stride * sizeof<f32>();\n bPtr += stride * sizeof<f32>();\n }\n\n // Handle remaining elements that aren't divisible by 4\n for (; i < length; i++) {\n store<f32>(aPtr, load<f32>(aPtr) + load<f32>(bPtr));\n aPtr += sizeof<f32>();\n bPtr += sizeof<f32>();\n }\n}\n\nexport function addF32ArraysSimd4Unrolled(aPtr: usize, bPtr: usize, length: u32): void {\n const stride = 4; // Process 4 f32 elements per SIMD operation\n const unrollFactor = 2; // Number of SIMD operations per loop iteration\n const totalStride = stride * unrollFactor; // Total elements processed per loop iteration\n let i: u32 = 0;\n const end = length - (length % totalStride);\n\n // Handle SIMD operations for chunks of totalStride elements\n for (; i < end; i += totalStride) {\n // First SIMD operation\n v128.store(aPtr, f32x4.add(v128.load(aPtr), v128.load(bPtr)));\n aPtr += stride * sizeof<f32>();\n bPtr += stride * sizeof<f32>();\n\n // Second SIMD operation\n v128.store(aPtr, f32x4.add(v128.load(aPtr), v128.load(bPtr)));\n aPtr += stride * sizeof<f32>();\n bPtr += stride * sizeof<f32>();\n }\n\n // Handle remaining elements that aren't divisible by totalStride\n for (; i < length; i++) {\n store<f32>(aPtr, load<f32>(aPtr) + load<f32>(bPtr));\n aPtr += sizeof<f32>();\n bPtr += sizeof<f32>();\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module","main":"./index.js","types":"./index.d.ts","exports":{".": {"import":"./index.js","types":"./index.d.ts"}}}
|
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
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.*/
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
22
2
|
import { describe, expect, test } from "vitest";
|
|
23
3
|
import { add } from "../../dist/assembly/index.js";
|
|
24
4
|
describe("Assembly", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembly.test.js","sourceRoot":"","sources":["../../src/assembly-test/assembly.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"assembly.test.js","sourceRoot":"","sources":["../../src/assembly-test/assembly.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAEnD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/blob/blob-handle.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
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.*/
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
22
2
|
import { BlobMeta } from "./blob-meta.js";
|
|
23
3
|
const BlobHandleSchema = {
|
|
24
4
|
type: 'object',
|
package/blob/blob-handle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-handle.js","sourceRoot":"","sources":["../../src/blob/blob-handle.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"blob-handle.js","sourceRoot":"","sources":["../../src/blob/blob-handle.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,gBAAgB,GAAG;IACrB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAChC;IACD,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;CACrC,CAAC;AAK5B,MAAM,KAAW,UAAU,CAkB1B;AAlBD,WAAiB,UAAU;IACV,iBAAM,GAAG,gBAAgB,CAAC;IACvC,SAAgB,EAAE,CAAC,KAAc;QAC7B,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,QAAQ,IAAI,KAAK;YACjB,SAAS,IAAI,KAAK;YAClB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAChC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CACpC,CAAC;IACN,CAAC;IATe,aAAE,KASjB,CAAA;IACD,SAAgB,QAAQ,CAAC,KAAc;QACnC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;IACnE,CAAC;IAFe,mBAAQ,WAEvB,CAAA;IACD,SAAgB,UAAU,CAAC,KAAc;QACrC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;IACvE,CAAC;IAFe,qBAAU,aAEzB,CAAA;AACL,CAAC,EAlBgB,UAAU,KAAV,UAAU,QAkB1B"}
|
package/blob/blob-meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-meta.js","sourceRoot":"","sources":["../../src/blob/blob-meta.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blob-meta.js","sourceRoot":"","sources":["../../src/blob/blob-meta.ts"],"names":[],"mappings":"AAGA,MAAM,cAAc,GAAG;IACnB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/B;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;CACH,CAAC;AAG5B,MAAM,KAAW,QAAQ,CAYxB;AAZD,WAAiB,QAAQ;IACR,eAAM,GAAG,cAAc,CAAC;IACrC,SAAgB,EAAE,CAAC,KAAc;QAC7B,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACf,MAAM,IAAI,KAAK;YACf,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC9B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CACjC,CAAC;IACN,CAAC;IATe,WAAE,KASjB,CAAA;AACL,CAAC,EAZgB,QAAQ,KAAR,QAAQ,QAYxB"}
|
package/blob/index.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
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.*/
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
22
2
|
export * from "./blob-handle.js";
|
|
23
3
|
export * from "./blob-meta.js";
|
|
24
4
|
//# sourceMappingURL=index.js.map
|
package/blob/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blob/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blob/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module","main":"./index.js","types":"./index.d.ts","exports":{".": {"import":"./index.js","types":"./index.d.ts"}}}
|
package/cache/async-cache.js
CHANGED
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
|
|
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.*/
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
22
2
|
export {};
|
|
23
3
|
//# sourceMappingURL=async-cache.js.map
|
package/cache/async-cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-cache.js","sourceRoot":"","sources":["../../src/cache/async-cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"async-cache.js","sourceRoot":"","sources":["../../src/cache/async-cache.ts"],"names":[],"mappings":"AAAA,uDAAuD"}
|
package/cache/blob-store.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
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.*/
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
22
2
|
import { getManagedPersistentCache } from "./get-persistent-cache.js";
|
|
23
3
|
import { blobToHash } from "./functions/hashing/blob-to-hash.js";
|
|
24
4
|
import { preventParallelExecution } from "./functions/prevent-parallel-execution.js";
|
package/cache/blob-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-store.js","sourceRoot":"","sources":["../../src/cache/blob-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"blob-store.js","sourceRoot":"","sources":["../../src/cache/blob-store.ts"],"names":[],"mappings":"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"}
|
package/cache/blob-store.test.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
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.*/
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
22
2
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
23
3
|
import { createBlobStore } from "./blob-store.js";
|
|
24
4
|
describe("blobStore", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-store.test.js","sourceRoot":"","sources":["../../src/cache/blob-store.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"blob-store.test.js","sourceRoot":"","sources":["../../src/cache/blob-store.test.ts"],"names":[],"mappings":"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"}
|
package/cache/data-cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-cache.js","sourceRoot":"","sources":["../../src/cache/data-cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-cache.js","sourceRoot":"","sources":["../../src/cache/data-cache.ts"],"names":[],"mappings":"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"}
|
package/cache/data-cache.test.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
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.*/
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
22
2
|
import { getDataCache } from "./data-cache.js";
|
|
23
3
|
import { beforeAll, describe, expect, it } from "vitest";
|
|
24
4
|
describe("DataCache", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-cache.test.js","sourceRoot":"","sources":["../../src/cache/data-cache.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"data-cache.test.js","sourceRoot":"","sources":["../../src/cache/data-cache.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,SAAS,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpB,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,0BAA0B;QAC1B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;QAE5C,wCAAwC;QACxC,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QAElD,0BAA0B;QAC1B,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE9B,sBAAsB;QACtB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,2BAA2B;QAC3B,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExC,gCAAgC;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAElC,uDAAuD;QACvD,MAAM,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5E,kFAAkF;QAClF,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1E,kDAAkD;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAC/D,SAAS,CACV,CAAC;QAEF,oDAAoD;QACpD,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|