@sima-land/isomorph 11.0.0-alpha.25 → 11.0.0-alpha.27
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/di/application.js +0 -1
- package/di/application.js.map +1 -1
- package/error-tracking/types.d.ts +5 -4
- package/http-client/middleware/headers.js.map +1 -1
- package/http-client/middleware/logging.d.ts +22 -11
- package/http-client/middleware/logging.js +8 -92
- package/http-client/middleware/logging.js.map +1 -1
- package/http-client/sauce/index.d.ts +16 -4
- package/http-client/sauce/index.js +34 -32
- package/http-client/sauce/index.js.map +1 -1
- package/http-client/utils.d.ts +9 -1
- package/http-client/utils.js +22 -1
- package/http-client/utils.js.map +1 -1
- package/http-server/middleware/logging.js +2 -1
- package/http-server/middleware/logging.js.map +1 -1
- package/http-server/middleware/tracing.js +1 -1
- package/http-server/middleware/tracing.js.map +1 -1
- package/logger/handler/{console.d.ts → pino.d.ts} +3 -3
- package/logger/handler/pino.js +29 -0
- package/logger/handler/pino.js.map +1 -0
- package/logger/handler/sentry.d.ts +2 -2
- package/logger/handler/sentry.js +11 -3
- package/logger/handler/sentry.js.map +1 -1
- package/package.json +9 -10
- package/preset/browser/index.d.ts +1 -5
- package/preset/browser/index.js +9 -18
- package/preset/browser/index.js.map +1 -1
- package/preset/node/index.d.ts +4 -4
- package/preset/node/index.js +36 -21
- package/preset/node/index.js.map +1 -1
- package/preset/node/response.d.ts +0 -2
- package/preset/node/response.js +7 -11
- 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/{types.d.ts → parts/types.d.ts} +0 -0
- package/preset/{types.js → parts/types.js} +0 -0
- package/preset/{types.js.map → parts/types.js.map} +1 -1
- package/preset/parts/utils.d.ts +79 -0
- package/preset/parts/utils.js +201 -0
- package/preset/parts/utils.js.map +1 -0
- package/tokens.d.ts +5 -1
- package/tokens.js +3 -0
- package/tokens.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/redux-saga/middleware.d.ts +3 -4
- package/utils/redux-saga/middleware.js +11 -14
- package/utils/redux-saga/middleware.js.map +1 -1
- package/utils/redux-saga/types.d.ts +10 -1
- 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 -23
- package/utils/webpack/index.js +5 -65
- package/utils/webpack/index.js.map +1 -1
- package/utils/webpack/module-federation/index.d.ts +4 -1
- package/utils/webpack/module-federation/index.js +7 -2
- package/utils/webpack/module-federation/index.js.map +1 -1
- package/utils/webpack/module-federation/types.d.ts +5 -1
- package/utils/webpack/module-federation/utils.d.ts +5 -0
- package/utils/webpack/module-federation/utils.js +27 -1
- package/utils/webpack/module-federation/utils.js.map +1 -1
- package/logger/handler/console.js +0 -46
- package/logger/handler/console.js.map +0 -1
- package/preset/utils.d.ts +0 -15
- package/preset/utils.js +0 -26
- package/preset/utils.js.map +0 -1
package/di/application.js
CHANGED
|
@@ -20,7 +20,6 @@ class ApplicationImplementation {
|
|
|
20
20
|
if (this.providers.has(token)) {
|
|
21
21
|
throw new errors_1.AlreadyBoundError(token);
|
|
22
22
|
}
|
|
23
|
-
// @todo вынести реализацию Binding в отдельный класс (в целях оптимизации)
|
|
24
23
|
return {
|
|
25
24
|
toValue: value => {
|
|
26
25
|
this.providers.set(token, () => value);
|
package/di/application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/di/application.ts"],"names":[],"mappings":";;;AAWA,qCAAgE;AAChE,mCAAsC;AACtC,2CAA8C;AAE9C;;GAEG;AACU,QAAA,WAAW,GAAG,IAAA,mBAAW,EAAc,kBAAkB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,yBAAyB;IAM7B;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,CAAI,KAAe;QACrB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC7B,MAAM,IAAI,0BAAiB,CAAC,KAAK,CAAC,CAAC;SACpC;QAED,
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/di/application.ts"],"names":[],"mappings":";;;AAWA,qCAAgE;AAChE,mCAAsC;AACtC,2CAA8C;AAE9C;;GAEG;AACU,QAAA,WAAW,GAAG,IAAA,mBAAW,EAAc,kBAAkB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,yBAAyB;IAM7B;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,CAAI,KAAe;QACrB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC7B,MAAM,IAAI,0BAAiB,CAAC,KAAK,CAAC,CAAC;SACpC;QAED,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,GAAG,CAAI,KAAe;QACpB,IAAI;YACF,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACvC;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,YAAY,0BAAiB,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC9E,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAC/B;iBAAM;gBACL,MAAM,KAAK,CAAC;aACb;SACF;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC5C;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,kBAAkB;QACxB,MAAM,SAAS,GAAG,IAAA,2BAAe,GAAE,CAAC;QAEpC,SAAS,CAAC,GAAG,CAAC,mBAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEvC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACpB;QAED,MAAM,OAAO,GAAY,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAElD,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAC9C,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAC/C;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,MAAmB;QACxB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAC5C;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CACJ,MAAmB,EACnB,EAA0C;QAE1C,EAAE,CAAC,GAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAS,CAAC,CAAC;IACvD,CAAC;CACF;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,yBAAyB,EAAE,CAAC;AACzC,CAAC;AAFD,8CAEC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { SeverityLevel, Context, Extra, Breadcrumb } from '@sentry/types';
|
|
2
|
+
export interface ContextData {
|
|
3
|
+
key: string;
|
|
4
|
+
data: Context | null;
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* Данные ошибки для Sentry.
|
|
4
8
|
*/
|
|
5
9
|
export interface SentryErrorData {
|
|
6
10
|
level?: SeverityLevel;
|
|
7
|
-
context?:
|
|
8
|
-
key: string;
|
|
9
|
-
data: Context | null;
|
|
10
|
-
};
|
|
11
|
+
context?: ContextData | ContextData[];
|
|
11
12
|
extra?: {
|
|
12
13
|
key: string;
|
|
13
14
|
data: Extra | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/http-client/middleware/headers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/http-client/middleware/headers.ts"],"names":[],"mappings":";;;AAQA;;;;;;GAMG;AACH,SAAgB,qBAAqB,CACnC,GAAY,EACZ,EAAE,SAAS,KAAyB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;IAE7D,OAAO,KAAK,UAAU,WAAW,CAAC,MAAM,EAAE,IAAI;QAC5C,MAAM,OAAO,GAA2B,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9D,KAAK,MAAM,UAAU,IAAI,GAAG,CAAC,OAAO,EAAE;YACpC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE;gBACzE,OAAO,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;aACnC;SACF;QAED,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC;AAjBD,sDAiBC"}
|
|
@@ -1,16 +1,27 @@
|
|
|
1
|
+
import { AxiosResponse, AxiosRequestConfig, AxiosDefaults } from 'axios';
|
|
1
2
|
import { Middleware } from 'middleware-axios';
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
export interface SharedData {
|
|
4
|
+
config: AxiosRequestConfig;
|
|
5
|
+
defaults: AxiosDefaults;
|
|
6
|
+
}
|
|
7
|
+
export interface DoneSharedData extends SharedData {
|
|
8
|
+
response: AxiosResponse<unknown, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface FailSharedData extends SharedData {
|
|
11
|
+
error: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface LogMiddlewareHandler {
|
|
14
|
+
beforeRequest: (data: SharedData) => Promise<void> | void;
|
|
15
|
+
afterResponse: (data: DoneSharedData) => Promise<void> | void;
|
|
16
|
+
onCatch: (data: FailSharedData) => Promise<void> | void;
|
|
17
|
+
}
|
|
18
|
+
export interface LogMiddlewareHandlerFactory {
|
|
19
|
+
(data: SharedData): LogMiddlewareHandler;
|
|
20
|
+
}
|
|
21
|
+
export declare type LogMiddlewareHandlerInit = LogMiddlewareHandler | LogMiddlewareHandlerFactory;
|
|
4
22
|
/**
|
|
5
23
|
* Возвращает новый middleware для логирования запросов.
|
|
6
|
-
* @param
|
|
24
|
+
* @param handlerInit Обработчик.
|
|
7
25
|
* @return Middleware.
|
|
8
26
|
*/
|
|
9
|
-
export declare function loggingMiddleware(
|
|
10
|
-
/**
|
|
11
|
-
* Возвращает уровень на основе статуса ответа.
|
|
12
|
-
* @todo Возможно стоит вынести в preset.
|
|
13
|
-
* @param status Статус.
|
|
14
|
-
* @return Уровень.
|
|
15
|
-
*/
|
|
16
|
-
export declare function severityFromStatus(status: number | undefined): SeverityLevel;
|
|
27
|
+
export declare function loggingMiddleware(handlerInit: LogMiddlewareHandlerInit): Middleware<any>;
|
|
@@ -1,110 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const error_tracking_1 = require("../../error-tracking");
|
|
9
|
-
const utils_1 = require("../utils");
|
|
3
|
+
exports.loggingMiddleware = void 0;
|
|
10
4
|
/**
|
|
11
5
|
* Возвращает новый middleware для логирования запросов.
|
|
12
|
-
* @param
|
|
6
|
+
* @param handlerInit Обработчик.
|
|
13
7
|
* @return Middleware.
|
|
14
8
|
*/
|
|
15
|
-
function loggingMiddleware(
|
|
9
|
+
function loggingMiddleware(handlerInit) {
|
|
16
10
|
return async function log(config, next, defaults) {
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const readyURL = (0, utils_1.displayUrl)(baseURL, url);
|
|
11
|
+
const shared = { config, defaults };
|
|
12
|
+
const handler = typeof handlerInit === 'function' ? handlerInit(shared) : handlerInit;
|
|
20
13
|
try {
|
|
21
|
-
|
|
22
|
-
category: 'http.request',
|
|
23
|
-
type: 'http',
|
|
24
|
-
data: {
|
|
25
|
-
url: readyURL,
|
|
26
|
-
method: readyMethod,
|
|
27
|
-
...(params && { params }),
|
|
28
|
-
},
|
|
29
|
-
level: 'info',
|
|
30
|
-
}));
|
|
14
|
+
await handler.beforeRequest(shared);
|
|
31
15
|
const response = await next(config);
|
|
32
|
-
|
|
33
|
-
category: 'http.response',
|
|
34
|
-
type: 'http',
|
|
35
|
-
data: {
|
|
36
|
-
url: readyURL,
|
|
37
|
-
status_code: response.status,
|
|
38
|
-
method: readyMethod,
|
|
39
|
-
...(params && { params }),
|
|
40
|
-
},
|
|
41
|
-
level: 'info',
|
|
42
|
-
}));
|
|
16
|
+
await handler.afterResponse({ ...shared, response });
|
|
43
17
|
}
|
|
44
18
|
catch (error) {
|
|
45
|
-
|
|
46
|
-
const statusCode = error.response?.status || 'UNKNOWN';
|
|
47
|
-
logger.error(new error_tracking_1.SentryError(`HTTP request failed with status code ${statusCode}, error message: ${error.message}`, {
|
|
48
|
-
// @todo в будущем дать возможность конфигурировать
|
|
49
|
-
level: severityFromStatus(error.response?.status),
|
|
50
|
-
context: {
|
|
51
|
-
key: 'Request details',
|
|
52
|
-
data: {
|
|
53
|
-
error,
|
|
54
|
-
url,
|
|
55
|
-
baseURL,
|
|
56
|
-
method: readyMethod,
|
|
57
|
-
headers: {
|
|
58
|
-
...config.headers,
|
|
59
|
-
...defaults.headers[readyMethod.toLowerCase()],
|
|
60
|
-
},
|
|
61
|
-
...(params && { params }),
|
|
62
|
-
data,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
}));
|
|
66
|
-
logger.info(new error_tracking_1.SentryBreadcrumb({
|
|
67
|
-
category: 'http.response',
|
|
68
|
-
type: 'http',
|
|
69
|
-
data: {
|
|
70
|
-
url: readyURL,
|
|
71
|
-
status_code: statusCode,
|
|
72
|
-
method: readyMethod,
|
|
73
|
-
params,
|
|
74
|
-
},
|
|
75
|
-
level: 'error',
|
|
76
|
-
}));
|
|
77
|
-
}
|
|
19
|
+
await handler.onCatch({ ...shared, error });
|
|
78
20
|
// ВАЖНО: не скрываем ошибку, сообщаем остальному миру про нее
|
|
79
21
|
throw error;
|
|
80
22
|
}
|
|
81
23
|
};
|
|
82
24
|
}
|
|
83
25
|
exports.loggingMiddleware = loggingMiddleware;
|
|
84
|
-
/**
|
|
85
|
-
* Возвращает уровень на основе статуса ответа.
|
|
86
|
-
* @todo Возможно стоит вынести в preset.
|
|
87
|
-
* @param status Статус.
|
|
88
|
-
* @return Уровень.
|
|
89
|
-
*/
|
|
90
|
-
function severityFromStatus(status) {
|
|
91
|
-
let result;
|
|
92
|
-
if (typeof status === 'number') {
|
|
93
|
-
switch (true) {
|
|
94
|
-
case status >= 200 && status <= 299:
|
|
95
|
-
result = 'info';
|
|
96
|
-
break;
|
|
97
|
-
case status >= 300 && status <= 499:
|
|
98
|
-
result = 'warning';
|
|
99
|
-
break;
|
|
100
|
-
default:
|
|
101
|
-
result = 'error';
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
result = 'error';
|
|
106
|
-
}
|
|
107
|
-
return result;
|
|
108
|
-
}
|
|
109
|
-
exports.severityFromStatus = severityFromStatus;
|
|
110
26
|
//# sourceMappingURL=logging.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/http-client/middleware/logging.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/http-client/middleware/logging.ts"],"names":[],"mappings":";;;AA4BA;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,WAAqC;IACrE,OAAO,KAAK,UAAU,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;QAC9C,MAAM,MAAM,GAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAEtF,IAAI;YACF,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAEpC,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;SACtD;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAE5C,8DAA8D;YAC9D,MAAM,KAAK,CAAC;SACb;IACH,CAAC,CAAC;AACJ,CAAC;AAlBD,8CAkBC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AxiosInstance } from 'axios';
|
|
1
|
+
import { AxiosInstance, AxiosResponse } from 'axios';
|
|
2
|
+
import { SafetyInfo } from '../../utils/function';
|
|
2
3
|
import type { AxiosInstanceWrapper, MethodName } from 'middleware-axios';
|
|
3
4
|
export declare type SauceResponse<T = any> = {
|
|
4
5
|
ok: true;
|
|
@@ -10,10 +11,15 @@ export declare type SauceResponse<T = any> = {
|
|
|
10
11
|
data?: unknown;
|
|
11
12
|
error: any;
|
|
12
13
|
};
|
|
13
|
-
export interface SauceMethod<K extends MethodName> {
|
|
14
|
-
<T>(...args: Parameters<AxiosInstanceWrapper[K]>): Promise<SauceResponse<T>>;
|
|
14
|
+
export interface SauceMethod<K extends MethodName | 'request'> {
|
|
15
|
+
<T>(...args: Parameters<(AxiosInstance | AxiosInstanceWrapper)[K]>): Promise<SauceResponse<T>>;
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Обёртка над экземпляр axios.
|
|
19
|
+
* Все методы возвращают promise, который никогда переходят в состояние rejected.
|
|
20
|
+
*/
|
|
16
21
|
export interface Sauce {
|
|
22
|
+
readonly request: SauceMethod<'request'>;
|
|
17
23
|
readonly get: SauceMethod<'get'>;
|
|
18
24
|
readonly delete: SauceMethod<'delete'>;
|
|
19
25
|
readonly head: SauceMethod<'head'>;
|
|
@@ -23,8 +29,14 @@ export interface Sauce {
|
|
|
23
29
|
readonly patch: SauceMethod<'patch'>;
|
|
24
30
|
}
|
|
25
31
|
/**
|
|
26
|
-
* Оборачивает экземпляр axios. Все методы обертки возвращают promise,
|
|
32
|
+
* Оборачивает экземпляр axios. Все методы обертки возвращают promise, которые никогда не попадают в состояние rejected.
|
|
27
33
|
* @param instance Экземпляр axios или AxiosInstanceWrapper.
|
|
28
34
|
* @return Обертка.
|
|
29
35
|
*/
|
|
30
36
|
export declare function sauce(instance: AxiosInstance | AxiosInstanceWrapper): Sauce;
|
|
37
|
+
/**
|
|
38
|
+
* Функция форматирования результата, используемая в sauce.
|
|
39
|
+
* @param info Результат вызова метода экземпляра axios.
|
|
40
|
+
* @return Отформатированный ответ.
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatResultInfo(info: SafetyInfo<AxiosResponse>): SauceResponse;
|
|
@@ -3,46 +3,48 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.sauce = void 0;
|
|
6
|
+
exports.formatResultInfo = exports.sauce = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const function_1 = require("../../utils/function");
|
|
8
9
|
/**
|
|
9
|
-
* Оборачивает экземпляр axios. Все методы обертки возвращают promise,
|
|
10
|
+
* Оборачивает экземпляр axios. Все методы обертки возвращают promise, которые никогда не попадают в состояние rejected.
|
|
10
11
|
* @param instance Экземпляр axios или AxiosInstanceWrapper.
|
|
11
12
|
* @return Обертка.
|
|
12
13
|
*/
|
|
13
14
|
function sauce(instance) {
|
|
14
|
-
// eslint-disable-next-line require-jsdoc, jsdoc/require-jsdoc
|
|
15
|
-
function createMethod(methodName) {
|
|
16
|
-
return async function (...args) {
|
|
17
|
-
try {
|
|
18
|
-
const response = await instance[methodName](...args);
|
|
19
|
-
return {
|
|
20
|
-
ok: true,
|
|
21
|
-
status: response.status,
|
|
22
|
-
data: response.data,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
const status = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
27
|
-
const data = axios_1.default.isAxiosError(error) ? error.response?.data : undefined;
|
|
28
|
-
return {
|
|
29
|
-
ok: false,
|
|
30
|
-
status,
|
|
31
|
-
error,
|
|
32
|
-
data,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
15
|
return {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
16
|
+
request: (0, function_1.safetyAsync)(instance.request, formatResultInfo),
|
|
17
|
+
get: (0, function_1.safetyAsync)(instance.get, formatResultInfo),
|
|
18
|
+
delete: (0, function_1.safetyAsync)(instance.delete, formatResultInfo),
|
|
19
|
+
head: (0, function_1.safetyAsync)(instance.head, formatResultInfo),
|
|
20
|
+
options: (0, function_1.safetyAsync)(instance.options, formatResultInfo),
|
|
21
|
+
post: (0, function_1.safetyAsync)(instance.post, formatResultInfo),
|
|
22
|
+
put: (0, function_1.safetyAsync)(instance.put, formatResultInfo),
|
|
23
|
+
patch: (0, function_1.safetyAsync)(instance.patch, formatResultInfo),
|
|
45
24
|
};
|
|
46
25
|
}
|
|
47
26
|
exports.sauce = sauce;
|
|
27
|
+
/**
|
|
28
|
+
* Функция форматирования результата, используемая в sauce.
|
|
29
|
+
* @param info Результат вызова метода экземпляра axios.
|
|
30
|
+
* @return Отформатированный ответ.
|
|
31
|
+
*/
|
|
32
|
+
function formatResultInfo(info) {
|
|
33
|
+
if (info.ok) {
|
|
34
|
+
return {
|
|
35
|
+
ok: true,
|
|
36
|
+
data: info.result.data,
|
|
37
|
+
status: info.result.status,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
data: axios_1.default.isAxiosError(info.error) ? info.error.response?.data : undefined,
|
|
44
|
+
status: axios_1.default.isAxiosError(info.error) ? info.error.response?.status : undefined,
|
|
45
|
+
error: info.error,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.formatResultInfo = formatResultInfo;
|
|
48
50
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http-client/sauce/index.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http-client/sauce/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA4D;AAC5D,mDAA+D;AAoC/D;;;;GAIG;AACH,SAAgB,KAAK,CAAC,QAA8C;IAClE,OAAO;QACL,OAAO,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACxD,GAAG,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;QAChD,MAAM,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;QACtD,IAAI,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;QAClD,OAAO,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACxD,IAAI,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;QAClD,GAAG,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;QAChD,KAAK,EAAE,IAAA,sBAAW,EAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;KACrD,CAAC;AACJ,CAAC;AAXD,sBAWC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAA+B;IAC9D,IAAI,IAAI,CAAC,EAAE,EAAE;QACX,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;SAC3B,CAAC;KACH;SAAM;QACL,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,eAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS;YAC5E,MAAM,EAAE,eAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS;YAChF,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;KACH;AACH,CAAC;AAfD,4CAeC"}
|
package/http-client/utils.d.ts
CHANGED
|
@@ -5,4 +5,12 @@ import type { AxiosDefaults, AxiosRequestConfig } from 'axios';
|
|
|
5
5
|
* @param url Опция url.
|
|
6
6
|
* @return Отображение. Не является валидным URL.
|
|
7
7
|
*/
|
|
8
|
-
export declare function displayUrl(baseURL?:
|
|
8
|
+
export declare function displayUrl(baseURL?: AxiosRequestConfig['baseURL'], url?: AxiosRequestConfig['url']): string;
|
|
9
|
+
/**
|
|
10
|
+
* Сливает в один объект конфиг и настройки по умолчанию.
|
|
11
|
+
* @param config Конфигурация запроса.
|
|
12
|
+
* @param defaults Настройки по умолчанию для экземпляра axios.
|
|
13
|
+
* @return Уточненная итоговая конфигурация.
|
|
14
|
+
* @todo Было бы круто заменить на axios/core/mergeConfig (https://github.com/axios/axios/blob/v1.x/lib/core/mergeConfig.js).
|
|
15
|
+
*/
|
|
16
|
+
export declare function applyAxiosDefaults(config: AxiosRequestConfig, defaults: AxiosDefaults): Omit<AxiosRequestConfig, 'method'> & Pick<Required<AxiosRequestConfig>, 'method'>;
|
package/http-client/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.displayUrl = void 0;
|
|
3
|
+
exports.applyAxiosDefaults = exports.displayUrl = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Объединяет значения опций baseURL и url (axios) в одну строку для логирования.
|
|
6
6
|
* @param baseURL Опция baseURL.
|
|
@@ -27,4 +27,25 @@ function displayUrl(baseURL = '', url = '') {
|
|
|
27
27
|
return result;
|
|
28
28
|
}
|
|
29
29
|
exports.displayUrl = displayUrl;
|
|
30
|
+
/**
|
|
31
|
+
* Сливает в один объект конфиг и настройки по умолчанию.
|
|
32
|
+
* @param config Конфигурация запроса.
|
|
33
|
+
* @param defaults Настройки по умолчанию для экземпляра axios.
|
|
34
|
+
* @return Уточненная итоговая конфигурация.
|
|
35
|
+
* @todo Было бы круто заменить на axios/core/mergeConfig (https://github.com/axios/axios/blob/v1.x/lib/core/mergeConfig.js).
|
|
36
|
+
*/
|
|
37
|
+
function applyAxiosDefaults(config, defaults) {
|
|
38
|
+
const { headers: headersDefaults, ...restDefaults } = defaults;
|
|
39
|
+
const method = config.method || defaults.method || 'get';
|
|
40
|
+
return {
|
|
41
|
+
method,
|
|
42
|
+
...restDefaults,
|
|
43
|
+
...config,
|
|
44
|
+
headers: {
|
|
45
|
+
...headersDefaults[method.toLowerCase()],
|
|
46
|
+
...config.headers,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
exports.applyAxiosDefaults = applyAxiosDefaults;
|
|
30
51
|
//# sourceMappingURL=utils.js.map
|
package/http-client/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/http-client/utils.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,SAAgB,UAAU,CACxB,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/http-client/utils.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,SAAgB,UAAU,CACxB,UAAyC,EAAE,EAC3C,MAAiC,EAAE;IAEnC,IAAI,MAAc,CAAC;IAEnB,QAAQ,IAAI,EAAE;QACZ,KAAK,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC;YAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;YACnE,MAAM;QACR,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;YAC3B,MAAM,GAAG,OAAO,CAAC;YACjB,MAAM;QACR,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;YAC3B,MAAM,GAAG,GAAG,CAAC;YACb,MAAM;QACR,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;QACtB;YACE,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM;KACT;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAvBD,gCAuBC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,MAA0B,EAC1B,QAAuB;IAEvB,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC;IAEzD,OAAO;QACL,MAAM;QACN,GAAG,YAAY;QACf,GAAG,MAAM;QACT,OAAO,EAAE;YACP,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAmC,CAAC;YACzE,GAAG,MAAM,CAAC,OAAO;SAClB;KACF,CAAC;AACJ,CAAC;AAhBD,gDAgBC"}
|
|
@@ -10,10 +10,11 @@ const number_1 = require("../../utils/number");
|
|
|
10
10
|
* @return Middleware.
|
|
11
11
|
*/
|
|
12
12
|
function loggingMiddleware(config, logger) {
|
|
13
|
-
return function (req, res, next) {
|
|
13
|
+
return function log(req, res, next) {
|
|
14
14
|
const start = process.hrtime.bigint();
|
|
15
15
|
res.once('finish', () => {
|
|
16
16
|
const finish = process.hrtime.bigint();
|
|
17
|
+
// @todo перенести в пресеты?
|
|
17
18
|
const message = {
|
|
18
19
|
version: config.appVersion,
|
|
19
20
|
route: req.originalUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/http-server/middleware/logging.ts"],"names":[],"mappings":";;;AAGA,oCAAwC;AACxC,+CAAoD;AAEpD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAkB,EAAE,MAAc;IAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/http-server/middleware/logging.ts"],"names":[],"mappings":";;;AAGA,oCAAwC;AACxC,+CAAoD;AAEpD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAkB,EAAE,MAAc;IAClE,OAAO,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAEtC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAEvC,6BAA6B;YAC7B,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,MAAM,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,WAAW;gBACtB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,UAAU;gBACtB,SAAS,EAAE,IAAA,oBAAY,EAAC,GAAG,CAAC;gBAC5B,OAAO,EAAE,IAAA,uBAAc,EAAC,MAAM,GAAG,KAAK,CAAC;aACxC,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAtBD,8CAsBC"}
|
|
@@ -9,7 +9,7 @@ const api_1 = require("@opentelemetry/api");
|
|
|
9
9
|
* @return Middleware.
|
|
10
10
|
*/
|
|
11
11
|
function tracingMiddleware(tracer) {
|
|
12
|
-
return (req, res, next)
|
|
12
|
+
return function tracing(req, res, next) {
|
|
13
13
|
const externalContext = api_1.propagation.extract(api_1.ROOT_CONTEXT, req.headers);
|
|
14
14
|
const rootSpan = tracer.startSpan('response', undefined, externalContext);
|
|
15
15
|
rootSpan.setAttributes(getConventionalRequestAttrs(req));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/http-server/middleware/tracing.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,4CAA8E;AAG9E;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/http-server/middleware/tracing.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,4CAA8E;AAG9E;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QACpC,MAAM,eAAe,GAAG,iBAAW,CAAC,OAAO,CAAC,kBAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAE1E,QAAQ,CAAC,aAAa,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE7D,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG;YACnB,QAAQ;YACR,WAAW;SACZ,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,WAAW,EAAE,GAAG,EAAE;YACxC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,YAAY,EAAE,GAAG,EAAE;YACzC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AA5BD,8CA4BC;AAED;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,GAAY;IACtD,MAAM,MAAM,GAAuC;QACjD,cAAc,EAAE,GAAG,CAAC,WAAW;KAChC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,GAAG,CAAC,OAAO,EAAE;QACpC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YACpD,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAC7C;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,kEAYC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { BaseConfig } from '../../config/types';
|
|
2
1
|
import type { LoggerEventHandler } from '../types';
|
|
2
|
+
import type pino from 'pino';
|
|
3
3
|
/**
|
|
4
4
|
* Возвращает новый handler для logger'а для вывода событий в терминал.
|
|
5
|
-
* @param
|
|
5
|
+
* @param pinoInstance Конфиг.
|
|
6
6
|
* @return Handler.
|
|
7
7
|
*/
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function createPinoHandler(pinoInstance: pino.Logger): LoggerEventHandler;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPinoHandler = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Возвращает новый handler для logger'а для вывода событий в терминал.
|
|
6
|
+
* @param pinoInstance Конфиг.
|
|
7
|
+
* @return Handler.
|
|
8
|
+
*/
|
|
9
|
+
function createPinoHandler(pinoInstance) {
|
|
10
|
+
return function pinoHandler(event) {
|
|
11
|
+
switch (event.type) {
|
|
12
|
+
case 'log':
|
|
13
|
+
case 'info':
|
|
14
|
+
pinoInstance.info(event.data);
|
|
15
|
+
break;
|
|
16
|
+
case 'warn':
|
|
17
|
+
pinoInstance.warn(event.data);
|
|
18
|
+
break;
|
|
19
|
+
case 'debug':
|
|
20
|
+
pinoInstance.debug(event.data);
|
|
21
|
+
break;
|
|
22
|
+
case 'error':
|
|
23
|
+
pinoInstance.error(event.data);
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
exports.createPinoHandler = createPinoHandler;
|
|
29
|
+
//# sourceMappingURL=pino.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../../src/logger/handler/pino.ts"],"names":[],"mappings":";;;AAGA;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,YAAyB;IACzD,OAAO,SAAS,WAAW,CAAC,KAAK;QAC/B,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,KAAK,CAAC;YACX,KAAK,MAAM;gBACT,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,MAAM;gBACT,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,OAAO;gBACV,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,OAAO;gBACV,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM;SACT;IACH,CAAC,CAAC;AACJ,CAAC;AAlBD,8CAkBC"}
|
|
@@ -2,7 +2,7 @@ import type { LoggerEventHandler } from '../types';
|
|
|
2
2
|
import type { Hub } from '@sentry/types';
|
|
3
3
|
/**
|
|
4
4
|
* Возвращает новый handler для logger'а для отправки событий в Sentry.
|
|
5
|
-
* @param
|
|
5
|
+
* @param hubInit Sentry Hub или функция которая его вернёт.
|
|
6
6
|
* @return Handler.
|
|
7
7
|
*/
|
|
8
|
-
export declare function createSentryHandler(
|
|
8
|
+
export declare function createSentryHandler(hubInit: Hub | (() => Hub)): LoggerEventHandler;
|
package/logger/handler/sentry.js
CHANGED
|
@@ -4,11 +4,16 @@ exports.createSentryHandler = void 0;
|
|
|
4
4
|
const error_tracking_1 = require("../../error-tracking");
|
|
5
5
|
/**
|
|
6
6
|
* Возвращает новый handler для logger'а для отправки событий в Sentry.
|
|
7
|
-
* @param
|
|
7
|
+
* @param hubInit Sentry Hub или функция которая его вернёт.
|
|
8
8
|
* @return Handler.
|
|
9
9
|
*/
|
|
10
|
-
function createSentryHandler(
|
|
10
|
+
function createSentryHandler(hubInit) {
|
|
11
|
+
const getHub = typeof hubInit === 'function' ? hubInit : () => hubInit;
|
|
11
12
|
return event => {
|
|
13
|
+
// ВАЖНО: каждый входящий http-запрос должен иметь свой собственный hub
|
|
14
|
+
// подробности: https://github.com/getsentry/sentry-javascript/discussions/5648
|
|
15
|
+
// поэтому если передана функция - вызываем каждый раз (внутри обработчика)
|
|
16
|
+
const hub = getHub();
|
|
12
17
|
// error
|
|
13
18
|
if (event.type === 'error') {
|
|
14
19
|
const error = event.data;
|
|
@@ -19,7 +24,10 @@ function createSentryHandler(hub) {
|
|
|
19
24
|
scope.setLevel(level);
|
|
20
25
|
}
|
|
21
26
|
if (context) {
|
|
22
|
-
|
|
27
|
+
const list = Array.isArray(context) ? context : [context];
|
|
28
|
+
for (const item of list) {
|
|
29
|
+
scope.setContext(item.key, item.data);
|
|
30
|
+
}
|
|
23
31
|
}
|
|
24
32
|
if (extra) {
|
|
25
33
|
scope.setExtra(extra.key, extra.data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/logger/handler/sentry.ts"],"names":[],"mappings":";;;AAEA,yDAAqE;AAErE;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/logger/handler/sentry.ts"],"names":[],"mappings":";;;AAEA,yDAAqE;AAErE;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,OAA0B;IAC5D,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAEvE,OAAO,KAAK,CAAC,EAAE;QACb,uEAAuE;QACvE,+EAA+E;QAC/E,2EAA2E;QAC3E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QAErB,QAAQ;QACR,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;YAEzB,IAAI,KAAK,YAAY,4BAAW,EAAE;gBAChC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;gBAE7C,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBACpB,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;qBACvB;oBAED,IAAI,OAAO,EAAE;wBACX,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBAE1D,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;4BACvB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;yBACvC;qBACF;oBAED,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBACvC;oBAED,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aAC7B;SACF;QAED,aAAa;QACb,IAAI,KAAK,CAAC,IAAI,YAAY,iCAAgB,EAAE;YAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAEnC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAC/B;IACH,CAAC,CAAC;AACJ,CAAC;AA/CD,kDA+CC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sima-land/isomorph",
|
|
3
|
-
"version": "11.0.0-alpha.
|
|
3
|
+
"version": "11.0.0-alpha.27",
|
|
4
4
|
"description": "Tiny framework for fast start frontend microservices",
|
|
5
5
|
"author": "www.sima-land.ru team",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"prepare": "",
|
|
9
8
|
"type-check": "tsc -p . --noEmit",
|
|
10
9
|
"build:before": "rm -rf dist",
|
|
11
10
|
"build:main": "tsc --project tsconfig.build.json",
|
|
12
|
-
"build:after": "cp package.json dist/package.json",
|
|
11
|
+
"build:after": "cp package.json dist/package.json && cd dist && npm pkg delete scripts.prepare",
|
|
13
12
|
"build": "npm run build:before && npm run build:main && npm run build:after",
|
|
14
13
|
"lint": "eslint --cache ./src --ext .js,.jsx,.ts,.tsx",
|
|
15
14
|
"test": "jest",
|
|
@@ -33,7 +32,7 @@
|
|
|
33
32
|
"husky": "^8.0.1",
|
|
34
33
|
"jest": "^28.1.3",
|
|
35
34
|
"jest-environment-jsdom": "^28.1.3",
|
|
36
|
-
"typescript": "^4.
|
|
35
|
+
"typescript": "^4.8.4"
|
|
37
36
|
},
|
|
38
37
|
"dependencies": {
|
|
39
38
|
"@humanwhocodes/env": "^2.2.2",
|
|
@@ -47,21 +46,21 @@
|
|
|
47
46
|
"@opentelemetry/sdk-trace-node": "^1.5.0",
|
|
48
47
|
"@opentelemetry/semantic-conventions": "^1.5.0",
|
|
49
48
|
"@opentelemetry/tracing": "^0.24.0",
|
|
50
|
-
"@sentry/browser": "^7.
|
|
51
|
-
"@sentry/node": "^7.
|
|
49
|
+
"@sentry/browser": "^7.16.0",
|
|
50
|
+
"@sentry/node": "^7.16.0",
|
|
52
51
|
"dotenv": "^16.0.0",
|
|
53
52
|
"ejs": "^3.1.8",
|
|
54
53
|
"express": "^4.17.3",
|
|
55
54
|
"jsesc": "^3.0.2",
|
|
56
|
-
"middleware-axios": "^2.1.
|
|
57
|
-
"pino": "^8.
|
|
58
|
-
"pino-pretty": "^9.
|
|
55
|
+
"middleware-axios": "^2.1.5",
|
|
56
|
+
"pino": "^8.7.0",
|
|
57
|
+
"pino-pretty": "^9.1.1",
|
|
59
58
|
"prom-client": "^14.0.1",
|
|
60
59
|
"webpack": "^5.74.0"
|
|
61
60
|
},
|
|
62
61
|
"peerDependencies": {
|
|
63
62
|
"@reduxjs/toolkit": "^1.8.5",
|
|
64
|
-
"axios": "^
|
|
63
|
+
"axios": "^1.2.0-alpha.1",
|
|
65
64
|
"lodash": "^4.17.21",
|
|
66
65
|
"react": "^17.0.2",
|
|
67
66
|
"react-dom": "^17.0.2",
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { Resolve } from '../../di';
|
|
2
2
|
import { Logger } from '../../logger';
|
|
3
|
-
import { SagaExtendedMiddleware } from '../../utils/redux-saga';
|
|
4
|
-
import type { BaseConfig } from '../../config/types';
|
|
5
3
|
import { BridgeClientSide } from '../../utils/ssr';
|
|
6
|
-
import { StrictMap, KnownHttpApiKey } from '../types';
|
|
4
|
+
import { StrictMap, KnownHttpApiKey } from '../parts/types';
|
|
7
5
|
import { HttpClientFactory } from '../../http-client/types';
|
|
8
6
|
export declare function PresetBrowser(): import("../../di").Preset;
|
|
9
|
-
export declare function provideBaseConfig(resolve: Resolve): BaseConfig;
|
|
10
7
|
export declare function provideLogger(resolve: Resolve): Logger;
|
|
11
|
-
export declare function provideSagaMiddleware(resolve: Resolve): SagaExtendedMiddleware;
|
|
12
8
|
export declare function provideBridgeClientSide(resolve: Resolve): BridgeClientSide<unknown>;
|
|
13
9
|
export declare function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpApiKey>;
|
|
14
10
|
export declare function provideHttpClientFactory(resolve: Resolve): HttpClientFactory;
|