@hyperttp/core 1.3.3 → 1.4.1
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 +289 -286
- package/Core/HyperCore.js.map +1 -1
- package/README.md +279 -134
- 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 +35 -44
- package/utils/response.d.ts.map +1 -1
- package/utils/response.js +228 -69
- 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/response.d.ts
CHANGED
|
@@ -1,59 +1,50 @@
|
|
|
1
|
-
import type { HttpResponse, HyperTransport,
|
|
1
|
+
import type { HttpResponse, HyperTransport, HyperBody } from "@hyperttp/types";
|
|
2
2
|
type TransportResponse = Awaited<ReturnType<HyperTransport["execute"]>>;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
declare const TEXT_CACHE: unique symbol;
|
|
4
|
+
declare const JSON_CACHE: unique symbol;
|
|
5
|
+
declare const ARRAY_BUFFER_CACHE: unique symbol;
|
|
6
|
+
type CacheHolder = {
|
|
7
|
+
[TEXT_CACHE]?: string;
|
|
8
|
+
[JSON_CACHE]?: unknown;
|
|
9
|
+
[ARRAY_BUFFER_CACHE]?: ArrayBuffer | SharedArrayBuffer;
|
|
10
|
+
};
|
|
9
11
|
export declare const cloneBodyFast: <T>(body: T) => T;
|
|
10
12
|
/**
|
|
11
|
-
* @ru
|
|
12
|
-
*
|
|
13
|
+
* @ru Высокопроизводительный контейнер HTTP-ответа с ленивым парсингом и кэшированием.
|
|
14
|
+
* Гарантирует идентичный API чтения тела ответа во всех рантаймах.
|
|
15
|
+
* @en High-performance HTTP response container with lazy parsing and caching.
|
|
16
|
+
* Guarantees identical response body reading API across all runtimes.
|
|
17
|
+
* @template T - Expected type of the parsed response body.
|
|
13
18
|
*/
|
|
14
|
-
export declare class HyperHttpResponse<T = unknown> implements HttpResponse<T
|
|
19
|
+
export declare class HyperHttpResponse<T = unknown> implements HttpResponse<T>, CacheHolder {
|
|
15
20
|
status: number;
|
|
16
21
|
headers: Record<string, string | string[]>;
|
|
17
|
-
body: any;
|
|
18
|
-
url: string;
|
|
19
|
-
data: T | null;
|
|
20
|
-
json: () => Promise<any>;
|
|
21
|
-
text: () => Promise<string>;
|
|
22
|
-
dump: () => Promise<void>;
|
|
23
22
|
/**
|
|
24
|
-
* @ru
|
|
25
|
-
* @en
|
|
26
|
-
* @param rawResponse - Raw response from transport layer.
|
|
23
|
+
* @ru Тело ответа. Может быть распарсенным типом T, потоком HyperBody, буфером Uint8Array или null.
|
|
24
|
+
* @en Response body. Can be the parsed type T, a HyperBody stream, Uint8Array buffer, or null.
|
|
27
25
|
*/
|
|
26
|
+
body: T | HyperBody | Uint8Array | null;
|
|
27
|
+
url: string;
|
|
28
|
+
data: T | null;
|
|
29
|
+
[TEXT_CACHE]: string | undefined;
|
|
30
|
+
[JSON_CACHE]: unknown | undefined;
|
|
31
|
+
[ARRAY_BUFFER_CACHE]: ArrayBuffer | SharedArrayBuffer | undefined;
|
|
32
|
+
private _bodyConsumed;
|
|
28
33
|
constructor(rawResponse: TransportResponse);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
private _consumeBody;
|
|
35
|
+
arrayBuffer(): Promise<ArrayBuffer | SharedArrayBuffer>;
|
|
36
|
+
text(): Promise<string>;
|
|
37
|
+
json<TJson = T>(): Promise<TJson>;
|
|
38
|
+
dump(): Promise<void>;
|
|
34
39
|
clone(): HttpResponse<T>;
|
|
35
40
|
}
|
|
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
41
|
export declare const mapResponseFast: (rawResponse: TransportResponse) => HttpResponse<unknown>;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
export declare const mapStreamFast: (rawResponse: TransportResponse) => StreamResponse<unknown>;
|
|
50
|
-
/**
|
|
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).
|
|
56
|
-
*/
|
|
42
|
+
export declare const mapStreamFast: (rawResponse: TransportResponse) => {
|
|
43
|
+
status: number;
|
|
44
|
+
headers: Record<string, string | string[]>;
|
|
45
|
+
body: import("@hyperttp/types").TransportResponsePayload;
|
|
46
|
+
url: string;
|
|
47
|
+
};
|
|
57
48
|
export declare const mergeHeadersFast: (base: Record<string, string | string[]>, override?: Record<string, string | string[]>) => Record<string, string | string[]>;
|
|
58
49
|
export {};
|
|
59
50
|
//# sourceMappingURL=response.d.ts.map
|
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,
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/E,KAAK,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAwDxE,QAAA,MAAM,UAAU,eAA+B,CAAC;AAChD,QAAA,MAAM,UAAU,eAA+B,CAAC;AAChD,QAAA,MAAM,kBAAkB,eAAsC,CAAC;AAE/D,KAAK,WAAW,GAAG;IACjB,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IACvB,CAAC,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAAC;CACxD,CAAC;AAoBF,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,CAqB1C,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAElD;;;OAGG;IACI,IAAI,EAAE,CAAC,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC;IAExC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,GAAG,IAAI,CAAQ;IAEtB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAa;IAC7C,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAa;IAC9C,CAAC,kBAAkB,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAa;IAErF,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,iBAAiB;YAO5B,YAAY;IAkDb,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,iBAAiB,CAAC;IA2BvD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAiCvB,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC;IA2BjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;CA2BhC;AAED,eAAO,MAAM,eAAe,GAAI,aAAa,iBAAiB,KAAG,YAAY,CAAC,OAAO,CAEpF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,aAAa,iBAAiB;;;;;CAK1D,CAAC;AAEH,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,CAMlC,CAAC"}
|
package/utils/response.js
CHANGED
|
@@ -1,9 +1,68 @@
|
|
|
1
|
+
import { CURRENT_RUNTIME } from "../transports/manager.js";
|
|
1
2
|
/**
|
|
2
|
-
* @ru
|
|
3
|
-
* @en
|
|
4
|
-
* @param body - The response body (any type).
|
|
5
|
-
* @returns Cloned body (or original for streams/buffers).
|
|
3
|
+
* @ru Флаг, предотвращающий повторный патчинг ReadableStream.
|
|
4
|
+
* @en Flag to prevent repeated ReadableStream patching.
|
|
6
5
|
*/
|
|
6
|
+
let streamPatched = false;
|
|
7
|
+
/**
|
|
8
|
+
* @ru Унифицирует ReadableStream во всех средах (Node.js, Bun, Deno, Browser),
|
|
9
|
+
* добавляя методы парсинга (text, json, blob и т.д.) через оптимизированный Response API.
|
|
10
|
+
* @en Unifies ReadableStream across all environments (Node.js, Bun, Deno, Browser)
|
|
11
|
+
* by adding parsing methods (text, json, blob, etc.) via the optimized Response API.
|
|
12
|
+
*/
|
|
13
|
+
const patchReadableStream = () => {
|
|
14
|
+
if (streamPatched || typeof ReadableStream === "undefined")
|
|
15
|
+
return;
|
|
16
|
+
streamPatched = true;
|
|
17
|
+
const proto = ReadableStream.prototype;
|
|
18
|
+
const methods = {
|
|
19
|
+
dump: async function () {
|
|
20
|
+
return this.cancel().catch(() => { });
|
|
21
|
+
},
|
|
22
|
+
arrayBuffer: async function () {
|
|
23
|
+
return new Response(this).arrayBuffer();
|
|
24
|
+
},
|
|
25
|
+
text: async function () {
|
|
26
|
+
return new Response(this).text();
|
|
27
|
+
},
|
|
28
|
+
json: async function () {
|
|
29
|
+
return new Response(this).json();
|
|
30
|
+
},
|
|
31
|
+
blob: async function () {
|
|
32
|
+
return new Response(this).blob();
|
|
33
|
+
},
|
|
34
|
+
bytes: async function () {
|
|
35
|
+
const buf = await new Response(this).arrayBuffer();
|
|
36
|
+
return new Uint8Array(buf);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
for (const [name, fn] of Object.entries(methods)) {
|
|
40
|
+
if (typeof proto[name] !== "function") {
|
|
41
|
+
Object.defineProperty(proto, name, {
|
|
42
|
+
value: fn,
|
|
43
|
+
writable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
enumerable: true,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
patchReadableStream();
|
|
51
|
+
const TEXT_CACHE = Symbol("hyperttp.textCache");
|
|
52
|
+
const JSON_CACHE = Symbol("hyperttp.jsonCache");
|
|
53
|
+
const ARRAY_BUFFER_CACHE = Symbol("hyperttp.arrayBufferCache");
|
|
54
|
+
const STATIC_DECODER = new TextDecoder();
|
|
55
|
+
/**
|
|
56
|
+
* @ru Замороженный пустой объект заголовков для избежания лишних аллокаций.
|
|
57
|
+
* @en Frozen empty headers object to avoid redundant allocations.
|
|
58
|
+
*/
|
|
59
|
+
const EMPTY_HEADERS = Object.freeze({});
|
|
60
|
+
function isReadableStream(value) {
|
|
61
|
+
return (typeof value === "object" && value !== null && typeof value.getReader === "function");
|
|
62
|
+
}
|
|
63
|
+
function isBlob(value) {
|
|
64
|
+
return typeof Blob !== "undefined" && value instanceof Blob;
|
|
65
|
+
}
|
|
7
66
|
export const cloneBodyFast = (body) => {
|
|
8
67
|
if (typeof body !== "object" || body === null)
|
|
9
68
|
return body;
|
|
@@ -26,98 +85,198 @@ export const cloneBodyFast = (body) => {
|
|
|
26
85
|
}
|
|
27
86
|
};
|
|
28
87
|
/**
|
|
29
|
-
* @ru
|
|
30
|
-
*
|
|
88
|
+
* @ru Высокопроизводительный контейнер HTTP-ответа с ленивым парсингом и кэшированием.
|
|
89
|
+
* Гарантирует идентичный API чтения тела ответа во всех рантаймах.
|
|
90
|
+
* @en High-performance HTTP response container with lazy parsing and caching.
|
|
91
|
+
* Guarantees identical response body reading API across all runtimes.
|
|
92
|
+
* @template T - Expected type of the parsed response body.
|
|
31
93
|
*/
|
|
32
94
|
export class HyperHttpResponse {
|
|
33
95
|
status;
|
|
34
96
|
headers;
|
|
35
|
-
body;
|
|
36
|
-
url;
|
|
37
|
-
data;
|
|
38
|
-
json;
|
|
39
|
-
text;
|
|
40
|
-
dump;
|
|
41
97
|
/**
|
|
42
|
-
* @ru
|
|
43
|
-
* @en
|
|
44
|
-
* @param rawResponse - Raw response from transport layer.
|
|
98
|
+
* @ru Тело ответа. Может быть распарсенным типом T, потоком HyperBody, буфером Uint8Array или null.
|
|
99
|
+
* @en Response body. Can be the parsed type T, a HyperBody stream, Uint8Array buffer, or null.
|
|
45
100
|
*/
|
|
101
|
+
body;
|
|
102
|
+
url;
|
|
103
|
+
data = null;
|
|
104
|
+
[TEXT_CACHE] = undefined;
|
|
105
|
+
[JSON_CACHE] = undefined;
|
|
106
|
+
[ARRAY_BUFFER_CACHE] = undefined;
|
|
107
|
+
_bodyConsumed = false;
|
|
46
108
|
constructor(rawResponse) {
|
|
47
109
|
this.status = rawResponse.status;
|
|
48
|
-
this.headers = rawResponse.headers;
|
|
110
|
+
this.headers = rawResponse.headers || EMPTY_HEADERS;
|
|
49
111
|
this.body = rawResponse.body;
|
|
50
112
|
this.url = rawResponse.url ?? "";
|
|
51
|
-
this.data = null;
|
|
52
|
-
this.json = rawResponse.json;
|
|
53
|
-
this.text = rawResponse.text;
|
|
54
|
-
this.dump = rawResponse.dump;
|
|
55
113
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
114
|
+
async _consumeBody() {
|
|
115
|
+
if (this._bodyConsumed)
|
|
116
|
+
return;
|
|
117
|
+
this._bodyConsumed = true;
|
|
118
|
+
const body = this.body;
|
|
119
|
+
if (!body)
|
|
120
|
+
return;
|
|
121
|
+
if (typeof body === "string") {
|
|
122
|
+
this[TEXT_CACHE] = body;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (body instanceof Uint8Array) {
|
|
126
|
+
this[ARRAY_BUFFER_CACHE] =
|
|
127
|
+
body.buffer.byteLength === body.byteLength
|
|
128
|
+
? body.buffer
|
|
129
|
+
: body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength);
|
|
130
|
+
this[TEXT_CACHE] = STATIC_DECODER.decode(body);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (body instanceof ArrayBuffer) {
|
|
134
|
+
this[ARRAY_BUFFER_CACHE] = body;
|
|
135
|
+
this[TEXT_CACHE] = STATIC_DECODER.decode(body);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (CURRENT_RUNTIME === "bun" && typeof body.arrayBuffer === "function") {
|
|
139
|
+
const buf = await body.arrayBuffer();
|
|
140
|
+
this[ARRAY_BUFFER_CACHE] = buf;
|
|
141
|
+
this[TEXT_CACHE] = STATIC_DECODER.decode(buf);
|
|
142
|
+
}
|
|
143
|
+
else if (isReadableStream(body) || isBlob(body)) {
|
|
144
|
+
if (isReadableStream(body) && body.locked) {
|
|
145
|
+
throw new Error("[Hyperttp] Stream is locked.");
|
|
146
|
+
}
|
|
147
|
+
const response = new Response(body);
|
|
148
|
+
const buf = await response.arrayBuffer();
|
|
149
|
+
this[ARRAY_BUFFER_CACHE] = buf;
|
|
150
|
+
this[TEXT_CACHE] = STATIC_DECODER.decode(buf);
|
|
151
|
+
}
|
|
152
|
+
if (this[ARRAY_BUFFER_CACHE]) {
|
|
153
|
+
this.body = new Uint8Array(this[ARRAY_BUFFER_CACHE]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async arrayBuffer() {
|
|
157
|
+
if (this[ARRAY_BUFFER_CACHE] !== undefined)
|
|
158
|
+
return this[ARRAY_BUFFER_CACHE];
|
|
159
|
+
const body = this.body;
|
|
160
|
+
if (body instanceof Uint8Array) {
|
|
161
|
+
return (this[ARRAY_BUFFER_CACHE] =
|
|
162
|
+
body.buffer.byteLength === body.byteLength
|
|
163
|
+
? body.buffer
|
|
164
|
+
: body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength));
|
|
165
|
+
}
|
|
166
|
+
if (body instanceof ArrayBuffer) {
|
|
167
|
+
return (this[ARRAY_BUFFER_CACHE] = body);
|
|
168
|
+
}
|
|
169
|
+
if (CURRENT_RUNTIME === "bun" && typeof body.arrayBuffer === "function") {
|
|
170
|
+
return (this[ARRAY_BUFFER_CACHE] = await body.arrayBuffer());
|
|
171
|
+
}
|
|
172
|
+
if (isBlob(body)) {
|
|
173
|
+
return (this[ARRAY_BUFFER_CACHE] = await body.arrayBuffer());
|
|
174
|
+
}
|
|
175
|
+
await this._consumeBody();
|
|
176
|
+
return this[ARRAY_BUFFER_CACHE];
|
|
177
|
+
}
|
|
178
|
+
async text() {
|
|
179
|
+
if (this[TEXT_CACHE] !== undefined)
|
|
180
|
+
return this[TEXT_CACHE];
|
|
181
|
+
const body = this.body;
|
|
182
|
+
if (typeof body === "string") {
|
|
183
|
+
this._bodyConsumed = true;
|
|
184
|
+
return (this[TEXT_CACHE] = body);
|
|
185
|
+
}
|
|
186
|
+
if (body instanceof Uint8Array) {
|
|
187
|
+
this._bodyConsumed = true;
|
|
188
|
+
return (this[TEXT_CACHE] = STATIC_DECODER.decode(body));
|
|
189
|
+
}
|
|
190
|
+
if (body instanceof ArrayBuffer) {
|
|
191
|
+
this._bodyConsumed = true;
|
|
192
|
+
return (this[TEXT_CACHE] = STATIC_DECODER.decode(body));
|
|
193
|
+
}
|
|
194
|
+
if (CURRENT_RUNTIME === "bun" && typeof body.text === "function") {
|
|
195
|
+
this._bodyConsumed = true;
|
|
196
|
+
return (this[TEXT_CACHE] = await body.text());
|
|
197
|
+
}
|
|
198
|
+
if (isBlob(body)) {
|
|
199
|
+
this._bodyConsumed = true;
|
|
200
|
+
return (this[TEXT_CACHE] = await body.text());
|
|
201
|
+
}
|
|
202
|
+
await this._consumeBody();
|
|
203
|
+
return this[TEXT_CACHE];
|
|
204
|
+
}
|
|
205
|
+
async json() {
|
|
206
|
+
if (this[JSON_CACHE] !== undefined)
|
|
207
|
+
return this[JSON_CACHE];
|
|
208
|
+
if (this[TEXT_CACHE] !== undefined) {
|
|
209
|
+
return (this[JSON_CACHE] = JSON.parse(this[TEXT_CACHE]));
|
|
210
|
+
}
|
|
211
|
+
const body = this.body;
|
|
212
|
+
if (typeof body === "object" &&
|
|
213
|
+
body !== null &&
|
|
214
|
+
!isReadableStream(body) &&
|
|
215
|
+
!isBlob(body) &&
|
|
216
|
+
!(body instanceof Uint8Array) &&
|
|
217
|
+
!(body instanceof ArrayBuffer)) {
|
|
218
|
+
return (this[JSON_CACHE] = body);
|
|
219
|
+
}
|
|
220
|
+
if (CURRENT_RUNTIME === "bun" && typeof body.json === "function") {
|
|
221
|
+
return (this[JSON_CACHE] = await body.json());
|
|
222
|
+
}
|
|
223
|
+
const str = await this.text();
|
|
224
|
+
return (this[JSON_CACHE] = JSON.parse(str));
|
|
225
|
+
}
|
|
226
|
+
async dump() {
|
|
227
|
+
if (this._bodyConsumed)
|
|
228
|
+
return;
|
|
229
|
+
this._bodyConsumed = true;
|
|
230
|
+
const body = this.body;
|
|
231
|
+
if (isReadableStream(body)) {
|
|
232
|
+
if (!body.locked)
|
|
233
|
+
await body.cancel().catch(() => { });
|
|
234
|
+
}
|
|
235
|
+
else if (isBlob(body)) {
|
|
236
|
+
await body.arrayBuffer();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
61
239
|
clone() {
|
|
62
|
-
const cloned =
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
cloned
|
|
69
|
-
cloned
|
|
70
|
-
cloned
|
|
71
|
-
|
|
240
|
+
const cloned = Object.create(HyperHttpResponse.prototype);
|
|
241
|
+
cloned.status = this.status;
|
|
242
|
+
cloned.headers = this.headers;
|
|
243
|
+
cloned.url = this.url;
|
|
244
|
+
cloned.data = this.data ? cloneBodyFast(this.data) : null;
|
|
245
|
+
cloned._bodyConsumed = this._bodyConsumed;
|
|
246
|
+
cloned[TEXT_CACHE] = this[TEXT_CACHE];
|
|
247
|
+
cloned[JSON_CACHE] = this[JSON_CACHE];
|
|
248
|
+
cloned[ARRAY_BUFFER_CACHE] = this[ARRAY_BUFFER_CACHE];
|
|
249
|
+
if (isReadableStream(this.body) && !this._bodyConsumed) {
|
|
250
|
+
if (this.body.locked) {
|
|
251
|
+
cloned.body = this.body;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
const [b1, b2] = this.body.tee();
|
|
255
|
+
this.body = b1;
|
|
256
|
+
cloned.body = b2;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
cloned.body = this.body;
|
|
261
|
+
}
|
|
72
262
|
return cloned;
|
|
73
263
|
}
|
|
74
264
|
}
|
|
75
|
-
/**
|
|
76
|
-
* @ru Быстрый маппинг сырого ответа через выделение мономорфного класса.
|
|
77
|
-
* @en Fast mapping of a raw response using a monomorphic class.
|
|
78
|
-
* @param rawResponse - Raw transport response.
|
|
79
|
-
* @returns Normalized HttpResponse.
|
|
80
|
-
*/
|
|
81
265
|
export const mapResponseFast = (rawResponse) => {
|
|
82
266
|
return new HyperHttpResponse(rawResponse);
|
|
83
267
|
};
|
|
84
|
-
/**
|
|
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.
|
|
89
|
-
*/
|
|
90
268
|
export const mapStreamFast = (rawResponse) => ({
|
|
91
269
|
status: rawResponse.status,
|
|
92
270
|
headers: rawResponse.headers,
|
|
93
271
|
body: rawResponse.body,
|
|
94
272
|
url: rawResponse.url ?? "",
|
|
95
273
|
});
|
|
96
|
-
/**
|
|
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).
|
|
102
|
-
*/
|
|
103
274
|
export const mergeHeadersFast = (base, override) => {
|
|
104
275
|
if (!override)
|
|
105
276
|
return base;
|
|
106
|
-
|
|
107
|
-
|
|
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 };
|
|
116
|
-
for (const key in override) {
|
|
117
|
-
if (Object.prototype.hasOwnProperty.call(override, key)) {
|
|
118
|
-
out[key] = override[key];
|
|
119
|
-
}
|
|
277
|
+
for (const _ in override) {
|
|
278
|
+
return { ...base, ...override };
|
|
120
279
|
}
|
|
121
|
-
return
|
|
280
|
+
return base;
|
|
122
281
|
};
|
|
123
282
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"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"}
|
package/utils/retryUtils.d.ts
CHANGED
|
@@ -2,24 +2,16 @@ import type { RetryOptions } from "@hyperttp/types";
|
|
|
2
2
|
/**
|
|
3
3
|
* @ru Вычисляет задержку перед повторной попыткой с экспоненциальной задержкой и возможным джиттером.
|
|
4
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
5
|
*/
|
|
9
6
|
export declare function calcDelay(attempt: number, retryOptions: RetryOptions): number;
|
|
10
7
|
/**
|
|
11
8
|
* @ru Пытается освободить ресурсы тела ответа, не дожидаясь полного потребления. Поддерживает методы dump, resume, destroy.
|
|
12
9
|
* @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
10
|
*/
|
|
16
11
|
export declare function drainBody(body: unknown): Promise<void>;
|
|
17
12
|
/**
|
|
18
|
-
* @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек.
|
|
19
|
-
* @en Determines whether to retry for the given status code based on retry options.
|
|
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.
|
|
13
|
+
* @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек.
|
|
14
|
+
* @en Determines whether to retry for the given status code based on retry options.
|
|
23
15
|
*/
|
|
24
16
|
export declare function shouldRetry(status: number, retryOptions: RetryOptions): boolean;
|
|
25
17
|
//# 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;AAQpD
|
|
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;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,CAO7E;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAM/E"}
|
package/utils/retryUtils.js
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @ru Коды статуса HTTP, по которым повторные попытки выполняются по
|
|
3
|
-
* @en Default HTTP status codes that trigger retries when no explicit codes are provided
|
|
2
|
+
* @ru Коды статуса HTTP, по которым повторные попытки выполняются по умолчанию.
|
|
3
|
+
* @en Default HTTP status codes that trigger retries when no explicit codes are provided.
|
|
4
4
|
*/
|
|
5
|
-
const DEFAULT_RETRY_STATUS_CODES = [502, 503, 504];
|
|
5
|
+
const DEFAULT_RETRY_STATUS_CODES = new Set([502, 503, 504]);
|
|
6
6
|
/**
|
|
7
7
|
* @ru Вычисляет задержку перед повторной попыткой с экспоненциальной задержкой и возможным джиттером.
|
|
8
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
9
|
*/
|
|
13
10
|
export function calcDelay(attempt, retryOptions) {
|
|
14
11
|
const { baseDelay = 1000, maxDelay = 10000, jitter = true } = retryOptions;
|
|
15
|
-
const
|
|
16
|
-
|
|
12
|
+
const safeAttempt = Math.min(attempt, 31);
|
|
13
|
+
const base = Math.min(baseDelay * Math.pow(2, safeAttempt), maxDelay);
|
|
14
|
+
if (!jitter)
|
|
15
|
+
return base;
|
|
16
|
+
const jittered = base * (0.75 + Math.random() * 0.5);
|
|
17
|
+
return Math.min(Math.max(0, jittered), maxDelay);
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* @ru Пытается освободить ресурсы тела ответа, не дожидаясь полного потребления. Поддерживает методы dump, resume, destroy.
|
|
20
21
|
* @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
22
|
*/
|
|
24
23
|
export async function drainBody(body) {
|
|
25
24
|
if (!body || typeof body !== "object")
|
|
@@ -30,12 +29,12 @@ export async function drainBody(body) {
|
|
|
30
29
|
await stream.dump();
|
|
31
30
|
return;
|
|
32
31
|
}
|
|
33
|
-
if (typeof stream.resume === "function") {
|
|
34
|
-
stream.resume();
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
32
|
if (typeof stream.destroy === "function") {
|
|
38
33
|
stream.destroy();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (typeof stream.resume === "function") {
|
|
37
|
+
stream.resume();
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
catch {
|
|
@@ -43,17 +42,14 @@ export async function drainBody(body) {
|
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
46
|
-
* @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек.
|
|
47
|
-
* @en Determines whether to retry for the given status code based on retry options.
|
|
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.
|
|
45
|
+
* @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек.
|
|
46
|
+
* @en Determines whether to retry for the given status code based on retry options.
|
|
51
47
|
*/
|
|
52
48
|
export function shouldRetry(status, retryOptions) {
|
|
53
49
|
const codes = retryOptions.retryStatusCodes;
|
|
54
|
-
if (codes && codes.length > 0) {
|
|
50
|
+
if (codes !== undefined && codes.length > 0) {
|
|
55
51
|
return codes.includes(status);
|
|
56
52
|
}
|
|
57
|
-
return DEFAULT_RETRY_STATUS_CODES.
|
|
53
|
+
return DEFAULT_RETRY_STATUS_CODES.has(status);
|
|
58
54
|
}
|
|
59
55
|
//# sourceMappingURL=retryUtils.js.map
|
package/utils/retryUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"retryUtils.js","sourceRoot":"","sources":["../../src/utils/retryUtils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEpE;;;GAGG;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;IAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAa;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAC9C,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,OAAO,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,CAAC,OAAsB,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,MAAqB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,EAAE;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,YAA0B;IACpE,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC;IAC5C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}
|