@hyperttp/core 1.3.3 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/Core/HyperCore.d.ts +142 -152
  2. package/Core/HyperCore.d.ts.map +1 -1
  3. package/Core/HyperCore.js +285 -286
  4. package/Core/HyperCore.js.map +1 -1
  5. package/package.json +14 -8
  6. package/transports/browser.d.ts +228 -0
  7. package/transports/browser.d.ts.map +1 -0
  8. package/transports/browser.js +451 -0
  9. package/transports/browser.js.map +1 -0
  10. package/transports/manager.d.ts +7 -67
  11. package/transports/manager.d.ts.map +1 -1
  12. package/transports/manager.js +138 -145
  13. package/transports/manager.js.map +1 -1
  14. package/transports/node.d.ts +0 -20
  15. package/transports/node.d.ts.map +1 -1
  16. package/transports/node.js +104 -48
  17. package/transports/node.js.map +1 -1
  18. package/utils/decompress.d.ts +16 -18
  19. package/utils/decompress.d.ts.map +1 -1
  20. package/utils/decompress.js +143 -63
  21. package/utils/decompress.js.map +1 -1
  22. package/utils/errors.d.ts +0 -10
  23. package/utils/errors.d.ts.map +1 -1
  24. package/utils/errors.js +1 -11
  25. package/utils/errors.js.map +1 -1
  26. package/utils/merge.d.ts +0 -3
  27. package/utils/merge.d.ts.map +1 -1
  28. package/utils/merge.js +0 -4
  29. package/utils/merge.js.map +1 -1
  30. package/utils/normalize.d.ts +40 -20
  31. package/utils/normalize.d.ts.map +1 -1
  32. package/utils/normalize.js +197 -63
  33. package/utils/normalize.js.map +1 -1
  34. package/utils/pipeline.d.ts +10 -30
  35. package/utils/pipeline.d.ts.map +1 -1
  36. package/utils/pipeline.js +44 -44
  37. package/utils/pipeline.js.map +1 -1
  38. package/utils/response.d.ts +95 -31
  39. package/utils/response.d.ts.map +1 -1
  40. package/utils/response.js +288 -58
  41. package/utils/response.js.map +1 -1
  42. package/utils/retryUtils.d.ts +2 -10
  43. package/utils/retryUtils.d.ts.map +1 -1
  44. package/utils/retryUtils.js +17 -21
  45. package/utils/retryUtils.js.map +1 -1
@@ -1,58 +1,122 @@
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
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).
4
+ * @ru Символы для скрытого кэширования распарсенных данных тела ответа.
5
+ * Использование Symbol предотвращает коллизии имен и сохраняет мономорфизм в V8.
6
+ * @en Symbols for hidden caching of parsed response body data.
7
+ * Using Symbol prevents name collisions and preserves monomorphism in V8.
8
+ */
9
+ declare const TEXT_CACHE: unique symbol;
10
+ declare const JSON_CACHE: unique symbol;
11
+ declare const ARRAY_BUFFER_CACHE: unique symbol;
12
+ /**
13
+ * @ru Интерфейс объекта, поддерживающего скрытое кэширование данных.
14
+ * @en Interface for an object supporting hidden data caching.
15
+ */
16
+ type CacheHolder = {
17
+ [TEXT_CACHE]?: string;
18
+ [JSON_CACHE]?: unknown;
19
+ [ARRAY_BUFFER_CACHE]?: ArrayBuffer | SharedArrayBuffer;
20
+ };
21
+ /**
22
+ * @ru Высокопроизводительное глубокое клонирование тела ответа.
23
+ * Избегает накладных расходов structuredClone для стримов и буферов, возвращая ссылки.
24
+ * @en High-performance deep cloning of the response body.
25
+ * Avoids structuredClone overhead for streams and buffers by returning references.
26
+ * @template T - The type of the body.
27
+ * @param body - The body to clone.
28
+ * @returns The cloned body.
8
29
  */
9
30
  export declare const cloneBodyFast: <T>(body: T) => T;
