@sima-land/isomorph 11.0.0-alpha.3 → 11.0.0-alpha.30
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/cache/types.d.ts +24 -2
- package/config/{index.d.ts → base.d.ts} +2 -2
- package/config/{index.js → base.js} +3 -3
- package/config/base.js.map +1 -0
- package/config/browser.d.ts +1 -1
- package/config/browser.js +11 -2
- package/config/browser.js.map +1 -1
- package/config/node.d.ts +1 -1
- package/config/node.js +17 -6
- package/config/node.js.map +1 -1
- package/config/types.d.ts +8 -1
- package/di/application.d.ts +10 -0
- package/{container → di}/application.js +29 -8
- package/di/application.js.map +1 -0
- package/di/container.d.ts +6 -0
- package/di/container.js +52 -0
- package/di/container.js.map +1 -0
- package/di/errors.d.ts +32 -0
- package/di/errors.js +48 -0
- package/di/errors.js.map +1 -0
- package/di/index.d.ts +6 -0
- package/di/index.js +17 -0
- package/di/index.js.map +1 -0
- package/di/preset.d.ts +9 -0
- package/di/preset.js +31 -0
- package/di/preset.js.map +1 -0
- package/di/token.d.ts +7 -0
- package/di/token.js +39 -0
- package/di/token.js.map +1 -0
- package/di/types.d.ts +88 -0
- package/{container → di}/types.js +0 -0
- package/{logger → di}/types.js.map +1 -1
- package/error-tracking/index.d.ts +24 -0
- package/error-tracking/index.js +32 -0
- package/error-tracking/index.js.map +1 -0
- package/error-tracking/types.d.ts +20 -0
- package/{error-tracker → error-tracking}/types.js +0 -0
- package/{container → error-tracking}/types.js.map +1 -1
- package/http-client/middleware/cookie.d.ts +1 -0
- package/http-client/middleware/cookie.js +4 -2
- package/http-client/middleware/cookie.js.map +1 -1
- package/http-client/middleware/headers.d.ts +13 -0
- package/http-client/middleware/headers.js +24 -0
- package/http-client/middleware/headers.js.map +1 -0
- package/http-client/middleware/log.d.ts +27 -0
- package/http-client/middleware/log.js +26 -0
- package/http-client/middleware/log.js.map +1 -0
- package/http-client/middleware/tracing.d.ts +3 -3
- package/http-client/middleware/tracing.js +22 -9
- package/http-client/middleware/tracing.js.map +1 -1
- package/http-client/sauce/index.d.ts +20 -5
- package/http-client/sauce/index.js +38 -21
- package/http-client/sauce/index.js.map +1 -1
- package/http-client/types.d.ts +1 -1
- package/http-client/utils.d.ts +14 -7
- package/http-client/utils.js +43 -12
- package/http-client/utils.js.map +1 -1
- package/http-server/errors.d.ts +11 -0
- package/http-server/errors.js +18 -0
- package/http-server/errors.js.map +1 -0
- package/http-server/handler/health-check.d.ts +1 -1
- package/http-server/handler/health-check.js +1 -1
- package/http-server/middleware/{logging.d.ts → log.d.ts} +2 -2
- package/http-server/middleware/{logging.js → log.js} +6 -5
- package/http-server/middleware/log.js.map +1 -0
- package/http-server/middleware/metrics.js +2 -2
- package/http-server/middleware/metrics.js.map +1 -1
- package/http-server/middleware/tracing.d.ts +7 -1
- package/http-server/middleware/tracing.js +20 -2
- package/http-server/middleware/tracing.js.map +1 -1
- package/http-server/template/index.js +11 -6
- package/http-server/template/index.js.map +1 -1
- package/http-server/types.d.ts +2 -0
- package/http-server/utils.d.ts +14 -5
- package/http-server/utils.js +46 -21
- package/http-server/utils.js.map +1 -1
- package/log/handler/pino.d.ts +8 -0
- package/log/handler/pino.js +29 -0
- package/log/handler/pino.js.map +1 -0
- package/log/handler/sentry.d.ts +8 -0
- package/log/handler/sentry.js +50 -0
- package/log/handler/sentry.js.map +1 -0
- package/log/index.d.ts +2 -0
- package/log/index.js +6 -0
- package/log/index.js.map +1 -0
- package/{logger/index.d.ts → log/logger.d.ts} +0 -0
- package/{logger/index.js → log/logger.js} +1 -1
- package/log/logger.js.map +1 -0
- package/log/types.d.ts +41 -0
- package/{logger → log}/types.js +0 -0
- package/{preset → log}/types.js.map +1 -1
- package/metrics/constants.d.ts +3 -0
- package/metrics/constants.js +3 -0
- package/metrics/constants.js.map +1 -1
- package/metrics/node.d.ts +7 -0
- package/metrics/node.js +1 -0
- package/metrics/node.js.map +1 -1
- package/package.json +35 -30
- package/preset/browser/index.d.ts +10 -0
- package/preset/browser/index.js +71 -0
- package/preset/browser/index.js.map +1 -0
- package/preset/node/index.d.ts +16 -11
- package/preset/node/index.js +105 -61
- package/preset/node/index.js.map +1 -1
- package/preset/node/response.d.ts +12 -8
- package/preset/node/response.js +98 -28
- package/preset/node/response.js.map +1 -1
- package/preset/parts/providers.d.ts +7 -0
- package/preset/parts/providers.js +26 -0
- package/preset/parts/providers.js.map +1 -0
- package/preset/parts/types.d.ts +8 -0
- package/preset/{types.js → parts/types.js} +0 -0
- package/{error-tracker → preset/parts}/types.js.map +1 -1
- package/preset/parts/utils.d.ts +110 -0
- package/preset/parts/utils.js +261 -0
- package/preset/parts/utils.js.map +1 -0
- package/tokens.d.ts +39 -21
- package/tokens.js +35 -20
- package/tokens.js.map +1 -1
- package/tracing/index.d.ts +9 -0
- package/tracing/index.js +20 -0
- package/tracing/index.js.map +1 -0
- package/utils/browser/analytics/data-layer.d.ts +2 -2
- package/utils/browser/analytics/data-layer.js +4 -5
- package/utils/browser/analytics/data-layer.js.map +1 -1
- package/utils/browser/analytics/oko.d.ts +3 -2
- package/utils/browser/analytics/oko.js +2 -1
- package/utils/browser/analytics/oko.js.map +1 -1
- package/utils/browser/storage/index.d.ts +8 -0
- package/utils/browser/storage/index.js +6 -1
- package/utils/browser/storage/index.js.map +1 -1
- package/utils/function.d.ts +28 -0
- package/utils/function.js +23 -0
- package/utils/function.js.map +1 -0
- package/utils/react/error-handlers/index.d.ts +11 -8
- package/utils/react/error-handlers/index.js +8 -10
- package/utils/react/error-handlers/index.js.map +1 -1
- package/utils/redux/index.d.ts +3 -0
- package/utils/redux/index.js +8 -0
- package/utils/redux/index.js.map +1 -0
- package/utils/redux/remote-data.d.ts +83 -5
- package/utils/redux/remote-data.js +83 -1
- package/utils/redux/remote-data.js.map +1 -1
- package/utils/redux-saga/index.d.ts +3 -0
- package/utils/redux-saga/index.js +8 -0
- package/utils/redux-saga/index.js.map +1 -0
- package/utils/redux-saga/middleware.d.ts +8 -0
- package/utils/redux-saga/middleware.js +84 -0
- package/utils/redux-saga/middleware.js.map +1 -0
- package/utils/redux-saga/take-chain.d.ts +2 -0
- package/utils/redux-saga/take-chain.js +2 -0
- package/utils/redux-saga/take-chain.js.map +1 -1
- package/utils/redux-saga/types.d.ts +15 -0
- package/{saga-runner → utils/redux-saga}/types.js +0 -0
- package/utils/redux-saga/types.js.map +1 -0
- package/utils/ssr/index.d.ts +41 -0
- package/utils/ssr/index.js +54 -0
- package/utils/ssr/index.js.map +1 -0
- package/utils/webpack/env/index.d.ts +18 -0
- package/utils/webpack/env/index.js +76 -0
- package/utils/webpack/env/index.js.map +1 -0
- package/utils/webpack/env/types.d.ts +11 -0
- package/utils/webpack/env/types.js +3 -0
- package/utils/webpack/env/types.js.map +1 -0
- package/utils/webpack/env/utils.d.ts +15 -0
- package/utils/webpack/env/utils.js +52 -0
- package/utils/webpack/env/utils.js.map +1 -0
- package/utils/webpack/index.d.ts +6 -0
- package/utils/webpack/index.js +8 -0
- package/utils/webpack/index.js.map +1 -0
- package/utils/webpack/module-federation/index.d.ts +7 -1
- package/utils/webpack/module-federation/index.js +11 -4
- package/utils/webpack/module-federation/index.js.map +1 -1
- package/utils/webpack/module-federation/types.d.ts +11 -3
- package/utils/webpack/module-federation/utils.d.ts +6 -0
- package/utils/webpack/module-federation/utils.js +73 -17
- package/utils/webpack/module-federation/utils.js.map +1 -1
- package/config/index.js.map +0 -1
- package/config/utils.d.ts +0 -5
- package/config/utils.js +0 -12
- package/config/utils.js.map +0 -1
- package/container/application.d.ts +0 -25
- package/container/application.js.map +0 -1
- package/container/index.d.ts +0 -18
- package/container/index.js +0 -74
- package/container/index.js.map +0 -1
- package/container/types.d.ts +0 -14
- package/error-tracker/browser.d.ts +0 -8
- package/error-tracker/browser.js +0 -40
- package/error-tracker/browser.js.map +0 -1
- package/error-tracker/node.d.ts +0 -8
- package/error-tracker/node.js +0 -40
- package/error-tracker/node.js.map +0 -1
- package/error-tracker/types.d.ts +0 -18
- package/error-tracker/utils.d.ts +0 -12
- package/error-tracker/utils.js +0 -19
- package/error-tracker/utils.js.map +0 -1
- package/http-server/middleware/logging.js.map +0 -1
- package/logger/handler/console.d.ts +0 -8
- package/logger/handler/console.js +0 -36
- package/logger/handler/console.js.map +0 -1
- package/logger/handler/sentry.d.ts +0 -8
- package/logger/handler/sentry.js +0 -36
- package/logger/handler/sentry.js.map +0 -1
- package/logger/index.js.map +0 -1
- package/logger/types.d.ts +0 -24
- package/preset/index.d.ts +0 -7
- package/preset/index.js +0 -25
- package/preset/index.js.map +0 -1
- package/preset/types.d.ts +0 -7
- package/saga-runner/index.d.ts +0 -8
- package/saga-runner/index.js +0 -79
- package/saga-runner/index.js.map +0 -1
- package/saga-runner/types.d.ts +0 -10
- 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":";;;
|
|
1
|
+
{"version":3,"file":"remote-data.js","sourceRoot":"","sources":["../../../src/utils/redux/remote-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,84 @@
|
|
|
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
|
+
/**
|
|
29
|
+
* Возвращает расширенную версию SagaMiddleware.
|
|
30
|
+
* @param handler Обработчик событий.
|
|
31
|
+
* @return Middleware.
|
|
32
|
+
*/
|
|
33
|
+
function createSagaExtendedMiddleware(handler) {
|
|
34
|
+
const privates = {};
|
|
35
|
+
const sagaMiddleware = (0, redux_saga_1.default)({
|
|
36
|
+
onError: (error, info) => {
|
|
37
|
+
handler.onSagaError(error, info);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
const middleware = api => {
|
|
41
|
+
privates.api = api;
|
|
42
|
+
return sagaMiddleware(api);
|
|
43
|
+
};
|
|
44
|
+
middleware.timeout = function timeout(milliseconds) {
|
|
45
|
+
privates.timeout = milliseconds;
|
|
46
|
+
return middleware;
|
|
47
|
+
};
|
|
48
|
+
middleware.run = async function run(saga, ...args) {
|
|
49
|
+
const { api, timeout } = privates;
|
|
50
|
+
const promises = [];
|
|
51
|
+
let ready = false;
|
|
52
|
+
let timerId;
|
|
53
|
+
if (!api) {
|
|
54
|
+
const error = new Error('Middleware is not applied to the store');
|
|
55
|
+
handler.onConfigError(error);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
promises.push(sagaMiddleware
|
|
59
|
+
.run(saga, ...args)
|
|
60
|
+
.toPromise()
|
|
61
|
+
.then(() => {
|
|
62
|
+
ready = true;
|
|
63
|
+
})
|
|
64
|
+
.finally(() => {
|
|
65
|
+
// вне зависимости от результата отключаем таймер если он есть
|
|
66
|
+
timerId !== undefined && clearTimeout(timerId);
|
|
67
|
+
}));
|
|
68
|
+
if (typeof timeout === 'number' && Number.isFinite(timeout)) {
|
|
69
|
+
promises.push(new Promise(resolve => {
|
|
70
|
+
timerId = setTimeout(() => {
|
|
71
|
+
if (!ready) {
|
|
72
|
+
handler.onTimeoutInterrupt({ timeout });
|
|
73
|
+
api.dispatch(redux_saga_1.END);
|
|
74
|
+
}
|
|
75
|
+
resolve();
|
|
76
|
+
}, timeout);
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
await Promise.race(promises);
|
|
80
|
+
};
|
|
81
|
+
return middleware;
|
|
82
|
+
}
|
|
83
|
+
exports.createSagaMiddleware = createSagaExtendedMiddleware;
|
|
84
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -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
|
|
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,15 @@
|
|
|
1
|
+
import type { Middleware } from '@reduxjs/toolkit';
|
|
2
|
+
import type { Saga, SagaMiddlewareOptions } from 'redux-saga';
|
|
3
|
+
export type SagaErrorInfo = Parameters<Required<SagaMiddlewareOptions>['onError']>[1];
|
|
4
|
+
export interface SagaInterruptInfo {
|
|
5
|
+
timeout: number;
|
|
6
|
+
}
|
|
7
|
+
export interface SagaExtendedMiddleware extends Middleware {
|
|
8
|
+
timeout(milliseconds: number): this;
|
|
9
|
+
run: <S extends Saga>(saga: S, ...args: Parameters<S>) => Promise<void>;
|
|
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
|
+
}
|
|
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 @@
|
|
|
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>;
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
try {
|
|
19
|
+
const dotenvPath = path_1.default.join(process.cwd(), `.env.${process.env.NODE_ENV}`);
|
|
20
|
+
if ((0, fs_1.existsSync)(dotenvPath)) {
|
|
21
|
+
const parsed = dotenv_1.default.parse((0, fs_1.readFileSync)(dotenvPath, 'utf-8'));
|
|
22
|
+
// @todo дёрнуть бы эту логику из пакета dotenv, https://github.com/motdotla/dotenv/issues/690
|
|
23
|
+
for (const key of Object.keys(parsed)) {
|
|
24
|
+
if (!Object.prototype.hasOwnProperty.call(result, key)) {
|
|
25
|
+
result[key] = parsed[key];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
options.onError?.(error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
exports.defineEnv = defineEnv;
|
|
37
|
+
/**
|
|
38
|
+
* Получив таблицу "название переменной среды >> значение переменной среды" вернёт определение для DefinePlugin.
|
|
39
|
+
* @param input Таблица переменных.
|
|
40
|
+
* @return Определение для DefinePlugin.
|
|
41
|
+
*/
|
|
42
|
+
function asEnvVariables(input) {
|
|
43
|
+
const result = {};
|
|
44
|
+
for (const [key, value] of Object.entries(input)) {
|
|
45
|
+
if (key && typeof value === 'string') {
|
|
46
|
+
result[`process.env.${key}`] = JSON.stringify(value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
exports.asEnvVariables = asEnvVariables;
|
|
52
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/webpack/env/utils.ts"],"names":[],"mappings":";;;;;;AACA,2BAA8C;AAC9C,gDAAwB;AACxB,oDAA4B;AAE5B;;;;GAIG;AACH,SAAgB,SAAS,CACvB,OAAuF;IAEvF,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QAC/C,IAAI;YACF,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE5E,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE;gBAC1B,MAAM,MAAM,GAAG,gBAAM,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAE/D,8FAA8F;gBAC9F,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;wBACtD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;qBAC3B;iBACF;aACF;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAC1B;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAzBD,8BAyBC;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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
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 };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModuleFederationPlugin = exports.EnvPlugin = void 0;
|
|
4
|
+
const env_1 = require("./env");
|
|
5
|
+
Object.defineProperty(exports, "EnvPlugin", { enumerable: true, get: function () { return env_1.EnvPlugin; } });
|
|
6
|
+
const module_federation_1 = require("./module-federation");
|
|
7
|
+
Object.defineProperty(exports, "ModuleFederationPlugin", { enumerable: true, get: function () { return module_federation_1.ModuleFederationPlugin; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/webpack/index.ts"],"names":[],"mappings":";;;AAAA,+BAAkC;AAMzB,0FANA,eAAS,OAMA;AAJlB,2DAA6D;AAIzC,uGAJX,0CAAsB,OAIW"}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import type { ModuleFederationPluginOptions, ReadyOptions } from './types';
|
|
2
2
|
import { Compiler } from 'webpack';
|
|
3
|
+
import { DEFAULT_SHARED } from './utils';
|
|
4
|
+
/** @internal */
|
|
3
5
|
export declare const LIBRARY_ERROR_TEXT: string;
|
|
6
|
+
/** @internal */
|
|
4
7
|
export declare const REMOTE_ERROR_TEXT: string;
|
|
5
8
|
/**
|
|
6
9
|
* Создает плагин ModuleFederation с опциями, необходимыми для оркестрации удаленных модулей в браузере.
|
|
7
10
|
*/
|
|
8
|
-
|
|
11
|
+
declare class CustomModuleFederationPlugin {
|
|
9
12
|
/**
|
|
10
13
|
* Проверенные, готовые опции.
|
|
11
14
|
*/
|
|
12
15
|
readonly readyOptions: ReadyOptions;
|
|
13
16
|
/**
|
|
14
17
|
* @param options Опции.
|
|
18
|
+
* @param options.shared Общие модули. Если не переданы, используются дефолтные модули.
|
|
19
|
+
* Для отключения общих модулей задать false.
|
|
15
20
|
*/
|
|
16
21
|
constructor(options: ModuleFederationPluginOptions);
|
|
17
22
|
/**
|
|
@@ -19,3 +24,4 @@ export declare class ModuleFederationPlugin {
|
|
|
19
24
|
*/
|
|
20
25
|
apply(compiler: Compiler): void;
|
|
21
26
|
}
|
|
27
|
+
export { CustomModuleFederationPlugin as ModuleFederationPlugin, DEFAULT_SHARED };
|