synapse-storage 4.1.1 → 5.0.3
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 +142 -12
- package/dist/_utils/chunk.util.d.ts +0 -1
- package/dist/_utils/deepMerge.util.d.ts +0 -1
- package/dist/_utils/error-handling.util.d.ts +0 -1
- package/dist/_utils/flatMap.util.d.ts +0 -1
- package/dist/_utils/index.d.ts +0 -1
- package/dist/_utils/logger-console.util.d.ts +0 -1
- package/dist/api/api.module.d.ts +0 -1
- package/dist/api/components/endpoint.d.ts +11 -12
- package/dist/api/components/endpoint.js.map +1 -1
- package/dist/api/components/query-storage.d.ts +0 -1
- package/dist/api/components/query-storage.js +1 -1
- package/dist/api/components/query-storage.js.map +1 -1
- package/dist/api/index.d.ts +0 -1
- package/dist/api/types/api.interface.d.ts +0 -1
- package/dist/api/types/endpoint.interface.d.ts +0 -1
- package/dist/api/types/query.interface.d.ts +0 -1
- package/dist/api/utils/api-helpers.d.ts +0 -1
- package/dist/{core/storage → api}/utils/cache.util.d.ts +3 -6
- package/dist/{core/storage → api}/utils/cache.util.js +4 -7
- package/dist/api/utils/cache.util.js.map +1 -0
- package/dist/api/utils/create-header-context.d.ts +0 -1
- package/dist/api/utils/endpoint-headers.d.ts +0 -1
- package/dist/api/utils/fetch-base-query.d.ts +0 -1
- package/dist/api/utils/file-utils.d.ts +0 -1
- package/dist/api/utils/get-cacheable-headers.d.ts +0 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/selector/index.d.ts +1 -1
- package/dist/core/selector/index.js +2 -0
- package/dist/core/selector/index.js.map +1 -1
- package/dist/core/selector/selector.interface.d.ts +15 -30
- package/dist/core/selector/selector.interface.js +2 -2
- package/dist/core/selector/selector.interface.js.map +1 -1
- package/dist/core/selector/selector.module.d.ts +16 -1
- package/dist/core/selector/selector.module.js +82 -20
- package/dist/core/selector/selector.module.js.map +1 -1
- package/dist/core/selector/selectors.base.d.ts +56 -0
- package/dist/core/selector/selectors.base.js +118 -0
- package/dist/core/selector/selectors.base.js.map +1 -0
- package/dist/core/storage/adapters/async-base-storage.service.d.ts +15 -4
- package/dist/core/storage/adapters/async-base-storage.service.js +106 -36
- package/dist/core/storage/adapters/async-base-storage.service.js.map +1 -1
- package/dist/core/storage/adapters/indexed-DB.service.d.ts +4 -5
- package/dist/core/storage/adapters/indexed-DB.service.js +66 -14
- package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -1
- package/dist/core/storage/adapters/local-storage.service.d.ts +9 -4
- package/dist/core/storage/adapters/local-storage.service.js +25 -5
- package/dist/core/storage/adapters/local-storage.service.js.map +1 -1
- package/dist/core/storage/adapters/memory-storage.service.d.ts +2 -4
- package/dist/core/storage/adapters/memory-storage.service.js +5 -5
- package/dist/core/storage/adapters/memory-storage.service.js.map +1 -1
- package/dist/core/storage/adapters/path.utils.d.ts +0 -1
- package/dist/core/storage/adapters/storage-core.d.ts +6 -2
- package/dist/core/storage/adapters/storage-core.js +6 -3
- package/dist/core/storage/adapters/storage-core.js.map +1 -1
- package/dist/core/storage/adapters/sync-base-storage.service.d.ts +20 -4
- package/dist/core/storage/adapters/sync-base-storage.service.js +110 -35
- package/dist/core/storage/adapters/sync-base-storage.service.js.map +1 -1
- package/dist/core/storage/index.d.ts +2 -5
- package/dist/core/storage/index.js +1 -5
- package/dist/core/storage/index.js.map +1 -1
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts +0 -1
- package/dist/core/storage/middlewares/index.d.ts +3 -1
- package/dist/core/storage/middlewares/index.js +6 -0
- package/dist/core/storage/middlewares/index.js.map +1 -1
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +0 -1
- package/dist/core/storage/middlewares/storage-logger.middleware.d.ts +20 -0
- package/dist/core/storage/middlewares/storage-logger.middleware.js +53 -0
- package/dist/core/storage/middlewares/storage-logger.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +0 -1
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +4 -10
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -1
- package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts +0 -1
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts +0 -1
- package/dist/core/storage/middlewares/sync-storage-logger.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/sync-storage-logger.middleware.js +48 -0
- package/dist/core/storage/middlewares/sync-storage-logger.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts +0 -1
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js +4 -10
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js.map +1 -1
- package/dist/core/storage/modules/singleton/mixin.util.d.ts +0 -1
- package/dist/core/storage/modules/singleton/models.d.ts +0 -1
- package/dist/core/storage/modules/singleton/singleton.util.d.ts +0 -1
- package/dist/core/storage/storage.interface.d.ts +59 -4
- package/dist/core/storage/storage.interface.js +0 -2
- package/dist/core/storage/storage.interface.js.map +1 -1
- package/dist/core/storage/utils/broadcast.util.d.ts +0 -1
- package/dist/core/storage/utils/middleware-module.d.ts +0 -3
- package/dist/core/storage/utils/middleware-module.js +0 -8
- package/dist/core/storage/utils/middleware-module.js.map +1 -1
- package/dist/core/storage/utils/migration.util.d.ts +38 -0
- package/dist/core/storage/utils/migration.util.js +48 -0
- package/dist/core/storage/utils/migration.util.js.map +1 -0
- package/dist/core/storage/utils/path-selector.util.d.ts +0 -1
- package/dist/core/storage/utils/state-diff.util.d.ts +9 -2
- package/dist/core/storage/utils/state-diff.util.js +30 -3
- package/dist/core/storage/utils/state-diff.util.js.map +1 -1
- package/dist/core/storage/utils/storage-factory.util.d.ts +7 -9
- package/dist/core/storage/utils/storage-factory.util.js +10 -10
- package/dist/core/storage/utils/storage-factory.util.js.map +1 -1
- package/dist/core/storage/utils/storage-key.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/react/hooks/index.d.ts +2 -1
- package/dist/react/hooks/index.js +4 -0
- package/dist/react/hooks/index.js.map +1 -1
- package/dist/react/hooks/useCreateStorage.d.ts +5 -6
- package/dist/react/hooks/useCreateStorage.js +2 -2
- package/dist/react/hooks/useCreateStorage.js.map +1 -1
- package/dist/react/hooks/useObservable.d.ts +17 -0
- package/dist/react/hooks/useObservable.js +38 -0
- package/dist/react/hooks/useObservable.js.map +1 -0
- package/dist/react/hooks/useSelector.d.ts +0 -1
- package/dist/react/hooks/useSelector.js +5 -2
- package/dist/react/hooks/useSelector.js.map +1 -1
- package/dist/react/hooks/useStorage.d.ts +0 -1
- package/dist/react/hooks/useStorageSubscribe.d.ts +0 -1
- package/dist/react/hooks/useSubscription.d.ts +13 -0
- package/dist/react/hooks/useSubscription.js +23 -0
- package/dist/react/hooks/useSubscription.js.map +1 -0
- package/dist/react/index.d.ts +0 -1
- package/dist/react/utils/awaitSynapse.d.ts +9 -10
- package/dist/react/utils/awaitSynapse.js +3 -2
- package/dist/react/utils/awaitSynapse.js.map +1 -1
- package/dist/react/utils/createSynapseCtx.d.ts +18 -23
- package/dist/react/utils/createSynapseCtx.js +64 -39
- package/dist/react/utils/createSynapseCtx.js.map +1 -1
- package/dist/react/utils/index.d.ts +0 -1
- package/dist/reactive/dispatcher/dispatcher.base.d.ts +122 -0
- package/dist/reactive/dispatcher/dispatcher.base.js +294 -0
- package/dist/reactive/dispatcher/dispatcher.base.js.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts +12 -67
- package/dist/reactive/dispatcher/dispatcher.module.js +13 -72
- package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -1
- package/dist/reactive/dispatcher/index.d.ts +1 -1
- package/dist/reactive/dispatcher/index.js +2 -0
- package/dist/reactive/dispatcher/index.js.map +1 -1
- package/dist/reactive/dispatcher/middlewares/index.d.ts +0 -1
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +0 -1
- package/dist/reactive/dispatcher/path.util.d.ts +15 -0
- package/dist/reactive/dispatcher/path.util.js +34 -0
- package/dist/reactive/dispatcher/path.util.js.map +1 -0
- package/dist/reactive/dispatcher/standalone.d.ts +1 -150
- package/dist/reactive/dispatcher/standalone.js +6 -217
- package/dist/reactive/dispatcher/standalone.js.map +1 -1
- package/dist/reactive/effects/effects.base.d.ts +62 -0
- package/dist/reactive/effects/effects.base.js +90 -0
- package/dist/reactive/effects/effects.base.js.map +1 -0
- package/dist/reactive/effects/effects.module.d.ts +122 -11
- package/dist/reactive/effects/effects.module.js +129 -17
- package/dist/reactive/effects/effects.module.js.map +1 -1
- package/dist/reactive/effects/index.d.ts +1 -1
- package/dist/reactive/effects/index.js +2 -0
- package/dist/reactive/effects/index.js.map +1 -1
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +0 -1
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +0 -1
- package/dist/reactive/effects/utils/fromRequest.d.ts +0 -1
- package/dist/reactive/effects/utils/index.d.ts +0 -1
- package/dist/reactive/effects/utils/toObservable.d.ts +0 -1
- package/dist/reactive/index.d.ts +0 -1
- package/dist/utils/createEventBus.d.ts +47 -46
- package/dist/utils/createEventBus.js +152 -174
- package/dist/utils/createEventBus.js.map +1 -1
- package/dist/utils/createSynapse/createSynapse.d.ts +25 -7
- package/dist/utils/createSynapse/createSynapse.js +28 -98
- package/dist/utils/createSynapse/createSynapse.js.map +1 -1
- package/dist/utils/createSynapse/factory.d.ts +6 -0
- package/dist/utils/createSynapse/factory.js +256 -0
- package/dist/utils/createSynapse/factory.js.map +1 -0
- package/dist/utils/createSynapse/index.d.ts +2 -2
- package/dist/utils/createSynapse/index.js.map +1 -1
- package/dist/utils/createSynapse/synapse.types.d.ts +87 -0
- package/dist/utils/createSynapse/synapse.types.js +11 -0
- package/dist/utils/createSynapse/synapse.types.js.map +1 -0
- package/dist/utils/createSynapse/types.d.ts +6 -85
- package/dist/utils/createSynapse/types.js +2 -1
- package/dist/utils/createSynapse/types.js.map +1 -1
- package/dist/utils/createSynapse/waitForDependencies.d.ts +0 -1
- package/dist/utils/createSynapse/waitForDependencies.js +1 -1
- package/dist/utils/createSynapse/waitForDependencies.js.map +1 -1
- package/dist/utils/createSynapseAwaiter.d.ts +13 -10
- package/dist/utils/createSynapseAwaiter.js +30 -3
- package/dist/utils/createSynapseAwaiter.js.map +1 -1
- package/dist/utils/dehydrateModule.d.ts +6 -0
- package/dist/utils/dehydrateModule.js +43 -0
- package/dist/utils/dehydrateModule.js.map +1 -0
- package/dist/utils/index.d.ts +3 -3
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +12 -2
- package/dist/_utils/chunk.util.d.ts.map +0 -1
- package/dist/_utils/deepMerge.util.d.ts.map +0 -1
- package/dist/_utils/error-handling.util.d.ts.map +0 -1
- package/dist/_utils/flatMap.util.d.ts.map +0 -1
- package/dist/_utils/index.d.ts.map +0 -1
- package/dist/_utils/logger-console.util.d.ts.map +0 -1
- package/dist/api/api.module.d.ts.map +0 -1
- package/dist/api/components/endpoint.d.ts.map +0 -1
- package/dist/api/components/query-storage.d.ts.map +0 -1
- package/dist/api/example.d.ts +0 -83
- package/dist/api/example.d.ts.map +0 -1
- package/dist/api/example.js +0 -90
- package/dist/api/example.js.map +0 -1
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/types/api.interface.d.ts.map +0 -1
- package/dist/api/types/endpoint.interface.d.ts.map +0 -1
- package/dist/api/types/query.interface.d.ts.map +0 -1
- package/dist/api/utils/api-helpers.d.ts.map +0 -1
- package/dist/api/utils/create-header-context.d.ts.map +0 -1
- package/dist/api/utils/endpoint-headers.d.ts.map +0 -1
- package/dist/api/utils/fetch-base-query.d.ts.map +0 -1
- package/dist/api/utils/file-utils.d.ts.map +0 -1
- package/dist/api/utils/get-cacheable-headers.d.ts.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/selector/index.d.ts.map +0 -1
- package/dist/core/selector/selector.interface.d.ts.map +0 -1
- package/dist/core/selector/selector.module.d.ts.map +0 -1
- package/dist/core/storage/adapters/async-base-storage.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/local-storage.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/memory-storage.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/path.utils.d.ts.map +0 -1
- package/dist/core/storage/adapters/storage-core.d.ts.map +0 -1
- package/dist/core/storage/adapters/sync-base-storage.service.d.ts.map +0 -1
- package/dist/core/storage/index.d.ts.map +0 -1
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/index.d.ts.map +0 -1
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts +0 -101
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.interface.js +0 -8
- package/dist/core/storage/modules/plugin/plugin.interface.js.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.service.d.ts +0 -49
- package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.service.js +0 -406
- package/dist/core/storage/modules/plugin/plugin.service.js.map +0 -1
- package/dist/core/storage/modules/singleton/mixin.util.d.ts.map +0 -1
- package/dist/core/storage/modules/singleton/models.d.ts.map +0 -1
- package/dist/core/storage/modules/singleton/singleton.util.d.ts.map +0 -1
- package/dist/core/storage/storage.interface.d.ts.map +0 -1
- package/dist/core/storage/utils/broadcast.util.d.ts.map +0 -1
- package/dist/core/storage/utils/cache.util.d.ts.map +0 -1
- package/dist/core/storage/utils/cache.util.js.map +0 -1
- package/dist/core/storage/utils/middleware-module.d.ts.map +0 -1
- package/dist/core/storage/utils/path-selector.util.d.ts.map +0 -1
- package/dist/core/storage/utils/state-diff.util.d.ts.map +0 -1
- package/dist/core/storage/utils/storage-factory.util.d.ts.map +0 -1
- package/dist/core/storage/utils/storage-key.d.ts.map +0 -1
- package/dist/core/storage/utils/storage.utils.d.ts +0 -17
- package/dist/core/storage/utils/storage.utils.d.ts.map +0 -1
- package/dist/core/storage/utils/storage.utils.js +0 -57
- package/dist/core/storage/utils/storage.utils.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/react/hooks/index.d.ts.map +0 -1
- package/dist/react/hooks/useCreateStorage.d.ts.map +0 -1
- package/dist/react/hooks/useSelector.d.ts.map +0 -1
- package/dist/react/hooks/useStorage.d.ts.map +0 -1
- package/dist/react/hooks/useStorageSubscribe.d.ts.map +0 -1
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/utils/awaitSynapse.d.ts.map +0 -1
- package/dist/react/utils/createSynapseCtx.d.ts.map +0 -1
- package/dist/react/utils/index.d.ts.map +0 -1
- package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +0 -1
- package/dist/reactive/dispatcher/index.d.ts.map +0 -1
- package/dist/reactive/dispatcher/middlewares/index.d.ts.map +0 -1
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +0 -1
- package/dist/reactive/dispatcher/standalone.d.ts.map +0 -1
- package/dist/reactive/effects/effects.module.d.ts.map +0 -1
- package/dist/reactive/effects/index.d.ts.map +0 -1
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +0 -1
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +0 -1
- package/dist/reactive/effects/utils/fromRequest.d.ts.map +0 -1
- package/dist/reactive/effects/utils/index.d.ts.map +0 -1
- package/dist/reactive/effects/utils/toObservable.d.ts.map +0 -1
- package/dist/reactive/index.d.ts.map +0 -1
- package/dist/utils/createEventBus.d.ts.map +0 -1
- package/dist/utils/createSynapse/createSynapse.d.ts.map +0 -1
- package/dist/utils/createSynapse/index.d.ts.map +0 -1
- package/dist/utils/createSynapse/types.d.ts.map +0 -1
- package/dist/utils/createSynapse/validate.d.ts +0 -2
- package/dist/utils/createSynapse/validate.d.ts.map +0 -1
- package/dist/utils/createSynapse/validate.js +0 -76
- package/dist/utils/createSynapse/validate.js.map +0 -1
- package/dist/utils/createSynapse/waitForDependencies.d.ts.map +0 -1
- package/dist/utils/createSynapseAwaiter.d.ts.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
export * from './modules/plugin/plugin.interface';
|
|
2
|
-
export * from './modules/plugin/plugin.service';
|
|
3
1
|
export { ConfigMergeStrategy } from './modules/singleton/models';
|
|
4
2
|
export * from './storage.interface';
|
|
5
|
-
export type { BatchingMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares';
|
|
6
|
-
export { broadcastMiddleware, syncBroadcastMiddleware } from './middlewares';
|
|
3
|
+
export type { BatchingMiddlewareOptions, LoggerMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares';
|
|
4
|
+
export { broadcastMiddleware, loggerMiddleware, syncBroadcastMiddleware, syncLoggerMiddleware } from './middlewares';
|
|
7
5
|
export { AsyncBaseStorage } from './adapters/async-base-storage.service';
|
|
8
6
|
export { IndexedDBStorage } from './adapters/indexed-DB.service';
|
|
9
7
|
export { LocalStorage } from './adapters/local-storage.service';
|
|
@@ -13,4 +11,3 @@ export { SyncBaseStorage } from './adapters/sync-base-storage.service';
|
|
|
13
11
|
export { type AsyncMiddleware, type AsyncMiddlewareAPI, type AsyncNextFunction, type Middleware, type MiddlewareAPI, type NextFunction, type StorageAction, type SyncMiddleware, type SyncMiddlewareAPI, type SyncNextFunction, } from './utils/middleware-module';
|
|
14
12
|
export { StorageFactory } from './utils/storage-factory.util';
|
|
15
13
|
export { type StorageKeyType } from './utils/storage-key';
|
|
16
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export * from "./modules/plugin/plugin.interface.js";
|
|
2
|
-
export * from "./modules/plugin/plugin.service.js";
|
|
3
1
|
export * from "./storage.interface.js";
|
|
4
2
|
|
|
5
3
|
|
|
@@ -14,8 +12,6 @@ export * from "./storage.interface.js";
|
|
|
14
12
|
|
|
15
13
|
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
15
|
// Экспортируем публичные адаптеры
|
|
20
16
|
|
|
21
17
|
|
|
@@ -26,7 +22,7 @@ export * from "./storage.interface.js";
|
|
|
26
22
|
|
|
27
23
|
|
|
28
24
|
export { ConfigMergeStrategy } from "./modules/singleton/models.js";
|
|
29
|
-
export { broadcastMiddleware, syncBroadcastMiddleware } from "./middlewares/index.js";
|
|
25
|
+
export { broadcastMiddleware, loggerMiddleware, syncBroadcastMiddleware, syncLoggerMiddleware } from "./middlewares/index.js";
|
|
30
26
|
export { AsyncBaseStorage } from "./adapters/async-base-storage.service.js";
|
|
31
27
|
export { IndexedDBStorage } from "./adapters/indexed-DB.service.js";
|
|
32
28
|
export { LocalStorage } from "./adapters/local-storage.service.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core/storage/index.js","sources":["../../../src/core/storage/index.ts"],"sourcesContent":["// Экспортируем публичные интерфейсы\nexport
|
|
1
|
+
{"version":3,"file":"core/storage/index.js","sources":["../../../src/core/storage/index.ts"],"sourcesContent":["// Экспортируем публичные интерфейсы\nexport { ConfigMergeStrategy } from './modules/singleton/models'\nexport * from './storage.interface'\n\n// Экспортируем публичные middleware\nexport type { BatchingMiddlewareOptions, LoggerMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares'\nexport { broadcastMiddleware, loggerMiddleware, syncBroadcastMiddleware, syncLoggerMiddleware } from './middlewares'\n\n// Экспортируем публичные адаптеры\nexport { AsyncBaseStorage } from './adapters/async-base-storage.service'\nexport { IndexedDBStorage } from './adapters/indexed-DB.service'\nexport { LocalStorage } from './adapters/local-storage.service'\nexport { MemoryStorage } from './adapters/memory-storage.service'\nexport { StorageCore } from './adapters/storage-core'\nexport { SyncBaseStorage } from './adapters/sync-base-storage.service'\n\n// Экспортируем утилиты, которые нужны в публичном API\nexport {\n type AsyncMiddleware,\n type AsyncMiddlewareAPI,\n type AsyncNextFunction,\n type Middleware,\n type MiddlewareAPI,\n type NextFunction,\n type StorageAction,\n type SyncMiddleware,\n type SyncMiddlewareAPI,\n type SyncNextFunction,\n} from './utils/middleware-module'\nexport { StorageFactory } from './utils/storage-factory.util'\nexport { type StorageKeyType } from './utils/storage-key'\n"],"names":["ConfigMergeStrategy","broadcastMiddleware","loggerMiddleware","syncBroadcastMiddleware","syncLoggerMiddleware","AsyncBaseStorage","IndexedDBStorage","LocalStorage","MemoryStorage","StorageCore","SyncBaseStorage","StorageFactory"],"mappings":";;;;;;;;;;AAAA,oCAAoC;AAC4B;AAC7B;AAIiF;AAEpH,kCAAkC;AACsC;AACR;AACD;AACE;AACZ;AACiB;AAeT"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export { broadcastMiddleware } from './broadcast.middleware';
|
|
2
2
|
export type { BatchingMiddlewareOptions } from './storage-batching.middleware';
|
|
3
|
+
export type { LoggerMiddlewareOptions } from './storage-logger.middleware';
|
|
4
|
+
export { loggerMiddleware } from './storage-logger.middleware';
|
|
3
5
|
export type { ShallowCompareMiddlewareOptions } from './storage-shallow-compare.middleware';
|
|
4
6
|
export { syncBroadcastMiddleware } from './sync-broadcast.middleware';
|
|
5
7
|
export type { SyncBatchingMiddlewareOptions } from './sync-storage-batching.middleware';
|
|
6
8
|
export { syncBatchingMiddleware } from './sync-storage-batching.middleware';
|
|
9
|
+
export { syncLoggerMiddleware } from './sync-storage-logger.middleware';
|
|
7
10
|
export type { SyncShallowCompareMiddlewareOptions } from './sync-storage-shallow-compare.middleware';
|
|
8
11
|
export { syncShallowCompareMiddleware } from './sync-storage-shallow-compare.middleware';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -2,16 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
+
|
|
6
|
+
|
|
5
7
|
// Async middlewares (existing)
|
|
6
8
|
|
|
9
|
+
|
|
7
10
|
// Sync middlewares
|
|
8
11
|
|
|
9
12
|
|
|
10
13
|
|
|
11
14
|
|
|
15
|
+
|
|
12
16
|
export { broadcastMiddleware } from "./broadcast.middleware.js";
|
|
17
|
+
export { loggerMiddleware } from "./storage-logger.middleware.js";
|
|
13
18
|
export { syncBroadcastMiddleware } from "./sync-broadcast.middleware.js";
|
|
14
19
|
export { syncBatchingMiddleware } from "./sync-storage-batching.middleware.js";
|
|
20
|
+
export { syncLoggerMiddleware } from "./sync-storage-logger.middleware.js";
|
|
15
21
|
export { syncShallowCompareMiddleware } from "./sync-storage-shallow-compare.middleware.js";
|
|
16
22
|
|
|
17
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core/storage/middlewares/index.js","sources":["../../../../src/core/storage/middlewares/index.ts"],"sourcesContent":["// Async middlewares (existing)\nexport { broadcastMiddleware } from './broadcast.middleware'\nexport type { BatchingMiddlewareOptions } from './storage-batching.middleware'\nexport type { ShallowCompareMiddlewareOptions } from './storage-shallow-compare.middleware'\n\n// Sync middlewares\nexport { syncBroadcastMiddleware } from './sync-broadcast.middleware'\nexport type { SyncBatchingMiddlewareOptions } from './sync-storage-batching.middleware'\nexport { syncBatchingMiddleware } from './sync-storage-batching.middleware'\nexport type { SyncShallowCompareMiddlewareOptions } from './sync-storage-shallow-compare.middleware'\nexport { syncShallowCompareMiddleware } from './sync-storage-shallow-compare.middleware'\n"],"names":["broadcastMiddleware","syncBroadcastMiddleware","syncBatchingMiddleware","syncShallowCompareMiddleware"],"mappings":"
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/index.js","sources":["../../../../src/core/storage/middlewares/index.ts"],"sourcesContent":["// Async middlewares (existing)\nexport { broadcastMiddleware } from './broadcast.middleware'\nexport type { BatchingMiddlewareOptions } from './storage-batching.middleware'\nexport type { LoggerMiddlewareOptions } from './storage-logger.middleware'\nexport { loggerMiddleware } from './storage-logger.middleware'\nexport type { ShallowCompareMiddlewareOptions } from './storage-shallow-compare.middleware'\n\n// Sync middlewares\nexport { syncBroadcastMiddleware } from './sync-broadcast.middleware'\nexport type { SyncBatchingMiddlewareOptions } from './sync-storage-batching.middleware'\nexport { syncBatchingMiddleware } from './sync-storage-batching.middleware'\nexport { syncLoggerMiddleware } from './sync-storage-logger.middleware'\nexport type { SyncShallowCompareMiddlewareOptions } from './sync-storage-shallow-compare.middleware'\nexport { syncShallowCompareMiddleware } from './sync-storage-shallow-compare.middleware'\n"],"names":["broadcastMiddleware","loggerMiddleware","syncBroadcastMiddleware","syncBatchingMiddleware","syncLoggerMiddleware","syncShallowCompareMiddleware"],"mappings":";;;;;;AAAA,+BAA+B;AAC6B;AAGE;AAG9D,mBAAmB;AACkD;AAEM;AACJ;AAEiB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AsyncMiddleware } from '../utils/middleware-module';
|
|
2
|
+
export interface LoggerMiddlewareOptions {
|
|
3
|
+
/** Сворачивать группу лога (console.groupCollapsed). По умолчанию `false`. */
|
|
4
|
+
collapsed?: boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Печатать prev/next состояние. По умолчанию `true`. Включает доп. `getState()` на
|
|
7
|
+
* каждое пишущее действие — поэтому middleware только для dev.
|
|
8
|
+
*/
|
|
9
|
+
showState?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Dev-only middleware: логирует пишущие действия storage (тип, ключ, длительность и,
|
|
13
|
+
* опционально, prev/next состояние). Намеренно минимален — без i18n/цветов (для полноценного
|
|
14
|
+
* dev-лога диспетчера есть `loggerDispatcherMiddleware`). Подключайте только в dev:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* middlewares: (getDefault) => (import.meta.env.DEV ? [getDefault().logger()] : [])
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const loggerMiddleware: (options?: LoggerMiddlewareOptions) => AsyncMiddleware;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { loggerConsole } from "../../../_utils/index.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
/** Логируем только пишущие действия — чтения (`get`/`keys`) не шумят. */ const WRITE_ACTIONS = new Set([
|
|
6
|
+
'set',
|
|
7
|
+
'update',
|
|
8
|
+
'delete',
|
|
9
|
+
'clear',
|
|
10
|
+
'reset',
|
|
11
|
+
'init'
|
|
12
|
+
]);
|
|
13
|
+
/**
|
|
14
|
+
* Dev-only middleware: логирует пишущие действия storage (тип, ключ, длительность и,
|
|
15
|
+
* опционально, prev/next состояние). Намеренно минимален — без i18n/цветов (для полноценного
|
|
16
|
+
* dev-лога диспетчера есть `loggerDispatcherMiddleware`). Подключайте только в dev:
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* middlewares: (getDefault) => (import.meta.env.DEV ? [getDefault().logger()] : [])
|
|
20
|
+
* ```
|
|
21
|
+
*/ const loggerMiddleware = (options = {})=>{
|
|
22
|
+
const { collapsed = false, showState = true } = options;
|
|
23
|
+
return {
|
|
24
|
+
name: 'logger',
|
|
25
|
+
reducer: (api)=>(next)=>async (action)=>{
|
|
26
|
+
if (!WRITE_ACTIONS.has(action.type)) {
|
|
27
|
+
return next(action);
|
|
28
|
+
}
|
|
29
|
+
const started = Date.now();
|
|
30
|
+
const prevState = showState ? await api.getState() : undefined;
|
|
31
|
+
try {
|
|
32
|
+
const result = await next(action);
|
|
33
|
+
const time = Date.now() - started;
|
|
34
|
+
const group = collapsed ? loggerConsole.groupCollapsed : loggerConsole.group;
|
|
35
|
+
group(`[synapse storage] ${action.type}${action.key != null ? ` "${String(action.key)}"` : ''} (${time}ms)`);
|
|
36
|
+
loggerConsole.log('action:', action);
|
|
37
|
+
if (showState) {
|
|
38
|
+
loggerConsole.log('prev:', prevState);
|
|
39
|
+
loggerConsole.log('next:', await api.getState());
|
|
40
|
+
}
|
|
41
|
+
loggerConsole.groupEnd();
|
|
42
|
+
return result;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
loggerConsole.error(`[synapse storage] ${action.type} FAILED`, error);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export { loggerMiddleware };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=storage-logger.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/storage-logger.middleware.js","sources":["../../../../src/core/storage/middlewares/storage-logger.middleware.ts"],"sourcesContent":["import { loggerConsole } from '../../../_utils'\nimport { AsyncMiddleware, AsyncMiddlewareAPI, AsyncNextFunction, StorageAction, StorageActionType } from '../utils/middleware-module'\n\nexport interface LoggerMiddlewareOptions {\n /** Сворачивать группу лога (console.groupCollapsed). По умолчанию `false`. */\n collapsed?: boolean\n /**\n * Печатать prev/next состояние. По умолчанию `true`. Включает доп. `getState()` на\n * каждое пишущее действие — поэтому middleware только для dev.\n */\n showState?: boolean\n}\n\n/** Логируем только пишущие действия — чтения (`get`/`keys`) не шумят. */\nconst WRITE_ACTIONS = new Set<StorageActionType>(['set', 'update', 'delete', 'clear', 'reset', 'init'])\n\n/**\n * Dev-only middleware: логирует пишущие действия storage (тип, ключ, длительность и,\n * опционально, prev/next состояние). Намеренно минимален — без i18n/цветов (для полноценного\n * dev-лога диспетчера есть `loggerDispatcherMiddleware`). Подключайте только в dev:\n *\n * ```ts\n * middlewares: (getDefault) => (import.meta.env.DEV ? [getDefault().logger()] : [])\n * ```\n */\nexport const loggerMiddleware = (options: LoggerMiddlewareOptions = {}): AsyncMiddleware => {\n const { collapsed = false, showState = true } = options\n\n return {\n name: 'logger',\n reducer: (api: AsyncMiddlewareAPI) => (next: AsyncNextFunction) => async (action: StorageAction) => {\n if (!WRITE_ACTIONS.has(action.type)) {\n return next(action)\n }\n\n const started = Date.now()\n const prevState = showState ? await api.getState() : undefined\n\n try {\n const result = await next(action)\n const time = Date.now() - started\n\n const group = collapsed ? loggerConsole.groupCollapsed : loggerConsole.group\n group(`[synapse storage] ${action.type}${action.key != null ? ` \"${String(action.key)}\"` : ''} (${time}ms)`)\n loggerConsole.log('action:', action)\n if (showState) {\n loggerConsole.log('prev:', prevState)\n loggerConsole.log('next:', await api.getState())\n }\n loggerConsole.groupEnd()\n\n return result\n } catch (error) {\n loggerConsole.error(`[synapse storage] ${action.type} FAILED`, error)\n throw error\n }\n },\n }\n}\n"],"names":["loggerConsole","WRITE_ACTIONS","Set","loggerMiddleware","options","collapsed","showState","api","next","action","started","Date","prevState","undefined","result","time","group","String","error"],"mappings":";;;AAA+C;AAa/C,uEAAuE,GACvE,MAAMC,aAAaA,GAAG,IAAIC,IAAuB;IAAC;IAAO;IAAU;IAAU;IAAS;IAAS;CAAO;AAEtG;;;;;;;;CAQC,GACM,MAAMC,gBAAgBA,GAAG,CAACC,UAAmC,CAAC,CAAC;IACpE,MAAM,EAAEC,YAAY,KAAK,EAAEC,YAAY,IAAI,EAAE,GAAGF;IAEhD,OAAO;QACL,MAAM;QACN,SAAS,CAACG,MAA4B,CAACC,OAA4B,OAAOC;oBACxE,IAAI,CAACR,aAAaA,CAAC,GAAG,CAACQ,OAAO,IAAI,GAAG;wBACnC,OAAOD,KAAKC;oBACd;oBAEA,MAAMC,UAAUC,KAAK,GAAG;oBACxB,MAAMC,YAAYN,YAAY,MAAMC,IAAI,QAAQ,KAAKM;oBAErD,IAAI;wBACF,MAAMC,SAAS,MAAMN,KAAKC;wBAC1B,MAAMM,OAAOJ,KAAK,GAAG,KAAKD;wBAE1B,MAAMM,QAAQX,YAAYL,4BAA4B,GAAGA,mBAAmB;wBAC5EgB,MAAM,CAAC,kBAAkB,EAAEP,OAAO,IAAI,GAAGA,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,EAAEQ,OAAOR,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,EAAEM,KAAK,GAAG,CAAC;wBAC3Gf,iBAAiB,CAAC,WAAWS;wBAC7B,IAAIH,WAAW;4BACbN,iBAAiB,CAAC,SAASY;4BAC3BZ,iBAAiB,CAAC,SAAS,MAAMO,IAAI,QAAQ;wBAC/C;wBACAP,sBAAsB;wBAEtB,OAAOc;oBACT,EAAE,OAAOI,OAAO;wBACdlB,mBAAmB,CAAC,CAAC,kBAAkB,EAAES,OAAO,IAAI,CAAC,OAAO,CAAC,EAAES;wBAC/D,MAAMA;oBACR;gBACF;IACF;AACF,EAAC"}
|
|
@@ -4,4 +4,3 @@ export interface ShallowCompareMiddlewareOptions {
|
|
|
4
4
|
comparator?: <T>(prev: T, next: T) => boolean;
|
|
5
5
|
}
|
|
6
6
|
export declare const shallowCompareMiddleware: (options?: ShallowCompareMiddlewareOptions) => Middleware;
|
|
7
|
-
//# sourceMappingURL=storage-shallow-compare.middleware.d.ts.map
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { VALUE_NOT_CHANGED } from "../utils/middleware-module.js";
|
|
2
|
+
import { shallowEqual } from "../utils/state-diff.util.js";
|
|
3
|
+
|
|
4
|
+
|
|
2
5
|
|
|
3
6
|
|
|
4
7
|
|
|
5
8
|
const shallowCompareMiddleware = (options = {})=>{
|
|
6
|
-
const { comparator =
|
|
7
|
-
if (prev === next) return true;
|
|
8
|
-
if (typeof prev !== 'object' || typeof next !== 'object' || prev === null || next === null) {
|
|
9
|
-
return prev === next;
|
|
10
|
-
}
|
|
11
|
-
const keysA = Object.keys(prev);
|
|
12
|
-
const keysB = Object.keys(next);
|
|
13
|
-
if (keysA.length !== keysB.length) return false;
|
|
14
|
-
return keysA.every((key)=>Object.prototype.hasOwnProperty.call(next, key) && prev[key] === next[key]);
|
|
15
|
-
}, segments = [] } = options;
|
|
9
|
+
const { comparator = shallowEqual, segments = [] } = options;
|
|
16
10
|
// Кэш последних значений
|
|
17
11
|
const valueCache = new Map();
|
|
18
12
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core/storage/middlewares/storage-shallow-compare.middleware.js","sources":["../../../../src/core/storage/middlewares/storage-shallow-compare.middleware.ts"],"sourcesContent":["import { Middleware, MiddlewareAPI, NextFunction, StorageAction, VALUE_NOT_CHANGED } from '../utils/middleware-module'\nimport { StorageKeyType } from '../utils/storage-key'\n\nexport interface ShallowCompareMiddlewareOptions {\n segments?: string[]\n comparator?: <T>(prev: T, next: T) => boolean\n}\n\nexport const shallowCompareMiddleware = (options: ShallowCompareMiddlewareOptions = {}): Middleware => {\n const {
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/storage-shallow-compare.middleware.js","sources":["../../../../src/core/storage/middlewares/storage-shallow-compare.middleware.ts"],"sourcesContent":["import { Middleware, MiddlewareAPI, NextFunction, StorageAction, VALUE_NOT_CHANGED } from '../utils/middleware-module'\nimport { shallowEqual } from '../utils/state-diff.util'\nimport { StorageKeyType } from '../utils/storage-key'\n\nexport interface ShallowCompareMiddlewareOptions {\n segments?: string[]\n comparator?: <T>(prev: T, next: T) => boolean\n}\n\nexport const shallowCompareMiddleware = (options: ShallowCompareMiddlewareOptions = {}): Middleware => {\n const { comparator = shallowEqual, segments = [] } = options\n\n // Кэш последних значений\n const valueCache = new Map<StorageKeyType, any>()\n\n return {\n name: 'shallow-compare',\n setup: (api: MiddlewareAPI) => {},\n reducer: (api: MiddlewareAPI) => (next: NextFunction) => async (action: StorageAction) => {\n // Пропускаем действия кроме set\n if (action.type !== 'set' || (segments.length && !segments.includes(action.metadata?.segment ?? 'default'))) {\n return next(action)\n }\n\n const cacheKey = action.key!\n const prevValue = valueCache.get(cacheKey)\n const nextValue = action.value\n\n // Если значения равны, возвращаем sentinel — не модифицируем значение\n if (prevValue !== undefined && comparator(prevValue, nextValue)) {\n return VALUE_NOT_CHANGED\n }\n\n // Иначе обновляем кэш и продолжаем\n const result = await next(action)\n valueCache.set(cacheKey, result !== undefined ? result : nextValue)\n return result\n },\n }\n}\n"],"names":["VALUE_NOT_CHANGED","shallowEqual","shallowCompareMiddleware","options","comparator","segments","valueCache","Map","api","next","action","cacheKey","prevValue","nextValue","undefined","result"],"mappings":";;;;;AAAsH;AAC/D;AAQhD,MAAME,wBAAwBA,GAAG,CAACC,UAA2C,CAAC,CAAC;IACpF,MAAM,EAAEC,aAAaH,YAAY,EAAEI,WAAW,EAAE,EAAE,GAAGF;IAErD,yBAAyB;IACzB,MAAMG,aAAa,IAAIC;IAEvB,OAAO;QACL,MAAM;QACN,OAAO,CAACC,OAAwB;QAChC,SAAS,CAACA,MAAuB,CAACC,OAAuB,OAAOC;oBAC9D,gCAAgC;oBAChC,IAAIA,OAAO,IAAI,KAAK,SAAUL,SAAS,MAAM,IAAI,CAACA,SAAS,QAAQ,CAACK,OAAO,QAAQ,EAAE,WAAW,YAAa;wBAC3G,OAAOD,KAAKC;oBACd;oBAEA,MAAMC,WAAWD,OAAO,GAAG;oBAC3B,MAAME,YAAYN,WAAW,GAAG,CAACK;oBACjC,MAAME,YAAYH,OAAO,KAAK;oBAE9B,sEAAsE;oBACtE,IAAIE,cAAcE,aAAaV,WAAWQ,WAAWC,YAAY;wBAC/D,OAAOb,iBAAiBA;oBAC1B;oBAEA,mCAAmC;oBACnC,MAAMe,SAAS,MAAMN,KAAKC;oBAC1BJ,WAAW,GAAG,CAACK,UAAUI,WAAWD,YAAYC,SAASF;oBACzD,OAAOE;gBACT;IACF;AACF,EAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SyncMiddleware } from '../utils/middleware-module';
|
|
2
|
+
import { LoggerMiddlewareOptions } from './storage-logger.middleware';
|
|
3
|
+
/**
|
|
4
|
+
* Sync-версия {@link loggerMiddleware} для Memory/LocalStorage. Dev-only: логирует пишущие
|
|
5
|
+
* действия (тип, ключ, длительность, опционально prev/next состояние). Без i18n/цветов.
|
|
6
|
+
*/
|
|
7
|
+
export declare const syncLoggerMiddleware: (options?: LoggerMiddlewareOptions) => SyncMiddleware;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { loggerConsole } from "../../../_utils/index.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
/** Логируем только пишущие действия — чтения (`get`/`keys`) не шумят. */ const WRITE_ACTIONS = new Set([
|
|
6
|
+
'set',
|
|
7
|
+
'update',
|
|
8
|
+
'delete',
|
|
9
|
+
'clear',
|
|
10
|
+
'reset',
|
|
11
|
+
'init'
|
|
12
|
+
]);
|
|
13
|
+
/**
|
|
14
|
+
* Sync-версия {@link loggerMiddleware} для Memory/LocalStorage. Dev-only: логирует пишущие
|
|
15
|
+
* действия (тип, ключ, длительность, опционально prev/next состояние). Без i18n/цветов.
|
|
16
|
+
*/ const syncLoggerMiddleware = (options = {})=>{
|
|
17
|
+
const { collapsed = false, showState = true } = options;
|
|
18
|
+
return {
|
|
19
|
+
name: 'sync-logger',
|
|
20
|
+
reducer: (api)=>(next)=>(action)=>{
|
|
21
|
+
if (!WRITE_ACTIONS.has(action.type)) {
|
|
22
|
+
return next(action);
|
|
23
|
+
}
|
|
24
|
+
const started = Date.now();
|
|
25
|
+
const prevState = showState ? api.getState() : undefined;
|
|
26
|
+
try {
|
|
27
|
+
const result = next(action);
|
|
28
|
+
const time = Date.now() - started;
|
|
29
|
+
const group = collapsed ? loggerConsole.groupCollapsed : loggerConsole.group;
|
|
30
|
+
group(`[synapse storage] ${action.type}${action.key != null ? ` "${String(action.key)}"` : ''} (${time}ms)`);
|
|
31
|
+
loggerConsole.log('action:', action);
|
|
32
|
+
if (showState) {
|
|
33
|
+
loggerConsole.log('prev:', prevState);
|
|
34
|
+
loggerConsole.log('next:', api.getState());
|
|
35
|
+
}
|
|
36
|
+
loggerConsole.groupEnd();
|
|
37
|
+
return result;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
loggerConsole.error(`[synapse storage] ${action.type} FAILED`, error);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export { syncLoggerMiddleware };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=sync-storage-logger.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/sync-storage-logger.middleware.js","sources":["../../../../src/core/storage/middlewares/sync-storage-logger.middleware.ts"],"sourcesContent":["import { loggerConsole } from '../../../_utils'\nimport { StorageAction, StorageActionType, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction } from '../utils/middleware-module'\nimport { LoggerMiddlewareOptions } from './storage-logger.middleware'\n\n/** Логируем только пишущие действия — чтения (`get`/`keys`) не шумят. */\nconst WRITE_ACTIONS = new Set<StorageActionType>(['set', 'update', 'delete', 'clear', 'reset', 'init'])\n\n/**\n * Sync-версия {@link loggerMiddleware} для Memory/LocalStorage. Dev-only: логирует пишущие\n * действия (тип, ключ, длительность, опционально prev/next состояние). Без i18n/цветов.\n */\nexport const syncLoggerMiddleware = (options: LoggerMiddlewareOptions = {}): SyncMiddleware => {\n const { collapsed = false, showState = true } = options\n\n return {\n name: 'sync-logger',\n reducer: (api: SyncMiddlewareAPI) => (next: SyncNextFunction) => (action: StorageAction) => {\n if (!WRITE_ACTIONS.has(action.type)) {\n return next(action)\n }\n\n const started = Date.now()\n const prevState = showState ? api.getState() : undefined\n\n try {\n const result = next(action)\n const time = Date.now() - started\n\n const group = collapsed ? loggerConsole.groupCollapsed : loggerConsole.group\n group(`[synapse storage] ${action.type}${action.key != null ? ` \"${String(action.key)}\"` : ''} (${time}ms)`)\n loggerConsole.log('action:', action)\n if (showState) {\n loggerConsole.log('prev:', prevState)\n loggerConsole.log('next:', api.getState())\n }\n loggerConsole.groupEnd()\n\n return result\n } catch (error) {\n loggerConsole.error(`[synapse storage] ${action.type} FAILED`, error)\n throw error\n }\n },\n }\n}\n"],"names":["loggerConsole","WRITE_ACTIONS","Set","syncLoggerMiddleware","options","collapsed","showState","api","next","action","started","Date","prevState","undefined","result","time","group","String","error"],"mappings":";;;AAA+C;AAI/C,uEAAuE,GACvE,MAAMC,aAAaA,GAAG,IAAIC,IAAuB;IAAC;IAAO;IAAU;IAAU;IAAS;IAAS;CAAO;AAEtG;;;CAGC,GACM,MAAMC,oBAAoBA,GAAG,CAACC,UAAmC,CAAC,CAAC;IACxE,MAAM,EAAEC,YAAY,KAAK,EAAEC,YAAY,IAAI,EAAE,GAAGF;IAEhD,OAAO;QACL,MAAM;QACN,SAAS,CAACG,MAA2B,CAACC,OAA2B,CAACC;oBAChE,IAAI,CAACR,aAAaA,CAAC,GAAG,CAACQ,OAAO,IAAI,GAAG;wBACnC,OAAOD,KAAKC;oBACd;oBAEA,MAAMC,UAAUC,KAAK,GAAG;oBACxB,MAAMC,YAAYN,YAAYC,IAAI,QAAQ,KAAKM;oBAE/C,IAAI;wBACF,MAAMC,SAASN,KAAKC;wBACpB,MAAMM,OAAOJ,KAAK,GAAG,KAAKD;wBAE1B,MAAMM,QAAQX,YAAYL,4BAA4B,GAAGA,mBAAmB;wBAC5EgB,MAAM,CAAC,kBAAkB,EAAEP,OAAO,IAAI,GAAGA,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,EAAEQ,OAAOR,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,EAAEM,KAAK,GAAG,CAAC;wBAC3Gf,iBAAiB,CAAC,WAAWS;wBAC7B,IAAIH,WAAW;4BACbN,iBAAiB,CAAC,SAASY;4BAC3BZ,iBAAiB,CAAC,SAASO,IAAI,QAAQ;wBACzC;wBACAP,sBAAsB;wBAEtB,OAAOc;oBACT,EAAE,OAAOI,OAAO;wBACdlB,mBAAmB,CAAC,CAAC,kBAAkB,EAAES,OAAO,IAAI,CAAC,OAAO,CAAC,EAAES;wBAC/D,MAAMA;oBACR;gBACF;IACF;AACF,EAAC"}
|
|
@@ -4,4 +4,3 @@ export interface SyncShallowCompareMiddlewareOptions {
|
|
|
4
4
|
comparator?: <T>(prev: T, next: T) => boolean;
|
|
5
5
|
}
|
|
6
6
|
export declare const syncShallowCompareMiddleware: (options?: SyncShallowCompareMiddlewareOptions) => SyncMiddleware;
|
|
7
|
-
//# sourceMappingURL=sync-storage-shallow-compare.middleware.d.ts.map
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { VALUE_NOT_CHANGED } from "../utils/middleware-module.js";
|
|
2
|
+
import { shallowEqual } from "../utils/state-diff.util.js";
|
|
3
|
+
|
|
4
|
+
|
|
2
5
|
|
|
3
6
|
|
|
4
7
|
|
|
5
8
|
const syncShallowCompareMiddleware = (options = {})=>{
|
|
6
|
-
const { comparator =
|
|
7
|
-
if (prev === next) return true;
|
|
8
|
-
if (typeof prev !== 'object' || typeof next !== 'object' || prev === null || next === null) {
|
|
9
|
-
return prev === next;
|
|
10
|
-
}
|
|
11
|
-
const keysA = Object.keys(prev);
|
|
12
|
-
const keysB = Object.keys(next);
|
|
13
|
-
if (keysA.length !== keysB.length) return false;
|
|
14
|
-
return keysA.every((key)=>Object.prototype.hasOwnProperty.call(next, key) && prev[key] === next[key]);
|
|
15
|
-
}, segments = [] } = options;
|
|
9
|
+
const { comparator = shallowEqual, segments = [] } = options;
|
|
16
10
|
const valueCache = new Map();
|
|
17
11
|
return {
|
|
18
12
|
name: 'sync-shallow-compare',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core/storage/middlewares/sync-storage-shallow-compare.middleware.js","sources":["../../../../src/core/storage/middlewares/sync-storage-shallow-compare.middleware.ts"],"sourcesContent":["import { StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction, VALUE_NOT_CHANGED } from '../utils/middleware-module'\nimport { StorageKeyType } from '../utils/storage-key'\n\nexport interface SyncShallowCompareMiddlewareOptions {\n segments?: string[]\n comparator?: <T>(prev: T, next: T) => boolean\n}\n\nexport const syncShallowCompareMiddleware = (options: SyncShallowCompareMiddlewareOptions = {}): SyncMiddleware => {\n const {
|
|
1
|
+
{"version":3,"file":"core/storage/middlewares/sync-storage-shallow-compare.middleware.js","sources":["../../../../src/core/storage/middlewares/sync-storage-shallow-compare.middleware.ts"],"sourcesContent":["import { StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction, VALUE_NOT_CHANGED } from '../utils/middleware-module'\nimport { shallowEqual } from '../utils/state-diff.util'\nimport { StorageKeyType } from '../utils/storage-key'\n\nexport interface SyncShallowCompareMiddlewareOptions {\n segments?: string[]\n comparator?: <T>(prev: T, next: T) => boolean\n}\n\nexport const syncShallowCompareMiddleware = (options: SyncShallowCompareMiddlewareOptions = {}): SyncMiddleware => {\n const { comparator = shallowEqual, segments = [] } = options\n\n const valueCache = new Map<StorageKeyType, any>()\n\n return {\n name: 'sync-shallow-compare',\n setup: () => {},\n reducer: (_api: SyncMiddlewareAPI) => (next: SyncNextFunction) => (action: StorageAction) => {\n if (action.type !== 'set' || (segments.length && !segments.includes(action.metadata?.segment ?? 'default'))) {\n return next(action)\n }\n\n const cacheKey = action.key!\n const prevValue = valueCache.get(cacheKey)\n const nextValue = action.value\n\n if (prevValue !== undefined && comparator(prevValue, nextValue)) {\n return VALUE_NOT_CHANGED\n }\n\n const result = next(action)\n valueCache.set(cacheKey, result !== undefined ? result : nextValue)\n return result\n },\n }\n}\n"],"names":["VALUE_NOT_CHANGED","shallowEqual","syncShallowCompareMiddleware","options","comparator","segments","valueCache","Map","_api","next","action","cacheKey","prevValue","nextValue","undefined","result"],"mappings":";;;;;AAAkI;AAC3E;AAQhD,MAAME,4BAA4BA,GAAG,CAACC,UAA+C,CAAC,CAAC;IAC5F,MAAM,EAAEC,aAAaH,YAAY,EAAEI,WAAW,EAAE,EAAE,GAAGF;IAErD,MAAMG,aAAa,IAAIC;IAEvB,OAAO;QACL,MAAM;QACN,OAAO,KAAO;QACd,SAAS,CAACC,OAA4B,CAACC,OAA2B,CAACC;oBACjE,IAAIA,OAAO,IAAI,KAAK,SAAUL,SAAS,MAAM,IAAI,CAACA,SAAS,QAAQ,CAACK,OAAO,QAAQ,EAAE,WAAW,YAAa;wBAC3G,OAAOD,KAAKC;oBACd;oBAEA,MAAMC,WAAWD,OAAO,GAAG;oBAC3B,MAAME,YAAYN,WAAW,GAAG,CAACK;oBACjC,MAAME,YAAYH,OAAO,KAAK;oBAE9B,IAAIE,cAAcE,aAAaV,WAAWQ,WAAWC,YAAY;wBAC/D,OAAOb,iBAAiBA;oBAC1B;oBAEA,MAAMe,SAASN,KAAKC;oBACpBJ,WAAW,GAAG,CAACK,UAAUI,WAAWD,YAAYC,SAASF;oBACzD,OAAOE;gBACT;IACF;AACF,EAAC"}
|
|
@@ -3,4 +3,3 @@ import { BaseStorageConfig, ILogger, StorageType } from '../../storage.interface
|
|
|
3
3
|
export declare class SingletonMixin {
|
|
4
4
|
static handleSingletonCreation<T extends StorageCore<any>>(config: BaseStorageConfig, storageType: StorageType, factory: (finalConfig: BaseStorageConfig) => T, logger?: ILogger): T;
|
|
5
5
|
}
|
|
6
|
-
//# sourceMappingURL=mixin.util.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IndexedDBConfig } from './adapters/indexed-DB.service';
|
|
2
|
-
import { BatchingMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares';
|
|
2
|
+
import { BatchingMiddlewareOptions, LoggerMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares';
|
|
3
3
|
import { SingletonOptions } from './modules/singleton/models';
|
|
4
4
|
import { AsyncMiddleware, AsyncMiddlewareAPI, AsyncNextFunction, Middleware, MiddlewareAPI, NextFunction, StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction } from './utils/middleware-module';
|
|
5
5
|
import { StorageKeyType } from './utils/storage-key';
|
|
@@ -15,8 +15,6 @@ export interface StorageInitStatus {
|
|
|
15
15
|
}
|
|
16
16
|
export declare enum StorageEvents {
|
|
17
17
|
STORAGE_UPDATE = "storage:update",
|
|
18
|
-
STORAGE_DELETE = "storage:delete",
|
|
19
|
-
STORAGE_PATCH = "storage:patch",
|
|
20
18
|
STORAGE_SELECT = "storage:select",
|
|
21
19
|
STORAGE_CLEAR = "storage:clear",
|
|
22
20
|
STORAGE_DESTROY = "storage:destroy"
|
|
@@ -83,6 +81,12 @@ export interface ISyncStorage<T extends Record<string, any> = any> extends IStor
|
|
|
83
81
|
clear(): void;
|
|
84
82
|
/** Сброс состояния к initialState (или к {} если initialState не задан) */
|
|
85
83
|
reset(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Гидрация: заменяет состояние переданным снапшотом (SSR/server-state). Вызванная ДО
|
|
86
|
+
* `initialize()`, она засевает хранилище так, что инициализация не перезатрёт его
|
|
87
|
+
* `initialState`. Вызванная после — заменяет состояние и уведомляет подписчиков.
|
|
88
|
+
*/
|
|
89
|
+
hydrate(state: T): void;
|
|
86
90
|
keys(): string[];
|
|
87
91
|
getState(): T;
|
|
88
92
|
}
|
|
@@ -100,6 +104,12 @@ export interface IAsyncStorage<T extends Record<string, any> = any> extends ISto
|
|
|
100
104
|
clear(): Promise<void>;
|
|
101
105
|
/** Сброс состояния к initialState (или к {} если initialState не задан) */
|
|
102
106
|
reset(): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Гидрация: заменяет состояние переданным снапшотом (SSR/server-state). Вызванная ДО
|
|
109
|
+
* `initialize()`, она засевает хранилище так, что инициализация не перезатрёт его
|
|
110
|
+
* `initialState`. Вызванная после — заменяет состояние и уведомляет подписчиков.
|
|
111
|
+
*/
|
|
112
|
+
hydrate(state: T): Promise<void>;
|
|
103
113
|
keys(): Promise<string[]>;
|
|
104
114
|
getState(): Promise<T>;
|
|
105
115
|
}
|
|
@@ -112,10 +122,14 @@ export type StorageType = 'memory' | 'localStorage' | 'indexedDB';
|
|
|
112
122
|
export interface SyncDefaultMiddlewares {
|
|
113
123
|
batching: (options?: BatchingMiddlewareOptions) => SyncMiddleware;
|
|
114
124
|
shallowCompare: (options?: ShallowCompareMiddlewareOptions) => SyncMiddleware;
|
|
125
|
+
/** Dev-only логгер пишущих действий (тип/ключ/длительность, опц. prev/next состояние). */
|
|
126
|
+
logger: (options?: LoggerMiddlewareOptions) => SyncMiddleware;
|
|
115
127
|
}
|
|
116
128
|
export interface AsyncDefaultMiddlewares {
|
|
117
129
|
batching: (options?: BatchingMiddlewareOptions) => AsyncMiddleware;
|
|
118
130
|
shallowCompare: (options?: ShallowCompareMiddlewareOptions) => AsyncMiddleware;
|
|
131
|
+
/** Dev-only логгер пишущих действий (тип/ключ/длительность, опц. prev/next состояние). */
|
|
132
|
+
logger: (options?: LoggerMiddlewareOptions) => AsyncMiddleware;
|
|
119
133
|
}
|
|
120
134
|
/** @deprecated Use SyncDefaultMiddlewares or AsyncDefaultMiddlewares */
|
|
121
135
|
export type DefaultMiddlewares = AsyncDefaultMiddlewares;
|
|
@@ -127,15 +141,57 @@ export type ConfigureSyncMiddlewares = (getDefaultMiddleware: GetSyncDefaultMidd
|
|
|
127
141
|
export type ConfigureAsyncMiddlewares = (getDefaultMiddleware: GetAsyncDefaultMiddleware) => AsyncMiddleware[];
|
|
128
142
|
/** @deprecated Use ConfigureAsyncMiddlewares */
|
|
129
143
|
export type ConfigureMiddlewares = ConfigureAsyncMiddlewares;
|
|
144
|
+
/**
|
|
145
|
+
* Функция миграции персистентного состояния между версиями схемы.
|
|
146
|
+
* Вызывается при `initialize()`, если в хранилище лежат данные с версией ниже текущей
|
|
147
|
+
* (`config.version`). Получает сырое сохранённое состояние и его версию, должна вернуть
|
|
148
|
+
* состояние, соответствующее текущей схеме.
|
|
149
|
+
*/
|
|
150
|
+
export type MigrateFn<T extends Record<string, any> = Record<string, any>> = (persistedState: any, persistedVersion: number) => T;
|
|
130
151
|
/** Базовая конфигурация хранилища (общие поля) */
|
|
131
152
|
export interface BaseStorageConfig<T extends Record<string, any> = Record<string, any>> {
|
|
132
153
|
name: string;
|
|
133
154
|
initialState?: T;
|
|
134
155
|
singleton?: SingletonOptions;
|
|
156
|
+
/**
|
|
157
|
+
* Версия схемы персистентного состояния. Задайте, когда форма `initialState` меняется
|
|
158
|
+
* между релизами и в localStorage/IndexedDB могут лежать данные старой схемы.
|
|
159
|
+
*
|
|
160
|
+
* Версия сохраняется рядом с данными; при следующей инициализации сравнивается с этой.
|
|
161
|
+
* Если сохранённая версия ниже — запускается {@link BaseStorageConfig.migrate}.
|
|
162
|
+
*
|
|
163
|
+
* Без `version` поведение не меняется (миграция выключена). Для `memory` игнорируется
|
|
164
|
+
* (нечего персистить).
|
|
165
|
+
*/
|
|
166
|
+
version?: number;
|
|
167
|
+
/**
|
|
168
|
+
* Преобразует сохранённое состояние старой версии к текущей схеме. Вызывается, только
|
|
169
|
+
* если задана {@link BaseStorageConfig.version} и сохранённая версия меньше текущей.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```ts
|
|
173
|
+
* new LocalStorage({
|
|
174
|
+
* name: 'settings',
|
|
175
|
+
* version: 2,
|
|
176
|
+
* initialState: { theme: 'light', locale: 'en' },
|
|
177
|
+
* migrate: (old, fromVersion) =>
|
|
178
|
+
* fromVersion < 1 ? { theme: old.dark ? 'dark' : 'light', locale: 'en' } : { ...old, locale: old.locale ?? 'en' },
|
|
179
|
+
* })
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
migrate?: MigrateFn<T>;
|
|
135
183
|
}
|
|
136
184
|
/** Конфигурация для sync-хранилищ (Memory, LocalStorage) */
|
|
137
185
|
export interface SyncStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {
|
|
138
186
|
middlewares?: ConfigureSyncMiddlewares;
|
|
187
|
+
/**
|
|
188
|
+
* Очищать данные хранилища при `destroy()`.
|
|
189
|
+
* - `memory` → по умолчанию `true` (эфемерное хранилище).
|
|
190
|
+
* - `localStorage` → по умолчанию `false` (персистентное: данные переживают `destroy`, как у IndexedDB).
|
|
191
|
+
*
|
|
192
|
+
* Задайте явно, чтобы переопределить дефолт адаптера.
|
|
193
|
+
*/
|
|
194
|
+
clearOnDestroy?: boolean;
|
|
139
195
|
}
|
|
140
196
|
/** Конфигурация для async-хранилищ (IndexedDB) */
|
|
141
197
|
export interface AsyncStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {
|
|
@@ -165,4 +221,3 @@ export interface UniversalStorageConfig<T extends Record<string, any> = Record<s
|
|
|
165
221
|
middlewares?: ConfigureSyncMiddlewares | ConfigureAsyncMiddlewares;
|
|
166
222
|
options?: IndexedDBConfig;
|
|
167
223
|
}
|
|
168
|
-
//# sourceMappingURL=storage.interface.d.ts.map
|
|
@@ -10,8 +10,6 @@ var storage_interface_StorageStatus = /*#__PURE__*/ function(StorageStatus) {
|
|
|
10
10
|
// ─── Storage Events ────────────────────────────────────────────────────────────
|
|
11
11
|
var storage_interface_StorageEvents = /*#__PURE__*/ function(StorageEvents) {
|
|
12
12
|
StorageEvents["STORAGE_UPDATE"] = "storage:update";
|
|
13
|
-
StorageEvents["STORAGE_DELETE"] = "storage:delete";
|
|
14
|
-
StorageEvents["STORAGE_PATCH"] = "storage:patch";
|
|
15
13
|
StorageEvents["STORAGE_SELECT"] = "storage:select";
|
|
16
14
|
StorageEvents["STORAGE_CLEAR"] = "storage:clear";
|
|
17
15
|
StorageEvents["STORAGE_DESTROY"] = "storage:destroy";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core/storage/storage.interface.js","sources":["../../../src/core/storage/storage.interface.ts"],"sourcesContent":["// storage.interface.ts\nimport { IndexedDBConfig } from './adapters/indexed-DB.service'\nimport { BatchingMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares'\nimport { SingletonOptions } from './modules/singleton/models'\nimport {\n AsyncMiddleware,\n AsyncMiddlewareAPI,\n AsyncNextFunction,\n Middleware,\n MiddlewareAPI,\n NextFunction,\n StorageAction,\n SyncMiddleware,\n SyncMiddlewareAPI,\n SyncNextFunction,\n} from './utils/middleware-module'\nimport { StorageKeyType } from './utils/storage-key'\n\n// ─── Storage Status ────────────────────────────────────────────────────────────\n\nexport enum StorageStatus {\n IDLE = 'idle',\n LOADING = 'loading',\n READY = 'ready',\n ERROR = 'error',\n}\n\nexport interface StorageInitStatus {\n status: StorageStatus\n error?: Error\n}\n\n// ─── Storage Events ────────────────────────────────────────────────────────────\n\nexport enum StorageEvents {\n STORAGE_UPDATE = 'storage:update',\n STORAGE_DELETE = 'storage:delete',\n STORAGE_PATCH = 'storage:patch',\n STORAGE_SELECT = 'storage:select',\n STORAGE_CLEAR = 'storage:clear',\n STORAGE_DESTROY = 'storage:destroy',\n}\n\nexport interface StorageEvent<T = any> {\n type: string\n payload?: T\n metadata?: Record<string, any>\n}\n\n// ─── Utility Interfaces ────────────────────────────────────────────────────────\n\nexport interface IEventEmitter {\n emit(event: StorageEvent): Promise<void>\n}\n\nexport interface ILogger {\n debug(message: string, meta?: Record<string, any>): void\n info(message: string, meta?: Record<string, any>): void\n warn(message: string, meta?: Record<string, any>): void\n error(message: string, meta?: Record<string, any>): void\n}\n\n// ─── Middleware Types (re-exported from middleware-module) ─────────────────────\n\nexport type { AsyncMiddleware, AsyncMiddlewareAPI, AsyncNextFunction, Middleware, MiddlewareAPI, NextFunction, StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction }\n\n// ─── Storage Interfaces ────────────────────────────────────────────────────────\n\n/**\n * Базовый интерфейс для всех хранилищ.\n * Содержит lifecycle, sync-доступ к кешу, подписки и метаданные.\n */\nexport interface IStorageBase<T extends Record<string, any> = any> {\n /** Имя хранилища */\n readonly name: string\n\n /** Тип хранилища */\n readonly type: StorageType\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────────\n\n /** Инициализация хранилища (всегда async — загрузка данных, миграции и т.д.) */\n initialize(): Promise<this>\n\n /** Уничтожение хранилища */\n destroy(): Promise<void>\n\n /** Ожидание готовности хранилища */\n waitForReady(): Promise<this>\n\n // ─── Sync-доступ к кешу ────────────────────────────────────────────────────\n\n /** Синхронное получение состояния из кеша (доступно для всех типов хранилищ) */\n getStateSync(): T\n\n // ─── Подписки ──────────────────────────────────────────────────────────────\n\n /** Подписка на изменение конкретного ключа */\n subscribe(key: StorageKeyType, callback: (value: any) => void): VoidFunction\n\n /** Подписка через path-selector */\n subscribe<R>(pathSelector: (state: T) => R, callback: (value: R) => void): VoidFunction\n\n /** Подписка на все изменения хранилища */\n subscribeToAll(callback: (event: { type: string; changedPaths?: string[]; key?: StorageKeyType[] | StorageKeyType; value?: any }) => void): VoidFunction\n\n /** Текущий статус инициализации */\n readonly initStatus: StorageInitStatus\n\n /** Подписка на изменение статуса инициализации */\n onStatusChange(callback: (status: StorageInitStatus) => void): VoidFunction\n}\n\n/**\n * Синхронное хранилище.\n * Memory и LocalStorage реализуют этот интерфейс.\n * Все операции чтения/записи выполняются синхронно.\n */\nexport interface ISyncStorage<T extends Record<string, any> = any> extends IStorageBase<T> {\n get<R>(key: StorageKeyType): R | undefined\n set<R>(key: StorageKeyType, value: R): void\n update(updater: (state: T) => void): void\n remove(key: StorageKeyType): void\n has(key: StorageKeyType): boolean\n clear(): void\n /** Сброс состояния к initialState (или к {} если initialState не задан) */\n reset(): void\n keys(): string[]\n getState(): T\n}\n\n/**\n * Асинхронное хранилище.\n * IndexedDB реализует этот интерфейс.\n * Все операции чтения/записи возвращают Promise.\n */\nexport interface IAsyncStorage<T extends Record<string, any> = any> extends IStorageBase<T> {\n get<R>(key: StorageKeyType): Promise<R | undefined>\n set<R>(key: StorageKeyType, value: R): Promise<void>\n update(updater: (state: T) => void): Promise<void>\n remove(key: StorageKeyType): Promise<void>\n has(key: StorageKeyType): Promise<boolean>\n clear(): Promise<void>\n /** Сброс состояния к initialState (или к {} если initialState не задан) */\n reset(): Promise<void>\n keys(): Promise<string[]>\n getState(): Promise<T>\n}\n\n/**\n * Union type — любое хранилище.\n * Используется когда тип хранилища неизвестен на этапе компиляции.\n */\nexport type IStorage<T extends Record<string, any> = any> = ISyncStorage<T> | IAsyncStorage<T>\n\n// ─── Config Types ──────────────────────────────────────────────────────────────\n\nexport type StorageType = 'memory' | 'localStorage' | 'indexedDB'\n\n// --- Default middleware helpers ---\n\nexport interface SyncDefaultMiddlewares {\n batching: (options?: BatchingMiddlewareOptions) => SyncMiddleware\n shallowCompare: (options?: ShallowCompareMiddlewareOptions) => SyncMiddleware\n}\n\nexport interface AsyncDefaultMiddlewares {\n batching: (options?: BatchingMiddlewareOptions) => AsyncMiddleware\n shallowCompare: (options?: ShallowCompareMiddlewareOptions) => AsyncMiddleware\n}\n\n/** @deprecated Use SyncDefaultMiddlewares or AsyncDefaultMiddlewares */\nexport type DefaultMiddlewares = AsyncDefaultMiddlewares\n\nexport type GetSyncDefaultMiddleware = () => SyncDefaultMiddlewares\nexport type GetAsyncDefaultMiddleware = () => AsyncDefaultMiddlewares\n\n/** @deprecated Use GetAsyncDefaultMiddleware */\nexport type GetDefaultMiddleware = GetAsyncDefaultMiddleware\n\nexport type ConfigureSyncMiddlewares = (getDefaultMiddleware: GetSyncDefaultMiddleware) => SyncMiddleware[]\nexport type ConfigureAsyncMiddlewares = (getDefaultMiddleware: GetAsyncDefaultMiddleware) => AsyncMiddleware[]\n\n/** @deprecated Use ConfigureAsyncMiddlewares */\nexport type ConfigureMiddlewares = ConfigureAsyncMiddlewares\n\n// --- Storage configs ---\n\n/** Базовая конфигурация хранилища (общие поля) */\nexport interface BaseStorageConfig<T extends Record<string, any> = Record<string, any>> {\n name: string\n initialState?: T\n singleton?: SingletonOptions\n}\n\n/** Конфигурация для sync-хранилищ (Memory, LocalStorage) */\nexport interface SyncStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {\n middlewares?: ConfigureSyncMiddlewares\n}\n\n/** Конфигурация для async-хранилищ (IndexedDB) */\nexport interface AsyncStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {\n middlewares?: ConfigureAsyncMiddlewares\n}\n\n/**\n * @deprecated Use SyncStorageConfig or AsyncStorageConfig\n * Обратная совместимость — общий StorageConfig\n */\nexport interface StorageConfig<T extends Record<string, any> = Record<string, any>> {\n name: string\n initialState?: T\n middlewares?: ConfigureMiddlewares\n}\n\n/** @deprecated Use SyncStorageConfig */\nexport interface StorageSingletonConfig<T extends Record<string, any> = Record<string, any>> extends StorageConfig<T> {\n singleton?: SingletonOptions\n}\n\n// --- Specific storage configs ---\n\nexport type MemoryStorageConfig<T extends Record<string, any> = Record<string, any>> = SyncStorageConfig<T>\n\nexport type LocalStorageConfig<T extends Record<string, any> = Record<string, any>> = SyncStorageConfig<T>\n\nexport interface IndexedDBStorageConfig<T extends Record<string, any> = Record<string, any>> extends AsyncStorageConfig<T> {\n options: IndexedDBConfig\n}\n\n/** Для универсальных методов (factory) — конфиг с явным типом */\nexport interface UniversalStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {\n type: StorageType\n middlewares?: ConfigureSyncMiddlewares | ConfigureAsyncMiddlewares\n options?: IndexedDBConfig\n}\n"],"names":["StorageStatus","StorageEvents"],"mappings":"AAAA,uBAAuB;AAkBvB,kFAAkF;AAE3E,IAAKA,+BAAaA,0BAAbA;;;;;WAAAA;MAKX;AAOD,kFAAkF;AAE3E,IAAKC,+BAAaA,0BAAbA;;;;;;;WAAAA;MAOX"}
|
|
1
|
+
{"version":3,"file":"core/storage/storage.interface.js","sources":["../../../src/core/storage/storage.interface.ts"],"sourcesContent":["// storage.interface.ts\nimport { IndexedDBConfig } from './adapters/indexed-DB.service'\nimport { BatchingMiddlewareOptions, LoggerMiddlewareOptions, ShallowCompareMiddlewareOptions } from './middlewares'\nimport { SingletonOptions } from './modules/singleton/models'\nimport {\n AsyncMiddleware,\n AsyncMiddlewareAPI,\n AsyncNextFunction,\n Middleware,\n MiddlewareAPI,\n NextFunction,\n StorageAction,\n SyncMiddleware,\n SyncMiddlewareAPI,\n SyncNextFunction,\n} from './utils/middleware-module'\nimport { StorageKeyType } from './utils/storage-key'\n\n// ─── Storage Status ────────────────────────────────────────────────────────────\n\nexport enum StorageStatus {\n IDLE = 'idle',\n LOADING = 'loading',\n READY = 'ready',\n ERROR = 'error',\n}\n\nexport interface StorageInitStatus {\n status: StorageStatus\n error?: Error\n}\n\n// ─── Storage Events ────────────────────────────────────────────────────────────\n\nexport enum StorageEvents {\n STORAGE_UPDATE = 'storage:update',\n STORAGE_SELECT = 'storage:select',\n STORAGE_CLEAR = 'storage:clear',\n STORAGE_DESTROY = 'storage:destroy',\n}\n\nexport interface StorageEvent<T = any> {\n type: string\n payload?: T\n metadata?: Record<string, any>\n}\n\n// ─── Utility Interfaces ────────────────────────────────────────────────────────\n\nexport interface IEventEmitter {\n emit(event: StorageEvent): Promise<void>\n}\n\nexport interface ILogger {\n debug(message: string, meta?: Record<string, any>): void\n info(message: string, meta?: Record<string, any>): void\n warn(message: string, meta?: Record<string, any>): void\n error(message: string, meta?: Record<string, any>): void\n}\n\n// ─── Middleware Types (re-exported from middleware-module) ─────────────────────\n\nexport type { AsyncMiddleware, AsyncMiddlewareAPI, AsyncNextFunction, Middleware, MiddlewareAPI, NextFunction, StorageAction, SyncMiddleware, SyncMiddlewareAPI, SyncNextFunction }\n\n// ─── Storage Interfaces ────────────────────────────────────────────────────────\n\n/**\n * Базовый интерфейс для всех хранилищ.\n * Содержит lifecycle, sync-доступ к кешу, подписки и метаданные.\n */\nexport interface IStorageBase<T extends Record<string, any> = any> {\n /** Имя хранилища */\n readonly name: string\n\n /** Тип хранилища */\n readonly type: StorageType\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────────\n\n /** Инициализация хранилища (всегда async — загрузка данных, миграции и т.д.) */\n initialize(): Promise<this>\n\n /** Уничтожение хранилища */\n destroy(): Promise<void>\n\n /** Ожидание готовности хранилища */\n waitForReady(): Promise<this>\n\n // ─── Sync-доступ к кешу ────────────────────────────────────────────────────\n\n /** Синхронное получение состояния из кеша (доступно для всех типов хранилищ) */\n getStateSync(): T\n\n // ─── Подписки ──────────────────────────────────────────────────────────────\n\n /** Подписка на изменение конкретного ключа */\n subscribe(key: StorageKeyType, callback: (value: any) => void): VoidFunction\n\n /** Подписка через path-selector */\n subscribe<R>(pathSelector: (state: T) => R, callback: (value: R) => void): VoidFunction\n\n /** Подписка на все изменения хранилища */\n subscribeToAll(callback: (event: { type: string; changedPaths?: string[]; key?: StorageKeyType[] | StorageKeyType; value?: any }) => void): VoidFunction\n\n /** Текущий статус инициализации */\n readonly initStatus: StorageInitStatus\n\n /** Подписка на изменение статуса инициализации */\n onStatusChange(callback: (status: StorageInitStatus) => void): VoidFunction\n}\n\n/**\n * Синхронное хранилище.\n * Memory и LocalStorage реализуют этот интерфейс.\n * Все операции чтения/записи выполняются синхронно.\n */\nexport interface ISyncStorage<T extends Record<string, any> = any> extends IStorageBase<T> {\n get<R>(key: StorageKeyType): R | undefined\n set<R>(key: StorageKeyType, value: R): void\n update(updater: (state: T) => void): void\n remove(key: StorageKeyType): void\n has(key: StorageKeyType): boolean\n clear(): void\n /** Сброс состояния к initialState (или к {} если initialState не задан) */\n reset(): void\n /**\n * Гидрация: заменяет состояние переданным снапшотом (SSR/server-state). Вызванная ДО\n * `initialize()`, она засевает хранилище так, что инициализация не перезатрёт его\n * `initialState`. Вызванная после — заменяет состояние и уведомляет подписчиков.\n */\n hydrate(state: T): void\n keys(): string[]\n getState(): T\n}\n\n/**\n * Асинхронное хранилище.\n * IndexedDB реализует этот интерфейс.\n * Все операции чтения/записи возвращают Promise.\n */\nexport interface IAsyncStorage<T extends Record<string, any> = any> extends IStorageBase<T> {\n get<R>(key: StorageKeyType): Promise<R | undefined>\n set<R>(key: StorageKeyType, value: R): Promise<void>\n update(updater: (state: T) => void): Promise<void>\n remove(key: StorageKeyType): Promise<void>\n has(key: StorageKeyType): Promise<boolean>\n clear(): Promise<void>\n /** Сброс состояния к initialState (или к {} если initialState не задан) */\n reset(): Promise<void>\n /**\n * Гидрация: заменяет состояние переданным снапшотом (SSR/server-state). Вызванная ДО\n * `initialize()`, она засевает хранилище так, что инициализация не перезатрёт его\n * `initialState`. Вызванная после — заменяет состояние и уведомляет подписчиков.\n */\n hydrate(state: T): Promise<void>\n keys(): Promise<string[]>\n getState(): Promise<T>\n}\n\n/**\n * Union type — любое хранилище.\n * Используется когда тип хранилища неизвестен на этапе компиляции.\n */\nexport type IStorage<T extends Record<string, any> = any> = ISyncStorage<T> | IAsyncStorage<T>\n\n// ─── Config Types ──────────────────────────────────────────────────────────────\n\nexport type StorageType = 'memory' | 'localStorage' | 'indexedDB'\n\n// --- Default middleware helpers ---\n\nexport interface SyncDefaultMiddlewares {\n batching: (options?: BatchingMiddlewareOptions) => SyncMiddleware\n shallowCompare: (options?: ShallowCompareMiddlewareOptions) => SyncMiddleware\n /** Dev-only логгер пишущих действий (тип/ключ/длительность, опц. prev/next состояние). */\n logger: (options?: LoggerMiddlewareOptions) => SyncMiddleware\n}\n\nexport interface AsyncDefaultMiddlewares {\n batching: (options?: BatchingMiddlewareOptions) => AsyncMiddleware\n shallowCompare: (options?: ShallowCompareMiddlewareOptions) => AsyncMiddleware\n /** Dev-only логгер пишущих действий (тип/ключ/длительность, опц. prev/next состояние). */\n logger: (options?: LoggerMiddlewareOptions) => AsyncMiddleware\n}\n\n/** @deprecated Use SyncDefaultMiddlewares or AsyncDefaultMiddlewares */\nexport type DefaultMiddlewares = AsyncDefaultMiddlewares\n\nexport type GetSyncDefaultMiddleware = () => SyncDefaultMiddlewares\nexport type GetAsyncDefaultMiddleware = () => AsyncDefaultMiddlewares\n\n/** @deprecated Use GetAsyncDefaultMiddleware */\nexport type GetDefaultMiddleware = GetAsyncDefaultMiddleware\n\nexport type ConfigureSyncMiddlewares = (getDefaultMiddleware: GetSyncDefaultMiddleware) => SyncMiddleware[]\nexport type ConfigureAsyncMiddlewares = (getDefaultMiddleware: GetAsyncDefaultMiddleware) => AsyncMiddleware[]\n\n/** @deprecated Use ConfigureAsyncMiddlewares */\nexport type ConfigureMiddlewares = ConfigureAsyncMiddlewares\n\n// --- Storage configs ---\n\n/**\n * Функция миграции персистентного состояния между версиями схемы.\n * Вызывается при `initialize()`, если в хранилище лежат данные с версией ниже текущей\n * (`config.version`). Получает сырое сохранённое состояние и его версию, должна вернуть\n * состояние, соответствующее текущей схеме.\n */\nexport type MigrateFn<T extends Record<string, any> = Record<string, any>> = (persistedState: any, persistedVersion: number) => T\n\n/** Базовая конфигурация хранилища (общие поля) */\nexport interface BaseStorageConfig<T extends Record<string, any> = Record<string, any>> {\n name: string\n initialState?: T\n singleton?: SingletonOptions\n /**\n * Версия схемы персистентного состояния. Задайте, когда форма `initialState` меняется\n * между релизами и в localStorage/IndexedDB могут лежать данные старой схемы.\n *\n * Версия сохраняется рядом с данными; при следующей инициализации сравнивается с этой.\n * Если сохранённая версия ниже — запускается {@link BaseStorageConfig.migrate}.\n *\n * Без `version` поведение не меняется (миграция выключена). Для `memory` игнорируется\n * (нечего персистить).\n */\n version?: number\n /**\n * Преобразует сохранённое состояние старой версии к текущей схеме. Вызывается, только\n * если задана {@link BaseStorageConfig.version} и сохранённая версия меньше текущей.\n *\n * @example\n * ```ts\n * new LocalStorage({\n * name: 'settings',\n * version: 2,\n * initialState: { theme: 'light', locale: 'en' },\n * migrate: (old, fromVersion) =>\n * fromVersion < 1 ? { theme: old.dark ? 'dark' : 'light', locale: 'en' } : { ...old, locale: old.locale ?? 'en' },\n * })\n * ```\n */\n migrate?: MigrateFn<T>\n}\n\n/** Конфигурация для sync-хранилищ (Memory, LocalStorage) */\nexport interface SyncStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {\n middlewares?: ConfigureSyncMiddlewares\n /**\n * Очищать данные хранилища при `destroy()`.\n * - `memory` → по умолчанию `true` (эфемерное хранилище).\n * - `localStorage` → по умолчанию `false` (персистентное: данные переживают `destroy`, как у IndexedDB).\n *\n * Задайте явно, чтобы переопределить дефолт адаптера.\n */\n clearOnDestroy?: boolean\n}\n\n/** Конфигурация для async-хранилищ (IndexedDB) */\nexport interface AsyncStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {\n middlewares?: ConfigureAsyncMiddlewares\n}\n\n/**\n * @deprecated Use SyncStorageConfig or AsyncStorageConfig\n * Обратная совместимость — общий StorageConfig\n */\nexport interface StorageConfig<T extends Record<string, any> = Record<string, any>> {\n name: string\n initialState?: T\n middlewares?: ConfigureMiddlewares\n}\n\n/** @deprecated Use SyncStorageConfig */\nexport interface StorageSingletonConfig<T extends Record<string, any> = Record<string, any>> extends StorageConfig<T> {\n singleton?: SingletonOptions\n}\n\n// --- Specific storage configs ---\n\nexport type MemoryStorageConfig<T extends Record<string, any> = Record<string, any>> = SyncStorageConfig<T>\n\nexport type LocalStorageConfig<T extends Record<string, any> = Record<string, any>> = SyncStorageConfig<T>\n\nexport interface IndexedDBStorageConfig<T extends Record<string, any> = Record<string, any>> extends AsyncStorageConfig<T> {\n options: IndexedDBConfig\n}\n\n/** Для универсальных методов (factory) — конфиг с явным типом */\nexport interface UniversalStorageConfig<T extends Record<string, any> = Record<string, any>> extends BaseStorageConfig<T> {\n type: StorageType\n middlewares?: ConfigureSyncMiddlewares | ConfigureAsyncMiddlewares\n options?: IndexedDBConfig\n}\n"],"names":["StorageStatus","StorageEvents"],"mappings":"AAAA,uBAAuB;AAkBvB,kFAAkF;AAE3E,IAAKA,+BAAaA,0BAAbA;;;;;WAAAA;MAKX;AAOD,kFAAkF;AAE3E,IAAKC,+BAAaA,0BAAbA;;;;;WAAAA;MAKX"}
|