@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.
- package/Core/HyperCore.d.ts +140 -72
- package/Core/HyperCore.d.ts.map +1 -1
- package/Core/HyperCore.js +204 -169
- package/Core/HyperCore.js.map +1 -1
- package/README.md +169 -96
- package/package.json +2 -2
- package/transports/manager.d.ts +39 -55
- package/transports/manager.d.ts.map +1 -1
- package/transports/manager.js +104 -167
- package/transports/manager.js.map +1 -1
- package/transports/node.d.ts +18 -30
- package/transports/node.d.ts.map +1 -1
- package/transports/node.js +55 -151
- package/transports/node.js.map +1 -1
- package/utils/decompress.d.ts +16 -18
- package/utils/decompress.d.ts.map +1 -1
- package/utils/decompress.js +62 -51
- package/utils/decompress.js.map +1 -1
- package/utils/merge.js +12 -18
- package/utils/merge.js.map +1 -1
- package/utils/normalize.d.ts +16 -17
- package/utils/normalize.d.ts.map +1 -1
- package/utils/normalize.js +58 -113
- package/utils/normalize.js.map +1 -1
- package/utils/response.d.ts +41 -23
- package/utils/response.d.ts.map +1 -1
- package/utils/response.js +76 -36
- package/utils/response.js.map +1 -1
package/utils/normalize.js
CHANGED
|
@@ -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 Нормализует
|
|
46
|
-
* @en Normalizes an HTTP method
|
|
47
|
-
* @param method - Raw method string
|
|
48
|
-
* @returns Normalized
|
|
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
|
-
|
|
53
|
-
return cached;
|
|
54
|
-
return method.toUpperCase();
|
|
44
|
+
return cached !== undefined ? cached : method.toUpperCase();
|
|
55
45
|
}
|
|
56
46
|
/**
|
|
57
|
-
* @ru Извлекает URL из объекта запроса
|
|
58
|
-
* @en Extracts a URL from a request object
|
|
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
|
|
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
|
|
77
|
-
* @en
|
|
78
|
-
* @param
|
|
79
|
-
* @
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
128
|
+
const vLen = val.length;
|
|
129
|
+
for (let i = 0; i < vLen; i++) {
|
|
132
130
|
const rawValue = val[i];
|
|
133
|
-
if (rawValue
|
|
134
|
-
|
|
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
|
-
|
|
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
|
|
197
|
-
* @en
|
|
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 -
|
|
200
|
-
* @returns
|
|
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
|
-
|
|
204
|
-
return undefined;
|
|
205
|
-
}
|
|
206
|
-
return body ?? undefined;
|
|
151
|
+
return method === "GET" || method === "HEAD" ? undefined : body;
|
|
207
152
|
}
|
|
208
153
|
//# sourceMappingURL=normalize.js.map
|
package/utils/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"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"}
|
package/utils/response.d.ts
CHANGED
|
@@ -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
|
|
6
|
-
* @param body -
|
|
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
|
|
11
|
-
* @en
|
|
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
|
|
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:
|
|
17
|
+
body: any;
|
|
23
18
|
url: string;
|
|
24
|
-
|
|
25
|
-
|
|
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 Быстрый маппинг сырого ответа
|
|
29
|
-
* @en Fast mapping
|
|
30
|
-
* @param rawResponse -
|
|
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 слияние
|
|
35
|
-
* @en Zero-allocation
|
|
36
|
-
* @param base -
|
|
37
|
-
* @param override -
|
|
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 {};
|
package/utils/response.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,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
|
|
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
|
|
4
|
-
* @param body -
|
|
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
|
|
29
|
-
* @en
|
|
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
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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 Быстрый маппинг сырого
|
|
45
|
-
* @en Fast mapping
|
|
46
|
-
* @param rawResponse -
|
|
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
|
-
|
|
50
|
-
|
|
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 Быстрый маппинг сырого ответа
|
|
58
|
-
* @en Fast mapping
|
|
59
|
-
* @param rawResponse -
|
|
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 слияние
|
|
69
|
-
* @en Zero-allocation
|
|
70
|
-
* @param base -
|
|
71
|
-
* @param override -
|
|
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
|
-
|
|
118
|
+
out[key] = override[key];
|
|
79
119
|
}
|
|
80
120
|
}
|
|
81
|
-
return
|
|
121
|
+
return out;
|
|
82
122
|
};
|
|
83
123
|
//# sourceMappingURL=response.js.map
|
package/utils/response.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAQA
|
|
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"}
|