@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/transports/manager.js
CHANGED
|
@@ -1,23 +1,10 @@
|
|
|
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
|
-
*/
|
|
8
4
|
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
|
-
*/
|
|
14
5
|
export function getRuntime() {
|
|
15
6
|
return CURRENT_RUNTIME;
|
|
16
7
|
}
|
|
17
|
-
/**
|
|
18
|
-
* @ru Список доступных транспортов с приоритетами. Высший приоритет — предпочтительный транспорт для рантайма.
|
|
19
|
-
* @en List of available transports with priorities. Higher priority means preferred transport for the runtime.
|
|
20
|
-
*/
|
|
21
8
|
export const TRANSPORTS = [
|
|
22
9
|
{
|
|
23
10
|
name: "Bun",
|
|
@@ -41,68 +28,26 @@ export const TRANSPORTS = [
|
|
|
41
28
|
priority: 10,
|
|
42
29
|
},
|
|
43
30
|
];
|
|
44
|
-
/**
|
|
45
|
-
* @ru Кэш кандидатов транспорта для каждого рантайма, отсортированных по убыванию приоритета.
|
|
46
|
-
* @en Cache of transport candidates per runtime, sorted by descending priority.
|
|
47
|
-
*/
|
|
48
31
|
const CANDIDATES_MAP = {
|
|
49
32
|
node: TRANSPORTS.filter((t) => t.runtime.includes("node")).sort((a, b) => b.priority - a.priority),
|
|
50
33
|
bun: TRANSPORTS.filter((t) => t.runtime.includes("bun")).sort((a, b) => b.priority - a.priority),
|
|
51
34
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
*/
|
|
35
|
+
const CACHE = new Map();
|
|
36
|
+
const DEBUG = false;
|
|
37
|
+
const trace = (...args) => {
|
|
38
|
+
if (DEBUG)
|
|
39
|
+
console.log("[hyperttp]", ...args);
|
|
40
|
+
};
|
|
90
41
|
function isModuleNotFoundError(err) {
|
|
91
42
|
if (!err || typeof err !== "object")
|
|
92
43
|
return false;
|
|
93
|
-
const
|
|
94
|
-
const
|
|
95
|
-
return (code === "ERR_MODULE_NOT_FOUND" ||
|
|
96
|
-
|
|
97
|
-
|
|
44
|
+
const e = err;
|
|
45
|
+
const msg = err instanceof Error ? err.message : "";
|
|
46
|
+
return (e.code === "ERR_MODULE_NOT_FOUND" ||
|
|
47
|
+
msg.includes("Cannot find module") ||
|
|
48
|
+
msg.includes("Failed to resolve"));
|
|
98
49
|
}
|
|
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
|
-
*/
|
|
105
|
-
async function resolveTransportModulePath(pkg) {
|
|
50
|
+
async function resolveModule(pkg) {
|
|
106
51
|
if (pkg.startsWith(".")) {
|
|
107
52
|
try {
|
|
108
53
|
return import.meta.resolve(pkg, import.meta.url);
|
|
@@ -111,182 +56,174 @@ async function resolveTransportModulePath(pkg) {
|
|
|
111
56
|
return null;
|
|
112
57
|
}
|
|
113
58
|
}
|
|
114
|
-
const physicalPath = resolveFrom.silent(process.cwd(), pkg);
|
|
115
|
-
if (physicalPath) {
|
|
116
|
-
return pathToFileURL(physicalPath).href;
|
|
117
|
-
}
|
|
118
59
|
try {
|
|
119
60
|
return import.meta.resolve(pkg, import.meta.url);
|
|
120
61
|
}
|
|
121
62
|
catch {
|
|
122
|
-
|
|
63
|
+
//
|
|
123
64
|
}
|
|
65
|
+
const physical = resolveFrom.silent(process.cwd(), pkg);
|
|
66
|
+
if (physical)
|
|
67
|
+
return pathToFileURL(physical).href;
|
|
68
|
+
return null;
|
|
124
69
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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)
|
|
70
|
+
async function loadCtor(pkg, exportName) {
|
|
71
|
+
const resolved = await resolveModule(pkg);
|
|
72
|
+
if (!resolved) {
|
|
73
|
+
trace("resolve failed:", pkg);
|
|
135
74
|
return null;
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
75
|
+
}
|
|
76
|
+
const mod = (await import(resolved));
|
|
77
|
+
const candidate = mod[exportName] ?? mod.default;
|
|
78
|
+
if (typeof candidate !== "function") {
|
|
79
|
+
trace("invalid export:", pkg, exportName);
|
|
141
80
|
return null;
|
|
81
|
+
}
|
|
142
82
|
return candidate;
|
|
143
83
|
}
|
|
144
84
|
/**
|
|
145
|
-
* @ru
|
|
146
|
-
* @en
|
|
147
|
-
* @param config - Client configuration.
|
|
148
|
-
* @returns Promise resolving to a
|
|
149
|
-
* @throws If no compatible transport
|
|
85
|
+
* @ru Главный резолвер транспорта (диагностический и детерминированный).
|
|
86
|
+
* @en Main transport resolver (diagnostic and deterministic).
|
|
87
|
+
* @param config - Client configuration (may contain customTransport).
|
|
88
|
+
* @returns Promise resolving to a HyperTransport instance.
|
|
89
|
+
* @throws If no compatible transport can be loaded.
|
|
150
90
|
*/
|
|
151
91
|
export async function resolveTransport(config) {
|
|
152
|
-
if (config.customTransport)
|
|
153
|
-
config.logger?.(`info`, "[Hyperttp] Using custom user-provided transport.", config);
|
|
92
|
+
if (config.customTransport)
|
|
154
93
|
return config.customTransport;
|
|
155
|
-
}
|
|
156
94
|
const runtime = CURRENT_RUNTIME;
|
|
157
|
-
const cachedCtor = GLOBAL_TRANSPORT_CLASS_CACHE[runtime];
|
|
158
|
-
if (cachedCtor) {
|
|
159
|
-
config.logger?.(`info`, `[Hyperttp] Using cached transport class for runtime: ${runtime}`, config);
|
|
160
|
-
return new cachedCtor(config);
|
|
161
|
-
}
|
|
162
95
|
const candidates = CANDIDATES_MAP[runtime];
|
|
96
|
+
const failures = [];
|
|
163
97
|
for (const t of candidates) {
|
|
98
|
+
trace("trying:", t.pkg);
|
|
164
99
|
try {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
100
|
+
const cached = CACHE.get(t.pkg);
|
|
101
|
+
if (cached) {
|
|
102
|
+
trace("cache hit:", t.pkg);
|
|
103
|
+
return new cached(config);
|
|
104
|
+
}
|
|
105
|
+
const ctor = await loadCtor(t.pkg, t.export);
|
|
106
|
+
if (!ctor) {
|
|
107
|
+
failures.push(`${t.pkg} (no export: ${t.export})`);
|
|
169
108
|
continue;
|
|
170
109
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return new
|
|
110
|
+
CACHE.set(t.pkg, ctor);
|
|
111
|
+
trace("selected:", t.pkg);
|
|
112
|
+
return new ctor(config);
|
|
174
113
|
}
|
|
175
114
|
catch (err) {
|
|
176
115
|
if (isModuleNotFoundError(err)) {
|
|
177
|
-
|
|
116
|
+
failures.push(`${t.pkg} (not installed)`);
|
|
178
117
|
continue;
|
|
179
118
|
}
|
|
180
|
-
|
|
181
|
-
throw err;
|
|
119
|
+
throw new Error(`[Hyperttp] transport crash in ${t.pkg}: ${err?.message}`, { cause: err });
|
|
182
120
|
}
|
|
183
121
|
}
|
|
184
|
-
throw new Error(`No compatible transport
|
|
185
|
-
.
|
|
186
|
-
.join(", ")} is installed.`);
|
|
122
|
+
throw new Error(`No compatible transport for runtime="${runtime}".\n` +
|
|
123
|
+
`Failures:\n- ${failures.join("\n- ")}`);
|
|
187
124
|
}
|
|
188
125
|
/**
|
|
189
|
-
* @ru
|
|
190
|
-
* @en
|
|
126
|
+
* @ru Управляет жизненным циклом транспортного слоя: ленивая инициализация, кеширование, синхронизация конфигурации.
|
|
127
|
+
* @en Manages the transport layer lifecycle: lazy initialization, caching, configuration synchronization.
|
|
191
128
|
*/
|
|
192
129
|
export class TransportManager {
|
|
193
130
|
transport = null;
|
|
194
|
-
|
|
131
|
+
promise = null;
|
|
195
132
|
config;
|
|
196
133
|
/**
|
|
197
134
|
* @ru Создаёт менеджер транспорта.
|
|
198
135
|
* @en Creates a transport manager.
|
|
199
136
|
* @param config - Client configuration.
|
|
200
|
-
* @param
|
|
137
|
+
* @param custom - Optional externally provided transport instance.
|
|
201
138
|
*/
|
|
202
|
-
constructor(config,
|
|
139
|
+
constructor(config, custom) {
|
|
203
140
|
this.config = config;
|
|
204
|
-
if (
|
|
205
|
-
this.transport =
|
|
206
|
-
this.
|
|
207
|
-
this.syncConfig();
|
|
141
|
+
if (custom) {
|
|
142
|
+
this.transport = custom;
|
|
143
|
+
this.promise = Promise.resolve(custom);
|
|
208
144
|
}
|
|
209
145
|
}
|
|
210
146
|
/**
|
|
211
|
-
* @ru Обновляет конфигурацию
|
|
212
|
-
* @en Updates the client configuration
|
|
147
|
+
* @ru Обновляет конфигурацию клиента.
|
|
148
|
+
* @en Updates the client configuration.
|
|
213
149
|
* @param config - New configuration.
|
|
214
150
|
*/
|
|
215
151
|
setConfig(config) {
|
|
216
152
|
this.config = config;
|
|
217
|
-
this.syncConfig();
|
|
218
153
|
}
|
|
219
154
|
/**
|
|
220
|
-
* @ru Возвращает текущий экземпляр транспорта (если уже
|
|
221
|
-
* @en Returns the current transport instance (if already
|
|
155
|
+
* @ru Возвращает текущий экземпляр транспорта (если уже инициализирован).
|
|
156
|
+
* @en Returns the current transport instance (if already initialised).
|
|
222
157
|
*/
|
|
223
158
|
get instance() {
|
|
224
159
|
return this.transport;
|
|
225
160
|
}
|
|
226
161
|
/**
|
|
227
|
-
* @ru Асинхронно получает
|
|
228
|
-
* @en Asynchronously
|
|
229
|
-
* @returns Promise resolving to
|
|
162
|
+
* @ru Асинхронно получает экземпляр транспорта (инициализирует при необходимости).
|
|
163
|
+
* @en Asynchronously obtains a transport instance (initialises if needed).
|
|
164
|
+
* @returns Promise resolving to a HyperTransport.
|
|
230
165
|
*/
|
|
231
166
|
async get() {
|
|
232
167
|
if (this.transport)
|
|
233
168
|
return this.transport;
|
|
234
|
-
if (this.
|
|
235
|
-
return this.
|
|
236
|
-
this.
|
|
169
|
+
if (this.promise)
|
|
170
|
+
return this.promise;
|
|
171
|
+
this.promise = resolveTransport(this.config).then((t) => {
|
|
237
172
|
this.transport = t;
|
|
238
|
-
this.syncConfig();
|
|
239
173
|
return t;
|
|
240
174
|
});
|
|
241
|
-
return this.
|
|
175
|
+
return this.promise;
|
|
242
176
|
}
|
|
243
177
|
/**
|
|
244
|
-
* @ru
|
|
245
|
-
* @en
|
|
178
|
+
* @ru Выполняет запрос через транспорт и возвращает обычный (не стриминговый) ответ.
|
|
179
|
+
* @en Executes a request through the transport and returns a regular (non‑streaming) response.
|
|
180
|
+
* @param req - Request parameters.
|
|
181
|
+
* @returns Promise resolving to HttpResponse.
|
|
246
182
|
*/
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
}
|
|
183
|
+
async execute(req) {
|
|
184
|
+
const t = this.transport || (await this.get());
|
|
185
|
+
return mapResponseFast(await t.execute(req));
|
|
251
186
|
}
|
|
252
187
|
/**
|
|
253
|
-
* @ru Выполняет запрос и возвращает
|
|
254
|
-
* @en Executes a request and returns a
|
|
255
|
-
* @param req - Request parameters
|
|
256
|
-
* @returns Promise
|
|
188
|
+
* @ru Выполняет запрос через транспорт и возвращает стриминговый ответ.
|
|
189
|
+
* @en Executes a request through the transport and returns a streaming response.
|
|
190
|
+
* @param req - Request parameters.
|
|
191
|
+
* @returns Promise resolving to StreamResponse.
|
|
257
192
|
*/
|
|
258
|
-
async
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
return mapResponseFast(rawResponse);
|
|
193
|
+
async executeStream(req) {
|
|
194
|
+
const t = this.transport || (await this.get());
|
|
195
|
+
return mapStreamFast(await t.execute(req));
|
|
262
196
|
}
|
|
263
197
|
/**
|
|
264
|
-
* @ru
|
|
265
|
-
* @en
|
|
266
|
-
* @param req - Request parameters for transport.
|
|
267
|
-
* @returns Promise with stream response.
|
|
198
|
+
* @ru Возвращает отладочную информацию о текущем транспорте.
|
|
199
|
+
* @en Returns debug information about the current transport.
|
|
268
200
|
*/
|
|
269
|
-
|
|
270
|
-
const
|
|
271
|
-
|
|
272
|
-
|
|
201
|
+
get debug() {
|
|
202
|
+
const t = this.transport;
|
|
203
|
+
if (!t)
|
|
204
|
+
return null;
|
|
205
|
+
return {
|
|
206
|
+
name: t.__name ?? t.constructor?.name,
|
|
207
|
+
pkg: t.__pkg ?? "unknown",
|
|
208
|
+
runtime: getRuntime(),
|
|
209
|
+
};
|
|
273
210
|
}
|
|
274
211
|
/**
|
|
275
|
-
* @ru
|
|
276
|
-
* @en
|
|
277
|
-
* @param graceful - If true,
|
|
278
|
-
* @returns Promise that resolves when
|
|
212
|
+
* @ru Завершает работу транспорта (закрывает соединения при graceful shutdown, иначе принудительно уничтожает).
|
|
213
|
+
* @en Shuts down the transport (gracefully closes connections or forcefully destroys).
|
|
214
|
+
* @param graceful - If true, attempt graceful close; otherwise call destroy.
|
|
215
|
+
* @returns Promise that resolves when shutdown is complete.
|
|
279
216
|
*/
|
|
280
217
|
async destroy(graceful = true) {
|
|
281
|
-
const
|
|
282
|
-
if (!
|
|
218
|
+
const t = this.transport;
|
|
219
|
+
if (!t)
|
|
283
220
|
return;
|
|
284
|
-
if (graceful && typeof
|
|
285
|
-
await
|
|
221
|
+
if (graceful && typeof t.close === "function") {
|
|
222
|
+
await t.close();
|
|
286
223
|
return;
|
|
287
224
|
}
|
|
288
|
-
if (typeof
|
|
289
|
-
await
|
|
225
|
+
if (typeof t.destroy === "function") {
|
|
226
|
+
await t.destroy();
|
|
290
227
|
}
|
|
291
228
|
}
|
|
292
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/transports/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,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
|
@@ -1,48 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ru Транспорт на основе глобального fetch (Node.js 18+). Обрабатывает нормализацию URL, сериализацию тела и очистку потока.
|
|
3
|
+
* @en Transport based on the global fetch API (Node.js 18+). Handles URL normalisation, body serialisation, and stream cleanup.
|
|
4
|
+
*/
|
|
1
5
|
import type { HttpClientOptions, HyperTransport, TransportRequest, TransportResponse } from "@hyperttp/types";
|
|
2
6
|
export interface NodeTransportConfig extends HttpClientOptions {
|
|
3
7
|
baseUrl?: string;
|
|
4
|
-
network?: {
|
|
5
|
-
maxConcurrent?: number;
|
|
6
|
-
keepAliveTimeout?: number;
|
|
7
|
-
};
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* @ru Реализация
|
|
11
|
-
* @en
|
|
10
|
+
* @ru Реализация транспорта для Node.js с использованием fetch.
|
|
11
|
+
* @en Node.js transport implementation using fetch.
|
|
12
12
|
*/
|
|
13
13
|
export declare class NodeTransport implements HyperTransport {
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* @ru Конфигурация клиента.
|
|
16
|
+
* @en Client configuration.
|
|
17
|
+
*/
|
|
15
18
|
config: NodeTransportConfig;
|
|
16
|
-
private readonly
|
|
17
|
-
private readonly
|
|
19
|
+
private readonly isProduction;
|
|
20
|
+
private readonly cleanBaseUrl;
|
|
18
21
|
/**
|
|
19
22
|
* @ru Создаёт экземпляр NodeTransport.
|
|
20
23
|
* @en Creates a NodeTransport instance.
|
|
21
|
-
* @param config - Transport configuration.
|
|
24
|
+
* @param config - Transport configuration (may include baseUrl).
|
|
22
25
|
*/
|
|
23
26
|
constructor(config: NodeTransportConfig);
|
|
24
|
-
private get baseUrl();
|
|
25
27
|
/**
|
|
26
|
-
* @ru Выполняет HTTP
|
|
27
|
-
* @en Executes an HTTP request.
|
|
28
|
-
* @param req -
|
|
29
|
-
* @returns Promise
|
|
30
|
-
* @throws If
|
|
31
|
-
* @throws If localhost URL is used in production environment.
|
|
32
|
-
* @throws On network or protocol errors.
|
|
28
|
+
* @ru Выполняет HTTP-запрос через fetch.
|
|
29
|
+
* @en Executes an HTTP request via fetch.
|
|
30
|
+
* @param req - Transport request object (method, url, headers, body, signal).
|
|
31
|
+
* @returns Promise resolving to a TransportResponse.
|
|
32
|
+
* @throws If a localhost URL is requested in production environment.
|
|
33
33
|
*/
|
|
34
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
|
-
*/
|
|
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
35
|
}
|
|
48
36
|
//# 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;;;GAGG;AAEH,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;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD;;;OAGG;IACI,MAAM,EAAE,mBAAmB,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC;;;;OAIG;gBACS,MAAM,EAAE,mBAAmB;IAQvC;;;;;;OAMG;IACU,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAmDxE"}
|