10
31
  /**
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.
32
+ * @ru Высокопроизводительный контейнер HTTP-ответа с ленивым парсингом и кэшированием.
33
+ * Гарантирует идентичный API чтения тела ответа во всех рантаймах.
34
+ * @en High-performance HTTP response container with lazy parsing and caching.
35
+ * Guarantees identical response body reading API across all runtimes.
36
+ * @template T - Expected type of the parsed response body.
13
37
  */
14
- export declare class HyperHttpResponse<T = unknown> implements HttpResponse<T> {
38
+ export declare class HyperHttpResponse<T = unknown> implements HttpResponse<T>, CacheHolder {
15
39
  status: number;
16
40
  headers: Record<string, string | string[]>;
17
- body: any;
41
+ body: HyperBody;
18
42
  url: string;
19
43
  data: T | null;
20
- json: () => Promise<any>;
21
- text: () => Promise<string>;
22
- dump: () => Promise<void>;
44
+ [TEXT_CACHE]: string | undefined;
45
+ [JSON_CACHE]: unknown | undefined;
46
+ [ARRAY_BUFFER_CACHE]: ArrayBuffer | SharedArrayBuffer | undefined;
47
+ private _bodyConsumed;
23
48
  /**
24
- * @ru Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
25
- * @en Creates a HyperHttpResponse instance from a raw transport response.
26
- * @param rawResponse - Raw response from transport layer.
49
+ * @ru Создаёт экземпляр ответа из сырых данных транспорта.
50
+ * @en Creates a response instance from raw transport data.
51
+ * @param rawResponse - The raw response from the transport layer.
27
52
  */
28
53
  constructor(rawResponse: TransportResponse);
29
54
  /**
30
- * @ru Создаёт глубокую копию текущего ответа (безопасно для стримов и буферов).
31
- * @en Creates a deep copy of the current response (safe for streams and buffers).
55
+ * @ru Лениво вычитывает и кэширует тело ответа в виде ArrayBuffer и текста.
56
+ * @en Lazily consumes and caches the response body as ArrayBuffer and text.
57
+ */
58
+ private _consumeBody;
59
+ /**
60
+ * @ru Возвращает тело ответа как ArrayBuffer. Результат кэшируется.
61
+ * @en Returns the response body as an ArrayBuffer. Result is cached.
62
+ * @returns Promise resolving to the ArrayBuffer or SharedArrayBuffer.
63
+ */
64
+ arrayBuffer(): Promise<ArrayBuffer | SharedArrayBuffer>;
65
+ /**
66
+ * @ru Возвращает тело ответа как текст. Результат кэшируется.
67
+ * @en Returns the response body as text. Result is cached.
68
+ * @returns Promise resolving to the text string.
69
+ */
70
+ text(): Promise<string>;
71
+ /**
72
+ * @ru Парсит тело ответа как JSON. Результат кэшируется.
73
+ * @en Parses the response body as JSON. Result is cached.
74
+ * @template TJson - Expected type of the parsed JSON.
75
+ * @returns Promise resolving to the parsed JSON object.
76
+ */
77
+ json<TJson = T>(): Promise<TJson>;
78
+ /**
79
+ * @ru Отбрасывает тело ответа для освобождения ресурсов (сокета).
80
+ * @en Discards the response body to free up resources (socket).
81
+ * @returns Promise that resolves when the body is drained.
82
+ */
83
+ dump(): Promise<void>;
84
+ /**
85
+ * @ru Создаёт глубокую изолированную копию ответа.
86
+ * Для стримов использует tee() для безопасного раздвоения потока.
87
+ * @en Creates a deep isolated copy of the response.
88
+ * Uses tee() for streams to safely duplicate the flow.
32
89
  * @returns A new HttpResponse instance with cloned data.
33
90
  */
34
91
  clone(): HttpResponse<T>;
35
92
  }
36
93
  /**
37
- * @ru Быстрый маппинг сырого ответа через выделение мономорфного класса.
38
- * @en Fast mapping of a raw response using a monomorphic class.
39
- * @param rawResponse - Raw transport response.
40
- * @returns Normalized HttpResponse.
94
+ * @ru Быстрое создание экземпляра HyperHttpResponse из сырого ответа транспорта.
95
+ * @en Fast creation of a HyperHttpResponse instance from a raw transport response.
96
+ * @param rawResponse - The raw transport response.
97
+ * @returns A new HyperHttpResponse instance.
41
98
  */
42
99
  export declare const mapResponseFast: (rawResponse: TransportResponse) => HttpResponse<unknown>;
43
100
  /**
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.
101
+ * @ru Быстрое создание объекта StreamResponse без overhead-а классов.
102
+ * @en Fast creation of a StreamResponse object without class overhead.
103
+ * @param rawResponse - The raw transport response.
104
+ * @returns A lightweight StreamResponse object.
48
105
  */
49
- export declare const mapStreamFast: (rawResponse: TransportResponse) => StreamResponse<unknown>;
106
+ export declare const mapStreamFast: (rawResponse: TransportResponse) => {
107
+ status: number;
108
+ headers: Record<string, string | string[]>;
109
+ body: import("@hyperttp/types").TransportResponsePayload;
110
+ url: string;
111
+ };
50
112
  /**
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).
113
+ * @ru Оптимизированное слияние заголовков.
114
+ * Использует ранний возврат при первой итерации цикла, что быстрее, чем Object.keys().length > 0.
115
+ * @en Optimized headers merging.
116
+ * Uses early return on the first loop iteration, which is faster than Object.keys().length > 0.
117
+ * @param base - Base headers object.
118
+ * @param override - Headers to override or add.
119
+ * @returns Merged headers object.
56
120
  */
57
121
  export declare const mergeHeadersFast: (base: Record<string, string | string[]>, override?: Record<string, string | string[]>) => Record<string, string | string[]>;
58
122
  export {};
@@ -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;AAgDxE;;;;;GAKG;AACH,QAAA,MAAM,UAAU,eAA+B,CAAC;AAChD,QAAA,MAAM,UAAU,eAA+B,CAAC;AAChD,QAAA,MAAM,kBAAkB,eAAsC,CAAC;AAE/D;;;GAGG;AACH,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;AA2BF;;;;;;;;GAQG;AACH,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;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,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;IAE9B;;;;OAIG;gBACS,WAAW,EAAE,iBAAiB;IAO1C;;;OAGG;YACW,YAAY;IA8C1B;;;;OAIG;IACU,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,iBAAiB,CAAC;IA2BpE;;;;OAIG;IACU,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAiCpC;;;;;OAKG;IACU,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC;IA2B9C;;;;OAIG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYlC;;;;;;OAMG;IACI,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;CA2BhC;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,iBAAiB,KAAG,YAAY,CAAC,OAAO,CAEpF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,aAAa,iBAAiB;;;;;CAK1D,CAAC;AAEH;;;;;;;;GAQG;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,CAMlC,CAAC"}
package/utils/response.js CHANGED
@@ -1,8 +1,84 @@
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 во всех средах (Node.js, Bun, Deno, Browser),
4
+ * добавляя методы парсинга (text, json, blob и т.д.) через оптимизированный Response API.
5
+ * @en Unifies ReadableStream across all environments (Node.js, Bun, Deno, Browser)
6
+ * by adding parsing methods (text, json, blob, etc.) via the optimized Response API.
7
+ */
8
+ const patchReadableStream = () => {
9
+ if (typeof ReadableStream === "undefined")
10
+ return;
11
+ const proto = ReadableStream.prototype;
12
+ const methods = {
13
+ dump: async function () {
14
+ return this.cancel().catch(() => { });
15
+ },
16
+ arrayBuffer: async function () {
17
+ return new Response(this).arrayBuffer();
18
+ },
19
+ text: async function () {
20
+ return new Response(this).text();
21
+ },
22
+ json: async function () {
23
+ return new Response(this).json();
24
+ },
25
+ blob: async function () {
26
+ return new Response(this).blob();
27
+ },
28
+ bytes: async function () {
29
+ const buf = await new Response(this).arrayBuffer();
30
+ return new Uint8Array(buf);
31
+ },
32
+ };
33
+ for (const [name, fn] of Object.entries(methods)) {
34
+ if (typeof proto[name] !== "function") {
35
+ Object.defineProperty(proto, name, {
36
+ value: fn,
37
+ writable: true,
38
+ configurable: true,
39
+ enumerable: true,
40
+ });
41
+ }
42
+ }
43
+ };
44
+ patchReadableStream();
45
+ /**
46
+ * @ru Символы для скрытого кэширования распарсенных данных тела ответа.
47
+ * Использование Symbol предотвращает коллизии имен и сохраняет мономорфизм в V8.
48
+ * @en Symbols for hidden caching of parsed response body data.
49
+ * Using Symbol prevents name collisions and preserves monomorphism in V8.
50
+ */
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
+ const EMPTY_HEADERS = {};
56
+ /**
57
+ * @ru Быстрая проверка, является ли значение ReadableStream.
58
+ * @en Fast check to determine if a value is a ReadableStream.
59
+ * @param value - The value to check.
60
+ * @returns True if the value is a ReadableStream.
61
+ */
62
+ function isReadableStream(value) {
63
+ return (typeof value === "object" && value !== null && typeof value.getReader === "function");
64
+ }
65
+ /**
66
+ * @ru Быстрая проверка, является ли значение Blob.
67
+ * @en Fast check to determine if a value is a Blob.
68
+ * @param value - The value to check.
69
+ * @returns True if the value is a Blob.
70
+ */
71
+ function isBlob(value) {
72
+ return typeof Blob !== "undefined" && value instanceof Blob;
73
+ }
74
+ /**
75
+ * @ru Высокопроизводительное глубокое клонирование тела ответа.
76
+ * Избегает накладных расходов structuredClone для стримов и буферов, возвращая ссылки.
77
+ * @en High-performance deep cloning of the response body.
78
+ * Avoids structuredClone overhead for streams and buffers by returning references.
79
+ * @template T - The type of the body.
80
+ * @param body - The body to clone.
81
+ * @returns The cloned body.
6
82
  */
7
83
  export const cloneBodyFast = (body) => {
8
84
  if (typeof body !== "object" || body === null)
@@ -26,66 +102,230 @@ export const cloneBodyFast = (body) => {
26
102
  }
27
103
  };
28
104
  /**
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.
105
+ * @ru Высокопроизводительный контейнер HTTP-ответа с ленивым парсингом и кэшированием.
106
+ * Гарантирует идентичный API чтения тела ответа во всех рантаймах.
107
+ * @en High-performance HTTP response container with lazy parsing and caching.
108
+ * Guarantees identical response body reading API across all runtimes.
109
+ * @template T - Expected type of the parsed response body.
31
110
  */
32
111
  export class HyperHttpResponse {
33
112
  status;
34
113
  headers;
35
114
  body;
36
115
  url;
37
- data;
38
- json;
39
- text;
40
- dump;
116
+ data = null;
117
+ [TEXT_CACHE] = undefined;
118
+ [JSON_CACHE] = undefined;
119
+ [ARRAY_BUFFER_CACHE] = undefined;
120
+ _bodyConsumed = false;
41
121
  /**
42
- * @ru Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
43
- * @en Creates a HyperHttpResponse instance from a raw transport response.
44
- * @param rawResponse - Raw response from transport layer.
122
+ * @ru Создаёт экземпляр ответа из сырых данных транспорта.
123
+ * @en Creates a response instance from raw transport data.
124
+ * @param rawResponse - The raw response from the transport layer.
45
125
  */
46
126
  constructor(rawResponse) {
47
127
  this.status = rawResponse.status;
48
- this.headers = rawResponse.headers;
128
+ this.headers = rawResponse.headers || EMPTY_HEADERS;
49
129
  this.body = rawResponse.body;
50
130
  this.url = rawResponse.url ?? "";
51
- this.data = null;
52
- this.json = rawResponse.json;
53
- this.text = rawResponse.text;
54
- this.dump = rawResponse.dump;
55
131
  }
56
132
  /**
57
- * @ru Создаёт глубокую копию текущего ответа (безопасно для стримов и буферов).
58
- * @en Creates a deep copy of the current response (safe for streams and buffers).
133
+ * @ru Лениво вычитывает и кэширует тело ответа в виде ArrayBuffer и текста.
134
+ * @en Lazily consumes and caches the response body as ArrayBuffer and text.
135
+ */
136
+ async _consumeBody() {
137
+ if (this._bodyConsumed)
138
+ return;
139
+ this._bodyConsumed = true;
140
+ const body = this.body;
141
+ if (!body)
142
+ return;
143
+ if (typeof body === "string") {
144
+ this[TEXT_CACHE] = body;
145
+ return;
146
+ }
147
+ if (body instanceof Uint8Array) {
148
+ this[ARRAY_BUFFER_CACHE] =
149
+ body.buffer.byteLength === body.byteLength
150
+ ? body.buffer
151
+ : body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength);
152
+ this[TEXT_CACHE] = STATIC_DECODER.decode(body);
153
+ return;
154
+ }
155
+ if (body instanceof ArrayBuffer) {
156
+ this[ARRAY_BUFFER_CACHE] = body;
157
+ this[TEXT_CACHE] = STATIC_DECODER.decode(body);
158
+ return;
159
+ }
160
+ if (CURRENT_RUNTIME === "bun" && typeof body.arrayBuffer === "function") {
161
+ const buf = await body.arrayBuffer();
162
+ this[ARRAY_BUFFER_CACHE] = buf;
163
+ this[TEXT_CACHE] = STATIC_DECODER.decode(buf);
164
+ }
165
+ else if (isReadableStream(body) || isBlob(body)) {
166
+ if (isReadableStream(body) && body.locked) {
167
+ throw new Error("[Hyperttp] Stream is locked.");
168
+ }
169
+ const response = new Response(body);
170
+ const buf = await response.arrayBuffer();
171
+ this[ARRAY_BUFFER_CACHE] = buf;
172
+ this[TEXT_CACHE] = STATIC_DECODER.decode(buf);
173
+ }
174
+ if (this[ARRAY_BUFFER_CACHE]) {
175
+ this.body = new Uint8Array(this[ARRAY_BUFFER_CACHE]);
176
+ }
177
+ }
178
+ /**
179
+ * @ru Возвращает тело ответа как ArrayBuffer. Результат кэшируется.
180
+ * @en Returns the response body as an ArrayBuffer. Result is cached.
181
+ * @returns Promise resolving to the ArrayBuffer or SharedArrayBuffer.
182
+ */
183
+ async arrayBuffer() {
184
+ if (this[ARRAY_BUFFER_CACHE] !== undefined)
185
+ return this[ARRAY_BUFFER_CACHE];
186
+ const body = this.body;
187
+ if (body instanceof Uint8Array) {
188
+ return (this[ARRAY_BUFFER_CACHE] =
189
+ body.buffer.byteLength === body.byteLength
190
+ ? body.buffer
191
+ : body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength));
192
+ }
193
+ if (body instanceof ArrayBuffer) {
194
+ return (this[ARRAY_BUFFER_CACHE] = body);
195
+ }
196
+ if (CURRENT_RUNTIME === "bun" && typeof body.arrayBuffer === "function") {
197
+ return (this[ARRAY_BUFFER_CACHE] = await body.arrayBuffer());
198
+ }
199
+ if (isBlob(body)) {
200
+ return (this[ARRAY_BUFFER_CACHE] = await body.arrayBuffer());
201
+ }
202
+ await this._consumeBody();
203
+ return this[ARRAY_BUFFER_CACHE];
204
+ }
205
+ /**
206
+ * @ru Возвращает тело ответа как текст. Результат кэшируется.
207
+ * @en Returns the response body as text. Result is cached.
208
+ * @returns Promise resolving to the text string.
209
+ */
210
+ async text() {
211
+ if (this[TEXT_CACHE] !== undefined)
212
+ return this[TEXT_CACHE];
213
+ const body = this.body;
214
+ if (typeof body === "string") {
215
+ this._bodyConsumed = true;
216
+ return (this[TEXT_CACHE] = body);
217
+ }
218
+ if (body instanceof Uint8Array) {
219
+ this._bodyConsumed = true;
220
+ return (this[TEXT_CACHE] = STATIC_DECODER.decode(body));
221
+ }
222
+ if (body instanceof ArrayBuffer) {
223
+ this._bodyConsumed = true;
224
+ return (this[TEXT_CACHE] = STATIC_DECODER.decode(body));
225
+ }
226
+ if (CURRENT_RUNTIME === "bun" && typeof body.text === "function") {
227
+ this._bodyConsumed = true;
228
+ return (this[TEXT_CACHE] = await body.text());
229
+ }
230
+ if (isBlob(body)) {
231
+ this._bodyConsumed = true;
232
+ return (this[TEXT_CACHE] = await body.text());
233
+ }
234
+ await this._consumeBody();
235
+ return this[TEXT_CACHE];
236
+ }
237
+ /**
238
+ * @ru Парсит тело ответа как JSON. Результат кэшируется.
239
+ * @en Parses the response body as JSON. Result is cached.
240
+ * @template TJson - Expected type of the parsed JSON.
241
+ * @returns Promise resolving to the parsed JSON object.
242
+ */
243
+ async json() {
244
+ if (this[JSON_CACHE] !== undefined)
245
+ return this[JSON_CACHE];
246
+ if (this[TEXT_CACHE] !== undefined) {
247
+ return (this[JSON_CACHE] = JSON.parse(this[TEXT_CACHE]));
248
+ }
249
+ const body = this.body;
250
+ if (typeof body === "object" &&
251
+ body !== null &&
252
+ !isReadableStream(body) &&
253
+ !isBlob(body) &&
254
+ !(body instanceof Uint8Array) &&
255
+ !(body instanceof ArrayBuffer)) {
256
+ return (this[JSON_CACHE] = body);
257
+ }
258
+ if (CURRENT_RUNTIME === "bun" && typeof body.json === "function") {
259
+ return (this[JSON_CACHE] = await body.json());
260
+ }
261
+ const str = await this.text();
262
+ return (this[JSON_CACHE] = JSON.parse(str));
263
+ }
264
+ /**
265
+ * @ru Отбрасывает тело ответа для освобождения ресурсов (сокета).
266
+ * @en Discards the response body to free up resources (socket).
267
+ * @returns Promise that resolves when the body is drained.
268
+ */
269
+ async dump() {
270
+ if (this._bodyConsumed)
271
+ return;
272
+ this._bodyConsumed = true;
273
+ const body = this.body;
274
+ if (isReadableStream(body)) {
275
+ if (!body.locked)
276
+ await body.cancel().catch(() => { });
277
+ }
278
+ else if (isBlob(body)) {
279
+ await body.arrayBuffer();
280
+ }
281
+ }
282
+ /**
283
+ * @ru Создаёт глубокую изолированную копию ответа.
284
+ * Для стримов использует tee() для безопасного раздвоения потока.
285
+ * @en Creates a deep isolated copy of the response.
286
+ * Uses tee() for streams to safely duplicate the flow.
59
287
  * @returns A new HttpResponse instance with cloned data.
60
288
  */
