@hyperttp/core 1.3.1 → 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 +135 -77
- package/Core/HyperCore.d.ts.map +1 -1
- package/Core/HyperCore.js +280 -246
- package/Core/HyperCore.js.map +1 -1
- package/README.md +169 -96
- 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 +9 -85
- package/transports/manager.d.ts.map +1 -1
- package/transports/manager.js +152 -222
- package/transports/manager.js.map +1 -1
- package/transports/node.d.ts +4 -36
- package/transports/node.d.ts.map +1 -1
- package/transports/node.js +119 -159
- package/transports/node.js.map +1 -1
- package/utils/decompress.d.ts +16 -20
- package/utils/decompress.d.ts.map +1 -1
- package/utils/decompress.js +151 -60
- 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 +12 -22
- package/utils/merge.js.map +1 -1
- package/utils/normalize.d.ts +40 -21
- package/utils/normalize.d.ts.map +1 -1
- package/utils/normalize.js +217 -138
- 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 +105 -23
- package/utils/response.d.ts.map +1 -1
- package/utils/response.js +308 -38
- 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,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @ru
|
|
3
|
-
*
|
|
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.
|
|
4
6
|
*/
|
|
5
7
|
const SINGLE_VALUE_HEADERS = Object.create(null);
|
|
6
|
-
const
|
|
8
|
+
for (const h of [
|
|
7
9
|
"content-type",
|
|
8
10
|
"content-length",
|
|
9
11
|
"content-encoding",
|
|
@@ -17,13 +19,12 @@ const svh = [
|
|
|
17
19
|
"location",
|
|
18
20
|
"etag",
|
|
19
21
|
"last-modified",
|
|
20
|
-
]
|
|
21
|
-
|
|
22
|
-
SINGLE_VALUE_HEADERS[svh[i]] = true;
|
|
22
|
+
]) {
|
|
23
|
+
SINGLE_VALUE_HEADERS[h] = 1;
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
|
-
* @ru Кэш нормализованных
|
|
26
|
-
* @en Cache of normalized HTTP methods
|
|
26
|
+
* @ru Кэш нормализованных HTTP-методов для избежания повторных вызовов `toUpperCase()`.
|
|
27
|
+
* @en Cache of normalized HTTP methods to avoid repeated `toUpperCase()` calls.
|
|
27
28
|
*/
|
|
28
29
|
const METHOD_CACHE = {
|
|
29
30
|
get: "GET",
|
|
@@ -42,167 +43,245 @@ const METHOD_CACHE = {
|
|
|
42
43
|
OPTIONS: "OPTIONS",
|
|
43
44
|
};
|
|
44
45
|
/**
|
|
45
|
-
* @ru
|
|
46
|
-
*
|
|
47
|
-
* @
|
|
48
|
-
*
|
|
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.
|
|
49
50
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
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];
|
|
52
100
|
if (cached !== undefined)
|
|
53
101
|
return cached;
|
|
54
|
-
|
|
102
|
+
const lower = key.toLowerCase();
|
|
103
|
+
if (cacheSize < HEADER_CACHE_LIMIT) {
|
|
104
|
+
HEADER_KEY_CACHE[key] = lower;
|
|
105
|
+
cacheSize++;
|
|
106
|
+
}
|
|
107
|
+
return lower;
|
|
55
108
|
}
|
|
56
109
|
/**
|
|
57
|
-
* @ru
|
|
58
|
-
* @en
|
|
59
|
-
* @param
|
|
60
|
-
* @returns
|
|
61
|
-
|
|
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.
|
|
114
|
+
*/
|
|
115
|
+
export function normalizeMethod(method) {
|
|
116
|
+
const cached = METHOD_CACHE[method];
|
|
117
|
+
return cached !== undefined ? cached : method.toUpperCase();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
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.
|
|
62
127
|
*/
|
|
63
128
|
export function normalizeUrl(req) {
|
|
64
129
|
if (typeof req === "string")
|
|
65
130
|
return req;
|
|
66
|
-
if (req
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
+
}
|
|
72
149
|
}
|
|
73
150
|
throw new Error("URL missing in request");
|
|
74
151
|
}
|
|
75
152
|
/**
|
|
76
|
-
* @ru
|
|
77
|
-
*
|
|
78
|
-
* @
|
|
79
|
-
*
|
|
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.
|
|
160
|
+
*/
|
|
161
|
+
function appendHeader(out, lowerKey, value) {
|
|
162
|
+
if (SINGLE_VALUE_HEADERS[lowerKey] === 1) {
|
|
163
|
+
out[lowerKey] = value;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const existing = out[lowerKey];
|
|
167
|
+
if (existing === undefined) {
|
|
168
|
+
out[lowerKey] = lowerKey === "set-cookie" ? [value] : value;
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (lowerKey === "set-cookie") {
|
|
172
|
+
if (Array.isArray(existing)) {
|
|
173
|
+
existing.push(value);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
out[lowerKey] = [existing, value];
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (lowerKey === "cookie" || lowerKey === "cookie2") {
|
|
181
|
+
out[lowerKey] = existing + "; " + value;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
out[lowerKey] = existing + ", " + value;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
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.
|
|
80
231
|
*/
|
|
81
232
|
export function normalizeHeaders(headers) {
|
|
82
233
|
const out = Object.create(null);
|
|
83
234
|
if (!headers || typeof headers !== "object")
|
|
84
235
|
return out;
|
|
85
|
-
if (Array.isArray(headers)) {
|
|
86
|
-
for (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
continue;
|
|
93
|
-
const lower = key.toLowerCase();
|
|
94
|
-
const value = typeof rawValue === "string" ? rawValue : String(rawValue);
|
|
95
|
-
if (SINGLE_VALUE_HEADERS[lower] !== undefined) {
|
|
96
|
-
out[lower] = value;
|
|
97
|
-
continue;
|
|
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
|
+
}
|
|
98
243
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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))
|
|
102
254
|
continue;
|
|
103
|
-
|
|
104
|
-
if (
|
|
105
|
-
if (Array.isArray(existing)) {
|
|
106
|
-
existing.push(value);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
out[lower] = [existing, value];
|
|
110
|
-
}
|
|
255
|
+
const key = pair[0];
|
|
256
|
+
if (typeof key !== "string" || key.length === 0)
|
|
111
257
|
continue;
|
|
112
|
-
|
|
113
|
-
if (
|
|
114
|
-
out[lower] = `${existing}; ${value}`;
|
|
258
|
+
const rawValue = pair[1];
|
|
259
|
+
if (rawValue === undefined || rawValue === null)
|
|
115
260
|
continue;
|
|
116
|
-
|
|
117
|
-
out[lower] = Array.isArray(existing)
|
|
118
|
-
? `${existing.join(", ")}, ${value}`
|
|
119
|
-
: `${existing}, ${value}`;
|
|
261
|
+
appendHeader(out, fastLowercaseKey(key), typeof rawValue === "string" ? rawValue : String(rawValue));
|
|
120
262
|
}
|
|
121
|
-
return out;
|
|
122
263
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
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)
|
|
128
268
|
continue;
|
|
129
|
-
const
|
|
130
|
-
if (
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (rawValue === undefined || rawValue === null)
|
|
134
|
-
continue;
|
|
135
|
-
const value = typeof rawValue === "string" ? rawValue : String(rawValue);
|
|
136
|
-
if (SINGLE_VALUE_HEADERS[lower] !== undefined) {
|
|
137
|
-
out[lower] = value;
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
const existing = out[lower];
|
|
141
|
-
if (existing === undefined) {
|
|
142
|
-
out[lower] = value;
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
if (lower === "set-cookie") {
|
|
146
|
-
if (Array.isArray(existing)) {
|
|
147
|
-
existing.push(value);
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
out[lower] = [existing, value];
|
|
151
|
-
}
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
if (lower === "cookie" || lower === "cookie2") {
|
|
155
|
-
out[lower] = `${existing}; ${value}`;
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
out[lower] = Array.isArray(existing)
|
|
159
|
-
? `${existing.join(", ")}, ${value}`
|
|
160
|
-
: `${existing}, ${value}`;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
const value = typeof val === "string" ? val : String(val);
|
|
165
|
-
if (SINGLE_VALUE_HEADERS[lower] !== undefined) {
|
|
166
|
-
out[lower] = value;
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
const existing = out[lower];
|
|
170
|
-
if (existing === undefined) {
|
|
171
|
-
out[lower] = value;
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
if (lower === "set-cookie") {
|
|
175
|
-
if (Array.isArray(existing)) {
|
|
176
|
-
existing.push(value);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
out[lower] = [existing, value];
|
|
180
|
-
}
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
if (lower === "cookie" || lower === "cookie2") {
|
|
184
|
-
out[lower] = `${existing}; ${value}`;
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
out[lower] = Array.isArray(existing)
|
|
188
|
-
? `${existing.join(", ")}, ${value}`
|
|
189
|
-
: `${existing}, ${value}`;
|
|
190
|
-
}
|
|
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));
|
|
191
273
|
}
|
|
192
274
|
}
|
|
193
275
|
return out;
|
|
194
276
|
}
|
|
195
277
|
/**
|
|
196
|
-
* @ru Нормализует тело
|
|
197
|
-
* @en Normalizes request body
|
|
198
|
-
* @param method - HTTP method.
|
|
199
|
-
* @param body -
|
|
200
|
-
* @returns
|
|
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.
|
|
201
283
|
*/
|
|
202
284
|
export function normalizeBody(method, body) {
|
|
203
|
-
|
|
204
|
-
return undefined;
|
|
205
|
-
}
|
|
206
|
-
return body ?? undefined;
|
|
285
|
+
return method === "GET" || method === "HEAD" ? undefined : body;
|
|
207
286
|
}
|
|
208
287
|
//# sourceMappingURL=normalize.js.map
|
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":"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"}
|
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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"}
|