@sima-land/isomorph 11.0.0-alpha.25 → 11.0.0-alpha.26

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 (76) hide show
  1. package/di/application.js +0 -1
  2. package/di/application.js.map +1 -1
  3. package/error-tracking/types.d.ts +5 -4
  4. package/http-client/middleware/headers.js.map +1 -1
  5. package/http-client/middleware/logging.d.ts +22 -11
  6. package/http-client/middleware/logging.js +8 -92
  7. package/http-client/middleware/logging.js.map +1 -1
  8. package/http-client/sauce/index.d.ts +16 -4
  9. package/http-client/sauce/index.js +34 -32
  10. package/http-client/sauce/index.js.map +1 -1
  11. package/http-client/utils.d.ts +9 -1
  12. package/http-client/utils.js +22 -1
  13. package/http-client/utils.js.map +1 -1
  14. package/http-server/middleware/logging.js +2 -1
  15. package/http-server/middleware/logging.js.map +1 -1
  16. package/http-server/middleware/tracing.js +1 -1
  17. package/http-server/middleware/tracing.js.map +1 -1
  18. package/logger/handler/{console.d.ts → pino.d.ts} +3 -3
  19. package/logger/handler/pino.js +29 -0
  20. package/logger/handler/pino.js.map +1 -0
  21. package/logger/handler/sentry.d.ts +2 -2
  22. package/logger/handler/sentry.js +11 -3
  23. package/logger/handler/sentry.js.map +1 -1
  24. package/package.json +7 -8
  25. package/preset/browser/index.d.ts +1 -5
  26. package/preset/browser/index.js +9 -18
  27. package/preset/browser/index.js.map +1 -1
  28. package/preset/node/index.d.ts +4 -4
  29. package/preset/node/index.js +36 -21
  30. package/preset/node/index.js.map +1 -1
  31. package/preset/node/response.d.ts +0 -2
  32. package/preset/node/response.js +7 -11
  33. package/preset/node/response.js.map +1 -1
  34. package/preset/parts/providers.d.ts +7 -0
  35. package/preset/parts/providers.js +26 -0
  36. package/preset/parts/providers.js.map +1 -0
  37. package/preset/{types.d.ts → parts/types.d.ts} +0 -0
  38. package/preset/{types.js → parts/types.js} +0 -0
  39. package/preset/{types.js.map → parts/types.js.map} +1 -1
  40. package/preset/parts/utils.d.ts +79 -0
  41. package/preset/parts/utils.js +201 -0
  42. package/preset/parts/utils.js.map +1 -0
  43. package/tokens.d.ts +5 -1
  44. package/tokens.js +3 -0
  45. package/tokens.js.map +1 -1
  46. package/utils/function.d.ts +28 -0
  47. package/utils/function.js +23 -0
  48. package/utils/function.js.map +1 -0
  49. package/utils/redux-saga/middleware.d.ts +3 -4
  50. package/utils/redux-saga/middleware.js +11 -14
  51. package/utils/redux-saga/middleware.js.map +1 -1
  52. package/utils/redux-saga/types.d.ts +10 -1
  53. package/utils/webpack/env/index.d.ts +18 -0
  54. package/utils/webpack/env/index.js +69 -0
  55. package/utils/webpack/env/index.js.map +1 -0
  56. package/utils/webpack/env/types.d.ts +11 -0
  57. package/utils/webpack/env/types.js +3 -0
  58. package/utils/webpack/env/types.js.map +1 -0
  59. package/utils/webpack/env/utils.d.ts +13 -0
  60. package/utils/webpack/env/utils.js +46 -0
  61. package/utils/webpack/env/utils.js.map +1 -0
  62. package/utils/webpack/index.d.ts +6 -23
  63. package/utils/webpack/index.js +5 -65
  64. package/utils/webpack/index.js.map +1 -1
  65. package/utils/webpack/module-federation/index.d.ts +4 -1
  66. package/utils/webpack/module-federation/index.js +7 -2
  67. package/utils/webpack/module-federation/index.js.map +1 -1
  68. package/utils/webpack/module-federation/types.d.ts +5 -1
  69. package/utils/webpack/module-federation/utils.d.ts +5 -0
  70. package/utils/webpack/module-federation/utils.js +27 -1
  71. package/utils/webpack/module-federation/utils.js.map +1 -1
  72. package/logger/handler/console.js +0 -46
  73. package/logger/handler/console.js.map +0 -1
  74. package/preset/utils.d.ts +0 -15
  75. package/preset/utils.js +0 -26
  76. package/preset/utils.js.map +0 -1
