synapse-storage 3.0.19 → 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 +661 -104
- 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,406 @@
|
|
|
1
|
+
// ─── Sync Plugin Module ───────────────────────────────────────────────────────
|
|
2
|
+
class SyncStoragePluginModule {
|
|
3
|
+
parentExecutor;
|
|
4
|
+
logger;
|
|
5
|
+
storageName;
|
|
6
|
+
plugins = new Map();
|
|
7
|
+
constructor(parentExecutor, logger, storageName = 'default'){
|
|
8
|
+
this.parentExecutor = parentExecutor;
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
this.storageName = storageName;
|
|
11
|
+
}
|
|
12
|
+
createContext(metadata) {
|
|
13
|
+
return {
|
|
14
|
+
storageName: this.storageName,
|
|
15
|
+
timestamp: Date.now(),
|
|
16
|
+
metadata
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
async add(plugin) {
|
|
20
|
+
if (this.plugins.has(plugin.name)) {
|
|
21
|
+
this.logger?.warn(`Плагин ${plugin.name} уже был зарегистрирован`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
await plugin.initialize?.();
|
|
26
|
+
this.plugins.set(plugin.name, plugin);
|
|
27
|
+
this.logger?.info('Плагин добавлен', {
|
|
28
|
+
name: plugin.name
|
|
29
|
+
});
|
|
30
|
+
} catch (error) {
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async remove(name) {
|
|
35
|
+
const plugin = this.plugins.get(name);
|
|
36
|
+
if (plugin) {
|
|
37
|
+
await plugin.destroy?.();
|
|
38
|
+
this.plugins.delete(name);
|
|
39
|
+
this.logger?.info('Плагин удален', {
|
|
40
|
+
name
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
get(name) {
|
|
45
|
+
return this.plugins.get(name);
|
|
46
|
+
}
|
|
47
|
+
getAll() {
|
|
48
|
+
return Array.from(this.plugins.values());
|
|
49
|
+
}
|
|
50
|
+
async initialize() {
|
|
51
|
+
for (const plugin of this.plugins.values()){
|
|
52
|
+
await plugin.initialize?.();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async destroy() {
|
|
56
|
+
await Promise.all(Array.from(this.plugins.values()).map((plugin)=>plugin.destroy?.() ?? Promise.resolve()));
|
|
57
|
+
this.plugins.clear();
|
|
58
|
+
}
|
|
59
|
+
executeBeforeSet(value, metadata) {
|
|
60
|
+
let result = value;
|
|
61
|
+
const context = this.createContext(metadata);
|
|
62
|
+
if (this.parentExecutor) {
|
|
63
|
+
result = this.parentExecutor.executeBeforeSet(result, metadata);
|
|
64
|
+
}
|
|
65
|
+
for (const plugin of this.plugins.values()){
|
|
66
|
+
if (plugin.onBeforeSet) {
|
|
67
|
+
try {
|
|
68
|
+
result = plugin.onBeforeSet(result, context);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeSet`, {
|
|
71
|
+
error
|
|
72
|
+
});
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
executeAfterSet(key, value, metadata) {
|
|
80
|
+
let result = value;
|
|
81
|
+
const context = this.createContext(metadata);
|
|
82
|
+
if (this.parentExecutor) {
|
|
83
|
+
result = this.parentExecutor.executeAfterSet(key, result, metadata);
|
|
84
|
+
}
|
|
85
|
+
for (const plugin of this.plugins.values()){
|
|
86
|
+
if (plugin.onAfterSet) {
|
|
87
|
+
try {
|
|
88
|
+
result = plugin.onAfterSet(key, result, context);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterSet`, {
|
|
91
|
+
key,
|
|
92
|
+
error
|
|
93
|
+
});
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
executeBeforeGet(key, metadata) {
|
|
101
|
+
let processedKey = key;
|
|
102
|
+
const context = this.createContext(metadata);
|
|
103
|
+
if (this.parentExecutor) {
|
|
104
|
+
processedKey = this.parentExecutor.executeBeforeGet(processedKey, metadata);
|
|
105
|
+
}
|
|
106
|
+
for (const plugin of this.plugins.values()){
|
|
107
|
+
if (plugin.onBeforeGet) {
|
|
108
|
+
try {
|
|
109
|
+
processedKey = plugin.onBeforeGet(processedKey, context);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeGet`, {
|
|
112
|
+
key,
|
|
113
|
+
error
|
|
114
|
+
});
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return processedKey;
|
|
120
|
+
}
|
|
121
|
+
executeAfterGet(key, value, metadata) {
|
|
122
|
+
let result = value;
|
|
123
|
+
const context = this.createContext(metadata);
|
|
124
|
+
if (this.parentExecutor) {
|
|
125
|
+
result = this.parentExecutor.executeAfterGet(key, result, metadata);
|
|
126
|
+
}
|
|
127
|
+
for (const plugin of this.plugins.values()){
|
|
128
|
+
if (plugin.onAfterGet) {
|
|
129
|
+
try {
|
|
130
|
+
result = plugin.onAfterGet(key, result, context);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterGet`, {
|
|
133
|
+
key,
|
|
134
|
+
error
|
|
135
|
+
});
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
executeBeforeDelete(key, metadata) {
|
|
143
|
+
let canDelete = true;
|
|
144
|
+
const context = this.createContext(metadata);
|
|
145
|
+
if (this.parentExecutor) {
|
|
146
|
+
canDelete = this.parentExecutor.executeBeforeDelete(key, metadata);
|
|
147
|
+
}
|
|
148
|
+
for (const plugin of this.plugins.values()){
|
|
149
|
+
if (plugin.onBeforeDelete) {
|
|
150
|
+
try {
|
|
151
|
+
canDelete = plugin.onBeforeDelete(key, context) && canDelete;
|
|
152
|
+
} catch (error) {
|
|
153
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeDelete`, {
|
|
154
|
+
key,
|
|
155
|
+
error
|
|
156
|
+
});
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return canDelete;
|
|
162
|
+
}
|
|
163
|
+
executeAfterDelete(key, metadata) {
|
|
164
|
+
const context = this.createContext(metadata);
|
|
165
|
+
if (this.parentExecutor) {
|
|
166
|
+
this.parentExecutor.executeAfterDelete(key, metadata);
|
|
167
|
+
}
|
|
168
|
+
for (const plugin of this.plugins.values()){
|
|
169
|
+
if (plugin.onAfterDelete) {
|
|
170
|
+
try {
|
|
171
|
+
plugin.onAfterDelete(key, context);
|
|
172
|
+
} catch (error) {
|
|
173
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterDelete`, {
|
|
174
|
+
key,
|
|
175
|
+
error
|
|
176
|
+
});
|
|
177
|
+
throw error;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
executeOnClear(metadata) {
|
|
183
|
+
const context = this.createContext(metadata);
|
|
184
|
+
if (this.parentExecutor) {
|
|
185
|
+
this.parentExecutor.executeOnClear(metadata);
|
|
186
|
+
}
|
|
187
|
+
for (const plugin of this.plugins.values()){
|
|
188
|
+
if (plugin.onClear) {
|
|
189
|
+
try {
|
|
190
|
+
plugin.onClear(context);
|
|
191
|
+
} catch (error) {
|
|
192
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onClear`, {
|
|
193
|
+
error
|
|
194
|
+
});
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// ─── Async Plugin Module ──────────────────────────────────────────────────────
|
|
202
|
+
class AsyncStoragePluginModule {
|
|
203
|
+
parentExecutor;
|
|
204
|
+
logger;
|
|
205
|
+
storageName;
|
|
206
|
+
plugins = new Map();
|
|
207
|
+
constructor(parentExecutor, logger, storageName = 'default'){
|
|
208
|
+
this.parentExecutor = parentExecutor;
|
|
209
|
+
this.logger = logger;
|
|
210
|
+
this.storageName = storageName;
|
|
211
|
+
}
|
|
212
|
+
createContext(metadata) {
|
|
213
|
+
return {
|
|
214
|
+
storageName: this.storageName,
|
|
215
|
+
timestamp: Date.now(),
|
|
216
|
+
metadata
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
async add(plugin) {
|
|
220
|
+
if (this.plugins.has(plugin.name)) {
|
|
221
|
+
this.logger?.warn(`Плагин ${plugin.name} уже был зарегистрирован`);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
await plugin.initialize?.();
|
|
226
|
+
this.plugins.set(plugin.name, plugin);
|
|
227
|
+
this.logger?.info('Плагин добавлен', {
|
|
228
|
+
name: plugin.name
|
|
229
|
+
});
|
|
230
|
+
} catch (error) {
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async remove(name) {
|
|
235
|
+
const plugin = this.plugins.get(name);
|
|
236
|
+
if (plugin) {
|
|
237
|
+
await plugin.destroy?.();
|
|
238
|
+
this.plugins.delete(name);
|
|
239
|
+
this.logger?.info('Плагин удален', {
|
|
240
|
+
name
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
get(name) {
|
|
245
|
+
return this.plugins.get(name);
|
|
246
|
+
}
|
|
247
|
+
getAll() {
|
|
248
|
+
return Array.from(this.plugins.values());
|
|
249
|
+
}
|
|
250
|
+
async initialize() {
|
|
251
|
+
for (const plugin of this.plugins.values()){
|
|
252
|
+
await plugin.initialize?.();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
async destroy() {
|
|
256
|
+
await Promise.all(Array.from(this.plugins.values()).map((plugin)=>plugin.destroy?.() ?? Promise.resolve()));
|
|
257
|
+
this.plugins.clear();
|
|
258
|
+
}
|
|
259
|
+
async executeBeforeSet(value, metadata) {
|
|
260
|
+
let result = value;
|
|
261
|
+
const context = this.createContext(metadata);
|
|
262
|
+
if (this.parentExecutor) {
|
|
263
|
+
result = await this.parentExecutor.executeBeforeSet(result, metadata);
|
|
264
|
+
}
|
|
265
|
+
for (const plugin of this.plugins.values()){
|
|
266
|
+
if (plugin.onBeforeSet) {
|
|
267
|
+
try {
|
|
268
|
+
result = await plugin.onBeforeSet(result, context);
|
|
269
|
+
} catch (error) {
|
|
270
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeSet`, {
|
|
271
|
+
error
|
|
272
|
+
});
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
async executeAfterSet(key, value, metadata) {
|
|
280
|
+
let result = value;
|
|
281
|
+
const context = this.createContext(metadata);
|
|
282
|
+
if (this.parentExecutor) {
|
|
283
|
+
result = await this.parentExecutor.executeAfterSet(key, result, metadata);
|
|
284
|
+
}
|
|
285
|
+
for (const plugin of this.plugins.values()){
|
|
286
|
+
if (plugin.onAfterSet) {
|
|
287
|
+
try {
|
|
288
|
+
result = await plugin.onAfterSet(key, result, context);
|
|
289
|
+
} catch (error) {
|
|
290
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterSet`, {
|
|
291
|
+
key,
|
|
292
|
+
error
|
|
293
|
+
});
|
|
294
|
+
throw error;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return result;
|
|
299
|
+
}
|
|
300
|
+
async executeBeforeGet(key, metadata) {
|
|
301
|
+
let processedKey = key;
|
|
302
|
+
const context = this.createContext(metadata);
|
|
303
|
+
if (this.parentExecutor) {
|
|
304
|
+
processedKey = await this.parentExecutor.executeBeforeGet(processedKey, metadata);
|
|
305
|
+
}
|
|
306
|
+
for (const plugin of this.plugins.values()){
|
|
307
|
+
if (plugin.onBeforeGet) {
|
|
308
|
+
try {
|
|
309
|
+
processedKey = await plugin.onBeforeGet(processedKey, context);
|
|
310
|
+
} catch (error) {
|
|
311
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeGet`, {
|
|
312
|
+
key,
|
|
313
|
+
error
|
|
314
|
+
});
|
|
315
|
+
throw error;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return processedKey;
|
|
320
|
+
}
|
|
321
|
+
async executeAfterGet(key, value, metadata) {
|
|
322
|
+
let result = value;
|
|
323
|
+
const context = this.createContext(metadata);
|
|
324
|
+
if (this.parentExecutor) {
|
|
325
|
+
result = await this.parentExecutor.executeAfterGet(key, result, metadata);
|
|
326
|
+
}
|
|
327
|
+
for (const plugin of this.plugins.values()){
|
|
328
|
+
if (plugin.onAfterGet) {
|
|
329
|
+
try {
|
|
330
|
+
result = await plugin.onAfterGet(key, result, context);
|
|
331
|
+
} catch (error) {
|
|
332
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterGet`, {
|
|
333
|
+
key,
|
|
334
|
+
error
|
|
335
|
+
});
|
|
336
|
+
throw error;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return result;
|
|
341
|
+
}
|
|
342
|
+
async executeBeforeDelete(key, metadata) {
|
|
343
|
+
let canDelete = true;
|
|
344
|
+
const context = this.createContext(metadata);
|
|
345
|
+
if (this.parentExecutor) {
|
|
346
|
+
canDelete = await this.parentExecutor.executeBeforeDelete(key, context);
|
|
347
|
+
}
|
|
348
|
+
for (const plugin of this.plugins.values()){
|
|
349
|
+
if (plugin.onBeforeDelete) {
|
|
350
|
+
try {
|
|
351
|
+
canDelete = await plugin.onBeforeDelete(key, context) && canDelete;
|
|
352
|
+
} catch (error) {
|
|
353
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeDelete`, {
|
|
354
|
+
key,
|
|
355
|
+
error
|
|
356
|
+
});
|
|
357
|
+
throw error;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return canDelete;
|
|
362
|
+
}
|
|
363
|
+
async executeAfterDelete(key, metadata) {
|
|
364
|
+
const context = this.createContext(metadata);
|
|
365
|
+
if (this.parentExecutor) {
|
|
366
|
+
await this.parentExecutor.executeAfterDelete(key, context);
|
|
367
|
+
}
|
|
368
|
+
for (const plugin of this.plugins.values()){
|
|
369
|
+
if (plugin.onAfterDelete) {
|
|
370
|
+
try {
|
|
371
|
+
await plugin.onAfterDelete(key, context);
|
|
372
|
+
} catch (error) {
|
|
373
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterDelete`, {
|
|
374
|
+
key,
|
|
375
|
+
error
|
|
376
|
+
});
|
|
377
|
+
throw error;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
async executeOnClear(metadata) {
|
|
383
|
+
const context = this.createContext(metadata);
|
|
384
|
+
if (this.parentExecutor) {
|
|
385
|
+
await this.parentExecutor.executeOnClear(context);
|
|
386
|
+
}
|
|
387
|
+
for (const plugin of this.plugins.values()){
|
|
388
|
+
if (plugin.onClear) {
|
|
389
|
+
try {
|
|
390
|
+
await plugin.onClear(context);
|
|
391
|
+
} catch (error) {
|
|
392
|
+
this.logger?.error(`Ошибка в плагине ${plugin.name} onClear`, {
|
|
393
|
+
error
|
|
394
|
+
});
|
|
395
|
+
throw error;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/** @deprecated Use AsyncStoragePluginModule */ class StoragePluginModule extends AsyncStoragePluginModule {
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export { AsyncStoragePluginModule, StoragePluginModule, SyncStoragePluginModule };
|
|
405
|
+
|
|
406
|
+
//# sourceMappingURL=plugin.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/modules/plugin/plugin.service.js","sources":["../../../../../src/core/storage/modules/plugin/plugin.service.ts"],"sourcesContent":["import { ILogger } from '../../storage.interface'\nimport { StorageKeyType } from '../../utils/storage-key'\nimport { IAsyncPluginExecutor, IAsyncStoragePlugin, IPluginManager, ISyncPluginExecutor, ISyncStoragePlugin, PluginContext } from './plugin.interface'\n\n// ─── Sync Plugin Module ───────────────────────────────────────────────────────\n\nexport class SyncStoragePluginModule implements IPluginManager<ISyncStoragePlugin>, ISyncPluginExecutor {\n private plugins = new Map<string, ISyncStoragePlugin>()\n\n constructor(\n protected readonly parentExecutor?: ISyncPluginExecutor,\n protected readonly logger?: ILogger,\n protected readonly storageName: string = 'default',\n ) {}\n\n private createContext(metadata?: Record<string, any>): PluginContext {\n return {\n storageName: this.storageName,\n timestamp: Date.now(),\n metadata,\n }\n }\n\n public async add(plugin: ISyncStoragePlugin): Promise<void> {\n if (this.plugins.has(plugin.name)) {\n this.logger?.warn(`Плагин ${plugin.name} уже был зарегистрирован`)\n return\n }\n\n try {\n await plugin.initialize?.()\n this.plugins.set(plugin.name, plugin)\n this.logger?.info('Плагин добавлен', { name: plugin.name })\n } catch (error) {\n throw error\n }\n }\n\n public async remove(name: string): Promise<void> {\n const plugin = this.plugins.get(name)\n if (plugin) {\n await plugin.destroy?.()\n this.plugins.delete(name)\n this.logger?.info('Плагин удален', { name })\n }\n }\n\n public get(name: string): ISyncStoragePlugin | undefined {\n return this.plugins.get(name)\n }\n\n public getAll(): ISyncStoragePlugin[] {\n return Array.from(this.plugins.values())\n }\n\n public async initialize(): Promise<void> {\n for (const plugin of this.plugins.values()) {\n await plugin.initialize?.()\n }\n }\n\n public async destroy(): Promise<void> {\n await Promise.all(Array.from(this.plugins.values()).map((plugin) => plugin.destroy?.() ?? Promise.resolve()))\n this.plugins.clear()\n }\n\n public executeBeforeSet<T>(value: T, metadata?: Record<string, any>): T {\n let result = value\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n result = this.parentExecutor.executeBeforeSet(result, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onBeforeSet) {\n try {\n result = plugin.onBeforeSet(result, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeSet`, { error })\n throw error\n }\n }\n }\n\n return result\n }\n\n public executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): T {\n let result = value\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n result = this.parentExecutor.executeAfterSet(key, result, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onAfterSet) {\n try {\n result = plugin.onAfterSet(key, result, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterSet`, { key, error })\n throw error\n }\n }\n }\n\n return result\n }\n\n public executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): StorageKeyType {\n let processedKey = key\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n processedKey = this.parentExecutor.executeBeforeGet(processedKey, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onBeforeGet) {\n try {\n processedKey = plugin.onBeforeGet(processedKey, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeGet`, { key, error })\n throw error\n }\n }\n }\n\n return processedKey\n }\n\n public executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): T | undefined {\n let result = value\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n result = this.parentExecutor.executeAfterGet(key, result, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onAfterGet) {\n try {\n result = plugin.onAfterGet(key, result, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterGet`, { key, error })\n throw error\n }\n }\n }\n\n return result\n }\n\n public executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): boolean {\n let canDelete = true\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n canDelete = this.parentExecutor.executeBeforeDelete(key, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onBeforeDelete) {\n try {\n canDelete = plugin.onBeforeDelete(key, context) && canDelete\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeDelete`, { key, error })\n throw error\n }\n }\n }\n\n return canDelete\n }\n\n public executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): void {\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n this.parentExecutor.executeAfterDelete(key, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onAfterDelete) {\n try {\n plugin.onAfterDelete(key, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterDelete`, { key, error })\n throw error\n }\n }\n }\n }\n\n public executeOnClear(metadata?: Record<string, any>): void {\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n this.parentExecutor.executeOnClear(metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onClear) {\n try {\n plugin.onClear(context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onClear`, { error })\n throw error\n }\n }\n }\n }\n}\n\n// ─── Async Plugin Module ──────────────────────────────────────────────────────\n\nexport class AsyncStoragePluginModule implements IPluginManager<IAsyncStoragePlugin>, IAsyncPluginExecutor {\n private plugins = new Map<string, IAsyncStoragePlugin>()\n\n constructor(\n protected readonly parentExecutor?: IAsyncPluginExecutor,\n protected readonly logger?: ILogger,\n protected readonly storageName: string = 'default',\n ) {}\n\n private createContext(metadata?: Record<string, any>): PluginContext {\n return {\n storageName: this.storageName,\n timestamp: Date.now(),\n metadata,\n }\n }\n\n public async add(plugin: IAsyncStoragePlugin): Promise<void> {\n if (this.plugins.has(plugin.name)) {\n this.logger?.warn(`Плагин ${plugin.name} уже был зарегистрирован`)\n return\n }\n\n try {\n await plugin.initialize?.()\n this.plugins.set(plugin.name, plugin)\n this.logger?.info('Плагин добавлен', { name: plugin.name })\n } catch (error) {\n throw error\n }\n }\n\n public async remove(name: string): Promise<void> {\n const plugin = this.plugins.get(name)\n if (plugin) {\n await plugin.destroy?.()\n this.plugins.delete(name)\n this.logger?.info('Плагин удален', { name })\n }\n }\n\n public get(name: string): IAsyncStoragePlugin | undefined {\n return this.plugins.get(name)\n }\n\n public getAll(): IAsyncStoragePlugin[] {\n return Array.from(this.plugins.values())\n }\n\n public async initialize(): Promise<void> {\n for (const plugin of this.plugins.values()) {\n await plugin.initialize?.()\n }\n }\n\n public async destroy(): Promise<void> {\n await Promise.all(Array.from(this.plugins.values()).map((plugin) => plugin.destroy?.() ?? Promise.resolve()))\n this.plugins.clear()\n }\n\n public async executeBeforeSet<T>(value: T, metadata?: Record<string, any>): Promise<T> {\n let result = value\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n result = await this.parentExecutor.executeBeforeSet(result, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onBeforeSet) {\n try {\n result = await plugin.onBeforeSet(result, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeSet`, { error })\n throw error\n }\n }\n }\n\n return result\n }\n\n public async executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): Promise<T> {\n let result = value\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n result = await this.parentExecutor.executeAfterSet(key, result, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onAfterSet) {\n try {\n result = await plugin.onAfterSet(key, result, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterSet`, { key, error })\n throw error\n }\n }\n }\n\n return result\n }\n\n public async executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): Promise<StorageKeyType> {\n let processedKey = key\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n processedKey = await this.parentExecutor.executeBeforeGet(processedKey, metadata)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onBeforeGet) {\n try {\n processedKey = await plugin.onBeforeGet(processedKey, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeGet`, { key, error })\n throw error\n }\n }\n }\n\n return processedKey\n }\n\n public async executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): Promise<T | undefined> {\n let result = value\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n result = await this.parentExecutor.executeAfterGet(key, result, metadata)\n }\n for (const plugin of this.plugins.values()) {\n if (plugin.onAfterGet) {\n try {\n result = await plugin.onAfterGet(key, result, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterGet`, { key, error })\n throw error\n }\n }\n }\n\n return result\n }\n\n public async executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<boolean> {\n let canDelete = true\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n canDelete = await this.parentExecutor.executeBeforeDelete(key, context)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onBeforeDelete) {\n try {\n canDelete = (await plugin.onBeforeDelete(key, context)) && canDelete\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onBeforeDelete`, { key, error })\n throw error\n }\n }\n }\n\n return canDelete\n }\n\n public async executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<void> {\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n await this.parentExecutor.executeAfterDelete(key, context)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onAfterDelete) {\n try {\n await plugin.onAfterDelete(key, context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onAfterDelete`, { key, error })\n throw error\n }\n }\n }\n }\n\n public async executeOnClear(metadata?: Record<string, any>): Promise<void> {\n const context = this.createContext(metadata)\n\n if (this.parentExecutor) {\n await this.parentExecutor.executeOnClear(context)\n }\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onClear) {\n try {\n await plugin.onClear(context)\n } catch (error) {\n this.logger?.error(`Ошибка в плагине ${plugin.name} onClear`, { error })\n throw error\n }\n }\n }\n }\n}\n\n/** @deprecated Use AsyncStoragePluginModule */\nexport class StoragePluginModule extends AsyncStoragePluginModule {}\n"],"names":["SyncStoragePluginModule","Map","parentExecutor","logger","storageName","metadata","Date","plugin","error","name","Array","Promise","value","result","context","key","processedKey","canDelete","AsyncStoragePluginModule","StoragePluginModule"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { StorageCore } from '../../adapters/storage-core';
|
|
2
|
+
import { BaseStorageConfig, ILogger, StorageType } from '../../storage.interface';
|
|
3
|
+
export declare class SingletonMixin {
|
|
4
|
+
static handleSingletonCreation<T extends StorageCore<any>>(config: BaseStorageConfig, storageType: StorageType, factory: (finalConfig: BaseStorageConfig) => T, logger?: ILogger): T;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=mixin.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mixin.util.d.ts","sourceRoot":"","sources":["../../../../../src/core/storage/modules/singleton/mixin.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGjF,qBAAa,cAAc;IACzB,MAAM,CAAC,uBAAuB,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,EACvD,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,CAAC,EAC9C,MAAM,CAAC,EAAE,OAAO,GACf,CAAC;CAyBL"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SingletonKeyGenerator, SingletonManager } from "./singleton.util.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class SingletonMixin {
|
|
6
|
+
static handleSingletonCreation(config, storageType, factory, logger) {
|
|
7
|
+
// Если singleton не включен, создаем обычный экземпляр
|
|
8
|
+
if (!config.singleton?.enabled) return factory(config);
|
|
9
|
+
// Настраиваем логгер в SingletonManager
|
|
10
|
+
if (logger) {
|
|
11
|
+
SingletonManager.setLogger(logger);
|
|
12
|
+
}
|
|
13
|
+
const key = SingletonKeyGenerator.generate(config, storageType);
|
|
14
|
+
const result = SingletonManager.getOrCreate(key, config, factory);
|
|
15
|
+
// Логируем результат
|
|
16
|
+
if (result.isNewInstance) {
|
|
17
|
+
logger?.debug(`Created new singleton storage: ${key}`);
|
|
18
|
+
} else {
|
|
19
|
+
logger?.debug(`Reusing existing singleton storage: ${key}`);
|
|
20
|
+
if (result.conflicts && result.conflicts.length > 0) {
|
|
21
|
+
logger?.debug(`Configuration conflicts detected: ${result.conflicts.join(', ')}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return result.instance;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { SingletonMixin };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=mixin.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/modules/singleton/mixin.util.js","sources":["../../../../../src/core/storage/modules/singleton/mixin.util.ts"],"sourcesContent":["import { StorageCore } from '../../adapters/storage-core'\nimport { BaseStorageConfig, ILogger, StorageType } from '../../storage.interface'\nimport { SingletonKeyGenerator, SingletonManager } from './singleton.util'\n\nexport class SingletonMixin {\n static handleSingletonCreation<T extends StorageCore<any>>(\n config: BaseStorageConfig,\n storageType: StorageType,\n factory: (finalConfig: BaseStorageConfig) => T,\n logger?: ILogger,\n ): T {\n // Если singleton не включен, создаем обычный экземпляр\n if (!config.singleton?.enabled) return factory(config)\n\n // Настраиваем логгер в SingletonManager\n if (logger) {\n SingletonManager.setLogger(logger)\n }\n\n const key = SingletonKeyGenerator.generate(config, storageType)\n const result = SingletonManager.getOrCreate(key, config, factory)\n\n // Логируем результат\n if (result.isNewInstance) {\n logger?.debug(`Created new singleton storage: ${key}`)\n } else {\n logger?.debug(`Reusing existing singleton storage: ${key}`)\n\n if (result.conflicts && result.conflicts.length > 0) {\n logger?.debug(`Configuration conflicts detected: ${result.conflicts.join(', ')}`)\n }\n }\n\n return result.instance\n }\n}\n"],"names":["SingletonKeyGenerator","SingletonManager","SingletonMixin","config","storageType","factory","logger","key","result"],"mappings":";;;AAE0E;AAEnE,MAAME,cAAcA;IACzB,OAAO,wBACLC,MAAyB,EACzBC,WAAwB,EACxBC,OAA8C,EAC9CC,MAAgB,EACb;QACH,uDAAuD;QACvD,IAAI,CAACH,OAAO,SAAS,EAAE,SAAS,OAAOE,QAAQF;QAE/C,wCAAwC;QACxC,IAAIG,QAAQ;YACVL,0BAA0B,CAACK;QAC7B;QAEA,MAAMC,MAAMP,8BAA8B,CAACG,QAAQC;QACnD,MAAMI,SAASP,4BAA4B,CAACM,KAAKJ,QAAQE;QAEzD,qBAAqB;QACrB,IAAIG,OAAO,aAAa,EAAE;YACxBF,QAAQ,MAAM,CAAC,+BAA+B,EAAEC,KAAK;QACvD,OAAO;YACLD,QAAQ,MAAM,CAAC,oCAAoC,EAAEC,KAAK;YAE1D,IAAIC,OAAO,SAAS,IAAIA,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG;gBACnDF,QAAQ,MAAM,CAAC,kCAAkC,EAAEE,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO;YAClF;QACF;QAEA,OAAOA,OAAO,QAAQ;IACxB;AACF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @example
|
|
3
|
+
* ```typescript
|
|
4
|
+
* // Строгая проверка - выбросит ошибку при любых различиях
|
|
5
|
+
* const storage1 = new MemoryStorage({
|
|
6
|
+
* name: 'user',
|
|
7
|
+
* singleton: {
|
|
8
|
+
* enabled: true,
|
|
9
|
+
* mergeStrategy: ConfigMergeStrategy.STRICT
|
|
10
|
+
* },
|
|
11
|
+
* initialState: { name: 'John' }
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* // Глубокое слияние - объединит объекты
|
|
15
|
+
* const storage2 = new MemoryStorage({
|
|
16
|
+
* name: 'settings',
|
|
17
|
+
* singleton: {
|
|
18
|
+
* enabled: true,
|
|
19
|
+
* mergeStrategy: ConfigMergeStrategy.DEEP_MERGE
|
|
20
|
+
* },
|
|
21
|
+
* initialState: { theme: 'dark', notifications: { email: true } }
|
|
22
|
+
* })
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare enum ConfigMergeStrategy {
|
|
26
|
+
/**
|
|
27
|
+
* Строгая проверка - выбрасывает ошибку при любых отличиях в конфигурации
|
|
28
|
+
*
|
|
29
|
+
* Используйте когда требуется абсолютная идентичность конфигураций
|
|
30
|
+
* для обеспечения предсказуемого поведения
|
|
31
|
+
*/
|
|
32
|
+
STRICT = "strict",
|
|
33
|
+
/**
|
|
34
|
+
* Первая конфигурация побеждает - игнорирует последующие конфигурации
|
|
35
|
+
*
|
|
36
|
+
* **По умолчанию**. Безопасная стратегия, которая использует настройки
|
|
37
|
+
* первого созданного экземпляра и игнорирует все последующие
|
|
38
|
+
*/
|
|
39
|
+
FIRST_WINS = "first_wins",
|
|
40
|
+
/**
|
|
41
|
+
* Глубокое слияние объектов - рекурсивно объединяет initialState
|
|
42
|
+
*
|
|
43
|
+
* Полезно когда разные компоненты должны дополнять начальное состояние.
|
|
44
|
+
* Примитивные значения из первой конфигурации сохраняются
|
|
45
|
+
*/
|
|
46
|
+
DEEP_MERGE = "deep_merge",
|
|
47
|
+
/**
|
|
48
|
+
* Последняя конфигурация перезаписывает предыдущие (кроме name)
|
|
49
|
+
*
|
|
50
|
+
* **Осторожно!** Может привести к непредсказуемому поведению,
|
|
51
|
+
* так как результат зависит от порядка создания компонентов
|
|
52
|
+
*/
|
|
53
|
+
OVERRIDE = "override",
|
|
54
|
+
/**
|
|
55
|
+
* Предупреждение в консоли + использование первой конфигурации
|
|
56
|
+
*
|
|
57
|
+
* Как FIRST_WINS, но с подробными предупреждениями в консоли
|
|
58
|
+
* о конфликтующих настройках. Полезно для отладки
|
|
59
|
+
*/
|
|
60
|
+
WARN_AND_USE_FIRST = "warn_and_use_first"
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Позволяет переиспользовать экземпляры хранилищ между компонентами
|
|
64
|
+
* по имени, что особенно полезно в React при частых ре-рендерах
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* // Базовое использование
|
|
69
|
+
* const storage = new MemoryStorage({
|
|
70
|
+
* name: 'user-preferences',
|
|
71
|
+
* singleton: { enabled: true },
|
|
72
|
+
* initialState: { theme: 'light' }
|
|
73
|
+
* })
|
|
74
|
+
*
|
|
75
|
+
* // Продвинутые настройки
|
|
76
|
+
* const storage = new MemoryStorage({
|
|
77
|
+
* name: 'shared-state',
|
|
78
|
+
* singleton: {
|
|
79
|
+
* enabled: true,
|
|
80
|
+
* mergeStrategy: ConfigMergeStrategy.DEEP_MERGE,
|
|
81
|
+
* warnOnConflict: true,
|
|
82
|
+
* key: 'custom-singleton-key'
|
|
83
|
+
* },
|
|
84
|
+
* initialState: { user: null, settings: {} }
|
|
85
|
+
* })
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* @see {@link ConfigMergeStrategy} для стратегий разрешения конфликтов
|
|
89
|
+
*/
|
|
90
|
+
export interface SingletonOptions {
|
|
91
|
+
/**
|
|
92
|
+
* Включить Singleton Pattern для данного хранилища
|
|
93
|
+
*
|
|
94
|
+
* При `true` хранилища с одинаковым именем (или ключом) будут
|
|
95
|
+
* возвращать один и тот же экземпляр вместо создания нового
|
|
96
|
+
*
|
|
97
|
+
* @default false
|
|
98
|
+
*/
|
|
99
|
+
enabled: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Стратегия разрешения конфликтов при различающихся конфигурациях
|
|
102
|
+
*
|
|
103
|
+
* Определяет как поступать, когда singleton с тем же именем
|
|
104
|
+
* создается с отличающимися параметрами (initialState, middlewares и т.д.)
|
|
105
|
+
*
|
|
106
|
+
* @default ConfigMergeStrategy.FIRST_WINS
|
|
107
|
+
* @see {@link ConfigMergeStrategy}
|
|
108
|
+
*/
|
|
109
|
+
mergeStrategy?: ConfigMergeStrategy;
|
|
110
|
+
/**
|
|
111
|
+
* Выводить предупреждения при обнаружении конфликтов конфигурации
|
|
112
|
+
*
|
|
113
|
+
* При `true` будет логировать в консоль информацию о различиях
|
|
114
|
+
* в конфигурациях между экземплярами singleton (кроме стратегии STRICT)
|
|
115
|
+
*
|
|
116
|
+
* @default true
|
|
117
|
+
*/
|
|
118
|
+
warnOnConflict?: boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Кастомный ключ для идентификации singleton экземпляра
|
|
121
|
+
*
|
|
122
|
+
* По умолчанию используется комбинация `{StorageType}_{name}`,
|
|
123
|
+
* но можно задать собственный ключ для более тонкого контроля
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* // Разные хранилища с одним именем, но разными ключами
|
|
128
|
+
* const userCache = new MemoryStorage({
|
|
129
|
+
* name: 'user',
|
|
130
|
+
* singleton: { enabled: true, key: 'user-cache' }
|
|
131
|
+
* })
|
|
132
|
+
*
|
|
133
|
+
* const userSettings = new LocalStorage({
|
|
134
|
+
* name: 'user', // То же имя!
|
|
135
|
+
* singleton: { enabled: true, key: 'user-settings' } // Но разный ключ
|
|
136
|
+
* })
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* @default `${StorageType}_${name}`
|
|
140
|
+
*/
|
|
141
|
+
key?: string;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../../src/core/storage/modules/singleton/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,oBAAY,mBAAmB;IAC7B;;;;;OAKG;IACH,MAAM,WAAW;IAEjB;;;;;OAKG;IACH,UAAU,eAAe;IAEzB;;;;;OAKG;IACH,UAAU,eAAe;IAEzB;;;;;OAKG;IACH,QAAQ,aAAa;IAErB;;;;;OAKG;IACH,kBAAkB,uBAAuB;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAA;IAEnC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb"}
|