synapse-storage 3.0.1 → 3.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/dist/api.cjs +891 -0
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.cts +365 -0
- package/dist/api.d.ts +365 -0
- package/dist/api.js +860 -0
- package/dist/api.js.map +1 -0
- package/dist/core.cjs +2389 -0
- package/dist/core.cjs.map +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 +2356 -0
- package/dist/core.js.map +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 +4148 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -10
- package/dist/index.js +4092 -13
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +268 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +74 -0
- package/dist/react.d.ts +74 -0
- package/dist/react.js +239 -0
- package/dist/react.js.map +1 -0
- package/dist/reactive.cjs +643 -0
- package/dist/reactive.cjs.map +1 -0
- package/dist/reactive.d.cts +35 -0
- package/dist/reactive.d.ts +35 -0
- package/dist/reactive.js +604 -0
- package/dist/reactive.js.map +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 +601 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +92 -0
- package/dist/utils.d.ts +92 -0
- package/dist/utils.js +574 -0
- package/dist/utils.js.map +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/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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reactive/dispatcher/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reactive/dispatcher/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/reactive/dispatcher/middlewares/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/reactive/dispatcher/middlewares/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { EnhancedMiddleware } from '../dispatcher.module';
|
|
2
|
-
interface LoggerTranslations {
|
|
3
|
-
action: string;
|
|
4
|
-
prevState: string;
|
|
5
|
-
nextState: string;
|
|
6
|
-
duration: string;
|
|
7
|
-
error: string;
|
|
8
|
-
diff: string;
|
|
9
|
-
changesCount: string;
|
|
10
|
-
showFullState: string;
|
|
11
|
-
}
|
|
12
|
-
interface LoggerColors {
|
|
13
|
-
title: string;
|
|
14
|
-
prevState: string;
|
|
15
|
-
fullState: string;
|
|
16
|
-
action: string;
|
|
17
|
-
nextState: string;
|
|
18
|
-
error: string;
|
|
19
|
-
diff: string;
|
|
20
|
-
}
|
|
21
|
-
interface LoggerOptions {
|
|
22
|
-
collapsed?: boolean;
|
|
23
|
-
duration?: boolean;
|
|
24
|
-
diff?: boolean;
|
|
25
|
-
showFullState?: boolean;
|
|
26
|
-
translations?: Partial<LoggerTranslations>;
|
|
27
|
-
colors?: Partial<LoggerColors>;
|
|
28
|
-
}
|
|
29
|
-
export declare const loggerDispatcherMiddleware: <State extends Record<string, any>>(options?: LoggerOptions) => EnhancedMiddleware<State>;
|
|
30
|
-
export {};
|
|
31
|
-
//# sourceMappingURL=logger.middleware.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.middleware.d.ts","sourceRoot":"","sources":["../../../../src/reactive/dispatcher/middlewares/logger.middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAC/B;AA4CD,eAAO,MAAM,0BAA0B,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAS,aAAkB,KAAG,kBAAkB,CAAC,KAAK,CAuGnI,CAAA"}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
// Функция для вычисления разницы между двумя объектами состояния
|
|
2
|
-
function getStateDiff(prevState, nextState) {
|
|
3
|
-
const diff = {};
|
|
4
|
-
// Проверяем изменения в свойствах верхнего уровня
|
|
5
|
-
const allKeys = [...new Set([...Object.keys(prevState), ...Object.keys(nextState)])];
|
|
6
|
-
allKeys.forEach((key) => {
|
|
7
|
-
// Если ключ существует в обоих состояниях
|
|
8
|
-
if (key in prevState && key in nextState) {
|
|
9
|
-
// Если это объекты, рекурсивно проверяем их
|
|
10
|
-
if (typeof prevState[key] === 'object' &&
|
|
11
|
-
prevState[key] !== null &&
|
|
12
|
-
typeof nextState[key] === 'object' &&
|
|
13
|
-
nextState[key] !== null &&
|
|
14
|
-
!Array.isArray(prevState[key]) &&
|
|
15
|
-
!Array.isArray(nextState[key])) {
|
|
16
|
-
const nestedDiff = getStateDiff(prevState[key], nextState[key]);
|
|
17
|
-
if (Object.keys(nestedDiff).length > 0) {
|
|
18
|
-
diff[key] = nestedDiff;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// Для массивов и примитивов просто сравниваем значения
|
|
22
|
-
else if (JSON.stringify(prevState[key]) !== JSON.stringify(nextState[key])) {
|
|
23
|
-
diff[key] = { PREV: prevState[key], NEXT: nextState[key] };
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
// Если ключ существует только в предыдущем состоянии
|
|
27
|
-
else if (key in prevState) {
|
|
28
|
-
diff[key] = { PREV: prevState[key], NEXT: undefined };
|
|
29
|
-
}
|
|
30
|
-
// Если ключ существует только в новом состоянии
|
|
31
|
-
else {
|
|
32
|
-
diff[key] = { PREV: undefined, NEXT: nextState[key] };
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return diff;
|
|
36
|
-
}
|
|
37
|
-
export const loggerDispatcherMiddleware = (options = {}) => {
|
|
38
|
-
const defaultTranslations = {
|
|
39
|
-
action: 'Действие',
|
|
40
|
-
prevState: 'Предыдущее состояние',
|
|
41
|
-
nextState: 'Следующее состояние',
|
|
42
|
-
duration: 'Длительность',
|
|
43
|
-
error: 'Ошибка в действии',
|
|
44
|
-
diff: 'Изменения',
|
|
45
|
-
changesCount: 'Количество изменений',
|
|
46
|
-
showFullState: 'Полное состояние',
|
|
47
|
-
};
|
|
48
|
-
const defaultOptions = {
|
|
49
|
-
collapsed: false,
|
|
50
|
-
duration: true,
|
|
51
|
-
diff: false,
|
|
52
|
-
showFullState: true, // Показывать полное состояние по умолчанию
|
|
53
|
-
translations: defaultTranslations,
|
|
54
|
-
colors: {
|
|
55
|
-
title: '#3498db',
|
|
56
|
-
prevState: '#9E9E9E',
|
|
57
|
-
fullState: '#008a15',
|
|
58
|
-
action: '#03A9F4',
|
|
59
|
-
nextState: '#4CAF50',
|
|
60
|
-
error: '#F20404',
|
|
61
|
-
diff: '#9C27B0',
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
// Объединяем пользовательские настройки с настройками по умолчанию
|
|
65
|
-
const mergedOptions = {
|
|
66
|
-
...defaultOptions,
|
|
67
|
-
...options,
|
|
68
|
-
// Объединяем переводы отдельно, чтобы позволить частичное переопределение
|
|
69
|
-
translations: {
|
|
70
|
-
...defaultTranslations,
|
|
71
|
-
...(options.translations || {}),
|
|
72
|
-
},
|
|
73
|
-
// Объединяем цвета отдельно, чтобы позволить частичное переопределение
|
|
74
|
-
colors: {
|
|
75
|
-
...defaultOptions.colors,
|
|
76
|
-
...(options.colors || {}),
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
const { collapsed, duration, colors, translations } = mergedOptions;
|
|
80
|
-
return (api) => (next) => async (action) => {
|
|
81
|
-
// Собираем информацию перед выполнением
|
|
82
|
-
const started = Date.now();
|
|
83
|
-
const prevState = await api.getState();
|
|
84
|
-
// Выполняем действие без группировки логов
|
|
85
|
-
try {
|
|
86
|
-
// Выполняем действие
|
|
87
|
-
const result = await next(action);
|
|
88
|
-
// Собираем информацию после выполнения
|
|
89
|
-
const nextState = await api.getState();
|
|
90
|
-
const ended = Date.now();
|
|
91
|
-
const time = ended - started;
|
|
92
|
-
// Теперь выводим всю информацию в группе
|
|
93
|
-
const title = `${action.type}`;
|
|
94
|
-
const groupMethod = collapsed ? console.groupCollapsed : console.group;
|
|
95
|
-
groupMethod(`%c ${title}`, `color: ${colors.title}; font-weight: bold`);
|
|
96
|
-
// Выводим информацию о действии
|
|
97
|
-
console.log(`%c ${translations.action}:`, `color: ${colors.action}; font-weight: bold`, action);
|
|
98
|
-
// Если включена опция diff, вычисляем и показываем изменения
|
|
99
|
-
if (mergedOptions.diff) {
|
|
100
|
-
const stateDiff = getStateDiff(prevState, nextState);
|
|
101
|
-
const changesCount = Object.keys(stateDiff).length;
|
|
102
|
-
console.log(`%c ${translations.diff} (${translations.changesCount}: ${changesCount}):`, `color: ${colors.diff}; font-weight: bold`, stateDiff);
|
|
103
|
-
}
|
|
104
|
-
// Если showFullState включен, показываем полные состояния
|
|
105
|
-
if (mergedOptions.showFullState) {
|
|
106
|
-
// Создаем подгруппу для полного состояния
|
|
107
|
-
console.groupCollapsed(`%c ${translations.showFullState}`, `color: ${colors.fullState}; font-weight: bold`);
|
|
108
|
-
console.log(`%c ${translations.prevState}:`, `color: ${colors.prevState}; font-weight: bold`, prevState);
|
|
109
|
-
console.log(`%c ${translations.nextState}:`, `color: ${colors.nextState}; font-weight: bold`, nextState);
|
|
110
|
-
console.groupEnd();
|
|
111
|
-
}
|
|
112
|
-
if (duration) {
|
|
113
|
-
console.log(`%c ${translations.duration}: %c ${time}ms`, 'font-weight: bold', 'color: #4CAF50');
|
|
114
|
-
}
|
|
115
|
-
console.groupEnd();
|
|
116
|
-
return result;
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
// В случае ошибки логируем её отдельно, не в группе
|
|
120
|
-
console.error(`%c ${translations.error}:`, `color: ${colors.error}; font-weight: bold`, action.type, error);
|
|
121
|
-
// Пробрасываем ошибку дальше
|
|
122
|
-
throw error;
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
};
|
|
126
|
-
//# sourceMappingURL=logger.middleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.middleware.js","sourceRoot":"","sources":["../../../../src/reactive/dispatcher/middlewares/logger.middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { Observable, OperatorFunction } from 'rxjs';
|
|
2
|
-
import { IStorage } from '../../core';
|
|
3
|
-
import { Action, ActionsResult, Dispatcher, DispatchFunction, ExtractResultType, WatcherFunction } from '../dispatcher';
|
|
4
|
-
import { ChunkRequestConsistent, ChunkRequestParallel } from './utils';
|
|
5
|
-
/**
|
|
6
|
-
* Тип действия с типизированным payload
|
|
7
|
-
*/
|
|
8
|
-
export interface TypedAction<P> extends Action<P> {
|
|
9
|
-
type: string;
|
|
10
|
-
payload: P;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Тип для внешних состояний
|
|
14
|
-
*/
|
|
15
|
-
export type ExternalStates = Record<string, Observable<any>>;
|
|
16
|
-
/**
|
|
17
|
-
* Тип для базового эффекта без доступа к состоянию
|
|
18
|
-
*/
|
|
19
|
-
export 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>;
|
|
20
|
-
/**
|
|
21
|
-
* Тип для эффекта с доступом к состоянию и конфигурации - это основной тип, который используется по умолчанию
|
|
22
|
-
*/
|
|
23
|
-
export 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>;
|
|
24
|
-
/**
|
|
25
|
-
* Тип для получения типов действий диспетчера
|
|
26
|
-
*/
|
|
27
|
-
export type DispatcherActions<T> = T extends Dispatcher<any, infer A> ? ActionsResult<A> : Record<string, DispatchFunction<any, any>>;
|
|
28
|
-
/**
|
|
29
|
-
* Конфигурация для валидации в validateMap
|
|
30
|
-
*/
|
|
31
|
-
export interface ValidateConfig {
|
|
32
|
-
conditions: boolean[];
|
|
33
|
-
skipAction: (() => any) | any | ((() => any) | any)[];
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Утилиты для запросов в validateMap
|
|
37
|
-
*/
|
|
38
|
-
export interface ValidateMapRequestUtils {
|
|
39
|
-
chunkRequest: ChunkRequestParallel;
|
|
40
|
-
chunkRequestConsistent: ChunkRequestConsistent;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Оператор для фильтрации действий по типу с сохранением типа payload
|
|
44
|
-
*/
|
|
45
|
-
export declare function ofType<T extends DispatchFunction<any, any> | WatcherFunction<any>>(actionFn: T): OperatorFunction<Action, TypedAction<T extends WatcherFunction<infer R> ? R : ExtractResultType<T>>>;
|
|
46
|
-
/**
|
|
47
|
-
* Оператор для фильтрации действий по нескольким типам с объединением типов payload
|
|
48
|
-
* @param actionFns Массив функций действий
|
|
49
|
-
*/
|
|
50
|
-
export declare function ofTypes<T extends DispatchFunction<any, any>[]>(actionFns: [...T]): OperatorFunction<Action, TypedAction<ExtractResultType<T[number]>>>;
|
|
51
|
-
/**
|
|
52
|
-
* Оператор для ожидания выполнения всех указанных действий
|
|
53
|
-
* @param actionFns Массив функций действий
|
|
54
|
-
*/
|
|
55
|
-
export declare function ofTypesWaitAll<T extends DispatchFunction<any, any>[]>(actionFns: [...T]): (source$: Observable<Action>) => Observable<{ [K in keyof T]: TypedAction<ExtractResultType<T[K]>>; }>;
|
|
56
|
-
/**
|
|
57
|
-
* Создает Observable с выбранными данными из состояния
|
|
58
|
-
* @param state$ Поток состояния
|
|
59
|
-
* @param selectors Селекторы для выбора частей состояния
|
|
60
|
-
* @returns Observable с массивом выбранных значений
|
|
61
|
-
*/
|
|
62
|
-
export declare function selectorMap<TState, TResults extends any[]>(state$: Observable<TState>, ...selectors: {
|
|
63
|
-
[K in keyof TResults]: (state: TState) => TResults[K];
|
|
64
|
-
}): Observable<TResults>;
|
|
65
|
-
/**
|
|
66
|
-
* Создает именованный объект вместо массива
|
|
67
|
-
* @param state$ Поток состояния
|
|
68
|
-
* @param selectors Объект с селекторами
|
|
69
|
-
* @returns Observable с объектом выбранных значений
|
|
70
|
-
*/
|
|
71
|
-
export declare function selectorObject<TState, TResult extends Record<string, any>>(state$: Observable<TState>, selectors: {
|
|
72
|
-
[K in keyof TResult]: (state: TState) => TResult[K];
|
|
73
|
-
}): Observable<TResult>;
|
|
74
|
-
/**
|
|
75
|
-
* Оператор validateMap для валидации данных и условного вызова API
|
|
76
|
-
*/
|
|
77
|
-
export declare function validateMap<T, TResult = any>({ validator, apiCall, }: {
|
|
78
|
-
validator?: (value: T) => ValidateConfig;
|
|
79
|
-
apiCall: (value: T, utils: ValidateMapRequestUtils) => Observable<TResult>;
|
|
80
|
-
}): OperatorFunction<T, any>;
|
|
81
|
-
/**
|
|
82
|
-
* Класс для управления эффектами с поддержкой доступа к состоянию и конфигурации
|
|
83
|
-
* Основной класс, который следует использовать
|
|
84
|
-
*/
|
|
85
|
-
export 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>> {
|
|
86
|
-
private storage;
|
|
87
|
-
private externalStates;
|
|
88
|
-
private dispatchers;
|
|
89
|
-
private services;
|
|
90
|
-
private config;
|
|
91
|
-
private effects;
|
|
92
|
-
private subscriptions;
|
|
93
|
-
private running;
|
|
94
|
-
private action$;
|
|
95
|
-
/**
|
|
96
|
-
* Поток состояния
|
|
97
|
-
*/
|
|
98
|
-
readonly state$: Observable<TState>;
|
|
99
|
-
/**
|
|
100
|
-
* Создает модуль эффектов с доступом к состоянию, внешним состояниям и конфигурации
|
|
101
|
-
* @param storage Хранилище состояния
|
|
102
|
-
* @param externalStates Внешние состояния
|
|
103
|
-
* @param dispatchers Объект с диспетчерами
|
|
104
|
-
* @param services Объект с сервисами
|
|
105
|
-
* @param config Глобальная конфигурация для всех эффектов
|
|
106
|
-
*/
|
|
107
|
-
constructor(storage: IStorage<TState>, externalStates: TExternalStates | undefined, dispatchers: TDispatchers, services?: TServices, config?: TConfig);
|
|
108
|
-
/**
|
|
109
|
-
* Подписывается на действия от всех диспетчеров
|
|
110
|
-
*/
|
|
111
|
-
private subscribeToDispatchers;
|
|
112
|
-
add(effect: Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>): this;
|
|
113
|
-
/**
|
|
114
|
-
* Добавляет несколько эффектов
|
|
115
|
-
* @param effects Эффекты для добавления
|
|
116
|
-
* @returns Текущий модуль
|
|
117
|
-
*/
|
|
118
|
-
addEffects(effects: Effect<TState, TDispatchers, TServices, TConfig, TExternalStates>[]): this;
|
|
119
|
-
/**
|
|
120
|
-
* Запускает все эффекты
|
|
121
|
-
* @returns Текущий модуль
|
|
122
|
-
*/
|
|
123
|
-
start(): this;
|
|
124
|
-
/**
|
|
125
|
-
* Останавливает все эффекты
|
|
126
|
-
* @returns Текущий модуль
|
|
127
|
-
*/
|
|
128
|
-
stop(): this;
|
|
129
|
-
/**
|
|
130
|
-
* Подписывается на конкретный эффект
|
|
131
|
-
* @param effect Эффект для подписки
|
|
132
|
-
*/
|
|
133
|
-
private subscribeToEffect;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Вспомогательная функция для создания типизированного эффекта без состояния
|
|
137
|
-
* @deprecated Используйте createEffect вместо этого
|
|
138
|
-
*/
|
|
139
|
-
export declare function createEffectBase<TDispatchers extends Record<string, Dispatcher<any, any>>, TServices extends Record<string, any>>(effect: EffectBase<TDispatchers, TServices>): EffectBase<TDispatchers, TServices>;
|
|
140
|
-
/**
|
|
141
|
-
* Вспомогательная функция для создания типизированного эффекта с состоянием и конфигурацией
|
|
142
|
-
*/
|
|
143
|
-
export 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>;
|
|
144
|
-
/**
|
|
145
|
-
* Объединяет несколько эффектов в один
|
|
146
|
-
* @param effects Эффекты для объединения
|
|
147
|
-
* @returns Объединенный эффект
|
|
148
|
-
*/
|
|
149
|
-
export 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>;
|
|
150
|
-
//# sourceMappingURL=effects.module.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effects.module.d.ts","sourceRoot":"","sources":["../../../src/reactive/effects/effects.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
import { combineLatest, merge, Observable, of, pipe, Subject } from 'rxjs';
|
|
2
|
-
import { catchError, filter, map, share, switchMap, take } from 'rxjs/operators';
|
|
3
|
-
import { chunkRequestConsistent, chunkRequestParallel } from './utils.js';
|
|
4
|
-
/**
|
|
5
|
-
* Оператор для фильтрации действий по типу с сохранением типа payload
|
|
6
|
-
*/
|
|
7
|
-
export function ofType(actionFn) {
|
|
8
|
-
const { actionType } = actionFn;
|
|
9
|
-
if (!actionType) {
|
|
10
|
-
console.warn('ofType: Action function does not have actionType property', actionFn);
|
|
11
|
-
return filter(() => false);
|
|
12
|
-
}
|
|
13
|
-
// Улучшенная реализация с явными типами
|
|
14
|
-
return (source$) => {
|
|
15
|
-
return source$.pipe(filter((action) => action !== undefined && action.type === actionType));
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Оператор для фильтрации действий по нескольким типам с объединением типов payload
|
|
20
|
-
* @param actionFns Массив функций действий
|
|
21
|
-
*/
|
|
22
|
-
export function ofTypes(actionFns) {
|
|
23
|
-
// Получаем типы действий
|
|
24
|
-
const actionTypes = actionFns.map((fn) => fn.actionType).filter(Boolean);
|
|
25
|
-
if (actionTypes.length === 0) {
|
|
26
|
-
console.warn('ofTypes: No valid action types found in array', actionFns);
|
|
27
|
-
return filter(() => false);
|
|
28
|
-
}
|
|
29
|
-
// Улучшенная реализация с явными типами
|
|
30
|
-
return (source$) => {
|
|
31
|
-
return source$.pipe(filter((action) => action !== undefined && actionTypes.includes(action.type)));
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Оператор для ожидания выполнения всех указанных действий
|
|
36
|
-
* @param actionFns Массив функций действий
|
|
37
|
-
*/
|
|
38
|
-
export function ofTypesWaitAll(actionFns) {
|
|
39
|
-
return (source$) => {
|
|
40
|
-
// Создаем потоки для каждого типа действия
|
|
41
|
-
const actionTypes = actionFns.map((fn) => fn.actionType).filter(Boolean);
|
|
42
|
-
if (actionTypes.length === 0) {
|
|
43
|
-
console.warn('ofTypesWaitAll: No valid action types found in array', actionFns);
|
|
44
|
-
return of([]);
|
|
45
|
-
}
|
|
46
|
-
// Для каждого типа действия создаем поток,
|
|
47
|
-
// который берет первое срабатывание
|
|
48
|
-
const actionStreams = actionTypes.map((type, index) => source$.pipe(filter((action) => action.type === type), take(1), map((action) =>
|
|
49
|
-
// Сохраняем ассоциацию с индексом, чтобы соответствовать
|
|
50
|
-
// порядку в исходном массиве actionFns
|
|
51
|
-
({ index, action }))));
|
|
52
|
-
// Ждем, пока все потоки выдадут значения, и сортируем результаты
|
|
53
|
-
// по индексу для сохранения порядка
|
|
54
|
-
return combineLatest(actionStreams).pipe(map((results) => {
|
|
55
|
-
// Сортируем по индексу
|
|
56
|
-
results.sort((a, b) => a.index - b.index);
|
|
57
|
-
// Убираем индекс и возвращаем только действия
|
|
58
|
-
return results.map((r) => r.action);
|
|
59
|
-
}));
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Создает Observable с выбранными данными из состояния
|
|
64
|
-
* @param state$ Поток состояния
|
|
65
|
-
* @param selectors Селекторы для выбора частей состояния
|
|
66
|
-
* @returns Observable с массивом выбранных значений
|
|
67
|
-
*/
|
|
68
|
-
export function selectorMap(state$, ...selectors) {
|
|
69
|
-
return state$.pipe(map((state) => {
|
|
70
|
-
return selectors.map((selector) => selector(state));
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Создает именованный объект вместо массива
|
|
75
|
-
* @param state$ Поток состояния
|
|
76
|
-
* @param selectors Объект с селекторами
|
|
77
|
-
* @returns Observable с объектом выбранных значений
|
|
78
|
-
*/
|
|
79
|
-
export function selectorObject(state$, selectors) {
|
|
80
|
-
return state$.pipe(map((state) => {
|
|
81
|
-
const result = {};
|
|
82
|
-
for (const [key, selector] of Object.entries(selectors)) {
|
|
83
|
-
result[key] = selector(state);
|
|
84
|
-
}
|
|
85
|
-
return result;
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Оператор validateMap для валидации данных и условного вызова API
|
|
90
|
-
*/
|
|
91
|
-
export function validateMap({ validator, apiCall, }) {
|
|
92
|
-
return pipe(switchMap((pipeData) => {
|
|
93
|
-
/**
|
|
94
|
-
* Функция вызова API-метода
|
|
95
|
-
*/
|
|
96
|
-
const callApi = () => apiCall(pipeData, {
|
|
97
|
-
chunkRequest: chunkRequestParallel,
|
|
98
|
-
chunkRequestConsistent: chunkRequestConsistent,
|
|
99
|
-
});
|
|
100
|
-
/**
|
|
101
|
-
* Если валидацию не используем - сразу вызываем запрос
|
|
102
|
-
*/
|
|
103
|
-
if (!validator)
|
|
104
|
-
return callApi();
|
|
105
|
-
const validateConfig = validator(pipeData);
|
|
106
|
-
const { conditions, skipAction } = validateConfig;
|
|
107
|
-
const conditionMet = conditions.every(Boolean);
|
|
108
|
-
/**
|
|
109
|
-
* Если валидация не пройдена - вызываем экшн сброса
|
|
110
|
-
*/
|
|
111
|
-
if (!conditionMet) {
|
|
112
|
-
if (Array.isArray(skipAction)) {
|
|
113
|
-
// eslint-disable-next-line no-unsafe-optional-chaining
|
|
114
|
-
return of(...skipAction?.filter(Boolean).map((action) => (typeof action === 'function' ? action() : action)));
|
|
115
|
-
}
|
|
116
|
-
return of(typeof skipAction === 'function' ? skipAction() : skipAction);
|
|
117
|
-
}
|
|
118
|
-
return callApi();
|
|
119
|
-
}));
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Класс для управления эффектами с поддержкой доступа к состоянию и конфигурации
|
|
123
|
-
* Основной класс, который следует использовать
|
|
124
|
-
*/
|
|
125
|
-
export class EffectsModule {
|
|
126
|
-
storage;
|
|
127
|
-
externalStates;
|
|
128
|
-
dispatchers;
|
|
129
|
-
services;
|
|
130
|
-
config;
|
|
131
|
-
effects = [];
|
|
132
|
-
subscriptions = [];
|
|
133
|
-
running = false;
|
|
134
|
-
action$ = new Subject();
|
|
135
|
-
/**
|
|
136
|
-
* Поток состояния
|
|
137
|
-
*/
|
|
138
|
-
state$;
|
|
139
|
-
/**
|
|
140
|
-
* Создает модуль эффектов с доступом к состоянию, внешним состояниям и конфигурации
|
|
141
|
-
* @param storage Хранилище состояния
|
|
142
|
-
* @param externalStates Внешние состояния
|
|
143
|
-
* @param dispatchers Объект с диспетчерами
|
|
144
|
-
* @param services Объект с сервисами
|
|
145
|
-
* @param config Глобальная конфигурация для всех эффектов
|
|
146
|
-
*/
|
|
147
|
-
constructor(storage, externalStates = {}, dispatchers, services = {}, config = {}) {
|
|
148
|
-
this.storage = storage;
|
|
149
|
-
this.externalStates = externalStates;
|
|
150
|
-
this.dispatchers = dispatchers;
|
|
151
|
-
this.services = services;
|
|
152
|
-
this.config = config;
|
|
153
|
-
this.subscribeToDispatchers();
|
|
154
|
-
// Создаем поток состояния
|
|
155
|
-
this.state$ = new Observable((observer) => {
|
|
156
|
-
// Отправляем начальное состояние
|
|
157
|
-
this.storage.getState().then((state) => observer.next(state));
|
|
158
|
-
// Подписываемся на все изменения
|
|
159
|
-
const unsubscribe = this.storage.subscribeToAll(() => {
|
|
160
|
-
this.storage.getState().then((state) => observer.next(state));
|
|
161
|
-
});
|
|
162
|
-
// Отписываемся при завершении
|
|
163
|
-
return () => unsubscribe();
|
|
164
|
-
}).pipe(share());
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Подписывается на действия от всех диспетчеров
|
|
168
|
-
*/
|
|
169
|
-
subscribeToDispatchers() {
|
|
170
|
-
for (const [_, dispatcher] of Object.entries(this.dispatchers)) {
|
|
171
|
-
const subscription = dispatcher.actions.subscribe((action) => {
|
|
172
|
-
this.action$.next(action);
|
|
173
|
-
});
|
|
174
|
-
this.subscriptions.push(subscription);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
add(effect) {
|
|
178
|
-
this.effects.push(effect);
|
|
179
|
-
if (this.running) {
|
|
180
|
-
this.subscribeToEffect(effect);
|
|
181
|
-
}
|
|
182
|
-
return this;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Добавляет несколько эффектов
|
|
186
|
-
* @param effects Эффекты для добавления
|
|
187
|
-
* @returns Текущий модуль
|
|
188
|
-
*/
|
|
189
|
-
addEffects(effects) {
|
|
190
|
-
effects.forEach((effect) => this.add(effect));
|
|
191
|
-
return this;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Запускает все эффекты
|
|
195
|
-
* @returns Текущий модуль
|
|
196
|
-
*/
|
|
197
|
-
start() {
|
|
198
|
-
if (this.running) {
|
|
199
|
-
return this;
|
|
200
|
-
}
|
|
201
|
-
this.effects.forEach((effect) => this.subscribeToEffect(effect));
|
|
202
|
-
this.running = true;
|
|
203
|
-
return this;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Останавливает все эффекты
|
|
207
|
-
* @returns Текущий модуль
|
|
208
|
-
*/
|
|
209
|
-
stop() {
|
|
210
|
-
this.subscriptions.forEach((sub) => sub.unsubscribe());
|
|
211
|
-
this.subscriptions = [];
|
|
212
|
-
this.running = false;
|
|
213
|
-
return this;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Подписывается на конкретный эффект
|
|
217
|
-
* @param effect Эффект для подписки
|
|
218
|
-
*/
|
|
219
|
-
subscribeToEffect(effect) {
|
|
220
|
-
try {
|
|
221
|
-
const output$ = effect(this.action$.asObservable(), this.state$, this.externalStates, this.dispatchers, this.services, this.config).pipe(catchError((err) => {
|
|
222
|
-
console.error('Error in effect:', err);
|
|
223
|
-
return of(null);
|
|
224
|
-
}));
|
|
225
|
-
const subscription = output$.subscribe((result) => {
|
|
226
|
-
if (result === null || result === undefined) {
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
if (typeof result === 'function') {
|
|
230
|
-
try {
|
|
231
|
-
result();
|
|
232
|
-
}
|
|
233
|
-
catch (callError) {
|
|
234
|
-
console.error('Error calling effect result function:', callError);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
this.subscriptions.push(subscription);
|
|
239
|
-
}
|
|
240
|
-
catch (setupError) {
|
|
241
|
-
console.error('Error setting up effect:', setupError);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Вспомогательная функция для создания типизированного эффекта без состояния
|
|
247
|
-
* @deprecated Используйте createEffect вместо этого
|
|
248
|
-
*/
|
|
249
|
-
export function createEffectBase(effect) {
|
|
250
|
-
return effect;
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Вспомогательная функция для создания типизированного эффекта с состоянием и конфигурацией
|
|
254
|
-
*/
|
|
255
|
-
export function createEffect(effect) {
|
|
256
|
-
return effect;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Объединяет несколько эффектов в один
|
|
260
|
-
* @param effects Эффекты для объединения
|
|
261
|
-
* @returns Объединенный эффект
|
|
262
|
-
*/
|
|
263
|
-
export function combineEffects(...effects) {
|
|
264
|
-
return (action$, state$, externalStates, dispatchers, services, config) => {
|
|
265
|
-
const outputs = effects.map((effect) => {
|
|
266
|
-
try {
|
|
267
|
-
return effect(action$, state$, externalStates, dispatchers, services, config);
|
|
268
|
-
}
|
|
269
|
-
catch (error) {
|
|
270
|
-
console.error('Error in one of combined effects:', error);
|
|
271
|
-
return of(null);
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
return merge(...outputs);
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
//# sourceMappingURL=effects.module.js.map
|