@hyperttp/core 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Core/HyperCore.d.ts +135 -77
- package/Core/HyperCore.d.ts.map +1 -1
- package/Core/HyperCore.js +280 -246
- package/Core/HyperCore.js.map +1 -1
- package/README.md +169 -96
- package/package.json +14 -8
- package/transports/browser.d.ts +228 -0
- package/transports/browser.d.ts.map +1 -0
- package/transports/browser.js +451 -0
- package/transports/browser.js.map +1 -0
- package/transports/manager.d.ts +9 -85
- package/transports/manager.d.ts.map +1 -1
- package/transports/manager.js +152 -222
- package/transports/manager.js.map +1 -1
- package/transports/node.d.ts +4 -36
- package/transports/node.d.ts.map +1 -1
- package/transports/node.js +119 -159
- package/transports/node.js.map +1 -1
- package/utils/decompress.d.ts +16 -20
- package/utils/decompress.d.ts.map +1 -1
- package/utils/decompress.js +151 -60
- package/utils/decompress.js.map +1 -1
- package/utils/errors.d.ts +0 -10
- package/utils/errors.d.ts.map +1 -1
- package/utils/errors.js +1 -11
- package/utils/errors.js.map +1 -1
- package/utils/merge.d.ts +0 -3
- package/utils/merge.d.ts.map +1 -1
- package/utils/merge.js +12 -22
- package/utils/merge.js.map +1 -1
- package/utils/normalize.d.ts +40 -21
- package/utils/normalize.d.ts.map +1 -1
- package/utils/normalize.js +217 -138
- package/utils/normalize.js.map +1 -1
- package/utils/pipeline.d.ts +10 -30
- package/utils/pipeline.d.ts.map +1 -1
- package/utils/pipeline.js +44 -44
- package/utils/pipeline.js.map +1 -1
- package/utils/response.d.ts +105 -23
- package/utils/response.d.ts.map +1 -1
- package/utils/response.js +308 -38
- package/utils/response.js.map +1 -1
- package/utils/retryUtils.d.ts +2 -10
- package/utils/retryUtils.d.ts.map +1 -1
- package/utils/retryUtils.js +17 -21
- package/utils/retryUtils.js.map +1 -1
package/transports/manager.js
CHANGED
|
@@ -1,23 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* @ru Возвращает текущую среду выполнения.
|
|
11
|
-
* @en Returns the current runtime.
|
|
12
|
-
* @returns The current runtime ('bun' or 'node').
|
|
13
|
-
*/
|
|
14
|
-
export function getRuntime() {
|
|
15
|
-
return CURRENT_RUNTIME;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* @ru Список доступных транспортов с приоритетами. Высший приоритет — предпочтительный транспорт для рантайма.
|
|
19
|
-
* @en List of available transports with priorities. Higher priority means preferred transport for the runtime.
|
|
20
|
-
*/
|
|
1
|
+
export const CURRENT_RUNTIME = (() => {
|
|
2
|
+
if (typeof Bun !== "undefined")
|
|
3
|
+
return "bun";
|
|
4
|
+
if (typeof Deno !== "undefined")
|
|
5
|
+
return "deno";
|
|
6
|
+
if (typeof process !== "undefined" && process.versions?.node)
|
|
7
|
+
return "node";
|
|
8
|
+
return "browser";
|
|
9
|
+
})();
|
|
21
10
|
export const TRANSPORTS = [
|
|
22
11
|
{
|
|
23
12
|
name: "Bun",
|
|
@@ -26,6 +15,13 @@ export const TRANSPORTS = [
|
|
|
26
15
|
export: "BunTransport",
|
|
27
16
|
priority: 100,
|
|
28
17
|
},
|
|
18
|
+
{
|
|
19
|
+
name: "Deno",
|
|
20
|
+
runtime: ["deno"],
|
|
21
|
+
pkg: "@hyperttp/transport-deno",
|
|
22
|
+
export: "DenoTransport",
|
|
23
|
+
priority: 95,
|
|
24
|
+
},
|
|
29
25
|
{
|
|
30
26
|
name: "Undici",
|
|
31
27
|
runtime: ["node"],
|
|
@@ -33,260 +29,194 @@ export const TRANSPORTS = [
|
|
|
33
29
|
export: "UndiciTransport",
|
|
34
30
|
priority: 90,
|
|
35
31
|
},
|
|
32
|
+
{
|
|
33
|
+
name: "Browser",
|
|
34
|
+
runtime: ["browser"],
|
|
35
|
+
pkg: "../transports/browser.js",
|
|
36
|
+
export: "BrowserTransport",
|
|
37
|
+
priority: 80,
|
|
38
|
+
},
|
|
36
39
|
{
|
|
37
40
|
name: "Node",
|
|
38
|
-
runtime: ["node", "bun"],
|
|
41
|
+
runtime: ["node", "bun", "deno"],
|
|
39
42
|
pkg: "../transports/node.js",
|
|
40
43
|
export: "NodeTransport",
|
|
41
44
|
priority: 10,
|
|
42
45
|
},
|
|
43
46
|
];
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
node: TRANSPORTS.filter((t) => t.runtime.includes("node")).sort((a, b) => b.priority - a.priority),
|
|
50
|
-
bun: TRANSPORTS.filter((t) => t.runtime.includes("bun")).sort((a, b) => b.priority - a.priority),
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* @ru Глобальный кэш загруженных классов транспорта для каждого рантайма (избегаем повторной загрузки).
|
|
54
|
-
* @en Global cache of loaded transport classes per runtime (avoids re-loading).
|
|
55
|
-
*/
|
|
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
|
-
*/
|
|
64
|
-
function logError(config, message, err) {
|
|
65
|
-
if (config.verbose) {
|
|
66
|
-
console.error(message, err);
|
|
67
|
-
}
|
|
68
|
-
const logger = config.logger;
|
|
69
|
-
if (logger) {
|
|
70
|
-
if (typeof logger === "function") {
|
|
71
|
-
logger(message, err);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const candidate = logger;
|
|
75
|
-
if (typeof candidate.error === "function") {
|
|
76
|
-
candidate.error(message, err);
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (!config.verbose) {
|
|
81
|
-
console.error(message, err);
|
|
82
|
-
}
|
|
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
|
-
*/
|
|
47
|
+
const CANDIDATES = TRANSPORTS.filter((t) => t.runtime.includes(CURRENT_RUNTIME)).sort((a, b) => b.priority - a.priority);
|
|
48
|
+
let RESOLVED_RUNTIME_CTOR = null;
|
|
49
|
+
let NODE_RESOLVE_TOOLS = null;
|
|
50
|
+
let ATTEMPTED_TOOLS_LOAD = false;
|
|
51
|
+
export const runtimeImport = Function("s", "return import(s)");
|
|
90
52
|
function isModuleNotFoundError(err) {
|
|
91
53
|
if (!err || typeof err !== "object")
|
|
92
54
|
return false;
|
|
93
55
|
const code = err.code;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
56
|
+
if (code === "ERR_MODULE_NOT_FOUND" || code === "MODULE_NOT_FOUND")
|
|
57
|
+
return true;
|
|
58
|
+
const msg = err instanceof Error ? err.message : "";
|
|
59
|
+
return (msg.includes("Cannot find module") ||
|
|
60
|
+
msg.includes("Failed to resolve") ||
|
|
61
|
+
msg.includes("Failed to load"));
|
|
98
62
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
* @param pkg - Package name or relative path.
|
|
103
|
-
* @returns Resolved URL string or null if not found.
|
|
104
|
-
*/
|
|
105
|
-
async function resolveTransportModulePath(pkg) {
|
|
106
|
-
if (pkg.startsWith(".")) {
|
|
107
|
-
try {
|
|
63
|
+
async function resolveExternalModule(pkg) {
|
|
64
|
+
try {
|
|
65
|
+
if (typeof import.meta.resolve === "function") {
|
|
108
66
|
return import.meta.resolve(pkg, import.meta.url);
|
|
109
67
|
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
//
|
|
71
|
+
}
|
|
72
|
+
if (CURRENT_RUNTIME !== "browser") {
|
|
73
|
+
try {
|
|
74
|
+
if (!NODE_RESOLVE_TOOLS && !ATTEMPTED_TOOLS_LOAD) {
|
|
75
|
+
ATTEMPTED_TOOLS_LOAD = true;
|
|
76
|
+
NODE_RESOLVE_TOOLS = await Promise.all([
|
|
77
|
+
runtimeImport("resolve-from").catch(() => null),
|
|
78
|
+
runtimeImport("node:url").catch(() => null),
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
if (!NODE_RESOLVE_TOOLS || !NODE_RESOLVE_TOOLS[0] || !NODE_RESOLVE_TOOLS[1])
|
|
82
|
+
return null;
|
|
83
|
+
const resolveFrom = NODE_RESOLVE_TOOLS[0].default ?? NODE_RESOLVE_TOOLS[0];
|
|
84
|
+
const url = NODE_RESOLVE_TOOLS[1].default ?? NODE_RESOLVE_TOOLS[1];
|
|
85
|
+
let cwd = ".";
|
|
86
|
+
try {
|
|
87
|
+
cwd = process.cwd();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
//
|
|
91
|
+
}
|
|
92
|
+
const physicalPath = resolveFrom.silent?.(cwd, pkg) ?? resolveFrom(cwd, pkg);
|
|
93
|
+
if (physicalPath) {
|
|
94
|
+
return url.pathToFileURL(physicalPath).href;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
110
97
|
catch {
|
|
98
|
+
//
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
async function loadCtor(pkg, exportName) {
|
|
104
|
+
if (CURRENT_RUNTIME === "browser") {
|
|
105
|
+
if (pkg !== "../transports/browser.js")
|
|
111
106
|
return null;
|
|
107
|
+
const mod = (await import("../transports/browser.js"));
|
|
108
|
+
const candidate = mod[exportName] ?? mod.default;
|
|
109
|
+
return typeof candidate === "function" ? candidate : null;
|
|
110
|
+
}
|
|
111
|
+
let specifier = pkg;
|
|
112
|
+
if (pkg[0] === "." || pkg[0] === "/") {
|
|
113
|
+
try {
|
|
114
|
+
specifier = import.meta.resolve(pkg, import.meta.url);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
//
|
|
112
118
|
}
|
|
113
119
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
else {
|
|
121
|
+
const resolved = await resolveExternalModule(pkg);
|
|
122
|
+
if (resolved)
|
|
123
|
+
specifier = resolved;
|
|
117
124
|
}
|
|
118
125
|
try {
|
|
119
|
-
|
|
126
|
+
const mod = await runtimeImport(specifier);
|
|
127
|
+
const candidate = mod[exportName] ?? mod.default;
|
|
128
|
+
return typeof candidate === "function" ? candidate : null;
|
|
120
129
|
}
|
|
121
|
-
catch {
|
|
122
|
-
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (isModuleNotFoundError(err))
|
|
132
|
+
return null;
|
|
133
|
+
throw err;
|
|
123
134
|
}
|
|
124
135
|
}
|
|
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
|
-
*/
|
|
132
|
-
async function loadTransportCtor(pkg, exportName) {
|
|
133
|
-
const path = await resolveTransportModulePath(pkg);
|
|
134
|
-
if (!path)
|
|
135
|
-
return null;
|
|
136
|
-
const mod = (await import(path));
|
|
137
|
-
const candidate = mod[exportName] ??
|
|
138
|
-
mod.default?.[exportName] ??
|
|
139
|
-
mod.default;
|
|
140
|
-
if (typeof candidate !== "function")
|
|
141
|
-
return null;
|
|
142
|
-
return candidate;
|
|
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
|
-
*/
|
|
151
136
|
export async function resolveTransport(config) {
|
|
152
|
-
if (config.customTransport)
|
|
153
|
-
config.logger?.(`info`, "[Hyperttp] Using custom user-provided transport.", config);
|
|
137
|
+
if (config.customTransport)
|
|
154
138
|
return config.customTransport;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
return new cachedCtor(config);
|
|
161
|
-
}
|
|
162
|
-
const candidates = CANDIDATES_MAP[runtime];
|
|
163
|
-
for (const t of candidates) {
|
|
139
|
+
if (RESOLVED_RUNTIME_CTOR)
|
|
140
|
+
return new RESOLVED_RUNTIME_CTOR(config);
|
|
141
|
+
const failures = [];
|
|
142
|
+
for (let i = 0; i < CANDIDATES.length; i++) {
|
|
143
|
+
const t = CANDIDATES[i];
|
|
164
144
|
try {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
config.logger?.(`debug`, `[Hyperttp] Export '${t.export}' not found in ${t.pkg}. Skipping...`, config);
|
|
145
|
+
const ctor = await loadCtor(t.pkg, t.export);
|
|
146
|
+
if (!ctor) {
|
|
147
|
+
failures.push(`${t.pkg} (missing export or not installed)`);
|
|
169
148
|
continue;
|
|
170
149
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return new Transport(config);
|
|
150
|
+
RESOLVED_RUNTIME_CTOR = ctor;
|
|
151
|
+
return new ctor(config);
|
|
174
152
|
}
|
|
175
153
|
catch (err) {
|
|
176
154
|
if (isModuleNotFoundError(err)) {
|
|
177
|
-
|
|
155
|
+
failures.push(`${t.pkg} (not installed)`);
|
|
178
156
|
continue;
|
|
179
157
|
}
|
|
180
|
-
|
|
181
|
-
|
|
158
|
+
throw new Error(`[Hyperttp] transport crash in ${t.pkg}: ${err?.message}`, {
|
|
159
|
+
cause: err,
|
|
160
|
+
});
|
|
182
161
|
}
|
|
183
162
|
}
|
|
184
|
-
throw new Error(`No compatible transport
|
|
185
|
-
.map((c) => c.pkg)
|
|
186
|
-
.join(", ")} is installed.`);
|
|
163
|
+
throw new Error(`No compatible transport for runtime="${CURRENT_RUNTIME}".\nFailures:\n- ${failures.join("\n- ")}`);
|
|
187
164
|
}
|
|
188
|
-
/**
|
|
189
|
-
* @ru Менеджер транспорта: ленивая загрузка, кэширование, синхронизация конфигурации, выполнение запросов, уничтожение.
|
|
190
|
-
* @en Transport manager: lazy loading, caching, config synchronization, request execution, destruction.
|
|
191
|
-
*/
|
|
192
165
|
export class TransportManager {
|
|
193
166
|
transport = null;
|
|
194
|
-
|
|
167
|
+
promise = null;
|
|
195
168
|
config;
|
|
196
|
-
|
|
197
|
-
* @ru Создаёт менеджер транспорта.
|
|
198
|
-
* @en Creates a transport manager.
|
|
199
|
-
* @param config - Client configuration.
|
|
200
|
-
* @param customTransport - Optional pre-created transport instance.
|
|
201
|
-
*/
|
|
202
|
-
constructor(config, customTransport) {
|
|
169
|
+
constructor(config, custom) {
|
|
203
170
|
this.config = config;
|
|
204
|
-
if (
|
|
205
|
-
this.transport =
|
|
206
|
-
|
|
207
|
-
|
|
171
|
+
if (custom) {
|
|
172
|
+
this.transport = custom;
|
|
173
|
+
}
|
|
174
|
+
else if (config.customTransport) {
|
|
175
|
+
this.transport = config.customTransport;
|
|
176
|
+
}
|
|
177
|
+
else if (RESOLVED_RUNTIME_CTOR) {
|
|
178
|
+
this.transport = new RESOLVED_RUNTIME_CTOR(config);
|
|
208
179
|
}
|
|
209
180
|
}
|
|
210
|
-
|
|
211
|
-
* @ru Обновляет конфигурацию клиента и синхронизирует её с активным транспортом (если есть).
|
|
212
|
-
* @en Updates the client configuration and syncs it with the active transport (if any).
|
|
213
|
-
* @param config - New configuration.
|
|
214
|
-
*/
|
|
215
|
-
setConfig(config) {
|
|
216
|
-
this.config = config;
|
|
217
|
-
this.syncConfig();
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* @ru Возвращает текущий экземпляр транспорта (если уже загружен).
|
|
221
|
-
* @en Returns the current transport instance (if already loaded).
|
|
222
|
-
*/
|
|
223
|
-
get instance() {
|
|
181
|
+
getSync() {
|
|
224
182
|
return this.transport;
|
|
225
183
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
return this.transport;
|
|
234
|
-
if (this.transportPromise)
|
|
235
|
-
return this.transportPromise;
|
|
236
|
-
this.transportPromise = resolveTransport(this.config).then((t) => {
|
|
184
|
+
ensure() {
|
|
185
|
+
if (this.transport !== null) {
|
|
186
|
+
return this.promise || (this.promise = Promise.resolve(this.transport));
|
|
187
|
+
}
|
|
188
|
+
if (this.promise !== null)
|
|
189
|
+
return this.promise;
|
|
190
|
+
return (this.promise = resolveTransport(this.config).then((t) => {
|
|
237
191
|
this.transport = t;
|
|
238
|
-
this.syncConfig();
|
|
239
192
|
return t;
|
|
240
|
-
});
|
|
241
|
-
return this.transportPromise;
|
|
193
|
+
}));
|
|
242
194
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
* @en Syncs configuration with the transport if the transport has a config property.
|
|
246
|
-
*/
|
|
247
|
-
syncConfig() {
|
|
248
|
-
if (this.transport && "config" in this.transport) {
|
|
249
|
-
this.transport.config = this.config;
|
|
250
|
-
}
|
|
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
|
-
*/
|
|
258
|
-
async execute(req) {
|
|
259
|
-
const transport = this.transport || (await this.get());
|
|
260
|
-
const rawResponse = await transport.execute(req);
|
|
261
|
-
return mapResponseFast(rawResponse);
|
|
195
|
+
get() {
|
|
196
|
+
return this.transport ?? this.ensure();
|
|
262
197
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
*/
|
|
269
|
-
async executeStream(req) {
|
|
270
|
-
const transport = this.transport || (await this.get());
|
|
271
|
-
const rawResponse = await transport.execute(req);
|
|
272
|
-
return mapStreamFast(rawResponse);
|
|
198
|
+
setConfig(config) {
|
|
199
|
+
this.config = config;
|
|
200
|
+
if (this.transport && typeof this.transport.setConfig === "function") {
|
|
201
|
+
this.transport.setConfig(config);
|
|
202
|
+
}
|
|
273
203
|
}
|
|
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
|
-
*/
|
|
280
204
|
async destroy(graceful = true) {
|
|
281
|
-
const
|
|
282
|
-
if (!
|
|
283
|
-
return;
|
|
284
|
-
if (graceful && typeof transport.close === "function") {
|
|
285
|
-
await transport.close();
|
|
205
|
+
const t = this.transport;
|
|
206
|
+
if (!t)
|
|
286
207
|
return;
|
|
208
|
+
try {
|
|
209
|
+
if (graceful && typeof t.close === "function") {
|
|
210
|
+
await t.close();
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (typeof t.destroy === "function") {
|
|
214
|
+
await t.destroy();
|
|
215
|
+
}
|
|
287
216
|
}
|
|
288
|
-
|
|
289
|
-
|
|
217
|
+
finally {
|
|
218
|
+
this.transport = null;
|
|
219
|
+
this.promise = null;
|
|
290
220
|
}
|
|
291
221
|
}
|
|
292
222
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/transports/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/transports/manager.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,eAAe,GAAY,CAAC,GAAG,EAAE;IAC5C,IAAI,OAAO,GAAG,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,IAAI,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI;QAAE,OAAO,MAAM,CAAC;IAC5E,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,CAAC,KAAK,CAAC;QAChB,GAAG,EAAE,yBAAyB;QAC9B,MAAM,EAAE,cAAc;QACtB,QAAQ,EAAE,GAAG;KACd;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,GAAG,EAAE,0BAA0B;QAC/B,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,EAAE;KACb;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,GAAG,EAAE,4BAA4B;QACjC,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,EAAE;KACb;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,CAAC,SAAS,CAAC;QACpB,GAAG,EAAE,0BAA0B;QAC/B,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,EAAE;KACb;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;QAChC,GAAG,EAAE,uBAAuB;QAC5B,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CACnF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAClC,CAAC;AAEF,IAAI,qBAAqB,GAAyB,IAAI,CAAC;AACvD,IAAI,kBAAkB,GAAsB,IAAI,CAAC;AACjD,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAE9C,CAAC;AAEhB,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;IAC/B,IAAI,IAAI,KAAK,sBAAsB,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAW;IAC9C,IAAI,CAAC;QACH,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,EAAE;IACJ,CAAC;IAED,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,CAAC,kBAAkB,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACjD,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,kBAAkB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACrC,aAAa,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;oBAC/C,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEzF,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAEnE,IAAI,GAAG,GAAG,GAAG,CAAC;YACd,IAAI,CAAC;gBACH,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7E,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,UAAkB;IACrD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,0BAA0B;YAAE,OAAO,IAAI,CAAC;QACpD,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAQ,CAAC;QAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC;QACjD,OAAO,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,QAAQ;YAAE,SAAS,GAAG,QAAQ,CAAC;IACrC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAA0B,SAAS,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC;QACjD,OAAO,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAE,SAA2B,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,qBAAqB,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAyB;IAC9D,IAAI,MAAM,CAAC,eAAe;QAAE,OAAO,MAAM,CAAC,eAAe,CAAC;IAC1D,IAAI,qBAAqB;QAAE,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,oCAAoC,CAAC,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,qBAAqB,GAAG,IAAI,CAAC;YAC7B,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC;gBAC1C,SAAS;YACX,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,GAAG,KAAM,GAAa,EAAE,OAAO,EAAE,EAAE;gBACpF,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,wCAAwC,eAAe,oBAAoB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACnG,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,gBAAgB;IACpB,SAAS,GAA0B,IAAI,CAAC;IACvC,OAAO,GAAmC,IAAI,CAAC;IAC/C,MAAM,CAAoB;IAElC,YAAY,MAAyB,EAAE,MAAuB;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QAC1B,CAAC;aAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1C,CAAC;aAAM,IAAI,qBAAqB,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,MAAM;QACX,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QAE/C,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9D,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAEM,GAAG;QACR,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC,CAAC;IAEM,SAAS,CAAC,MAAyB;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS,IAAI,OAAQ,IAAI,CAAC,SAAiB,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7E,IAAI,CAAC,SAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,CAAC;YAAE,OAAO;QAEf,IAAI,CAAC;YACH,IAAI,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC9C,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
package/transports/node.d.ts
CHANGED
|
@@ -1,48 +1,16 @@
|
|
|
1
1
|
import type { HttpClientOptions, HyperTransport, TransportRequest, TransportResponse } from "@hyperttp/types";
|
|
2
2
|
export interface NodeTransportConfig extends HttpClientOptions {
|
|
3
3
|
baseUrl?: string;
|
|
4
|
-
network?: {
|
|
5
|
-
maxConcurrent?: number;
|
|
6
|
-
keepAliveTimeout?: number;
|
|
7
|
-
};
|
|
8
4
|
}
|
|
9
5
|
/**
|
|
10
|
-
* @ru Реализация
|
|
11
|
-
* @en
|
|
6
|
+
* @ru Реализация транспорта для Node.js с использованием fetch.
|
|
7
|
+
* @en Node.js transport implementation using fetch.
|
|
12
8
|
*/
|
|
13
9
|
export declare class NodeTransport implements HyperTransport {
|
|
14
|
-
/** @ru Конфигурация транспорта. @en Transport configuration. */
|
|
15
10
|
config: NodeTransportConfig;
|
|
16
|
-
private readonly
|
|
17
|
-
private readonly
|
|
18
|
-
/**
|
|
19
|
-
* @ru Создаёт экземпляр NodeTransport.
|
|
20
|
-
* @en Creates a NodeTransport instance.
|
|
21
|
-
* @param config - Transport configuration.
|
|
22
|
-
*/
|
|
11
|
+
private readonly isProduction;
|
|
12
|
+
private readonly cleanBaseUrl;
|
|
23
13
|
constructor(config: NodeTransportConfig);
|
|
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
|
-
*/
|
|
34
14
|
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
|
-
*/
|
|
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
|
-
*/
|
|
46
|
-
destroy(): Promise<void>;
|
|
47
15
|
}
|
|
48
16
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"AAAA,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;CAClB;AAiHD;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAC3C,MAAM,EAAE,mBAAmB,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,EAAE,mBAAmB;IAQ1B,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA+BxE"}
|