@@ -0,0 +1,201 @@
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.SagaLogging = exports.HttpClientLogging = exports.severityFromStatus = exports.HttpApiHostPool = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const error_tracking_1 = require("../../error-tracking");
9
+ const utils_1 = require("../../http-client/utils");
10
+ /** Реализация пула хостов. */
11
+ class HttpApiHostPool {
12
+ /**
13
+ * Конструктор.
14
+ * @param map Карта "Название api >> Название переменной среды с хостом api".
15
+ * @param source Источник конфигурации.
16
+ */
17
+ constructor(map, source) {
18
+ this.map = map;
19
+ this.source = source;
20
+ }
21
+ /** @inheritDoc */
22
+ get(key) {
23
+ const variableName = this.map[key];
24
+ if (!variableName) {
25
+ throw Error(`Known HTTP API not found by key "${key}"`);
26
+ }
27
+ // "лениво" берём переменную, именно в момент вызова (чтобы не заставлять указывать в сервисах все переменные разом)
28
+ return this.source.require(variableName);
29
+ }
30
+ }
31
+ exports.HttpApiHostPool = HttpApiHostPool;
32
+ /**
33
+ * Возвращает уровень на основе статуса ответа.
34
+ * @param status Статус HTTP-ответа.
35
+ * @return Уровень.
36
+ */
37
+ function severityFromStatus(status) {
38
+ let result;
39
+ if (typeof status === 'number') {
40
+ switch (true) {
41
+ case status >= 200 && status <= 299:
42
+ result = 'info';
43
+ break;
44
+ case status >= 300 && status <= 499:
45
+ result = 'warning';
46
+ break;
47
+ default:
48
+ result = 'error';
49
+ }
50
+ }
51
+ else {
52
+ result = 'error';
53
+ }
54
+ return result;
55
+ }
56
+ exports.severityFromStatus = severityFromStatus;
57
+ /**
58
+ * Обработчик для промежуточного слоя логирования исходящих http-запросов.
59
+ * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.
60
+ */
61
+ class HttpClientLogging {
62
+ /**
63
+ * Конструктор.
64
+ * @param logger Logger.
65
+ * @param data Данные запроса.
66
+ */
67
+ constructor(logger, data) {
68
+ const config = (0, utils_1.applyAxiosDefaults)(data.config, data.defaults);
69
+ this.logger = logger;
70
+ this.requestInfo = {
71
+ ...config,
72
+ readyURL: (0, utils_1.displayUrl)(config.baseURL, config.url),
73
+ };
74
+ }
75
+ /**
76
+ * Отправит хлебные крошки перед запросом.
77
+ */
78
+ beforeRequest() {
79
+ const { readyURL, method, params } = this.requestInfo;
80
+ this.logger.info(new error_tracking_1.SentryBreadcrumb({
81
+ category: 'http.request',
82
+ type: 'http',
83
+ data: {
84
+ url: readyURL,
85
+ method,
86
+ params,
87
+ },
88
+ level: 'info',
89
+ }));
90
+ }
91
+ /**
92
+ * Отправит хлебные крошки после запроса.
93
+ * @param data Данные ответа.
94
+ */
95
+ afterResponse({ response }) {
96
+ const { readyURL, method, params } = this.requestInfo;
97
+ this.logger.info(new error_tracking_1.SentryBreadcrumb({
98
+ category: 'http.response',
99
+ type: 'http',
100
+ data: {
101
+ url: readyURL,
102
+ method,
103
+ status_code: response.status,
104
+ params,
105
+ },
106
+ level: 'info',
107
+ }));
108
+ }
109
+ /**
110
+ * Отправит данные ошибки при перехвате.
111
+ * @param data Данные запроса.
112
+ */
113
+ onCatch({ error }) {
114
+ if (axios_1.default.isAxiosError(error)) {
115
+ const { requestInfo } = this;
116
+ const statusCode = error.response?.status || 'UNKNOWN';
117
+ this.logger.error(new error_tracking_1.SentryError(`HTTP request failed, status code: ${statusCode}, error message: ${error.message}`, {
118
+ level: severityFromStatus(error.response?.status),
119
+ context: [
120
+ {
121
+ key: 'Request details',
122
+ data: {
123
+ url: requestInfo.url,
124
+ baseURL: requestInfo.baseURL,
125
+ method: requestInfo.method,
126
+ headers: requestInfo.headers,
127
+ data: requestInfo.data,
128
+ params: requestInfo.params,
129
+ },
130
+ },
131
+ {
132
+ key: 'Response details',
133
+ data: {
134
+ data: error.response?.data,
135
+ // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)
136
+ headers: { ...error.response?.headers },
137
+ error: error.toJSON(),
138
+ },
139
+ },
140
+ ],
141
+ }));
142
+ if (typeof statusCode === 'number') {
143
+ this.logger.info(new error_tracking_1.SentryBreadcrumb({
144
+ category: 'http.response',
145
+ type: 'http',
146
+ data: {
147
+ url: requestInfo.readyURL,
148
+ method: requestInfo.method,
149
+ status_code: statusCode,
150
+ params: requestInfo.params,
151
+ },
152
+ level: 'error',
153
+ }));
154
+ }
155
+ }
156
+ else {
157
+ this.logger.error(error);
158
+ }
159
+ }
160
+ }
161
+ exports.HttpClientLogging = HttpClientLogging;
162
+ /**
163
+ * Лог событий запуска и выполнения redux-saga.
164
+ */
165
+ class SagaLogging {
166
+ /**
167
+ * @param logger Logger.
168
+ */
169
+ constructor(logger) {
170
+ this.logger = logger;
171
+ }
172
+ /**
173
+ * При получении ошибки выполнения саги передаст ее логгеру ее с данными стека в extra.
174
+ * @param error Ошибка.
175
+ * @param info Инфо выполнения саги.
176
+ */
177
+ onSagaError(error, info) {
178
+ this.logger.error(new error_tracking_1.SentryError(error.message, {
179
+ extra: {
180
+ key: 'Saga stack',
181
+ data: info.sagaStack,
182
+ },
183
+ }));
184
+ }
185
+ /**
186
+ * При получении ошибки запуска саги передаст ее логгеру.
187
+ * @param error Ошибка.
188
+ */
189
+ onConfigError(error) {
190
+ this.logger.error(error);
191
+ }
192
+ /**
193
+ * При прерывании саги передаст информацию логгеру как ошибку.
194
+ * @param info Инфо прерывания саги.
195
+ */
196
+ onTimeoutInterrupt({ timeout }) {
197
+ this.logger.error(new Error(`Сага прервана по таймауту (${timeout} миллисекунд)`));
198
+ }
199
+ }
200
+ exports.SagaLogging = SagaLogging;
201
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/preset/parts/utils.ts"],"names":[],"mappings":"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"}
package/tokens.d.ts CHANGED
@@ -9,9 +9,10 @@ import type { Tracer } from '@opentelemetry/api';
9
9
  import type { Cache } from './cache/types';
