synapse-storage 3.0.16 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +657 -127
- package/dist/_utils/chunk.util.d.ts +8 -0
- package/dist/_utils/chunk.util.d.ts.map +1 -0
- package/dist/_utils/chunk.util.js +21 -0
- package/dist/_utils/chunk.util.js.map +1 -0
- package/dist/_utils/deepMerge.util.d.ts +2 -0
- package/dist/_utils/deepMerge.util.d.ts.map +1 -0
- package/dist/_utils/deepMerge.util.js +19 -0
- package/dist/_utils/deepMerge.util.js.map +1 -0
- package/dist/_utils/error-handling.util.d.ts +50 -0
- package/dist/_utils/error-handling.util.d.ts.map +1 -0
- package/dist/_utils/error-handling.util.js +67 -0
- package/dist/_utils/error-handling.util.js.map +1 -0
- package/dist/_utils/flatMap.util.d.ts +10 -0
- package/dist/_utils/flatMap.util.d.ts.map +1 -0
- package/dist/_utils/flatMap.util.js +23 -0
- package/dist/_utils/flatMap.util.js.map +1 -0
- package/dist/_utils/index.d.ts +6 -0
- package/dist/_utils/index.d.ts.map +1 -0
- package/dist/_utils/index.js +13 -0
- package/dist/_utils/index.js.map +1 -0
- package/dist/_utils/logger-console.util.d.ts +9 -0
- package/dist/_utils/logger-console.util.d.ts.map +1 -0
- package/dist/_utils/logger-console.util.js +14 -0
- package/dist/_utils/logger-console.util.js.map +1 -0
- package/dist/api/api.module.d.ts +46 -0
- package/dist/api/api.module.d.ts.map +1 -0
- package/dist/api/api.module.js +121 -0
- package/dist/api/api.module.js.map +1 -0
- package/dist/api/components/endpoint.d.ts +57 -0
- package/dist/api/components/endpoint.d.ts.map +1 -0
- package/dist/api/components/endpoint.js +385 -0
- package/dist/api/components/endpoint.js.map +1 -0
- package/dist/api/components/query-storage.d.ts +100 -0
- package/dist/api/components/query-storage.d.ts.map +1 -0
- package/dist/api/components/query-storage.js +293 -0
- package/dist/api/components/query-storage.js.map +1 -0
- package/dist/api/example.d.ts +83 -0
- package/dist/api/example.d.ts.map +1 -0
- package/dist/api/example.js +90 -0
- package/dist/api/example.js.map +1 -0
- package/dist/api/index.d.ts +4 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +11 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/types/api.interface.d.ts +126 -0
- package/dist/api/types/api.interface.d.ts.map +1 -0
- package/dist/api/types/api.interface.js +15 -0
- package/dist/api/types/api.interface.js.map +1 -0
- package/dist/api/types/endpoint.interface.d.ts +118 -0
- package/dist/api/types/endpoint.interface.d.ts.map +1 -0
- package/dist/api/types/endpoint.interface.js +6 -0
- package/dist/api/types/endpoint.interface.js.map +1 -0
- package/dist/api/types/query.interface.d.ts +85 -0
- package/dist/api/types/query.interface.d.ts.map +1 -0
- package/dist/api/types/query.interface.js +6 -0
- package/dist/api/types/query.interface.js.map +1 -0
- package/dist/api/utils/api-helpers.d.ts +22 -0
- package/dist/api/utils/api-helpers.d.ts.map +1 -0
- package/dist/api/utils/api-helpers.js +44 -0
- package/dist/api/utils/api-helpers.js.map +1 -0
- package/dist/api/utils/create-header-context.d.ts +10 -0
- package/dist/api/utils/create-header-context.d.ts.map +1 -0
- package/dist/api/utils/create-header-context.js +40 -0
- package/dist/api/utils/create-header-context.js.map +1 -0
- package/dist/api/utils/endpoint-headers.d.ts +23 -0
- package/dist/api/utils/endpoint-headers.d.ts.map +1 -0
- package/dist/api/utils/endpoint-headers.js +61 -0
- package/dist/api/utils/endpoint-headers.js.map +1 -0
- package/dist/api/utils/fetch-base-query.d.ts +9 -0
- package/dist/api/utils/fetch-base-query.d.ts.map +1 -0
- package/dist/api/utils/fetch-base-query.js +242 -0
- package/dist/api/utils/fetch-base-query.js.map +1 -0
- package/dist/api/utils/file-utils.d.ts +43 -0
- package/dist/api/utils/file-utils.d.ts.map +1 -0
- package/dist/api/utils/file-utils.js +102 -0
- package/dist/api/utils/file-utils.js.map +1 -0
- package/dist/api/utils/get-cacheable-headers.d.ts +8 -0
- package/dist/api/utils/get-cacheable-headers.d.ts.map +1 -0
- package/dist/api/utils/get-cacheable-headers.js +23 -0
- package/dist/api/utils/get-cacheable-headers.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/selector/index.d.ts +3 -0
- package/dist/core/selector/index.d.ts.map +1 -0
- package/dist/core/selector/index.js +5 -0
- package/dist/core/selector/index.js.map +1 -0
- package/dist/{selector.interface-CA5y-kD_.d.ts → core/selector/selector.interface.d.ts} +41 -8
- package/dist/core/selector/selector.interface.d.ts.map +1 -0
- package/dist/core/selector/selector.interface.js +7 -0
- package/dist/core/selector/selector.interface.js.map +1 -0
- package/dist/core/selector/selector.module.d.ts +36 -0
- package/dist/core/selector/selector.module.d.ts.map +1 -0
- package/dist/core/selector/selector.module.js +412 -0
- package/dist/core/selector/selector.module.js.map +1 -0
- package/dist/core/storage/adapters/async-base-storage.service.d.ts +49 -0
- package/dist/core/storage/adapters/async-base-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/async-base-storage.service.js +505 -0
- package/dist/core/storage/adapters/async-base-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts +89 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.js +596 -0
- package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts +23 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.js +111 -0
- package/dist/core/storage/adapters/local-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts +24 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.js +110 -0
- package/dist/core/storage/adapters/memory-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/path.utils.d.ts +5 -0
- package/dist/core/storage/adapters/path.utils.d.ts.map +1 -0
- package/dist/core/storage/adapters/path.utils.js +42 -0
- package/dist/core/storage/adapters/path.utils.js.map +1 -0
- package/dist/core/storage/adapters/storage-core.d.ts +61 -0
- package/dist/core/storage/adapters/storage-core.d.ts.map +1 -0
- package/dist/core/storage/adapters/storage-core.js +221 -0
- package/dist/core/storage/adapters/storage-core.js.map +1 -0
- package/dist/core/storage/adapters/sync-base-storage.service.d.ts +56 -0
- package/dist/core/storage/adapters/sync-base-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/sync-base-storage.service.js +481 -0
- package/dist/core/storage/adapters/sync-base-storage.service.js.map +1 -0
- package/dist/core/storage/index.d.ts +16 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +38 -0
- package/dist/core/storage/index.js.map +1 -0
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts +9 -0
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/broadcast.middleware.js +197 -0
- package/dist/core/storage/middlewares/broadcast.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/index.d.ts +9 -0
- package/dist/core/storage/middlewares/index.d.ts.map +1 -0
- package/dist/core/storage/middlewares/index.js +17 -0
- package/dist/core/storage/middlewares/index.js.map +1 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.js +108 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +43 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts +9 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.js +177 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts +6 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.js +56 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js +39 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts +101 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js +8 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts +49 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.js +406 -0
- package/dist/core/storage/modules/plugin/plugin.service.js.map +1 -0
- package/dist/core/storage/modules/singleton/mixin.util.d.ts +6 -0
- package/dist/core/storage/modules/singleton/mixin.util.d.ts.map +1 -0
- package/dist/core/storage/modules/singleton/mixin.util.js +30 -0
- package/dist/core/storage/modules/singleton/mixin.util.js.map +1 -0
- package/dist/core/storage/modules/singleton/models.d.ts +143 -0
- package/dist/core/storage/modules/singleton/models.d.ts.map +1 -0
- package/dist/core/storage/modules/singleton/models.js +60 -0
- package/dist/core/storage/modules/singleton/models.js.map +1 -0
- package/dist/core/storage/modules/singleton/singleton.util.d.ts +36 -0
- package/dist/core/storage/modules/singleton/singleton.util.d.ts.map +1 -0
- package/dist/core/storage/modules/singleton/singleton.util.js +216 -0
- package/dist/core/storage/modules/singleton/singleton.util.js.map +1 -0
- package/dist/core/storage/storage.interface.d.ts +168 -0
- package/dist/core/storage/storage.interface.d.ts.map +1 -0
- package/dist/core/storage/storage.interface.js +23 -0
- package/dist/core/storage/storage.interface.js.map +1 -0
- package/dist/core/storage/utils/broadcast.util.d.ts +49 -0
- package/dist/core/storage/utils/broadcast.util.d.ts.map +1 -0
- package/dist/core/storage/utils/broadcast.util.js +141 -0
- package/dist/core/storage/utils/broadcast.util.js.map +1 -0
- package/dist/core/storage/utils/cache.util.d.ts +33 -0
- package/dist/core/storage/utils/cache.util.d.ts.map +1 -0
- package/dist/core/storage/utils/cache.util.js +54 -0
- package/dist/core/storage/utils/cache.util.js.map +1 -0
- package/dist/core/storage/utils/middleware-module.d.ts +94 -0
- package/dist/core/storage/utils/middleware-module.d.ts.map +1 -0
- package/dist/core/storage/utils/middleware-module.js +258 -0
- package/dist/core/storage/utils/middleware-module.js.map +1 -0
- package/dist/core/storage/utils/path-selector.util.d.ts +15 -0
- package/dist/core/storage/utils/path-selector.util.d.ts.map +1 -0
- package/dist/core/storage/utils/path-selector.util.js +58 -0
- package/dist/core/storage/utils/path-selector.util.js.map +1 -0
- package/dist/core/storage/utils/state-diff.util.d.ts +14 -0
- package/dist/core/storage/utils/state-diff.util.d.ts.map +1 -0
- package/dist/core/storage/utils/state-diff.util.js +88 -0
- package/dist/core/storage/utils/state-diff.util.js.map +1 -0
- package/dist/core/storage/utils/storage-factory.util.d.ts +21 -0
- package/dist/core/storage/utils/storage-factory.util.d.ts.map +1 -0
- package/dist/core/storage/utils/storage-factory.util.js +40 -0
- package/dist/core/storage/utils/storage-factory.util.js.map +1 -0
- package/dist/core/storage/utils/storage-key.d.ts +11 -0
- package/dist/core/storage/utils/storage-key.d.ts.map +1 -0
- package/dist/core/storage/utils/storage-key.js +24 -0
- package/dist/core/storage/utils/storage-key.js.map +1 -0
- package/dist/core/storage/utils/storage.utils.d.ts +17 -0
- package/dist/core/storage/utils/storage.utils.d.ts.map +1 -0
- package/dist/core/storage/utils/storage.utils.js +57 -0
- package/dist/core/storage/utils/storage.utils.js.map +1 -0
- package/dist/index.d.ts +10 -12
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -0
- package/dist/react/hooks/index.d.ts +5 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/index.js +11 -0
- package/dist/react/hooks/index.js.map +1 -0
- package/dist/react/hooks/useCreateStorage.d.ts +39 -0
- package/dist/react/hooks/useCreateStorage.d.ts.map +1 -0
- package/dist/react/hooks/useCreateStorage.js +137 -0
- package/dist/react/hooks/useCreateStorage.js.map +1 -0
- package/dist/react/hooks/useSelector.d.ts +21 -0
- package/dist/react/hooks/useSelector.d.ts.map +1 -0
- package/dist/react/hooks/useSelector.js +56 -0
- package/dist/react/hooks/useSelector.js.map +1 -0
- package/dist/react/hooks/useStorage.d.ts +39 -0
- package/dist/react/hooks/useStorage.d.ts.map +1 -0
- package/dist/react/hooks/useStorage.js +78 -0
- package/dist/react/hooks/useStorage.js.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts +16 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.js +55 -0
- package/dist/react/hooks/useStorageSubscribe.js.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +7 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/utils/awaitSynapse.d.ts +34 -0
- package/dist/react/utils/awaitSynapse.d.ts.map +1 -0
- package/dist/react/utils/awaitSynapse.js +87 -0
- package/dist/react/utils/awaitSynapse.js.map +1 -0
- package/dist/react/utils/createSynapseCtx.d.ts +33 -0
- package/dist/react/utils/createSynapseCtx.d.ts.map +1 -0
- package/dist/react/utils/createSynapseCtx.js +139 -0
- package/dist/react/utils/createSynapseCtx.js.map +1 -0
- package/dist/react/utils/index.d.ts +3 -0
- package/dist/react/utils/index.d.ts.map +1 -0
- package/dist/react/utils/index.js +9 -0
- package/dist/react/utils/index.js.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts +216 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.js +384 -0
- package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -0
- package/dist/reactive/dispatcher/index.d.ts +4 -0
- package/dist/reactive/dispatcher/index.d.ts.map +1 -0
- package/dist/reactive/dispatcher/index.js +9 -0
- package/dist/reactive/dispatcher/index.js.map +1 -0
- package/dist/reactive/dispatcher/middlewares/index.d.ts +2 -0
- package/dist/reactive/dispatcher/middlewares/index.d.ts.map +1 -0
- package/dist/reactive/dispatcher/middlewares/index.js +5 -0
- package/dist/reactive/dispatcher/middlewares/index.js.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +37 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js +188 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +1 -0
- package/dist/reactive/dispatcher/standalone.d.ts +112 -0
- package/dist/reactive/dispatcher/standalone.d.ts.map +1 -0
- package/dist/reactive/dispatcher/standalone.js +142 -0
- package/dist/reactive/dispatcher/standalone.js.map +1 -0
- package/dist/reactive/effects/effects.module.d.ts +225 -0
- package/dist/reactive/effects/effects.module.d.ts.map +1 -0
- package/dist/reactive/effects/effects.module.js +356 -0
- package/dist/reactive/effects/effects.module.js.map +1 -0
- package/dist/reactive/effects/index.d.ts +4 -0
- package/dist/reactive/effects/index.d.ts.map +1 -0
- package/dist/reactive/effects/index.js +11 -0
- package/dist/reactive/effects/index.js.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +12 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.js +25 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +12 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.js +22 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.js.map +1 -0
- package/dist/reactive/effects/utils/fromRequest.d.ts +40 -0
- package/dist/reactive/effects/utils/fromRequest.d.ts.map +1 -0
- package/dist/reactive/effects/utils/fromRequest.js +64 -0
- package/dist/reactive/effects/utils/fromRequest.js.map +1 -0
- package/dist/reactive/effects/utils/index.d.ts +5 -0
- package/dist/reactive/effects/utils/index.d.ts.map +1 -0
- package/dist/reactive/effects/utils/index.js +11 -0
- package/dist/reactive/effects/utils/index.js.map +1 -0
- package/dist/reactive/effects/utils/toObservable.d.ts +23 -0
- package/dist/reactive/effects/utils/toObservable.d.ts.map +1 -0
- package/dist/reactive/effects/utils/toObservable.js +39 -0
- package/dist/reactive/effects/utils/toObservable.js.map +1 -0
- package/dist/reactive/index.d.ts +3 -0
- package/dist/reactive/index.d.ts.map +1 -0
- package/dist/reactive/index.js +7 -0
- package/dist/reactive/index.js.map +1 -0
- package/dist/utils/createEventBus.d.ts +87 -0
- package/dist/utils/createEventBus.d.ts.map +1 -0
- package/dist/utils/createEventBus.js +215 -0
- package/dist/utils/createEventBus.js.map +1 -0
- package/dist/utils/createSynapse/createSynapse.d.ts +9 -0
- package/dist/utils/createSynapse/createSynapse.d.ts.map +1 -0
- package/dist/utils/createSynapse/createSynapse.js +103 -0
- package/dist/utils/createSynapse/createSynapse.js.map +1 -0
- package/dist/utils/createSynapse/index.d.ts +3 -0
- package/dist/utils/createSynapse/index.d.ts.map +1 -0
- package/dist/utils/createSynapse/index.js +6 -0
- package/dist/utils/createSynapse/index.js.map +1 -0
- package/dist/utils/createSynapse/types.d.ts +93 -0
- package/dist/utils/createSynapse/types.d.ts.map +1 -0
- package/dist/utils/createSynapse/types.js +6 -0
- package/dist/utils/createSynapse/types.js.map +1 -0
- package/dist/utils/createSynapse/validate.d.ts +2 -0
- package/dist/utils/createSynapse/validate.d.ts.map +1 -0
- package/dist/utils/createSynapse/validate.js +76 -0
- package/dist/utils/createSynapse/validate.js.map +1 -0
- package/dist/utils/createSynapse/waitForDependencies.d.ts +3 -0
- package/dist/utils/createSynapse/waitForDependencies.d.ts.map +1 -0
- package/dist/utils/createSynapse/waitForDependencies.js +40 -0
- package/dist/utils/createSynapse/waitForDependencies.js.map +1 -0
- package/dist/utils/createSynapseAwaiter.d.ts +46 -0
- package/dist/utils/createSynapseAwaiter.d.ts.map +1 -0
- package/dist/utils/createSynapseAwaiter.js +102 -0
- package/dist/utils/createSynapseAwaiter.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +17 -21
- package/dist/api.d.ts +0 -365
- package/dist/api.js +0 -1
- package/dist/core.d.ts +0 -95
- package/dist/core.js +0 -1
- package/dist/createSynapse-BLbPlWXK.d.ts +0 -97
- package/dist/dispatcher.module-DcXkCRNj.d.ts +0 -360
- package/dist/react.d.ts +0 -98
- package/dist/react.js +0 -1
- package/dist/reactive.d.ts +0 -35
- package/dist/reactive.js +0 -1
- package/dist/storage.interface-2HKvqdAJ.d.ts +0 -444
- package/dist/utils.d.ts +0 -139
- package/dist/utils.js +0 -1
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { handleCallbackError, logError } from "../../../_utils/error-handling.util.js";
|
|
2
|
+
import { StorageEvents } from "../storage.interface.js";
|
|
3
|
+
import { SyncBroadcastChannel } from "../utils/broadcast.util.js";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
function handleSyncStorageMessage(api, type, payload) {
|
|
12
|
+
switch(type){
|
|
13
|
+
case 'set':
|
|
14
|
+
if (payload?.key !== undefined && payload?.value !== undefined) {
|
|
15
|
+
api.storage.doSet(payload.key, payload.value);
|
|
16
|
+
api.storage.notifySubscribers(payload.key, payload.value);
|
|
17
|
+
}
|
|
18
|
+
break;
|
|
19
|
+
case 'update':
|
|
20
|
+
if (Array.isArray(payload?.value)) {
|
|
21
|
+
api.storage.doUpdate(payload.value);
|
|
22
|
+
payload.value.forEach(({ key, value })=>{
|
|
23
|
+
api.storage.notifySubscribers(key, value);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
break;
|
|
27
|
+
case 'delete':
|
|
28
|
+
if (payload?.key !== undefined) {
|
|
29
|
+
api.storage.doRemove(payload.key);
|
|
30
|
+
api.storage.notifySubscribers(payload.key, undefined);
|
|
31
|
+
}
|
|
32
|
+
break;
|
|
33
|
+
case 'clear':
|
|
34
|
+
api.storage.doClear();
|
|
35
|
+
api.storage.notifySubscribers('*', {
|
|
36
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
37
|
+
value: {},
|
|
38
|
+
source: 'broadcast'
|
|
39
|
+
});
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
api.storage.notifySubscribers('*', {
|
|
43
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
44
|
+
key: payload?.key,
|
|
45
|
+
value: payload?.value,
|
|
46
|
+
source: 'broadcast'
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function handlePersistentSyncStorageMessage(api, type, payload) {
|
|
50
|
+
switch(type){
|
|
51
|
+
case 'set':
|
|
52
|
+
if (payload?.key !== undefined) {
|
|
53
|
+
const currentValue = api.storage.doGet(payload.key);
|
|
54
|
+
api.storage.notifySubscribers(payload.key, currentValue);
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case 'update':
|
|
58
|
+
if (Array.isArray(payload?.value)) {
|
|
59
|
+
for (const { key } of payload.value){
|
|
60
|
+
const currentValue = api.storage.doGet(key);
|
|
61
|
+
api.storage.notifySubscribers(key, currentValue);
|
|
62
|
+
}
|
|
63
|
+
api.storage.notifySubscribers('*', {
|
|
64
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
65
|
+
key: payload.value.map(({ key })=>key),
|
|
66
|
+
value: payload.value,
|
|
67
|
+
source: 'broadcast'
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
case 'delete':
|
|
72
|
+
if (payload?.key !== undefined) {
|
|
73
|
+
api.storage.notifySubscribers(payload.key, undefined);
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
case 'clear':
|
|
77
|
+
api.storage.notifySubscribers('*', {
|
|
78
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
79
|
+
value: {},
|
|
80
|
+
source: 'broadcast'
|
|
81
|
+
});
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
if (type !== 'update') {
|
|
85
|
+
api.storage.notifySubscribers('*', {
|
|
86
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
87
|
+
key: payload?.key,
|
|
88
|
+
value: type === 'delete' ? undefined : payload?.value,
|
|
89
|
+
source: 'broadcast'
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const syncBroadcastMiddleware = (props)=>{
|
|
94
|
+
const { storageName, storageType } = props;
|
|
95
|
+
const channelName = `${storageType}-${storageName}`;
|
|
96
|
+
const channel = new SyncBroadcastChannel(channelName, {
|
|
97
|
+
debug: true
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
name: 'sync-broadcast',
|
|
101
|
+
setup: (api)=>{
|
|
102
|
+
if (storageType === 'memory') {
|
|
103
|
+
channel.setSyncHandler(async ()=>{
|
|
104
|
+
const state = api.getState();
|
|
105
|
+
const updates = Object.entries(state).map(([key, value])=>({
|
|
106
|
+
key,
|
|
107
|
+
value
|
|
108
|
+
}));
|
|
109
|
+
const action = {
|
|
110
|
+
type: 'update',
|
|
111
|
+
key: '*',
|
|
112
|
+
value: updates,
|
|
113
|
+
metadata: {
|
|
114
|
+
batchUpdate: true,
|
|
115
|
+
timestamp: Date.now()
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
return action;
|
|
119
|
+
});
|
|
120
|
+
// Начальная синхронизация (fire-and-forget)
|
|
121
|
+
channel.requestSync().then((action)=>{
|
|
122
|
+
if (action?.type === 'update' && Array.isArray(action.value)) {
|
|
123
|
+
try {
|
|
124
|
+
const validUpdates = action.value.every((update)=>update && typeof update === 'object' && 'key' in update && 'value' in update);
|
|
125
|
+
if (!validUpdates) {
|
|
126
|
+
logError('syncBroadcastMiddleware: invalid sync response updates structure', action.value);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
api.storage.doUpdate(action.value);
|
|
130
|
+
action.value.forEach(({ key, value })=>{
|
|
131
|
+
api.storage.notifySubscribers(key, value);
|
|
132
|
+
});
|
|
133
|
+
api.storage.notifySubscribers('*', {
|
|
134
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
135
|
+
value: action.value,
|
|
136
|
+
source: 'broadcast'
|
|
137
|
+
});
|
|
138
|
+
} catch (error) {
|
|
139
|
+
handleCallbackError('syncBroadcastMiddleware: error applying sync updates', error);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}).catch((error)=>{
|
|
143
|
+
logError('syncBroadcastMiddleware: initial sync failed', error, null, 'warn');
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// Подписка на сообщения (BroadcastChannel API всегда async)
|
|
147
|
+
return channel.subscribe((message)=>{
|
|
148
|
+
const { type, payload } = message;
|
|
149
|
+
if (storageType === 'memory') {
|
|
150
|
+
handleSyncStorageMessage(api, type, payload);
|
|
151
|
+
} else {
|
|
152
|
+
handlePersistentSyncStorageMessage(api, type, payload);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
reducer: (_api)=>(next)=>(action)=>{
|
|
157
|
+
const result = next(action);
|
|
158
|
+
// Fire-and-forget broadcast to other tabs
|
|
159
|
+
if ([
|
|
160
|
+
'set',
|
|
161
|
+
'delete',
|
|
162
|
+
'clear',
|
|
163
|
+
'update'
|
|
164
|
+
].includes(action.type)) {
|
|
165
|
+
channel.broadcast(action.type, action);
|
|
166
|
+
}
|
|
167
|
+
return result;
|
|
168
|
+
},
|
|
169
|
+
cleanup: ()=>{
|
|
170
|
+
channel.close();
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
export { syncBroadcastMiddleware };
|
|
176
|
+
|
|
177
|
+
//# sourceMappingURL=sync-broadcast.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/sync-broadcast.middleware.js","sources":["../../../../src/core/storage/middlewares/sync-broadcast.middleware.ts"],"sourcesContent":["import { handleCallbackError, logError } from '../../../_utils/error-handling.util'\nimport { StorageEvents, StorageType } from '../storage.interface'\nimport { SyncBroadcastChannel } from '../utils/broadcast.util'\nimport { StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction } from '../utils/middleware-module'\n\ninterface SyncSharedStateMiddlewareProps {\n storageType: StorageType\n storageName: string\n}\n\nfunction handleSyncStorageMessage(api: SyncMiddlewareAPI, type: string, payload: any): void {\n switch (type) {\n case 'set':\n if (payload?.key !== undefined && payload?.value !== undefined) {\n api.storage.doSet(payload.key, payload.value)\n api.storage.notifySubscribers(payload.key, payload.value)\n }\n break\n\n case 'update':\n if (Array.isArray(payload?.value)) {\n api.storage.doUpdate(payload.value)\n payload.value.forEach(({ key, value }: { key: string; value: any }) => {\n api.storage.notifySubscribers(key, value)\n })\n }\n break\n\n case 'delete':\n if (payload?.key !== undefined) {\n api.storage.doRemove(payload.key)\n api.storage.notifySubscribers(payload.key, undefined)\n }\n break\n\n case 'clear':\n api.storage.doClear()\n api.storage.notifySubscribers('*', {\n type: StorageEvents.STORAGE_UPDATE,\n value: {},\n source: 'broadcast',\n })\n break\n }\n\n api.storage.notifySubscribers('*', {\n type: StorageEvents.STORAGE_UPDATE,\n key: payload?.key,\n value: payload?.value,\n source: 'broadcast',\n })\n}\n\nfunction handlePersistentSyncStorageMessage(api: SyncMiddlewareAPI, type: string, payload: any): void {\n switch (type) {\n case 'set':\n if (payload?.key !== undefined) {\n const currentValue = api.storage.doGet(payload.key)\n api.storage.notifySubscribers(payload.key, currentValue)\n }\n break\n\n case 'update':\n if (Array.isArray(payload?.value)) {\n for (const { key } of payload.value) {\n const currentValue = api.storage.doGet(key)\n api.storage.notifySubscribers(key, currentValue)\n }\n\n api.storage.notifySubscribers('*', {\n type: StorageEvents.STORAGE_UPDATE,\n key: payload.value.map(({ key }: { key: string }) => key),\n value: payload.value,\n source: 'broadcast',\n })\n }\n break\n\n case 'delete':\n if (payload?.key !== undefined) {\n api.storage.notifySubscribers(payload.key, undefined)\n }\n break\n\n case 'clear':\n api.storage.notifySubscribers('*', {\n type: StorageEvents.STORAGE_UPDATE,\n value: {},\n source: 'broadcast',\n })\n break\n }\n\n if (type !== 'update') {\n api.storage.notifySubscribers('*', {\n type: StorageEvents.STORAGE_UPDATE,\n key: payload?.key,\n value: type === 'delete' ? undefined : payload?.value,\n source: 'broadcast',\n })\n }\n}\n\nexport const syncBroadcastMiddleware = (props: SyncSharedStateMiddlewareProps): SyncMiddleware => {\n const { storageName, storageType } = props\n const channelName = `${storageType}-${storageName}`\n const channel = new SyncBroadcastChannel<StorageAction>(channelName, { debug: true })\n\n return {\n name: 'sync-broadcast',\n setup: (api: SyncMiddlewareAPI) => {\n if (storageType === 'memory') {\n channel.setSyncHandler(async () => {\n const state = api.getState()\n\n const updates = Object.entries(state).map(([key, value]) => ({\n key,\n value,\n }))\n\n const action: StorageAction = {\n type: 'update',\n key: '*',\n value: updates,\n metadata: {\n batchUpdate: true,\n timestamp: Date.now(),\n },\n }\n return action\n })\n\n // Начальная синхронизация (fire-and-forget)\n channel\n .requestSync()\n .then((action) => {\n if (action?.type === 'update' && Array.isArray(action.value)) {\n try {\n const validUpdates = action.value.every((update) => update && typeof update === 'object' && 'key' in update && 'value' in update)\n\n if (!validUpdates) {\n logError('syncBroadcastMiddleware: invalid sync response updates structure', action.value)\n return\n }\n\n api.storage.doUpdate(action.value)\n\n action.value.forEach(({ key, value }) => {\n api.storage.notifySubscribers(key, value)\n })\n\n api.storage.notifySubscribers('*', {\n type: StorageEvents.STORAGE_UPDATE,\n value: action.value,\n source: 'broadcast',\n })\n } catch (error) {\n handleCallbackError('syncBroadcastMiddleware: error applying sync updates', error)\n }\n }\n })\n .catch((error) => {\n logError('syncBroadcastMiddleware: initial sync failed', error, null, 'warn')\n })\n }\n\n // Подписка на сообщения (BroadcastChannel API всегда async)\n return channel.subscribe((message) => {\n const { type, payload } = message\n\n if (storageType === 'memory') {\n handleSyncStorageMessage(api, type, payload)\n } else {\n handlePersistentSyncStorageMessage(api, type, payload)\n }\n })\n },\n\n reducer: (_api: SyncMiddlewareAPI) => (next: SyncNextFunction) => (action: StorageAction) => {\n const result = next(action)\n\n // Fire-and-forget broadcast to other tabs\n if (['set', 'delete', 'clear', 'update'].includes(action.type)) {\n channel.broadcast(action.type, action)\n }\n\n return result\n },\n\n cleanup: () => {\n channel.close()\n },\n }\n}\n"],"names":["handleCallbackError","logError","StorageEvents","SyncBroadcastChannel","handleSyncStorageMessage","api","type","payload","undefined","Array","key","value","handlePersistentSyncStorageMessage","currentValue","syncBroadcastMiddleware","props","storageName","storageType","channelName","channel","state","updates","Object","action","Date","validUpdates","update","error","message","_api","next","result"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SyncMiddleware } from '../utils/middleware-module';
|
|
2
|
+
export interface SyncBatchingMiddlewareOptions {
|
|
3
|
+
batchSize?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare const syncBatchingMiddleware: (options?: SyncBatchingMiddlewareOptions) => SyncMiddleware;
|
|
6
|
+
//# sourceMappingURL=sync-storage-batching.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-storage-batching.middleware.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/middlewares/sync-storage-batching.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAuC,MAAM,4BAA4B,CAAA;AAE/G,MAAM,WAAW,6BAA6B;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,sBAAsB,GAAI,UAAS,6BAAkC,KAAG,cA+DpF,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const syncBatchingMiddleware = (options = {})=>{
|
|
2
|
+
const batchSize = options.batchSize ?? 10;
|
|
3
|
+
let queue = [];
|
|
4
|
+
let scheduled = false;
|
|
5
|
+
const shouldBatch = (action)=>{
|
|
6
|
+
return action.type === 'set' || action.type === 'update';
|
|
7
|
+
};
|
|
8
|
+
const mergeActions = (actions)=>{
|
|
9
|
+
const merged = new Map();
|
|
10
|
+
for (const action of actions){
|
|
11
|
+
const key = `${action.type}_${action.key?.toString() || 'default'}`;
|
|
12
|
+
merged.set(key, action);
|
|
13
|
+
}
|
|
14
|
+
return Array.from(merged.values());
|
|
15
|
+
};
|
|
16
|
+
const flushQueue = (api, next)=>{
|
|
17
|
+
if (queue.length === 0) return;
|
|
18
|
+
const batch = queue.splice(0);
|
|
19
|
+
const mergedActions = mergeActions(batch);
|
|
20
|
+
for (const action of mergedActions){
|
|
21
|
+
next(action);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
name: 'sync-batching',
|
|
26
|
+
setup: ()=>{},
|
|
27
|
+
cleanup: ()=>{
|
|
28
|
+
queue = [];
|
|
29
|
+
scheduled = false;
|
|
30
|
+
},
|
|
31
|
+
reducer: (api)=>(next)=>(action)=>{
|
|
32
|
+
if (!shouldBatch(action)) {
|
|
33
|
+
return next(action);
|
|
34
|
+
}
|
|
35
|
+
queue.push(action);
|
|
36
|
+
if (queue.length >= batchSize) {
|
|
37
|
+
flushQueue(api, next);
|
|
38
|
+
} else if (!scheduled) {
|
|
39
|
+
scheduled = true;
|
|
40
|
+
queueMicrotask(()=>{
|
|
41
|
+
scheduled = false;
|
|
42
|
+
flushQueue(api, next);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Возвращаем текущее значение из кеша (операция ещё не выполнена если в очереди)
|
|
46
|
+
if (action.type === 'set' && action.key) {
|
|
47
|
+
return action.value;
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { syncBatchingMiddleware };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=sync-storage-batching.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/sync-storage-batching.middleware.js","sources":["../../../../src/core/storage/middlewares/sync-storage-batching.middleware.ts"],"sourcesContent":["import { StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction } from '../utils/middleware-module'\n\nexport interface SyncBatchingMiddlewareOptions {\n batchSize?: number\n}\n\nexport const syncBatchingMiddleware = (options: SyncBatchingMiddlewareOptions = {}): SyncMiddleware => {\n const batchSize = options.batchSize ?? 10\n\n let queue: StorageAction[] = []\n let scheduled = false\n\n const shouldBatch = (action: StorageAction): boolean => {\n return action.type === 'set' || action.type === 'update'\n }\n\n const mergeActions = (actions: StorageAction[]): StorageAction[] => {\n const merged = new Map<string, StorageAction>()\n\n for (const action of actions) {\n const key = `${action.type}_${action.key?.toString() || 'default'}`\n merged.set(key, action)\n }\n\n return Array.from(merged.values())\n }\n\n const flushQueue = (api: SyncMiddlewareAPI, next: SyncNextFunction): void => {\n if (queue.length === 0) return\n\n const batch = queue.splice(0)\n const mergedActions = mergeActions(batch)\n\n for (const action of mergedActions) {\n next(action)\n }\n }\n\n return {\n name: 'sync-batching',\n setup: () => {},\n cleanup: () => {\n queue = []\n scheduled = false\n },\n reducer: (api: SyncMiddlewareAPI) => (next: SyncNextFunction) => (action: StorageAction) => {\n if (!shouldBatch(action)) {\n return next(action)\n }\n\n queue.push(action)\n\n if (queue.length >= batchSize) {\n flushQueue(api, next)\n } else if (!scheduled) {\n scheduled = true\n queueMicrotask(() => {\n scheduled = false\n flushQueue(api, next)\n })\n }\n\n // Возвращаем текущее значение из кеша (операция ещё не выполнена если в очереди)\n if (action.type === 'set' && action.key) {\n return action.value\n }\n return undefined\n },\n }\n}\n"],"names":["syncBatchingMiddleware","options","batchSize","queue","scheduled","shouldBatch","action","mergeActions","actions","merged","Map","key","Array","flushQueue","api","next","batch","mergedActions","queueMicrotask","undefined"],"mappings":"AAMO,MAAMA,sBAAsBA,GAAG,CAACC,UAAyC,CAAC,CAAC;IAChF,MAAMC,YAAYD,QAAQ,SAAS,IAAI;IAEvC,IAAIE,QAAyB,EAAE;IAC/B,IAAIC,YAAY;IAEhB,MAAMC,cAAc,CAACC;QACnB,OAAOA,OAAO,IAAI,KAAK,SAASA,OAAO,IAAI,KAAK;IAClD;IAEA,MAAMC,eAAe,CAACC;QACpB,MAAMC,SAAS,IAAIC;QAEnB,KAAK,MAAMJ,UAAUE,QAAS;YAC5B,MAAMG,MAAM,GAAGL,OAAO,IAAI,CAAC,CAAC,EAAEA,OAAO,GAAG,EAAE,cAAc,WAAW;YACnEG,OAAO,GAAG,CAACE,KAAKL;QAClB;QAEA,OAAOM,MAAM,IAAI,CAACH,OAAO,MAAM;IACjC;IAEA,MAAMI,aAAa,CAACC,KAAwBC;QAC1C,IAAIZ,MAAM,MAAM,KAAK,GAAG;QAExB,MAAMa,QAAQb,MAAM,MAAM,CAAC;QAC3B,MAAMc,gBAAgBV,aAAaS;QAEnC,KAAK,MAAMV,UAAUW,cAAe;YAClCF,KAAKT;QACP;IACF;IAEA,OAAO;QACL,MAAM;QACN,OAAO,KAAO;QACd,SAAS;YACPH,QAAQ,EAAE;YACVC,YAAY;QACd;QACA,SAAS,CAACU,MAA2B,CAACC,OAA2B,CAACT;oBAChE,IAAI,CAACD,YAAYC,SAAS;wBACxB,OAAOS,KAAKT;oBACd;oBAEAH,MAAM,IAAI,CAACG;oBAEX,IAAIH,MAAM,MAAM,IAAID,WAAW;wBAC7BW,WAAWC,KAAKC;oBAClB,OAAO,IAAI,CAACX,WAAW;wBACrBA,YAAY;wBACZc,eAAe;4BACbd,YAAY;4BACZS,WAAWC,KAAKC;wBAClB;oBACF;oBAEA,iFAAiF;oBACjF,IAAIT,OAAO,IAAI,KAAK,SAASA,OAAO,GAAG,EAAE;wBACvC,OAAOA,OAAO,KAAK;oBACrB;oBACA,OAAOa;gBACT;IACF;AACF,EAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SyncMiddleware } from '../utils/middleware-module';
|
|
2
|
+
export interface SyncShallowCompareMiddlewareOptions {
|
|
3
|
+
segments?: string[];
|
|
4
|
+
comparator?: <T>(prev: T, next: T) => boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const syncShallowCompareMiddleware: (options?: SyncShallowCompareMiddlewareOptions) => SyncMiddleware;
|
|
7
|
+
//# sourceMappingURL=sync-storage-shallow-compare.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-storage-shallow-compare.middleware.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/middlewares/sync-storage-shallow-compare.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAA0D,MAAM,4BAA4B,CAAA;AAGlI,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAA;CAC9C;AAED,eAAO,MAAM,4BAA4B,GAAI,UAAS,mCAAwC,KAAG,cA0ChG,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { VALUE_NOT_CHANGED } from "../utils/middleware-module.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const syncShallowCompareMiddleware = (options = {})=>{
|
|
6
|
+
const { comparator = (prev, next)=>{
|
|
7
|
+
if (prev === next) return true;
|
|
8
|
+
if (typeof prev !== 'object' || typeof next !== 'object' || prev === null || next === null) {
|
|
9
|
+
return prev === next;
|
|
10
|
+
}
|
|
11
|
+
const keysA = Object.keys(prev);
|
|
12
|
+
const keysB = Object.keys(next);
|
|
13
|
+
if (keysA.length !== keysB.length) return false;
|
|
14
|
+
return keysA.every((key)=>Object.prototype.hasOwnProperty.call(next, key) && prev[key] === next[key]);
|
|
15
|
+
}, segments = [] } = options;
|
|
16
|
+
const valueCache = new Map();
|
|
17
|
+
return {
|
|
18
|
+
name: 'sync-shallow-compare',
|
|
19
|
+
setup: ()=>{},
|
|
20
|
+
reducer: (_api)=>(next)=>(action)=>{
|
|
21
|
+
if (action.type !== 'set' || segments.length && !segments.includes(action.metadata?.segment ?? 'default')) {
|
|
22
|
+
return next(action);
|
|
23
|
+
}
|
|
24
|
+
const cacheKey = action.key;
|
|
25
|
+
const prevValue = valueCache.get(cacheKey);
|
|
26
|
+
const nextValue = action.value;
|
|
27
|
+
if (prevValue !== undefined && comparator(prevValue, nextValue)) {
|
|
28
|
+
return VALUE_NOT_CHANGED;
|
|
29
|
+
}
|
|
30
|
+
const result = next(action);
|
|
31
|
+
valueCache.set(cacheKey, result !== undefined ? result : nextValue);
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { syncShallowCompareMiddleware };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=sync-storage-shallow-compare.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/sync-storage-shallow-compare.middleware.js","sources":["../../../../src/core/storage/middlewares/sync-storage-shallow-compare.middleware.ts"],"sourcesContent":["import { StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction, VALUE_NOT_CHANGED } from '../utils/middleware-module'\nimport { StorageKeyType } from '../utils/storage-key'\n\nexport interface SyncShallowCompareMiddlewareOptions {\n segments?: string[]\n comparator?: <T>(prev: T, next: T) => boolean\n}\n\nexport const syncShallowCompareMiddleware = (options: SyncShallowCompareMiddlewareOptions = {}): SyncMiddleware => {\n const {\n comparator = (prev: any, next: any) => {\n if (prev === next) return true\n\n if (typeof prev !== 'object' || typeof next !== 'object' || prev === null || next === null) {\n return prev === next\n }\n\n const keysA = Object.keys(prev)\n const keysB = Object.keys(next)\n\n if (keysA.length !== keysB.length) return false\n\n return keysA.every((key) => Object.prototype.hasOwnProperty.call(next, key) && prev[key] === next[key])\n },\n segments = [],\n } = options\n\n const valueCache = new Map<StorageKeyType, any>()\n\n return {\n name: 'sync-shallow-compare',\n setup: () => {},\n reducer: (_api: SyncMiddlewareAPI) => (next: SyncNextFunction) => (action: StorageAction) => {\n if (action.type !== 'set' || (segments.length && !segments.includes(action.metadata?.segment ?? 'default'))) {\n return next(action)\n }\n\n const cacheKey = action.key!\n const prevValue = valueCache.get(cacheKey)\n const nextValue = action.value\n\n if (prevValue !== undefined && comparator(prevValue, nextValue)) {\n return VALUE_NOT_CHANGED\n }\n\n const result = next(action)\n valueCache.set(cacheKey, result !== undefined ? result : nextValue)\n return result\n },\n }\n}\n"],"names":["VALUE_NOT_CHANGED","syncShallowCompareMiddleware","options","comparator","prev","next","keysA","Object","keysB","key","segments","valueCache","Map","_api","action","cacheKey","prevValue","nextValue","undefined","result"],"mappings":";;;AAAkI;AAQ3H,MAAMC,4BAA4BA,GAAG,CAACC,UAA+C,CAAC,CAAC;IAC5F,MAAM,EACJC,aAAa,CAACC,MAAWC;QACvB,IAAID,SAASC,MAAM,OAAO;QAE1B,IAAI,OAAOD,SAAS,YAAY,OAAOC,SAAS,YAAYD,SAAS,QAAQC,SAAS,MAAM;YAC1F,OAAOD,SAASC;QAClB;QAEA,MAAMC,QAAQC,OAAO,IAAI,CAACH;QAC1B,MAAMI,QAAQD,OAAO,IAAI,CAACF;QAE1B,IAAIC,MAAM,MAAM,KAAKE,MAAM,MAAM,EAAE,OAAO;QAE1C,OAAOF,MAAM,KAAK,CAAC,CAACG,MAAQF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACF,MAAMI,QAAQL,IAAI,CAACK,IAAI,KAAKJ,IAAI,CAACI,IAAI;IACxG,CAAC,EACDC,WAAW,EAAE,EACd,GAAGR;IAEJ,MAAMS,aAAa,IAAIC;IAEvB,OAAO;QACL,MAAM;QACN,OAAO,KAAO;QACd,SAAS,CAACC,OAA4B,CAACR,OAA2B,CAACS;oBACjE,IAAIA,OAAO,IAAI,KAAK,SAAUJ,SAAS,MAAM,IAAI,CAACA,SAAS,QAAQ,CAACI,OAAO,QAAQ,EAAE,WAAW,YAAa;wBAC3G,OAAOT,KAAKS;oBACd;oBAEA,MAAMC,WAAWD,OAAO,GAAG;oBAC3B,MAAME,YAAYL,WAAW,GAAG,CAACI;oBACjC,MAAME,YAAYH,OAAO,KAAK;oBAE9B,IAAIE,cAAcE,aAAaf,WAAWa,WAAWC,YAAY;wBAC/D,OAAOjB,iBAAiBA;oBAC1B;oBAEA,MAAMmB,SAASd,KAAKS;oBACpBH,WAAW,GAAG,CAACI,UAAUI,WAAWD,YAAYC,SAASF;oBACzD,OAAOE;gBACT;IACF;AACF,EAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { StorageKeyType } from '../../utils/storage-key';
|
|
2
|
+
/**
|
|
3
|
+
* Контекст выполнения для плагинов
|
|
4
|
+
* Содержит информацию о текущей операции и хранилище
|
|
5
|
+
*/
|
|
6
|
+
export interface PluginContext {
|
|
7
|
+
/** Имя хранилища, к которому применяется плагин */
|
|
8
|
+
storageName: string;
|
|
9
|
+
/** Временная метка выполнения операции (timestamp) */
|
|
10
|
+
timestamp: number;
|
|
11
|
+
/** Дополнительные метаданные операции (могут быть предоставлены хранилищем или другими плагинами) */
|
|
12
|
+
metadata?: Record<string, any>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Базовый интерфейс для всех плагинов
|
|
16
|
+
* Определяет основные свойства и методы жизненного цикла
|
|
17
|
+
*/
|
|
18
|
+
export interface IPlugin {
|
|
19
|
+
/** Уникальное имя плагина */
|
|
20
|
+
name: string;
|
|
21
|
+
/**
|
|
22
|
+
* Метод инициализации плагина
|
|
23
|
+
* Вызывается при добавлении плагина в хранилище или при инициализации хранилища
|
|
24
|
+
*/
|
|
25
|
+
initialize?(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Метод уничтожения плагина
|
|
28
|
+
* Вызывается при удалении плагина из хранилища или при уничтожении хранилища
|
|
29
|
+
* Используется для освобождения ресурсов и очистки состояния
|
|
30
|
+
*/
|
|
31
|
+
destroy?(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Интерфейс плагина для синхронного хранилища.
|
|
35
|
+
* Все хуки выполняются синхронно.
|
|
36
|
+
*/
|
|
37
|
+
export interface ISyncStoragePlugin extends IPlugin {
|
|
38
|
+
onBeforeSet?<T>(value: T, context: PluginContext): T;
|
|
39
|
+
onAfterSet?<T>(key: StorageKeyType, value: T, context: PluginContext): T;
|
|
40
|
+
onBeforeGet?(key: StorageKeyType, context: PluginContext): StorageKeyType;
|
|
41
|
+
onAfterGet?<T>(key: StorageKeyType, value: T | undefined, context: PluginContext): T | undefined;
|
|
42
|
+
onBeforeDelete?(key: StorageKeyType, context: PluginContext): boolean;
|
|
43
|
+
onAfterDelete?(key: StorageKeyType, context: PluginContext): void;
|
|
44
|
+
onClear?(context: PluginContext): void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Исполнитель плагинов для синхронных хранилищ.
|
|
48
|
+
* Все execute* методы возвращают значения синхронно.
|
|
49
|
+
*/
|
|
50
|
+
export interface ISyncPluginExecutor {
|
|
51
|
+
executeBeforeSet<T>(value: T, metadata?: Record<string, any>): T;
|
|
52
|
+
executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): T;
|
|
53
|
+
executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): StorageKeyType;
|
|
54
|
+
executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): T | undefined;
|
|
55
|
+
executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): boolean;
|
|
56
|
+
executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): void;
|
|
57
|
+
executeOnClear(metadata?: Record<string, any>): void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Интерфейс плагина для асинхронного хранилища.
|
|
61
|
+
* Все хуки возвращают Promise.
|
|
62
|
+
*/
|
|
63
|
+
export interface IAsyncStoragePlugin extends IPlugin {
|
|
64
|
+
onBeforeSet?<T>(value: T, context: PluginContext): Promise<T>;
|
|
65
|
+
onAfterSet?<T>(key: StorageKeyType, value: T, context: PluginContext): Promise<T>;
|
|
66
|
+
onBeforeGet?(key: StorageKeyType, context: PluginContext): Promise<StorageKeyType>;
|
|
67
|
+
onAfterGet?<T>(key: StorageKeyType, value: T | undefined, context: PluginContext): Promise<T | undefined>;
|
|
68
|
+
onBeforeDelete?(key: StorageKeyType, context: PluginContext): Promise<boolean>;
|
|
69
|
+
onAfterDelete?(key: StorageKeyType, context: PluginContext): Promise<void>;
|
|
70
|
+
onClear?(context: PluginContext): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Исполнитель плагинов для асинхронных хранилищ.
|
|
74
|
+
* Все execute* методы возвращают Promise.
|
|
75
|
+
*/
|
|
76
|
+
export interface IAsyncPluginExecutor {
|
|
77
|
+
executeBeforeSet<T>(value: T, metadata?: Record<string, any>): Promise<T>;
|
|
78
|
+
executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): Promise<T>;
|
|
79
|
+
executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): Promise<StorageKeyType>;
|
|
80
|
+
executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): Promise<T | undefined>;
|
|
81
|
+
executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<boolean>;
|
|
82
|
+
executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<void>;
|
|
83
|
+
executeOnClear(metadata?: Record<string, any>): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
/** @deprecated Use IAsyncStoragePlugin */
|
|
86
|
+
export type IStoragePlugin = IAsyncStoragePlugin;
|
|
87
|
+
/** @deprecated Use IAsyncPluginExecutor */
|
|
88
|
+
export type IPluginExecutor = IAsyncPluginExecutor;
|
|
89
|
+
/**
|
|
90
|
+
* Менеджер плагинов
|
|
91
|
+
* Отвечает за регистрацию, получение и удаление плагинов
|
|
92
|
+
*/
|
|
93
|
+
export interface IPluginManager<T extends IPlugin> {
|
|
94
|
+
add(plugin: T): Promise<void>;
|
|
95
|
+
remove(name: string): Promise<void>;
|
|
96
|
+
get(name: string): T | undefined;
|
|
97
|
+
getAll(): T[];
|
|
98
|
+
initialize(): Promise<void>;
|
|
99
|
+
destroy(): Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=plugin.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.interface.d.ts","sourceRoot":"","sources":["../../../../../src/core/storage/modules/plugin/plugin.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/modules/plugin/plugin.interface.js","sources":["../../../../../src/core/storage/modules/plugin/plugin.interface.ts"],"sourcesContent":["import { StorageKeyType } from '../../utils/storage-key'\n\n/**\n * Контекст выполнения для плагинов\n * Содержит информацию о текущей операции и хранилище\n */\nexport interface PluginContext {\n /** Имя хранилища, к которому применяется плагин */\n storageName: string\n\n /** Временная метка выполнения операции (timestamp) */\n timestamp: number\n\n /** Дополнительные метаданные операции (могут быть предоставлены хранилищем или другими плагинами) */\n metadata?: Record<string, any>\n}\n\n/**\n * Базовый интерфейс для всех плагинов\n * Определяет основные свойства и методы жизненного цикла\n */\nexport interface IPlugin {\n /** Уникальное имя плагина */\n name: string\n\n /**\n * Метод инициализации плагина\n * Вызывается при добавлении плагина в хранилище или при инициализации хранилища\n */\n initialize?(): Promise<void>\n\n /**\n * Метод уничтожения плагина\n * Вызывается при удалении плагина из хранилища или при уничтожении хранилища\n * Используется для освобождения ресурсов и очистки состояния\n */\n destroy?(): Promise<void>\n}\n\n// ─── Sync Storage Plugin ──────────────────────────────────────────────────────\n\n/**\n * Интерфейс плагина для синхронного хранилища.\n * Все хуки выполняются синхронно.\n */\nexport interface ISyncStoragePlugin extends IPlugin {\n onBeforeSet?<T>(value: T, context: PluginContext): T\n onAfterSet?<T>(key: StorageKeyType, value: T, context: PluginContext): T\n onBeforeGet?(key: StorageKeyType, context: PluginContext): StorageKeyType\n onAfterGet?<T>(key: StorageKeyType, value: T | undefined, context: PluginContext): T | undefined\n onBeforeDelete?(key: StorageKeyType, context: PluginContext): boolean\n onAfterDelete?(key: StorageKeyType, context: PluginContext): void\n onClear?(context: PluginContext): void\n}\n\n/**\n * Исполнитель плагинов для синхронных хранилищ.\n * Все execute* методы возвращают значения синхронно.\n */\nexport interface ISyncPluginExecutor {\n executeBeforeSet<T>(value: T, metadata?: Record<string, any>): T\n executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): T\n executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): StorageKeyType\n executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): T | undefined\n executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): boolean\n executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): void\n executeOnClear(metadata?: Record<string, any>): void\n}\n\n// ─── Async Storage Plugin ─────────────────────────────────────────────────────\n\n/**\n * Интерфейс плагина для асинхронного хранилища.\n * Все хуки возвращают Promise.\n */\nexport interface IAsyncStoragePlugin extends IPlugin {\n onBeforeSet?<T>(value: T, context: PluginContext): Promise<T>\n onAfterSet?<T>(key: StorageKeyType, value: T, context: PluginContext): Promise<T>\n onBeforeGet?(key: StorageKeyType, context: PluginContext): Promise<StorageKeyType>\n onAfterGet?<T>(key: StorageKeyType, value: T | undefined, context: PluginContext): Promise<T | undefined>\n onBeforeDelete?(key: StorageKeyType, context: PluginContext): Promise<boolean>\n onAfterDelete?(key: StorageKeyType, context: PluginContext): Promise<void>\n onClear?(context: PluginContext): Promise<void>\n}\n\n/**\n * Исполнитель плагинов для асинхронных хранилищ.\n * Все execute* методы возвращают Promise.\n */\nexport interface IAsyncPluginExecutor {\n executeBeforeSet<T>(value: T, metadata?: Record<string, any>): Promise<T>\n executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): Promise<T>\n executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): Promise<StorageKeyType>\n executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): Promise<T | undefined>\n executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<boolean>\n executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<void>\n executeOnClear(metadata?: Record<string, any>): Promise<void>\n}\n\n// ─── Backward Compatibility Aliases ───────────────────────────────────────────\n\n/** @deprecated Use IAsyncStoragePlugin */\nexport type IStoragePlugin = IAsyncStoragePlugin\n\n/** @deprecated Use IAsyncPluginExecutor */\nexport type IPluginExecutor = IAsyncPluginExecutor\n\n// ─── Plugin Manager ───────────────────────────────────────────────────────────\n\n/**\n * Менеджер плагинов\n * Отвечает за регистрацию, получение и удаление плагинов\n */\nexport interface IPluginManager<T extends IPlugin> {\n add(plugin: T): Promise<void>\n remove(name: string): Promise<void>\n get(name: string): T | undefined\n getAll(): T[]\n initialize(): Promise<void>\n destroy(): Promise<void>\n}\n"],"names":[],"mappings":"AA2GA,iFAAiF;AAEjF;;;CAGC,GAQA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ILogger } from '../../storage.interface';
|
|
2
|
+
import { StorageKeyType } from '../../utils/storage-key';
|
|
3
|
+
import { IAsyncPluginExecutor, IAsyncStoragePlugin, IPluginManager, ISyncPluginExecutor, ISyncStoragePlugin } from './plugin.interface';
|
|
4
|
+
export declare class SyncStoragePluginModule implements IPluginManager<ISyncStoragePlugin>, ISyncPluginExecutor {
|
|
5
|
+
protected readonly parentExecutor?: ISyncPluginExecutor | undefined;
|
|
6
|
+
protected readonly logger?: ILogger | undefined;
|
|
7
|
+
protected readonly storageName: string;
|
|
8
|
+
private plugins;
|
|
9
|
+
constructor(parentExecutor?: ISyncPluginExecutor | undefined, logger?: ILogger | undefined, storageName?: string);
|
|
10
|
+
private createContext;
|
|
11
|
+
add(plugin: ISyncStoragePlugin): Promise<void>;
|
|
12
|
+
remove(name: string): Promise<void>;
|
|
13
|
+
get(name: string): ISyncStoragePlugin | undefined;
|
|
14
|
+
getAll(): ISyncStoragePlugin[];
|
|
15
|
+
initialize(): Promise<void>;
|
|
16
|
+
destroy(): Promise<void>;
|
|
17
|
+
executeBeforeSet<T>(value: T, metadata?: Record<string, any>): T;
|
|
18
|
+
executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): T;
|
|
19
|
+
executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): StorageKeyType;
|
|
20
|
+
executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): T | undefined;
|
|
21
|
+
executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): boolean;
|
|
22
|
+
executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): void;
|
|
23
|
+
executeOnClear(metadata?: Record<string, any>): void;
|
|
24
|
+
}
|
|
25
|
+
export declare class AsyncStoragePluginModule implements IPluginManager<IAsyncStoragePlugin>, IAsyncPluginExecutor {
|
|
26
|
+
protected readonly parentExecutor?: IAsyncPluginExecutor | undefined;
|
|
27
|
+
protected readonly logger?: ILogger | undefined;
|
|
28
|
+
protected readonly storageName: string;
|
|
29
|
+
private plugins;
|
|
30
|
+
constructor(parentExecutor?: IAsyncPluginExecutor | undefined, logger?: ILogger | undefined, storageName?: string);
|
|
31
|
+
private createContext;
|
|
32
|
+
add(plugin: IAsyncStoragePlugin): Promise<void>;
|
|
33
|
+
remove(name: string): Promise<void>;
|
|
34
|
+
get(name: string): IAsyncStoragePlugin | undefined;
|
|
35
|
+
getAll(): IAsyncStoragePlugin[];
|
|
36
|
+
initialize(): Promise<void>;
|
|
37
|
+
destroy(): Promise<void>;
|
|
38
|
+
executeBeforeSet<T>(value: T, metadata?: Record<string, any>): Promise<T>;
|
|
39
|
+
executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): Promise<T>;
|
|
40
|
+
executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): Promise<StorageKeyType>;
|
|
41
|
+
executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): Promise<T | undefined>;
|
|
42
|
+
executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<boolean>;
|
|
43
|
+
executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<void>;
|
|
44
|
+
executeOnClear(metadata?: Record<string, any>): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
/** @deprecated Use AsyncStoragePluginModule */
|
|
47
|
+
export declare class StoragePluginModule extends AsyncStoragePluginModule {
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=plugin.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.service.d.ts","sourceRoot":"","sources":["../../../../../src/core/storage/modules/plugin/plugin.service.ts"],"names":[],"mappings":"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"}
|