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,49 @@
|
|
|
1
|
+
interface BroadcastMessage<T = unknown> {
|
|
2
|
+
type: string;
|
|
3
|
+
payload?: T;
|
|
4
|
+
senderId: string;
|
|
5
|
+
targetId?: string;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
}
|
|
8
|
+
type MessageHandler<T> = (message: BroadcastMessage<T>) => void | Promise<void>;
|
|
9
|
+
type SyncRequestHandler<T> = () => T | Promise<T>;
|
|
10
|
+
interface SyncBroadcastChannelOptions {
|
|
11
|
+
debug?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class SyncBroadcastChannel<T = unknown> {
|
|
14
|
+
private channel;
|
|
15
|
+
private readonly tabId;
|
|
16
|
+
private messageHandlers;
|
|
17
|
+
private syncHandler?;
|
|
18
|
+
private debug;
|
|
19
|
+
private syncTimeoutMs;
|
|
20
|
+
private pendingSyncRequests;
|
|
21
|
+
constructor(channelName: string, options?: SyncBroadcastChannelOptions);
|
|
22
|
+
private log;
|
|
23
|
+
private error;
|
|
24
|
+
private handleMessage;
|
|
25
|
+
private handleError;
|
|
26
|
+
private postMessage;
|
|
27
|
+
/**
|
|
28
|
+
* Подписка на сообщения канала
|
|
29
|
+
*/
|
|
30
|
+
subscribe(handler: MessageHandler<T>): () => boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Установка обработчика запросов на синхронизацию
|
|
33
|
+
*/
|
|
34
|
+
setSyncHandler(handler: SyncRequestHandler<T>): void;
|
|
35
|
+
/**
|
|
36
|
+
* Отправка сообщения всем подписчикам
|
|
37
|
+
*/
|
|
38
|
+
broadcast(type: string, payload?: T): void;
|
|
39
|
+
/**
|
|
40
|
+
* Запрос синхронизации данных с других вкладок
|
|
41
|
+
*/
|
|
42
|
+
requestSync(): Promise<T | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Закрытие канала
|
|
45
|
+
*/
|
|
46
|
+
close(): void;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=broadcast.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast.util.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/utils/broadcast.util.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB,CAAC,CAAC,GAAG,OAAO;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,CAAC,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAC/E,KAAK,kBAAkB,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAEjD,UAAU,2BAA2B;IACnC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,oBAAoB,CAAC,CAAC,GAAG,OAAO;IAC3C,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,OAAO,CAAC,eAAe,CAAwB;IAE/C,OAAO,CAAC,WAAW,CAAC,CAAuB;IAE3C,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,aAAa,CAAO;IAE5B,OAAO,CAAC,mBAAmB,CAO1B;gBAEW,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC;IAW1E,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,KAAK;YAIC,aAAa;IA+C3B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAenB;;OAEG;IACI,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAK3C;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAIpD;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAK1C;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAa7C;;OAEG;IACI,KAAK;CAeb"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { loggerConsole } from "../../../_utils/logger-console.util.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class SyncBroadcastChannel {
|
|
6
|
+
channel;
|
|
7
|
+
tabId;
|
|
8
|
+
messageHandlers;
|
|
9
|
+
syncHandler;
|
|
10
|
+
debug;
|
|
11
|
+
syncTimeoutMs = 1000;
|
|
12
|
+
pendingSyncRequests;
|
|
13
|
+
constructor(channelName, options = {}){
|
|
14
|
+
this.channel = new BroadcastChannel(channelName);
|
|
15
|
+
this.tabId = crypto.randomUUID();
|
|
16
|
+
this.messageHandlers = new Set();
|
|
17
|
+
this.debug = options.debug ?? false;
|
|
18
|
+
this.pendingSyncRequests = new Map();
|
|
19
|
+
this.channel.onmessage = this.handleMessage.bind(this);
|
|
20
|
+
this.channel.onmessageerror = this.handleError.bind(this);
|
|
21
|
+
}
|
|
22
|
+
log(...args) {
|
|
23
|
+
if (this.debug) {
|
|
24
|
+
loggerConsole.log(`[SyncBroadcastChannel][${this.tabId}]`, ...args);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
error(...args) {
|
|
28
|
+
loggerConsole.error(`[SyncBroadcastChannel][${this.tabId}]`, ...args);
|
|
29
|
+
}
|
|
30
|
+
async handleMessage(event) {
|
|
31
|
+
const message = event.data;
|
|
32
|
+
// Игнорируем собственные сообщения
|
|
33
|
+
if (message.senderId === this.tabId) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Обработка запроса на синхронизацию
|
|
37
|
+
if (message.type === 'SYNC_REQUEST') {
|
|
38
|
+
if (this.syncHandler) {
|
|
39
|
+
try {
|
|
40
|
+
const state = await this.syncHandler();
|
|
41
|
+
this.postMessage('SYNC_RESPONSE', state, message.senderId);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
this.error('Error handling sync request:', error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Обработка ответа на запрос синхронизации
|
|
49
|
+
if (message.type === 'SYNC_RESPONSE') {
|
|
50
|
+
// Фильтруем по targetId — принимаем только ответы, адресованные этой вкладке
|
|
51
|
+
if (message.targetId && message.targetId !== this.tabId) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const request = this.pendingSyncRequests.get(this.tabId);
|
|
55
|
+
if (request) {
|
|
56
|
+
clearTimeout(request.timeout);
|
|
57
|
+
this.pendingSyncRequests.delete(this.tabId);
|
|
58
|
+
//@ts-ignore
|
|
59
|
+
request.resolve(message.payload);
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Уведомляем всех подписчиков о сообщении
|
|
64
|
+
for (const handler of this.messageHandlers){
|
|
65
|
+
try {
|
|
66
|
+
await handler(message);
|
|
67
|
+
} catch (error) {
|
|
68
|
+
this.error('Error in message handler:', error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
handleError(event) {
|
|
73
|
+
this.error('Channel error:', event);
|
|
74
|
+
}
|
|
75
|
+
postMessage(type, payload, targetId) {
|
|
76
|
+
const message = {
|
|
77
|
+
type,
|
|
78
|
+
payload,
|
|
79
|
+
senderId: this.tabId,
|
|
80
|
+
timestamp: Date.now()
|
|
81
|
+
};
|
|
82
|
+
if (targetId) {
|
|
83
|
+
message.targetId = targetId;
|
|
84
|
+
}
|
|
85
|
+
this.channel.postMessage(message);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Подписка на сообщения канала
|
|
89
|
+
*/ subscribe(handler) {
|
|
90
|
+
this.messageHandlers.add(handler);
|
|
91
|
+
return ()=>this.messageHandlers.delete(handler);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Установка обработчика запросов на синхронизацию
|
|
95
|
+
*/ setSyncHandler(handler) {
|
|
96
|
+
this.syncHandler = handler;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Отправка сообщения всем подписчикам
|
|
100
|
+
*/ broadcast(type, payload) {
|
|
101
|
+
//@ts-ignore
|
|
102
|
+
this.postMessage(type, payload);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Запрос синхронизации данных с других вкладок
|
|
106
|
+
*/ async requestSync() {
|
|
107
|
+
return new Promise((resolve, reject)=>{
|
|
108
|
+
const timeout = setTimeout(()=>{
|
|
109
|
+
this.pendingSyncRequests.delete(this.tabId);
|
|
110
|
+
resolve(null);
|
|
111
|
+
}, this.syncTimeoutMs);
|
|
112
|
+
this.pendingSyncRequests.set(this.tabId, {
|
|
113
|
+
resolve,
|
|
114
|
+
reject,
|
|
115
|
+
timeout
|
|
116
|
+
});
|
|
117
|
+
this.postMessage('SYNC_REQUEST', {
|
|
118
|
+
type: 'sync'
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Закрытие канала
|
|
124
|
+
*/ close() {
|
|
125
|
+
// Очищаем все pending запросы
|
|
126
|
+
for (const [, request] of this.pendingSyncRequests){
|
|
127
|
+
clearTimeout(request.timeout);
|
|
128
|
+
request.reject(new Error('Channel closed'));
|
|
129
|
+
}
|
|
130
|
+
this.pendingSyncRequests.clear();
|
|
131
|
+
// Очищаем обработчики
|
|
132
|
+
this.messageHandlers.clear();
|
|
133
|
+
this.syncHandler = undefined;
|
|
134
|
+
// Закрываем канал
|
|
135
|
+
this.channel.close();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export { SyncBroadcastChannel };
|
|
140
|
+
|
|
141
|
+
//# sourceMappingURL=broadcast.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/utils/broadcast.util.js","sources":["../../../../src/core/storage/utils/broadcast.util.ts"],"sourcesContent":["import { loggerConsole } from '../../../_utils/logger-console.util'\n\ninterface BroadcastMessage<T = unknown> {\n type: string\n payload?: T\n senderId: string\n targetId?: string\n timestamp: number\n}\n\ntype MessageHandler<T> = (message: BroadcastMessage<T>) => void | Promise<void>\ntype SyncRequestHandler<T> = () => T | Promise<T>\n\ninterface SyncBroadcastChannelOptions {\n debug?: boolean\n}\n\nexport class SyncBroadcastChannel<T = unknown> {\n private channel: BroadcastChannel\n\n private readonly tabId: string\n\n private messageHandlers: Set<MessageHandler<T>>\n\n private syncHandler?: SyncRequestHandler<T>\n\n private debug: boolean\n\n private syncTimeoutMs = 1000\n\n private pendingSyncRequests: Map<\n string,\n {\n resolve: (value: T | null) => void\n reject: (reason?: any) => void\n timeout: NodeJS.Timeout\n }\n >\n\n constructor(channelName: string, options: SyncBroadcastChannelOptions = {}) {\n this.channel = new BroadcastChannel(channelName)\n this.tabId = crypto.randomUUID()\n this.messageHandlers = new Set()\n this.debug = options.debug ?? false\n this.pendingSyncRequests = new Map()\n\n this.channel.onmessage = this.handleMessage.bind(this)\n this.channel.onmessageerror = this.handleError.bind(this)\n }\n\n private log(...args: any[]) {\n if (this.debug) {\n loggerConsole.log(`[SyncBroadcastChannel][${this.tabId}]`, ...args)\n }\n }\n\n private error(...args: any[]) {\n loggerConsole.error(`[SyncBroadcastChannel][${this.tabId}]`, ...args)\n }\n\n private async handleMessage(event: MessageEvent<BroadcastMessage<T>>): Promise<void> {\n const message = event.data\n\n // Игнорируем собственные сообщения\n if (message.senderId === this.tabId) {\n return\n }\n\n // Обработка запроса на синхронизацию\n if (message.type === 'SYNC_REQUEST') {\n if (this.syncHandler) {\n try {\n const state = await this.syncHandler()\n this.postMessage('SYNC_RESPONSE', state, message.senderId)\n } catch (error) {\n this.error('Error handling sync request:', error)\n }\n }\n return\n }\n\n // Обработка ответа на запрос синхронизации\n if (message.type === 'SYNC_RESPONSE') {\n // Фильтруем по targetId — принимаем только ответы, адресованные этой вкладке\n if (message.targetId && message.targetId !== this.tabId) {\n return\n }\n const request = this.pendingSyncRequests.get(this.tabId)\n if (request) {\n clearTimeout(request.timeout)\n this.pendingSyncRequests.delete(this.tabId)\n //@ts-ignore\n request.resolve(message.payload)\n }\n return\n }\n\n // Уведомляем всех подписчиков о сообщении\n for (const handler of this.messageHandlers) {\n try {\n await handler(message)\n } catch (error) {\n this.error('Error in message handler:', error)\n }\n }\n }\n\n private handleError(event: MessageEvent) {\n this.error('Channel error:', event)\n }\n\n private postMessage(type: string, payload: T, targetId?: string): void {\n const message: BroadcastMessage<T> = {\n type,\n payload,\n senderId: this.tabId,\n timestamp: Date.now(),\n }\n\n if (targetId) {\n message.targetId = targetId\n }\n\n this.channel.postMessage(message)\n }\n\n /**\n * Подписка на сообщения канала\n */\n public subscribe(handler: MessageHandler<T>) {\n this.messageHandlers.add(handler)\n return () => this.messageHandlers.delete(handler)\n }\n\n /**\n * Установка обработчика запросов на синхронизацию\n */\n public setSyncHandler(handler: SyncRequestHandler<T>) {\n this.syncHandler = handler\n }\n\n /**\n * Отправка сообщения всем подписчикам\n */\n public broadcast(type: string, payload?: T) {\n //@ts-ignore\n this.postMessage(type, payload)\n }\n\n /**\n * Запрос синхронизации данных с других вкладок\n */\n public async requestSync(): Promise<T | null> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pendingSyncRequests.delete(this.tabId)\n resolve(null)\n }, this.syncTimeoutMs)\n\n this.pendingSyncRequests.set(this.tabId, { resolve, reject, timeout })\n\n this.postMessage('SYNC_REQUEST', { type: 'sync' } as T)\n })\n }\n\n /**\n * Закрытие канала\n */\n public close() {\n // Очищаем все pending запросы\n for (const [, request] of this.pendingSyncRequests) {\n clearTimeout(request.timeout)\n request.reject(new Error('Channel closed'))\n }\n this.pendingSyncRequests.clear()\n\n // Очищаем обработчики\n this.messageHandlers.clear()\n this.syncHandler = undefined\n\n // Закрываем канал\n this.channel.close()\n }\n}\n"],"names":["loggerConsole","SyncBroadcastChannel","channelName","options","BroadcastChannel","crypto","Set","Map","args","event","message","state","error","request","clearTimeout","handler","type","payload","targetId","Date","Promise","resolve","reject","timeout","setTimeout","Error","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { StorageKey, StorageKeyType } from './storage-key';
|
|
2
|
+
export interface CacheMetadata {
|
|
3
|
+
createdAt: number;
|
|
4
|
+
updatedAt: number;
|
|
5
|
+
expiresAt: number;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
createdAtDateTime: string;
|
|
8
|
+
updatedAtDateTime: string;
|
|
9
|
+
expiresAtDateTime: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CacheOptions {
|
|
12
|
+
ttl?: number;
|
|
13
|
+
cleanup?: {
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
interval?: number;
|
|
16
|
+
};
|
|
17
|
+
invalidateOnError?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface CacheEntry<Data, Params extends Record<string, any> = any> {
|
|
20
|
+
data: Data;
|
|
21
|
+
metadata: CacheMetadata;
|
|
22
|
+
params: Params;
|
|
23
|
+
}
|
|
24
|
+
export declare class CacheUtils {
|
|
25
|
+
static createMetadata(ttl?: number, tags?: string[]): CacheMetadata;
|
|
26
|
+
private static formatDateTime;
|
|
27
|
+
static isExpired(metadata: CacheMetadata): boolean;
|
|
28
|
+
static updateMetadata(metadata: CacheMetadata): CacheMetadata;
|
|
29
|
+
static createKey(...parts: (string | number)[]): StorageKey;
|
|
30
|
+
static createApiKey(endpoint: string, params?: Record<string, any>): [StorageKeyType, Record<string, any> | undefined];
|
|
31
|
+
static hasAnyTag(metadata: CacheMetadata, tags?: string[]): boolean;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=cache.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.util.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/utils/cache.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,UAAU,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;IACxE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,cAAc,CAAC,GAAG,GAAE,MAAU,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,aAAa;IAe1E,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO;IAIlD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa;IAO7D,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,UAAU;IAI3D,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAYtH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO;CAIxE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { StorageKey } from "./storage-key.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class CacheUtils {
|
|
6
|
+
static createMetadata(ttl = 0, tags = []) {
|
|
7
|
+
const now = Date.now();
|
|
8
|
+
const expiresAt = ttl > 0 ? now + ttl : Infinity;
|
|
9
|
+
return {
|
|
10
|
+
createdAt: now,
|
|
11
|
+
updatedAt: now,
|
|
12
|
+
expiresAt,
|
|
13
|
+
tags,
|
|
14
|
+
createdAtDateTime: this.formatDateTime(now),
|
|
15
|
+
updatedAtDateTime: this.formatDateTime(now),
|
|
16
|
+
expiresAtDateTime: expiresAt === Infinity ? 'never' : this.formatDateTime(expiresAt)
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static formatDateTime(timestamp) {
|
|
20
|
+
return new Date(timestamp).toISOString();
|
|
21
|
+
}
|
|
22
|
+
static isExpired(metadata) {
|
|
23
|
+
return Date.now() > metadata.expiresAt;
|
|
24
|
+
}
|
|
25
|
+
static updateMetadata(metadata) {
|
|
26
|
+
return {
|
|
27
|
+
...metadata,
|
|
28
|
+
updatedAt: Date.now()
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
static createKey(...parts) {
|
|
32
|
+
return new StorageKey(parts.join('_'));
|
|
33
|
+
}
|
|
34
|
+
static createApiKey(endpoint, params) {
|
|
35
|
+
if (!params) return [
|
|
36
|
+
new StorageKey(endpoint, true),
|
|
37
|
+
params
|
|
38
|
+
];
|
|
39
|
+
const sortedParams = Object.entries(params).sort(([a], [b])=>a.localeCompare(b)).map(([k, v])=>`${k}=${v}`).join('&');
|
|
40
|
+
return [
|
|
41
|
+
new StorageKey(`${endpoint}_${sortedParams}`, true),
|
|
42
|
+
params
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
// Функция для проверки, есть ли у записи определенные теги
|
|
46
|
+
static hasAnyTag(metadata, tags = []) {
|
|
47
|
+
if (!metadata.tags || !tags.length) return false;
|
|
48
|
+
return tags.some((tag)=>metadata.tags?.includes(tag));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { CacheUtils };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=cache.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/utils/cache.util.js","sources":["../../../../src/core/storage/utils/cache.util.ts"],"sourcesContent":["import { StorageKey, StorageKeyType } from './storage-key'\n\nexport interface CacheMetadata {\n createdAt: number\n updatedAt: number\n expiresAt: number\n tags?: string[]\n createdAtDateTime: string\n updatedAtDateTime: string\n expiresAtDateTime: string\n}\n\nexport interface CacheOptions {\n ttl?: number\n cleanup?: {\n enabled: boolean\n interval?: number\n }\n invalidateOnError?: boolean\n}\n\nexport interface CacheEntry<Data, Params extends Record<string, any> = any> {\n data: Data\n metadata: CacheMetadata\n params: Params\n}\n\nexport class CacheUtils {\n static createMetadata(ttl: number = 0, tags: string[] = []): CacheMetadata {\n const now = Date.now()\n const expiresAt = ttl > 0 ? now + ttl : Infinity\n\n return {\n createdAt: now,\n updatedAt: now,\n expiresAt,\n tags,\n createdAtDateTime: this.formatDateTime(now),\n updatedAtDateTime: this.formatDateTime(now),\n expiresAtDateTime: expiresAt === Infinity ? 'never' : this.formatDateTime(expiresAt),\n }\n }\n\n private static formatDateTime(timestamp: number): string {\n return new Date(timestamp).toISOString()\n }\n\n static isExpired(metadata: CacheMetadata): boolean {\n return Date.now() > metadata.expiresAt\n }\n\n static updateMetadata(metadata: CacheMetadata): CacheMetadata {\n return {\n ...metadata,\n updatedAt: Date.now(),\n }\n }\n\n static createKey(...parts: (string | number)[]): StorageKey {\n return new StorageKey(parts.join('_'))\n }\n\n static createApiKey(endpoint: string, params?: Record<string, any>): [StorageKeyType, Record<string, any> | undefined] {\n if (!params) return [new StorageKey(endpoint, true), params]\n\n const sortedParams = Object.entries(params)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join('&')\n\n return [new StorageKey(`${endpoint}_${sortedParams}`, true), params]\n }\n\n // Функция для проверки, есть ли у записи определенные теги\n static hasAnyTag(metadata: CacheMetadata, tags: string[] = []): boolean {\n if (!metadata.tags || !tags.length) return false\n return tags.some((tag) => metadata.tags?.includes(tag))\n }\n}\n"],"names":["StorageKey","CacheUtils","ttl","tags","now","Date","expiresAt","Infinity","timestamp","metadata","parts","endpoint","params","sortedParams","Object","a","b","k","v","tag"],"mappings":";;;AAA0D;AA2BnD,MAAMC,UAAUA;IACrB,OAAO,eAAeC,MAAc,CAAC,EAAEC,OAAiB,EAAE,EAAiB;QACzE,MAAMC,MAAMC,KAAK,GAAG;QACpB,MAAMC,YAAYJ,MAAM,IAAIE,MAAMF,MAAMK;QAExC,OAAO;YACL,WAAWH;YACX,WAAWA;YACXE;YACAH;YACA,mBAAmB,IAAI,CAAC,cAAc,CAACC;YACvC,mBAAmB,IAAI,CAAC,cAAc,CAACA;YACvC,mBAAmBE,cAAcC,WAAW,UAAU,IAAI,CAAC,cAAc,CAACD;QAC5E;IACF;IAEA,OAAe,eAAeE,SAAiB,EAAU;QACvD,OAAO,IAAIH,KAAKG,WAAW,WAAW;IACxC;IAEA,OAAO,UAAUC,QAAuB,EAAW;QACjD,OAAOJ,KAAK,GAAG,KAAKI,SAAS,SAAS;IACxC;IAEA,OAAO,eAAeA,QAAuB,EAAiB;QAC5D,OAAO;YACL,GAAGA,QAAQ;YACX,WAAWJ,KAAK,GAAG;QACrB;IACF;IAEA,OAAO,UAAU,GAAGK,KAA0B,EAAc;QAC1D,OAAO,IAAIV,UAAUA,CAACU,MAAM,IAAI,CAAC;IACnC;IAEA,OAAO,aAAaC,QAAgB,EAAEC,MAA4B,EAAqD;QACrH,IAAI,CAACA,QAAQ,OAAO;YAAC,IAAIZ,UAAUA,CAACW,UAAU;YAAOC;SAAO;QAE5D,MAAMC,eAAeC,OAAO,OAAO,CAACF,QACjC,IAAI,CAAC,CAAC,CAACG,EAAE,EAAE,CAACC,EAAE,GAAKD,EAAE,aAAa,CAACC,IACnC,GAAG,CAAC,CAAC,CAACC,GAAGC,EAAE,GAAK,GAAGD,EAAE,CAAC,EAAEC,GAAG,EAC3B,IAAI,CAAC;QAER,OAAO;YAAC,IAAIlB,UAAUA,CAAC,GAAGW,SAAS,CAAC,EAAEE,cAAc,EAAE;YAAOD;SAAO;IACtE;IAEA,2DAA2D;IAC3D,OAAO,UAAUH,QAAuB,EAAEN,OAAiB,EAAE,EAAW;QACtE,IAAI,CAACM,SAAS,IAAI,IAAI,CAACN,KAAK,MAAM,EAAE,OAAO;QAC3C,OAAOA,KAAK,IAAI,CAAC,CAACgB,MAAQV,SAAS,IAAI,EAAE,SAASU;IACpD;AACF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { StorageKeyType } from './storage-key';
|
|
2
|
+
/**
|
|
3
|
+
* Sentinel object returned by middleware to signal that the value has not changed.
|
|
4
|
+
* BaseStorage checks for this by reference equality to skip subscriber notifications.
|
|
5
|
+
*/
|
|
6
|
+
export declare const VALUE_NOT_CHANGED: unique symbol;
|
|
7
|
+
export type StorageActionType = 'get' | 'set' | 'delete' | 'clear' | 'init' | 'keys' | 'update' | 'reset';
|
|
8
|
+
export type StorageAction = {
|
|
9
|
+
type: StorageActionType;
|
|
10
|
+
key?: StorageKeyType;
|
|
11
|
+
value?: any;
|
|
12
|
+
metadata?: Record<string, any>;
|
|
13
|
+
source?: string;
|
|
14
|
+
timestamp?: number;
|
|
15
|
+
};
|
|
16
|
+
export type MiddlewareAPI = {
|
|
17
|
+
dispatch: (action: StorageAction) => Promise<any>;
|
|
18
|
+
getState: () => Promise<Record<string, any>>;
|
|
19
|
+
storage: {
|
|
20
|
+
doGet: (key: StorageKeyType) => Promise<any>;
|
|
21
|
+
doSet: (key: StorageKeyType, value: any) => Promise<void>;
|
|
22
|
+
doUpdate: (updates: Array<{
|
|
23
|
+
key: StorageKeyType;
|
|
24
|
+
value: any;
|
|
25
|
+
}>) => Promise<void>;
|
|
26
|
+
doDelete: (key: StorageKeyType) => Promise<boolean>;
|
|
27
|
+
doClear: () => Promise<void>;
|
|
28
|
+
doKeys: () => Promise<string[]>;
|
|
29
|
+
notifySubscribers: (key: StorageKeyType, value: any) => void;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export type NextFunction = (action: StorageAction) => Promise<any>;
|
|
33
|
+
export type SetupEventsFunction = (api: MiddlewareAPI) => void;
|
|
34
|
+
export type Middleware = {
|
|
35
|
+
name: string;
|
|
36
|
+
setup?: SetupEventsFunction;
|
|
37
|
+
cleanup?: () => Promise<void> | void;
|
|
38
|
+
reducer: (api: MiddlewareAPI) => (next: NextFunction) => (action: StorageAction) => Promise<any>;
|
|
39
|
+
};
|
|
40
|
+
export type AsyncMiddlewareAPI = MiddlewareAPI;
|
|
41
|
+
export type AsyncNextFunction = NextFunction;
|
|
42
|
+
export type AsyncMiddleware = Middleware;
|
|
43
|
+
export type SyncMiddlewareAPI = {
|
|
44
|
+
dispatch: (action: StorageAction) => any;
|
|
45
|
+
getState: () => Record<string, any>;
|
|
46
|
+
storage: {
|
|
47
|
+
doGet: (key: StorageKeyType) => any;
|
|
48
|
+
doSet: (key: StorageKeyType, value: any) => void;
|
|
49
|
+
doUpdate: (updates: Array<{
|
|
50
|
+
key: StorageKeyType;
|
|
51
|
+
value: any;
|
|
52
|
+
}>) => void;
|
|
53
|
+
doRemove: (key: StorageKeyType) => boolean;
|
|
54
|
+
doClear: () => void;
|
|
55
|
+
doKeys: () => string[];
|
|
56
|
+
notifySubscribers: (key: StorageKeyType, value: any) => void;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export type SyncNextFunction = (action: StorageAction) => any;
|
|
60
|
+
export type SyncSetupEventsFunction = (api: SyncMiddlewareAPI) => void;
|
|
61
|
+
export type SyncMiddleware = {
|
|
62
|
+
name: string;
|
|
63
|
+
setup?: SyncSetupEventsFunction;
|
|
64
|
+
cleanup?: () => void;
|
|
65
|
+
reducer: (api: SyncMiddlewareAPI) => (next: SyncNextFunction) => (action: StorageAction) => any;
|
|
66
|
+
};
|
|
67
|
+
export declare class AsyncMiddlewareModule {
|
|
68
|
+
private middlewares;
|
|
69
|
+
private api;
|
|
70
|
+
private initialized;
|
|
71
|
+
private depth;
|
|
72
|
+
private dispatchFn;
|
|
73
|
+
constructor(storage: any);
|
|
74
|
+
private baseOperation;
|
|
75
|
+
private initializeMiddlewares;
|
|
76
|
+
use(middleware: Middleware): void;
|
|
77
|
+
dispatch(action: StorageAction): Promise<any>;
|
|
78
|
+
}
|
|
79
|
+
/** @deprecated Use AsyncMiddlewareModule */
|
|
80
|
+
export declare class MiddlewareModule extends AsyncMiddlewareModule {
|
|
81
|
+
}
|
|
82
|
+
export declare class SyncMiddlewareModule {
|
|
83
|
+
private middlewares;
|
|
84
|
+
private api;
|
|
85
|
+
private initialized;
|
|
86
|
+
private depth;
|
|
87
|
+
private dispatchFn;
|
|
88
|
+
constructor(storage: any);
|
|
89
|
+
private baseOperation;
|
|
90
|
+
private initializeMiddlewares;
|
|
91
|
+
use(middleware: SyncMiddleware): void;
|
|
92
|
+
dispatch(action: StorageAction): any;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=middleware-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-module.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/utils/middleware-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAAoC,CAAA;AAE3E,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEzG,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,iBAAiB,CAAA;IACvB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAID,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACjD,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;IAC5C,OAAO,EAAE;QACP,KAAK,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;QAC5C,KAAK,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QACzD,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,cAAc,CAAC;YAAC,KAAK,EAAE,GAAG,CAAA;SAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QAChF,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QACnD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAC/B,iBAAiB,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;KAC7D,CAAA;CACF,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;AAElE,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAA;AAE9D,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACpC,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,YAAY,KAAK,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CACjG,CAAA;AAGD,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAC9C,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAA;AAC5C,MAAM,MAAM,eAAe,GAAG,UAAU,CAAA;AAIxC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,GAAG,CAAA;IACxC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,OAAO,EAAE;QACP,KAAK,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,GAAG,CAAA;QACnC,KAAK,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;QAChD,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,cAAc,CAAC;YAAC,KAAK,EAAE,GAAG,CAAA;SAAE,CAAC,KAAK,IAAI,CAAA;QACvE,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAA;QAC1C,OAAO,EAAE,MAAM,IAAI,CAAA;QACnB,MAAM,EAAE,MAAM,MAAM,EAAE,CAAA;QACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;KAC7D,CAAA;CACF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,GAAG,CAAA;AAE7D,MAAM,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAA;AAEtE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,uBAAuB,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,CAAC,IAAI,EAAE,gBAAgB,KAAK,CAAC,MAAM,EAAE,aAAa,KAAK,GAAG,CAAA;CAChG,CAAA;AAID,qBAAa,qBAAqB;IAChC,OAAO,CAAC,WAAW,CAAmB;IAEtC,OAAO,CAAC,GAAG,CAAe;IAE1B,OAAO,CAAC,WAAW,CAAQ;IAE3B,OAAO,CAAC,KAAK,CAAI;IAEjB,OAAO,CAAC,UAAU,CAA0C;gBAEhD,OAAO,EAAE,GAAG;YAgBV,aAAa;IA0D3B,OAAO,CAAC,qBAAqB;IAwB7B,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAS3B,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;CAcpD;AAED,4CAA4C;AAC5C,qBAAa,gBAAiB,SAAQ,qBAAqB;CAAG;AAI9D,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,GAAG,CAAmB;IAE9B,OAAO,CAAC,WAAW,CAAQ;IAE3B,OAAO,CAAC,KAAK,CAAI;IAEjB,OAAO,CAAC,UAAU,CAAiC;gBAEvC,OAAO,EAAE,GAAG;IAgBxB,OAAO,CAAC,aAAa;IA0DrB,OAAO,CAAC,qBAAqB;IAwB7B,GAAG,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IASrC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG;CAcrC"}
|