@hyperttp/core 1.3.0 → 1.3.3
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 +185 -8
- package/Core/HyperCore.d.ts.map +1 -1
- package/Core/HyperCore.js +246 -99
- package/Core/HyperCore.js.map +1 -1
- package/README.md +169 -96
- package/package.json +2 -2
- package/transports/manager.d.ts +61 -3
- package/transports/manager.d.ts.map +1 -1
- package/transports/manager.js +130 -93
- package/transports/manager.js.map +1 -1
- package/transports/node.d.ts +26 -9
- package/transports/node.d.ts.map +1 -1
- package/transports/node.js +63 -134
- package/transports/node.js.map +1 -1
- package/utils/decompress.d.ts +20 -0
- package/utils/decompress.d.ts.map +1 -1
- package/utils/decompress.js +75 -25
- package/utils/decompress.js.map +1 -1
- package/utils/merge.js +12 -18
- package/utils/merge.js.map +1 -1
- package/utils/normalize.d.ts +26 -1
- package/utils/normalize.d.ts.map +1 -1
- package/utils/normalize.js +68 -89
- package/utils/normalize.js.map +1 -1
- package/utils/pipeline.d.ts +42 -10
- package/utils/pipeline.d.ts.map +1 -1
- package/utils/pipeline.js +34 -15
- package/utils/pipeline.js.map +1 -1
- package/utils/response.d.ts +41 -23
- package/utils/response.d.ts.map +1 -1
- package/utils/response.js +76 -36
- package/utils/response.js.map +1 -1
- package/utils/retryUtils.d.ts +20 -0
- package/utils/retryUtils.d.ts.map +1 -1
- package/utils/retryUtils.js +24 -0
- package/utils/retryUtils.js.map +1 -1
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,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACnE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;IAC7E,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;IAC7E,QAAQ,CAAC,mBAAmB,EAAE,UAAU,CACtC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CACpC,EAAE,CAAC;IACJ,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;CAChE;AAED
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/utils/pipeline.ts"],"names":[],"mappings":"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"}
|
package/utils/pipeline.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @ru
|
|
2
|
+
* @ru Создаёт пустой контейнер для конвейеров плагинов.
|
|
3
3
|
* @en Creates an empty container for plugin pipelines.
|
|
4
|
+
* @returns An empty pipeline container.
|
|
4
5
|
*/
|
|
5
6
|
export function createPipelines() {
|
|
6
7
|
return {
|
|
@@ -14,6 +15,8 @@ export function createPipelines() {
|
|
|
14
15
|
/**
|
|
15
16
|
* @ru Вставляет хук в массив с сохранением сортировки по убыванию приоритета (деревья поиска тут избыточны).
|
|
16
17
|
* @en Inserts a hook into the array maintaining descending priority order.
|
|
18
|
+
* @param list - Target array to insert into.
|
|
19
|
+
* @param hook - Hook record to insert.
|
|
17
20
|
*/
|
|
18
21
|
export function insertHookSorted(list, hook) {
|
|
19
22
|
const len = list.length;
|
|
@@ -24,9 +27,12 @@ export function insertHookSorted(list, hook) {
|
|
|
24
27
|
list.splice(i, 0, hook);
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
|
-
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit (ранний возврат ответа).
|
|
28
|
-
* Использует Fast-Path для синхронных хуков без аллокации микротасок.
|
|
30
|
+
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit (ранний возврат ответа). Использует Fast-Path для синхронных хуков без аллокации микротасок.
|
|
29
31
|
* @en Executes the pre-request pipeline. Supports short-circuiting with fast-path for sync hooks.
|
|
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
36
|
*/
|
|
31
37
|
export function executeRequestPipeline(hooks, req, ctx) {
|
|
32
38
|
const len = hooks.length;
|
|
@@ -34,20 +40,21 @@ export function executeRequestPipeline(hooks, req, ctx) {
|
|
|
34
40
|
return null;
|
|
35
41
|
for (let i = 0; i < len; i++) {
|
|
36
42
|
const res = hooks[i].run(req, ctx);
|
|
37
|
-
// Если хук асинхронный — переключаемся на медленный асинхронный путь
|
|
38
43
|
if (res instanceof Promise) {
|
|
39
44
|
return executeRequestPipelineAsync(hooks, req, ctx, i, res);
|
|
40
45
|
}
|
|
41
|
-
// Если синхронный хук вернул ответ — прерываем выполнение (Short-Circuit)
|
|
42
46
|
if (res != null)
|
|
43
47
|
return res;
|
|
44
48
|
}
|
|
45
49
|
return null;
|
|
46
50
|
}
|
|
47
51
|
/**
|
|
48
|
-
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA).
|
|
49
|
-
*
|
|
50
|
-
* @
|
|
52
|
+
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA). Если хук возвращает измененный TransportResponse, он передается дальше по цепочке.
|
|
53
|
+
* @en Executes low-level transport data transformation pipeline (DATA phase). If a hook returns a modified TransportResponse, it is passed along the chain.
|
|
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.
|
|
51
58
|
*/
|
|
52
59
|
export function executeResponseDataPipeline(hooks, res, ctx) {
|
|
53
60
|
const len = hooks.length;
|
|
@@ -66,9 +73,15 @@ export function executeResponseDataPipeline(hooks, res, ctx) {
|
|
|
66
73
|
return currentRes;
|
|
67
74
|
}
|
|
68
75
|
/**
|
|
69
|
-
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы (последовательно) и сайд-эффекты (в фоне).
|
|
70
|
-
*
|
|
71
|
-
* @
|
|
76
|
+
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы (последовательно) и сайд-эффекты (в фоне). Оптимизирован для минимизации выделения памяти под замыкания логгера.
|
|
77
|
+
* @en Executes the post-response pipeline. Split into mutators (sequential) and side-effects (background). Optimized to minimize memory allocations for logger closures.
|
|
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.
|
|
72
85
|
*/
|
|
73
86
|
export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, logger) {
|
|
74
87
|
const seLen = sideEffects.length;
|
|
@@ -98,7 +111,12 @@ export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, lo
|
|
|
98
111
|
}
|
|
99
112
|
/**
|
|
100
113
|
* @ru Выполняет конвейер перехвата ошибок. Первый вернувший HttpResponse плагин прерывает панику.
|
|
101
|
-
* @en Executes the error interception pipeline.
|
|
114
|
+
* @en Executes the error interception pipeline. The first plugin that returns HttpResponse stops the panic.
|
|
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.
|
|
102
120
|
*/
|
|
103
121
|
export function executeErrorPipeline(hooks, error, req, ctx) {
|
|
104
122
|
const len = hooks.length;
|
|
@@ -114,9 +132,6 @@ export function executeErrorPipeline(hooks, error, req, ctx) {
|
|
|
114
132
|
}
|
|
115
133
|
return null;
|
|
116
134
|
}
|
|
117
|
-
// ═════════════════════════════════════════════════════════════════════════════════════════
|
|
118
|
-
// ВНУТРЕННИЕ АСИНХРОННЫЕ СЕГМЕНТЫ (ВЫНЕСЕНЫ ИЗ ГОРЯЧИХ ФУНКЦИЙ ДЛЯ ИДЕАЛЬНОГО JIT INLINING)
|
|
119
|
-
// ═════════════════════════════════════════════════════════════════════════════════════════
|
|
120
135
|
async function executeRequestPipelineAsync(hooks, req, ctx, startIndex, initialPromise) {
|
|
121
136
|
const shortCircuit = await initialPromise;
|
|
122
137
|
if (shortCircuit != null)
|
|
@@ -165,6 +180,10 @@ async function executeErrorPipelineAsync(hooks, error, req, ctx, startIndex, ini
|
|
|
165
180
|
}
|
|
166
181
|
/**
|
|
167
182
|
* @ru Статический обработчик падений фоновых хуков. Изолирован для предотвращения регенерации замыканий.
|
|
183
|
+
* @en Static handler for background hook crashes. Isolated to prevent closure regeneration.
|
|
184
|
+
* @param err - Caught error.
|
|
185
|
+
* @param hookName - Name of the hook that failed.
|
|
186
|
+
* @param logger - Optional logger.
|
|
168
187
|
*/
|
|
169
188
|
function handleSideEffectError(err, hookName, logger) {
|
|
170
189
|
logger?.("warn", `Background hook ${hookName} crashed: ${err instanceof Error ? err.message : String(err)}`);
|
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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"}
|
package/utils/response.d.ts
CHANGED
|
@@ -1,40 +1,58 @@
|
|
|
1
1
|
import type { HttpResponse, HyperTransport, StreamResponse } from "@hyperttp/types";
|
|
2
2
|
type TransportResponse = Awaited<ReturnType<HyperTransport["execute"]>>;
|
|
3
3
|
/**
|
|
4
|
-
* @ru Высокопроизводительный глубокий клон тела ответа.
|
|
5
|
-
* @en High-performance deep clone
|
|
6
|
-
* @param body -
|
|
4
|
+
* @ru Высокопроизводительный глубокий клон тела ответа. Safe-bypass для стримов и буферов.
|
|
5
|
+
* @en High-performance deep clone of response body. Safe-bypass for streams and buffers.
|
|
6
|
+
* @param body - The response body (any type).
|
|
7
|
+
* @returns Cloned body (or original for streams/buffers).
|
|
7
8
|
*/
|
|
8
9
|
export declare const cloneBodyFast: <T>(body: T) => T;
|
|
9
10
|
/**
|
|
10
|
-
* @ru
|
|
11
|
-
* @en
|
|
11
|
+
* @ru Класс-контейнер ответа с фиксированной структурой полей для V8 / JSC. Все методы вынесены в прототип, исключая аллокации замыканий в куче.
|
|
12
|
+
* @en Response container class with fixed field structure for V8 / JSC. All methods are on the prototype, avoiding closure allocations in the heap.
|
|
12
13
|
*/
|
|
13
|
-
export declare
|
|
14
|
-
/**
|
|
15
|
-
* @ru Быстрый маппинг сырого низкоуровневого ответа сетевого транспорта в плоский объект Hyperttp.
|
|
16
|
-
* @en Fast mapping from raw low-level network transport response into flat Hyperttp object layouts.
|
|
17
|
-
* @param rawResponse - Target instance returned by a transport executor.
|
|
18
|
-
*/
|
|
19
|
-
export declare const mapResponseFast: (rawResponse: TransportResponse) => {
|
|
14
|
+
export declare class HyperHttpResponse<T = unknown> implements HttpResponse<T> {
|
|
20
15
|
status: number;
|
|
21
16
|
headers: Record<string, string | string[]>;
|
|
22
|
-
body:
|
|
17
|
+
body: any;
|
|
23
18
|
url: string;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
data: T | null;
|
|
20
|
+
json: () => Promise<any>;
|
|
21
|
+
text: () => Promise<string>;
|
|
22
|
+
dump: () => Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* @ru Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
|
|
25
|
+
* @en Creates a HyperHttpResponse instance from a raw transport response.
|
|
26
|
+
* @param rawResponse - Raw response from transport layer.
|
|
27
|
+
*/
|
|
28
|
+
constructor(rawResponse: TransportResponse);
|
|
29
|
+
/**
|
|
30
|
+
* @ru Создаёт глубокую копию текущего ответа (безопасно для стримов и буферов).
|
|
31
|
+
* @en Creates a deep copy of the current response (safe for streams and buffers).
|
|
32
|
+
* @returns A new HttpResponse instance with cloned data.
|
|
33
|
+
*/
|
|
34
|
+
clone(): HttpResponse<T>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @ru Быстрый маппинг сырого ответа через выделение мономорфного класса.
|
|
38
|
+
* @en Fast mapping of a raw response using a monomorphic class.
|
|
39
|
+
* @param rawResponse - Raw transport response.
|
|
40
|
+
* @returns Normalized HttpResponse.
|
|
41
|
+
*/
|
|
42
|
+
export declare const mapResponseFast: (rawResponse: TransportResponse) => HttpResponse<unknown>;
|
|
27
43
|
/**
|
|
28
|
-
* @ru Быстрый маппинг сырого ответа
|
|
29
|
-
* @en Fast mapping
|
|
30
|
-
* @param rawResponse -
|
|
44
|
+
* @ru Быстрый маппинг сырого ответа в специализированный объект StreamResponse.
|
|
45
|
+
* @en Fast mapping of a raw response to a specialised StreamResponse object.
|
|
46
|
+
* @param rawResponse - Raw transport response.
|
|
47
|
+
* @returns Normalized StreamResponse.
|
|
31
48
|
*/
|
|
32
49
|
export declare const mapStreamFast: (rawResponse: TransportResponse) => StreamResponse<unknown>;
|
|
33
50
|
/**
|
|
34
|
-
* @ru Zero-allocation слияние
|
|
35
|
-
* @en Zero-allocation
|
|
36
|
-
* @param base -
|
|
37
|
-
* @param override -
|
|
51
|
+
* @ru Zero-allocation слияние заголовков с оптимизированным циклом копирования свойств.
|
|
52
|
+
* @en Zero-allocation header merging with optimised property copying loop.
|
|
53
|
+
* @param base - Base headers object (will be shallow-copied if overrides exist).
|
|
54
|
+
* @param override - Optional headers to override or add.
|
|
55
|
+
* @returns Merged headers object (new object if overrides provided, otherwise base).
|
|
38
56
|
*/
|
|
39
57
|
export declare const mergeHeadersFast: (base: Record<string, string | string[]>, override?: Record<string, string | string[]>) => Record<string, string | string[]>;
|
|
40
58
|
export {};
|
package/utils/response.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,KAAK,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,KAAK,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,CAsB1C,CAAC;AAEF;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,GAAG,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAEf,IAAI,EAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;;OAIG;gBACS,WAAW,EAAE,iBAAiB;IAY1C;;;;OAIG;IACI,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;CAehC;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,aAAa,iBAAiB,KAC7B,YAAY,CAAC,OAAO,CAEtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,aAAa,iBAAiB,KAC7B,cAAc,CAAC,OAAO,CAKvB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EACvC,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,KAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBlC,CAAC"}
|
package/utils/response.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @ru Высокопроизводительный глубокий клон тела ответа.
|
|
3
|
-
* @en High-performance deep clone
|
|
4
|
-
* @param body -
|
|
2
|
+
* @ru Высокопроизводительный глубокий клон тела ответа. Safe-bypass для стримов и буферов.
|
|
3
|
+
* @en High-performance deep clone of response body. Safe-bypass for streams and buffers.
|
|
4
|
+
* @param body - The response body (any type).
|
|
5
|
+
* @returns Cloned body (or original for streams/buffers).
|
|
5
6
|
*/
|
|
6
7
|
export const cloneBodyFast = (body) => {
|
|
7
8
|
if (typeof body !== "object" || body === null)
|
|
@@ -25,38 +26,66 @@ export const cloneBodyFast = (body) => {
|
|
|
25
26
|
}
|
|
26
27
|
};
|
|
27
28
|
/**
|
|
28
|
-
* @ru
|
|
29
|
-
* @en
|
|
29
|
+
* @ru Класс-контейнер ответа с фиксированной структурой полей для V8 / JSC. Все методы вынесены в прототип, исключая аллокации замыканий в куче.
|
|
30
|
+
* @en Response container class with fixed field structure for V8 / JSC. All methods are on the prototype, avoiding closure allocations in the heap.
|
|
30
31
|
*/
|
|
31
|
-
export
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
export class HyperHttpResponse {
|
|
33
|
+
status;
|
|
34
|
+
headers;
|
|
35
|
+
body;
|
|
36
|
+
url;
|
|
37
|
+
data;
|
|
38
|
+
json;
|
|
39
|
+
text;
|
|
40
|
+
dump;
|
|
41
|
+
/**
|
|
42
|
+
* @ru Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
|
|
43
|
+
* @en Creates a HyperHttpResponse instance from a raw transport response.
|
|
44
|
+
* @param rawResponse - Raw response from transport layer.
|
|
45
|
+
*/
|
|
46
|
+
constructor(rawResponse) {
|
|
47
|
+
this.status = rawResponse.status;
|
|
48
|
+
this.headers = rawResponse.headers;
|
|
49
|
+
this.body = rawResponse.body;
|
|
50
|
+
this.url = rawResponse.url ?? "";
|
|
51
|
+
this.data = null;
|
|
52
|
+
this.json = rawResponse.json;
|
|
53
|
+
this.text = rawResponse.text;
|
|
54
|
+
this.dump = rawResponse.dump;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @ru Создаёт глубокую копию текущего ответа (безопасно для стримов и буферов).
|
|
58
|
+
* @en Creates a deep copy of the current response (safe for streams and buffers).
|
|
59
|
+
* @returns A new HttpResponse instance with cloned data.
|
|
60
|
+
*/
|
|
61
|
+
clone() {
|
|
62
|
+
const cloned = new HyperHttpResponse({
|
|
63
|
+
status: this.status,
|
|
64
|
+
headers: { ...this.headers },
|
|
65
|
+
body: cloneBodyFast(this.body),
|
|
66
|
+
url: this.url,
|
|
67
|
+
});
|
|
68
|
+
cloned.json = this.json;
|
|
69
|
+
cloned.text = this.text;
|
|
70
|
+
cloned.dump = this.dump;
|
|
71
|
+
cloned.data = this.data;
|
|
72
|
+
return cloned;
|
|
73
|
+
}
|
|
42
74
|
}
|
|
43
75
|
/**
|
|
44
|
-
* @ru Быстрый маппинг сырого
|
|
45
|
-
* @en Fast mapping
|
|
46
|
-
* @param rawResponse -
|
|
76
|
+
* @ru Быстрый маппинг сырого ответа через выделение мономорфного класса.
|
|
77
|
+
* @en Fast mapping of a raw response using a monomorphic class.
|
|
78
|
+
* @param rawResponse - Raw transport response.
|
|
79
|
+
* @returns Normalized HttpResponse.
|
|
47
80
|
*/
|
|
48
|
-
export const mapResponseFast = (rawResponse) =>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
body: rawResponse.body,
|
|
52
|
-
url: rawResponse.url ?? "",
|
|
53
|
-
clone: responseCloneHandler,
|
|
54
|
-
data: null,
|
|
55
|
-
});
|
|
81
|
+
export const mapResponseFast = (rawResponse) => {
|
|
82
|
+
return new HyperHttpResponse(rawResponse);
|
|
83
|
+
};
|
|
56
84
|
/**
|
|
57
|
-
* @ru Быстрый маппинг сырого ответа
|
|
58
|
-
* @en Fast mapping
|
|
59
|
-
* @param rawResponse -
|
|
85
|
+
* @ru Быстрый маппинг сырого ответа в специализированный объект StreamResponse.
|
|
86
|
+
* @en Fast mapping of a raw response to a specialised StreamResponse object.
|
|
87
|
+
* @param rawResponse - Raw transport response.
|
|
88
|
+
* @returns Normalized StreamResponse.
|
|
60
89
|
*/
|
|
61
90
|
export const mapStreamFast = (rawResponse) => ({
|
|
62
91
|
status: rawResponse.status,
|
|
@@ -65,19 +94,30 @@ export const mapStreamFast = (rawResponse) => ({
|
|
|
65
94
|
url: rawResponse.url ?? "",
|
|
66
95
|
});
|
|
67
96
|
/**
|
|
68
|
-
* @ru Zero-allocation слияние
|
|
69
|
-
* @en Zero-allocation
|
|
70
|
-
* @param base -
|
|
71
|
-
* @param override -
|
|
97
|
+
* @ru Zero-allocation слияние заголовков с оптимизированным циклом копирования свойств.
|
|
98
|
+
* @en Zero-allocation header merging with optimised property copying loop.
|
|
99
|
+
* @param base - Base headers object (will be shallow-copied if overrides exist).
|
|
100
|
+
* @param override - Optional headers to override or add.
|
|
101
|
+
* @returns Merged headers object (new object if overrides provided, otherwise base).
|
|
72
102
|
*/
|
|
73
103
|
export const mergeHeadersFast = (base, override) => {
|
|
74
104
|
if (!override)
|
|
75
105
|
return base;
|
|
106
|
+
let hasKeys = false;
|
|
107
|
+
for (const key in override) {
|
|
108
|
+
if (Object.prototype.hasOwnProperty.call(override, key)) {
|
|
109
|
+
hasKeys = true;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!hasKeys)
|
|
114
|
+
return base;
|
|
115
|
+
const out = { ...base };
|
|
76
116
|
for (const key in override) {
|
|
77
117
|
if (Object.prototype.hasOwnProperty.call(override, key)) {
|
|
78
|
-
|
|
118
|
+
out[key] = override[key];
|
|
79
119
|
}
|
|
80
120
|
}
|
|
81
|
-
return
|
|
121
|
+
return out;
|
|
82
122
|
};
|
|
83
123
|
//# sourceMappingURL=response.js.map
|
package/utils/response.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAQA
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"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"}
|
package/utils/retryUtils.d.ts
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { RetryOptions } from "@hyperttp/types";
|
|
2
|
+
/**
|
|
3
|
+
* @ru Вычисляет задержку перед повторной попыткой с экспоненциальной задержкой и возможным джиттером.
|
|
4
|
+
* @en Calculates the delay before a retry using exponential backoff and optional jitter.
|
|
5
|
+
* @param attempt - Attempt number (starting from 0).
|
|
6
|
+
* @param retryOptions - Options controlling retry behavior (baseDelay, maxDelay, jitter).
|
|
7
|
+
* @returns Delay in milliseconds.
|
|
8
|
+
*/
|
|
2
9
|
export declare function calcDelay(attempt: number, retryOptions: RetryOptions): number;
|
|
10
|
+
/**
|
|
11
|
+
* @ru Пытается освободить ресурсы тела ответа, не дожидаясь полного потребления. Поддерживает методы dump, resume, destroy.
|
|
12
|
+
* @en Attempts to release response body resources without fully consuming it. Supports dump, resume, destroy methods.
|
|
13
|
+
* @param body - Response body (ReadableStream, Node.js Stream, or similar).
|
|
14
|
+
* @returns Promise that resolves after resource disposal is complete.
|
|
15
|
+
*/
|
|
3
16
|
export declare function drainBody(body: unknown): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек. Если retryStatusCodes не указаны, используется DEFAULT_RETRY_STATUS_CODES.
|
|
19
|
+
* @en Determines whether to retry for the given status code based on retry options. If retryStatusCodes is not provided, uses DEFAULT_RETRY_STATUS_CODES.
|
|
20
|
+
* @param status - HTTP status code.
|
|
21
|
+
* @param retryOptions - Options controlling retry behavior, may include retryStatusCodes.
|
|
22
|
+
* @returns True if the request should be retried.
|
|
23
|
+
*/
|
|
4
24
|
export declare function shouldRetry(status: number, retryOptions: RetryOptions): boolean;
|
|
5
25
|
//# sourceMappingURL=retryUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retryUtils.d.ts","sourceRoot":"","sources":["../../src/utils/retryUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"retryUtils.d.ts","sourceRoot":"","sources":["../../src/utils/retryUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQpD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,CAK7E;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GACzB,OAAO,CAQT"}
|
package/utils/retryUtils.js
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ru Коды статуса HTTP, по которым повторные попытки выполняются по умолчанию, если не указаны явные коды в retryOptions.
|
|
3
|
+
* @en Default HTTP status codes that trigger retries when no explicit codes are provided in retryOptions.
|
|
4
|
+
*/
|
|
1
5
|
const DEFAULT_RETRY_STATUS_CODES = [502, 503, 504];
|
|
6
|
+
/**
|
|
7
|
+
* @ru Вычисляет задержку перед повторной попыткой с экспоненциальной задержкой и возможным джиттером.
|
|
8
|
+
* @en Calculates the delay before a retry using exponential backoff and optional jitter.
|
|
9
|
+
* @param attempt - Attempt number (starting from 0).
|
|
10
|
+
* @param retryOptions - Options controlling retry behavior (baseDelay, maxDelay, jitter).
|
|
11
|
+
* @returns Delay in milliseconds.
|
|
12
|
+
*/
|
|
2
13
|
export function calcDelay(attempt, retryOptions) {
|
|
3
14
|
const { baseDelay = 1000, maxDelay = 10000, jitter = true } = retryOptions;
|
|
4
15
|
const base = Math.min(baseDelay * 2 ** attempt, maxDelay);
|
|
5
16
|
return jitter ? base * (0.75 + Math.random() * 0.5) : base;
|
|
6
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* @ru Пытается освободить ресурсы тела ответа, не дожидаясь полного потребления. Поддерживает методы dump, resume, destroy.
|
|
20
|
+
* @en Attempts to release response body resources without fully consuming it. Supports dump, resume, destroy methods.
|
|
21
|
+
* @param body - Response body (ReadableStream, Node.js Stream, or similar).
|
|
22
|
+
* @returns Promise that resolves after resource disposal is complete.
|
|
23
|
+
*/
|
|
7
24
|
export async function drainBody(body) {
|
|
8
25
|
if (!body || typeof body !== "object")
|
|
9
26
|
return;
|
|
@@ -25,6 +42,13 @@ export async function drainBody(body) {
|
|
|
25
42
|
//
|
|
26
43
|
}
|
|
27
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек. Если retryStatusCodes не указаны, используется DEFAULT_RETRY_STATUS_CODES.
|
|
47
|
+
* @en Determines whether to retry for the given status code based on retry options. If retryStatusCodes is not provided, uses DEFAULT_RETRY_STATUS_CODES.
|
|
48
|
+
* @param status - HTTP status code.
|
|
49
|
+
* @param retryOptions - Options controlling retry behavior, may include retryStatusCodes.
|
|
50
|
+
* @returns True if the request should be retried.
|
|
51
|
+
*/
|
|
28
52
|
export function shouldRetry(status, retryOptions) {
|
|
29
53
|
const codes = retryOptions.retryStatusCodes;
|
|
30
54
|
if (codes && codes.length > 0) {
|
package/utils/retryUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retryUtils.js","sourceRoot":"","sources":["../../src/utils/retryUtils.ts"],"names":[],"mappings":"AAEA,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,YAA0B;IACnE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC;IAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAa;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAE9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAA+B,CAAC;QAE/C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,MAAO,MAAM,CAAC,IAA4B,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,MAAqB,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,CAAC,OAAsB,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,EAAE;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,YAA0B;IAE1B,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC;IAE5C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC"}
|
|
1
|
+
{"version":3,"file":"retryUtils.js","sourceRoot":"","sources":["../../src/utils/retryUtils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,YAA0B;IACnE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC;IAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAa;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAE9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAA+B,CAAC;QAE/C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,MAAO,MAAM,CAAC,IAA4B,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,MAAqB,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,CAAC,OAAsB,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,EAAE;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,YAA0B;IAE1B,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC;IAE5C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC"}
|