@sima-land/isomorph 11.0.0-alpha.28 → 11.0.0-alpha.29

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/isomorph",
3
- "version": "11.0.0-alpha.28",
3
+ "version": "11.0.0-alpha.29",
4
4
  "description": "Tiny framework for fast start frontend microservices",
5
5
  "author": "www.sima-land.ru team",
6
6
  "license": "Apache-2.0",
@@ -0,0 +1,3 @@
1
+ import { Status, RemoteDataState, STATUS, RemoteData, createRemoteDataReducers } from './remote-data';
2
+ export type { Status, RemoteDataState };
3
+ export { STATUS, RemoteData, createRemoteDataReducers };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRemoteDataReducers = exports.RemoteData = exports.STATUS = void 0;
4
+ const remote_data_1 = require("./remote-data");
5
+ Object.defineProperty(exports, "STATUS", { enumerable: true, get: function () { return remote_data_1.STATUS; } });
6
+ Object.defineProperty(exports, "RemoteData", { enumerable: true, get: function () { return remote_data_1.RemoteData; } });
7
+ Object.defineProperty(exports, "createRemoteDataReducers", { enumerable: true, get: function () { return remote_data_1.createRemoteDataReducers; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/redux/index.ts"],"names":[],"mappings":";;;AAAA,+CAMuB;AAGd,uFANP,oBAAM,OAMO;AAAE,2FALf,wBAAU,OAKe;AAAE,yGAJ3B,sCAAwB,OAI2B"}
@@ -1,4 +1,9 @@
1
- import type { PayloadAction, Draft } from '@reduxjs/toolkit';
1
+ import { ActionReducerMapBuilder, Draft, PayloadAction, PayloadActionCreator } from '@reduxjs/toolkit';
2
+ interface RemoteDataActions<TData, TError = unknown, TPayload = void> {
3
+ request: PayloadActionCreator<TPayload, string>;
4
+ success: PayloadActionCreator<TData, string>;
5
+ failure: PayloadActionCreator<TError, string>;
6
+ }
2
7
  /**
3
8
  * Статус загрузки данных.
4
9
  */
@@ -7,16 +12,79 @@ export type Status = 'initial' | 'fetching' | 'success' | 'failure';
7
12
  * Базовая структура хранилища удаленных данных.
8
13
  */
9
14
  export interface RemoteDataState<TData, TError> {
10
- data: TData;
11
- error: TError;
12
- status: Status;
15
+ /** Загружаемые данные. */
16
+ readonly data: TData;
17
+ /** Данные ошибки запроса. */
18
+ readonly error: TError;
19
+ /** Статус загрузки данных. */
20
+ readonly status: Status;
21
+ /** Количество запросов. */
22
+ readonly fetchCount?: number;
13
23
  }
14
24
  /**
15
25
  * Возможные статусы загрузки данных.
16
26
  */
17
27
  export declare const STATUS: Record<Status, Status>;
28
+ /** Работа с удаленными данными. */
29
+ export declare abstract class RemoteData {
30
+ static get STATUS(): Record<Status, Status>;
31
+ /**
32
+ * Возвращает action'ы для работы с удаленными данными.
33
+ * @param name Префикс имён.
34
+ * @return Набор.
35
+ */
36
+ static createActions<TData = never, TError = never, TPayload = void>(name: string): RemoteDataActions<TData, TError, TPayload>;
37
+ /**
38
+ * Возвращает набор обработчиков для работы с удаленными данными.
39
+ * @return Набор.
40
+ */
41
+ static createHandlers<TData, TError, S extends RemoteDataState<TData, TError> = RemoteDataState<TData, TError>>(): {
42
+ readonly request: (state: S | Draft<S>) => S | Draft<S>;
43
+ readonly success: (state: S | Draft<S>, action: PayloadAction<TData>) => S | Draft<S>;
44
+ readonly failure: (state: S | Draft<S>, action: PayloadAction<TError>) => S | Draft<S>;
45
+ };
46
+ /**
47
+ * Применяет обработчики для работы с удаленными данными.
48
+ * @param actions Набор action'ов.
49
+ * @param builder Builder.
50
+ */
51
+ static applyHandlers<TData, TError>(actions: RemoteDataActions<TData, TError, any | never>, builder: Pick<ActionReducerMapBuilder<RemoteDataState<TData, TError>>, 'addCase'>): void;
52
+ /**
53
+ * Возвращает новый набор селекторов данных.
54
+ * @param selectRoot Функция получения состояния.
55
+ * @return Набор селекторов.
56
+ */
57
+ static createSelectors<S extends RemoteDataState<unknown, unknown>>(selectRoot: (...args: any[]) => S): {
58
+ readonly isInitial: ((state: any) => boolean) & import("reselect").OutputSelectorFields<(args_0: S) => boolean & {
59
+ clearCache: () => void;
60
+ }> & {
61
+ clearCache: () => void;
62
+ };
63
+ readonly isFetching: ((state: any) => boolean) & import("reselect").OutputSelectorFields<(args_0: S) => boolean & {
64
+ clearCache: () => void;
65
+ }> & {
66
+ clearCache: () => void;
67
+ };
68
+ readonly isSuccess: ((state: any) => boolean) & import("reselect").OutputSelectorFields<(args_0: S) => boolean & {
69
+ clearCache: () => void;
70
+ }> & {
71
+ clearCache: () => void;
72
+ };
73
+ readonly isFailed: ((state: any) => boolean) & import("reselect").OutputSelectorFields<(args_0: S) => boolean & {
74
+ clearCache: () => void;
75
+ }> & {
76
+ clearCache: () => void;
77
+ };
78
+ readonly wasFetched: ((state: any) => boolean) & import("reselect").OutputSelectorFields<(args_0: S) => boolean & {
79
+ clearCache: () => void;
80
+ }> & {
81
+ clearCache: () => void;
82
+ };
83
+ };
84
+ }
18
85
  /**
19
86
  * Возвращает набор обработчиков для работы с удаленными данными.
87
+ * @deprecated Теперь нужно использовать RemoteData.createHandlers.
20
88
  * @return Набор.
21
89
  */
22
90
  export declare const createRemoteDataReducers: <S extends RemoteDataState<any, any>>() => {
@@ -30,3 +98,4 @@ export declare const createRemoteDataReducers: <S extends RemoteDataState<any, a
30
98
  type: string;
31
99
  }) => void;
32
100
  };
101
+ export {};
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRemoteDataReducers = exports.STATUS = void 0;
3
+ exports.createRemoteDataReducers = exports.RemoteData = exports.STATUS = void 0;
4
+ /* eslint-disable require-jsdoc */
5
+ const toolkit_1 = require("@reduxjs/toolkit");
4
6
  /**
5
7
  * Возможные статусы загрузки данных.
6
8
  */
@@ -10,8 +12,85 @@ exports.STATUS = {
10
12
  success: 'success',
11
13
  failure: 'failure',
12
14
  };
15
+ /** Работа с удаленными данными. */
16
+ class RemoteData {
17
+ static get STATUS() {
18
+ return exports.STATUS;
19
+ }
20
+ /**
21
+ * Возвращает action'ы для работы с удаленными данными.
22
+ * @param name Префикс имён.
23
+ * @return Набор.
24
+ */
25
+ static createActions(name) {
26
+ return {
27
+ request: (0, toolkit_1.createAction)(`${name}/request`),
28
+ success: (0, toolkit_1.createAction)(`${name}/success`),
29
+ failure: (0, toolkit_1.createAction)(`${name}/failure`),
30
+ };
31
+ }
32
+ /**
33
+ * Возвращает набор обработчиков для работы с удаленными данными.
34
+ * @return Набор.
35
+ */
36
+ static createHandlers() {
37
+ // ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.
38
+ return {
39
+ request(state) {
40
+ return {
41
+ ...state,
42
+ status: exports.STATUS.fetching,
43
+ };
44
+ },
45
+ success(state, action) {
46
+ return {
47
+ ...state,
48
+ data: action.payload,
49
+ status: exports.STATUS.success,
50
+ fetchCount: (state.fetchCount ?? 0) + 1,
51
+ };
52
+ },
53
+ failure(state, action) {
54
+ return {
55
+ ...state,
56
+ error: action.payload,
57
+ status: exports.STATUS.failure,
58
+ fetchCount: (state.fetchCount ?? 0) + 1,
59
+ };
60
+ },
61
+ };
62
+ }
63
+ /**
64
+ * Применяет обработчики для работы с удаленными данными.
65
+ * @param actions Набор action'ов.
66
+ * @param builder Builder.
67
+ */
68
+ static applyHandlers(actions, builder) {
69
+ const handlers = RemoteData.createHandlers();
70
+ // @todo разобраться с проблемой когда убираешь ".type"
71
+ builder.addCase(actions.request.type, handlers.request);
72
+ builder.addCase(actions.success.type, handlers.success);
73
+ builder.addCase(actions.failure.type, handlers.failure);
74
+ }
75
+ /**
76
+ * Возвращает новый набор селекторов данных.
77
+ * @param selectRoot Функция получения состояния.
78
+ * @return Набор селекторов.
79
+ */
80
+ static createSelectors(selectRoot) {
81
+ return {
82
+ isInitial: (0, toolkit_1.createSelector)(selectRoot, state => state.status === 'initial'),
83
+ isFetching: (0, toolkit_1.createSelector)(selectRoot, state => state.status === 'fetching'),
84
+ isSuccess: (0, toolkit_1.createSelector)(selectRoot, state => state.status === 'success'),
85
+ isFailed: (0, toolkit_1.createSelector)(selectRoot, state => state.status === 'failure'),
86
+ wasFetched: (0, toolkit_1.createSelector)(selectRoot, state => (state.fetchCount ?? 0) > 0),
87
+ };
88
+ }
89
+ }
90
+ exports.RemoteData = RemoteData;
13
91
  /**
14
92
  * Возвращает набор обработчиков для работы с удаленными данными.
93
+ * @deprecated Теперь нужно использовать RemoteData.createHandlers.
15
94
  * @return Набор.
16
95
  */
17
96
  const createRemoteDataReducers = () => ({
@@ -1 +1 @@
1
- {"version":3,"file":"remote-data.js","sourceRoot":"","sources":["../../../src/utils/redux/remote-data.ts"],"names":[],"mappings":";;;AAgBA;;GAEG;AACU,QAAA,MAAM,GAA2B;IAC5C,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;;GAGG;AACI,MAAM,wBAAwB,GAAG,GAAwC,EAAE,CAAC,CAAC;IAClF,OAAO,EAAE,CAAC,KAAe,EAAE,EAAE;QAC3B,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,QAAQ,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,MAAgC,EAAE,EAAE;QAC7D,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;QAC5B,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,MAAiC,EAAE,EAAE;QAC9D,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,OAAO,CAAC;IAChC,CAAC;CACF,CAAC,CAAC;AAZU,QAAA,wBAAwB,4BAYlC"}
1
+ {"version":3,"file":"remote-data.js","sourceRoot":"","sources":["../../../src/utils/redux/remote-data.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAClC,8CAO0B;AA8B1B;;GAEG;AACU,QAAA,MAAM,GAA2B;IAC5C,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,mCAAmC;AACnC,MAAsB,UAAU;IAC9B,MAAM,KAAK,MAAM;QACf,OAAO,cAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,IAAY;QAEZ,OAAO;YACL,OAAO,EAAE,IAAA,sBAAY,EAAW,GAAG,IAAI,UAAU,CAAC;YAClD,OAAO,EAAE,IAAA,sBAAY,EAAQ,GAAG,IAAI,UAAU,CAAC;YAC/C,OAAO,EAAE,IAAA,sBAAY,EAAS,GAAG,IAAI,UAAU,CAAC;SACxC,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc;QAKnB,8FAA8F;QAC9F,OAAO;YACL,OAAO,CAAC,KAAmB;gBACzB,OAAO;oBACL,GAAG,KAAK;oBACR,MAAM,EAAE,cAAM,CAAC,QAAQ;iBACxB,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,KAAmB,EAAE,MAA4B;gBACvD,OAAO;oBACL,GAAG,KAAK;oBACR,IAAI,EAAE,MAAM,CAAC,OAAO;oBACpB,MAAM,EAAE,cAAM,CAAC,OAAO;oBACtB,UAAU,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC;iBACxC,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,KAAmB,EAAE,MAA6B;gBACxD,OAAO;oBACL,GAAG,KAAK;oBACR,KAAK,EAAE,MAAM,CAAC,OAAO;oBACrB,MAAM,EAAE,cAAM,CAAC,OAAO;oBACtB,UAAU,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC;iBACxC,CAAC;YACJ,CAAC;SACO,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,OAAsD,EACtD,OAAiF;QAEjF,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,EAAiB,CAAC;QAE5D,uDAAuD;QACvD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CACpB,UAAiC;QAEjC,OAAO;YACL,SAAS,EAAE,IAAA,wBAAc,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;YAC1E,UAAU,EAAE,IAAA,wBAAc,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC;YAC5E,SAAS,EAAE,IAAA,wBAAc,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;YAC1E,QAAQ,EAAE,IAAA,wBAAc,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;YACzE,UAAU,EAAE,IAAA,wBAAc,EAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACpE,CAAC;IACb,CAAC;CACF;AA3FD,gCA2FC;AAED;;;;GAIG;AACI,MAAM,wBAAwB,GAAG,GAAwC,EAAE,CAAC,CAAC;IAClF,OAAO,EAAE,CAAC,KAAe,EAAE,EAAE;QAC3B,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,QAAQ,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,MAAgC,EAAE,EAAE;QAC7D,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;QAC5B,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,MAAiC,EAAE,EAAE;QAC9D,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,OAAO,CAAC;IAChC,CAAC;CACF,CAAC,CAAC;AAZU,QAAA,wBAAwB,4BAYlC"}