@hyperttp/core 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,3 @@
1
- /**
2
- * @ru Множество заголовков, которые должны иметь только одно значение (не объединяются при повторении).
3
- * @en Set of headers that should have only a single value (not merged when repeated).
4
- */
5
1
  const SINGLE_VALUE_HEADERS = Object.create(null);
6
2
  const svh = [
7
3
  "content-type",
@@ -21,10 +17,6 @@ const svh = [
21
17
  for (let i = 0; i < svh.length; i++) {
22
18
  SINGLE_VALUE_HEADERS[svh[i]] = true;
23
19
  }
24
- /**
25
- * @ru Кэш нормализованных методов HTTP для быстрого доступа.
26
- * @en Cache of normalized HTTP methods for fast lookup.
27
- */
28
20
  const METHOD_CACHE = {
29
21
  get: "GET",
30
22
  GET: "GET",
@@ -42,23 +34,21 @@ const METHOD_CACHE = {
42
34
  OPTIONS: "OPTIONS",
43
35
  };
44
36
  /**
45
- * @ru Нормализует метод HTTP: приводит к верхнему регистру, использует кэш для часто встречающихся методов.
46
- * @en Normalizes an HTTP method: converts to uppercase, uses cache for common methods.
47
- * @param method - Raw method string (e.g., 'get', 'POST').
48
- * @returns Normalized uppercase method.
37
+ * @ru Нормализует строку HTTP-метода в стандартную заглавную форму (например, "get" → "GET").
38
+ * @en Normalizes an HTTP method string to its standard uppercase form (e.g., "get" → "GET").
39
+ * @param method - Raw method string.
40
+ * @returns Normalized method (e.g., "GET", "POST", etc.).
49
41
  */
50
42
  export function normalizeMethod(method) {
51
43
  const cached = METHOD_CACHE[method];
52
- if (cached !== undefined)
53
- return cached;
54
- return method.toUpperCase();
44
+ return cached !== undefined ? cached : method.toUpperCase();
55
45
  }
56
46
  /**
57
- * @ru Извлекает URL из объекта запроса или строки. Поддерживает поля url, _url, или комбинацию scheme/host/path.
58
- * @en Extracts a URL from a request object or string. Supports url, _url fields, or scheme/host/path combination.
59
- * @param req - Request object or URL string.
47
+ * @ru Извлекает и нормализует URL из строки или объекта запроса (поддерживает поля url, _url, или комбинацию scheme/host/path).
48
+ * @en Extracts and normalizes a URL from a string or request object (supports url, _url fields, or scheme/host/path combination).
49
+ * @param req - Request object or plain URL string.
60
50
  * @returns Normalized URL string.
61
- * @throws If URL cannot be resolved.
51
+ * @throws If URL cannot be determined.
62
52
  */
63
53
  export function normalizeUrl(req) {
64
54
  if (typeof req === "string")
@@ -73,50 +63,57 @@ export function normalizeUrl(req) {
73
63
  throw new Error("URL missing in request");
74
64
  }
75
65
  /**
76
- * @ru Нормализует заголовки из различных форматов (массив, объект) в единый объект с правильной обработкой множественных значений (cookie, set-cookie).
77
- * @en Normalizes headers from various formats (array, object) into a single object with proper handling of multi-value headers (cookie, set-cookie).
78
- * @param headers - Raw headers in array or object format.
79
- * @returns Normalized headers object where values are strings or arrays of strings (for set-cookie).
66
+ * @ru Вспомогательная функция для добавления заголовка в результирующий объект с учётом правил объединения (одиночные, множественные, cookie, set-cookie).
67
+ * @en Helper function to append a header to the result object, respecting merging rules (single-value, multi-value, cookie, set-cookie).
68
+ * @param out - Target object accumulating headers.
69
+ * @param lowerKey - Header name in lower case.
70
+ * @param value - Header value as a string.
71
+ */
72
+ function appendHeader(out, lowerKey, value) {
73
+ if (SINGLE_VALUE_HEADERS[lowerKey] !== undefined) {
74
+ out[lowerKey] = value;
75
+ return;
76
+ }
77
+ const existing = out[lowerKey];
78
+ if (existing === undefined) {
79
+ out[lowerKey] = value;
80
+ return;
81
+ }
82
+ if (lowerKey === "set-cookie") {
83
+ if (Array.isArray(existing)) {
84
+ existing.push(value);
85
+ }
86
+ else {
87
+ out[lowerKey] = [existing, value];
88
+ }
89
+ return;
90
+ }
91
+ if (lowerKey === "cookie" || lowerKey === "cookie2") {
92
+ out[lowerKey] = `${existing}; ${value}`;
93
+ return;
94
+ }
95
+ out[lowerKey] = `${existing}, ${value}`;
96
+ }
97
+ /**
98
+ * @ru Нормализует входные заголовки (объект, массив пар) в стандартный объект с ключами в нижнем регистре и правильным объединением значений.
99
+ * @en Normalizes input headers (object, array of pairs) into a standard object with lower‑case keys and proper value merging.
100
+ * @param headers - Raw headers (plain object, array of [key, value] pairs, or null/undefined).
101
+ * @returns Normalized headers object (keys are lower‑case, values are strings or arrays for set-cookie).
80
102
  */
81
103
  export function normalizeHeaders(headers) {
82
104
  const out = Object.create(null);
83
105
  if (!headers || typeof headers !== "object")
84
106
  return out;
85
107
  if (Array.isArray(headers)) {
86
- for (let i = 0; i < headers.length; i += 2) {
108
+ const len = headers.length;
109
+ for (let i = 0; i < len; i += 2) {
87
110
  const key = headers[i];
88
111
  if (typeof key !== "string" || !key)
89
112
  continue;
90
113
  const rawValue = headers[i + 1];
91
114
  if (rawValue === undefined || rawValue === null)
92
115
  continue;
93
- const lower = key.toLowerCase();
94
- const value = typeof rawValue === "string" ? rawValue : String(rawValue);
95
- if (SINGLE_VALUE_HEADERS[lower] !== undefined) {
96
- out[lower] = value;
97
- continue;
98
- }
99
- const existing = out[lower];
100
- if (existing === undefined) {
101
- out[lower] = value;
102
- continue;
103
- }
104
- if (lower === "set-cookie") {
105
- if (Array.isArray(existing)) {
106
- existing.push(value);
107
- }
108
- else {
109
- out[lower] = [existing, value];
110
- }
111
- continue;
112
- }
113
- if (lower === "cookie" || lower === "cookie2") {
114
- out[lower] = `${existing}; ${value}`;
115
- continue;
116
- }
117
- out[lower] = Array.isArray(existing)
118
- ? `${existing.join(", ")}, ${value}`
119
- : `${existing}, ${value}`;
116
+ appendHeader(out, key.toLowerCase(), typeof rawValue === "string" ? rawValue : String(rawValue));
120
117
  }
121
118
  return out;
122
119
  }
@@ -128,81 +125,29 @@ export function normalizeHeaders(headers) {
128
125
  continue;
129
126
  const lower = key.toLowerCase();
130
127
  if (Array.isArray(val)) {
131
- for (let i = 0; i < val.length; i++) {
128
+ const vLen = val.length;
129
+ for (let i = 0; i < vLen; i++) {
132
130
  const rawValue = val[i];
133
- if (rawValue === undefined || rawValue === null)
134
- continue;
135
- const value = typeof rawValue === "string" ? rawValue : String(rawValue);
136
- if (SINGLE_VALUE_HEADERS[lower] !== undefined) {
137
- out[lower] = value;
138
- continue;
139
- }
140
- const existing = out[lower];
141
- if (existing === undefined) {
142
- out[lower] = value;
143
- continue;
144
- }
145
- if (lower === "set-cookie") {
146
- if (Array.isArray(existing)) {
147
- existing.push(value);
148
- }
149
- else {
150
- out[lower] = [existing, value];
151
- }
152
- continue;
131
+ if (rawValue !== undefined && rawValue !== null) {
132
+ appendHeader(out, lower, typeof rawValue === "string" ? rawValue : String(rawValue));
153
133
  }
154
- if (lower === "cookie" || lower === "cookie2") {
155
- out[lower] = `${existing}; ${value}`;
156
- continue;
157
- }
158
- out[lower] = Array.isArray(existing)
159
- ? `${existing.join(", ")}, ${value}`
160
- : `${existing}, ${value}`;
161
134
  }
162
135
  }
163
136
  else {
164
- const value = typeof val === "string" ? val : String(val);
165
- if (SINGLE_VALUE_HEADERS[lower] !== undefined) {
166
- out[lower] = value;
167
- continue;
168
- }
169
- const existing = out[lower];
170
- if (existing === undefined) {
171
- out[lower] = value;
172
- continue;
173
- }
174
- if (lower === "set-cookie") {
175
- if (Array.isArray(existing)) {
176
- existing.push(value);
177
- }
178
- else {
179
- out[lower] = [existing, value];
180
- }
181
- continue;
182
- }
183
- if (lower === "cookie" || lower === "cookie2") {
184
- out[lower] = `${existing}; ${value}`;
185
- continue;
186
- }
187
- out[lower] = Array.isArray(existing)
188
- ? `${existing.join(", ")}, ${value}`
189
- : `${existing}, ${value}`;
137
+ appendHeader(out, lower, typeof val === "string" ? val : String(val));
190
138
  }
191
139
  }
192
140
  }
193
141
  return out;
194
142
  }
195
143
  /**
196
- * @ru Нормализует тело запроса: для методов GET и HEAD тело всегда undefined, для остальных возвращает переданное тело.
197
- * @en Normalizes request body: for GET and HEAD methods body is always undefined, for others returns the provided body.
144
+ * @ru Возвращает тело запроса только для методов, поддерживающих тело (не GET/HEAD), иначе undefined.
145
+ * @en Returns the request body only for methods that support a body (not GET/HEAD), otherwise undefined.
198
146
  * @param method - HTTP method.
199
- * @param body - Raw request body.
200
- * @returns Normalized body or undefined.
147
+ * @param body - Original request body (if any).
148
+ * @returns The body for allowed methods, or undefined for GET/HEAD.
201
149
  */
202
150
  export function normalizeBody(method, body) {
203
- if (method === "GET" || method === "HEAD") {
204
- return undefined;
205
- }
206
- return body ?? undefined;
151
+ return method === "GET" || method === "HEAD" ? undefined : body;
207
152
  }
208
153
  //# sourceMappingURL=normalize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"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"}
@@ -1,40 +1,58 @@
1
1
  import type { HttpResponse, HyperTransport, StreamResponse } from "@hyperttp/types";
2
2
  type TransportResponse = Awaited<ReturnType<HyperTransport["execute"]>>;
3
3
  /**
4
- * @ru Высокопроизводительный глубокий клон тела ответа. Безопасно пропускает стримы и буферы без мутации рантайма.
5
- * @en High-performance deep clone for response payloads. Safely bypasses streams and buffers to prevent runtime state mutations.
6
- * @param body - Targeted data or stream context to clone.
4
+ * @ru Высокопроизводительный глубокий клон тела ответа. Safe-bypass для стримов и буферов.
5
+ * @en High-performance deep clone of response body. Safe-bypass for streams and buffers.
6
+ * @param body - The response body (any type).
7
+ * @returns Cloned body (or original for streams/buffers).
7
8
  */
8
9
  export declare const cloneBodyFast: <T>(body: T) => T;
9
10
  /**
10
- * @ru Контекстный обработчик для создания независимого изолированного клона объекта HttpResponse.
11
- * @en Contextual execution handler to generate an isolated deep clone of the HttpResponse instance.
11
+ * @ru Класс-контейнер ответа с фиксированной структурой полей для V8 / JSC. Все методы вынесены в прототип, исключая аллокации замыканий в куче.
12
+ * @en Response container class with fixed field structure for V8 / JSC. All methods are on the prototype, avoiding closure allocations in the heap.
12
13
  */
13
- export declare function responseCloneHandler<T>(this: HttpResponse<T>): HttpResponse<T>;
14
- /**
15
- * @ru Быстрый маппинг сырого низкоуровневого ответа сетевого транспорта в плоский объект Hyperttp.
16
- * @en Fast mapping from raw low-level network transport response into flat Hyperttp object layouts.
17
- * @param rawResponse - Target instance returned by a transport executor.
18
- */
19
- export declare const mapResponseFast: (rawResponse: TransportResponse) => {
14
+ export declare class HyperHttpResponse<T = unknown> implements HttpResponse<T> {
20
15
  status: number;
21
16
  headers: Record<string, string | string[]>;
22
- body: import("@hyperttp/types").TransportResponsePayload;
17
+ body: any;
23
18
  url: string;
24
- clone: typeof responseCloneHandler;
25
- data: null;
26
- };
19
+ data: T | null;
20
+ json: () => Promise<any>;
21
+ text: () => Promise<string>;
22
+ dump: () => Promise<void>;
23
+ /**
24
+ * @ru Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
25
+ * @en Creates a HyperHttpResponse instance from a raw transport response.
26
+ * @param rawResponse - Raw response from transport layer.
27
+ */
28
+ constructor(rawResponse: TransportResponse);
29
+ /**
30
+ * @ru Создаёт глубокую копию текущего ответа (безопасно для стримов и буферов).
31
+ * @en Creates a deep copy of the current response (safe for streams and buffers).
32
+ * @returns A new HttpResponse instance with cloned data.
33
+ */
34
+ clone(): HttpResponse<T>;
35
+ }
36
+ /**
37
+ * @ru Быстрый маппинг сырого ответа через выделение мономорфного класса.
38
+ * @en Fast mapping of a raw response using a monomorphic class.
39
+ * @param rawResponse - Raw transport response.
40
+ * @returns Normalized HttpResponse.
41
+ */
42
+ export declare const mapResponseFast: (rawResponse: TransportResponse) => HttpResponse<unknown>;
27
43
  /**
28
- * @ru Быстрый маппинг сырого ответа транспорта в специализированный объект потокового ответа StreamResponse.
29
- * @en Fast mapping from raw transport context into a specialized streaming response StreamResponse layout.
30
- * @param rawResponse - Target instance returned by a transport executor.
44
+ * @ru Быстрый маппинг сырого ответа в специализированный объект StreamResponse.
45
+ * @en Fast mapping of a raw response to a specialised StreamResponse object.
46
+ * @param rawResponse - Raw transport response.
47
+ * @returns Normalized StreamResponse.
31
48
  */
32
49
  export declare const mapStreamFast: (rawResponse: TransportResponse) => StreamResponse<unknown>;
33
50
  /**
34
- * @ru Zero-allocation слияние заголовков. Полностью избегает вызовов `Object.keys()` и выделения массивов в куче.
35
- * @en Zero-allocation headers merging layout. Completely avoids `Object.keys()` overhead and heavy heap array operations.
36
- * @param base - Primary dictionary containing foundational header values.
37
- * @param override - High-priority map containing overrides or additions.
51
+ * @ru Zero-allocation слияние заголовков с оптимизированным циклом копирования свойств.
52
+ * @en Zero-allocation header merging with optimised property copying loop.
53
+ * @param base - Base headers object (will be shallow-copied if overrides exist).
54
+ * @param override - Optional headers to override or add.
55
+ * @returns Merged headers object (new object if overrides provided, otherwise base).
38
56
  */
39
57
  export declare const mergeHeadersFast: (base: Record<string, string | string[]>, override?: Record<string, string | string[]>) => Record<string, string | string[]>;
40
58
  export {};
@@ -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;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,CAsB1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GACpB,YAAY,CAAC,CAAC,CAAC,CAWjB;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,iBAAiB;;;;;;;CAO5D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,aAAa,iBAAiB,KAC7B,cAAc,CAAC,OAAO,CAKvB,CAAC;AAEH;;;;;GAKG;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,CASlC,CAAC"}
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,KAAK,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,CAsB1C,CAAC;AAEF;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,GAAG,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAEf,IAAI,EAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;;OAIG;gBACS,WAAW,EAAE,iBAAiB;IAY1C;;;;OAIG;IACI,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;CAehC;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,aAAa,iBAAiB,KAC7B,YAAY,CAAC,OAAO,CAEtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,aAAa,iBAAiB,KAC7B,cAAc,CAAC,OAAO,CAKvB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EACvC,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,KAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBlC,CAAC"}
package/utils/response.js CHANGED
@@ -1,7 +1,8 @@
1
1
  /**
2
- * @ru Высокопроизводительный глубокий клон тела ответа. Безопасно пропускает стримы и буферы без мутации рантайма.
3
- * @en High-performance deep clone for response payloads. Safely bypasses streams and buffers to prevent runtime state mutations.
4
- * @param body - Targeted data or stream context to clone.
2
+ * @ru Высокопроизводительный глубокий клон тела ответа. Safe-bypass для стримов и буферов.
3
+ * @en High-performance deep clone of response body. Safe-bypass for streams and buffers.
4
+ * @param body - The response body (any type).
5
+ * @returns Cloned body (or original for streams/buffers).
5
6
  */
6
7
  export const cloneBodyFast = (body) => {
7
8
  if (typeof body !== "object" || body === null)
@@ -25,38 +26,66 @@ export const cloneBodyFast = (body) => {
25
26
  }
26
27
  };
27
28
  /**
28
- * @ru Контекстный обработчик для создания независимого изолированного клона объекта HttpResponse.
29
- * @en Contextual execution handler to generate an isolated deep clone of the HttpResponse instance.
29
+ * @ru Класс-контейнер ответа с фиксированной структурой полей для V8 / JSC. Все методы вынесены в прототип, исключая аллокации замыканий в куче.
30
+ * @en Response container class with fixed field structure for V8 / JSC. All methods are on the prototype, avoiding closure allocations in the heap.
30
31
  */
31
- export function responseCloneHandler() {
32
- return {
33
- status: this.status,
34
- headers: { ...this.headers },
35
- body: cloneBodyFast(this.body),
36
- url: this.url,
37
- clone: responseCloneHandler,
38
- json: this.json,
39
- text: this.text,
40
- dump: this.dump,
41
- };
32
+ export class HyperHttpResponse {
33
+ status;
34
+ headers;
35
+ body;
36
+ url;
37
+ data;
38
+ json;
39
+ text;
40
+ dump;
41
+ /**
42
+ * @ru Создаёт экземпляр HyperHttpResponse из сырого транспортного ответа.
43
+ * @en Creates a HyperHttpResponse instance from a raw transport response.
44
+ * @param rawResponse - Raw response from transport layer.
45
+ */
46
+ constructor(rawResponse) {
47
+ this.status = rawResponse.status;
48
+ this.headers = rawResponse.headers;
49
+ this.body = rawResponse.body;
50
+ this.url = rawResponse.url ?? "";
51
+ this.data = null;
52
+ this.json = rawResponse.json;
53
+ this.text = rawResponse.text;
54
+ this.dump = rawResponse.dump;
55
+ }
56
+ /**
57
+ * @ru Создаёт глубокую копию текущего ответа (безопасно для стримов и буферов).
58
+ * @en Creates a deep copy of the current response (safe for streams and buffers).
59
+ * @returns A new HttpResponse instance with cloned data.
60
+ */
61
+ clone() {
62
+ const cloned = new HyperHttpResponse({
63
+ status: this.status,
64
+ headers: { ...this.headers },
65
+ body: cloneBodyFast(this.body),
66
+ url: this.url,
67
+ });
68
+ cloned.json = this.json;
69
+ cloned.text = this.text;
70
+ cloned.dump = this.dump;
71
+ cloned.data = this.data;
72
+ return cloned;
73
+ }
42
74
  }
43
75
  /**
44
- * @ru Быстрый маппинг сырого низкоуровневого ответа сетевого транспорта в плоский объект Hyperttp.
45
- * @en Fast mapping from raw low-level network transport response into flat Hyperttp object layouts.
46
- * @param rawResponse - Target instance returned by a transport executor.
76
+ * @ru Быстрый маппинг сырого ответа через выделение мономорфного класса.
77
+ * @en Fast mapping of a raw response using a monomorphic class.
78
+ * @param rawResponse - Raw transport response.
79
+ * @returns Normalized HttpResponse.
47
80
  */
48
- export const mapResponseFast = (rawResponse) => ({
49
- status: rawResponse.status,
50
- headers: rawResponse.headers,
51
- body: rawResponse.body,
52
- url: rawResponse.url ?? "",
53
- clone: responseCloneHandler,
54
- data: null,
55
- });
81
+ export const mapResponseFast = (rawResponse) => {
82
+ return new HyperHttpResponse(rawResponse);
83
+ };
56
84
  /**
57
- * @ru Быстрый маппинг сырого ответа транспорта в специализированный объект потокового ответа StreamResponse.
58
- * @en Fast mapping from raw transport context into a specialized streaming response StreamResponse layout.
59
- * @param rawResponse - Target instance returned by a transport executor.
85
+ * @ru Быстрый маппинг сырого ответа в специализированный объект StreamResponse.
86
+ * @en Fast mapping of a raw response to a specialised StreamResponse object.
87
+ * @param rawResponse - Raw transport response.
88
+ * @returns Normalized StreamResponse.
60
89
  */
61
90
  export const mapStreamFast = (rawResponse) => ({
62
91
  status: rawResponse.status,
@@ -65,19 +94,30 @@ export const mapStreamFast = (rawResponse) => ({
65
94
  url: rawResponse.url ?? "",
66
95
  });
67
96
  /**
68
- * @ru Zero-allocation слияние заголовков. Полностью избегает вызовов `Object.keys()` и выделения массивов в куче.
69
- * @en Zero-allocation headers merging layout. Completely avoids `Object.keys()` overhead and heavy heap array operations.
70
- * @param base - Primary dictionary containing foundational header values.
71
- * @param override - High-priority map containing overrides or additions.
97
+ * @ru Zero-allocation слияние заголовков с оптимизированным циклом копирования свойств.
98
+ * @en Zero-allocation header merging with optimised property copying loop.
99
+ * @param base - Base headers object (will be shallow-copied if overrides exist).
100
+ * @param override - Optional headers to override or add.
101
+ * @returns Merged headers object (new object if overrides provided, otherwise base).
72
102
  */
73
103
  export const mergeHeadersFast = (base, override) => {
74
104
  if (!override)
75
105
  return base;
106
+ let hasKeys = false;
107
+ for (const key in override) {
108
+ if (Object.prototype.hasOwnProperty.call(override, key)) {
109
+ hasKeys = true;
110
+ break;
111
+ }
112
+ }
113
+ if (!hasKeys)
114
+ return base;
115
+ const out = { ...base };
76
116
  for (const key in override) {
77
117
  if (Object.prototype.hasOwnProperty.call(override, key)) {
78
- return { ...base, ...override };
118
+ out[key] = override[key];
79
119
  }
80
120
  }
81
- return base;
121
+ return out;
82
122
  };
83
123
  //# sourceMappingURL=response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAQA;;;;GAIG;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,UAAU,oBAAoB;IAGlC,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAA8B,EAAE,EAAE,CAAC,CAAC;IAClE,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;IAC1B,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH;;;;GAIG;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;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAuC,EACvC,QAA4C,EACT,EAAE;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,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,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"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"}