@sima-land/isomorph 11.0.0-alpha.3 → 11.0.0-alpha.31

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.
Files changed (216) hide show
  1. package/cache/types.d.ts +24 -2
  2. package/config/{index.d.ts → base.d.ts} +2 -2
  3. package/config/{index.js → base.js} +3 -3
  4. package/config/base.js.map +1 -0
  5. package/config/browser.d.ts +1 -1
  6. package/config/browser.js +11 -2
  7. package/config/browser.js.map +1 -1
  8. package/config/node.d.ts +1 -1
  9. package/config/node.js +17 -6
  10. package/config/node.js.map +1 -1
  11. package/config/types.d.ts +8 -1
  12. package/di/application.d.ts +10 -0
  13. package/{container → di}/application.js +29 -8
  14. package/di/application.js.map +1 -0
  15. package/di/container.d.ts +6 -0
  16. package/di/container.js +52 -0
  17. package/di/container.js.map +1 -0
  18. package/di/errors.d.ts +32 -0
  19. package/di/errors.js +48 -0
  20. package/di/errors.js.map +1 -0
  21. package/di/index.d.ts +6 -0
  22. package/di/index.js +17 -0
  23. package/di/index.js.map +1 -0
  24. package/di/preset.d.ts +9 -0
  25. package/di/preset.js +31 -0
  26. package/di/preset.js.map +1 -0
  27. package/di/token.d.ts +7 -0
  28. package/di/token.js +39 -0
  29. package/di/token.js.map +1 -0
  30. package/di/types.d.ts +88 -0
  31. package/{container → di}/types.js +0 -0
  32. package/{logger → di}/types.js.map +1 -1
  33. package/error-tracking/index.d.ts +25 -0
  34. package/error-tracking/index.js +34 -0
  35. package/error-tracking/index.js.map +1 -0
  36. package/error-tracking/types.d.ts +20 -0
  37. package/{error-tracker → error-tracking}/types.js +0 -0
  38. package/{container → error-tracking}/types.js.map +1 -1
  39. package/http-client/middleware/cookie.d.ts +1 -0
  40. package/http-client/middleware/cookie.js +5 -3
  41. package/http-client/middleware/cookie.js.map +1 -1
  42. package/http-client/middleware/headers.d.ts +13 -0
  43. package/http-client/middleware/headers.js +25 -0
  44. package/http-client/middleware/headers.js.map +1 -0
  45. package/http-client/middleware/log.d.ts +27 -0
  46. package/http-client/middleware/log.js +26 -0
  47. package/http-client/middleware/log.js.map +1 -0
  48. package/http-client/middleware/tracing.d.ts +3 -3
  49. package/http-client/middleware/tracing.js +22 -9
  50. package/http-client/middleware/tracing.js.map +1 -1
  51. package/http-client/sauce/index.d.ts +20 -5
  52. package/http-client/sauce/index.js +38 -21
  53. package/http-client/sauce/index.js.map +1 -1
  54. package/http-client/types.d.ts +1 -1
  55. package/http-client/utils.d.ts +14 -7
  56. package/http-client/utils.js +43 -12
  57. package/http-client/utils.js.map +1 -1
  58. package/http-server/errors.d.ts +11 -0
  59. package/http-server/errors.js +18 -0
  60. package/http-server/errors.js.map +1 -0
  61. package/http-server/handler/health-check.d.ts +1 -1
  62. package/http-server/handler/health-check.js +1 -1
  63. package/http-server/middleware/{logging.d.ts → log.d.ts} +2 -2
  64. package/http-server/middleware/log.js +43 -0
  65. package/http-server/middleware/log.js.map +1 -0
  66. package/http-server/middleware/metrics.js +2 -2
  67. package/http-server/middleware/metrics.js.map +1 -1
  68. package/http-server/middleware/tracing.d.ts +7 -1
  69. package/http-server/middleware/tracing.js +20 -2
  70. package/http-server/middleware/tracing.js.map +1 -1
  71. package/http-server/template/index.js +11 -6
  72. package/http-server/template/index.js.map +1 -1
  73. package/http-server/types.d.ts +2 -0
  74. package/http-server/utils.d.ts +14 -5
  75. package/http-server/utils.js +46 -21
  76. package/http-server/utils.js.map +1 -1
  77. package/log/handler/pino.d.ts +8 -0
  78. package/log/handler/pino.js +29 -0
  79. package/log/handler/pino.js.map +1 -0
  80. package/log/handler/sentry.d.ts +8 -0
  81. package/log/handler/sentry.js +50 -0
  82. package/log/handler/sentry.js.map +1 -0
  83. package/log/index.d.ts +2 -0
  84. package/log/index.js +6 -0
  85. package/log/index.js.map +1 -0
  86. package/{logger/index.d.ts → log/logger.d.ts} +0 -0
  87. package/{logger/index.js → log/logger.js} +1 -1
  88. package/log/logger.js.map +1 -0
  89. package/log/types.d.ts +41 -0
  90. package/{logger → log}/types.js +0 -0
  91. package/{preset → log}/types.js.map +1 -1
  92. package/metrics/constants.d.ts +3 -0
  93. package/metrics/constants.js +3 -0
  94. package/metrics/constants.js.map +1 -1
  95. package/metrics/node.d.ts +7 -0
  96. package/metrics/node.js +1 -0
  97. package/metrics/node.js.map +1 -1
  98. package/package.json +35 -30
  99. package/preset/browser/index.d.ts +10 -0
  100. package/preset/browser/index.js +71 -0
  101. package/preset/browser/index.js.map +1 -0
  102. package/preset/node/index.d.ts +16 -11
  103. package/preset/node/index.js +105 -61
  104. package/preset/node/index.js.map +1 -1
  105. package/preset/node/response.d.ts +12 -8
  106. package/preset/node/response.js +98 -28
  107. package/preset/node/response.js.map +1 -1
  108. package/preset/parts/providers.d.ts +7 -0
  109. package/preset/parts/providers.js +26 -0
  110. package/preset/parts/providers.js.map +1 -0
  111. package/preset/parts/types.d.ts +8 -0
  112. package/preset/{types.js → parts/types.js} +0 -0
  113. package/{error-tracker → preset/parts}/types.js.map +1 -1
  114. package/preset/parts/utils.d.ts +110 -0
  115. package/preset/parts/utils.js +261 -0
  116. package/preset/parts/utils.js.map +1 -0
  117. package/tokens.d.ts +39 -21
  118. package/tokens.js +35 -20
  119. package/tokens.js.map +1 -1
  120. package/tracing/index.d.ts +10 -0
  121. package/tracing/index.js +21 -0
  122. package/tracing/index.js.map +1 -0
  123. package/utils/browser/analytics/data-layer.d.ts +2 -2
  124. package/utils/browser/analytics/data-layer.js +4 -5
  125. package/utils/browser/analytics/data-layer.js.map +1 -1
  126. package/utils/browser/analytics/oko.d.ts +3 -2
  127. package/utils/browser/analytics/oko.js +2 -1
  128. package/utils/browser/analytics/oko.js.map +1 -1
  129. package/utils/browser/storage/index.d.ts +8 -0
  130. package/utils/browser/storage/index.js +6 -1
  131. package/utils/browser/storage/index.js.map +1 -1
  132. package/utils/function.d.ts +28 -0
  133. package/utils/function.js +23 -0
  134. package/utils/function.js.map +1 -0
  135. package/utils/react/error-handlers/index.d.ts +11 -8
  136. package/utils/react/error-handlers/index.js +8 -10
  137. package/utils/react/error-handlers/index.js.map +1 -1
  138. package/utils/redux/index.d.ts +3 -0
  139. package/utils/redux/index.js +8 -0
  140. package/utils/redux/index.js.map +1 -0
  141. package/utils/redux/remote-data.d.ts +83 -5
  142. package/utils/redux/remote-data.js +83 -1
  143. package/utils/redux/remote-data.js.map +1 -1
  144. package/utils/redux-saga/index.d.ts +3 -0
  145. package/utils/redux-saga/index.js +8 -0
  146. package/utils/redux-saga/index.js.map +1 -0
  147. package/utils/redux-saga/middleware.d.ts +8 -0
  148. package/utils/redux-saga/middleware.js +143 -0
  149. package/utils/redux-saga/middleware.js.map +1 -0
  150. package/utils/redux-saga/take-chain.d.ts +2 -0
  151. package/utils/redux-saga/take-chain.js +2 -0
  152. package/utils/redux-saga/take-chain.js.map +1 -1
  153. package/utils/redux-saga/types.d.ts +36 -0
  154. package/{saga-runner → utils/redux-saga}/types.js +0 -0
  155. package/utils/redux-saga/types.js.map +1 -0
  156. package/utils/ssr/index.d.ts +41 -0
  157. package/utils/ssr/index.js +54 -0
  158. package/utils/ssr/index.js.map +1 -0
  159. package/utils/webpack/env/index.d.ts +18 -0
  160. package/utils/webpack/env/index.js +76 -0
  161. package/utils/webpack/env/index.js.map +1 -0
  162. package/utils/webpack/env/types.d.ts +11 -0
  163. package/utils/webpack/env/types.js +3 -0
  164. package/utils/webpack/env/types.js.map +1 -0
  165. package/utils/webpack/env/utils.d.ts +15 -0
  166. package/utils/webpack/env/utils.js +52 -0
  167. package/utils/webpack/env/utils.js.map +1 -0
  168. package/utils/webpack/index.d.ts +6 -0
  169. package/utils/webpack/index.js +8 -0
  170. package/utils/webpack/index.js.map +1 -0
  171. package/utils/webpack/module-federation/index.d.ts +7 -1
  172. package/utils/webpack/module-federation/index.js +11 -4
  173. package/utils/webpack/module-federation/index.js.map +1 -1
  174. package/utils/webpack/module-federation/types.d.ts +11 -3
  175. package/utils/webpack/module-federation/utils.d.ts +6 -0
  176. package/utils/webpack/module-federation/utils.js +73 -17
  177. package/utils/webpack/module-federation/utils.js.map +1 -1
  178. package/config/index.js.map +0 -1
  179. package/config/utils.d.ts +0 -5
  180. package/config/utils.js +0 -12
  181. package/config/utils.js.map +0 -1
  182. package/container/application.d.ts +0 -25
  183. package/container/application.js.map +0 -1
  184. package/container/index.d.ts +0 -18
  185. package/container/index.js +0 -74
  186. package/container/index.js.map +0 -1
  187. package/container/types.d.ts +0 -14
  188. package/error-tracker/browser.d.ts +0 -8
  189. package/error-tracker/browser.js +0 -40
  190. package/error-tracker/browser.js.map +0 -1
  191. package/error-tracker/node.d.ts +0 -8
  192. package/error-tracker/node.js +0 -40
  193. package/error-tracker/node.js.map +0 -1
  194. package/error-tracker/types.d.ts +0 -18
  195. package/error-tracker/utils.d.ts +0 -12
  196. package/error-tracker/utils.js +0 -19
  197. package/error-tracker/utils.js.map +0 -1
  198. package/http-server/middleware/logging.js +0 -31
  199. package/http-server/middleware/logging.js.map +0 -1
  200. package/logger/handler/console.d.ts +0 -8
  201. package/logger/handler/console.js +0 -36
  202. package/logger/handler/console.js.map +0 -1
  203. package/logger/handler/sentry.d.ts +0 -8
  204. package/logger/handler/sentry.js +0 -36
  205. package/logger/handler/sentry.js.map +0 -1
  206. package/logger/index.js.map +0 -1
  207. package/logger/types.d.ts +0 -24
  208. package/preset/index.d.ts +0 -7
  209. package/preset/index.js +0 -25
  210. package/preset/index.js.map +0 -1
  211. package/preset/types.d.ts +0 -7
  212. package/saga-runner/index.d.ts +0 -8
  213. package/saga-runner/index.js +0 -79
  214. package/saga-runner/index.js.map +0 -1
  215. package/saga-runner/types.d.ts +0 -10
  216. package/saga-runner/types.js.map +0 -1
