synapse-storage 3.0.2 → 3.0.4
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/dist/api.cjs +1 -0
- package/dist/api.d.cts +365 -0
- package/dist/api.d.ts +365 -0
- package/dist/api.js +1 -0
- package/dist/chunk-22J2S57D.cjs +1 -0
- package/dist/chunk-4USKKL5R.js +1 -0
- package/dist/chunk-5X65PSGD.js +1 -0
- package/dist/chunk-635Q6YJZ.cjs +1 -0
- package/dist/chunk-6RNZVHSR.js +1 -0
- package/dist/chunk-FW5NGLPP.cjs +1 -0
- package/dist/chunk-IPUPRMZK.js +1 -0
- package/dist/chunk-NMDHQXMS.cjs +1 -0
- package/dist/chunk-S7X7IDBT.js +1 -0
- package/dist/chunk-UFBCZ25Y.cjs +1 -0
- package/dist/chunk-VSIVOWZF.cjs +1 -0
- package/dist/chunk-WC5TDS6C.cjs +1 -0
- package/dist/chunk-WQNH3LVB.js +1 -0
- package/dist/chunk-ZE2EJX2Y.js +1 -0
- package/dist/core.cjs +1 -0
- package/dist/core.d.cts +397 -0
- package/dist/{core/storage/modules/plugin/plugin.interface.d.ts → core.d.ts} +203 -7
- package/dist/core.js +1 -0
- package/dist/dispatcher.module-CdpmkplA.d.cts +363 -0
- package/dist/dispatcher.module-jd8U_ZEs.d.ts +363 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -10
- package/dist/index.js +1 -14
- package/dist/react.cjs +1 -0
- package/dist/react.d.cts +74 -0
- package/dist/react.d.ts +74 -0
- package/dist/react.js +1 -0
- package/dist/reactive.cjs +1 -0
- package/dist/reactive.d.cts +35 -0
- package/dist/reactive.d.ts +35 -0
- package/dist/reactive.js +1 -0
- package/dist/{core/selector/selector.interface.d.ts → selector.interface-CA5y-kD_.d.cts} +7 -35
- package/dist/selector.interface-CA5y-kD_.d.ts +63 -0
- package/dist/storage.interface-Dl8SLUd1.d.cts +128 -0
- package/dist/storage.interface-Dl8SLUd1.d.ts +128 -0
- package/dist/utils.cjs +1 -0
- package/dist/utils.d.cts +92 -0
- package/dist/utils.d.ts +92 -0
- package/dist/utils.js +1 -0
- package/package.json +54 -17
- package/dist/_utils/chunk.util.d.ts +0 -8
- package/dist/_utils/chunk.util.d.ts.map +0 -1
- package/dist/_utils/chunk.util.js +0 -21
- package/dist/_utils/chunk.util.js.map +0 -1
- package/dist/_utils/deepMerge.util.d.ts +0 -2
- package/dist/_utils/deepMerge.util.d.ts.map +0 -1
- package/dist/_utils/deepMerge.util.js +0 -16
- package/dist/_utils/deepMerge.util.js.map +0 -1
- package/dist/_utils/flatMap.util.d.ts +0 -10
- package/dist/_utils/flatMap.util.d.ts.map +0 -1
- package/dist/_utils/flatMap.util.js +0 -23
- package/dist/_utils/flatMap.util.js.map +0 -1
- package/dist/_utils/index.d.ts +0 -4
- package/dist/_utils/index.d.ts.map +0 -1
- package/dist/_utils/index.js +0 -4
- package/dist/_utils/index.js.map +0 -1
- package/dist/api/api.module.d.ts +0 -38
- package/dist/api/api.module.d.ts.map +0 -1
- package/dist/api/api.module.js +0 -82
- package/dist/api/api.module.js.map +0 -1
- package/dist/api/components/endpoint.d.ts +0 -26
- package/dist/api/components/endpoint.d.ts.map +0 -1
- package/dist/api/components/endpoint.js +0 -253
- package/dist/api/components/endpoint.js.map +0 -1
- package/dist/api/components/query-storage.d.ts +0 -84
- package/dist/api/components/query-storage.d.ts.map +0 -1
- package/dist/api/components/query-storage.js +0 -221
- package/dist/api/components/query-storage.js.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 -85
- package/dist/api/example.js.map +0 -1
- package/dist/api/index.d.ts +0 -4
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -6
- package/dist/api/index.js.map +0 -1
- package/dist/api/types/api.interface.d.ts +0 -108
- package/dist/api/types/api.interface.d.ts.map +0 -1
- package/dist/api/types/api.interface.js +0 -19
- package/dist/api/types/api.interface.js.map +0 -1
- package/dist/api/types/endpoint.interface.d.ts +0 -116
- package/dist/api/types/endpoint.interface.d.ts.map +0 -1
- package/dist/api/types/endpoint.interface.js +0 -2
- package/dist/api/types/endpoint.interface.js.map +0 -1
- package/dist/api/types/query.interface.d.ts +0 -87
- package/dist/api/types/query.interface.d.ts.map +0 -1
- package/dist/api/types/query.interface.js +0 -2
- package/dist/api/types/query.interface.js.map +0 -1
- package/dist/api/utils/api-helpers.d.ts +0 -22
- package/dist/api/utils/api-helpers.d.ts.map +0 -1
- package/dist/api/utils/api-helpers.js +0 -44
- package/dist/api/utils/api-helpers.js.map +0 -1
- package/dist/api/utils/create-header-context.d.ts +0 -10
- package/dist/api/utils/create-header-context.d.ts.map +0 -1
- package/dist/api/utils/create-header-context.js +0 -36
- package/dist/api/utils/create-header-context.js.map +0 -1
- package/dist/api/utils/endpoint-headers.d.ts +0 -23
- package/dist/api/utils/endpoint-headers.d.ts.map +0 -1
- package/dist/api/utils/endpoint-headers.js +0 -57
- package/dist/api/utils/endpoint-headers.js.map +0 -1
- package/dist/api/utils/fetch-base-query.d.ts +0 -9
- package/dist/api/utils/fetch-base-query.d.ts.map +0 -1
- package/dist/api/utils/fetch-base-query.js +0 -181
- package/dist/api/utils/fetch-base-query.js.map +0 -1
- package/dist/api/utils/file-utils.d.ts +0 -43
- package/dist/api/utils/file-utils.d.ts.map +0 -1
- package/dist/api/utils/file-utils.js +0 -108
- package/dist/api/utils/file-utils.js.map +0 -1
- package/dist/api/utils/get-cacheable-headers.d.ts +0 -8
- package/dist/api/utils/get-cacheable-headers.d.ts.map +0 -1
- package/dist/api/utils/get-cacheable-headers.js +0 -21
- package/dist/api/utils/get-cacheable-headers.js.map +0 -1
- package/dist/core/index.d.ts +0 -3
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -3
- package/dist/core/index.js.map +0 -1
- package/dist/core/selector/index.d.ts +0 -3
- package/dist/core/selector/index.d.ts.map +0 -1
- package/dist/core/selector/index.js +0 -2
- package/dist/core/selector/index.js.map +0 -1
- package/dist/core/selector/selector.interface.d.ts.map +0 -1
- package/dist/core/selector/selector.interface.js +0 -2
- package/dist/core/selector/selector.interface.js.map +0 -1
- package/dist/core/selector/selector.module.d.ts +0 -29
- package/dist/core/selector/selector.module.d.ts.map +0 -1
- package/dist/core/selector/selector.module.js +0 -467
- package/dist/core/selector/selector.module.js.map +0 -1
- package/dist/core/storage/adapters/base-storage.service.d.ts +0 -65
- package/dist/core/storage/adapters/base-storage.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/base-storage.service.js +0 -660
- package/dist/core/storage/adapters/base-storage.service.js.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service.d.ts +0 -63
- package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service.js +0 -595
- package/dist/core/storage/adapters/indexed-DB.service.js.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service.old.d.ts +0 -38
- package/dist/core/storage/adapters/indexed-DB.service.old.d.ts.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service.old.js +0 -318
- package/dist/core/storage/adapters/indexed-DB.service.old.js.map +0 -1
- package/dist/core/storage/adapters/local-storage.service.d.ts +0 -21
- package/dist/core/storage/adapters/local-storage.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/local-storage.service.js +0 -99
- package/dist/core/storage/adapters/local-storage.service.js.map +0 -1
- package/dist/core/storage/adapters/memory-storage.service.d.ts +0 -22
- package/dist/core/storage/adapters/memory-storage.service.d.ts.map +0 -1
- package/dist/core/storage/adapters/memory-storage.service.js +0 -99
- package/dist/core/storage/adapters/memory-storage.service.js.map +0 -1
- package/dist/core/storage/adapters/path.utils.d.ts +0 -5
- package/dist/core/storage/adapters/path.utils.d.ts.map +0 -1
- package/dist/core/storage/adapters/path.utils.js +0 -35
- package/dist/core/storage/adapters/path.utils.js.map +0 -1
- package/dist/core/storage/index.d.ts +0 -11
- package/dist/core/storage/index.d.ts.map +0 -1
- package/dist/core/storage/index.js +0 -12
- package/dist/core/storage/index.js.map +0 -1
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts +0 -9
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/broadcast.middleware.js +0 -115
- package/dist/core/storage/middlewares/broadcast.middleware.js.map +0 -1
- package/dist/core/storage/middlewares/index.d.ts +0 -4
- package/dist/core/storage/middlewares/index.d.ts.map +0 -1
- package/dist/core/storage/middlewares/index.js +0 -3
- package/dist/core/storage/middlewares/index.js.map +0 -1
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +0 -7
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/storage-batching.middleware.js +0 -36
- package/dist/core/storage/middlewares/storage-batching.middleware.js.map +0 -1
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +0 -7
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +0 -1
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +0 -46
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.interface.js +0 -2
- package/dist/core/storage/modules/plugin/plugin.interface.js.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.service.d.ts +0 -25
- package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +0 -1
- package/dist/core/storage/modules/plugin/plugin.service.js +0 -186
- package/dist/core/storage/modules/plugin/plugin.service.js.map +0 -1
- package/dist/core/storage/storage.interface.d.ts +0 -70
- package/dist/core/storage/storage.interface.d.ts.map +0 -1
- package/dist/core/storage/storage.interface.js +0 -10
- package/dist/core/storage/storage.interface.js.map +0 -1
- package/dist/core/storage/utils/batch.utils.d.ts +0 -33
- package/dist/core/storage/utils/batch.utils.d.ts.map +0 -1
- package/dist/core/storage/utils/batch.utils.js +0 -88
- package/dist/core/storage/utils/batch.utils.js.map +0 -1
- package/dist/core/storage/utils/broadcast.util.d.ts +0 -48
- package/dist/core/storage/utils/broadcast.util.d.ts.map +0 -1
- package/dist/core/storage/utils/broadcast.util.js +0 -162
- package/dist/core/storage/utils/broadcast.util.js.map +0 -1
- package/dist/core/storage/utils/cache.util.d.ts +0 -33
- package/dist/core/storage/utils/cache.util.d.ts.map +0 -1
- package/dist/core/storage/utils/cache.util.js +0 -47
- package/dist/core/storage/utils/cache.util.js.map +0 -1
- package/dist/core/storage/utils/middleware-module.d.ts +0 -46
- package/dist/core/storage/utils/middleware-module.d.ts.map +0 -1
- package/dist/core/storage/utils/middleware-module.js +0 -109
- package/dist/core/storage/utils/middleware-module.js.map +0 -1
- package/dist/core/storage/utils/storage-key.d.ts +0 -11
- package/dist/core/storage/utils/storage-key.d.ts.map +0 -1
- package/dist/core/storage/utils/storage-key.js +0 -21
- package/dist/core/storage/utils/storage-key.js.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/index.js.map +0 -1
- package/dist/react/hooks/index.d.ts +0 -3
- package/dist/react/hooks/index.d.ts.map +0 -1
- package/dist/react/hooks/index.js +0 -3
- package/dist/react/hooks/index.js.map +0 -1
- package/dist/react/hooks/useSelector.d.ts +0 -22
- package/dist/react/hooks/useSelector.d.ts.map +0 -1
- package/dist/react/hooks/useSelector.js +0 -104
- package/dist/react/hooks/useSelector.js.map +0 -1
- package/dist/react/hooks/useStorageSubscribe.d.ts +0 -12
- package/dist/react/hooks/useStorageSubscribe.d.ts.map +0 -1
- package/dist/react/hooks/useStorageSubscribe.js +0 -49
- package/dist/react/hooks/useStorageSubscribe.js.map +0 -1
- package/dist/react/index.d.ts +0 -3
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js +0 -3
- package/dist/react/index.js.map +0 -1
- package/dist/react/utils/createSynapseCtx.d.ts +0 -40
- package/dist/react/utils/createSynapseCtx.d.ts.map +0 -1
- package/dist/react/utils/createSynapseCtx.js +0 -125
- package/dist/react/utils/createSynapseCtx.js.map +0 -1
- package/dist/react/utils/index.d.ts +0 -2
- package/dist/react/utils/index.d.ts.map +0 -1
- package/dist/react/utils/index.js +0 -2
- package/dist/react/utils/index.js.map +0 -1
- package/dist/reactive/dispatcher/dispatcher.module.d.ts +0 -195
- package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +0 -1
- package/dist/reactive/dispatcher/dispatcher.module.js +0 -288
- package/dist/reactive/dispatcher/dispatcher.module.js.map +0 -1
- package/dist/reactive/dispatcher/index.d.ts +0 -3
- package/dist/reactive/dispatcher/index.d.ts.map +0 -1
- package/dist/reactive/dispatcher/index.js +0 -3
- package/dist/reactive/dispatcher/index.js.map +0 -1
- package/dist/reactive/dispatcher/middlewares/index.d.ts +0 -2
- package/dist/reactive/dispatcher/middlewares/index.d.ts.map +0 -1
- package/dist/reactive/dispatcher/middlewares/index.js +0 -2
- package/dist/reactive/dispatcher/middlewares/index.js.map +0 -1
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +0 -31
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +0 -1
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js +0 -126
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +0 -1
- package/dist/reactive/effects/effects.module.d.ts +0 -150
- package/dist/reactive/effects/effects.module.d.ts.map +0 -1
- package/dist/reactive/effects/effects.module.js +0 -277
- package/dist/reactive/effects/effects.module.js.map +0 -1
- package/dist/reactive/effects/index.d.ts +0 -2
- package/dist/reactive/effects/index.d.ts.map +0 -1
- package/dist/reactive/effects/index.js +0 -2
- package/dist/reactive/effects/index.js.map +0 -1
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +0 -12
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +0 -1
- package/dist/reactive/effects/utils/chunkRequestConsistent.js +0 -16
- package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +0 -1
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +0 -12
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +0 -1
- package/dist/reactive/effects/utils/chunkRequestParallel.js +0 -13
- package/dist/reactive/effects/utils/chunkRequestParallel.js.map +0 -1
- package/dist/reactive/effects/utils/index.d.ts +0 -3
- package/dist/reactive/effects/utils/index.d.ts.map +0 -1
- package/dist/reactive/effects/utils/index.js +0 -3
- package/dist/reactive/effects/utils/index.js.map +0 -1
- package/dist/reactive/index.d.ts +0 -3
- package/dist/reactive/index.d.ts.map +0 -1
- package/dist/reactive/index.js +0 -3
- package/dist/reactive/index.js.map +0 -1
- package/dist/utils/createSynapse.d.ts +0 -92
- package/dist/utils/createSynapse.d.ts.map +0 -1
- package/dist/utils/createSynapse.js +0 -79
- package/dist/utils/createSynapse.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -2
- package/dist/utils/index.js.map +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { I as ISelectorModule, a as Selector, b as SelectorOptions, S as SelectorAPI } from './selector.interface-CA5y-kD_.js';
|
|
2
|
+
import { c as StorageKeyType, I as IStorage, h as StorageConfig, f as IEventEmitter, g as ILogger, D as DefaultMiddlewares, e as StorageEvent, i as StorageType, M as Middleware, C as ConfigureMiddlewares, l as StorageKey } from './storage.interface-Dl8SLUd1.js';
|
|
3
|
+
export { B as BatchingMiddlewareOptions, G as GetDefaultMiddleware, k as IndexedDBStorageConfig, L as LocalStorageConfig, j as MemoryStorageConfig, a as MiddlewareAPI, N as NextFunction, S as ShallowCompareMiddlewareOptions, b as StorageAction, d as StorageEvents } from './storage.interface-Dl8SLUd1.js';
|
|
4
|
+
|
|
2
5
|
/**
|
|
3
6
|
* Контекст выполнения для плагинов
|
|
4
7
|
* Содержит информацию о текущей операции и хранилище
|
|
5
8
|
*/
|
|
6
|
-
|
|
9
|
+
interface PluginContext {
|
|
7
10
|
/** Имя хранилища, к которому применяется плагин */
|
|
8
11
|
storageName: string;
|
|
9
12
|
/** Временная метка выполнения операции (timestamp) */
|
|
@@ -15,7 +18,7 @@ export interface PluginContext {
|
|
|
15
18
|
* Базовый интерфейс для всех плагинов
|
|
16
19
|
* Определяет основные свойства и методы жизненного цикла
|
|
17
20
|
*/
|
|
18
|
-
|
|
21
|
+
interface IPlugin {
|
|
19
22
|
/** Уникальное имя плагина */
|
|
20
23
|
name: string;
|
|
21
24
|
/**
|
|
@@ -34,7 +37,7 @@ export interface IPlugin {
|
|
|
34
37
|
* Интерфейс плагина для хранилища данных
|
|
35
38
|
* Определяет хуки для различных операций хранилища
|
|
36
39
|
*/
|
|
37
|
-
|
|
40
|
+
interface IStoragePlugin extends IPlugin {
|
|
38
41
|
/**
|
|
39
42
|
* Вызывается перед установкой значения в хранилище
|
|
40
43
|
* Позволяет изменить значение до его сохранения
|
|
@@ -102,7 +105,7 @@ export interface IStoragePlugin extends IPlugin {
|
|
|
102
105
|
* Исполнитель плагинов
|
|
103
106
|
* Отвечает за выполнение хуков плагинов в определенной последовательности
|
|
104
107
|
*/
|
|
105
|
-
|
|
108
|
+
interface IPluginExecutor {
|
|
106
109
|
/**
|
|
107
110
|
* Выполняет хуки onBeforeSet всех зарегистрированных плагинов
|
|
108
111
|
*
|
|
@@ -163,7 +166,7 @@ export interface IPluginExecutor {
|
|
|
163
166
|
* Менеджер плагинов
|
|
164
167
|
* Отвечает за регистрацию, получение и удаление плагинов
|
|
165
168
|
*/
|
|
166
|
-
|
|
169
|
+
interface IPluginManager<T extends IPlugin> {
|
|
167
170
|
/**
|
|
168
171
|
* Добавляет плагин в менеджер
|
|
169
172
|
*
|
|
@@ -198,4 +201,197 @@ export interface IPluginManager<T extends IPlugin> {
|
|
|
198
201
|
*/
|
|
199
202
|
destroy(): Promise<void>;
|
|
200
203
|
}
|
|
201
|
-
|
|
204
|
+
|
|
205
|
+
type PathSelector<T, R> = (state: T) => R;
|
|
206
|
+
declare abstract class BaseStorage<T extends Record<string, any>> implements IStorage<T> {
|
|
207
|
+
protected readonly config: StorageConfig;
|
|
208
|
+
protected readonly pluginExecutor?: IPluginExecutor | undefined;
|
|
209
|
+
protected readonly eventEmitter?: IEventEmitter | undefined;
|
|
210
|
+
protected readonly logger?: ILogger | undefined;
|
|
211
|
+
protected static readonly GLOBAL_SUBSCRIPTION_KEY = "*";
|
|
212
|
+
name: string;
|
|
213
|
+
private selectorPathCache;
|
|
214
|
+
private middlewareModule;
|
|
215
|
+
private initializedMiddlewares;
|
|
216
|
+
protected subscribers: Map<StorageKeyType, Set<(value: any) => void>>;
|
|
217
|
+
constructor(config: StorageConfig, pluginExecutor?: IPluginExecutor | undefined, eventEmitter?: IEventEmitter | undefined, logger?: ILogger | undefined);
|
|
218
|
+
protected initializeMiddlewares(): void;
|
|
219
|
+
protected getDefaultMiddleware(): DefaultMiddlewares;
|
|
220
|
+
protected initializeWithMiddlewares(): Promise<void>;
|
|
221
|
+
abstract initialize(): Promise<this>;
|
|
222
|
+
protected abstract doGet(key: StorageKeyType): Promise<any>;
|
|
223
|
+
protected abstract doSet(key: StorageKeyType, value: any): Promise<void>;
|
|
224
|
+
protected abstract doUpdate(updates: Array<{
|
|
225
|
+
key: StorageKeyType;
|
|
226
|
+
value: any;
|
|
227
|
+
}>): Promise<void>;
|
|
228
|
+
protected abstract doDelete(key: StorageKeyType): Promise<boolean>;
|
|
229
|
+
protected abstract doClear(): Promise<void>;
|
|
230
|
+
protected abstract doKeys(): Promise<string[]>;
|
|
231
|
+
protected abstract doHas(key: StorageKeyType): Promise<boolean>;
|
|
232
|
+
protected abstract doDestroy(): Promise<void>;
|
|
233
|
+
get<R>(key: StorageKeyType): Promise<R | undefined>;
|
|
234
|
+
set<R>(key: StorageKeyType, value: R): Promise<void>;
|
|
235
|
+
update(updater: (state: T) => void): Promise<void>;
|
|
236
|
+
delete(key: StorageKeyType): Promise<void>;
|
|
237
|
+
clear(): Promise<void>;
|
|
238
|
+
keys(): Promise<string[]>;
|
|
239
|
+
has(key: StorageKeyType): Promise<boolean>;
|
|
240
|
+
getState(): Promise<T>;
|
|
241
|
+
subscribeToAll(callback: (event: {
|
|
242
|
+
type: string;
|
|
243
|
+
key?: StorageKeyType[] | StorageKeyType;
|
|
244
|
+
value?: any;
|
|
245
|
+
changedPaths?: string[];
|
|
246
|
+
}) => void): VoidFunction;
|
|
247
|
+
subscribe(key: string, callback: (value: any) => void): VoidFunction;
|
|
248
|
+
subscribe<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction;
|
|
249
|
+
destroy(): Promise<void>;
|
|
250
|
+
private subscribeByKey;
|
|
251
|
+
private createDummyState;
|
|
252
|
+
private isEqual;
|
|
253
|
+
/**
|
|
254
|
+
* Возвращает полный путь, а не только корневой ключ
|
|
255
|
+
*/
|
|
256
|
+
private extractPath;
|
|
257
|
+
protected notifySubscribers(key: StorageKeyType, value: any): void;
|
|
258
|
+
/**
|
|
259
|
+
* Метод для определения изменившихся путей между двумя объектами
|
|
260
|
+
*/
|
|
261
|
+
private findChangedPaths;
|
|
262
|
+
private subscribeBySelector;
|
|
263
|
+
protected emitEvent(event: StorageEvent): Promise<void>;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
interface SharedStateMiddlewareProps {
|
|
267
|
+
storageType: StorageType;
|
|
268
|
+
storageName: string;
|
|
269
|
+
}
|
|
270
|
+
declare const broadcastMiddleware: (props: SharedStateMiddlewareProps) => Middleware;
|
|
271
|
+
|
|
272
|
+
declare class StoragePluginModule implements IPluginManager<IStoragePlugin>, IPluginExecutor {
|
|
273
|
+
protected readonly parentExecutor?: IPluginExecutor | undefined;
|
|
274
|
+
protected readonly logger?: ILogger | undefined;
|
|
275
|
+
protected readonly storageName: string;
|
|
276
|
+
private plugins;
|
|
277
|
+
constructor(parentExecutor?: IPluginExecutor | undefined, logger?: ILogger | undefined, storageName?: string);
|
|
278
|
+
private createContext;
|
|
279
|
+
add(plugin: IStoragePlugin): Promise<void>;
|
|
280
|
+
remove(name: string): Promise<void>;
|
|
281
|
+
get(name: string): IStoragePlugin | undefined;
|
|
282
|
+
getAll(): IStoragePlugin[];
|
|
283
|
+
initialize(): Promise<void>;
|
|
284
|
+
destroy(): Promise<void>;
|
|
285
|
+
executeBeforeSet<T>(value: T, metadata?: Record<string, any>): Promise<T>;
|
|
286
|
+
executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): Promise<T>;
|
|
287
|
+
executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): Promise<StorageKeyType>;
|
|
288
|
+
executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): Promise<T | undefined>;
|
|
289
|
+
executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<boolean>;
|
|
290
|
+
executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<void>;
|
|
291
|
+
executeOnClear(metadata?: Record<string, any>): Promise<void>;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
interface IndexedDBConfig {
|
|
295
|
+
dbName?: string;
|
|
296
|
+
dbVersion: number;
|
|
297
|
+
}
|
|
298
|
+
declare class IndexedDBStorage<T extends Record<string, any>> extends BaseStorage<T> {
|
|
299
|
+
private readonly DB_NAME;
|
|
300
|
+
private readonly STORE_NAME;
|
|
301
|
+
private readonly DB_VERSION;
|
|
302
|
+
private dbManager;
|
|
303
|
+
constructor(config: StorageConfig & {
|
|
304
|
+
options: IndexedDBConfig;
|
|
305
|
+
}, pluginExecutor?: IPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger);
|
|
306
|
+
initialize(): Promise<this>;
|
|
307
|
+
static getCurrentDBVersion(dbName: string): Promise<number>;
|
|
308
|
+
static createStorages<S extends Record<string, any>>(dbName: string, configs: {
|
|
309
|
+
[K in keyof S]: {
|
|
310
|
+
name: string;
|
|
311
|
+
initialState?: S[K];
|
|
312
|
+
middlewares?: ConfigureMiddlewares;
|
|
313
|
+
pluginExecutor?: IPluginExecutor;
|
|
314
|
+
eventEmitter?: IEventEmitter;
|
|
315
|
+
};
|
|
316
|
+
}, logger?: ILogger): Promise<{
|
|
317
|
+
[K in keyof S]: IndexedDBStorage<S[K]>;
|
|
318
|
+
}>;
|
|
319
|
+
private getTransaction;
|
|
320
|
+
private getObjectStore;
|
|
321
|
+
protected doGet(key: StorageKeyType): Promise<any>;
|
|
322
|
+
protected doSet(key: StorageKeyType, value: any): Promise<void>;
|
|
323
|
+
private putValueInStore;
|
|
324
|
+
protected doUpdate(updates: Array<{
|
|
325
|
+
key: string | StorageKey;
|
|
326
|
+
value: any;
|
|
327
|
+
}>): Promise<void>;
|
|
328
|
+
protected doDelete(key: StorageKeyType): Promise<boolean>;
|
|
329
|
+
protected doClear(): Promise<void>;
|
|
330
|
+
protected doKeys(): Promise<string[]>;
|
|
331
|
+
protected doHas(key: StorageKeyType): Promise<boolean>;
|
|
332
|
+
protected doDestroy(): Promise<void>;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
declare class LocalStorage<T extends Record<string, any>> extends BaseStorage<T> {
|
|
336
|
+
constructor(config: StorageConfig, pluginExecutor?: IPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger);
|
|
337
|
+
initialize(): Promise<this>;
|
|
338
|
+
protected doGet(key: StorageKeyType): Promise<any>;
|
|
339
|
+
protected doSet(key: StorageKeyType, value: any): Promise<void>;
|
|
340
|
+
protected doDelete(key: StorageKeyType): Promise<boolean>;
|
|
341
|
+
protected doUpdate(updates: Array<{
|
|
342
|
+
key: StorageKeyType;
|
|
343
|
+
value: any;
|
|
344
|
+
}>): Promise<void>;
|
|
345
|
+
protected doClear(): Promise<void>;
|
|
346
|
+
protected doKeys(): Promise<string[]>;
|
|
347
|
+
protected doHas(key: StorageKeyType): Promise<boolean>;
|
|
348
|
+
private getAllKeys;
|
|
349
|
+
protected doDestroy(): Promise<void>;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
declare class MemoryStorage<T extends Record<string, any>> extends BaseStorage<T> {
|
|
353
|
+
private storage;
|
|
354
|
+
constructor(config: StorageConfig, pluginExecutor?: IPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger);
|
|
355
|
+
initialize(): Promise<this>;
|
|
356
|
+
protected doGet(key: StorageKeyType): Promise<any>;
|
|
357
|
+
protected doSet(key: StorageKeyType, value: any): Promise<void>;
|
|
358
|
+
protected doDelete(key: StorageKeyType): Promise<boolean>;
|
|
359
|
+
protected doUpdate(updates: Array<{
|
|
360
|
+
key: StorageKeyType;
|
|
361
|
+
value: any;
|
|
362
|
+
}>): Promise<void>;
|
|
363
|
+
protected doClear(): Promise<void>;
|
|
364
|
+
protected doKeys(): Promise<string[]>;
|
|
365
|
+
protected doHas(key: StorageKeyType): Promise<boolean>;
|
|
366
|
+
protected doDestroy(): Promise<void>;
|
|
367
|
+
private getAllKeys;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
declare class SelectorModule<S extends Record<string, any>> implements ISelectorModule<S> {
|
|
371
|
+
private readonly source;
|
|
372
|
+
private readonly logger?;
|
|
373
|
+
storageName: string;
|
|
374
|
+
private subscriptions;
|
|
375
|
+
private cachedState?;
|
|
376
|
+
private localSelectorCache;
|
|
377
|
+
private batchUpdateInProgress;
|
|
378
|
+
private pendingUpdates;
|
|
379
|
+
constructor(source: IStorage<S>, logger?: ILogger | undefined);
|
|
380
|
+
/**
|
|
381
|
+
* Генерирует имя для селектора на основе его типа и функции
|
|
382
|
+
*/
|
|
383
|
+
private generateName;
|
|
384
|
+
/**
|
|
385
|
+
* Обрабатывает отложенные обновления, чтобы избежать каскадных уведомлений
|
|
386
|
+
*/
|
|
387
|
+
private processPendingUpdates;
|
|
388
|
+
createSelector<T>(selector: Selector<S, T>, options?: SelectorOptions<T>): SelectorAPI<T>;
|
|
389
|
+
createSelector<Deps extends unknown[], T>(dependencies: {
|
|
390
|
+
[K in keyof Deps]: SelectorAPI<Deps[K]>;
|
|
391
|
+
}, resultFn: (...args: Deps) => T, options?: SelectorOptions<T>): SelectorAPI<T>;
|
|
392
|
+
private createSimpleSelector;
|
|
393
|
+
private createCombinedSelector;
|
|
394
|
+
destroy(): void;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
export { ConfigureMiddlewares, DefaultMiddlewares, IEventEmitter, ILogger, type IPlugin, type IPluginExecutor, type IPluginManager, ISelectorModule, IStorage, type IStoragePlugin, IndexedDBStorage, LocalStorage, MemoryStorage, Middleware, type PluginContext, SelectorAPI, SelectorModule, StorageConfig, StorageEvent, StorageKeyType, StoragePluginModule, StorageType, broadcastMiddleware };
|
package/dist/core.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{e as IndexedDBStorage,f as LocalStorage,g as MemoryStorage,a as SelectorModule,c as StorageEvents,b as StoragePluginModule,d as broadcastMiddleware}from'./chunk-6RNZVHSR.js';import'./chunk-ZE2EJX2Y.js';
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import { Observable, OperatorFunction } from 'rxjs';
|
|
2
|
+
import { I as IStorage } from './storage.interface-Dl8SLUd1.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Разбиение запроса на порции
|
|
6
|
+
* Отправляется ПОСЛЕДОВАТЕЛЬНО n-запросов и дожидается ответа от каждого
|
|
7
|
+
* @param fn - функция в которую передается chunk и возвращается функция api
|
|
8
|
+
* @param arr - массив который нужно поделить
|
|
9
|
+
* @param size - размер порции
|
|
10
|
+
* @param delayMs - задержка между запросами в миллисекундах
|
|
11
|
+
*/
|
|
12
|
+
declare const chunkRequestConsistent: <T, R>(fn: (chunk: T[]) => Observable<R>, arr: T[], size: number, delayMs?: number) => Observable<R[]>;
|
|
13
|
+
type ChunkRequestConsistent = typeof chunkRequestConsistent;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Разбиение запроса на порции
|
|
17
|
+
* Отправляется ПАРАЛЛЕЛЬНО n-запросов и дожидается ответа от каждого
|
|
18
|
+
* @param fn - функция в которую передается chunk и возвращается функция api
|
|
19
|
+
* @param arr - массив который нужно поделить
|
|
20
|
+
* @param size - размер порции
|
|
21
|
+
* @param delayMs - задержка между запросами в миллисекундах
|
|
22
|
+
*/
|
|
23
|
+
declare const chunkRequestParallel: <T, R>(fn: (chunk: T[]) => Observable<R>, arr: T[], size: number, delayMs?: number) => Observable<R[]>;
|
|
24
|
+
type ChunkRequestParallel = typeof chunkRequestParallel;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Тип действия с типизированным payload
|
|
28
|
+
*/
|
|
29
|
+
interface TypedAction<P> extends Action<P> {
|
|
30
|
+
type: string;
|
|
31
|
+
payload: P;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Тип для внешних состояний
|
|
35
|
+
*/
|
|
36
|
+
type ExternalStates = Record<string, Observable<any>>;
|
|
37
|
+
/**
|
|
38
|
+
* Тип для базового эффекта без доступа к состоянию
|
|
39
|
+
*/
|
|
40
|
+
type EffectBase<TDispatchers extends Record<string, Dispatcher<any, any>> = Record<string, never>, TServices extends Record<string, any> = Record<string, never>> = (action$: Observable<Action>, dispatchers: TDispatchers, services: TServices) => Observable<unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* Тип для эффекта с доступом к состоянию и конфигурации - это основной тип, который используется по умолчанию
|
|
43
|
+
*/
|
|
44
|
+
type Effect<TState extends Record<string, any> = any, TDispatchers extends Record<string, Dispatcher<any, any>> = Record<string, never>, TServices extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalStates extends ExternalStates = Record<string, never>> = (action$: Observable<Action>, state$: Observable<TState>, externalStates: TExternalStates, dispatchers: TDispatchers, services: TServices, config: TConfig) => Observable<unknown>;
|
|
45
|
+
/**
|
|
46
|
+
* Тип для получения типов действий диспетчера
|
|
47
|
+
*/
|
|
48
|
+
type DispatcherActions<T> = T extends Dispatcher<any, infer A> ? ActionsResult<A> : Record<string, DispatchFunction<any, any>>;
|
|
49
|
+
/**
|
|
50
|
+
* Конфигурация для валидации в validateMap
|
|
51
|
+
*/
|
|
52
|
+
interface ValidateConfig {
|
|
53
|
+
conditions: boolean[];
|
|
54
|
+
skipAction: (() => any) | any | ((() => any) | any)[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Утилиты для запросов в validateMap
|
|
58
|
+
*/
|
|
59
|
+
interface ValidateMapRequestUtils {
|
|
60
|
+
chunkRequest: ChunkRequestParallel;
|
|
61
|
+
chunkRequestConsistent: ChunkRequestConsistent;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Оператор для фильтрации действий по типу с сохранением типа payload
|
|
65
|
+
*/
|
|
66
|
+
declare function ofType<T extends DispatchFunction<any, any> | WatcherFunction<any>>(actionFn: T): OperatorFunction<Action, TypedAction<T extends WatcherFunction<infer R> ? R : ExtractResultType<T>>>;
|
|
67
|
+
/**
|
|
68
|
+
* Оператор для фильтрации действий по нескольким типам с объединением типов payload
|
|
69
|
+
* @param actionFns Массив функций действий
|
|
70
|
+
*/
|
|
71
|
+
declare function ofTypes<T extends DispatchFunction<any, any>[]>(actionFns: [...T]): OperatorFunction<Action, TypedAction<ExtractResultType<T[number]>>>;
|
|
72
|
+
/**
|
|
73
|
+
* Оператор для ожидания выполнения всех указанных действий
|
|
74
|
+
* @param actionFns Массив функций действий
|
|
75
|
+
*/
|
|
76
|
+
declare function ofTypesWaitAll<T extends DispatchFunction<any, any>[]>(actionFns: [...T]): (source$: Observable<Action>) => Observable<{ [K in keyof T]: TypedAction<ExtractResultType<T[K]>>; }>;
|
|
77
|
+
/**
|
|
78
|
+
* Создает Observable с выбранными данными из состояния
|
|
79
|
+
* @param state$ Поток состояния
|
|
80
|
+
* @param selectors Селекторы для выбора частей состояния
|
|
81
|
+
* @returns Observable с массивом выбранных значений
|
|
82
|
+
*/
|
|
83
|
+
declare function selectorMap<TState, TResults extends any[]>(state$: Observable<TState>, ...selectors: {
|
|
84
|
+
[K in keyof TResults]: (state: TState) => TResults[K];
|
|
85
|
+
}): Observable<TResults>;
|
|
86
|
+
/**
|
|
87
|
+
* Создает именованный объект вместо массива
|
|
88
|
+
* @param state$ Поток состояния
|
|
89
|
+
* @param selectors Объект с селекторами
|
|
90
|
+
* @returns Observable с объектом выбранных значений
|
|
91
|
+
*/
|
|
92
|
+
declare function selectorObject<TState, TResult extends Record<string, any>>(state$: Observable<TState>, selectors: {
|
|
93
|
+
[K in keyof TResult]: (state: TState) => TResult[K];
|
|
94
|
+
}): Observable<TResult>;
|
|
95
|
+
/**
|
|
96
|
+
* Оператор validateMap для валидации данных и условного вызова API
|
|
97
|
+
*/
|
|
98
|
+
declare function validateMap<T, TResult = any>({ validator, apiCall, }: {
|
|
99
|
+
validator?: (value: T) => ValidateConfig;
|
|
100
|
+
apiCall: (value: T, utils: ValidateMapRequestUtils) => Observable<TResult>;
|
|
101
|
+
}): OperatorFunction<T, any>;
|
|
102
|
+
/**
|
|
103
|
+
* Класс для управления эффектами с поддержкой доступа к состоянию и конфигурации
|
|
104
|
+
* Основной класс, который следует использовать
|
|
105
|
+
*/
|
|
106
|
+
declare class EffectsModule<TState extends Record<string, any> = any, TDispatchers extends Record<string, Dispatcher<any, any>> = Record<string, never>, TServices extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalStates extends ExternalStates = Record<string, never>> {
|
|
107
|
+
private storage;
|
|
108
|
+
private externalStates;
|
|
109
|
+
private dispatchers;
|
|
110
|
+
private services;
|
|
111
|
+
private config;
|
|
112
|
+
private effects;
|
|
113
|
+
private subscriptions;
|
|
114
|
+
private running;
|
|
115
|
+
private action$;
|
|
116
|
+
/**
|
|
117
|
+
* Поток состояния
|
|
118
|
+
*/
|
|
119
|
+
readonly state$: Observable<TState>;
|
|
120
|
+
/**
|
|
121
|
+
* Создает модуль эффектов с доступом к состоянию, внешним состояниям и конфигурации
|
|
122
|
+
* @param storage Хранилище состояния
|
|
123
|
+
* @param externalStates Внешние состояния
|
|
124
|
+
* @param dispatchers Объект с диспетчерами
|
|
125
|
+
* @param services Объект с сервисами
|
|
126
|
+
* @param config Глобальная конфигурация для всех эффектов
|
|
127
|
+
*/
|
|
128
|
+
constructor(storage: IStorage<TState>, externalStates: TExternalStates | undefined, dispatchers: TDispatchers, services?: TServices, config?: TConfig);
|
|
129
|
+
/**
|
|
130
|
+
* Подписывается на действия от всех диспетчеров
|
|
131
|
+
*/
|
|
132
|
+
private subscribeToDispatchers;
|
|
133
|
+
add(effect: Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>): this;
|
|
134
|
+
/**
|
|
135
|
+
* Добавляет несколько эффектов
|
|
136
|
+
* @param effects Эффекты для добавления
|
|
137
|
+
* @returns Текущий модуль
|
|
138
|
+
*/
|
|
139
|
+
addEffects(effects: Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>[]): this;
|
|
140
|
+
/**
|
|
141
|
+
* Запускает все эффекты
|
|
142
|
+
* @returns Текущий модуль
|
|
143
|
+
*/
|
|
144
|
+
start(): this;
|
|
145
|
+
/**
|
|
146
|
+
* Останавливает все эффекты
|
|
147
|
+
* @returns Текущий модуль
|
|
148
|
+
*/
|
|
149
|
+
stop(): this;
|
|
150
|
+
/**
|
|
151
|
+
* Подписывается на конкретный эффект
|
|
152
|
+
* @param effect Эффект для подписки
|
|
153
|
+
*/
|
|
154
|
+
private subscribeToEffect;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Вспомогательная функция для создания типизированного эффекта без состояния
|
|
158
|
+
* @deprecated Используйте createEffect вместо этого
|
|
159
|
+
*/
|
|
160
|
+
declare function createEffectBase<TDispatchers extends Record<string, Dispatcher<any, any>>, TServices extends Record<string, any>>(effect: EffectBase<TDispatchers, TServices>): EffectBase<TDispatchers, TServices>;
|
|
161
|
+
/**
|
|
162
|
+
* Вспомогательная функция для создания типизированного эффекта с состоянием и конфигурацией
|
|
163
|
+
*/
|
|
164
|
+
declare function createEffect<TState extends Record<string, any>, TDispatchers extends Record<string, Dispatcher<any, any>>, TServices extends Record<string, any>, TConfig extends Record<string, any> = Record<string, never>, TExternalStates extends ExternalStates = Record<string, never>>(effect: Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>): Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>;
|
|
165
|
+
/**
|
|
166
|
+
* Объединяет несколько эффектов в один
|
|
167
|
+
* @param effects Эффекты для объединения
|
|
168
|
+
* @returns Объединенный эффект
|
|
169
|
+
*/
|
|
170
|
+
declare function combineEffects<TState extends Record<string, any>, TDispatchers extends Record<string, Dispatcher<any, any>>, TServices extends Record<string, any>, TConfig extends Record<string, any> = Record<string, never>, TExternalStates extends ExternalStates = Record<string, never>>(...effects: Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>[]): Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Расширенное API для middleware
|
|
174
|
+
*/
|
|
175
|
+
interface EnhancedMiddlewareAPI<T extends Record<string, any>> {
|
|
176
|
+
getState: () => Promise<T>;
|
|
177
|
+
dispatch: (action: Action) => Promise<any>;
|
|
178
|
+
storage: IStorage<T>;
|
|
179
|
+
actions$: Observable<Action>;
|
|
180
|
+
actions: Record<string, DispatchFunction<any, any>>;
|
|
181
|
+
watchers: Record<string, WatcherFunction<any>>;
|
|
182
|
+
findActionByType: (actionType: string) => DispatchFunction<any, any> | undefined;
|
|
183
|
+
findWatcherByType: (actionType: string) => WatcherFunction<any> | undefined;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Расширенное определение middleware
|
|
187
|
+
*/
|
|
188
|
+
interface EnhancedMiddleware<T extends Record<string, any> = any> {
|
|
189
|
+
(api: EnhancedMiddlewareAPI<T>): (next: (action: Action) => Promise<any>) => (action: Action) => Promise<any>;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Базовая структура действия
|
|
193
|
+
*/
|
|
194
|
+
interface Action<T = unknown> {
|
|
195
|
+
type: string;
|
|
196
|
+
payload?: T;
|
|
197
|
+
meta?: Record<string, any>;
|
|
198
|
+
}
|
|
199
|
+
interface ActionExecutionOptions {
|
|
200
|
+
worker?: Worker;
|
|
201
|
+
memoize?: (currentArgs: any[], previousArgs: any[], previousResult: any) => boolean;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Параметры для создания действия
|
|
205
|
+
*/
|
|
206
|
+
interface ActionDefinition<TParams, TResult> {
|
|
207
|
+
/** Тип действия для идентификации в потоке и эффектах */
|
|
208
|
+
type: string;
|
|
209
|
+
/** Функция, выполняющая действие и возвращающая результат (payload) */
|
|
210
|
+
action: (params: TParams) => Promise<TResult> | TResult;
|
|
211
|
+
/** Дополнительные метаданные (опционально) */
|
|
212
|
+
meta?: Record<string, any>;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Определение типа для watcher'а
|
|
216
|
+
*/
|
|
217
|
+
interface WatcherDefinition<T, R> {
|
|
218
|
+
type: string;
|
|
219
|
+
selector: (state: T) => R;
|
|
220
|
+
meta?: Record<string, any>;
|
|
221
|
+
shouldTrigger?: (prev: R | undefined, current: R) => boolean;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Тип для функции watcher
|
|
225
|
+
*/
|
|
226
|
+
interface WatcherFunction<R> {
|
|
227
|
+
(): Observable<TypedAction<R>>;
|
|
228
|
+
actionType: string;
|
|
229
|
+
meta?: Record<string, any>;
|
|
230
|
+
unsubscribe: VoidFunction;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Расширенный тип для функции настройки действий с поддержкой дополнительных утилит
|
|
234
|
+
*/
|
|
235
|
+
type ActionsSetupWithUtils<T extends Record<string, unknown>> = (storage: IStorage<T>, utils: {
|
|
236
|
+
createAction: ActionCreatorFactory;
|
|
237
|
+
createWatcher: <R>(config: WatcherDefinition<T, R>) => WatcherFunction<R>;
|
|
238
|
+
}) => Record<string, DispatchFunction<any, any> | WatcherFunction<any>>;
|
|
239
|
+
/**
|
|
240
|
+
* Расширенная функция диспетчеризации
|
|
241
|
+
*/
|
|
242
|
+
interface DispatchFunction<TParams, TResult> {
|
|
243
|
+
/** Функция для вызова действия с параметрами */
|
|
244
|
+
(params: TParams): Promise<TResult>;
|
|
245
|
+
/** Тип действия для использования в эффектах */
|
|
246
|
+
actionType: string;
|
|
247
|
+
/** Метаданные действия */
|
|
248
|
+
meta?: Record<string, any>;
|
|
249
|
+
/** Внутренний тип для идентификации */
|
|
250
|
+
_type?: 'dispatch' | 'watchers';
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Тип для фабрики создателей действий
|
|
254
|
+
*/
|
|
255
|
+
type ActionCreatorFactory = <TParams, TResult>(config: ActionDefinition<TParams, TResult>, executionOptions?: ActionExecutionOptions) => DispatchFunction<TParams, TResult>;
|
|
256
|
+
/**
|
|
257
|
+
* Тип для функции настройки действий
|
|
258
|
+
*/
|
|
259
|
+
type ActionsSetup<T extends Record<string, unknown>> = (create: ActionCreatorFactory, storage: IStorage<T>) => Record<string, DispatchFunction<any, any>>;
|
|
260
|
+
/**
|
|
261
|
+
* Извлекает тип результата из функции диспетчера
|
|
262
|
+
*/
|
|
263
|
+
type ExtractResultType<T> = T extends DispatchFunction<any, infer R> ? R : never;
|
|
264
|
+
/**
|
|
265
|
+
* Извлекает типы из функции настройки действий
|
|
266
|
+
*/
|
|
267
|
+
type ActionsResult<F> = F extends (create: ActionCreatorFactory, storage: any, ...args: any[]) => infer R ? R : Record<string, DispatchFunction<any, any>>;
|
|
268
|
+
/**
|
|
269
|
+
* Типизированный объект действий
|
|
270
|
+
*/
|
|
271
|
+
type DispatchActions<T> = {
|
|
272
|
+
[K in keyof T]: T[K] extends DispatchFunction<any, any> ? T[K] : never;
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* Типизированный объект watchers
|
|
276
|
+
*/
|
|
277
|
+
type WatcherActions<T> = {
|
|
278
|
+
[K in keyof T]: T[K] extends WatcherFunction<any> ? T[K] : never;
|
|
279
|
+
};
|
|
280
|
+
/**
|
|
281
|
+
* Параметры для Dispatcher
|
|
282
|
+
*/
|
|
283
|
+
interface DispatcherOptions<T extends Record<string, any>> {
|
|
284
|
+
storage: IStorage<T>;
|
|
285
|
+
worker?: Worker;
|
|
286
|
+
middlewares?: EnhancedMiddleware<T>[];
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Интерфейс для API middleware
|
|
290
|
+
*/
|
|
291
|
+
interface DispatcherMiddlewareAPI<T extends Record<string, any>> {
|
|
292
|
+
getState: () => Promise<T>;
|
|
293
|
+
dispatch: (action: Action) => Promise<any>;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Интерфейс для middleware
|
|
297
|
+
*/
|
|
298
|
+
interface DispatcherMiddleware<T extends Record<string, any> = any> {
|
|
299
|
+
(api: DispatcherMiddlewareAPI<T>): (next: (action: Action) => Promise<any>) => (action: Action) => Promise<any>;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Класс Dispatcher для интеграции хранилищ с реактивной системой
|
|
303
|
+
*/
|
|
304
|
+
declare class Dispatcher<T extends Record<string, any>, TActionsFn extends ActionsSetupWithUtils<T> = ActionsSetupWithUtils<T>> {
|
|
305
|
+
private options;
|
|
306
|
+
private actions$;
|
|
307
|
+
readonly actions: Observable<Action>;
|
|
308
|
+
dispatch: Record<string, DispatchFunction<any, any>>;
|
|
309
|
+
watchers: Record<string, WatcherFunction<any>>;
|
|
310
|
+
private storage;
|
|
311
|
+
private middlewareFunctions;
|
|
312
|
+
private middlewareAPI;
|
|
313
|
+
/**
|
|
314
|
+
* Создает новый экземпляр Dispatcher
|
|
315
|
+
*/
|
|
316
|
+
constructor(options: DispatcherOptions<T>);
|
|
317
|
+
/**
|
|
318
|
+
* Добавляет middleware в цепочку обработки
|
|
319
|
+
*/
|
|
320
|
+
use(...middlewares: EnhancedMiddleware<T>[]): this;
|
|
321
|
+
/**
|
|
322
|
+
* Получает все действия с улучшенной типизацией
|
|
323
|
+
*/
|
|
324
|
+
getActions(): ActionsResult<TActionsFn>;
|
|
325
|
+
/**
|
|
326
|
+
* Получает типизированные действия диспетчера
|
|
327
|
+
*/
|
|
328
|
+
getTypedDispatch<A extends Record<string, any>>(): DispatchActions<A>;
|
|
329
|
+
/**
|
|
330
|
+
* Получает типизированные watcher'ы
|
|
331
|
+
*/
|
|
332
|
+
getTypedWatchers<A extends Record<string, any>>(): WatcherActions<A>;
|
|
333
|
+
/**
|
|
334
|
+
* Находит действие по типу
|
|
335
|
+
*/
|
|
336
|
+
findActionByType(actionType: string): DispatchFunction<any, any> | undefined;
|
|
337
|
+
/**
|
|
338
|
+
* Находит наблюдатель по типу
|
|
339
|
+
*/
|
|
340
|
+
findWatcherByType(actionType: string): WatcherFunction<any> | undefined;
|
|
341
|
+
/**
|
|
342
|
+
* Создает действие
|
|
343
|
+
*/
|
|
344
|
+
createAction<TParams, TResult>(actionConfig: ActionDefinition<TParams, TResult>, executionOptions?: ActionExecutionOptions): DispatchFunction<TParams, TResult>;
|
|
345
|
+
/**
|
|
346
|
+
* Создает watcher для отслеживания изменений в хранилище
|
|
347
|
+
*/
|
|
348
|
+
createWatcher<R>(config: WatcherDefinition<T, R>): WatcherFunction<R>;
|
|
349
|
+
/**
|
|
350
|
+
* Выполняет действие в worker
|
|
351
|
+
*/
|
|
352
|
+
private executeInWorker;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Функция для создания типизированного диспетчера
|
|
356
|
+
*/
|
|
357
|
+
declare function createDispatcher<TState extends Record<string, any>, TActions extends ActionsSetupWithUtils<TState>>(options: DispatcherOptions<TState>, actionsSetup: TActions): Dispatcher<TState, TActions> & {
|
|
358
|
+
dispatch: DispatchActions<ReturnType<TActions>>;
|
|
359
|
+
watchers: WatcherActions<ReturnType<TActions>>;
|
|
360
|
+
};
|
|
361
|
+
type CreateDispatcherType = ReturnType<typeof createDispatcher>;
|
|
362
|
+
|
|
363
|
+
export { type Action as A, combineEffects as B, type CreateDispatcherType as C, type DispatchFunction as D, type EnhancedMiddlewareAPI as E, type TypedAction as T, type ValidateConfig as V, type WatcherFunction as W, type EnhancedMiddleware as a, type ActionDefinition as b, type ActionsSetupWithUtils as c, type ActionsSetup as d, type ExtractResultType as e, type ActionsResult as f, type DispatchActions as g, type WatcherActions as h, type DispatcherMiddlewareAPI as i, type DispatcherMiddleware as j, Dispatcher as k, createDispatcher as l, type ExternalStates as m, type EffectBase as n, type Effect as o, type DispatcherActions as p, type ValidateMapRequestUtils as q, ofType as r, ofTypes as s, ofTypesWaitAll as t, selectorMap as u, selectorObject as v, validateMap as w, EffectsModule as x, createEffectBase as y, createEffect as z };
|