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,481 @@
|
|
|
1
|
+
import { syncBatchingMiddleware } from "../middlewares/sync-storage-batching.middleware.js";
|
|
2
|
+
import { syncShallowCompareMiddleware } from "../middlewares/sync-storage-shallow-compare.middleware.js";
|
|
3
|
+
import { StorageEvents } from "../storage.interface.js";
|
|
4
|
+
import { SyncMiddlewareModule, VALUE_NOT_CHANGED } from "../utils/middleware-module.js";
|
|
5
|
+
import { createDummyState, extractPath } from "../utils/path-selector.util.js";
|
|
6
|
+
import { createLazyClone, findChangedPaths, isEqual } from "../utils/state-diff.util.js";
|
|
7
|
+
import { getValueByPath } from "./path.utils.js";
|
|
8
|
+
import { GLOBAL_SUBSCRIPTION_KEY, StorageCore } from "./storage-core.js";
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Базовый класс для синхронных хранилищ (Memory, LocalStorage).
|
|
28
|
+
*
|
|
29
|
+
* Все CRUD-операции выполняются синхронно.
|
|
30
|
+
* Lifecycle (initialize, destroy) остаётся async.
|
|
31
|
+
* subscribeByKey упрощён — нет race condition без async get.
|
|
32
|
+
*/ class SyncBaseStorage extends StorageCore {
|
|
33
|
+
config;
|
|
34
|
+
pluginExecutor;
|
|
35
|
+
middlewareModule;
|
|
36
|
+
initializedMiddlewares = null;
|
|
37
|
+
selectorPathCache = new WeakMap();
|
|
38
|
+
constructor(config, pluginExecutor, eventEmitter, logger){
|
|
39
|
+
super(config, eventEmitter, logger), this.config = config, this.pluginExecutor = pluginExecutor;
|
|
40
|
+
this.middlewareModule = new SyncMiddlewareModule({
|
|
41
|
+
getState: ()=>this.getRawState(),
|
|
42
|
+
doGet: this.doGet.bind(this),
|
|
43
|
+
doSet: this.doSet.bind(this),
|
|
44
|
+
doUpdate: this.doUpdate.bind(this),
|
|
45
|
+
doRemove: this.doRemove.bind(this),
|
|
46
|
+
doClear: this.doClear.bind(this),
|
|
47
|
+
doKeys: this.doKeys.bind(this),
|
|
48
|
+
notifySubscribers: this.notifySubscribers.bind(this)
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// ─── Lifecycle hooks ────────────────────────────────────────────────────────
|
|
52
|
+
async performInitialize() {
|
|
53
|
+
await this.doInitialize();
|
|
54
|
+
this._stateCache = this.getRawState();
|
|
55
|
+
}
|
|
56
|
+
async performCleanup() {
|
|
57
|
+
// Обходим публичный clear() (избегая ensureReady после _isDestroyed = true)
|
|
58
|
+
this.pluginExecutor?.executeOnClear();
|
|
59
|
+
this.doClear();
|
|
60
|
+
await this.doDestroy();
|
|
61
|
+
if (this.initializedMiddlewares) {
|
|
62
|
+
this.initializedMiddlewares.forEach((m)=>m.cleanup?.());
|
|
63
|
+
this.initializedMiddlewares = null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// ─── Middleware initialization ──────────────────────────────────────────────
|
|
67
|
+
initializeMiddlewares() {
|
|
68
|
+
if (this.config.middlewares && !this.initializedMiddlewares) {
|
|
69
|
+
this.initializedMiddlewares = this.config.middlewares(()=>this.getDefaultMiddleware());
|
|
70
|
+
this.initializedMiddlewares.forEach((middleware)=>this.middlewareModule.use(middleware));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
getDefaultMiddleware() {
|
|
74
|
+
return {
|
|
75
|
+
batching: (options = {})=>syncBatchingMiddleware(options),
|
|
76
|
+
shallowCompare: (options = {})=>syncShallowCompareMiddleware(options)
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
initializeWithMiddlewares() {
|
|
80
|
+
try {
|
|
81
|
+
const state = this.getRawState();
|
|
82
|
+
const hasExistingState = Object.keys(state).length > 0;
|
|
83
|
+
if (!hasExistingState && this.config.initialState) {
|
|
84
|
+
this.middlewareModule.dispatch({
|
|
85
|
+
type: 'init',
|
|
86
|
+
value: this.config.initialState
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
} catch (error) {
|
|
90
|
+
this.logger?.error('Ошибка инициализации хранилища', {
|
|
91
|
+
error
|
|
92
|
+
});
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ─── Internal state access ──────────────────────────────────────────────────
|
|
97
|
+
getRawState() {
|
|
98
|
+
try {
|
|
99
|
+
const value = this.doGet('');
|
|
100
|
+
return value || {};
|
|
101
|
+
} catch (error) {
|
|
102
|
+
this.logger?.error('Error getting state', {
|
|
103
|
+
error
|
|
104
|
+
});
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// ─── Public sync API ────────────────────────────────────────────────────────
|
|
109
|
+
get(key) {
|
|
110
|
+
this.ensureReady();
|
|
111
|
+
try {
|
|
112
|
+
const metadata = {
|
|
113
|
+
operation: 'get',
|
|
114
|
+
timestamp: Date.now(),
|
|
115
|
+
key
|
|
116
|
+
};
|
|
117
|
+
const middlewareResult = this.middlewareModule.dispatch({
|
|
118
|
+
type: 'get',
|
|
119
|
+
key,
|
|
120
|
+
metadata
|
|
121
|
+
});
|
|
122
|
+
const finalResult = this.pluginExecutor?.executeAfterGet(key, middlewareResult, metadata) ?? middlewareResult;
|
|
123
|
+
this.emitEvent({
|
|
124
|
+
type: StorageEvents.STORAGE_SELECT,
|
|
125
|
+
payload: {
|
|
126
|
+
key,
|
|
127
|
+
value: finalResult
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return finalResult;
|
|
131
|
+
} catch (error) {
|
|
132
|
+
this.logger?.error('Error getting value', {
|
|
133
|
+
key,
|
|
134
|
+
error
|
|
135
|
+
});
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
set(key, value) {
|
|
140
|
+
this.ensureReady();
|
|
141
|
+
try {
|
|
142
|
+
const metadata = {
|
|
143
|
+
operation: 'set',
|
|
144
|
+
timestamp: Date.now(),
|
|
145
|
+
key
|
|
146
|
+
};
|
|
147
|
+
const processedValue = this.pluginExecutor?.executeBeforeSet(value, metadata) ?? value;
|
|
148
|
+
const middlewareResult = this.middlewareModule.dispatch({
|
|
149
|
+
type: 'set',
|
|
150
|
+
key,
|
|
151
|
+
value: processedValue,
|
|
152
|
+
metadata
|
|
153
|
+
});
|
|
154
|
+
if (middlewareResult === VALUE_NOT_CHANGED) return;
|
|
155
|
+
const finalResult = this.pluginExecutor?.executeAfterSet(key, middlewareResult, metadata) ?? middlewareResult;
|
|
156
|
+
this._stateCache = this.getRawState();
|
|
157
|
+
const keyStr = key.toString();
|
|
158
|
+
const changedPaths = [
|
|
159
|
+
keyStr
|
|
160
|
+
];
|
|
161
|
+
this.notifySubscribers(key, finalResult);
|
|
162
|
+
this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {
|
|
163
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
164
|
+
key,
|
|
165
|
+
value: finalResult,
|
|
166
|
+
changedPaths
|
|
167
|
+
});
|
|
168
|
+
this.emitEvent({
|
|
169
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
170
|
+
payload: {
|
|
171
|
+
key,
|
|
172
|
+
value: finalResult,
|
|
173
|
+
changedPaths
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
} catch (error) {
|
|
177
|
+
this.logger?.error('Error setting value', {
|
|
178
|
+
key,
|
|
179
|
+
error
|
|
180
|
+
});
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
update(updater) {
|
|
185
|
+
this.ensureReady();
|
|
186
|
+
try {
|
|
187
|
+
const metadata = {
|
|
188
|
+
operation: 'update',
|
|
189
|
+
timestamp: Date.now()
|
|
190
|
+
};
|
|
191
|
+
const currentState = this.getState();
|
|
192
|
+
const newState = createLazyClone(currentState);
|
|
193
|
+
updater(newState);
|
|
194
|
+
const changedPaths = findChangedPaths(currentState, newState);
|
|
195
|
+
if (changedPaths.size === 0) {
|
|
196
|
+
this.logger?.debug?.('No changes detected in update');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.logger?.debug?.('Changed paths:', {
|
|
200
|
+
paths: Array.from(changedPaths)
|
|
201
|
+
});
|
|
202
|
+
const changedTopLevelKeys = new Set();
|
|
203
|
+
for (const path of changedPaths){
|
|
204
|
+
changedTopLevelKeys.add(path.split('.')[0]);
|
|
205
|
+
}
|
|
206
|
+
const updates = Array.from(changedTopLevelKeys).map((key)=>{
|
|
207
|
+
const keyMetadata = {
|
|
208
|
+
...metadata,
|
|
209
|
+
key
|
|
210
|
+
};
|
|
211
|
+
const processedValue = this.pluginExecutor?.executeBeforeSet(newState[key], keyMetadata) ?? newState[key];
|
|
212
|
+
return {
|
|
213
|
+
key,
|
|
214
|
+
value: processedValue
|
|
215
|
+
};
|
|
216
|
+
});
|
|
217
|
+
const result = this.middlewareModule.dispatch({
|
|
218
|
+
type: 'update',
|
|
219
|
+
value: updates,
|
|
220
|
+
metadata: {
|
|
221
|
+
...metadata,
|
|
222
|
+
batchUpdate: true,
|
|
223
|
+
changedPaths: Array.from(changedPaths)
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
let updatedValues = {};
|
|
227
|
+
if (Array.isArray(result)) {
|
|
228
|
+
result.forEach((update)=>{
|
|
229
|
+
if (update && typeof update === 'object' && 'key' in update && 'value' in update) {
|
|
230
|
+
updatedValues[update.key] = update.value;
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
} else if (result && typeof result === 'object') {
|
|
234
|
+
updatedValues = {
|
|
235
|
+
...result
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
const actuallyChangedKeys = Object.keys(updatedValues).filter((key)=>!isEqual(currentState[key], updatedValues[key]));
|
|
239
|
+
if (actuallyChangedKeys.length === 0) {
|
|
240
|
+
this.logger?.debug?.('No actual changes after middleware processing');
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const finalUpdates = {};
|
|
244
|
+
actuallyChangedKeys.forEach((key)=>{
|
|
245
|
+
finalUpdates[key] = updatedValues[key];
|
|
246
|
+
});
|
|
247
|
+
this.logger?.debug?.('Notifying subscribers about changes:', {
|
|
248
|
+
keys: actuallyChangedKeys
|
|
249
|
+
});
|
|
250
|
+
this._stateCache = {
|
|
251
|
+
...currentState,
|
|
252
|
+
...finalUpdates
|
|
253
|
+
};
|
|
254
|
+
this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {
|
|
255
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
256
|
+
key: actuallyChangedKeys,
|
|
257
|
+
value: finalUpdates,
|
|
258
|
+
changedPaths: Array.from(changedPaths)
|
|
259
|
+
});
|
|
260
|
+
for (const path of changedPaths){
|
|
261
|
+
try {
|
|
262
|
+
const topLevelKey = path.split('.')[0];
|
|
263
|
+
if (topLevelKey in finalUpdates) {
|
|
264
|
+
let value;
|
|
265
|
+
if (path === topLevelKey) {
|
|
266
|
+
value = finalUpdates[topLevelKey];
|
|
267
|
+
} else {
|
|
268
|
+
const restPath = path.substring(topLevelKey.length + 1);
|
|
269
|
+
value = getValueByPath(finalUpdates[topLevelKey], restPath);
|
|
270
|
+
}
|
|
271
|
+
if (value !== undefined) {
|
|
272
|
+
this.notifySubscribers(path, value);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
} catch (error) {
|
|
276
|
+
this.logger?.error('Error notifying path subscribers', {
|
|
277
|
+
path,
|
|
278
|
+
error
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
this.emitEvent({
|
|
283
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
284
|
+
payload: {
|
|
285
|
+
state: finalUpdates,
|
|
286
|
+
key: actuallyChangedKeys,
|
|
287
|
+
changedPaths: Array.from(changedPaths)
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
} catch (error) {
|
|
291
|
+
this.logger?.error('Error updating state', {
|
|
292
|
+
error
|
|
293
|
+
});
|
|
294
|
+
throw error;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
remove(key) {
|
|
298
|
+
this.ensureReady();
|
|
299
|
+
try {
|
|
300
|
+
const metadata = {
|
|
301
|
+
operation: 'delete',
|
|
302
|
+
timestamp: Date.now(),
|
|
303
|
+
key
|
|
304
|
+
};
|
|
305
|
+
const preventDeletion = this.pluginExecutor?.executeBeforeDelete(key, metadata);
|
|
306
|
+
if (preventDeletion === false) return;
|
|
307
|
+
const middlewareResult = this.middlewareModule.dispatch({
|
|
308
|
+
type: 'delete',
|
|
309
|
+
key,
|
|
310
|
+
metadata
|
|
311
|
+
});
|
|
312
|
+
if (middlewareResult === false) return;
|
|
313
|
+
this.pluginExecutor?.executeAfterDelete(key, metadata);
|
|
314
|
+
this._stateCache = this.getRawState();
|
|
315
|
+
const keyStr = key.toString();
|
|
316
|
+
const changedPaths = [
|
|
317
|
+
keyStr
|
|
318
|
+
];
|
|
319
|
+
this.notifySubscribers(key, undefined);
|
|
320
|
+
this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {
|
|
321
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
322
|
+
key,
|
|
323
|
+
value: undefined,
|
|
324
|
+
result: middlewareResult,
|
|
325
|
+
changedPaths
|
|
326
|
+
});
|
|
327
|
+
this.emitEvent({
|
|
328
|
+
type: StorageEvents.STORAGE_UPDATE,
|
|
329
|
+
payload: {
|
|
330
|
+
key,
|
|
331
|
+
value: undefined,
|
|
332
|
+
result: middlewareResult,
|
|
333
|
+
changedPaths
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
} catch (error) {
|
|
337
|
+
this.logger?.error('Error deleting value', {
|
|
338
|
+
key,
|
|
339
|
+
error
|
|
340
|
+
});
|
|
341
|
+
throw error;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
clear() {
|
|
345
|
+
this.ensureReady();
|
|
346
|
+
try {
|
|
347
|
+
this.pluginExecutor?.executeOnClear();
|
|
348
|
+
this.middlewareModule.dispatch({
|
|
349
|
+
type: 'clear'
|
|
350
|
+
});
|
|
351
|
+
this._stateCache = {};
|
|
352
|
+
} catch (error) {
|
|
353
|
+
this.logger?.error('Error clearing storage', {
|
|
354
|
+
error
|
|
355
|
+
});
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
reset() {
|
|
360
|
+
this.ensureReady();
|
|
361
|
+
try {
|
|
362
|
+
const initialState = this.config.initialState;
|
|
363
|
+
this.middlewareModule.dispatch({
|
|
364
|
+
type: 'reset',
|
|
365
|
+
value: initialState
|
|
366
|
+
});
|
|
367
|
+
this._stateCache = initialState ? {
|
|
368
|
+
...initialState
|
|
369
|
+
} : {};
|
|
370
|
+
const changedPaths = Object.keys(this._stateCache);
|
|
371
|
+
this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {
|
|
372
|
+
type: StorageEvents.STORAGE_CLEAR,
|
|
373
|
+
changedPaths
|
|
374
|
+
});
|
|
375
|
+
this.emitEvent({
|
|
376
|
+
type: StorageEvents.STORAGE_CLEAR,
|
|
377
|
+
payload: {
|
|
378
|
+
changedPaths
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
} catch (error) {
|
|
382
|
+
this.logger?.error('Error resetting storage', {
|
|
383
|
+
error
|
|
384
|
+
});
|
|
385
|
+
throw error;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
keys() {
|
|
389
|
+
this.ensureReady();
|
|
390
|
+
try {
|
|
391
|
+
return this.middlewareModule.dispatch({
|
|
392
|
+
type: 'keys'
|
|
393
|
+
});
|
|
394
|
+
} catch (error) {
|
|
395
|
+
this.logger?.error('Error getting keys', {
|
|
396
|
+
error
|
|
397
|
+
});
|
|
398
|
+
throw error;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
has(key) {
|
|
402
|
+
this.ensureReady();
|
|
403
|
+
try {
|
|
404
|
+
return this.doHas(key);
|
|
405
|
+
} catch (error) {
|
|
406
|
+
this.logger?.error('Error checking value existence', {
|
|
407
|
+
key,
|
|
408
|
+
error
|
|
409
|
+
});
|
|
410
|
+
throw error;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
getState() {
|
|
414
|
+
this.ensureReady();
|
|
415
|
+
return this.getRawState();
|
|
416
|
+
}
|
|
417
|
+
// ─── Subscriptions (4.4 — simplified for sync) ─────────────────────────────
|
|
418
|
+
/**
|
|
419
|
+
* Sync-версия subscribeByKey.
|
|
420
|
+
* Нет race condition (get() синхронный) → не нужен keyVersions tracking.
|
|
421
|
+
*/ subscribeByKey(key, callback) {
|
|
422
|
+
if (!this.subscribers.has(key)) {
|
|
423
|
+
this.subscribers.set(key, new Set());
|
|
424
|
+
}
|
|
425
|
+
this.subscribers.get(key).add(callback);
|
|
426
|
+
// Синхронно получаем начальное значение и сразу вызываем callback
|
|
427
|
+
try {
|
|
428
|
+
const value = this.get(key);
|
|
429
|
+
callback(value);
|
|
430
|
+
} catch (error) {
|
|
431
|
+
this.logger?.error('Error in initial callback', {
|
|
432
|
+
key,
|
|
433
|
+
error
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
return ()=>{
|
|
437
|
+
const subscribers = this.subscribers.get(key);
|
|
438
|
+
if (subscribers) {
|
|
439
|
+
subscribers.delete(callback);
|
|
440
|
+
if (subscribers.size === 0) {
|
|
441
|
+
this.subscribers.delete(key);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
subscribeBySelector(pathSelector, callback) {
|
|
447
|
+
const dummyState = createDummyState();
|
|
448
|
+
const fullPath = extractPath(pathSelector, dummyState, this.selectorPathCache);
|
|
449
|
+
this.logger?.debug?.('Subscribing to path:', {
|
|
450
|
+
path: fullPath
|
|
451
|
+
});
|
|
452
|
+
// Sync-обёртка: получаем текущее состояние синхронно и применяем селектор
|
|
453
|
+
const wrappedCallback = (value)=>{
|
|
454
|
+
try {
|
|
455
|
+
if (value === undefined || value === null || typeof value === 'object') {
|
|
456
|
+
const currentState = this.getState();
|
|
457
|
+
const selectedValue = pathSelector(currentState);
|
|
458
|
+
callback(selectedValue);
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
callback(value);
|
|
462
|
+
} catch (error) {
|
|
463
|
+
this.logger?.error('Error in selector callback', {
|
|
464
|
+
path: fullPath,
|
|
465
|
+
error
|
|
466
|
+
});
|
|
467
|
+
callback(value);
|
|
468
|
+
}
|
|
469
|
+
};
|
|
470
|
+
if (!fullPath) {
|
|
471
|
+
return this.subscribeToAll(()=>{
|
|
472
|
+
callback(pathSelector(this.getState()));
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
return this.subscribeByKey(fullPath, wrappedCallback);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
export { SyncBaseStorage };
|
|
480
|
+
|
|
481
|
+
//# sourceMappingURL=sync-base-storage.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/adapters/sync-base-storage.service.js","sources":["../../../../src/core/storage/adapters/sync-base-storage.service.ts"],"sourcesContent":["import { syncBatchingMiddleware } from '../middlewares/sync-storage-batching.middleware'\nimport { syncShallowCompareMiddleware } from '../middlewares/sync-storage-shallow-compare.middleware'\nimport { ISyncPluginExecutor } from '../modules/plugin/plugin.interface'\nimport { IEventEmitter, ILogger, ISyncStorage, StorageEvents, StorageType, SyncDefaultMiddlewares, SyncStorageConfig } from '../storage.interface'\nimport { SyncMiddleware, SyncMiddlewareModule, VALUE_NOT_CHANGED } from '../utils/middleware-module'\nimport { createDummyState, extractPath } from '../utils/path-selector.util'\nimport { createLazyClone, findChangedPaths, isEqual } from '../utils/state-diff.util'\nimport { StorageKeyType } from '../utils/storage-key'\nimport { getValueByPath } from './path.utils'\nimport { GLOBAL_SUBSCRIPTION_KEY, PathSelector, StorageCore } from './storage-core'\n\n/**\n * Базовый класс для синхронных хранилищ (Memory, LocalStorage).\n *\n * Все CRUD-операции выполняются синхронно.\n * Lifecycle (initialize, destroy) остаётся async.\n * subscribeByKey упрощён — нет race condition без async get.\n */\nexport abstract class SyncBaseStorage<T extends Record<string, any>> extends StorageCore<T> implements ISyncStorage<T> {\n abstract readonly type: StorageType\n\n private middlewareModule: SyncMiddlewareModule\n private initializedMiddlewares: SyncMiddleware[] | null = null\n private selectorPathCache = new WeakMap<PathSelector<any, any>, string>()\n\n constructor(\n protected readonly config: SyncStorageConfig<T>,\n protected readonly pluginExecutor?: ISyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ) {\n super(config, eventEmitter, logger)\n this.middlewareModule = new SyncMiddlewareModule({\n getState: () => this.getRawState(),\n doGet: this.doGet.bind(this),\n doSet: this.doSet.bind(this),\n doUpdate: this.doUpdate.bind(this),\n doRemove: this.doRemove.bind(this),\n doClear: this.doClear.bind(this),\n doKeys: this.doKeys.bind(this),\n notifySubscribers: this.notifySubscribers.bind(this),\n })\n }\n\n // ─── Abstract sync do* methods ──────────────────────────────────────────────\n\n protected abstract doGet(key: StorageKeyType): any\n protected abstract doSet(key: StorageKeyType, value: any): void\n protected abstract doUpdate(updates: Array<{ key: StorageKeyType; value: any }>): void\n protected abstract doRemove(key: StorageKeyType): boolean\n protected abstract doClear(): void\n protected abstract doKeys(): string[]\n protected abstract doHas(key: StorageKeyType): boolean\n\n /** Lifecycle — всегда async */\n protected abstract doInitialize(): Promise<this>\n /** Lifecycle — всегда async */\n protected abstract doDestroy(): Promise<void>\n\n // ─── Lifecycle hooks ────────────────────────────────────────────────────────\n\n protected async performInitialize(): Promise<void> {\n await this.doInitialize()\n this._stateCache = this.getRawState()\n }\n\n protected async performCleanup(): Promise<void> {\n // Обходим публичный clear() (избегая ensureReady после _isDestroyed = true)\n this.pluginExecutor?.executeOnClear()\n this.doClear()\n\n await this.doDestroy()\n\n if (this.initializedMiddlewares) {\n this.initializedMiddlewares.forEach((m) => m.cleanup?.())\n this.initializedMiddlewares = null\n }\n }\n\n // ─── Middleware initialization ──────────────────────────────────────────────\n\n protected initializeMiddlewares(): void {\n if (this.config.middlewares && !this.initializedMiddlewares) {\n this.initializedMiddlewares = this.config.middlewares(() => this.getDefaultMiddleware())\n this.initializedMiddlewares.forEach((middleware) => this.middlewareModule.use(middleware))\n }\n }\n\n protected getDefaultMiddleware(): SyncDefaultMiddlewares {\n return {\n batching: (options = {}) => syncBatchingMiddleware(options),\n shallowCompare: (options = {}) => syncShallowCompareMiddleware(options),\n }\n }\n\n protected initializeWithMiddlewares(): void {\n try {\n const state = this.getRawState()\n const hasExistingState = Object.keys(state).length > 0\n\n if (!hasExistingState && this.config.initialState) {\n this.middlewareModule.dispatch({\n type: 'init',\n value: this.config.initialState,\n })\n }\n } catch (error) {\n this.logger?.error('Ошибка инициализации хранилища', { error })\n throw error\n }\n }\n\n // ─── Internal state access ──────────────────────────────────────────────────\n\n private getRawState(): T {\n try {\n const value = this.doGet('')\n return value || {}\n } catch (error) {\n this.logger?.error('Error getting state', { error })\n throw error\n }\n }\n\n // ─── Public sync API ────────────────────────────────────────────────────────\n\n public get<R>(key: StorageKeyType): R | undefined {\n this.ensureReady()\n\n try {\n const metadata = { operation: 'get', timestamp: Date.now(), key }\n\n const middlewareResult = this.middlewareModule.dispatch({\n type: 'get',\n key,\n metadata,\n })\n\n const finalResult = this.pluginExecutor?.executeAfterGet(key, middlewareResult, metadata) ?? middlewareResult\n\n this.emitEvent({\n type: StorageEvents.STORAGE_SELECT,\n payload: { key, value: finalResult },\n })\n\n return finalResult\n } catch (error) {\n this.logger?.error('Error getting value', { key, error })\n throw error\n }\n }\n\n public set<R>(key: StorageKeyType, value: R): void {\n this.ensureReady()\n\n try {\n const metadata = { operation: 'set', timestamp: Date.now(), key }\n\n const processedValue = this.pluginExecutor?.executeBeforeSet(value, metadata) ?? value\n\n const middlewareResult = this.middlewareModule.dispatch({\n type: 'set',\n key,\n value: processedValue,\n metadata,\n })\n\n if (middlewareResult === VALUE_NOT_CHANGED) return\n\n const finalResult = this.pluginExecutor?.executeAfterSet(key, middlewareResult, metadata) ?? middlewareResult\n\n this._stateCache = this.getRawState()\n\n const keyStr = key.toString()\n const changedPaths = [keyStr]\n\n this.notifySubscribers(key, finalResult)\n\n this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {\n type: StorageEvents.STORAGE_UPDATE,\n key,\n value: finalResult,\n changedPaths,\n })\n\n this.emitEvent({\n type: StorageEvents.STORAGE_UPDATE,\n payload: { key, value: finalResult, changedPaths },\n })\n } catch (error) {\n this.logger?.error('Error setting value', { key, error })\n throw error\n }\n }\n\n public update(updater: (state: T) => void): void {\n this.ensureReady()\n\n try {\n const metadata = { operation: 'update', timestamp: Date.now() }\n\n const currentState = this.getState()\n const newState = createLazyClone(currentState)\n updater(newState)\n\n const changedPaths = findChangedPaths(currentState, newState)\n\n if (changedPaths.size === 0) {\n this.logger?.debug?.('No changes detected in update')\n return\n }\n\n this.logger?.debug?.('Changed paths:', { paths: Array.from(changedPaths) })\n\n const changedTopLevelKeys = new Set<string>()\n for (const path of changedPaths) {\n changedTopLevelKeys.add(path.split('.')[0])\n }\n\n const updates = Array.from(changedTopLevelKeys).map((key) => {\n const keyMetadata = { ...metadata, key }\n const processedValue = this.pluginExecutor?.executeBeforeSet(newState[key], keyMetadata) ?? newState[key]\n return { key, value: processedValue }\n })\n\n const result = this.middlewareModule.dispatch({\n type: 'update',\n value: updates,\n metadata: {\n ...metadata,\n batchUpdate: true,\n changedPaths: Array.from(changedPaths),\n },\n })\n\n let updatedValues: Record<string, any> = {}\n if (Array.isArray(result)) {\n result.forEach((update: any) => {\n if (update && typeof update === 'object' && 'key' in update && 'value' in update) {\n updatedValues[update.key as string] = update.value\n }\n })\n } else if (result && typeof result === 'object') {\n updatedValues = { ...result }\n }\n\n const actuallyChangedKeys = Object.keys(updatedValues).filter((key) => !isEqual(currentState[key], updatedValues[key]))\n\n if (actuallyChangedKeys.length === 0) {\n this.logger?.debug?.('No actual changes after middleware processing')\n return\n }\n\n const finalUpdates: Record<string, any> = {}\n actuallyChangedKeys.forEach((key) => {\n finalUpdates[key] = updatedValues[key]\n })\n\n this.logger?.debug?.('Notifying subscribers about changes:', { keys: actuallyChangedKeys })\n\n this._stateCache = { ...currentState, ...finalUpdates } as T\n\n this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {\n type: StorageEvents.STORAGE_UPDATE,\n key: actuallyChangedKeys,\n value: finalUpdates,\n changedPaths: Array.from(changedPaths),\n })\n\n for (const path of changedPaths) {\n try {\n const topLevelKey = path.split('.')[0]\n if (topLevelKey in finalUpdates) {\n let value\n if (path === topLevelKey) {\n value = finalUpdates[topLevelKey]\n } else {\n const restPath = path.substring(topLevelKey.length + 1)\n value = getValueByPath(finalUpdates[topLevelKey], restPath)\n }\n if (value !== undefined) {\n this.notifySubscribers(path, value)\n }\n }\n } catch (error) {\n this.logger?.error('Error notifying path subscribers', { path, error })\n }\n }\n\n this.emitEvent({\n type: StorageEvents.STORAGE_UPDATE,\n payload: {\n state: finalUpdates,\n key: actuallyChangedKeys,\n changedPaths: Array.from(changedPaths),\n },\n })\n } catch (error) {\n this.logger?.error('Error updating state', { error })\n throw error\n }\n }\n\n public remove(key: StorageKeyType): void {\n this.ensureReady()\n\n try {\n const metadata = { operation: 'delete', timestamp: Date.now(), key }\n\n const preventDeletion = this.pluginExecutor?.executeBeforeDelete(key, metadata)\n if (preventDeletion === false) return\n\n const middlewareResult = this.middlewareModule.dispatch({\n type: 'delete',\n key,\n metadata,\n })\n\n if (middlewareResult === false) return\n\n this.pluginExecutor?.executeAfterDelete(key, metadata)\n\n this._stateCache = this.getRawState()\n\n const keyStr = key.toString()\n const changedPaths = [keyStr]\n\n this.notifySubscribers(key, undefined)\n this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {\n type: StorageEvents.STORAGE_UPDATE,\n key,\n value: undefined,\n result: middlewareResult,\n changedPaths,\n })\n\n this.emitEvent({\n type: StorageEvents.STORAGE_UPDATE,\n payload: { key, value: undefined, result: middlewareResult, changedPaths },\n })\n } catch (error) {\n this.logger?.error('Error deleting value', { key, error })\n throw error\n }\n }\n\n public clear(): void {\n this.ensureReady()\n\n try {\n this.pluginExecutor?.executeOnClear()\n\n this.middlewareModule.dispatch({ type: 'clear' })\n\n this._stateCache = {} as T\n } catch (error) {\n this.logger?.error('Error clearing storage', { error })\n throw error\n }\n }\n\n public reset(): void {\n this.ensureReady()\n\n try {\n const initialState = this.config.initialState\n\n this.middlewareModule.dispatch({\n type: 'reset',\n value: initialState,\n })\n\n this._stateCache = initialState ? ({ ...initialState } as T) : ({} as T)\n\n const changedPaths = Object.keys(this._stateCache)\n\n this.notifySubscribers(GLOBAL_SUBSCRIPTION_KEY, {\n type: StorageEvents.STORAGE_CLEAR,\n changedPaths,\n })\n\n this.emitEvent({\n type: StorageEvents.STORAGE_CLEAR,\n payload: { changedPaths },\n })\n } catch (error) {\n this.logger?.error('Error resetting storage', { error })\n throw error\n }\n }\n\n public keys(): string[] {\n this.ensureReady()\n\n try {\n return this.middlewareModule.dispatch({ type: 'keys' })\n } catch (error) {\n this.logger?.error('Error getting keys', { error })\n throw error\n }\n }\n\n public has(key: StorageKeyType): boolean {\n this.ensureReady()\n try {\n return this.doHas(key)\n } catch (error) {\n this.logger?.error('Error checking value existence', { key, error })\n throw error\n }\n }\n\n public getState(): T {\n this.ensureReady()\n return this.getRawState()\n }\n\n // ─── Subscriptions (4.4 — simplified for sync) ─────────────────────────────\n\n /**\n * Sync-версия subscribeByKey.\n * Нет race condition (get() синхронный) → не нужен keyVersions tracking.\n */\n protected subscribeByKey(key: string, callback: (value: any) => void): VoidFunction {\n if (!this.subscribers.has(key)) {\n this.subscribers.set(key, new Set())\n }\n this.subscribers.get(key)!.add(callback)\n\n // Синхронно получаем начальное значение и сразу вызываем callback\n try {\n const value = this.get(key)\n callback(value)\n } catch (error) {\n this.logger?.error('Error in initial callback', { key, error })\n }\n\n return () => {\n const subscribers = this.subscribers.get(key)\n if (subscribers) {\n subscribers.delete(callback)\n if (subscribers.size === 0) {\n this.subscribers.delete(key)\n }\n }\n }\n }\n\n protected subscribeBySelector<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction {\n const dummyState = createDummyState<T>()\n const fullPath = extractPath(pathSelector, dummyState, this.selectorPathCache)\n\n this.logger?.debug?.('Subscribing to path:', { path: fullPath })\n\n // Sync-обёртка: получаем текущее состояние синхронно и применяем селектор\n const wrappedCallback = (value: any) => {\n try {\n if (value === undefined || value === null || typeof value === 'object') {\n const currentState = this.getState()\n const selectedValue = pathSelector(currentState)\n callback(selectedValue as R)\n return\n }\n callback(value as R)\n } catch (error) {\n this.logger?.error('Error in selector callback', { path: fullPath, error })\n callback(value as R)\n }\n }\n\n if (!fullPath) {\n return this.subscribeToAll(() => {\n callback(pathSelector(this.getState()))\n })\n }\n\n return this.subscribeByKey(fullPath, wrappedCallback)\n }\n}\n"],"names":["syncBatchingMiddleware","syncShallowCompareMiddleware","StorageEvents","SyncMiddlewareModule","VALUE_NOT_CHANGED","createDummyState","extractPath","createLazyClone","findChangedPaths","isEqual","getValueByPath","GLOBAL_SUBSCRIPTION_KEY","StorageCore","SyncBaseStorage","WeakMap","config","pluginExecutor","eventEmitter","logger","m","middleware","options","state","hasExistingState","Object","error","value","key","metadata","Date","middlewareResult","finalResult","processedValue","keyStr","changedPaths","updater","currentState","newState","Array","changedTopLevelKeys","Set","path","updates","keyMetadata","result","updatedValues","update","actuallyChangedKeys","finalUpdates","topLevelKey","restPath","undefined","preventDeletion","initialState","callback","subscribers","pathSelector","dummyState","fullPath","wrappedCallback","selectedValue"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from './modules/plugin/plugin.interface';
|
|
2
|
+
export * from './modules/plugin/plugin.service';
|
|
3
|
+
export { ConfigMergeStrategy } from './modules/singleton/models';
|
|
4
|
+
export * from './storage.interface';
|
|
5
|
+
export type { BatchingMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares';
|
|
6
|
+
export { broadcastMiddleware, syncBroadcastMiddleware } from './middlewares';
|
|
7
|
+
export { AsyncBaseStorage } from './adapters/async-base-storage.service';
|
|
8
|
+
export { IndexedDBStorage } from './adapters/indexed-DB.service';
|
|
9
|
+
export { LocalStorage } from './adapters/local-storage.service';
|
|
10
|
+
export { MemoryStorage } from './adapters/memory-storage.service';
|
|
11
|
+
export { StorageCore } from './adapters/storage-core';
|
|
12
|
+
export { SyncBaseStorage } from './adapters/sync-base-storage.service';
|
|
13
|
+
export { type AsyncMiddleware, type AsyncMiddlewareAPI, type AsyncNextFunction, type Middleware, type MiddlewareAPI, type NextFunction, type StorageAction, type SyncMiddleware, type SyncMiddlewareAPI, type SyncNextFunction, } from './utils/middleware-module';
|
|
14
|
+
export { StorageFactory } from './utils/storage-factory.util';
|
|
15
|
+
export { type StorageKeyType } from './utils/storage-key';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/storage/index.ts"],"names":[],"mappings":"AACA,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,cAAc,qBAAqB,CAAA;AAGnC,YAAY,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAG5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AAGtE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export * from "./modules/plugin/plugin.interface.js";
|
|
2
|
+
export * from "./modules/plugin/plugin.service.js";
|
|
3
|
+
export * from "./storage.interface.js";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// Экспортируем публичные интерфейсы
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
// Экспортируем публичные адаптеры
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
export { ConfigMergeStrategy } from "./modules/singleton/models.js";
|
|
29
|
+
export { broadcastMiddleware, syncBroadcastMiddleware } from "./middlewares/index.js";
|
|
30
|
+
export { AsyncBaseStorage } from "./adapters/async-base-storage.service.js";
|
|
31
|
+
export { IndexedDBStorage } from "./adapters/indexed-DB.service.js";
|
|
32
|
+
export { LocalStorage } from "./adapters/local-storage.service.js";
|
|
33
|
+
export { MemoryStorage } from "./adapters/memory-storage.service.js";
|
|
34
|
+
export { StorageCore } from "./adapters/storage-core.js";
|
|
35
|
+
export { SyncBaseStorage } from "./adapters/sync-base-storage.service.js";
|
|
36
|
+
export { StorageFactory } from "./utils/storage-factory.util.js";
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/index.js","sources":["../../../src/core/storage/index.ts"],"sourcesContent":["// Экспортируем публичные интерфейсы\nexport * from './modules/plugin/plugin.interface'\nexport * from './modules/plugin/plugin.service'\nexport { ConfigMergeStrategy } from './modules/singleton/models'\nexport * from './storage.interface'\n\n// Экспортируем публичные middleware\nexport type { BatchingMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares'\nexport { broadcastMiddleware, syncBroadcastMiddleware } from './middlewares'\n\n// Экспортируем публичные адаптеры\nexport { AsyncBaseStorage } from './adapters/async-base-storage.service'\nexport { IndexedDBStorage } from './adapters/indexed-DB.service'\nexport { LocalStorage } from './adapters/local-storage.service'\nexport { MemoryStorage } from './adapters/memory-storage.service'\nexport { StorageCore } from './adapters/storage-core'\nexport { SyncBaseStorage } from './adapters/sync-base-storage.service'\n\n// Экспортируем утилиты, которые нужны в публичном API\nexport {\n type AsyncMiddleware,\n type AsyncMiddlewareAPI,\n type AsyncNextFunction,\n type Middleware,\n type MiddlewareAPI,\n type NextFunction,\n type StorageAction,\n type SyncMiddleware,\n type SyncMiddlewareAPI,\n type SyncNextFunction,\n} from './utils/middleware-module'\nexport { StorageFactory } from './utils/storage-factory.util'\nexport { type StorageKeyType } from './utils/storage-key'\n"],"names":["ConfigMergeStrategy","broadcastMiddleware","syncBroadcastMiddleware","AsyncBaseStorage","IndexedDBStorage","LocalStorage","MemoryStorage","StorageCore","SyncBaseStorage","StorageFactory"],"mappings":";;;;;;;;;;;;AAAA,oCAAoC;AACa;AACF;AACiB;AAC7B;AAIyC;AAE5E,kCAAkC;AACsC;AACR;AACD;AACE;AACZ;AACiB;AAeT"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { StorageType } from '../storage.interface';
|
|
2
|
+
import { Middleware } from '../utils/middleware-module';
|
|
3
|
+
interface SharedStateMiddlewareProps {
|
|
4
|
+
storageType: StorageType;
|
|
5
|
+
storageName: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const broadcastMiddleware: (props: SharedStateMiddlewareProps) => Middleware;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=broadcast.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast.middleware.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/middlewares/broadcast.middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEjE,OAAO,EAAE,UAAU,EAA8C,MAAM,4BAA4B,CAAA;AAEnG,UAAU,0BAA0B;IAClC,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB;AA8GD,eAAO,MAAM,mBAAmB,GAAI,OAAO,0BAA0B,KAAG,UAgGvE,CAAA"}
|