10
10
  import type { BasicTracerProvider, SpanExporter } from '@opentelemetry/sdk-trace-base';
11
11
  import type { Resource } from '@opentelemetry/resources';
12
- import type { StrictMap, KnownHttpApiKey } from './preset/types';
12
+ import type { StrictMap, KnownHttpApiKey } from './preset/parts/types';
13
13
  import type { BridgeClientSide, BridgeServerSide } from './utils/ssr';
14
14
  import type { PageResponse } from './http-server/utils';
15
+ import type { LogMiddlewareHandlerInit } from './http-client/middleware/logging';
15
16
  export declare const KnownToken: {
16
17
  readonly Config: {
17
18
  readonly source: import("./di").Token<import("@humanwhocodes/env").Env>;
@@ -32,6 +33,9 @@ export declare const KnownToken: {
32
33
  readonly Http: {
33
34
  readonly Client: {
34
35
  readonly factory: import("./di").Token<HttpClientFactory>;
36
+ readonly LogMiddleware: {
37
+ readonly handler: import("./di").Token<LogMiddlewareHandlerInit>;
38
+ };
35
39
  };
36
40
  readonly Server: {
37
41
  readonly factory: import("./di").Token<() => Application>;
package/tokens.js CHANGED
@@ -29,6 +29,9 @@ exports.KnownToken = {
29
29
  Http: {
30
30
  Client: {
31
31
  factory: (0, di_1.createToken)('http.client.factory'),
32
+ LogMiddleware: {
33
+ handler: (0, di_1.createToken)('http.client.log-middleware.handler'),
34
+ },
32
35
  },
33
36
  Server: {
34
37
  factory: (0, di_1.createToken)('http.server.factory'),
package/tokens.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":";;;AAAA,6BAAmC;AAoBtB,QAAA,UAAU,GAAG;IACxB,SAAS;IACT,MAAM,EAAE;QACN,MAAM,EAAE,IAAA,gBAAW,EAAe,eAAe,CAAC;QAClD,IAAI,EAAE,IAAA,gBAAW,EAAa,aAAa,CAAC;KAC7C;IAED,QAAQ;IACR,KAAK,EAAE,IAAA,gBAAW,EAAQ,OAAO,CAAC;IAElC,UAAU;IACV,MAAM,EAAE,IAAA,gBAAW,EAAS,QAAQ,CAAC;IAErC,cAAc;IACd,cAAc,EAAE,IAAA,gBAAW,EAAyB,iBAAiB,CAAC;IAEtE,UAAU;IACV,OAAO,EAAE;QACP,MAAM,EAAE,IAAA,gBAAW,EAAS,gBAAgB,CAAC;QAC7C,YAAY,EAAE,IAAA,gBAAW,EAAe,uBAAuB,CAAC;QAChE,cAAc,EAAE,IAAA,gBAAW,EAAsB,yBAAyB,CAAC;QAC3E,sBAAsB,EAAE,IAAA,gBAAW,EAAW,kCAAkC,CAAC;KAClF;IAED,UAAU;IACV,OAAO,EAAE;QACP,OAAO,EAAE,IAAA,gBAAW,EAAc,kBAAkB,CAAC;KACtD;IAED,OAAO;IACP,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,OAAO,EAAE,IAAA,gBAAW,EAAoB,qBAAqB,CAAC;SAC/D;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAA,gBAAW,EAAoB,qBAAqB,CAAC;YAC9D,QAAQ,EAAE;gBACR,UAAU,EAAE,IAAA,gBAAW,EAAoB,iCAAiC,CAAC;aAC9E;SACF;QACD,GAAG,EAAE;YACH,UAAU,EAAE,IAAA,gBAAW,EAA6B,sBAAsB,CAAC;SAC5E;KACF;IAED,uBAAuB;IACvB,QAAQ,EAAE;QACR,OAAO,EAAE,IAAA,gBAAW,EAAe,kBAAkB,CAAC;QACtD,MAAM,EAAE,IAAA,gBAAW,EAA0B,iBAAiB,CAAC;QAC/D,QAAQ,EAAE,IAAA,gBAAW,EAAe,mBAAmB,CAAC;QACxD,OAAO,EAAE,IAAA,gBAAW,EAAkB,kBAAkB,CAAC;QACzD,MAAM,EAAE,IAAA,gBAAW,EAAa,iBAAiB,CAAC;QAClD,OAAO,EAAE,IAAA,gBAAW,EAA2C,kBAAkB,CAAC;QAClF,MAAM,EAAE,IAAA,gBAAW,EAAqD,iBAAiB,CAAC;QAC1F,IAAI,EAAE,IAAA,gBAAW,EAAa,eAAe,CAAC;KAC/C;IAED,MAAM;IACN,SAAS,EAAE;QACT,UAAU,EAAE,IAAA,gBAAW,EAA4B,wBAAwB,CAAC;QAC5E,UAAU,EAAE,IAAA,gBAAW,EAAmB,wBAAwB,CAAC;KACpE;CACO,CAAC"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":";;;AAAA,6BAAmC;AAqBtB,QAAA,UAAU,GAAG;IACxB,SAAS;IACT,MAAM,EAAE;QACN,MAAM,EAAE,IAAA,gBAAW,EAAe,eAAe,CAAC;QAClD,IAAI,EAAE,IAAA,gBAAW,EAAa,aAAa,CAAC;KAC7C;IAED,QAAQ;IACR,KAAK,EAAE,IAAA,gBAAW,EAAQ,OAAO,CAAC;IAElC,UAAU;IACV,MAAM,EAAE,IAAA,gBAAW,EAAS,QAAQ,CAAC;IAErC,cAAc;IACd,cAAc,EAAE,IAAA,gBAAW,EAAyB,iBAAiB,CAAC;IAEtE,UAAU;IACV,OAAO,EAAE;QACP,MAAM,EAAE,IAAA,gBAAW,EAAS,gBAAgB,CAAC;QAC7C,YAAY,EAAE,IAAA,gBAAW,EAAe,uBAAuB,CAAC;QAChE,cAAc,EAAE,IAAA,gBAAW,EAAsB,yBAAyB,CAAC;QAC3E,sBAAsB,EAAE,IAAA,gBAAW,EAAW,kCAAkC,CAAC;KAClF;IAED,UAAU;IACV,OAAO,EAAE;QACP,OAAO,EAAE,IAAA,gBAAW,EAAc,kBAAkB,CAAC;KACtD;IAED,OAAO;IACP,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,OAAO,EAAE,IAAA,gBAAW,EAAoB,qBAAqB,CAAC;YAC9D,aAAa,EAAE;gBACb,OAAO,EAAE,IAAA,gBAAW,EAA2B,oCAAoC,CAAC;aACrF;SACF;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAA,gBAAW,EAAoB,qBAAqB,CAAC;YAC9D,QAAQ,EAAE;gBACR,UAAU,EAAE,IAAA,gBAAW,EAAoB,iCAAiC,CAAC;aAC9E;SACF;QACD,GAAG,EAAE;YACH,UAAU,EAAE,IAAA,gBAAW,EAA6B,sBAAsB,CAAC;SAC5E;KACF;IAED,uBAAuB;IACvB,QAAQ,EAAE;QACR,OAAO,EAAE,IAAA,gBAAW,EAAe,kBAAkB,CAAC;QACtD,MAAM,EAAE,IAAA,gBAAW,EAA0B,iBAAiB,CAAC;QAC/D,QAAQ,EAAE,IAAA,gBAAW,EAAe,mBAAmB,CAAC;QACxD,OAAO,EAAE,IAAA,gBAAW,EAAkB,kBAAkB,CAAC;QACzD,MAAM,EAAE,IAAA,gBAAW,EAAa,iBAAiB,CAAC;QAClD,OAAO,EAAE,IAAA,gBAAW,EAA2C,kBAAkB,CAAC;QAClF,MAAM,EAAE,IAAA,gBAAW,EAAqD,iBAAiB,CAAC;QAC1F,IAAI,EAAE,IAAA,gBAAW,EAAa,eAAe,CAAC;KAC/C;IAED,MAAM;IACN,SAAS,EAAE;QACT,UAAU,EAAE,IAAA,gBAAW,EAA4B,wBAAwB,CAAC;QAC5E,UAAU,EAAE,IAAA,gBAAW,EAAmB,wBAAwB,CAAC;KACpE;CACO,CAAC"}
@@ -0,0 +1,28 @@
1
+ interface SafetyDoneInfo<T> {
2
+ ok: true;
3
+ result: T;
4
+ }
5
+ interface SafetyFailInfo {
6
+ ok: false;
7
+ error: unknown;
8
+ }
9
+ export declare type SafetyInfo<T> = SafetyDoneInfo<T> | SafetyFailInfo;
10
+ interface SafetyFormatter<T, F> {
11
+ (info: SafetyInfo<T>): F;
12
+ }
13
+ /**
14
+ * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.
15
+ * При перехвате исключения результат будет содержать ошибку.
16
+ * @param fn Оборачиваемая функция.
17
+ * @return Функция.
18
+ */
19
+ export declare function safetyAsync<T, P extends any[]>(fn: (...args: P) => Promise<T>): (...args: P) => Promise<SafetyInfo<T>>;
20
+ /**
21
+ * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.
22
+ * При перехвате исключения результат будет содержать ошибку.
23
+ * @param fn Оборачиваемая функция.
24
+ * @param format Получив базовую информацию об ответе должна вернуть отформатированную информацию.
25
+ * @return Функция.
26
+ */
27
+ export declare function safetyAsync<T, P extends any[], F>(fn: (...args: P) => Promise<T>, format: SafetyFormatter<T, F>): (...args: P) => Promise<F>;
28
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safetyAsync = void 0;
4
+ const lodash_1 = require("lodash");
5
+ /**
6
+ * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.
7
+ * При перехвате исключения результат будет содержать ошибку.
8
+ * @param fn Оборачиваемая функция.
9
+ * @param format Получив базовую информацию об ответе должна вернуть отформатированную информацию.
10
+ * @return Функция.
11
+ */
12
+ function safetyAsync(fn, format = lodash_1.identity) {
13
+ return async function safetyWrapper(...args) {
14
+ try {
15
+ return format({ ok: true, result: await fn(...args) });
16
+ }
17
+ catch (error) {
18
+ return format({ ok: false, error });
19
+ }
20
+ };
21
+ }
22
+ exports.safetyAsync = safetyAsync;
23
+ //# sourceMappingURL=function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/utils/function.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAwClC;;;;;;GAMG;AACH,SAAgB,WAAW,CACzB,EAA8B,EAC9B,SAAgC,iBAAQ;IAExC,OAAO,KAAK,UAAU,aAAa,CAAC,GAAG,IAAO;QAC5C,IAAI;YACF,OAAO,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;SACxD;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACrC;IACH,CAAC,CAAC;AACJ,CAAC;AAXD,kCAWC"}
@@ -1,9 +1,8 @@
1
- import { SagaExtendedMiddleware } from './types';
2
- import { Logger } from '../../logger';
1
+ import { SagaExtendedMiddleware, SagaMiddlewareHandler } from './types';
3
2
  /**
4
3
  * Возвращает расширенную версию SagaMiddleware.
5
- * @param logger Logger.
4
+ * @param handler Обработчик событий.
6
5
  * @return Middleware.
7
6
  */
8
- declare function createSagaExtendedMiddleware(logger: Logger): SagaExtendedMiddleware;
7
+ declare function createSagaExtendedMiddleware(handler: SagaMiddlewareHandler): SagaExtendedMiddleware;
9
8
  export { createSagaExtendedMiddleware as createSagaMiddleware };
@@ -25,24 +25,16 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.createSagaMiddleware = void 0;
27
27
  const redux_saga_1 = __importStar(require("redux-saga"));
28
- const error_tracking_1 = require("../../error-tracking");
29
28
  /**
30
29
  * Возвращает расширенную версию SagaMiddleware.
31
- * @param logger Logger.
30
+ * @param handler Обработчик событий.
32
31
  * @return Middleware.
33
32
  */
34
- function createSagaExtendedMiddleware(logger) {
33
+ function createSagaExtendedMiddleware(handler) {
35
34
  const privates = {};
36
35
  const sagaMiddleware = (0, redux_saga_1.default)({
37
- onError: (error, { sagaStack }) => {
38
- logger.error(
39
- // @todo убрать отсюда упоминание sentry, вынести в провайдер, возможно заменить аргумент logger на onError
40
- new error_tracking_1.SentryError(error.message, {
41
- extra: {
42
- key: 'Saga stack',
43
- data: sagaStack,
44
- },
45
- }));
36
+ onError: (error, info) => {
37
+ handler.onSagaError(error, info);
46
38
  },
47
39
  });
48
40
  const middleware = api => {
@@ -59,20 +51,25 @@ function createSagaExtendedMiddleware(logger) {
59
51
  let ready = false;
60
52
  let timerId;
61
53
  if (!api) {
62
- throw Error('Middleware is not applied to the store');
54
+ const error = new Error('Middleware is not applied to the store');
55
+ handler.onConfigError(error);
56
+ throw error;
63
57
  }
64
58
  promises.push(sagaMiddleware
65
59
  .run(saga, ...args)
66
60
  .toPromise()
67
61
  .then(() => {
68
62
  ready = true;
63
+ })
64
+ .finally(() => {
65
+ // вне зависимости от результата отключаем таймер если он есть
69
66
  timerId !== undefined && clearTimeout(timerId);
70
67
  }));
71
68
  if (typeof timeout === 'number' && Number.isFinite(timeout)) {
72
69
  promises.push(new Promise(resolve => {
73
70
  timerId = setTimeout(() => {
74
71
  if (!ready) {
75
- logger.error(Error(`Сага прервана по таймауту (${timeout} миллисекунд)`));
72
+ handler.onTimeoutInterrupt({ timeout });
76
73
  api.dispatch(redux_saga_1.END);
77
74
  }
78
75
  resolve();
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/utils/redux-saga/middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,yDAA6D;AAC7D,yDAAmD;AAEnD;;;;GAIG;AACH,SAAS,4BAA4B,CAAC,MAAc;IAClD,MAAM,QAAQ,GAGV,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,IAAA,oBAAoB,EAAC;QAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,CAAC,KAAK;YACV,2GAA2G;YAC3G,IAAI,4BAAW,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC7B,KAAK,EAAE;oBACL,GAAG,EAAE,YAAY;oBACjB,IAAI,EAAE,SAAS;iBAChB;aACF,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAA2B,GAAG,CAAC,EAAE;QAC/C,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;QACnB,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,UAAU,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,YAAoB;QACxD,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,GAAG,KAAK,UAAU,GAAG,CACjC,IAAO,EACP,GAAG,IAAmB;QAEtB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAClC,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,OAAuB,CAAC;QAE5B,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;SACvD;QAED,QAAQ,CAAC,IAAI,CACX,cAAc;aACX,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;aAClB,SAAS,EAAE;aACX,IAAI,CAAC,GAAG,EAAE;YACT,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CACL,CAAC;QAEF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3D,QAAQ,CAAC,IAAI,CACX,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;gBAC1B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBACxB,IAAI,CAAC,KAAK,EAAE;wBACV,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,OAAO,eAAe,CAAC,CAAC,CAAC;wBAC1E,GAAG,CAAC,QAAQ,CAAC,gBAAG,CAAC,CAAC;qBACnB;oBAED,OAAO,EAAE,CAAC;gBACZ,CAAC,EAAE,OAAO,CAAC,CAAC;YACd,CAAC,CAAC,CACH,CAAC;SACH;QAED,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC;AAEwC,4DAAoB"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/utils/redux-saga/middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,yDAA6D;AAE7D;;;;GAIG;AACH,SAAS,4BAA4B,CAAC,OAA8B;IAClE,MAAM,QAAQ,GAGV,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,IAAA,oBAAoB,EAAC;QAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACvB,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAA2B,GAAG,CAAC,EAAE;QAC/C,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;QACnB,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,UAAU,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,YAAoB;QACxD,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,GAAG,KAAK,UAAU,GAAG,CACjC,IAAO,EACP,GAAG,IAAmB;QAEtB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAClC,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,OAAsC,CAAC;QAE3C,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAElE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE7B,MAAM,KAAK,CAAC;SACb;QAED,QAAQ,CAAC,IAAI,CACX,cAAc;aACX,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;aAClB,SAAS,EAAE;aACX,IAAI,CAAC,GAAG,EAAE;YACT,KAAK,GAAG,IAAI,CAAC;QACf,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,8DAA8D;YAC9D,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CACL,CAAC;QAEF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3D,QAAQ,CAAC,IAAI,CACX,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;gBAC1B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBACxB,IAAI,CAAC,KAAK,EAAE;wBACV,OAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;wBACxC,GAAG,CAAC,QAAQ,CAAC,gBAAG,CAAC,CAAC;qBACnB;oBAED,OAAO,EAAE,CAAC;gBACZ,CAAC,EAAE,OAAO,CAAC,CAAC;YACd,CAAC,CAAC,CACH,CAAC;SACH;QAED,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC;AAEwC,4DAAoB"}
@@ -1,6 +1,15 @@
1
1
  import type { Middleware } from '@reduxjs/toolkit';
2
- import type { Saga } from 'redux-saga';
2
+ import type { Saga, SagaMiddlewareOptions } from 'redux-saga';
3
+ export declare type SagaErrorInfo = Parameters<Required<SagaMiddlewareOptions>['onError']>[1];
4
+ export interface SagaInterruptInfo {
5
+ timeout: number;
6
+ }
3
7
  export interface SagaExtendedMiddleware extends Middleware {
4
8
  timeout(milliseconds: number): this;
5
9
  run: <S extends Saga>(saga: S, ...args: Parameters<S>) => Promise<void>;
6
10
  }
11
+ export interface SagaMiddlewareHandler {
12
+ onSagaError(error: Error, errorInfo: SagaErrorInfo): Promise<void> | void;
13
+ onConfigError(error: Error): Promise<void> | void;
14
+ onTimeoutInterrupt(info: SagaInterruptInfo): Promise<void> | void;
15
+ }
@@ -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,69 @@
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)({ dotenvUsage: this.options.dotenvUsage });
29
+ let values = null;
30
+ let target;
31
+ // define target
32
+ if (this.options.target === 'auto') {
33
+ target = typeof compiler.options.target === 'string' ? compiler.options.target : undefined;
34
+ }
35
+ else {
36
+ target = this.options.target;
37
+ }
38
+ // define values based on target
39
+ switch (target) {
40
+ case 'web': {
41
+ values = {
42
+ ...this.options.define,
43
+ ...(0, lodash_1.pick)(env, [...this.options.additional, 'NODE_ENV']),
44
+ ...(0, lodash_1.pickBy)(env, (_, key) => key.startsWith('PUBLIC_')),
45
+ };
46
+ break;
47
+ }
48
+ case 'node': {
49
+ values = {
50
+ ...this.options.define,
51
+ ...(0, lodash_1.pick)(env, [...this.options.additional, 'NODE_ENV']),
52
+ };
53
+ break;
54
+ }
55
+ default: {
56
+ compiler.hooks.compilation.tap('EnvPlugin', compilation => {
57
+ compilation.warnings.push(new webpack.WebpackError('[EnvPlugin] Target is unknown, variables will NOT be added'));
58
+ });
59
+ break;
60
+ }
61
+ }
62
+ if (values) {
63
+ new webpack.DefinePlugin({ __ISOMORPH_ENV__: JSON.stringify(values) }).apply(compiler);
64
+ new webpack.DefinePlugin((0, utils_1.asEnvVariables)(values)).apply(compiler);
65
+ }
66
+ }
67
+ }
68
+ exports.EnvPlugin = EnvPlugin;
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/webpack/env/index.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAGtC,mCAAoD;AAEpD;;;;GAIG;AACH,MAAa,SAAS;IAGpB;;OAEG;IACH,YAAY,UAA4B,EAAE;QACxC,IAAI,CAAC,OAAO,GAAG;YACb,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;YACxC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAkB;QACtB,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAA,iBAAS,EAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM,GAA8C,IAAI,CAAC;QAC7D,IAAI,MAA0B,CAAC;QAE/B,gBAAgB;QAChB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;YAClC,MAAM,GAAG,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;SAC5F;aAAM;YACL,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SAC9B;QAED,gCAAgC;QAChC,QAAQ,MAAM,EAAE;YACd,KAAK,KAAK,CAAC,CAAC;gBACV,MAAM,GAAG;oBACP,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;oBACtB,GAAG,IAAA,aAAI,EAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBACtD,GAAG,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;iBACtD,CAAC;gBACF,MAAM;aACP;YACD,KAAK,MAAM,CAAC,CAAC;gBACX,MAAM,GAAG;oBACP,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;oBACtB,GAAG,IAAA,aAAI,EAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;iBACvD,CAAC;gBACF,MAAM;aACP;YACD,OAAO,CAAC,CAAC;gBACP,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;oBACxD,WAAW,CAAC,QAAQ,CAAC,IAAI,CACvB,IAAI,OAAO,CAAC,YAAY,CAAC,4DAA4D,CAAC,CACvF,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM;aACP;SACF;QAED,IAAI,MAAM,EAAE;YACV,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvF,IAAI,OAAO,CAAC,YAAY,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAClE;IACH,CAAC;CACF;AA/DD,8BA+DC"}
@@ -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,13 @@
1
+ import { EnvPluginOptions } from './types';
2
+ /**
3
+ * Формирует объект с переменными среды с учетом .env файлов.
4
+ * @param options Опции.
5
+ * @return Объект с переменными среды.
6
+ */
7
+ export declare function defineEnv(options: Pick<EnvPluginOptions, 'dotenvUsage'>): Record<string, string | undefined>;
8
+ /**
9
+ * Получив таблицу "название переменной среды >> значение переменной среды" вернёт определение для DefinePlugin.
10
+ * @param input Таблица переменных.
11
+ * @return Определение для DefinePlugin.
12
+ */
13
+ export declare function asEnvVariables(input: Record<string, string | undefined>): Record<string, string>;
@@ -0,0 +1,46 @@
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.asEnvVariables = exports.defineEnv = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ const dotenv_1 = __importDefault(require("dotenv"));
10
+ /**
11
+ * Формирует объект с переменными среды с учетом .env файлов.
12
+ * @param options Опции.
13
+ * @return Объект с переменными среды.
14
+ */
15
+ function defineEnv(options) {
16
+ const result = { ...process.env };
17
+ if (options.dotenvUsage && process.env.NODE_ENV) {
18
+ // @todo обрабатывать проблемы с чтением/парсингом итд
19
+ const dotenvPath = path_1.default.join(process.cwd(), `.env.${process.env.NODE_ENV}`);
20
+ const parsed = dotenv_1.default.parse((0, fs_1.readFileSync)(dotenvPath, 'utf-8'));
21
+ // @todo дёрнуть бы эту логику из пакета dotenv, https://github.com/motdotla/dotenv/issues/690
22
+ for (const key of Object.keys(parsed)) {
23
+ if (!Object.prototype.hasOwnProperty.call(result, key)) {
24
+ result[key] = parsed[key];
25
+ }
26
+ }
27
+ }
28
+ return result;
29
+ }
30
+ exports.defineEnv = defineEnv;
31
+ /**
32
+ * Получив таблицу "название переменной среды >> значение переменной среды" вернёт определение для DefinePlugin.
33
+ * @param input Таблица переменных.
34
+ * @return Определение для DefinePlugin.
35
+ */
36
+ function asEnvVariables(input) {
37
+ const result = {};
38
+ for (const [key, value] of Object.entries(input)) {
39
+ if (key && typeof value === 'string') {
40
+ result[`process.env.${key}`] = JSON.stringify(value);
41
+ }
42
+ }
43
+ return result;
44
+ }
45
+ exports.asEnvVariables = asEnvVariables;
46
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/webpack/env/utils.ts"],"names":[],"mappings":";;;;;;AACA,2BAAkC;AAClC,gDAAwB;AACxB,oDAA4B;AAE5B;;;;GAIG;AACH,SAAgB,SAAS,CACvB,OAA8C;IAE9C,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QAC/C,sDAAsD;QACtD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,gBAAM,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAE/D,8FAA8F;QAC9F,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;gBACtD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;aAC3B;SACF;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAnBD,8BAmBC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,KAAyC;IACtE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAChD,IAAI,GAAG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACtD;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,wCAUC"}
@@ -1,23 +1,6 @@
1
- import webpack from 'webpack';
2
- /**
3
- * Плагин для зашивания переменных среды в сборки.
4
- * В браузерную сборку зашьёт только переменные с префиксом "PUBLIC_".
5
- * ВАЖНО: все зашиваемые переменные будут доступны через глобальный объект __ISOMORPH_ENV__.
6
- */
7
- export declare class EnvPlugin {
8
- options: {
9
- additional: string[];
10
- define?: Record<string, string>;
11
- };
12
- /**
13
- * @param options Опции.
14
- */
15
- constructor(options?: {
16
- additional?: string[];
17
- define?: Record<string, string>;
18
- });
19
- /**
20
- * @param compiler Компилятор.
21
- */
22
- apply(compiler: webpack.Compiler): void;
23
- }
1
+ import { EnvPlugin } from './env';
2
+ import { EnvPluginOptions } from './env/types';
3
+ import { ModuleFederationPlugin } from './module-federation';
4
+ import { ModuleFederationPluginOptions } from './module-federation/types';
5
+ export type { EnvPluginOptions, ModuleFederationPluginOptions };
6
+ export { EnvPlugin, ModuleFederationPlugin };