@hyperttp/core 1.3.3 → 1.4.0
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/Core/HyperCore.d.ts +142 -152
- package/Core/HyperCore.d.ts.map +1 -1
- package/Core/HyperCore.js +285 -286
- package/Core/HyperCore.js.map +1 -1
- package/package.json +14 -8
- package/transports/browser.d.ts +228 -0
- package/transports/browser.d.ts.map +1 -0
- package/transports/browser.js +451 -0
- package/transports/browser.js.map +1 -0
- package/transports/manager.d.ts +7 -67
- package/transports/manager.d.ts.map +1 -1
- package/transports/manager.js +138 -145
- package/transports/manager.js.map +1 -1
- package/transports/node.d.ts +0 -20
- package/transports/node.d.ts.map +1 -1
- package/transports/node.js +104 -48
- package/transports/node.js.map +1 -1
- package/utils/decompress.d.ts +16 -18
- package/utils/decompress.d.ts.map +1 -1
- package/utils/decompress.js +143 -63
- package/utils/decompress.js.map +1 -1
- package/utils/errors.d.ts +0 -10
- package/utils/errors.d.ts.map +1 -1
- package/utils/errors.js +1 -11
- package/utils/errors.js.map +1 -1
- package/utils/merge.d.ts +0 -3
- package/utils/merge.d.ts.map +1 -1
- package/utils/merge.js +0 -4
- package/utils/merge.js.map +1 -1
- package/utils/normalize.d.ts +40 -20
- package/utils/normalize.d.ts.map +1 -1
- package/utils/normalize.js +197 -63
- package/utils/normalize.js.map +1 -1
- package/utils/pipeline.d.ts +10 -30
- package/utils/pipeline.d.ts.map +1 -1
- package/utils/pipeline.js +44 -44
- package/utils/pipeline.js.map +1 -1
- package/utils/response.d.ts +95 -31
- package/utils/response.d.ts.map +1 -1
- package/utils/response.js +288 -58
- package/utils/response.js.map +1 -1
- package/utils/retryUtils.d.ts +2 -10
- package/utils/retryUtils.d.ts.map +1 -1
- package/utils/retryUtils.js +17 -21
- package/utils/retryUtils.js.map +1 -1
package/utils/normalize.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ru Карта заголовков, которые должны содержать только одно значение (не массив).
|
|
3
|
+
* Использует `Object.create(null)` для быстрого доступа без прототипа.
|
|
4
|
+
* @en Map of headers that should contain only a single value (not an array).
|
|
5
|
+
* Uses `Object.create(null)` for fast prototype-less access.
|
|
6
|
+
*/
|
|
1
7
|
const SINGLE_VALUE_HEADERS = Object.create(null);
|
|
2
|
-
const
|
|
8
|
+
for (const h of [
|
|
3
9
|
"content-type",
|
|
4
10
|
"content-length",
|
|
5
11
|
"content-encoding",
|
|
@@ -13,10 +19,13 @@ const svh = [
|
|
|
13
19
|
"location",
|
|
14
20
|
"etag",
|
|
15
21
|
"last-modified",
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
SINGLE_VALUE_HEADERS[svh[i]] = true;
|
|
22
|
+
]) {
|
|
23
|
+
SINGLE_VALUE_HEADERS[h] = 1;
|
|
19
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* @ru Кэш нормализованных HTTP-методов для избежания повторных вызовов `toUpperCase()`.
|
|
27
|
+
* @en Cache of normalized HTTP methods to avoid repeated `toUpperCase()` calls.
|
|
28
|
+
*/
|
|
20
29
|
const METHOD_CACHE = {
|
|
21
30
|
get: "GET",
|
|
22
31
|
GET: "GET",
|
|
@@ -34,49 +43,129 @@ const METHOD_CACHE = {
|
|
|
34
43
|
OPTIONS: "OPTIONS",
|
|
35
44
|
};
|
|
36
45
|
/**
|
|
37
|
-
* @ru
|
|
38
|
-
*
|
|
39
|
-
* @
|
|
40
|
-
*
|
|
46
|
+
* @ru Кэш для нормализации ключей заголовков (lowercase).
|
|
47
|
+
* Ограничен размером HEADER_CACHE_LIMIT для предотвращения утечек памяти.
|
|
48
|
+
* @en Cache for header key normalization (lowercase).
|
|
49
|
+
* Limited by HEADER_CACHE_LIMIT to prevent memory leaks.
|
|
50
|
+
*/
|
|
51
|
+
const HEADER_CACHE_LIMIT = 2048;
|
|
52
|
+
const HEADER_KEY_CACHE = Object.create(null);
|
|
53
|
+
/**
|
|
54
|
+
* @ru Список наиболее распространённых HTTP-заголовков для предзаполнения кэша.
|
|
55
|
+
* @en List of most common HTTP headers for cache pre-population.
|
|
56
|
+
*/
|
|
57
|
+
const COMMON_HEADERS = [
|
|
58
|
+
"accept",
|
|
59
|
+
"accept-encoding",
|
|
60
|
+
"accept-language",
|
|
61
|
+
"authorization",
|
|
62
|
+
"cache-control",
|
|
63
|
+
"connection",
|
|
64
|
+
"content-encoding",
|
|
65
|
+
"content-length",
|
|
66
|
+
"content-type",
|
|
67
|
+
"cookie",
|
|
68
|
+
"date",
|
|
69
|
+
"etag",
|
|
70
|
+
"host",
|
|
71
|
+
"if-modified-since",
|
|
72
|
+
"if-none-match",
|
|
73
|
+
"keep-alive",
|
|
74
|
+
"location",
|
|
75
|
+
"origin",
|
|
76
|
+
"pragma",
|
|
77
|
+
"proxy-authorization",
|
|
78
|
+
"referer",
|
|
79
|
+
"sec-ch-ua",
|
|
80
|
+
"server",
|
|
81
|
+
"set-cookie",
|
|
82
|
+
"transfer-encoding",
|
|
83
|
+
"user-agent",
|
|
84
|
+
"x-forwarded-for",
|
|
85
|
+
"x-requested-with",
|
|
86
|
+
];
|
|
87
|
+
for (let i = 0; i < COMMON_HEADERS.length; i++) {
|
|
88
|
+
const lower = COMMON_HEADERS[i];
|
|
89
|
+
HEADER_KEY_CACHE[lower] = lower;
|
|
90
|
+
}
|
|
91
|
+
let cacheSize = COMMON_HEADERS.length;
|
|
92
|
+
/**
|
|
93
|
+
* @ru Быстрая нормализация ключа заголовка в нижний регистр с кэшированием.
|
|
94
|
+
* @en Fast header key normalization to lowercase with caching.
|
|
95
|
+
* @param key - The header key to normalize.
|
|
96
|
+
* @returns The lowercase version of the key.
|
|
97
|
+
*/
|
|
98
|
+
function fastLowercaseKey(key) {
|
|
99
|
+
const cached = HEADER_KEY_CACHE[key];
|
|
100
|
+
if (cached !== undefined)
|
|
101
|
+
return cached;
|
|
102
|
+
const lower = key.toLowerCase();
|
|
103
|
+
if (cacheSize < HEADER_CACHE_LIMIT) {
|
|
104
|
+
HEADER_KEY_CACHE[key] = lower;
|
|
105
|
+
cacheSize++;
|
|
106
|
+
}
|
|
107
|
+
return lower;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* @ru Нормализует HTTP-метод в верхний регистр с кэшированием.
|
|
111
|
+
* @en Normalizes HTTP method to uppercase with caching.
|
|
112
|
+
* @param method - The HTTP method string (e.g., 'get', 'POST').
|
|
113
|
+
* @returns The normalized HTTP method in uppercase.
|
|
41
114
|
*/
|
|
42
115
|
export function normalizeMethod(method) {
|
|
43
116
|
const cached = METHOD_CACHE[method];
|
|
44
117
|
return cached !== undefined ? cached : method.toUpperCase();
|
|
45
118
|
}
|
|
46
119
|
/**
|
|
47
|
-
* @ru Извлекает
|
|
48
|
-
*
|
|
49
|
-
* @
|
|
50
|
-
*
|
|
51
|
-
* @
|
|
120
|
+
* @ru Извлекает URL из объекта запроса или строки.
|
|
121
|
+
* Поддерживает различные форматы: строка, объект с полем `url`, `_url`, или `scheme/host/path`.
|
|
122
|
+
* @en Extracts URL from a request object or string.
|
|
123
|
+
* Supports various formats: string, object with `url`, `_url`, or `scheme/host/path` fields.
|
|
124
|
+
* @param req - The request object or URL string.
|
|
125
|
+
* @returns The extracted URL string.
|
|
126
|
+
* @throws Error if URL is missing in the request.
|
|
52
127
|
*/
|
|
53
128
|
export function normalizeUrl(req) {
|
|
54
129
|
if (typeof req === "string")
|
|
55
130
|
return req;
|
|
56
|
-
if (req
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
131
|
+
if (req && typeof req === "object") {
|
|
132
|
+
const r = req;
|
|
133
|
+
const url = r.url;
|
|
134
|
+
if (typeof url === "string")
|
|
135
|
+
return url;
|
|
136
|
+
if (url != null)
|
|
137
|
+
return String(url);
|
|
138
|
+
const u = r._url;
|
|
139
|
+
if (typeof u === "string")
|
|
140
|
+
return u;
|
|
141
|
+
if (u != null)
|
|
142
|
+
return String(u);
|
|
143
|
+
const scheme = r.scheme;
|
|
144
|
+
const host = r.host;
|
|
145
|
+
const path = r.path;
|
|
146
|
+
if (typeof scheme === "string" && typeof host === "string" && typeof path === "string") {
|
|
147
|
+
return `${scheme}://${host}${path}`;
|
|
148
|
+
}
|
|
62
149
|
}
|
|
63
150
|
throw new Error("URL missing in request");
|
|
64
151
|
}
|
|
65
152
|
/**
|
|
66
|
-
* @ru
|
|
67
|
-
*
|
|
68
|
-
* @
|
|
69
|
-
*
|
|
70
|
-
* @param
|
|
153
|
+
* @ru Добавляет значение заголовка к нормализованному объекту заголовков.
|
|
154
|
+
* Учитывает специальные правила для `set-cookie`, `cookie`, и других заголовков.
|
|
155
|
+
* @en Appends a header value to the normalized headers object.
|
|
156
|
+
* Accounts for special rules for `set-cookie`, `cookie`, and other headers.
|
|
157
|
+
* @param out - The normalized headers object to modify.
|
|
158
|
+
* @param lowerKey - The lowercase header key.
|
|
159
|
+
* @param value - The header value to append.
|
|
71
160
|
*/
|
|
72
161
|
function appendHeader(out, lowerKey, value) {
|
|
73
|
-
if (SINGLE_VALUE_HEADERS[lowerKey]
|
|
162
|
+
if (SINGLE_VALUE_HEADERS[lowerKey] === 1) {
|
|
74
163
|
out[lowerKey] = value;
|
|
75
164
|
return;
|
|
76
165
|
}
|
|
77
166
|
const existing = out[lowerKey];
|
|
78
167
|
if (existing === undefined) {
|
|
79
|
-
out[lowerKey] = value;
|
|
168
|
+
out[lowerKey] = lowerKey === "set-cookie" ? [value] : value;
|
|
80
169
|
return;
|
|
81
170
|
}
|
|
82
171
|
if (lowerKey === "set-cookie") {
|
|
@@ -89,63 +178,108 @@ function appendHeader(out, lowerKey, value) {
|
|
|
89
178
|
return;
|
|
90
179
|
}
|
|
91
180
|
if (lowerKey === "cookie" || lowerKey === "cookie2") {
|
|
92
|
-
out[lowerKey] =
|
|
181
|
+
out[lowerKey] = existing + "; " + value;
|
|
93
182
|
return;
|
|
94
183
|
}
|
|
95
|
-
out[lowerKey] =
|
|
184
|
+
out[lowerKey] = existing + ", " + value;
|
|
96
185
|
}
|
|
97
186
|
/**
|
|
98
|
-
* @ru
|
|
99
|
-
*
|
|
100
|
-
* @
|
|
101
|
-
*
|
|
187
|
+
* @ru Добавляет сырое значение заголовка к нормализованному объекту.
|
|
188
|
+
* Обрабатывает массивы значений и преобразует нестроковые значения в строки.
|
|
189
|
+
* @en Appends a raw header value to the normalized headers object.
|
|
190
|
+
* Handles arrays of values and converts non-string values to strings.
|
|
191
|
+
* @param out - The normalized headers object to modify.
|
|
192
|
+
* @param lower - The lowercase header key.
|
|
193
|
+
* @param raw - The raw header value (string, array, or other).
|
|
194
|
+
*/
|
|
195
|
+
function appendRawValue(out, lower, raw) {
|
|
196
|
+
if (raw === undefined || raw === null)
|
|
197
|
+
return;
|
|
198
|
+
if (Array.isArray(raw)) {
|
|
199
|
+
const len = raw.length;
|
|
200
|
+
for (let i = 0; i < len; i++) {
|
|
201
|
+
const item = raw[i];
|
|
202
|
+
if (item !== undefined && item !== null) {
|
|
203
|
+
appendHeader(out, lower, typeof item === "string" ? item : String(item));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
appendHeader(out, lower, typeof raw === "string" ? raw : String(raw));
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* @ru Нормализует заголовки запроса в единый формат с ключами в нижнем регистре.
|
|
212
|
+
* Поддерживает различные входные форматы: объект, массив пар, плоский массив.
|
|
213
|
+
*
|
|
214
|
+
* Специальные правила:
|
|
215
|
+
* - `set-cookie` всегда хранится как массив
|
|
216
|
+
* - `cookie`/`cookie2` объединяются через `; `
|
|
217
|
+
* - Остальные множественные заголовки объединяются через `, `
|
|
218
|
+
* - Заголовки из SINGLE_VALUE_HEADERS перезаписываются (не объединяются)
|
|
219
|
+
*
|
|
220
|
+
* @en Normalizes request headers into a unified format with lowercase keys.
|
|
221
|
+
* Supports various input formats: object, array of pairs, flat array.
|
|
222
|
+
*
|
|
223
|
+
* Special rules:
|
|
224
|
+
* - `set-cookie` is always stored as an array
|
|
225
|
+
* - `cookie`/`cookie2` are joined with `; `
|
|
226
|
+
* - Other multiple headers are joined with `, `
|
|
227
|
+
* - Headers from SINGLE_VALUE_HEADERS are overwritten (not merged)
|
|
228
|
+
*
|
|
229
|
+
* @param headers - The headers to normalize (object, array of pairs, or flat array).
|
|
230
|
+
* @returns Normalized headers object with lowercase keys.
|
|
102
231
|
*/
|
|
103
232
|
export function normalizeHeaders(headers) {
|
|
104
233
|
const out = Object.create(null);
|
|
105
234
|
if (!headers || typeof headers !== "object")
|
|
106
235
|
return out;
|
|
107
|
-
if (Array.isArray(headers)) {
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
236
|
+
if (!Array.isArray(headers)) {
|
|
237
|
+
for (const key in headers) {
|
|
238
|
+
if (Object.prototype.hasOwnProperty.call(headers, key)) {
|
|
239
|
+
const val = headers[key];
|
|
240
|
+
if (val !== undefined && val !== null) {
|
|
241
|
+
appendRawValue(out, fastLowercaseKey(key), val);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return out;
|
|
246
|
+
}
|
|
247
|
+
const len = headers.length;
|
|
248
|
+
if (len === 0)
|
|
249
|
+
return out;
|
|
250
|
+
if (Array.isArray(headers[0])) {
|
|
251
|
+
for (let i = 0; i < len; i++) {
|
|
252
|
+
const pair = headers[i];
|
|
253
|
+
if (!Array.isArray(pair))
|
|
112
254
|
continue;
|
|
113
|
-
const
|
|
255
|
+
const key = pair[0];
|
|
256
|
+
if (typeof key !== "string" || key.length === 0)
|
|
257
|
+
continue;
|
|
258
|
+
const rawValue = pair[1];
|
|
114
259
|
if (rawValue === undefined || rawValue === null)
|
|
115
260
|
continue;
|
|
116
|
-
appendHeader(out, key
|
|
261
|
+
appendHeader(out, fastLowercaseKey(key), typeof rawValue === "string" ? rawValue : String(rawValue));
|
|
117
262
|
}
|
|
118
|
-
return out;
|
|
119
263
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (val === undefined || val === null)
|
|
264
|
+
else {
|
|
265
|
+
for (let i = 0; i < len; i += 2) {
|
|
266
|
+
const key = headers[i];
|
|
267
|
+
if (typeof key !== "string" || key.length === 0)
|
|
125
268
|
continue;
|
|
126
|
-
const
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const rawValue = val[i];
|
|
131
|
-
if (rawValue !== undefined && rawValue !== null) {
|
|
132
|
-
appendHeader(out, lower, typeof rawValue === "string" ? rawValue : String(rawValue));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
appendHeader(out, lower, typeof val === "string" ? val : String(val));
|
|
138
|
-
}
|
|
269
|
+
const rawValue = headers[i + 1];
|
|
270
|
+
if (rawValue === undefined || rawValue === null)
|
|
271
|
+
continue;
|
|
272
|
+
appendHeader(out, fastLowercaseKey(key), typeof rawValue === "string" ? rawValue : String(rawValue));
|
|
139
273
|
}
|
|
140
274
|
}
|
|
141
275
|
return out;
|
|
142
276
|
}
|
|
143
277
|
/**
|
|
144
|
-
* @ru
|
|
145
|
-
* @en
|
|
146
|
-
* @param method - HTTP method.
|
|
147
|
-
* @param body -
|
|
148
|
-
* @returns The body for
|
|
278
|
+
* @ru Нормализует тело запроса, удаляя его для методов GET и HEAD.
|
|
279
|
+
* @en Normalizes request body by removing it for GET and HEAD methods.
|
|
280
|
+
* @param method - The HTTP method.
|
|
281
|
+
* @param body - The request body data.
|
|
282
|
+
* @returns The body for methods that support it, or undefined for GET/HEAD.
|
|
149
283
|
*/
|
|
150
284
|
export function normalizeBody(method, body) {
|
|
151
285
|
return method === "GET" || method === "HEAD" ? undefined : body;
|
package/utils/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,oBAAoB,GAAsB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpE,KAAK,MAAM,CAAC,IAAI;IACd,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,qBAAqB;IACrB,MAAM;IACN,eAAe;IACf,qBAAqB;IACrB,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;IACN,eAAe;CACP,EAAE,CAAC;IACX,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,YAAY,GAA2B;IAC3C,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,gBAAgB,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,cAAc,GAAG;IACrB,QAAQ;IACR,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,gBAAgB;IAChB,cAAc;IACd,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,mBAAmB;IACnB,eAAe;IACf,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,qBAAqB;IACrB,SAAS;IACT,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;IACjC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAClC,CAAC;AAED,IAAI,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC;AAEtC;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,SAAS,GAAG,kBAAkB,EAAE,CAAC;QACnC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC9B,SAAS,EAAE,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,MAAM,CAAC,WAAW,EAAa,CAAC;AAC1E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAExC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAA8B,CAAC;QAEzC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,IAAI,GAAG,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACjB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QAEpB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvF,OAAO,GAAG,MAAM,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,GAAsB,EAAE,QAAgB,EAAE,KAAa;IAC3E,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpD,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;QACxC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,GAAsB,EAAE,KAAa,EAAE,GAAY;IACzE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IAE9C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACxC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAED,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,GAAG,GAAsB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAExD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;gBACvD,MAAM,GAAG,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;gBACtD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACtC,cAAc,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE1D,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;gBAAE,SAAS;YAE1D,YAAY,CACV,GAAG,EACH,gBAAgB,CAAC,GAAG,CAAC,EACrB,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE1D,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;gBAAE,SAAS;YAE1D,YAAY,CACV,GAAG,EACH,gBAAgB,CAAC,GAAG,CAAC,EACrB,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,IAAiC;IAEjC,OAAO,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC"}
|
package/utils/pipeline.d.ts
CHANGED
|
@@ -41,43 +41,23 @@ export declare function createPipelines(): PipelineContainer;
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function insertHookSorted<T>(list: HookRecord<T>[], hook: HookRecord<T>): void;
|
|
43
43
|
/**
|
|
44
|
-
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit
|
|
45
|
-
* @en Executes the pre-request pipeline. Supports short-circuiting
|
|
46
|
-
* @param hooks - Array of request hooks.
|
|
47
|
-
* @param req - Internal request object.
|
|
48
|
-
* @param ctx - Plugin context.
|
|
49
|
-
* @returns A response if short-circuited, null otherwise, or a promise.
|
|
44
|
+
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit.
|
|
45
|
+
* @en Executes the pre-request pipeline. Supports short-circuiting.
|
|
50
46
|
*/
|
|
51
|
-
export declare function executeRequestPipeline(hooks: readonly HookRecord<Required<HyperPlugin>["onRequest"]>[], req: InternalRequest, ctx: PluginContext): Promise<HttpResponse<unknown> | null> | HttpResponse<unknown> | null
|
|
47
|
+
export declare function executeRequestPipeline(hooks: readonly HookRecord<Required<HyperPlugin>["onRequest"]>[], req: InternalRequest, ctx: PluginContext): Promise<HttpResponse<unknown> | null> | HttpResponse<unknown> | null;
|
|
52
48
|
/**
|
|
53
|
-
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA).
|
|
54
|
-
* @en Executes low-level transport data transformation pipeline (DATA phase).
|
|
55
|
-
* @param hooks - Array of response data hooks.
|
|
56
|
-
* @param res - Current transport response.
|
|
57
|
-
* @param ctx - Plugin context.
|
|
58
|
-
* @returns The (possibly transformed) transport response, either directly or wrapped in a promise.
|
|
49
|
+
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA).
|
|
50
|
+
* @en Executes low-level transport data transformation pipeline (DATA phase).
|
|
59
51
|
*/
|
|
60
52
|
export declare function executeResponseDataPipeline(hooks: readonly HookRecord<Required<HyperPlugin>["onResponseData"]>[], res: TransportResponse, ctx: PluginContext): Promise<TransportResponse> | TransportResponse;
|
|
61
53
|
/**
|
|
62
|
-
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы
|
|
63
|
-
* @en Executes the post-response pipeline. Split into mutators
|
|
64
|
-
* @param mutators - Hooks that mutate the response (executed sequentially).
|
|
65
|
-
* @param sideEffects - Hooks that run in background, errors are logged but do not break the main flow.
|
|
66
|
-
* @param res - HTTP response object.
|
|
67
|
-
* @param req - Internal request object.
|
|
68
|
-
* @param ctx - Plugin context.
|
|
69
|
-
* @param logger - Optional logger for side-effect errors.
|
|
70
|
-
* @returns A promise if any mutator returns a promise, otherwise void.
|
|
54
|
+
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы и сайд-эффекты.
|
|
55
|
+
* @en Executes the post-response pipeline. Split into mutators and side-effects.
|
|
71
56
|
*/
|
|
72
57
|
export declare function executeResponsePipeline(mutators: readonly HookRecord<Required<HyperPlugin>["onResponse"]>[], sideEffects: readonly HookRecord<Required<HyperPlugin>["onResponse"]>[], res: HttpResponse<unknown>, req: InternalRequest, ctx: PluginContext, logger?: HttpClientOptions["logger"]): Promise<void> | void;
|
|
73
58
|
/**
|
|
74
|
-
* @ru Выполняет конвейер перехвата ошибок.
|
|
75
|
-
* @en Executes the error interception pipeline.
|
|
76
|
-
* @param hooks - Array of error hooks.
|
|
77
|
-
* @param error - The error that occurred.
|
|
78
|
-
* @param req - Internal request object.
|
|
79
|
-
* @param ctx - Plugin context.
|
|
80
|
-
* @returns A response if recovered, null otherwise, or a promise.
|
|
59
|
+
* @ru Выполняет конвейер перехвата ошибок.
|
|
60
|
+
* @en Executes the error interception pipeline.
|
|
81
61
|
*/
|
|
82
|
-
export declare function executeErrorPipeline(hooks: readonly HookRecord<Required<HyperPlugin>["onError"]>[], error: HyperttpError, req: InternalRequest, ctx: PluginContext): Promise<HttpResponse<unknown> | null> | HttpResponse<unknown> | null
|
|
62
|
+
export declare function executeErrorPipeline(hooks: readonly HookRecord<Required<HyperPlugin>["onError"]>[], error: HyperttpError, req: InternalRequest, ctx: PluginContext): Promise<HttpResponse<unknown> | null> | HttpResponse<unknown> | null;
|
|
83
63
|
//# sourceMappingURL=pipeline.d.ts.map
|
package/utils/pipeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/utils/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wHAAwH;IACxH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,oGAAoG;IACpG,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACnE,iGAAiG;IACjG,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;IAC7E,2HAA2H;IAC3H,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;IAC7E,+GAA+G;IAC/G,QAAQ,CAAC,mBAAmB,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/utils/pipeline.ts"],"names":[],"mappings":"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"}
|
package/utils/pipeline.js
CHANGED
|
@@ -27,12 +27,8 @@ export function insertHookSorted(list, hook) {
|
|
|
27
27
|
list.splice(i, 0, hook);
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit
|
|
31
|
-
* @en Executes the pre-request pipeline. Supports short-circuiting
|
|
32
|
-
* @param hooks - Array of request hooks.
|
|
33
|
-
* @param req - Internal request object.
|
|
34
|
-
* @param ctx - Plugin context.
|
|
35
|
-
* @returns A response if short-circuited, null otherwise, or a promise.
|
|
30
|
+
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit.
|
|
31
|
+
* @en Executes the pre-request pipeline. Supports short-circuiting.
|
|
36
32
|
*/
|
|
37
33
|
export function executeRequestPipeline(hooks, req, ctx) {
|
|
38
34
|
const len = hooks.length;
|
|
@@ -49,12 +45,8 @@ export function executeRequestPipeline(hooks, req, ctx) {
|
|
|
49
45
|
return null;
|
|
50
46
|
}
|
|
51
47
|
/**
|
|
52
|
-
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA).
|
|
53
|
-
* @en Executes low-level transport data transformation pipeline (DATA phase).
|
|
54
|
-
* @param hooks - Array of response data hooks.
|
|
55
|
-
* @param res - Current transport response.
|
|
56
|
-
* @param ctx - Plugin context.
|
|
57
|
-
* @returns The (possibly transformed) transport response, either directly or wrapped in a promise.
|
|
48
|
+
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA).
|
|
49
|
+
* @en Executes low-level transport data transformation pipeline (DATA phase).
|
|
58
50
|
*/
|
|
59
51
|
export function executeResponseDataPipeline(hooks, res, ctx) {
|
|
60
52
|
const len = hooks.length;
|
|
@@ -73,15 +65,8 @@ export function executeResponseDataPipeline(hooks, res, ctx) {
|
|
|
73
65
|
return currentRes;
|
|
74
66
|
}
|
|
75
67
|
/**
|
|
76
|
-
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы
|
|
77
|
-
* @en Executes the post-response pipeline. Split into mutators
|
|
78
|
-
* @param mutators - Hooks that mutate the response (executed sequentially).
|
|
79
|
-
* @param sideEffects - Hooks that run in background, errors are logged but do not break the main flow.
|
|
80
|
-
* @param res - HTTP response object.
|
|
81
|
-
* @param req - Internal request object.
|
|
82
|
-
* @param ctx - Plugin context.
|
|
83
|
-
* @param logger - Optional logger for side-effect errors.
|
|
84
|
-
* @returns A promise if any mutator returns a promise, otherwise void.
|
|
68
|
+
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы и сайд-эффекты.
|
|
69
|
+
* @en Executes the post-response pipeline. Split into mutators and side-effects.
|
|
85
70
|
*/
|
|
86
71
|
export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, logger) {
|
|
87
72
|
const seLen = sideEffects.length;
|
|
@@ -91,7 +76,7 @@ export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, lo
|
|
|
91
76
|
try {
|
|
92
77
|
const promise = effect.run(res, req, ctx);
|
|
93
78
|
if (promise instanceof Promise) {
|
|
94
|
-
promise
|
|
79
|
+
safelyAttachSideEffectCatch(promise, effect.name, logger);
|
|
95
80
|
}
|
|
96
81
|
}
|
|
97
82
|
catch (err) {
|
|
@@ -110,13 +95,8 @@ export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, lo
|
|
|
110
95
|
}
|
|
111
96
|
}
|
|
112
97
|
/**
|
|
113
|
-
* @ru Выполняет конвейер перехвата ошибок.
|
|
114
|
-
* @en Executes the error interception pipeline.
|
|
115
|
-
* @param hooks - Array of error hooks.
|
|
116
|
-
* @param error - The error that occurred.
|
|
117
|
-
* @param req - Internal request object.
|
|
118
|
-
* @param ctx - Plugin context.
|
|
119
|
-
* @returns A response if recovered, null otherwise, or a promise.
|
|
98
|
+
* @ru Выполняет конвейер перехвата ошибок.
|
|
99
|
+
* @en Executes the error interception pipeline.
|
|
120
100
|
*/
|
|
121
101
|
export function executeErrorPipeline(hooks, error, req, ctx) {
|
|
122
102
|
const len = hooks.length;
|
|
@@ -138,9 +118,15 @@ async function executeRequestPipelineAsync(hooks, req, ctx, startIndex, initialP
|
|
|
138
118
|
return shortCircuit;
|
|
139
119
|
const len = hooks.length;
|
|
140
120
|
for (let i = startIndex + 1; i < len; i++) {
|
|
141
|
-
const res =
|
|
142
|
-
if (res
|
|
121
|
+
const res = hooks[i].run(req, ctx);
|
|
122
|
+
if (res instanceof Promise) {
|
|
123
|
+
const asyncRes = await res;
|
|
124
|
+
if (asyncRes != null)
|
|
125
|
+
return asyncRes;
|
|
126
|
+
}
|
|
127
|
+
else if (res != null) {
|
|
143
128
|
return res;
|
|
129
|
+
}
|
|
144
130
|
}
|
|
145
131
|
return null;
|
|
146
132
|
}
|
|
@@ -152,8 +138,14 @@ async function executeResponseDataPipelineAsync(hooks, ctx, startIndex, initialP
|
|
|
152
138
|
}
|
|
153
139
|
const len = hooks.length;
|
|
154
140
|
for (let i = startIndex + 1; i < len; i++) {
|
|
155
|
-
const result =
|
|
156
|
-
if (result
|
|
141
|
+
const result = hooks[i].run(currentRes, ctx);
|
|
142
|
+
if (result instanceof Promise) {
|
|
143
|
+
const asyncResult = await result;
|
|
144
|
+
if (asyncResult != null) {
|
|
145
|
+
currentRes = asyncResult;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (result != null) {
|
|
157
149
|
currentRes = result;
|
|
158
150
|
}
|
|
159
151
|
}
|
|
@@ -163,7 +155,10 @@ async function executeMutatorsAsync(mutators, res, req, ctx, startIndex, initial
|
|
|
163
155
|
await initialPromise;
|
|
164
156
|
const len = mutators.length;
|
|
165
157
|
for (let i = startIndex + 1; i < len; i++) {
|
|
166
|
-
|
|
158
|
+
const result = mutators[i].run(res, req, ctx);
|
|
159
|
+
if (result instanceof Promise) {
|
|
160
|
+
await result;
|
|
161
|
+
}
|
|
167
162
|
}
|
|
168
163
|
}
|
|
169
164
|
async function executeErrorPipelineAsync(hooks, error, req, ctx, startIndex, initialPromise) {
|
|
@@ -172,20 +167,25 @@ async function executeErrorPipelineAsync(hooks, error, req, ctx, startIndex, ini
|
|
|
172
167
|
return recovered;
|
|
173
168
|
const len = hooks.length;
|
|
174
169
|
for (let i = startIndex + 1; i < len; i++) {
|
|
175
|
-
const res =
|
|
176
|
-
if (res
|
|
170
|
+
const res = hooks[i].run(error, req, ctx);
|
|
171
|
+
if (res instanceof Promise) {
|
|
172
|
+
const asyncRes = await res;
|
|
173
|
+
if (asyncRes != null)
|
|
174
|
+
return asyncRes;
|
|
175
|
+
}
|
|
176
|
+
else if (res != null) {
|
|
177
177
|
return res;
|
|
178
|
+
}
|
|
178
179
|
}
|
|
179
180
|
return null;
|
|
180
181
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
* @param err - Caught error.
|
|
185
|
-
* @param hookName - Name of the hook that failed.
|
|
186
|
-
* @param logger - Optional logger.
|
|
187
|
-
*/
|
|
182
|
+
function safelyAttachSideEffectCatch(promise, hookName, logger) {
|
|
183
|
+
promise.catch((err) => handleSideEffectError(err, hookName, logger));
|
|
184
|
+
}
|
|
188
185
|
function handleSideEffectError(err, hookName, logger) {
|
|
189
|
-
|
|
186
|
+
if (!logger)
|
|
187
|
+
return;
|
|
188
|
+
const errorObject = err instanceof Error ? err : new Error(String(err));
|
|
189
|
+
logger("warn", `Background hook "${hookName}" crashed: ${errorObject.message}`, errorObject);
|
|
190
190
|
}
|
|
191
191
|
//# sourceMappingURL=pipeline.js.map
|
package/utils/pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/utils/pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/utils/pipeline.ts"],"names":[],"mappings":"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"}
|