61
289
  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;
290
+ const cloned = Object.create(HyperHttpResponse.prototype);
291
+ cloned.status = this.status;
292
+ cloned.headers = this.headers;
293
+ cloned.url = this.url;
294
+ cloned.data = this.data ? cloneBodyFast(this.data) : null;
295
+ cloned._bodyConsumed = this._bodyConsumed;
296
+ cloned[TEXT_CACHE] = this[TEXT_CACHE];
297
+ cloned[JSON_CACHE] = this[JSON_CACHE];
298
+ cloned[ARRAY_BUFFER_CACHE] = this[ARRAY_BUFFER_CACHE];
299
+ if (isReadableStream(this.body) && !this._bodyConsumed) {
300
+ if (this.body.locked) {
301
+ cloned.body = this.body;
302
+ }
303
+ else {
304
+ const [b1, b2] = this.body.tee();
305
+ this.body = b1;
306
+ cloned.body = b2;
307
+ }
308
+ }
309
+ else {
310
+ cloned.body = this.body;
311
+ }
72
312
  return cloned;
73
313
  }
74
314
  }
75
315
  /**
76
- * @ru Быстрый маппинг сырого ответа через выделение мономорфного класса.
77
- * @en Fast mapping of a raw response using a monomorphic class.
78
- * @param rawResponse - Raw transport response.
79
- * @returns Normalized HttpResponse.
316
+ * @ru Быстрое создание экземпляра HyperHttpResponse из сырого ответа транспорта.
317
+ * @en Fast creation of a HyperHttpResponse instance from a raw transport response.
318
+ * @param rawResponse - The raw transport response.
319
+ * @returns A new HyperHttpResponse instance.
80
320
  */
