@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.
Files changed (46) hide show
  1. package/Core/HyperCore.d.ts +142 -152
  2. package/Core/HyperCore.d.ts.map +1 -1
  3. package/Core/HyperCore.js +289 -286
  4. package/Core/HyperCore.js.map +1 -1
  5. package/README.md +279 -134
  6. package/package.json +14 -8
  7. package/transports/browser.d.ts +228 -0
  8. package/transports/browser.d.ts.map +1 -0
  9. package/transports/browser.js +451 -0
  10. package/transports/browser.js.map +1 -0
  11. package/transports/manager.d.ts +7 -67
  12. package/transports/manager.d.ts.map +1 -1
  13. package/transports/manager.js +138 -145
  14. package/transports/manager.js.map +1 -1
  15. package/transports/node.d.ts +0 -20
  16. package/transports/node.d.ts.map +1 -1
  17. package/transports/node.js +104 -48
  18. package/transports/node.js.map +1 -1
  19. package/utils/decompress.d.ts +16 -18
  20. package/utils/decompress.d.ts.map +1 -1
  21. package/utils/decompress.js +143 -63
  22. package/utils/decompress.js.map +1 -1
  23. package/utils/errors.d.ts +0 -10
  24. package/utils/errors.d.ts.map +1 -1
  25. package/utils/errors.js +1 -11
  26. package/utils/errors.js.map +1 -1
  27. package/utils/merge.d.ts +0 -3
  28. package/utils/merge.d.ts.map +1 -1
  29. package/utils/merge.js +0 -4
  30. package/utils/merge.js.map +1 -1
  31. package/utils/normalize.d.ts +40 -20
  32. package/utils/normalize.d.ts.map +1 -1
  33. package/utils/normalize.js +197 -63
  34. package/utils/normalize.js.map +1 -1
  35. package/utils/pipeline.d.ts +10 -30
  36. package/utils/pipeline.d.ts.map +1 -1
  37. package/utils/pipeline.js +44 -44
  38. package/utils/pipeline.js.map +1 -1
  39. package/utils/response.d.ts +35 -44
  40. package/utils/response.d.ts.map +1 -1
  41. package/utils/response.js +228 -69
  42. package/utils/response.js.map +1 -1
  43. package/utils/retryUtils.d.ts +2 -10
  44. package/utils/retryUtils.d.ts.map +1 -1
  45. package/utils/retryUtils.js +17 -21
  46. package/utils/retryUtils.js.map +1 -1
@@ -1,59 +1,50 @@
1
- import type { HttpResponse, HyperTransport, StreamResponse } from "@hyperttp/types";
1
+ import type { HttpResponse, HyperTransport, HyperBody } from "@hyperttp/types";
2
2
  type TransportResponse = Awaited<ReturnType<HyperTransport["execute"]>>;
3
- /**
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).
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 Класс-контейнер ответа с фиксированной структурой полей для 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.
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 Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
25
- * @en Creates a HyperHttpResponse instance from a raw transport response.
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
- * @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
+ 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
- * @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.
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
@@ -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;;;;;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"}
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 Высокопроизводительный глубокий клон тела ответа. 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).
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 Класс-контейнер ответа с фиксированной структурой полей для 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.
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 Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
43
- * @en Creates a HyperHttpResponse instance from a raw transport response.
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
- * @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
- */
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 = 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;
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
- 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 };
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 out;
280
+ return base;
122
281
  };
123
282
  //# sourceMappingURL=response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"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"}
@@ -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 Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек. Если 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.
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;;;;;;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"}
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"}
@@ -1,25 +1,24 @@
1
1
  /**
2
- * @ru Коды статуса HTTP, по которым повторные попытки выполняются по умолчанию, если не указаны явные коды в retryOptions.
3
- * @en Default HTTP status codes that trigger retries when no explicit codes are provided in retryOptions.
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 base = Math.min(baseDelay * 2 ** attempt, maxDelay);
16
- return jitter ? base * (0.75 + Math.random() * 0.5) : base;
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 Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек. Если 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.
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.includes(status);
53
+ return DEFAULT_RETRY_STATUS_CODES.has(status);
58
54
  }
59
55
  //# sourceMappingURL=retryUtils.js.map
@@ -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;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"}
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"}