@hyperttp/core 1.3.0 → 1.3.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.
- package/Core/HyperCore.d.ts +127 -18
- package/Core/HyperCore.d.ts.map +1 -1
- package/Core/HyperCore.js +154 -42
- package/Core/HyperCore.js.map +1 -1
- package/package.json +1 -1
- package/transports/manager.d.ts +74 -0
- package/transports/manager.d.ts.map +1 -1
- package/transports/manager.js +100 -0
- package/transports/manager.js.map +1 -1
- package/transports/node.d.ts +29 -0
- package/transports/node.d.ts.map +1 -1
- package/transports/node.js +29 -4
- package/transports/node.js.map +1 -1
- package/utils/decompress.d.ts +22 -0
- package/utils/decompress.d.ts.map +1 -1
- package/utils/decompress.js +39 -0
- package/utils/decompress.js.map +1 -1
- package/utils/normalize.d.ts +26 -0
- package/utils/normalize.d.ts.map +1 -1
- package/utils/normalize.js +34 -0
- package/utils/normalize.js.map +1 -1
- package/utils/pipeline.d.ts +42 -10
- package/utils/pipeline.d.ts.map +1 -1
- package/utils/pipeline.js +34 -15
- package/utils/pipeline.js.map +1 -1
- package/utils/retryUtils.d.ts +20 -0
- package/utils/retryUtils.d.ts.map +1 -1
- package/utils/retryUtils.js +24 -0
- package/utils/retryUtils.js.map +1 -1
package/transports/manager.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { HttpClientOptions, HyperTransport, HttpResponse, StreamResponse } from "@hyperttp/types";
|
|
2
|
+
/**
|
|
3
|
+
* @ru Тип среды выполнения: Bun или Node.js.
|
|
4
|
+
* @en Runtime environment: Bun or Node.js.
|
|
5
|
+
*/
|
|
2
6
|
export type Runtime = "bun" | "node";
|
|
7
|
+
/**
|
|
8
|
+
* @ru Описание доступного транспорта: имя, поддерживаемые рантаймы, пакет, экспортируемое имя, приоритет.
|
|
9
|
+
* @en Transport definition: name, supported runtimes, package, export name, priority.
|
|
10
|
+
*/
|
|
3
11
|
type TransportDef = {
|
|
4
12
|
name: string;
|
|
5
13
|
runtime: Runtime[];
|
|
@@ -7,21 +15,87 @@ type TransportDef = {
|
|
|
7
15
|
export: string;
|
|
8
16
|
priority: number;
|
|
9
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* @ru Определение текущей среды выполнения (Bun или Node) на основе глобальных объектов.
|
|
20
|
+
* @en Detects the current runtime (Bun or Node) based on global objects.
|
|
21
|
+
*/
|
|
10
22
|
export declare const CURRENT_RUNTIME: Runtime;
|
|
23
|
+
/**
|
|
24
|
+
* @ru Возвращает текущую среду выполнения.
|
|
25
|
+
* @en Returns the current runtime.
|
|
26
|
+
* @returns The current runtime ('bun' or 'node').
|
|
27
|
+
*/
|
|
11
28
|
export declare function getRuntime(): Runtime;
|
|
29
|
+
/**
|
|
30
|
+
* @ru Список доступных транспортов с приоритетами. Высший приоритет — предпочтительный транспорт для рантайма.
|
|
31
|
+
* @en List of available transports with priorities. Higher priority means preferred transport for the runtime.
|
|
32
|
+
*/
|
|
12
33
|
export declare const TRANSPORTS: TransportDef[];
|
|
34
|
+
/**
|
|
35
|
+
* @ru Разрешает и создаёт экземпляр транспорта на основе конфигурации и текущей среды выполнения. Использует кэш классов.
|
|
36
|
+
* @en Resolves and creates a transport instance based on configuration and the current runtime. Uses class cache.
|
|
37
|
+
* @param config - Client configuration.
|
|
38
|
+
* @returns Promise resolving to a transport instance.
|
|
39
|
+
* @throws If no compatible transport is available.
|
|
40
|
+
*/
|
|
13
41
|
export declare function resolveTransport(config: HttpClientOptions): Promise<HyperTransport>;
|
|
42
|
+
/**
|
|
43
|
+
* @ru Менеджер транспорта: ленивая загрузка, кэширование, синхронизация конфигурации, выполнение запросов, уничтожение.
|
|
44
|
+
* @en Transport manager: lazy loading, caching, config synchronization, request execution, destruction.
|
|
45
|
+
*/
|
|
14
46
|
export declare class TransportManager {
|
|
15
47
|
private transport;
|
|
16
48
|
private transportPromise;
|
|
17
49
|
private config;
|
|
50
|
+
/**
|
|
51
|
+
* @ru Создаёт менеджер транспорта.
|
|
52
|
+
* @en Creates a transport manager.
|
|
53
|
+
* @param config - Client configuration.
|
|
54
|
+
* @param customTransport - Optional pre-created transport instance.
|
|
55
|
+
*/
|
|
18
56
|
constructor(config: HttpClientOptions, customTransport?: HyperTransport);
|
|
57
|
+
/**
|
|
58
|
+
* @ru Обновляет конфигурацию клиента и синхронизирует её с активным транспортом (если есть).
|
|
59
|
+
* @en Updates the client configuration and syncs it with the active transport (if any).
|
|
60
|
+
* @param config - New configuration.
|
|
61
|
+
*/
|
|
19
62
|
setConfig(config: HttpClientOptions): void;
|
|
63
|
+
/**
|
|
64
|
+
* @ru Возвращает текущий экземпляр транспорта (если уже загружен).
|
|
65
|
+
* @en Returns the current transport instance (if already loaded).
|
|
66
|
+
*/
|
|
20
67
|
get instance(): HyperTransport | null;
|
|
68
|
+
/**
|
|
69
|
+
* @ru Асинхронно получает транспорт (ленивая загрузка).
|
|
70
|
+
* @en Asynchronously gets the transport (lazy loading).
|
|
71
|
+
* @returns Promise resolving to transport instance.
|
|
72
|
+
*/
|
|
21
73
|
get(): Promise<HyperTransport>;
|
|
74
|
+
/**
|
|
75
|
+
* @ru Синхронизирует конфигурацию с транспортом, если транспорт имеет свойство config.
|
|
76
|
+
* @en Syncs configuration with the transport if the transport has a config property.
|
|
77
|
+
*/
|
|
22
78
|
private syncConfig;
|
|
79
|
+
/**
|
|
80
|
+
* @ru Выполняет запрос и возвращает стандартный HttpResponse (не поток).
|
|
81
|
+
* @en Executes a request and returns a standard HttpResponse (non-stream).
|
|
82
|
+
* @param req - Request parameters for transport.
|
|
83
|
+
* @returns Promise with HTTP response.
|
|
84
|
+
*/
|
|
23
85
|
execute<T = unknown>(req: Parameters<HyperTransport["execute"]>[0]): Promise<HttpResponse<T>>;
|
|
86
|
+
/**
|
|
87
|
+
* @ru Выполняет запрос и возвращает потоковый ответ (StreamResponse).
|
|
88
|
+
* @en Executes a request and returns a stream response (StreamResponse).
|
|
89
|
+
* @param req - Request parameters for transport.
|
|
90
|
+
* @returns Promise with stream response.
|
|
91
|
+
*/
|
|
24
92
|
executeStream<T = unknown>(req: Parameters<HyperTransport["execute"]>[0]): Promise<StreamResponse<T>>;
|
|
93
|
+
/**
|
|
94
|
+
* @ru Уничтожает транспорт: закрывает соединения (graceful) или принудительно разрушает.
|
|
95
|
+
* @en Destroys the transport: closes connections (graceful) or forces destruction.
|
|
96
|
+
* @param graceful - If true, attempts graceful shutdown via close(). Otherwise destroys.
|
|
97
|
+
* @returns Promise that resolves when destruction is complete.
|
|
98
|
+
*/
|
|
25
99
|
destroy(graceful?: boolean): Promise<void>;
|
|
26
100
|
}
|
|
27
101
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/transports/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/transports/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAIzB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAQrC;;;GAGG;AACH,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,OACe,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,EAwBpC,CAAC;AAqIF;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,cAAc,CAAC,CAiFzB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,MAAM,CAAoB;IAElC;;;;;OAKG;gBACS,MAAM,EAAE,iBAAiB,EAAE,eAAe,CAAC,EAAE,cAAc;IASvE;;;;OAIG;IACI,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAKjD;;;OAGG;IACH,IAAW,QAAQ,IAAI,cAAc,GAAG,IAAI,CAE3C;IAED;;;;OAIG;IACU,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;IAa3C;;;OAGG;IACH,OAAO,CAAC,UAAU;IAMlB;;;;;OAKG;IACU,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,GAAG,EAAE,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAM3B;;;;;OAKG;IACU,aAAa,CAAC,CAAC,GAAG,OAAO,EACpC,GAAG,EAAE,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAM7B;;;;;OAKG;IACU,OAAO,CAAC,QAAQ,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAYrD"}
|
package/transports/manager.js
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import { pathToFileURL } from "node:url";
|
|
2
2
|
import resolveFrom from "resolve-from";
|
|
3
3
|
import { mapResponseFast, mapStreamFast } from "../utils/response.js";
|
|
4
|
+
/**
|
|
5
|
+
* @ru Определение текущей среды выполнения (Bun или Node) на основе глобальных объектов.
|
|
6
|
+
* @en Detects the current runtime (Bun or Node) based on global objects.
|
|
7
|
+
*/
|
|
4
8
|
export const CURRENT_RUNTIME = typeof Bun !== "undefined" ? "bun" : "node";
|
|
9
|
+
/**
|
|
10
|
+
* @ru Возвращает текущую среду выполнения.
|
|
11
|
+
* @en Returns the current runtime.
|
|
12
|
+
* @returns The current runtime ('bun' or 'node').
|
|
13
|
+
*/
|
|
5
14
|
export function getRuntime() {
|
|
6
15
|
return CURRENT_RUNTIME;
|
|
7
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* @ru Список доступных транспортов с приоритетами. Высший приоритет — предпочтительный транспорт для рантайма.
|
|
19
|
+
* @en List of available transports with priorities. Higher priority means preferred transport for the runtime.
|
|
20
|
+
*/
|
|
8
21
|
export const TRANSPORTS = [
|
|
9
22
|
{
|
|
10
23
|
name: "Bun",
|
|
@@ -28,11 +41,26 @@ export const TRANSPORTS = [
|
|
|
28
41
|
priority: 10,
|
|
29
42
|
},
|
|
30
43
|
];
|
|
44
|
+
/**
|
|
45
|
+
* @ru Кэш кандидатов транспорта для каждого рантайма, отсортированных по убыванию приоритета.
|
|
46
|
+
* @en Cache of transport candidates per runtime, sorted by descending priority.
|
|
47
|
+
*/
|
|
31
48
|
const CANDIDATES_MAP = {
|
|
32
49
|
node: TRANSPORTS.filter((t) => t.runtime.includes("node")).sort((a, b) => b.priority - a.priority),
|
|
33
50
|
bun: TRANSPORTS.filter((t) => t.runtime.includes("bun")).sort((a, b) => b.priority - a.priority),
|
|
34
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* @ru Глобальный кэш загруженных классов транспорта для каждого рантайма (избегаем повторной загрузки).
|
|
54
|
+
* @en Global cache of loaded transport classes per runtime (avoids re-loading).
|
|
55
|
+
*/
|
|
35
56
|
const GLOBAL_TRANSPORT_CLASS_CACHE = Object.create(null);
|
|
57
|
+
/**
|
|
58
|
+
* @ru Логирует ошибку в зависимости от конфигурации (verbose, logger).
|
|
59
|
+
* @en Logs an error according to configuration (verbose, logger).
|
|
60
|
+
* @param config - Client configuration.
|
|
61
|
+
* @param message - Log message.
|
|
62
|
+
* @param err - Error object.
|
|
63
|
+
*/
|
|
36
64
|
function logError(config, message, err) {
|
|
37
65
|
if (config.verbose) {
|
|
38
66
|
console.error(message, err);
|
|
@@ -53,6 +81,12 @@ function logError(config, message, err) {
|
|
|
53
81
|
console.error(message, err);
|
|
54
82
|
}
|
|
55
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* @ru Проверяет, является ли ошибка "модуль не найден" (пропускаем такие транспорты).
|
|
86
|
+
* @en Checks if the error indicates a missing module (skip such transports).
|
|
87
|
+
* @param err - Error to check.
|
|
88
|
+
* @returns True if module not found.
|
|
89
|
+
*/
|
|
56
90
|
function isModuleNotFoundError(err) {
|
|
57
91
|
if (!err || typeof err !== "object")
|
|
58
92
|
return false;
|
|
@@ -62,6 +96,12 @@ function isModuleNotFoundError(err) {
|
|
|
62
96
|
message.includes("Cannot find module") ||
|
|
63
97
|
message.includes("Failed to resolve"));
|
|
64
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* @ru Разрешает путь к модулю транспорта: для относительных путей использует import.meta.resolve, для пакетов — resolve-from + import.meta.resolve.
|
|
101
|
+
* @en Resolves the module path for a transport: for relative paths uses import.meta.resolve, for packages uses resolve-from + import.meta.resolve.
|
|
102
|
+
* @param pkg - Package name or relative path.
|
|
103
|
+
* @returns Resolved URL string or null if not found.
|
|
104
|
+
*/
|
|
65
105
|
async function resolveTransportModulePath(pkg) {
|
|
66
106
|
if (pkg.startsWith(".")) {
|
|
67
107
|
try {
|
|
@@ -82,6 +122,13 @@ async function resolveTransportModulePath(pkg) {
|
|
|
82
122
|
return null;
|
|
83
123
|
}
|
|
84
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* @ru Загружает конструктор транспорта из указанного пакета и экспорта.
|
|
127
|
+
* @en Loads a transport constructor from the given package and export.
|
|
128
|
+
* @param pkg - Package name or path.
|
|
129
|
+
* @param exportName - Export name.
|
|
130
|
+
* @returns Transport constructor or null.
|
|
131
|
+
*/
|
|
85
132
|
async function loadTransportCtor(pkg, exportName) {
|
|
86
133
|
const path = await resolveTransportModulePath(pkg);
|
|
87
134
|
if (!path)
|
|
@@ -94,6 +141,13 @@ async function loadTransportCtor(pkg, exportName) {
|
|
|
94
141
|
return null;
|
|
95
142
|
return candidate;
|
|
96
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* @ru Разрешает и создаёт экземпляр транспорта на основе конфигурации и текущей среды выполнения. Использует кэш классов.
|
|
146
|
+
* @en Resolves and creates a transport instance based on configuration and the current runtime. Uses class cache.
|
|
147
|
+
* @param config - Client configuration.
|
|
148
|
+
* @returns Promise resolving to a transport instance.
|
|
149
|
+
* @throws If no compatible transport is available.
|
|
150
|
+
*/
|
|
97
151
|
export async function resolveTransport(config) {
|
|
98
152
|
if (config.customTransport) {
|
|
99
153
|
config.logger?.(`info`, "[Hyperttp] Using custom user-provided transport.", config);
|
|
@@ -131,10 +185,20 @@ export async function resolveTransport(config) {
|
|
|
131
185
|
.map((c) => c.pkg)
|
|
132
186
|
.join(", ")} is installed.`);
|
|
133
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* @ru Менеджер транспорта: ленивая загрузка, кэширование, синхронизация конфигурации, выполнение запросов, уничтожение.
|
|
190
|
+
* @en Transport manager: lazy loading, caching, config synchronization, request execution, destruction.
|
|
191
|
+
*/
|
|
134
192
|
export class TransportManager {
|
|
135
193
|
transport = null;
|
|
136
194
|
transportPromise = null;
|
|
137
195
|
config;
|
|
196
|
+
/**
|
|
197
|
+
* @ru Создаёт менеджер транспорта.
|
|
198
|
+
* @en Creates a transport manager.
|
|
199
|
+
* @param config - Client configuration.
|
|
200
|
+
* @param customTransport - Optional pre-created transport instance.
|
|
201
|
+
*/
|
|
138
202
|
constructor(config, customTransport) {
|
|
139
203
|
this.config = config;
|
|
140
204
|
if (customTransport) {
|
|
@@ -143,13 +207,27 @@ export class TransportManager {
|
|
|
143
207
|
this.syncConfig();
|
|
144
208
|
}
|
|
145
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* @ru Обновляет конфигурацию клиента и синхронизирует её с активным транспортом (если есть).
|
|
212
|
+
* @en Updates the client configuration and syncs it with the active transport (if any).
|
|
213
|
+
* @param config - New configuration.
|
|
214
|
+
*/
|
|
146
215
|
setConfig(config) {
|
|
147
216
|
this.config = config;
|
|
148
217
|
this.syncConfig();
|
|
149
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* @ru Возвращает текущий экземпляр транспорта (если уже загружен).
|
|
221
|
+
* @en Returns the current transport instance (if already loaded).
|
|
222
|
+
*/
|
|
150
223
|
get instance() {
|
|
151
224
|
return this.transport;
|
|
152
225
|
}
|
|
226
|
+
/**
|
|
227
|
+
* @ru Асинхронно получает транспорт (ленивая загрузка).
|
|
228
|
+
* @en Asynchronously gets the transport (lazy loading).
|
|
229
|
+
* @returns Promise resolving to transport instance.
|
|
230
|
+
*/
|
|
153
231
|
async get() {
|
|
154
232
|
if (this.transport)
|
|
155
233
|
return this.transport;
|
|
@@ -162,21 +240,43 @@ export class TransportManager {
|
|
|
162
240
|
});
|
|
163
241
|
return this.transportPromise;
|
|
164
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* @ru Синхронизирует конфигурацию с транспортом, если транспорт имеет свойство config.
|
|
245
|
+
* @en Syncs configuration with the transport if the transport has a config property.
|
|
246
|
+
*/
|
|
165
247
|
syncConfig() {
|
|
166
248
|
if (this.transport && "config" in this.transport) {
|
|
167
249
|
this.transport.config = this.config;
|
|
168
250
|
}
|
|
169
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* @ru Выполняет запрос и возвращает стандартный HttpResponse (не поток).
|
|
254
|
+
* @en Executes a request and returns a standard HttpResponse (non-stream).
|
|
255
|
+
* @param req - Request parameters for transport.
|
|
256
|
+
* @returns Promise with HTTP response.
|
|
257
|
+
*/
|
|
170
258
|
async execute(req) {
|
|
171
259
|
const transport = this.transport || (await this.get());
|
|
172
260
|
const rawResponse = await transport.execute(req);
|
|
173
261
|
return mapResponseFast(rawResponse);
|
|
174
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* @ru Выполняет запрос и возвращает потоковый ответ (StreamResponse).
|
|
265
|
+
* @en Executes a request and returns a stream response (StreamResponse).
|
|
266
|
+
* @param req - Request parameters for transport.
|
|
267
|
+
* @returns Promise with stream response.
|
|
268
|
+
*/
|
|
175
269
|
async executeStream(req) {
|
|
176
270
|
const transport = this.transport || (await this.get());
|
|
177
271
|
const rawResponse = await transport.execute(req);
|
|
178
272
|
return mapStreamFast(rawResponse);
|
|
179
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* @ru Уничтожает транспорт: закрывает соединения (graceful) или принудительно разрушает.
|
|
276
|
+
* @en Destroys the transport: closes connections (graceful) or forces destruction.
|
|
277
|
+
* @param graceful - If true, attempts graceful shutdown via close(). Otherwise destroys.
|
|
278
|
+
* @returns Promise that resolves when destruction is complete.
|
|
279
|
+
*/
|
|
180
280
|
async destroy(graceful = true) {
|
|
181
281
|
const transport = this.transport;
|
|
182
282
|
if (!transport)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/transports/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,WAAW,MAAM,cAAc,CAAC;AAUvC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/transports/manager.ts"],"names":[],"mappings":"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"}
|
package/transports/node.d.ts
CHANGED
|
@@ -6,14 +6,43 @@ export interface NodeTransportConfig extends HttpClientOptions {
|
|
|
6
6
|
keepAliveTimeout?: number;
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* @ru Реализация HTTP-транспорта на основе встроенных модулей Node.js (http/https). Поддерживает keep-alive, пулы соединений, автоматический Content-Length, обработку abort-сигналов.
|
|
11
|
+
* @en HTTP transport implementation based on Node.js built-in modules (http/https). Supports keep-alive, connection pools, automatic Content-Length, and abort signal handling.
|
|
12
|
+
*/
|
|
9
13
|
export declare class NodeTransport implements HyperTransport {
|
|
14
|
+
/** @ru Конфигурация транспорта. @en Transport configuration. */
|
|
10
15
|
config: NodeTransportConfig;
|
|
11
16
|
private readonly httpAgent;
|
|
12
17
|
private readonly httpsAgent;
|
|
18
|
+
/**
|
|
19
|
+
* @ru Создаёт экземпляр NodeTransport.
|
|
20
|
+
* @en Creates a NodeTransport instance.
|
|
21
|
+
* @param config - Transport configuration.
|
|
22
|
+
*/
|
|
13
23
|
constructor(config: NodeTransportConfig);
|
|
14
24
|
private get baseUrl();
|
|
25
|
+
/**
|
|
26
|
+
* @ru Выполняет HTTP-запрос.
|
|
27
|
+
* @en Executes an HTTP request.
|
|
28
|
+
* @param req - Request parameters (url, method, headers, body, signal).
|
|
29
|
+
* @returns Promise with the transport response.
|
|
30
|
+
* @throws If the request is aborted (AbortError).
|
|
31
|
+
* @throws If localhost URL is used in production environment.
|
|
32
|
+
* @throws On network or protocol errors.
|
|
33
|
+
*/
|
|
15
34
|
execute(req: TransportRequest): Promise<TransportResponse>;
|
|
35
|
+
/**
|
|
36
|
+
* @ru Закрывает все активные соединения (graceful shutdown). Уничтожает HTTP/HTTPS агенты.
|
|
37
|
+
* @en Closes all active connections (graceful shutdown). Destroys HTTP/HTTPS agents.
|
|
38
|
+
* @returns Promise that resolves after closing.
|
|
39
|
+
*/
|
|
16
40
|
close(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* @ru Принудительно уничтожает транспорт (аналог close).
|
|
43
|
+
* @en Forcefully destroys the transport (alias for close).
|
|
44
|
+
* @returns Promise that resolves after destruction.
|
|
45
|
+
*/
|
|
17
46
|
destroy(): Promise<void>;
|
|
18
47
|
}
|
|
19
48
|
//# sourceMappingURL=node.d.ts.map
|
package/transports/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,qBAAa,aAAc,YAAW,cAAc;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,gEAAgE;IACzD,MAAM,EAAE,mBAAmB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IAEzC;;;;OAIG;gBACS,MAAM,EAAE,mBAAmB;IAkBvC,OAAO,KAAK,OAAO,GAElB;IAED;;;;;;;;OAQG;IACU,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyIvE;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;;;OAIG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
|
package/transports/node.js
CHANGED
|
@@ -2,10 +2,20 @@ import http from "node:http";
|
|
|
2
2
|
import https from "node:https";
|
|
3
3
|
import { Readable } from "node:stream";
|
|
4
4
|
import { ReadableStream } from "node:stream/web";
|
|
5
|
+
/**
|
|
6
|
+
* @ru Реализация HTTP-транспорта на основе встроенных модулей Node.js (http/https). Поддерживает keep-alive, пулы соединений, автоматический Content-Length, обработку abort-сигналов.
|
|
7
|
+
* @en HTTP transport implementation based on Node.js built-in modules (http/https). Supports keep-alive, connection pools, automatic Content-Length, and abort signal handling.
|
|
8
|
+
*/
|
|
5
9
|
export class NodeTransport {
|
|
10
|
+
/** @ru Конфигурация транспорта. @en Transport configuration. */
|
|
6
11
|
config;
|
|
7
12
|
httpAgent;
|
|
8
13
|
httpsAgent;
|
|
14
|
+
/**
|
|
15
|
+
* @ru Создаёт экземпляр NodeTransport.
|
|
16
|
+
* @en Creates a NodeTransport instance.
|
|
17
|
+
* @param config - Transport configuration.
|
|
18
|
+
*/
|
|
9
19
|
constructor(config) {
|
|
10
20
|
this.config = config;
|
|
11
21
|
const agentOptions = {
|
|
@@ -21,6 +31,15 @@ export class NodeTransport {
|
|
|
21
31
|
get baseUrl() {
|
|
22
32
|
return this.config.baseUrl ?? "http://localhost:3000";
|
|
23
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* @ru Выполняет HTTP-запрос.
|
|
36
|
+
* @en Executes an HTTP request.
|
|
37
|
+
* @param req - Request parameters (url, method, headers, body, signal).
|
|
38
|
+
* @returns Promise with the transport response.
|
|
39
|
+
* @throws If the request is aborted (AbortError).
|
|
40
|
+
* @throws If localhost URL is used in production environment.
|
|
41
|
+
* @throws On network or protocol errors.
|
|
42
|
+
*/
|
|
24
43
|
async execute(req) {
|
|
25
44
|
const fullUrl = new URL(req.url, this.baseUrl);
|
|
26
45
|
if (process.env.NODE_ENV === "production" &&
|
|
@@ -33,12 +52,9 @@ export class NodeTransport {
|
|
|
33
52
|
abortError.name = "AbortError";
|
|
34
53
|
throw abortError;
|
|
35
54
|
}
|
|
36
|
-
// Клонируем заголовки, чтобы не мутировать исходный объект запроса
|
|
37
55
|
const headers = { ...req.headers };
|
|
38
|
-
// Хелпер для регистронезависимой проверки заголовков
|
|
39
56
|
const hasHeader = (name) => Object.keys(headers).some((k) => k.toLowerCase() === name.toLowerCase());
|
|
40
57
|
let finalBody = req.body;
|
|
41
|
-
// Автоматический расчет Content-Length для не-стримовых данных
|
|
42
58
|
if (finalBody !== undefined && finalBody !== null) {
|
|
43
59
|
if (Buffer.isBuffer(finalBody)) {
|
|
44
60
|
if (!hasHeader("content-length")) {
|
|
@@ -51,7 +67,6 @@ export class NodeTransport {
|
|
|
51
67
|
}
|
|
52
68
|
}
|
|
53
69
|
else if (!(finalBody instanceof ReadableStream)) {
|
|
54
|
-
// Сериализуем объект один раз здесь
|
|
55
70
|
finalBody = JSON.stringify(finalBody);
|
|
56
71
|
if (!hasHeader("content-length")) {
|
|
57
72
|
headers["Content-Length"] = String(Buffer.byteLength(finalBody, "utf-8"));
|
|
@@ -137,10 +152,20 @@ export class NodeTransport {
|
|
|
137
152
|
}
|
|
138
153
|
});
|
|
139
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* @ru Закрывает все активные соединения (graceful shutdown). Уничтожает HTTP/HTTPS агенты.
|
|
157
|
+
* @en Closes all active connections (graceful shutdown). Destroys HTTP/HTTPS agents.
|
|
158
|
+
* @returns Promise that resolves after closing.
|
|
159
|
+
*/
|
|
140
160
|
async close() {
|
|
141
161
|
this.httpAgent.destroy();
|
|
142
162
|
this.httpsAgent.destroy();
|
|
143
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* @ru Принудительно уничтожает транспорт (аналог close).
|
|
166
|
+
* @en Forcefully destroys the transport (alias for close).
|
|
167
|
+
* @returns Promise that resolves after destruction.
|
|
168
|
+
*/
|
|
144
169
|
async destroy() {
|
|
145
170
|
await this.close();
|
|
146
171
|
}
|
package/transports/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiBjD,MAAM,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"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"}
|
package/utils/decompress.d.ts
CHANGED
|
@@ -1,7 +1,29 @@
|
|
|
1
1
|
import type { TransportStreamExtensions } from "@hyperttp/types";
|
|
2
|
+
/**
|
|
3
|
+
* @ru Тип потока с расширениями транспорта (метод dump).
|
|
4
|
+
* @en Stream type with transport extensions (dump method).
|
|
5
|
+
*/
|
|
2
6
|
type StreamPayload = ReadableStream<Uint8Array> & TransportStreamExtensions;
|
|
7
|
+
/**
|
|
8
|
+
* @ru Тип буфера с расширениями транспорта (метод dump).
|
|
9
|
+
* @en Buffer type with transport extensions (dump method).
|
|
10
|
+
*/
|
|
3
11
|
type BufferPayload = Uint8Array & TransportStreamExtensions;
|
|
12
|
+
/**
|
|
13
|
+
* @ru Декомпрессирует буфер, последовательно применяя все кодировки из Content-Encoding.
|
|
14
|
+
* @en Decompresses a buffer by sequentially applying all encodings from Content-Encoding.
|
|
15
|
+
* @param body - Compressed buffer (Uint8Array).
|
|
16
|
+
* @param encoding - Content-Encoding header value (e.g., 'gzip, deflate').
|
|
17
|
+
* @returns Decompressed buffer with a no-op dump method.
|
|
18
|
+
*/
|
|
4
19
|
export declare function decompressBuffer(body: Uint8Array, encoding: string): BufferPayload;
|
|
20
|
+
/**
|
|
21
|
+
* @ru Создаёт декомпрессирующий поток для тела ответа, поддерживая цепочку кодировок. Использует DecompressionStream (если доступен) или Node.js zlib.
|
|
22
|
+
* @en Creates a decompressing stream for the response body, supporting chained encodings. Uses DecompressionStream (if available) or Node.js zlib.
|
|
23
|
+
* @param body - Source compressed stream.
|
|
24
|
+
* @param encoding - Content-Encoding header value.
|
|
25
|
+
* @returns Transformed stream with a dump method that cancels the stream.
|
|
26
|
+
*/
|
|
5
27
|
export declare function createDecompressStream(body: ReadableStream<Uint8Array>, encoding: string): StreamPayload;
|
|
6
28
|
export {};
|
|
7
29
|
//# 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;
|
|
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;;;GAGG;AACH,KAAK,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,yBAAyB,CAAC;AAE5E;;;GAGG;AACH,KAAK,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAuE5D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,GACf,aAAa,CAQf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,aAAa,CA0Df"}
|
package/utils/decompress.js
CHANGED
|
@@ -1,16 +1,34 @@
|
|
|
1
1
|
import { brotliDecompressSync, createBrotliDecompress, createGunzip, createInflate, gunzipSync, inflateSync, } from "node:zlib";
|
|
2
2
|
import { Readable } from "node:stream";
|
|
3
|
+
/**
|
|
4
|
+
* @ru Разбирает строку Content-Encoding на массив кодировок (без identity).
|
|
5
|
+
* @en Parses a Content-Encoding string into an array of encodings (excluding identity).
|
|
6
|
+
* @param encoding - The Content-Encoding header value.
|
|
7
|
+
* @returns Array of normalized encoding names.
|
|
8
|
+
*/
|
|
3
9
|
function parseEncodings(encoding) {
|
|
4
10
|
return encoding
|
|
5
11
|
.split(",")
|
|
6
12
|
.map((part) => part.trim().toLowerCase())
|
|
7
13
|
.filter((part) => part.length > 0 && part !== "identity");
|
|
8
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* @ru Прикрепляет пустой метод dump к буферу для соответствия интерфейсу TransportStreamExtensions.
|
|
17
|
+
* @en Attaches a no-op dump method to a buffer to conform to TransportStreamExtensions.
|
|
18
|
+
* @param buffer - The buffer to decorate.
|
|
19
|
+
* @returns The same buffer with a dump method.
|
|
20
|
+
*/
|
|
9
21
|
function attachNoopDump(buffer) {
|
|
10
22
|
const payload = buffer;
|
|
11
23
|
payload.dump = async () => { };
|
|
12
24
|
return payload;
|
|
13
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* @ru Прикрепляет метод dump, который отменяет поток, к ReadableStream.
|
|
28
|
+
* @en Attaches a dump method that cancels the stream to a ReadableStream.
|
|
29
|
+
* @param stream - The stream to decorate.
|
|
30
|
+
* @returns The same stream with a dump method.
|
|
31
|
+
*/
|
|
14
32
|
function attachStreamDump(stream) {
|
|
15
33
|
const payload = stream;
|
|
16
34
|
payload.dump = async () => {
|
|
@@ -23,6 +41,13 @@ function attachStreamDump(stream) {
|
|
|
23
41
|
};
|
|
24
42
|
return payload;
|
|
25
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* @ru Применяет декомпрессию один раз для заданной кодировки. Поддерживает gzip, deflate, br.
|
|
46
|
+
* @en Applies decompression once for a given encoding. Supports gzip, deflate, br.
|
|
47
|
+
* @param input - The compressed input buffer.
|
|
48
|
+
* @param encoding - Single encoding name (e.g., 'gzip', 'deflate', 'br').
|
|
49
|
+
* @returns Decompressed buffer, or original if encoding is not recognized.
|
|
50
|
+
*/
|
|
26
51
|
function decompressOnce(input, encoding) {
|
|
27
52
|
const buffer = Buffer.from(input);
|
|
28
53
|
switch (encoding) {
|
|
@@ -37,6 +62,13 @@ function decompressOnce(input, encoding) {
|
|
|
37
62
|
return input;
|
|
38
63
|
}
|
|
39
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* @ru Декомпрессирует буфер, последовательно применяя все кодировки из Content-Encoding.
|
|
67
|
+
* @en Decompresses a buffer by sequentially applying all encodings from Content-Encoding.
|
|
68
|
+
* @param body - Compressed buffer (Uint8Array).
|
|
69
|
+
* @param encoding - Content-Encoding header value (e.g., 'gzip, deflate').
|
|
70
|
+
* @returns Decompressed buffer with a no-op dump method.
|
|
71
|
+
*/
|
|
40
72
|
export function decompressBuffer(body, encoding) {
|
|
41
73
|
let current = body;
|
|
42
74
|
for (const enc of parseEncodings(encoding)) {
|
|
@@ -44,6 +76,13 @@ export function decompressBuffer(body, encoding) {
|
|
|
44
76
|
}
|
|
45
77
|
return attachNoopDump(current);
|
|
46
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* @ru Создаёт декомпрессирующий поток для тела ответа, поддерживая цепочку кодировок. Использует DecompressionStream (если доступен) или Node.js zlib.
|
|
81
|
+
* @en Creates a decompressing stream for the response body, supporting chained encodings. Uses DecompressionStream (if available) or Node.js zlib.
|
|
82
|
+
* @param body - Source compressed stream.
|
|
83
|
+
* @param encoding - Content-Encoding header value.
|
|
84
|
+
* @returns Transformed stream with a dump method that cancels the stream.
|
|
85
|
+
*/
|
|
47
86
|
export function createDecompressStream(body, encoding) {
|
|
48
87
|
let current = body;
|
|
49
88
|
for (const enc of parseEncodings(encoding)) {
|
package/utils/decompress.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"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"}
|