@@ -1,14 +1,96 @@
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");
6
+ /**
7
+ * Возможные статусы загрузки данных.
8
+ */
4
9
  exports.STATUS = {
5
10
  initial: 'initial',
6
11
  fetching: 'fetching',
7
12
  success: 'success',
8
13
  failure: 'failure',
9
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;
10
91
  /**
11
92
  * Возвращает набор обработчиков для работы с удаленными данными.
93
+ * @deprecated Теперь нужно использовать RemoteData.createHandlers.
12
94
  * @return Набор.
13
95
  */
14
96
  const createRemoteDataReducers = () => ({
@@ -1 +1 @@
1
- {"version":3,"file":"remote-data.js","sourceRoot":"","sources":["../../../src/utils/redux/remote-data.ts"],"names":[],"mappings":";;;AAUa,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":"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"}
@@ -0,0 +1,3 @@
1
+ export type { SagaExtendedMiddleware, SagaMiddlewareHandler } from './types';
2
+ export { takeChain } from './take-chain';
3
+ export { createSagaMiddleware } from './middleware';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSagaMiddleware = exports.takeChain = void 0;
4
+ var take_chain_1 = require("./take-chain");
5
+ Object.defineProperty(exports, "takeChain", { enumerable: true, get: function () { return take_chain_1.takeChain; } });
6
+ var middleware_1 = require("./middleware");
7
+ Object.defineProperty(exports, "createSagaMiddleware", { enumerable: true, get: function () { return middleware_1.createSagaMiddleware; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/redux-saga/index.ts"],"names":[],"mappings":";;;AACA,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,2CAAoD;AAA3C,kHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,8 @@
1
+ import { SagaExtendedMiddleware, SagaMiddlewareHandler } from './types';
2
+ /**
3
+ * Возвращает расширенную версию SagaMiddleware.
4
+ * @param handler Обработчик событий.
5
+ * @return Middleware.
6
+ */
7
+ declare function createSagaExtendedMiddleware(handler: SagaMiddlewareHandler): SagaExtendedMiddleware;
8
+ export { createSagaExtendedMiddleware as createSagaMiddleware };
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.createSagaMiddleware = void 0;
27
+ const redux_saga_1 = __importStar(require("redux-saga"));
28
+ const effects_1 = require("redux-saga/effects");
29
+ /**
30
+ * Возвращает расширенную версию SagaMiddleware.
31
+ * @param handler Обработчик событий.
32
+ * @return Middleware.
33
+ */
34
+ function createSagaExtendedMiddleware(handler) {
35
+ return new MiddlewareControl(handler).toMiddleware();
36
+ }
37
+ exports.createSagaMiddleware = createSagaExtendedMiddleware;
38
+ class MiddlewareControl {
39
+ constructor(handler) {
40
+ this.handler = handler;
41
+ this.sagaMiddleware = (0, redux_saga_1.default)({
42
+ onError: (error, info) => {
43
+ handler.onSagaError(error, info);
44
+ },
45
+ });
46
+ }
47
+ toMiddleware() {
48
+ const middleware = api => {
49
+ this.api = api;
50
+ return this.sagaMiddleware(api);
51
+ };
52
+ middleware.timeout = (milliseconds, config) => {
53
+ this.configInterrupt(milliseconds, config);
54
+ return middleware;
55
+ };
56
+ middleware.run = async (saga, ...args) => {
57
+ await this.run(saga, ...args);
58
+ };
59
+ return middleware;
60
+ }
61
+ configInterrupt(milliseconds, config) {
62
+ this.interruptTimeout = milliseconds;
63
+ this.interruptStrategy = config?.strategy ?? 'cancel-task';
64
+ }
65
+ async run(saga, ...args) {
66
+ const { interruptTimeout } = this;
67
+ if (typeof interruptTimeout === 'number' && Number.isFinite(interruptTimeout)) {
68
+ switch (this.interruptStrategy) {
69
+ case 'cancel-task':
70
+ await this.runWithBreakTask({ saga, args, timeout: interruptTimeout });
71
+ return;
72
+ case 'dispatch-end':
73
+ await this.runWithBreakMiddleware({ saga, args, timeout: interruptTimeout });
74
+ return;
75
+ }
76
+ }
77
+ await this.sagaMiddleware.run(saga, ...args).toPromise();
78
+ }
79
+ async runWithBreakTask(data) {
80
+ try {
81
+ await this.sagaMiddleware.run(runWithTimeLimit, data).toPromise();
82
+ }
83
+ catch (error) {
84
+ if (error instanceof TimeoutInterruptError) {
85
+ this.handler.onTimeoutInterrupt({ timeout: data.timeout });
86
+ }
87
+ else {
88
+ throw error;
89
+ }
90
+ }
91
+ }
92
+ async runWithBreakMiddleware(data) {
93
+ const { saga, args, timeout } = data;
94
+ const { api } = this;
95
+ if (!api) {
96
+ const error = new Error('Middleware is not applied to the store');
97
+ this.handler.onConfigError(error);
98
+ throw error;
99
+ }
100
+ const promises = [];
101
+ let ready = false;
102
+ let timerId;
103
+ promises.push(this.sagaMiddleware
104
+ .run(saga, ...args)
105
+ .toPromise()
106
+ .then(() => {
107
+ ready = true;
108
+ })
109
+ .finally(() => {
110
+ // вне зависимости от результата отключаем таймер если он есть
111
+ timerId !== undefined && clearTimeout(timerId);
112
+ }));
113
+ promises.push(new Promise(resolve => {
114
+ timerId = setTimeout(() => {
115
+ if (!ready) {
116
+ this.handler.onTimeoutInterrupt({ timeout });
117
+ api.dispatch(redux_saga_1.END);
118
+ }
119
+ resolve();
120
+ }, timeout);
121
+ }));
122
+ await Promise.race(promises);
123
+ }
124
+ }
125
+ function* runWithTimeLimit(data) {
126
+ const { saga, args, timeout } = data;
127
+ const task = yield (0, effects_1.fork)(saga, ...args);
128
+ const [isTimeout, taskResult] = yield (0, effects_1.race)([
129
+ (0, effects_1.delay)(timeout, true),
130
+ (0, effects_1.call)(() => task.toPromise()),
131
+ ]);
132
+ if (isTimeout) {
133
+ yield (0, effects_1.cancel)(task);
134
+ throw new TimeoutInterruptError();
135
+ }
136
+ return taskResult;
137
+ }
138
+ class TimeoutInterruptError extends Error {
139
+ constructor() {
140
+ super('Saga was cancelled by timeout');
141
+ }
142
+ }
143
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/utils/redux-saga/middleware.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { Action } from '@reduxjs/toolkit';
10
10
  export declare function takeChain<Deps extends any[], Task extends (...someArgs: [...Deps, Action[]]) => any>(timeout: number, types: string[], task: Task, ...deps: Deps): import("redux-saga/effects").ForkEffect<unknown>;
11
11
  /**
12
12
  * Генерирует эффект по таймауту.
13
+ * @internal
13
14
  * @param timeout Время задержки в мс.
14
15
  * @param types Массив с типами ожидаемых экшенов.
15
16
  * @param task Генератор.
@@ -18,6 +19,7 @@ export declare function takeChain<Deps extends any[], Task extends (...someArgs:
18
19
  export declare function generateTakeChain<Deps extends any[], Task extends (...someArgs: [...Deps, Action[]]) => any>(timeout: number, types: string[], task: Task, deps: Deps): Generator<any, void, any>;
19
20
  /**
20
21
  * Вызывает экшен с заданной задержкой.
22
+ * @internal
21
23
  * @param timeout Время задержки в мс.
22
24
  * @param action Тип экшена.
23
25
  */
@@ -16,6 +16,7 @@ function takeChain(timeout, types, task, ...deps) {
16
16
  exports.takeChain = takeChain;
17
17
  /**
18
18
  * Генерирует эффект по таймауту.
19
+ * @internal
19
20
  * @param timeout Время задержки в мс.
20
21
  * @param types Массив с типами ожидаемых экшенов.
21
22
  * @param task Генератор.
@@ -45,6 +46,7 @@ function* generateTakeChain(timeout, types, task, deps) {
45
46
  exports.generateTakeChain = generateTakeChain;
46
47
  /**
47
48
  * Вызывает экшен с заданной задержкой.
49
+ * @internal
48
50
  * @param timeout Время задержки в мс.
49
51
  * @param action Тип экшена.
50
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"take-chain.js","sourceRoot":"","sources":["../../../src/utils/redux-saga/take-chain.ts"],"names":[],"mappings":";;;AACA,gDAAkE;AAElE;;;;;;;GAOG;AACH,SAAgB,SAAS,CAGvB,OAAe,EAAE,KAAe,EAAE,IAAU,EAAE,GAAG,IAAU;IAC3D,OAAO,IAAA,cAAI,EAAC,iBAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC;AALD,8BAKC;AAED;;;;;;GAMG;AACH,QAAe,CAAC,CAAC,iBAAiB,CAGhC,OAAe,EAAE,KAAe,EAAE,IAAU,EAAE,IAAU;IACxD,OAAO,IAAI,EAAE;QACX,MAAM,WAAW,GAAW,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAW,MAAM,IAAA,cAAI,EAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC;QAEvC,MAAM,IAAA,cAAI,EAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAE7C,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,cAAI,EAAC;gBACtC,MAAM,EAAE,IAAA,cAAI,EAAC,KAAK,CAAC;gBACnB,QAAQ,EAAE,IAAA,cAAI,EAAC,WAAW,CAAC,IAAI,CAAC;aACjC,CAAC,CAAC;YAEH,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,IACE,QAAQ;gBACR,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAClF;gBACA,wBAAwB;gBACxB,MAAM,IAAA,cAAI,EAAC,IAAW,EAAE,GAAG,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnD,MAAM;aACP;SACF;KACF;AACH,CAAC;AA7BD,8CA6BC;AAED;;;;GAIG;AACH,QAAe,CAAC,CAAC,UAAU,CAAC,OAAe,EAAE,MAAc;IACzD,MAAM,IAAA,eAAK,EAAC,OAAO,CAAC,CAAC;IACrB,MAAM,IAAA,aAAG,EAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAHD,gCAGC"}
1
+ {"version":3,"file":"take-chain.js","sourceRoot":"","sources":["../../../src/utils/redux-saga/take-chain.ts"],"names":[],"mappings":";;;AACA,gDAAkE;AAElE;;;;;;;GAOG;AACH,SAAgB,SAAS,CAGvB,OAAe,EAAE,KAAe,EAAE,IAAU,EAAE,GAAG,IAAU;IAC3D,OAAO,IAAA,cAAI,EAAC,iBAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC;AALD,8BAKC;AAED;;;;;;;GAOG;AACH,QAAe,CAAC,CAAC,iBAAiB,CAGhC,OAAe,EAAE,KAAe,EAAE,IAAU,EAAE,IAAU;IACxD,OAAO,IAAI,EAAE;QACX,MAAM,WAAW,GAAW,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAW,MAAM,IAAA,cAAI,EAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,CAAC,WAAW,CAAC,CAAC;QAEvC,MAAM,IAAA,cAAI,EAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAE7C,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,cAAI,EAAC;gBACtC,MAAM,EAAE,IAAA,cAAI,EAAC,KAAK,CAAC;gBACnB,QAAQ,EAAE,IAAA,cAAI,EAAC,WAAW,CAAC,IAAI,CAAC;aACjC,CAAC,CAAC;YAEH,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,IACE,QAAQ;gBACR,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAClF;gBACA,wBAAwB;gBACxB,MAAM,IAAA,cAAI,EAAC,IAAW,EAAE,GAAG,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnD,MAAM;aACP;SACF;KACF;AACH,CAAC;AA7BD,8CA6BC;AAED;;;;;GAKG;AACH,QAAe,CAAC,CAAC,UAAU,CAAC,OAAe,EAAE,MAAc;IACzD,MAAM,IAAA,eAAK,EAAC,OAAO,CAAC,CAAC;IACrB,MAAM,IAAA,aAAG,EAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAHD,gCAGC"}
@@ -0,0 +1,36 @@
1
+ import type { Middleware } from '@reduxjs/toolkit';
2
+ import type { Saga, SagaMiddlewareOptions } from 'redux-saga';
3
+ /** Опции остановки redux-saga. */
4
+ export interface SagaInterruptConfig {
5
+ strategy?: 'dispatch-end' | 'cancel-task';
6
+ }
7
+ /** Информация, которая приходит вторым аргументом в обработчик ошибки SagaMiddleware. */
8
+ export type SagaErrorInfo = Parameters<Required<SagaMiddlewareOptions>['onError']>[1];
9
+ /** Информация об остановке redux-saga. */
10
+ export interface SagaInterruptInfo {
11
+ timeout: number;
12
+ }
13
+ /** Опции запуска redux-saga с остановкой по таймауту. */
14
+ export interface SagaTimeoutRunData<S extends Saga> {
15
+ saga: S;
16
+ args: Parameters<S>;
17
+ timeout: number;
18
+ }
19
+ /** Кастомная версия SagaMiddleware. */
20
+ export interface SagaExtendedMiddleware extends Middleware {
21
+ /**
22
+ * Установить временное ограничение работы саги.
23
+ * Если сага не успела выполнится до истечения этого ограничения она будет принудительно завершена.
24
+ */
25
+ timeout(milliseconds: number, config?: SagaInterruptConfig): this;
26
+ /**
27
+ * Запускает сагу.
28
+ */
29
+ run: <S extends Saga>(saga: S, ...args: Parameters<S>) => Promise<void>;
30
+ }
31
+ /** Обработчик событий SagaExtendedMiddleware. */
32
+ export interface SagaMiddlewareHandler {
33
+ onSagaError(error: Error, errorInfo: SagaErrorInfo): Promise<void> | void;
34
+ onConfigError(error: Error): Promise<void> | void;
35
+ onTimeoutInterrupt(info: SagaInterruptInfo): Promise<void> | void;
36
+ }
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/redux-saga/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * Данные для SSR, сформированные на сервере.
4
+ */
5
+ export interface BridgeServerSide {
6
+ rootElementId: string;
7
+ serverDataKey: string;
8
+ }
9
+ /**
10
+ * Данные для SSR, доступные на стороне клиента (в браузере).
11
+ */
12
+ export interface BridgeClientSide<T> {
13
+ rootElement: HTMLElement;
14
+ serverSideData: T;
15
+ }
16
+ /**
17
+ * Набор методов для связывания серверного и клиентского приложений.
18
+ */
19
+ export declare const SsrBridge: {
20
+ /**
21
+ * Вызывается на сервере.
22
+ * @param serviceKey Идентификатор корневого элемента.
23
+ * @return Идентификатор корневого элемента и ключ для глобально.
24
+ */
25
+ readonly prepare: (serviceKey: string) => BridgeServerSide;
26
+ /**
27
+ * Вызывается на клиенте.
28
+ * @param serviceKey Идентификатор корневого элемента.
29
+ * @return Корневой элемент и начальное состояние.
30
+ */
31
+ readonly resolve: <T = any>(serviceKey: string) => BridgeClientSide<T>;
32
+ };
33
+ /**
34
+ * Скрипт, формирующий глобально доступные на странице данные.
35
+ * @param props Свойства.
36
+ * @return Элемент.
37
+ */
38
+ export declare function GlobalDataScript({ property, value, }: {
39
+ property: string;
40
+ value: Record<any, any>;
41
+ }): JSX.Element;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GlobalDataScript = exports.SsrBridge = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const jsesc_1 = __importDefault(require("jsesc"));
9
+ /**
10
+ * Набор методов для связывания серверного и клиентского приложений.
11
+ */
12
+ exports.SsrBridge = {
13
+ /**
14
+ * Вызывается на сервере.
15
+ * @param serviceKey Идентификатор корневого элемента.
16
+ * @return Идентификатор корневого элемента и ключ для глобально.
17
+ */
18
+ prepare(serviceKey) {
19
+ return {
20
+ rootElementId: `${serviceKey}__root`,
21
+ serverDataKey: `${serviceKey}__serverData`,
22
+ };
23
+ },
24
+ /**
25
+ * Вызывается на клиенте.
26
+ * @param serviceKey Идентификатор корневого элемента.
27
+ * @return Корневой элемент и начальное состояние.
28
+ */
29
+ resolve(serviceKey) {
30
+ const rootElement = document.getElementById(`${serviceKey}__root`);
31
+ const serverSideData = window[`${serviceKey}__serverData`];
32
+ if (!rootElement) {
33
+ throw Error('SSR: Не был найден корневой элемент');
34
+ }
35
+ return { rootElement, serverSideData };
36
+ },
37
+ };
38
+ /**
39
+ * Скрипт, формирующий глобально доступные на странице данные.
40
+ * @param props Свойства.
41
+ * @return Элемент.
42
+ */
43
+ function GlobalDataScript({ property, value, }) {
44
+ const json = (0, jsesc_1.default)(JSON.stringify(value), {
45
+ json: true,
46
+ isScriptContext: true,
47
+ });
48
+ return ((0, jsx_runtime_1.jsx)("script", { dangerouslySetInnerHTML: {
49
+ // @todo возможно стоит также экранировать символы в "property"
50
+ __html: `window["${property}"] = JSON.parse(${json});`,
51
+ } }));
52
+ }
53
+ exports.GlobalDataScript = GlobalDataScript;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/ssr/index.tsx"],"names":[],"mappings":";;;;;;;AAAA,kDAA0B;AAkB1B;;GAEG;AACU,QAAA,SAAS,GAAG;IACvB;;;;OAIG;IACH,OAAO,CAAC,UAAkB;QACxB,OAAO;YACL,aAAa,EAAE,GAAG,UAAU,QAAQ;YACpC,aAAa,EAAE,GAAG,UAAU,cAAc;SAC3C,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAU,UAAkB;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,UAAU,QAAQ,CAAC,CAAC;QACnE,MAAM,cAAc,GAAI,MAAc,CAAC,GAAG,UAAU,cAAc,CAAC,CAAC;QAEpE,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACpD;QAED,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IACzC,CAAC;CACO,CAAC;AAEX;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,KAAK,GAIN;IACC,MAAM,IAAI,GAAG,IAAA,eAAK,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACxC,IAAI,EAAE,IAAI;QACV,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,CACL,mCACE,uBAAuB,EAAE;YACvB,+DAA+D;YAC/D,MAAM,EAAE,WAAW,QAAQ,mBAAmB,IAAI,IAAI;SACvD,GACD,CACH,CAAC;AACJ,CAAC;AApBD,4CAoBC"}
@@ -0,0 +1,18 @@
1
+ import { Compiler, WebpackPluginInstance } from 'webpack';
2
+ import { EnvPluginOptions } from './types';
3
+ /**
4
+ * Плагин для зашивания переменных среды в сборки.
5
+ * В браузерную сборку зашьёт только переменные с префиксом "PUBLIC_".
6
+ * ВАЖНО: все зашиваемые переменные будут доступны через глобальный объект __ISOMORPH_ENV__.
7
+ */
8
+ export declare class EnvPlugin implements WebpackPluginInstance {
9
+ options: Required<EnvPluginOptions>;
10
+ /**
11
+ * @param options Опции.
12
+ */
13
+ constructor(options?: EnvPluginOptions);
14
+ /**
15
+ * @param compiler Компилятор.
16
+ */
17
+ apply(compiler: Compiler): void;
18
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnvPlugin = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const utils_1 = require("./utils");
6
+ /**
7
+ * Плагин для зашивания переменных среды в сборки.
8
+ * В браузерную сборку зашьёт только переменные с префиксом "PUBLIC_".
9
+ * ВАЖНО: все зашиваемые переменные будут доступны через глобальный объект __ISOMORPH_ENV__.
10
+ */
11
+ class EnvPlugin {
12
+ /**
13
+ * @param options Опции.
14
+ */
15
+ constructor(options = {}) {
16
+ this.options = {
17
+ target: options.target ?? 'auto',
18
+ dotenvUsage: options.dotenvUsage ?? true,
19
+ additional: options.additional ?? [],
20
+ define: options.define ?? {},
21
+ };
22
+ }
23
+ /**
24
+ * @param compiler Компилятор.
25
+ */
26
+ apply(compiler) {
27
+ const { webpack } = compiler;
28
+ const env = (0, utils_1.defineEnv)({
29
+ dotenvUsage: this.options.dotenvUsage,
30
+ onError: error => {
31
+ compiler.hooks.compilation.tap('EnvPlugin', compilation => {
32
+ compilation.warnings.push(new webpack.WebpackError(`[EnvPlugin] ${String(error)}`));
33
+ });
34
+ },
35
+ });
36
+ let values = null;
37
+ let target;
38
+ // define target
39
+ if (this.options.target === 'auto') {
40
+ target = typeof compiler.options.target === 'string' ? compiler.options.target : undefined;
41
+ }
42
+ else {
43
+ target = this.options.target;
44
+ }
45
+ // define values based on target
46
+ switch (target) {
47
+ case 'web': {
48
+ values = {
49
+ ...this.options.define,
50
+ ...(0, lodash_1.pick)(env, [...this.options.additional, 'NODE_ENV']),
51
+ ...(0, lodash_1.pickBy)(env, (_, key) => key.startsWith('PUBLIC_')),
52
+ };
53
+ break;
54
+ }
55
+ case 'node': {
56
+ values = {
57
+ ...this.options.define,
58
+ ...(0, lodash_1.pick)(env, [...this.options.additional, 'NODE_ENV']),
59
+ };
60
+ break;
61
+ }
62
+ default: {
63
+ compiler.hooks.compilation.tap('EnvPlugin', compilation => {
64
+ compilation.warnings.push(new webpack.WebpackError('[EnvPlugin] Target is unknown, variables will NOT be added'));
65
+ });
66
+ break;
67
+ }
68
+ }
69
+ if (values) {
70
+ new webpack.DefinePlugin({ __ISOMORPH_ENV__: JSON.stringify(values) }).apply(compiler);
71
+ new webpack.DefinePlugin((0, utils_1.asEnvVariables)(values)).apply(compiler);
72
+ }
73
+ }
74
+ }
75
+ exports.EnvPlugin = EnvPlugin;
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/webpack/env/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /** Опции EnvPlugin. */
2
+ export interface EnvPluginOptions {
3
+ /** Целевая среда. */
4
+ target?: 'auto' | 'web' | 'node';
5
+ /** Нужно ли использоваь .env файлы. */
6
+ dotenvUsage?: boolean;
7
+ /** Переменные, зашиваемые из среды запуска. */
8
+ additional?: string[];
9
+ /** Переменные определяемые на месте. */
10
+ define?: Record<string, string>;
11
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/utils/webpack/env/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { EnvPluginOptions } from './types';
2
+ /**
3
+ * Формирует объект с переменными среды с учетом .env файлов.
4
+ * @param options Опции.
5
+ * @return Объект с переменными среды.
6
+ */
7
+ export declare function defineEnv(options: Pick<EnvPluginOptions, 'dotenvUsage'> & {
8
+ onError?: (error: unknown) => void;
9
+ }): Record<string, string | undefined>;
10
+ /**
11
+ * Получив таблицу "название переменной среды >> значение переменной среды" вернёт определение для DefinePlugin.
12
+ * @param input Таблица переменных.
13
+ * @return Определение для DefinePlugin.
14
+ */
15
+ export declare function asEnvVariables(input: Record<string, string | undefined>): Record<string, string>;