synapse-storage 3.0.19 → 4.0.1
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 +28 -168
- 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 -106
- package/dist/core.js +0 -1
- package/dist/createSynapse-vkfKjRob.d.ts +0 -97
- package/dist/dispatcher.module-BOsMHbD5.d.ts +0 -360
- package/dist/react.d.ts +0 -119
- package/dist/react.js +0 -1
- package/dist/reactive.d.ts +0 -35
- package/dist/reactive.js +0 -1
- package/dist/storage.interface-BA_ktyDz.d.ts +0 -591
- package/dist/utils.d.ts +0 -139
- package/dist/utils.js +0 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { SingletonKeyGenerator, SingletonManager } from "../modules/singleton/singleton.util.js";
|
|
2
|
+
import { StorageEvents, StorageStatus } from "../storage.interface.js";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Общая константа для глобальной подписки.
|
|
10
|
+
* Используется в StorageCore и наследниках.
|
|
11
|
+
*/ const GLOBAL_SUBSCRIPTION_KEY = '*';
|
|
12
|
+
/**
|
|
13
|
+
* Абстрактный базовый класс с общей инфраструктурой хранилища.
|
|
14
|
+
*
|
|
15
|
+
* Содержит: status management, subscriptions, lifecycle wrappers,
|
|
16
|
+
* state cache, event emission, singleton cleanup.
|
|
17
|
+
*
|
|
18
|
+
* Не содержит: middleware, plugin executor, do* методы, публичные CRUD-операции.
|
|
19
|
+
*/ class StorageCore {
|
|
20
|
+
coreConfig;
|
|
21
|
+
eventEmitter;
|
|
22
|
+
logger;
|
|
23
|
+
name;
|
|
24
|
+
_initStatus = {
|
|
25
|
+
status: StorageStatus.IDLE
|
|
26
|
+
};
|
|
27
|
+
_isDestroyed = false;
|
|
28
|
+
statusSubscribers = new Set();
|
|
29
|
+
subscribers = new Map();
|
|
30
|
+
_stateCache = {};
|
|
31
|
+
keyVersions = new Map();
|
|
32
|
+
constructor(coreConfig, eventEmitter, logger){
|
|
33
|
+
this.coreConfig = coreConfig;
|
|
34
|
+
this.eventEmitter = eventEmitter;
|
|
35
|
+
this.logger = logger;
|
|
36
|
+
this.name = coreConfig.name;
|
|
37
|
+
}
|
|
38
|
+
// ─── Status Management ──────────────────────────────────────────────────────
|
|
39
|
+
get initStatus() {
|
|
40
|
+
return {
|
|
41
|
+
...this._initStatus
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async waitForReady() {
|
|
45
|
+
if (this._initStatus.status === StorageStatus.READY) return this;
|
|
46
|
+
if (this._initStatus.status === StorageStatus.ERROR) {
|
|
47
|
+
throw this._initStatus.error || new Error('Storage initialization failed');
|
|
48
|
+
}
|
|
49
|
+
return new Promise((resolve, reject)=>{
|
|
50
|
+
const unsubscribe = this.onStatusChange((status)=>{
|
|
51
|
+
if (status.status === StorageStatus.READY) {
|
|
52
|
+
unsubscribe();
|
|
53
|
+
resolve(this);
|
|
54
|
+
} else if (status.status === StorageStatus.ERROR) {
|
|
55
|
+
unsubscribe();
|
|
56
|
+
reject(status.error || new Error('Storage initialization failed'));
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
onStatusChange(callback) {
|
|
62
|
+
this.statusSubscribers.add(callback);
|
|
63
|
+
callback(this.initStatus);
|
|
64
|
+
return ()=>{
|
|
65
|
+
this.statusSubscribers.delete(callback);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
updateInitStatus(update) {
|
|
69
|
+
const previousStatus = this._initStatus.status;
|
|
70
|
+
this._initStatus = {
|
|
71
|
+
...this._initStatus,
|
|
72
|
+
...update
|
|
73
|
+
};
|
|
74
|
+
if (previousStatus !== this._initStatus.status) {
|
|
75
|
+
this.logger?.debug(`Storage "${this.name}" status changed: ${previousStatus} -> ${this._initStatus.status}`);
|
|
76
|
+
}
|
|
77
|
+
const statusCopy = this.initStatus;
|
|
78
|
+
this.statusSubscribers.forEach((callback)=>{
|
|
79
|
+
try {
|
|
80
|
+
callback(statusCopy);
|
|
81
|
+
} catch (error) {
|
|
82
|
+
this.logger?.error('Error in status change callback', {
|
|
83
|
+
error
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
ensureReady() {
|
|
89
|
+
if (this._isDestroyed) {
|
|
90
|
+
throw new Error(`Storage "${this.name}" has been destroyed`);
|
|
91
|
+
}
|
|
92
|
+
if (this._initStatus.status !== StorageStatus.READY) {
|
|
93
|
+
throw new Error(`Storage "${this.name}" is not ready. Current status: ${this._initStatus.status}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ─── State Cache ────────────────────────────────────────────────────────────
|
|
97
|
+
getStateSync() {
|
|
98
|
+
return this._stateCache;
|
|
99
|
+
}
|
|
100
|
+
// ─── Subscriptions ──────────────────────────────────────────────────────────
|
|
101
|
+
subscribeToAll(callback) {
|
|
102
|
+
if (!this.subscribers.has(GLOBAL_SUBSCRIPTION_KEY)) {
|
|
103
|
+
this.subscribers.set(GLOBAL_SUBSCRIPTION_KEY, new Set());
|
|
104
|
+
}
|
|
105
|
+
this.subscribers.get(GLOBAL_SUBSCRIPTION_KEY).add(callback);
|
|
106
|
+
return ()=>{
|
|
107
|
+
const subscribers = this.subscribers.get(GLOBAL_SUBSCRIPTION_KEY);
|
|
108
|
+
if (subscribers) {
|
|
109
|
+
subscribers.delete(callback);
|
|
110
|
+
if (subscribers.size === 0) {
|
|
111
|
+
this.subscribers.delete(GLOBAL_SUBSCRIPTION_KEY);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
subscribe(keyOrSelector, callback) {
|
|
117
|
+
if (typeof keyOrSelector === 'string') {
|
|
118
|
+
return this.subscribeByKey(keyOrSelector, callback);
|
|
119
|
+
}
|
|
120
|
+
return this.subscribeBySelector(keyOrSelector, callback);
|
|
121
|
+
}
|
|
122
|
+
notifySubscribers(key, value) {
|
|
123
|
+
const keyStr = key.toString();
|
|
124
|
+
// Инкрементируем версию ключа — используется для защиты от race condition в subscribeByKey (async)
|
|
125
|
+
this.keyVersions.set(keyStr, (this.keyVersions.get(keyStr) ?? 0) + 1);
|
|
126
|
+
const exactSubscribers = this.subscribers.get(keyStr);
|
|
127
|
+
if (exactSubscribers?.size) {
|
|
128
|
+
const subscribersCopy = new Set(exactSubscribers);
|
|
129
|
+
subscribersCopy.forEach((callback)=>{
|
|
130
|
+
try {
|
|
131
|
+
callback(value);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
this.logger?.error('Ошибка в подписчике на колбэк', {
|
|
134
|
+
key: keyStr,
|
|
135
|
+
error
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ─── Lifecycle ──────────────────────────────────────────────────────────────
|
|
142
|
+
async initialize() {
|
|
143
|
+
if (this._initStatus.status === StorageStatus.READY) return this;
|
|
144
|
+
if (this._initStatus.status === StorageStatus.LOADING) return this.waitForReady();
|
|
145
|
+
// Allow re-initialization after destroy
|
|
146
|
+
this._isDestroyed = false;
|
|
147
|
+
this.updateInitStatus({
|
|
148
|
+
status: StorageStatus.LOADING,
|
|
149
|
+
error: undefined
|
|
150
|
+
});
|
|
151
|
+
try {
|
|
152
|
+
await this.performInitialize();
|
|
153
|
+
this.updateInitStatus({
|
|
154
|
+
status: StorageStatus.READY,
|
|
155
|
+
error: undefined
|
|
156
|
+
});
|
|
157
|
+
return this;
|
|
158
|
+
} catch (error) {
|
|
159
|
+
this.updateInitStatus({
|
|
160
|
+
status: StorageStatus.ERROR,
|
|
161
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
162
|
+
});
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async destroy() {
|
|
167
|
+
if (this._isDestroyed) return;
|
|
168
|
+
this._isDestroyed = true;
|
|
169
|
+
try {
|
|
170
|
+
if (this._initStatus.status === StorageStatus.LOADING) {
|
|
171
|
+
try {
|
|
172
|
+
await this.waitForReady();
|
|
173
|
+
} catch {
|
|
174
|
+
// Инициализация упала — продолжаем destroy
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (this._initStatus.status === StorageStatus.READY) {
|
|
178
|
+
await this.performCleanup();
|
|
179
|
+
}
|
|
180
|
+
this.statusSubscribers.clear();
|
|
181
|
+
if (this.coreConfig.singleton?.enabled) {
|
|
182
|
+
const key = SingletonKeyGenerator.generate(this.coreConfig, this.type);
|
|
183
|
+
SingletonManager.remove(key);
|
|
184
|
+
}
|
|
185
|
+
this._stateCache = {};
|
|
186
|
+
this.updateInitStatus({
|
|
187
|
+
status: StorageStatus.IDLE
|
|
188
|
+
});
|
|
189
|
+
await this.emitEvent({
|
|
190
|
+
type: StorageEvents.STORAGE_DESTROY
|
|
191
|
+
});
|
|
192
|
+
} catch (error) {
|
|
193
|
+
this.logger?.error('Error destroying storage', {
|
|
194
|
+
error
|
|
195
|
+
});
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// ─── Events ─────────────────────────────────────────────────────────────────
|
|
200
|
+
async emitEvent(event) {
|
|
201
|
+
try {
|
|
202
|
+
await this.eventEmitter?.emit({
|
|
203
|
+
...event,
|
|
204
|
+
metadata: {
|
|
205
|
+
...event.metadata || {},
|
|
206
|
+
timestamp: Date.now(),
|
|
207
|
+
storageName: this.name
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
} catch (error) {
|
|
211
|
+
this.logger?.error('Error emitting event', {
|
|
212
|
+
event,
|
|
213
|
+
error
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export { GLOBAL_SUBSCRIPTION_KEY, StorageCore };
|
|
220
|
+
|
|
221
|
+
//# sourceMappingURL=storage-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/adapters/storage-core.js","sources":["../../../../src/core/storage/adapters/storage-core.ts"],"sourcesContent":["import { SingletonKeyGenerator, SingletonManager } from '../modules/singleton/singleton.util'\nimport { BaseStorageConfig, IEventEmitter, ILogger, IStorageBase, StorageEvent, StorageEvents, StorageInitStatus, StorageStatus, StorageType } from '../storage.interface'\nimport { StorageKeyType } from '../utils/storage-key'\n\nexport type PathSelector<T, R> = (state: T) => R\n\n/**\n * Общая константа для глобальной подписки.\n * Используется в StorageCore и наследниках.\n */\nexport const GLOBAL_SUBSCRIPTION_KEY = '*'\n\n/**\n * Абстрактный базовый класс с общей инфраструктурой хранилища.\n *\n * Содержит: status management, subscriptions, lifecycle wrappers,\n * state cache, event emission, singleton cleanup.\n *\n * Не содержит: middleware, plugin executor, do* методы, публичные CRUD-операции.\n */\nexport abstract class StorageCore<T extends Record<string, any>> implements IStorageBase<T> {\n name: string\n abstract readonly type: StorageType\n\n private _initStatus: StorageInitStatus = { status: StorageStatus.IDLE }\n private _isDestroyed = false\n private statusSubscribers = new Set<(status: StorageInitStatus) => void>()\n\n protected subscribers = new Map<StorageKeyType, Set<(value: any) => void>>()\n protected _stateCache: T = {} as T\n protected keyVersions = new Map<string, number>()\n\n constructor(\n protected readonly coreConfig: BaseStorageConfig<T>,\n protected readonly eventEmitter?: IEventEmitter,\n protected readonly logger?: ILogger,\n ) {\n this.name = coreConfig.name\n }\n\n // ─── Status Management ──────────────────────────────────────────────────────\n\n get initStatus(): StorageInitStatus {\n return { ...this._initStatus }\n }\n\n async waitForReady(): Promise<this> {\n if (this._initStatus.status === StorageStatus.READY) return this\n if (this._initStatus.status === StorageStatus.ERROR) {\n throw this._initStatus.error || new Error('Storage initialization failed')\n }\n\n return new Promise((resolve, reject) => {\n const unsubscribe = this.onStatusChange((status) => {\n if (status.status === StorageStatus.READY) {\n unsubscribe()\n resolve(this)\n } else if (status.status === StorageStatus.ERROR) {\n unsubscribe()\n reject(status.error || new Error('Storage initialization failed'))\n }\n })\n })\n }\n\n onStatusChange(callback: (status: StorageInitStatus) => void): VoidFunction {\n this.statusSubscribers.add(callback)\n callback(this.initStatus)\n\n return () => {\n this.statusSubscribers.delete(callback)\n }\n }\n\n protected updateInitStatus(update: Partial<StorageInitStatus>): void {\n const previousStatus = this._initStatus.status\n\n this._initStatus = { ...this._initStatus, ...update }\n\n if (previousStatus !== this._initStatus.status) {\n this.logger?.debug(`Storage \"${this.name}\" status changed: ${previousStatus} -> ${this._initStatus.status}`)\n }\n\n const statusCopy = this.initStatus\n this.statusSubscribers.forEach((callback) => {\n try {\n callback(statusCopy)\n } catch (error) {\n this.logger?.error('Error in status change callback', { error })\n }\n })\n }\n\n protected ensureReady(): void {\n if (this._isDestroyed) {\n throw new Error(`Storage \"${this.name}\" has been destroyed`)\n }\n if (this._initStatus.status !== StorageStatus.READY) {\n throw new Error(`Storage \"${this.name}\" is not ready. Current status: ${this._initStatus.status}`)\n }\n }\n\n // ─── State Cache ────────────────────────────────────────────────────────────\n\n public getStateSync(): T {\n return this._stateCache\n }\n\n // ─── Subscriptions ──────────────────────────────────────────────────────────\n\n public subscribeToAll(callback: (event: { type: string; key?: StorageKeyType[] | StorageKeyType; value?: any; changedPaths?: string[] }) => void): VoidFunction {\n if (!this.subscribers.has(GLOBAL_SUBSCRIPTION_KEY)) {\n this.subscribers.set(GLOBAL_SUBSCRIPTION_KEY, new Set())\n }\n\n this.subscribers.get(GLOBAL_SUBSCRIPTION_KEY)!.add(callback)\n\n return () => {\n const subscribers = this.subscribers.get(GLOBAL_SUBSCRIPTION_KEY)\n if (subscribers) {\n subscribers.delete(callback)\n if (subscribers.size === 0) {\n this.subscribers.delete(GLOBAL_SUBSCRIPTION_KEY)\n }\n }\n }\n }\n\n public subscribe(key: string, callback: (value: any) => void): VoidFunction\n public subscribe<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction\n public subscribe<R>(keyOrSelector: string | PathSelector<T, R>, callback: (value: any) => void): VoidFunction {\n if (typeof keyOrSelector === 'string') {\n return this.subscribeByKey(keyOrSelector, callback)\n }\n return this.subscribeBySelector(keyOrSelector, callback)\n }\n\n protected abstract subscribeByKey(key: string, callback: (value: any) => void): VoidFunction\n protected abstract subscribeBySelector<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction\n\n protected notifySubscribers(key: StorageKeyType, value: any): void {\n const keyStr = key.toString()\n\n // Инкрементируем версию ключа — используется для защиты от race condition в subscribeByKey (async)\n this.keyVersions.set(keyStr, (this.keyVersions.get(keyStr) ?? 0) + 1)\n\n const exactSubscribers = this.subscribers.get(keyStr)\n if (exactSubscribers?.size) {\n const subscribersCopy = new Set(exactSubscribers)\n subscribersCopy.forEach((callback) => {\n try {\n callback(value)\n } catch (error) {\n this.logger?.error('Ошибка в подписчике на колбэк', { key: keyStr, error })\n }\n })\n }\n }\n\n // ─── Lifecycle ──────────────────────────────────────────────────────────────\n\n public async initialize(): Promise<this> {\n if (this._initStatus.status === StorageStatus.READY) return this\n if (this._initStatus.status === StorageStatus.LOADING) return this.waitForReady()\n\n // Allow re-initialization after destroy\n this._isDestroyed = false\n\n this.updateInitStatus({ status: StorageStatus.LOADING, error: undefined })\n\n try {\n await this.performInitialize()\n this.updateInitStatus({ status: StorageStatus.READY, error: undefined })\n return this\n } catch (error) {\n this.updateInitStatus({\n status: StorageStatus.ERROR,\n error: error instanceof Error ? error : new Error(String(error)),\n })\n throw error\n }\n }\n\n /**\n * Subclass-specific initialization.\n * Called inside initialize() wrapper after status is set to LOADING.\n */\n protected abstract performInitialize(): Promise<void>\n\n public async destroy(): Promise<void> {\n if (this._isDestroyed) return\n this._isDestroyed = true\n\n try {\n if (this._initStatus.status === StorageStatus.LOADING) {\n try {\n await this.waitForReady()\n } catch {\n // Инициализация упала — продолжаем destroy\n }\n }\n\n if (this._initStatus.status === StorageStatus.READY) {\n await this.performCleanup()\n }\n\n this.statusSubscribers.clear()\n\n if (this.coreConfig.singleton?.enabled) {\n const key = SingletonKeyGenerator.generate(this.coreConfig as any, this.type)\n SingletonManager.remove(key)\n }\n\n this._stateCache = {} as T\n this.updateInitStatus({ status: StorageStatus.IDLE })\n\n await this.emitEvent({ type: StorageEvents.STORAGE_DESTROY })\n } catch (error) {\n this.logger?.error('Error destroying storage', { error })\n throw error\n }\n }\n\n /**\n * Subclass-specific cleanup during destroy.\n * Should clear storage data, call doDestroy, cleanup middlewares.\n */\n protected abstract performCleanup(): Promise<void>\n\n // ─── Events ─────────────────────────────────────────────────────────────────\n\n protected async emitEvent(event: StorageEvent): Promise<void> {\n try {\n await this.eventEmitter?.emit({\n ...event,\n metadata: {\n ...(event.metadata || {}),\n timestamp: Date.now(),\n storageName: this.name,\n },\n })\n } catch (error) {\n this.logger?.error('Error emitting event', { event, error })\n }\n }\n}\n"],"names":["SingletonKeyGenerator","SingletonManager","StorageEvents","StorageStatus","GLOBAL_SUBSCRIPTION_KEY","StorageCore","Set","Map","coreConfig","eventEmitter","logger","Error","Promise","resolve","reject","unsubscribe","status","callback","update","previousStatus","statusCopy","error","subscribers","keyOrSelector","key","value","keyStr","exactSubscribers","subscribersCopy","undefined","String","event","Date"],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ISyncPluginExecutor } from '../modules/plugin/plugin.interface';
|
|
2
|
+
import { IEventEmitter, ILogger, ISyncStorage, StorageType, SyncDefaultMiddlewares, SyncStorageConfig } from '../storage.interface';
|
|
3
|
+
import { StorageKeyType } from '../utils/storage-key';
|
|
4
|
+
import { PathSelector, StorageCore } from './storage-core';
|
|
5
|
+
/**
|
|
6
|
+
* Базовый класс для синхронных хранилищ (Memory, LocalStorage).
|
|
7
|
+
*
|
|
8
|
+
* Все CRUD-операции выполняются синхронно.
|
|
9
|
+
* Lifecycle (initialize, destroy) остаётся async.
|
|
10
|
+
* subscribeByKey упрощён — нет race condition без async get.
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class SyncBaseStorage<T extends Record<string, any>> extends StorageCore<T> implements ISyncStorage<T> {
|
|
13
|
+
protected readonly config: SyncStorageConfig<T>;
|
|
14
|
+
protected readonly pluginExecutor?: ISyncPluginExecutor | undefined;
|
|
15
|
+
abstract readonly type: StorageType;
|
|
16
|
+
private middlewareModule;
|
|
17
|
+
private initializedMiddlewares;
|
|
18
|
+
private selectorPathCache;
|
|
19
|
+
constructor(config: SyncStorageConfig<T>, pluginExecutor?: ISyncPluginExecutor | undefined, eventEmitter?: IEventEmitter, logger?: ILogger);
|
|
20
|
+
protected abstract doGet(key: StorageKeyType): any;
|
|
21
|
+
protected abstract doSet(key: StorageKeyType, value: any): void;
|
|
22
|
+
protected abstract doUpdate(updates: Array<{
|
|
23
|
+
key: StorageKeyType;
|
|
24
|
+
value: any;
|
|
25
|
+
}>): void;
|
|
26
|
+
protected abstract doRemove(key: StorageKeyType): boolean;
|
|
27
|
+
protected abstract doClear(): void;
|
|
28
|
+
protected abstract doKeys(): string[];
|
|
29
|
+
protected abstract doHas(key: StorageKeyType): boolean;
|
|
30
|
+
/** Lifecycle — всегда async */
|
|
31
|
+
protected abstract doInitialize(): Promise<this>;
|
|
32
|
+
/** Lifecycle — всегда async */
|
|
33
|
+
protected abstract doDestroy(): Promise<void>;
|
|
34
|
+
protected performInitialize(): Promise<void>;
|
|
35
|
+
protected performCleanup(): Promise<void>;
|
|
36
|
+
protected initializeMiddlewares(): void;
|
|
37
|
+
protected getDefaultMiddleware(): SyncDefaultMiddlewares;
|
|
38
|
+
protected initializeWithMiddlewares(): void;
|
|
39
|
+
private getRawState;
|
|
40
|
+
get<R>(key: StorageKeyType): R | undefined;
|
|
41
|
+
set<R>(key: StorageKeyType, value: R): void;
|
|
42
|
+
update(updater: (state: T) => void): void;
|
|
43
|
+
remove(key: StorageKeyType): void;
|
|
44
|
+
clear(): void;
|
|
45
|
+
reset(): void;
|
|
46
|
+
keys(): string[];
|
|
47
|
+
has(key: StorageKeyType): boolean;
|
|
48
|
+
getState(): T;
|
|
49
|
+
/**
|
|
50
|
+
* Sync-версия subscribeByKey.
|
|
51
|
+
* Нет race condition (get() синхронный) → не нужен keyVersions tracking.
|
|
52
|
+
*/
|
|
53
|
+
protected subscribeByKey(key: string, callback: (value: any) => void): VoidFunction;
|
|
54
|
+
protected subscribeBySelector<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=sync-base-storage.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-base-storage.service.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/adapters/sync-base-storage.service.ts"],"names":[],"mappings":"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"}
|