81
321
  export const mapResponseFast = (rawResponse) => {
82
322
  return new HyperHttpResponse(rawResponse);
83
323
  };
84
324
  /**
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.
325
+ * @ru Быстрое создание объекта StreamResponse без overhead-а классов.
326
+ * @en Fast creation of a StreamResponse object without class overhead.
327
+ * @param rawResponse - The raw transport response.
328
+ * @returns A lightweight StreamResponse object.
89
329
  */
90
330
  export const mapStreamFast = (rawResponse) => ({
91
331
  status: rawResponse.status,
@@ -94,30 +334,20 @@ export const mapStreamFast = (rawResponse) => ({
94
334
  url: rawResponse.url ?? "",
95
335
  });
96
336
  /**
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).
337
+ * @ru Оптимизированное слияние заголовков.
338
+ * Использует ранний возврат при первой итерации цикла, что быстрее, чем Object.keys().length > 0.
339
+ * @en Optimized headers merging.
340
+ * Uses early return on the first loop iteration, which is faster than Object.keys().length > 0.
341
+ * @param base - Base headers object.
342
+ * @param override - Headers to override or add.
343
+ * @returns Merged headers object.
102
344
  */
103
345
  export const mergeHeadersFast = (base, override) => {
104
346
  if (!override)
105
347
  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
- }
348
+ for (const _key in override) {
349
+ return { ...base, ...override };
120
350
  }
121
- return out;
351
+ return base;
122
352
  };
123
353
  //# sourceMappingURL=response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAI,IAAO,EAAK,EAAE;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE3D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAE5C,IACE,IAAI,YAAY,UAAU;QAC1B,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;QAC9B,OAAO,GAAG,CAAC,SAAS,KAAK,UAAU,EACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAM,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACrB,MAAM,CAAS;IACf,OAAO,CAAoC;IAC3C,IAAI,CAAM;IACV,GAAG,CAAS;IACZ,IAAI,CAAW;IAEf,IAAI,CAAsB;IAC1B,IAAI,CAAyB;IAC7B,IAAI,CAAuB;IAElC;;;;OAIG;IACH,YAAY,WAA8B;QACxC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,IAAI,GAAI,WAAmB,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,IAAI,GAAI,WAAmB,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,IAAI,GAAI,WAAmB,CAAC,IAAI,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACI,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAI;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC5B,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B,GAAG,EAAE,IAAI,CAAC,GAAG;SACO,CAAC,CAAC;QAExB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAExB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,WAA8B,EACP,EAAE;IACzB,OAAO,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,WAA8B,EACL,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC,MAAM;IAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;CAC3B,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAuC,EACvC,QAA4C,EACT,EAAE;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,IAAI,CAAC;YACf,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
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"}