@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 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;;GAGG;AACH,MAAM,OAAO,aAAa;IACxB;;;OAGG;IACI,MAAM,CAAsB;IAElB,YAAY,CAAU;IACtB,YAAY,CAAS;IAEtC;;;;OAIG;IACH,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;QAE1D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,OAAO,CAAC,GAAqB;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE;gBAC3B,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM;gBAC5B,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC;QAEvC,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,SAAS,GAAQ,GAAG,CAAC,IAAI,CAAC;QAC9B,IACE,SAAS,KAAK,SAAS;YACvB,SAAS,KAAK,IAAI;YAClB,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,CAAC,CAAC,SAAS,YAAY,cAAc,CAAC,EACtC,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;YAC1C,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAiC;YAC9C,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;QAElD,SAAiB,CAAC,IAAI,GAAG,KAAK;YAC7B,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACvC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,SAAgD;SACvD,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"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"}
@@ -2,26 +2,24 @@ import type { TransportStreamExtensions } from "@hyperttp/types";
2
2
  type StreamPayload = ReadableStream<Uint8Array> & TransportStreamExtensions;
3
3
  type BufferPayload = Uint8Array & TransportStreamExtensions;
4
4
  /**
5
- * @ru Полностью декомпрессирует буфер, последовательно применяя цепочку алгоритмов из Content-Encoding.
6
- * @en Fully decompresses a buffer by sequentially applying the Content-Encoding chain.
7
- * @param body - Compressed Uint8Array body.
8
- * @param encoding - Raw Content-Encoding header (may contain multiple comma-separated values).
9
- * @returns Decompressed buffer with a noop dump method.
5
+ * @ru Декомпрессирует буфер с поддержкой множественных кодировок.
6
+ * Сначала пытается Web API, затем fallback на node:zlib для серверных сред.
7
+ * @en Decompresses a buffer with support for multiple encodings.
8
+ * Tries Web API first, then falls back to node:zlib for server environments.
9
+ * @param body - The compressed Uint8Array.
10
+ * @param encoding - The Content-Encoding header value (e.g., 'gzip, br').
11
+ * @returns The decompressed buffer with dump() method attached.
10
12
  */
11
- export declare function decompressBuffer(body: Uint8Array, encoding: string): BufferPayload;
13
+ export declare function decompressBuffer(body: Uint8Array, encoding: string): Promise<BufferPayload>;
12
14
  /**
13
- * @ru Создаёт декомпрессирующий поток, минимизируя конвертацию между Web и Node.js стримами.
14
- * @en Creates a decompressing stream while minimising conversion between Web and Node.js streams.
15
- *
16
- * @ru Алгоритм: для gzip/deflate при наличии глобального DecompressionStream использует Web Streams API,
17
- * иначе переключается на Node.js zlib. Brotli всегда идёт через Node.js (до появления стандартного Web-потока).
18
- * @en Algorithm: for gzip/deflate, if global DecompressionStream is available, uses Web Streams API;
19
- * otherwise falls back to Node.js zlib. Brotli always goes through Node.js (until standard Web stream is available).
20
- *
21
- * @param body - Original compressed ReadableStream.
22
- * @param encoding - Raw Content-Encoding header (may be a chain).
23
- * @returns Decompressed ReadableStream with a dump method that cancels the stream.
15
+ * @ru Создаёт декомпрессированный стрим с поддержкой множественных кодировок.
16
+ * Использует DecompressionStream для Web и node:zlib для Node.js.
17
+ * @en Creates a decompressed stream with support for multiple encodings.
18
+ * Uses DecompressionStream for Web and node:zlib for Node.js.
19
+ * @param body - The compressed ReadableStream.
20
+ * @param encoding - The Content-Encoding header value (e.g., 'gzip, br').
21
+ * @returns The decompressed stream with dump() method attached.
24
22
  */
25
- export declare function createDecompressStream(body: ReadableStream<Uint8Array>, encoding: string): StreamPayload;
23
+ export declare function createDecompressStream(body: ReadableStream<Uint8Array>, encoding: string): Promise<StreamPayload>;
26
24
  export {};
27
25
  //# sourceMappingURL=decompress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,KAAK,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,yBAAyB,CAAC;AAC5E,KAAK,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAqE5D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,GACf,aAAa,CASf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,aAAa,CA+Cf"}
1
+ {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE,KAAK,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,yBAAyB,CAAC;AAC5E,KAAK,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAiJ5D;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsBjG;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAoCxB"}
@@ -1,9 +1,20 @@
1
- import { brotliDecompressSync, createBrotliDecompress, createGunzip, createInflate, gunzipSync, inflateSync, } from "node:zlib";
2
- import { Readable } from "node:stream";
1
+ import { runtimeImport } from "../transports/manager.js";
3
2
  /**
4
- * @ru Разбирает заголовок Content-Encoding в массив алгоритмов, исключая "identity".
5
- * @en Parses Content-Encoding header into an array of algorithms, excluding "identity".
6
- * @param encoding - Raw Content-Encoding header value (e.g., "gzip, deflate").
3
+ * @ru Флаг серверного окружения (Node.js/Bun/Deno).
4
+ * @en Server environment flag (Node.js/Bun/Deno).
5
+ */
6
+ const IS_SERVER = typeof window === "undefined" && typeof self === "undefined";
7
+ /**
8
+ * @ru No-op функция для dump() буферов. Буферы не требуют освобождения ресурсов.
9
+ * @en No-op function for buffer dump(). Buffers don't require resource cleanup.
10
+ */
11
+ const NOOP_DUMP = async () => { };
12
+ /**
13
+ * @ru Парсит строку Content-Encoding в массив кодировок.
14
+ * Игнорирует 'identity' (без сжатия) и пустые значения.
15
+ * @en Parses Content-Encoding string into an array of encodings.
16
+ * Ignores 'identity' (no compression) and empty values.
17
+ * @param encoding - The Content-Encoding header value.
7
18
  * @returns Array of normalized encoding names.
8
19
  */
9
20
  function parseEncodings(encoding) {
@@ -13,21 +24,21 @@ function parseEncodings(encoding) {
13
24
  .filter((part) => part.length > 0 && part !== "identity");
14
25
  }
15
26
  /**
16
- * @ru Добавляет noop-метод dump к буферу, сохраняя совместимость с TransportStreamExtensions.
17
- * @en Attaches a noop dump method to a buffer, maintaining TransportStreamExtensions compatibility.
18
- * @param buffer - The Uint8Array buffer.
19
- * @returns Buffer with dump method attached.
27
+ * @ru Добавляет no-op метод dump() к буферу.
28
+ * @en Attaches a no-op dump() method to the buffer.
29
+ * @param buffer - The Uint8Array to extend.
30
+ * @returns The buffer with dump() method attached.
20
31
  */
21
32
  function attachNoopDump(buffer) {
22
33
  const payload = buffer;
23
- payload.dump = async () => { };
34
+ payload.dump = NOOP_DUMP;
24
35
  return payload;
25
36
  }
26
37
  /**
27
- * @ru Добавляет метод dump к стриму, который отменяет (cancel) поток.
28
- * @en Attaches a dump method to a stream that cancels the stream.
29
- * @param stream - ReadableStream to enhance.
30
- * @returns Stream with dump method attached.
38
+ * @ru Добавляет метод dump() к стриму для отмены и освобождения сокета.
39
+ * @en Attaches a dump() method to the stream for cancellation and socket release.
40
+ * @param stream - The ReadableStream to extend.
41
+ * @returns The stream with dump() method attached.
31
42
  */
32
43
  function attachStreamDump(stream) {
33
44
  const payload = stream;
@@ -42,87 +53,156 @@ function attachStreamDump(stream) {
42
53
  return payload;
43
54
  }
44
55
  /**
45
- * @ru Применяет один этап декомпрессии к буферу синхронно (для одиночных чанков).
46
- * @en Applies a single decompression step to a buffer synchronously (for single chunks).
47
- * @param input - Compressed buffer.
48
- * @param encoding - Single encoding name ("gzip", "deflate", "br").
49
- * @returns Decompressed buffer, or original if encoding is unknown.
50
- * @throws If decompression fails due to corrupt data.
56
+ * @ru Декомпрессирует буфер с использованием Web API (DecompressionStream).
57
+ * Поддерживает gzip и deflate. Возвращает исходный буфер, если декомпрессия невозможна.
58
+ * @en Decompresses a buffer using Web API (DecompressionStream).
59
+ * Supports gzip and deflate. Returns the original buffer if decompression is not possible.
60
+ * @param input - The compressed Uint8Array.
61
+ * @param encoding - The compression encoding ('gzip', 'deflate').
62
+ * @returns The decompressed Uint8Array, or the original input if not applicable.
63
+ */
64
+ async function decompressOnceWeb(input, encoding) {
65
+ const enc = encoding.trim().toLowerCase();
66
+ if (typeof globalThis.DecompressionStream === "undefined")
67
+ return input;
68
+ const isGzip = enc === "gzip" || enc === "x-gzip";
69
+ const isDeflate = enc === "deflate";
70
+ if (!isGzip && !isDeflate)
71
+ return input;
72
+ const format = isGzip ? "gzip" : "deflate";
73
+ const inputStream = new ReadableStream({
74
+ start(controller) {
75
+ controller.enqueue(input);
76
+ controller.close();
77
+ },
78
+ });
79
+ const decompressedStream = inputStream.pipeThrough(new globalThis.DecompressionStream(format));
80
+ const reader = decompressedStream.getReader();
81
+ const chunks = [];
82
+ let totalLength = 0;
83
+ try {
84
+ while (true) {
85
+ const { done, value } = await reader.read();
86
+ if (done)
87
+ break;
88
+ if (value) {
89
+ chunks.push(value);
90
+ totalLength += value.byteLength;
91
+ }
92
+ }
93
+ }
94
+ finally {
95
+ reader.releaseLock();
96
+ }
97
+ if (chunks.length === 0)
98
+ return new Uint8Array(0);
99
+ if (chunks.length === 1)
100
+ return chunks[0];
101
+ const result = new Uint8Array(totalLength);
102
+ let offset = 0;
103
+ for (const chunk of chunks) {
104
+ result.set(chunk, offset);
105
+ offset += chunk.byteLength;
106
+ }
107
+ return result;
108
+ }
109
+ /**
110
+ * @ru Декомпрессирует буфер с использованием node:zlib.
111
+ * Поддерживает gzip, deflate и brotli.
112
+ * @en Decompresses a buffer using node:zlib.
113
+ * Supports gzip, deflate, and brotli.
114
+ * @param input - The compressed Uint8Array.
115
+ * @param encoding - The compression encoding.
116
+ * @returns The decompressed Uint8Array.
51
117
  */
52
- function decompressOnce(input, encoding) {
118
+ async function decompressOnceNode(input, encoding) {
119
+ const enc = encoding.trim().toLowerCase();
120
+ const zlib = await runtimeImport("node:zlib");
53
121
  const buffer = Buffer.from(input.buffer, input.byteOffset, input.byteLength);
54
- switch (encoding) {
122
+ switch (enc) {
55
123
  case "gzip":
56
124
  case "x-gzip":
57
- return gunzipSync(buffer);
125
+ return new Uint8Array(zlib.gunzipSync(buffer));
58
126
  case "deflate":
59
- return inflateSync(buffer);
127
+ return new Uint8Array(zlib.inflateSync(buffer));
60
128
  case "br":
61
- return brotliDecompressSync(buffer);
129
+ return new Uint8Array(zlib.brotliDecompressSync(buffer));
62
130
  default:
63
131
  return input;
64
132
  }
65
133
  }
66
134
  /**
67
- * @ru Полностью декомпрессирует буфер, последовательно применяя цепочку алгоритмов из Content-Encoding.
68
- * @en Fully decompresses a buffer by sequentially applying the Content-Encoding chain.
69
- * @param body - Compressed Uint8Array body.
70
- * @param encoding - Raw Content-Encoding header (may contain multiple comma-separated values).
71
- * @returns Decompressed buffer with a noop dump method.
135
+ * @ru Декомпрессирует буфер с поддержкой множественных кодировок.
136
+ * Сначала пытается Web API, затем fallback на node:zlib для серверных сред.
137
+ * @en Decompresses a buffer with support for multiple encodings.
138
+ * Tries Web API first, then falls back to node:zlib for server environments.
139
+ * @param body - The compressed Uint8Array.
140
+ * @param encoding - The Content-Encoding header value (e.g., 'gzip, br').
141
+ * @returns The decompressed buffer with dump() method attached.
72
142
  */
73
- export function decompressBuffer(body, encoding) {
143
+ export async function decompressBuffer(body, encoding) {
74
144
  let current = body;
75
145
  const encodings = parseEncodings(encoding);
76
146
  for (let i = 0; i < encodings.length; i++) {
77
- current = decompressOnce(current, encodings[i]);
147
+ const enc = encodings[i];
148
+ const webResult = await decompressOnceWeb(current, enc);
149
+ if (webResult !== current) {
150
+ current = webResult;
151
+ continue;
152
+ }
153
+ if (IS_SERVER && (enc === "br" || enc === "gzip" || enc === "deflate" || enc === "x-gzip")) {
154
+ try {
155
+ current = await decompressOnceNode(current, enc);
156
+ }
157
+ catch {
158
+ continue;
159
+ }
160
+ }
78
161
  }
79
162
  return attachNoopDump(current);
80
163
  }
81
164
  /**
82
- * @ru Создаёт декомпрессирующий поток, минимизируя конвертацию между Web и Node.js стримами.
83
- * @en Creates a decompressing stream while minimising conversion between Web and Node.js streams.
84
- *
85
- * @ru Алгоритм: для gzip/deflate при наличии глобального DecompressionStream использует Web Streams API,
86
- * иначе переключается на Node.js zlib. Brotli всегда идёт через Node.js (до появления стандартного Web-потока).
87
- * @en Algorithm: for gzip/deflate, if global DecompressionStream is available, uses Web Streams API;
88
- * otherwise falls back to Node.js zlib. Brotli always goes through Node.js (until standard Web stream is available).
89
- *
90
- * @param body - Original compressed ReadableStream.
91
- * @param encoding - Raw Content-Encoding header (may be a chain).
92
- * @returns Decompressed ReadableStream with a dump method that cancels the stream.
165
+ * @ru Создаёт декомпрессированный стрим с поддержкой множественных кодировок.
166
+ * Использует DecompressionStream для Web и node:zlib для Node.js.
167
+ * @en Creates a decompressed stream with support for multiple encodings.
168
+ * Uses DecompressionStream for Web and node:zlib for Node.js.
169
+ * @param body - The compressed ReadableStream.
170
+ * @param encoding - The Content-Encoding header value (e.g., 'gzip, br').
171
+ * @returns The decompressed stream with dump() method attached.
93
172
  */
94
- export function createDecompressStream(body, encoding) {
173
+ export async function createDecompressStream(body, encoding) {
95
174
  const encodings = parseEncodings(encoding);
96
175
  if (encodings.length === 0)
97
176
  return attachStreamDump(body);
98
177
  let current = body;
99
- let nodeReadableStream = null;
100
178
  for (let i = 0; i < encodings.length; i++) {
101
179
  const enc = encodings[i];
102
180
  const isGzip = enc === "gzip" || enc === "x-gzip";
103
181
  const isDeflate = enc === "deflate";
104
- if ((isGzip || isDeflate) && typeof DecompressionStream !== "undefined") {
105
- if (nodeReadableStream) {
106
- current = Readable.toWeb(nodeReadableStream);
107
- nodeReadableStream = null;
108
- }
109
- current = current.pipeThrough(new DecompressionStream(isGzip ? "gzip" : "deflate"));
182
+ const isBrotli = enc === "br";
183
+ if ((isGzip || isDeflate) && typeof globalThis.DecompressionStream !== "undefined") {
184
+ const format = isGzip ? "gzip" : "deflate";
185
+ current = current.pipeThrough(new globalThis.DecompressionStream(format));
110
186
  }
111
- else {
112
- if (!nodeReadableStream) {
113
- nodeReadableStream = Readable.fromWeb(current);
187
+ else if (IS_SERVER) {
188
+ try {
189
+ const { Readable } = await runtimeImport("node:stream");
190
+ const zlib = await runtimeImport("node:zlib");
191
+ const nodeReadableStream = Readable.fromWeb(current);
192
+ let transformer = nodeReadableStream;
193
+ if (isGzip)
194
+ transformer = nodeReadableStream.pipe(zlib.createGunzip());
195
+ else if (isDeflate)
196
+ transformer = nodeReadableStream.pipe(zlib.createInflate());
197
+ else if (isBrotli)
198
+ transformer = nodeReadableStream.pipe(zlib.createBrotliDecompress());
199
+ current = Readable.toWeb(transformer);
200
+ }
201
+ catch {
202
+ continue;
114
203
  }
115
- if (isGzip)
116
- nodeReadableStream = nodeReadableStream.pipe(createGunzip());
117
- else if (isDeflate)
118
- nodeReadableStream = nodeReadableStream.pipe(createInflate());
119
- else if (enc === "br")
120
- nodeReadableStream = nodeReadableStream.pipe(createBrotliDecompress());
121
204
  }
122
205
  }
123
- if (nodeReadableStream) {
124
- current = Readable.toWeb(nodeReadableStream);
125
- }
126
206
  return attachStreamDump(current);
127
207
  }
128
208
  //# sourceMappingURL=decompress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC;;;;;GAKG;AACH,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,QAAQ;SACZ,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACxC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAAkB;IACxC,MAAM,OAAO,GAAG,MAAuB,CAAC;IACxC,OAAO,CAAC,IAAI,GAAG,KAAK,IAAmB,EAAE,GAAE,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAAkC;IAC1D,MAAM,OAAO,GAAG,MAAuB,CAAC;IACxC,OAAO,CAAC,IAAI,GAAG,KAAK,IAAmB,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,KAAiB,EAAE,QAAgB;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE7E,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,IAAI;YACP,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAgB,EAChB,QAAgB;IAEhB,IAAI,OAAO,GAAe,IAAI,CAAC;IAC/B,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAgC,EAChC,QAAgB;IAEhB,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,OAAO,GAA+B,IAAI,CAAC;IAC/C,IAAI,kBAAkB,GAAoB,IAAI,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,CAAC;QAClD,MAAM,SAAS,GAAG,GAAG,KAAK,SAAS,CAAC;QAEpC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,OAAO,mBAAmB,KAAK,WAAW,EAAE,CAAC;YACxE,IAAI,kBAAkB,EAAE,CAAC;gBACvB,OAAO,GAAG,QAAQ,CAAC,KAAK,CACtB,kBAAkB,CACsB,CAAC;gBAC3C,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,WAAW,CAC3B,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAGlD,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CACnC,OAA0E,CAC3E,CAAC;YACJ,CAAC;YAED,IAAI,MAAM;gBAAE,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;iBACpE,IAAI,SAAS;gBAChB,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;iBAC3D,IAAI,GAAG,KAAK,IAAI;gBACnB,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,GAAG,QAAQ,CAAC,KAAK,CACtB,kBAAkB,CACsB,CAAC;IAC7C,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"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"}
package/utils/errors.d.ts CHANGED
@@ -11,12 +11,6 @@ export declare class HttpClientError extends Error {
11
11
  /**
12
12
  * @ru Создает новый экземпляр HttpClientError.
13
13
  * @en Creates a new HttpClientError instance.
14
- * @param message - Human-readable error message text.
15
- * @param code - Internal stringified error state identifier code.
16
- * @param statusCode - Numerical HTTP response status code received from the server.
17
- * @param originalError - Raw captured exception instance causing this failure.
18
- * @param url - Targeted request URL destination string.
19
- * @param method - HTTP method verb utilized for the request.
20
14
  */
21
15
  constructor(message: string, code?: string, statusCode?: number | undefined, originalError?: Error | undefined, url?: string | undefined, method?: string | undefined);
22
16
  }
@@ -28,8 +22,6 @@ export declare class TimeoutError extends HttpClientError {
28
22
  /**
29
23
  * @ru Создает новый экземпляр TimeoutError.
30
24
  * @en Creates a new TimeoutError instance.
31
- * @param url - Targeted request URL destination string.
32
- * @param timeout - Threshold duration statement in milliseconds.
33
25
  */
34
26
  constructor(url: string, timeout: number);
35
27
  }
@@ -41,8 +33,6 @@ export declare class RateLimitError extends HttpClientError {
41
33
  /**
42
34
  * @ru Создает новый экземпляр RateLimitError.
43
35
  * @en Creates a new RateLimitError instance.
44
- * @param url - Targeted request URL destination string.
45
- * @param retryAfter - Optional cool-down period duration in milliseconds before the next retry attempt.
46
36
  */
47
37
  constructor(url: string, retryAfter?: number);
48
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAa/B,IAAI,EAAE,MAAM;IACZ,UAAU,CAAC,EAAE,MAAM;IACnB,aAAa,CAAC,EAAE,KAAK;IACrB,GAAG,CAAC,EAAE,MAAM;IACZ,MAAM,CAAC,EAAE,MAAM;IAhBxB;;;;;;;;;OASG;gBAED,OAAO,EAAE,MAAM,EACR,IAAI,GAAE,MAAqB,EAC3B,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,aAAa,CAAC,EAAE,KAAK,YAAA,EACrB,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,MAAM,CAAC,EAAE,MAAM,YAAA;CAKzB;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C;;;;;OAKG;gBACS,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIzC;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD;;;;;OAKG;gBACS,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAU7C"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAO/B,IAAI,EAAE,MAAM;IACZ,UAAU,CAAC,EAAE,MAAM;IACnB,aAAa,CAAC,EAAE,KAAK;IACrB,GAAG,CAAC,EAAE,MAAM;IACZ,MAAM,CAAC,EAAE,MAAM;IAVxB;;;OAGG;gBAED,OAAO,EAAE,MAAM,EACR,IAAI,GAAE,MAAqB,EAC3B,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,aAAa,CAAC,EAAE,KAAK,YAAA,EACrB,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,MAAM,CAAC,EAAE,MAAM,YAAA;CAKzB;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C;;;OAGG;gBACS,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIzC;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD;;;OAGG;gBACS,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAU7C"}
package/utils/errors.js CHANGED
@@ -11,15 +11,9 @@ export class HttpClientError extends Error {
11
11
  /**
12
12
  * @ru Создает новый экземпляр HttpClientError.
13
13
  * @en Creates a new HttpClientError instance.
14
- * @param message - Human-readable error message text.
15
- * @param code - Internal stringified error state identifier code.
16
- * @param statusCode - Numerical HTTP response status code received from the server.
17
- * @param originalError - Raw captured exception instance causing this failure.
18
- * @param url - Targeted request URL destination string.
19
- * @param method - HTTP method verb utilized for the request.
20
14
  */
21
15
  constructor(message, code = "HTTP_ERROR", statusCode, originalError, url, method) {
22
- super(message);
16
+ super(message, originalError ? { cause: originalError } : undefined);
23
17
  this.code = code;
24
18
  this.statusCode = statusCode;
25
19
  this.originalError = originalError;
@@ -36,8 +30,6 @@ export class TimeoutError extends HttpClientError {
36
30
  /**
37
31
  * @ru Создает новый экземпляр TimeoutError.
38
32
  * @en Creates a new TimeoutError instance.
39
- * @param url - Targeted request URL destination string.
40
- * @param timeout - Threshold duration statement in milliseconds.
41
33
  */
42
34
  constructor(url, timeout) {
43
35
  super(`Timeout after ${timeout}ms`, "TIMEOUT", 408, undefined, url);
@@ -52,8 +44,6 @@ export class RateLimitError extends HttpClientError {
52
44
  /**
53
45
  * @ru Создает новый экземпляр RateLimitError.
54
46
  * @en Creates a new RateLimitError instance.
55
- * @param url - Targeted request URL destination string.
56
- * @param retryAfter - Optional cool-down period duration in milliseconds before the next retry attempt.
57
47
  */
58
48
  constructor(url, retryAfter) {
59
49
  super(`Rate limited${retryAfter ? ` retry in ${retryAfter}ms` : ""}`, "RATE_LIMIT", 429, undefined, url);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAa/B;IACA;IACA;IACA;IACA;IAhBT;;;;;;;;;OASG;IACH,YACE,OAAe,EACR,OAAe,YAAY,EAC3B,UAAmB,EACnB,aAAqB,EACrB,GAAY,EACZ,MAAe;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QANR,SAAI,GAAJ,IAAI,CAAuB;QAC3B,eAAU,GAAV,UAAU,CAAS;QACnB,kBAAa,GAAb,aAAa,CAAQ;QACrB,QAAG,GAAH,GAAG,CAAS;QACZ,WAAM,GAAN,MAAM,CAAS;QAGtB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,eAAe;IAC/C;;;;;OAKG;IACH,YAAY,GAAW,EAAE,OAAe;QACtC,KAAK,CAAC,iBAAiB,OAAO,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD;;;;;OAKG;IACH,YAAY,GAAW,EAAE,UAAmB;QAC1C,KAAK,CACH,eAAe,UAAU,CAAC,CAAC,CAAC,aAAa,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAC9D,YAAY,EACZ,GAAG,EACH,SAAS,EACT,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAO/B;IACA;IACA;IACA;IACA;IAVT;;;OAGG;IACH,YACE,OAAe,EACR,OAAe,YAAY,EAC3B,UAAmB,EACnB,aAAqB,EACrB,GAAY,EACZ,MAAe;QAEtB,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAN9D,SAAI,GAAJ,IAAI,CAAuB;QAC3B,eAAU,GAAV,UAAU,CAAS;QACnB,kBAAa,GAAb,aAAa,CAAQ;QACrB,QAAG,GAAH,GAAG,CAAS;QACZ,WAAM,GAAN,MAAM,CAAS;QAGtB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,eAAe;IAC/C;;;OAGG;IACH,YAAY,GAAW,EAAE,OAAe;QACtC,KAAK,CAAC,iBAAiB,OAAO,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD;;;OAGG;IACH,YAAY,GAAW,EAAE,UAAmB;QAC1C,KAAK,CACH,eAAe,UAAU,CAAC,CAAC,CAAC,aAAa,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAC9D,YAAY,EACZ,GAAG,EACH,SAAS,EACT,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
package/utils/merge.d.ts CHANGED
@@ -1,9 +1,6 @@
1
1
  /**
2
2
  * @ru Рекурсивно объединяет два объекта. Избегает лишних аллокаций памяти и защищает от разделения ссылок nested-структур.
3
3
  * @en Recursively merges two objects. Avoids redundant memory allocations and prevents shared reference leakage for nested structures.
4
- * @param target - Foundational target base object layout.
5
- * @param source - High-priority source object containing overrides.
6
- * @returns New deeply merged intersection object.
7
4
  */
8
5
  export declare function deepMerge<T extends Record<string, unknown>, S extends Record<string, unknown>>(target: T, source: S): T & S;
9
6
  //# sourceMappingURL=merge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAuB7B"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5F,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,CAAC,GACR,CAAC,GAAG,CAAC,CAoBP"}
package/utils/merge.js CHANGED
@@ -1,9 +1,6 @@
1
1
  /**
2
2
  * @ru Рекурсивно объединяет два объекта. Избегает лишних аллокаций памяти и защищает от разделения ссылок nested-структур.
3
3
  * @en Recursively merges two objects. Avoids redundant memory allocations and prevents shared reference leakage for nested structures.
4
- * @param target - Foundational target base object layout.
5
- * @param source - High-priority source object containing overrides.
6
- * @returns New deeply merged intersection object.
7
4
  */
8
5
  export function deepMerge(target, source) {
9
6
  const output = { ...target };
@@ -25,7 +22,6 @@ export function deepMerge(target, source) {
25
22
  /**
26
23
  * @ru Быстрая проверка, является ли переданный элемент чистым объектом (исключая массивы и null).
27
24
  * @en Fast check verifying if the provided item is a plain object layout (excluding arrays and null).
28
- * @param item - Evaluated runtime variable value context.
29
25
  */
30
26
  function isObject(item) {
31
27
  return Object.prototype.toString.call(item) === "[object Object]";
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAGvB,MAAS,EAAE,MAAS;IACpB,MAAM,MAAM,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IAEtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,WAAsC,EACtC,WAAsC,CACvC,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;gBACjC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,WAAsC,CAAC;gBACvD,CAAC,CAAC,WAAW,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAe,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,IAAa;IAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,MAAS,EACT,MAAS;IAET,MAAM,MAAM,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,WAAsC,EACtC,WAAsC,CACvC,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;gBACjC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,WAAsC,CAAC;gBACvD,CAAC,CAAC,WAAW,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,MAAe,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CAAC,IAAa;IAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC;AACpE,CAAC"}
@@ -1,32 +1,52 @@
1
1
  import type { Method, RequestBodyData } from "@hyperttp/types";
2
+ type NormalizedHeaders = Record<string, string | string[]>;
2
3
  /**
3
- * @ru Нормализует строку HTTP-метода в стандартную заглавную форму (например, "get" → "GET").
4
- * @en Normalizes an HTTP method string to its standard uppercase form (e.g., "get" → "GET").
5
- * @param method - Raw method string.
6
- * @returns Normalized method (e.g., "GET", "POST", etc.).
4
+ * @ru Нормализует HTTP-метод в верхний регистр с кэшированием.
5
+ * @en Normalizes HTTP method to uppercase with caching.
6
+ * @param method - The HTTP method string (e.g., 'get', 'POST').
7
+ * @returns The normalized HTTP method in uppercase.
7
8
  */
8
9
  export declare function normalizeMethod(method: string): Method;
9
10
  /**
10
- * @ru Извлекает и нормализует URL из строки или объекта запроса (поддерживает поля url, _url, или комбинацию scheme/host/path).
11
- * @en Extracts and normalizes a URL from a string or request object (supports url, _url fields, or scheme/host/path combination).
12
- * @param req - Request object or plain URL string.
13
- * @returns Normalized URL string.
14
- * @throws If URL cannot be determined.
11
+ * @ru Извлекает URL из объекта запроса или строки.
12
+ * Поддерживает различные форматы: строка, объект с полем `url`, `_url`, или `scheme/host/path`.
13
+ * @en Extracts URL from a request object or string.
14
+ * Supports various formats: string, object with `url`, `_url`, or `scheme/host/path` fields.
15
+ * @param req - The request object or URL string.
16
+ * @returns The extracted URL string.
17
+ * @throws Error if URL is missing in the request.
15
18
  */
16
- export declare function normalizeUrl(req: any): string;
19
+ export declare function normalizeUrl(req: unknown): string;
17
20
  /**
18
- * @ru Нормализует входные заголовки (объект, массив пар) в стандартный объект с ключами в нижнем регистре и правильным объединением значений.
19
- * @en Normalizes input headers (object, array of pairs) into a standard object with lower‑case keys and proper value merging.
20
- * @param headers - Raw headers (plain object, array of [key, value] pairs, or null/undefined).
21
- * @returns Normalized headers object (keys are lower‑case, values are strings or arrays for set-cookie).
21
+ * @ru Нормализует заголовки запроса в единый формат с ключами в нижнем регистре.
22
+ * Поддерживает различные входные форматы: объект, массив пар, плоский массив.
23
+ *
24
+ * Специальные правила:
25
+ * - `set-cookie` всегда хранится как массив
26
+ * - `cookie`/`cookie2` объединяются через `; `
27
+ * - Остальные множественные заголовки объединяются через `, `
28
+ * - Заголовки из SINGLE_VALUE_HEADERS перезаписываются (не объединяются)
29
+ *
30
+ * @en Normalizes request headers into a unified format with lowercase keys.
31
+ * Supports various input formats: object, array of pairs, flat array.
32
+ *
33
+ * Special rules:
34
+ * - `set-cookie` is always stored as an array
35
+ * - `cookie`/`cookie2` are joined with `; `
36
+ * - Other multiple headers are joined with `, `
37
+ * - Headers from SINGLE_VALUE_HEADERS are overwritten (not merged)
38
+ *
39
+ * @param headers - The headers to normalize (object, array of pairs, or flat array).
40
+ * @returns Normalized headers object with lowercase keys.
22
41
  */
23
- export declare function normalizeHeaders(headers: unknown): Record<string, string | string[]>;
42
+ export declare function normalizeHeaders(headers: unknown): NormalizedHeaders;
24
43
  /**
25
- * @ru Возвращает тело запроса только для методов, поддерживающих тело (не GET/HEAD), иначе undefined.
26
- * @en Returns the request body only for methods that support a body (not GET/HEAD), otherwise undefined.
27
- * @param method - HTTP method.
28
- * @param body - Original request body (if any).
29
- * @returns The body for allowed methods, or undefined for GET/HEAD.
44
+ * @ru Нормализует тело запроса, удаляя его для методов GET и HEAD.
45
+ * @en Normalizes request body by removing it for GET and HEAD methods.
46
+ * @param method - The HTTP method.
47
+ * @param body - The request body data.
48
+ * @returns The body for methods that support it, or undefined for GET/HEAD.
30
49
  */
31
50
  export declare function normalizeBody(method: Method, body: RequestBodyData | undefined): RequestBodyData | undefined;
51
+ export {};
32
52
  //# sourceMappingURL=normalize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAuC/D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAU7C;AA0CD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CA+CnC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GAAG,SAAS,GAChC,eAAe,GAAG,SAAS,CAE7B"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAqH3D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAwBjD;AAmED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAqDpE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GAAG,SAAS,GAChC,eAAe,GAAG,SAAS,CAE7B"}