@hyperttp/core 1.2.6 → 1.3.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.
@@ -1,167 +1,7 @@
1
1
  import http from "node:http";
2
2
  import https from "node:https";
3
- import zlib from "node:zlib";
4
3
  import { Readable } from "node:stream";
5
4
  import { ReadableStream } from "node:stream/web";
6
- const REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]);
7
- const DEFAULT_RETRY_STATUS_CODES = [502, 503, 504];
8
- const RETRYABLE_NETWORK_CODES = [
9
- "ECONNREFUSED",
10
- "ETIMEDOUT",
11
- "ECONNRESET",
12
- "EPIPE",
13
- ];
14
- export function isRedirect(status) {
15
- return REDIRECT_STATUS_CODES.has(status);
16
- }
17
- export function shouldRetry(status, retryOptions) {
18
- const codes = retryOptions.retryStatusCodes;
19
- if (codes && codes.length > 0) {
20
- return codes.includes(status);
21
- }
22
- return DEFAULT_RETRY_STATUS_CODES.includes(status);
23
- }
24
- export function sleep(ms) {
25
- return new Promise((resolve) => setTimeout(resolve, ms));
26
- }
27
- export function calcDelay(attempt, retryOptions) {
28
- const { baseDelay = 1000, maxDelay = 10000, jitter = true } = retryOptions;
29
- const base = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
30
- return jitter ? base * (0.75 + Math.random() * 0.5) : base;
31
- }
32
- class NodeTransportResponse {
33
- status;
34
- headers;
35
- url;
36
- baseUrl;
37
- _decodedStream;
38
- _cachedBuffer;
39
- _cachedText;
40
- _cachedJson;
41
- _cachedJsonReady = false;
42
- _cachedWebStream;
43
- constructor(status, headers, url, rawStream) {
44
- this.status = status;
45
- this.headers = headers;
46
- this.url = url;
47
- this.baseUrl = url;
48
- let stream = rawStream;
49
- const contentEncoding = headers["content-encoding"];
50
- if (typeof contentEncoding === "string") {
51
- const encoding = contentEncoding.toLowerCase();
52
- if (encoding.includes("gzip")) {
53
- stream = stream.pipe(zlib.createGunzip());
54
- }
55
- else if (encoding.includes("deflate")) {
56
- stream = stream.pipe(zlib.createInflate());
57
- }
58
- else if (encoding.includes("br")) {
59
- stream = stream.pipe(zlib.createBrotliDecompress());
60
- }
61
- }
62
- this._decodedStream = stream;
63
- }
64
- get body() {
65
- if (!this._cachedWebStream) {
66
- let webStream;
67
- if (this._cachedBuffer) {
68
- const buf = this._cachedBuffer;
69
- webStream = new ReadableStream({
70
- start(controller) {
71
- controller.enqueue(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength));
72
- controller.close();
73
- },
74
- });
75
- }
76
- else {
77
- webStream = Readable.toWeb(this._decodedStream);
78
- }
79
- Object.defineProperty(webStream, "dump", {
80
- value: () => this.dump(),
81
- writable: false,
82
- enumerable: false,
83
- configurable: true,
84
- });
85
- this._cachedWebStream = webStream;
86
- }
87
- return this._cachedWebStream;
88
- }
89
- async _getBuffer() {
90
- if (this._cachedBuffer)
91
- return this._cachedBuffer;
92
- if (this._cachedWebStream) {
93
- const reader = this._cachedWebStream.getReader();
94
- const chunks = [];
95
- while (true) {
96
- const { done, value } = await reader.read();
97
- if (done)
98
- break;
99
- if (value)
100
- chunks.push(value);
101
- }
102
- let totalLength = 0;
103
- for (const chunk of chunks)
104
- totalLength += chunk.byteLength;
105
- const merged = new Uint8Array(totalLength);
106
- let offset = 0;
107
- for (const chunk of chunks) {
108
- merged.set(chunk, offset);
109
- offset += chunk.byteLength;
110
- }
111
- this._cachedBuffer = Buffer.from(merged.buffer, merged.byteOffset, merged.byteLength);
112
- return this._cachedBuffer;
113
- }
114
- return new Promise((resolve, reject) => {
115
- const chunks = [];
116
- const onData = (chunk) => {
117
- chunks.push(chunk);
118
- };
119
- const onEnd = () => {
120
- cleanup();
121
- this._cachedBuffer = Buffer.concat(chunks);
122
- resolve(this._cachedBuffer);
123
- };
124
- const onError = (err) => {
125
- cleanup();
126
- reject(err);
127
- };
128
- const cleanup = () => {
129
- this._decodedStream.removeListener("data", onData);
130
- this._decodedStream.removeListener("end", onEnd);
131
- this._decodedStream.removeListener("error", onError);
132
- };
133
- this._decodedStream.on("data", onData);
134
- this._decodedStream.on("end", onEnd);
135
- this._decodedStream.on("error", onError);
136
- });
137
- }
138
- async text() {
139
- if (this._cachedText === undefined) {
140
- const buf = await this._getBuffer();
141
- this._cachedText = buf.toString("utf-8");
142
- }
143
- return this._cachedText;
144
- }
145
- async json() {
146
- if (this._cachedJsonReady) {
147
- return this._cachedJson;
148
- }
149
- const text = await this.text();
150
- if (!text.trim()) {
151
- this._cachedJson = null;
152
- this._cachedJsonReady = true;
153
- return null;
154
- }
155
- this._cachedJson = JSON.parse(text);
156
- this._cachedJsonReady = true;
157
- return this._cachedJson;
158
- }
159
- async dump() {
160
- if (this._cachedBuffer)
161
- return;
162
- this._decodedStream.resume();
163
- }
164
- }
165
5
  export class NodeTransport {
166
6
  config;
167
7
  httpAgent;
@@ -178,206 +18,122 @@ export class NodeTransport {
178
18
  this.httpAgent = new http.Agent(agentOptions);
179
19
  this.httpsAgent = new https.Agent(agentOptions);
180
20
  }
181
- get timeout() {
182
- return this.config.network?.timeout ?? 30000;
183
- }
184
- logRetry(reason, attempt, maxRetries) {
185
- this.config.logger?.("warn", `Retrying request: ${reason}. Attempt ${attempt}/${maxRetries}`);
21
+ get baseUrl() {
22
+ return this.config.baseUrl ?? "http://localhost:3000";
186
23
  }
187
24
  async execute(req) {
188
- let currentUrl = req.url;
189
- let currentMethod = req.method;
190
- let currentHeaders = { ...req.headers };
191
- let currentBody = req.body;
192
- let redirects = 0;
193
- const startTime = Date.now();
194
- let attempt = 1;
195
- const maxRedirects = this.config.network?.maxRedirects ?? 5;
196
- const maxRetries = this.config.retry?.maxRetries ?? 3;
197
- const isStreamBody = currentBody instanceof ReadableStream;
198
- while (true) {
199
- try {
200
- const fullUrl = new URL(currentUrl);
201
- const result = await this.dispatchOnce(fullUrl, {
202
- method: currentMethod,
203
- headers: currentHeaders,
204
- body: currentBody,
205
- externalSignal: req.signal,
206
- timeoutMs: this.timeout,
207
- });
208
- if ((this.config.network?.followRedirects ?? true) &&
209
- isRedirect(result.status)) {
210
- result.body.resume();
211
- if (redirects >= maxRedirects) {
212
- throw new Error("Too many redirects");
213
- }
214
- const location = result.headers["location"];
215
- const locationStr = Array.isArray(location) ? location[0] : location;
216
- if (typeof locationStr !== "string") {
217
- throw new Error("Invalid redirect location");
218
- }
219
- const nextUrl = new URL(locationStr, fullUrl.toString()).toString();
220
- let nextMethod = currentMethod;
221
- if (result.status === 303 ||
222
- ((result.status === 301 || result.status === 302) &&
223
- currentMethod === "POST")) {
224
- nextMethod = "GET";
225
- }
226
- currentUrl = nextUrl;
227
- currentMethod = nextMethod;
228
- currentBody =
229
- nextMethod === "GET" || isStreamBody ? undefined : currentBody;
230
- const nextHeaders = { ...currentHeaders };
231
- if (nextMethod === "GET") {
232
- delete nextHeaders["content-type"];
233
- delete nextHeaders["content-length"];
234
- }
235
- currentHeaders = nextHeaders;
236
- redirects += 1;
237
- continue;
238
- }
239
- if (!isStreamBody &&
240
- shouldRetry(result.status, this.config.retry ?? {})) {
241
- if (attempt < maxRetries) {
242
- result.body.resume();
243
- await sleep(calcDelay(attempt, this.config.retry ?? {}));
244
- attempt += 1;
245
- continue;
246
- }
25
+ const fullUrl = new URL(req.url, this.baseUrl);
26
+ if (process.env.NODE_ENV === "production" &&
27
+ fullUrl.hostname === "localhost") {
28
+ throw new Error("Localhost URL detected in production environment");
29
+ }
30
+ if (req.signal?.aborted) {
31
+ const abortError = req.signal.reason || new Error("The operation was aborted.");
32
+ if (abortError instanceof Error && !abortError.name)
33
+ abortError.name = "AbortError";
34
+ throw abortError;
35
+ }
36
+ // Клонируем заголовки, чтобы не мутировать исходный объект запроса
37
+ const headers = { ...req.headers };
38
+ // Хелпер для регистронезависимой проверки заголовков
39
+ const hasHeader = (name) => Object.keys(headers).some((k) => k.toLowerCase() === name.toLowerCase());
40
+ let finalBody = req.body;
41
+ // Автоматический расчет Content-Length для не-стримовых данных
42
+ if (finalBody !== undefined && finalBody !== null) {
43
+ if (Buffer.isBuffer(finalBody)) {
44
+ if (!hasHeader("content-length")) {
45
+ headers["Content-Length"] = String(finalBody.byteLength);
247
46
  }
248
- return new NodeTransportResponse(result.status, result.headers, fullUrl.toString(), result.body);
249
47
  }
250
- catch (err) {
251
- const error = err;
252
- if (error.name === "AbortError") {
253
- if (req.signal?.aborted) {
254
- throw error;
255
- }
256
- const msg = `Request timeout after ${this.timeout}ms`;
257
- this.config.logger?.("error", msg);
258
- const timeoutErr = new Error(msg);
259
- timeoutErr.name = "AbortError";
260
- timeoutErr.code = "TIMEOUT";
261
- timeoutErr.request = {
262
- url: req.url,
263
- method: req.method,
264
- headers: req.headers,
265
- };
266
- timeoutErr.meta = {
267
- retryCount: attempt - 1,
268
- isRetryable: false,
269
- duration: Date.now() - startTime,
270
- };
271
- throw timeoutErr;
48
+ else if (typeof finalBody === "string") {
49
+ if (!hasHeader("content-length")) {
50
+ headers["Content-Length"] = String(Buffer.byteLength(finalBody, "utf-8"));
272
51
  }
273
- if (!isStreamBody &&
274
- attempt < maxRetries &&
275
- error.code &&
276
- RETRYABLE_NETWORK_CODES.includes(error.code)) {
277
- this.logRetry(`due to ${error.code}`, attempt, maxRetries);
278
- await sleep(calcDelay(attempt, this.config.retry ?? {}));
279
- attempt += 1;
280
- continue;
52
+ }
53
+ else if (!(finalBody instanceof ReadableStream)) {
54
+ // Сериализуем объект один раз здесь
55
+ finalBody = JSON.stringify(finalBody);
56
+ if (!hasHeader("content-length")) {
57
+ headers["Content-Length"] = String(Buffer.byteLength(finalBody, "utf-8"));
281
58
  }
282
- error.code = error.code ?? "NETWORK_ERROR";
283
- error.request = {
284
- url: req.url,
285
- method: req.method,
286
- headers: req.headers,
287
- };
288
- error.meta = {
289
- retryCount: attempt - 1,
290
- isRetryable: false,
291
- duration: Date.now() - startTime,
292
- };
293
- throw error;
294
59
  }
295
60
  }
296
- }
297
- dispatchOnce(url, options) {
298
61
  return new Promise((resolve, reject) => {
299
- const isHttps = url.protocol === "https:";
62
+ const isHttps = fullUrl.protocol === "https:";
300
63
  const requestFn = isHttps ? https.request : http.request;
301
64
  const agent = isHttps ? this.httpsAgent : this.httpAgent;
302
65
  let isDone = false;
303
- let timer;
66
+ let nodeResInstance = null;
304
67
  const reqOptions = {
305
- method: options.method,
306
- headers: options.headers,
68
+ method: req.method,
69
+ headers: headers,
307
70
  agent,
308
71
  };
309
- if (options.externalSignal?.aborted) {
310
- const abortError = new Error("The operation was aborted.");
311
- abortError.name = "AbortError";
312
- return reject(abortError);
313
- }
314
- const req = requestFn(url, reqOptions, (res) => {
315
- if (timer)
316
- clearTimeout(timer);
317
- cleanupExternalSignal();
318
- isDone = true;
72
+ const nodeReq = requestFn(fullUrl, reqOptions, (nodeRes) => {
73
+ nodeResInstance = nodeRes;
74
+ nodeRes.on("end", () => {
75
+ isDone = true;
76
+ cleanupSignal();
77
+ });
78
+ nodeRes.on("close", () => {
79
+ isDone = true;
80
+ cleanupSignal();
81
+ });
82
+ const webStream = Readable.toWeb(nodeRes);
83
+ const dump = async () => {
84
+ isDone = true;
85
+ cleanupSignal();
86
+ nodeRes.destroy();
87
+ };
88
+ const bodyPayload = Object.assign(webStream, {
89
+ dump,
90
+ });
319
91
  resolve({
320
- status: res.statusCode ?? 200,
321
- headers: res.headers,
322
- body: res,
92
+ status: nodeRes.statusCode ?? 200,
93
+ headers: nodeRes.headers,
94
+ url: fullUrl.toString(),
95
+ body: bodyPayload,
323
96
  });
324
97
  });
325
- if (options.timeoutMs > 0) {
326
- timer = setTimeout(() => {
98
+ let onAbort;
99
+ if (req.signal) {
100
+ onAbort = () => {
327
101
  if (isDone)
328
102
  return;
329
103
  isDone = true;
330
- cleanupExternalSignal();
331
- req.destroy();
332
- const err = new Error("The operation was aborted.");
333
- err.name = "AbortError";
334
- reject(err);
335
- }, options.timeoutMs);
336
- }
337
- let onExternalAbort;
338
- if (options.externalSignal) {
339
- onExternalAbort = () => {
340
- if (isDone)
341
- return;
342
- isDone = true;
343
- if (timer)
344
- clearTimeout(timer);
345
- req.destroy();
346
- const err = new Error("The operation was aborted.");
347
- err.name = "AbortError";
104
+ nodeReq.destroy();
105
+ if (nodeResInstance) {
106
+ nodeResInstance.destroy();
107
+ }
108
+ const err = req.signal?.reason || new Error("The operation was aborted.");
109
+ if (err instanceof Error && !err.name)
110
+ err.name = "AbortError";
348
111
  reject(err);
349
112
  };
350
- options.externalSignal.addEventListener("abort", onExternalAbort, {
351
- once: true,
352
- });
113
+ req.signal.addEventListener("abort", onAbort, { once: true });
353
114
  }
354
- function cleanupExternalSignal() {
355
- if (options.externalSignal && onExternalAbort) {
356
- options.externalSignal.removeEventListener("abort", onExternalAbort);
115
+ function cleanupSignal() {
116
+ if (req.signal && onAbort) {
117
+ req.signal.removeEventListener("abort", onAbort);
357
118
  }
358
119
  }
359
- req.on("error", (err) => {
120
+ nodeReq.on("error", (err) => {
360
121
  if (isDone)
361
122
  return;
362
123
  isDone = true;
363
- if (timer)
364
- clearTimeout(timer);
365
- cleanupExternalSignal();
124
+ cleanupSignal();
366
125
  reject(err);
367
126
  });
368
- if (options.body !== undefined && options.body !== null) {
369
- if (Buffer.isBuffer(options.body) || typeof options.body === "string") {
370
- req.end(options.body);
371
- }
372
- else if (options.body instanceof ReadableStream) {
373
- Readable.fromWeb(options.body).pipe(req);
127
+ if (finalBody !== undefined && finalBody !== null) {
128
+ if (Buffer.isBuffer(finalBody) || typeof finalBody === "string") {
129
+ nodeReq.end(finalBody);
374
130
  }
375
- else {
376
- req.end(JSON.stringify(options.body));
131
+ else if (finalBody instanceof ReadableStream) {
132
+ Readable.fromWeb(finalBody).pipe(nodeReq);
377
133
  }
378
134
  }
379
135
  else {
380
- req.end();
136
+ nodeReq.end();
381
137
  }
382
138
  });
383
139
  }
@@ -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,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWjD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,MAAM,uBAAuB,GAAG;IAC9B,cAAc;IACd,WAAW;IACX,YAAY;IACZ,OAAO;CACC,CAAC;AAEX,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,YAA0B;IAE1B,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC;IAC5C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,YAA0B;IACnE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,MAAM,qBAAqB;IACT,MAAM,CAAS;IACf,OAAO,CAAoC;IAC3C,GAAG,CAAS;IACZ,OAAO,CAAS;IAEf,cAAc,CAAW;IAClC,aAAa,CAAU;IACvB,WAAW,CAAU;IACrB,WAAW,CAAW;IACtB,gBAAgB,GAAG,KAAK,CAAC;IACzB,gBAAgB,CAA4B;IAEpD,YACE,MAAc,EACd,OAAiC,EACjC,GAAW,EACX,SAAmB;QAEnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAA4C,CAAC;QAC5D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAEnB,IAAI,MAAM,GAAG,SAAS,CAAC;QACvB,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpD,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;IAC/B,CAAC;IAED,IAAW,IAAI;QACb,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,IAAI,SAAyB,CAAC;YAE9B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC/B,SAAS,GAAG,IAAI,cAAc,CAAC;oBAC7B,KAAK,CAAC,UAAU;wBACd,UAAU,CAAC,OAAO,CAChB,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAC3D,CAAC;wBACF,UAAU,CAAC,KAAK,EAAE,CAAC;oBACrB,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE;gBACvC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;gBACxB,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,GAAG,SAAgD,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC;QAElD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,MAAM,GACV,IAAI,CAAC,gBACN,CAAC,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,IAAI,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM;gBAAE,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAC9B,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAClB,CAAC;YACF,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,GAAS,EAAE;gBACvB,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAQ,EAAE;gBACnC,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACnD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC,CAAC;YAEF,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,WAAgB,CAAC;QAC/B,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,OAAO,IAAoB,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC,WAAgB,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACjB,MAAM,CAAoB;IAChB,SAAS,CAAa;IACtB,UAAU,CAAc;IAEzC,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,YAAY,GAAsB;YACtC,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,IAAI,KAAK;YACzD,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,GAAG;YAChD,cAAc,EAAE,IAAI,CAAC,GAAG,CACtB,GAAG,EACH,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CACvD;YACD,UAAU,EAAE,MAAM;SACnB,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;IAC/C,CAAC;IAEO,QAAQ,CAAC,MAAc,EAAE,OAAe,EAAE,UAAkB;QAClE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAClB,MAAM,EACN,qBAAqB,MAAM,aAAa,OAAO,IAAI,UAAU,EAAE,CAChE,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAqB;QACxC,IAAI,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC;QACzB,IAAI,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC;QAC/B,IAAI,cAAc,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;QAE3B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC;QAEtD,MAAM,YAAY,GAAG,WAAW,YAAY,cAAc,CAAC;QAE3D,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;gBAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;oBAC9C,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAE,cAAwC;oBACjD,IAAI,EAAE,WAAW;oBACjB,cAAc,EAAE,GAAG,CAAC,MAAM;oBAC1B,SAAS,EAAE,IAAI,CAAC,OAAO;iBACxB,CAAC,CAAC;gBAEH,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,IAAI,IAAI,CAAC;oBAC9C,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EACzB,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAErB,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;wBAC9B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;oBACxC,CAAC;oBAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAErE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;wBACpC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBAC/C,CAAC;oBAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACpE,IAAI,UAAU,GAAG,aAAa,CAAC;oBAE/B,IACE,MAAM,CAAC,MAAM,KAAK,GAAG;wBACrB,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC;4BAC/C,aAAa,KAAK,MAAM,CAAC,EAC3B,CAAC;wBACD,UAAU,GAAG,KAAK,CAAC;oBACrB,CAAC;oBAED,UAAU,GAAG,OAAO,CAAC;oBACrB,aAAa,GAAG,UAAU,CAAC;oBAC3B,WAAW;wBACT,UAAU,KAAK,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;oBAEjE,MAAM,WAAW,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;oBAC1C,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;wBACzB,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC;wBACnC,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAC;oBACvC,CAAC;oBACD,cAAc,GAAG,WAAW,CAAC;oBAE7B,SAAS,IAAI,CAAC,CAAC;oBACf,SAAS;gBACX,CAAC;gBAED,IACE,CAAC,YAAY;oBACb,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EACnD,CAAC;oBACD,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;wBACzB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACrB,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;wBACzD,OAAO,IAAI,CAAC,CAAC;wBACb,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,OAAO,IAAI,qBAAqB,CAC9B,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,OAAO,CAAC,QAAQ,EAAE,EAClB,MAAM,CAAC,IAAI,CACZ,CAAC;YACJ,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,GAGb,CAAC;gBAEF,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;wBACxB,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,MAAM,GAAG,GAAG,yBAAyB,IAAI,CAAC,OAAO,IAAI,CAAC;oBACtD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBAEnC,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,GAAG,CAAkB,CAAC;oBACnD,UAAU,CAAC,IAAI,GAAG,YAAY,CAAC;oBAC/B,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC;oBAC5B,UAAU,CAAC,OAAO,GAAG;wBACnB,GAAG,EAAE,GAAG,CAAC,GAAG;wBACZ,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;qBACrB,CAAC;oBACF,UAAU,CAAC,IAAI,GAAG;wBAChB,UAAU,EAAE,OAAO,GAAG,CAAC;wBACvB,WAAW,EAAE,KAAK;wBAClB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;qBACjC,CAAC;oBACF,MAAM,UAAU,CAAC;gBACnB,CAAC;gBAED,IACE,CAAC,YAAY;oBACb,OAAO,GAAG,UAAU;oBACpB,KAAK,CAAC,IAAI;oBACT,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EACnE,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC3D,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;oBACzD,OAAO,IAAI,CAAC,CAAC;oBACb,SAAS;gBACX,CAAC;gBAED,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC;gBAC3C,KAAK,CAAC,OAAO,GAAG;oBACd,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC;gBACF,KAAK,CAAC,IAAI,GAAG;oBACX,UAAU,EAAE,OAAO,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK;oBAClB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY,CAClB,GAAQ,EACR,OAMC;QAMD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;YAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACzD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YAEzD,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,KAAiC,CAAC;YAEtC,MAAM,UAAU,GAAwB;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK;aACN,CAAC;YAEF,IAAI,OAAO,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;gBACpC,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC3D,UAAU,CAAC,IAAI,GAAG,YAAY,CAAC;gBAC/B,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7C,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,qBAAqB,EAAE,CAAC;gBACxB,MAAM,GAAG,IAAI,CAAC;gBAEd,OAAO,CAAC;oBACN,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG;oBAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,IAAI,EAAE,GAAG;iBACV,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBACtB,IAAI,MAAM;wBAAE,OAAO;oBACnB,MAAM,GAAG,IAAI,CAAC;oBACd,qBAAqB,EAAE,CAAC;oBACxB,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBACpD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;oBACxB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,eAAyC,CAAC;YAC9C,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,eAAe,GAAG,GAAG,EAAE;oBACrB,IAAI,MAAM;wBAAE,OAAO;oBACnB,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,KAAK;wBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC/B,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBACpD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;oBACxB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC;gBACF,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE;oBAChE,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;YACL,CAAC;YAED,SAAS,qBAAqB;gBAC5B,IAAI,OAAO,CAAC,cAAc,IAAI,eAAe,EAAE,CAAC;oBAC9C,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;YAED,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBAC7B,IAAI,MAAM;oBAAE,OAAO;gBACnB,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,qBAAqB,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACxD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,YAAY,cAAc,EAAE,CAAC;oBAClD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { TransportStreamExtensions } from "@hyperttp/types";
2
+ type StreamPayload = ReadableStream<Uint8Array> & TransportStreamExtensions;
3
+ type BufferPayload = Uint8Array & TransportStreamExtensions;
4
+ export declare function decompressBuffer(body: Uint8Array, encoding: string): BufferPayload;
5
+ export declare function createDecompressStream(body: ReadableStream<Uint8Array>, encoding: string): StreamPayload;
6
+ export {};
7
+ //# sourceMappingURL=decompress.d.ts.map
@@ -0,0 +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;AAC5E,KAAK,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AA8C5D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,GACf,aAAa,CAQf;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,aAAa,CA0Df"}
@@ -0,0 +1,78 @@
1
+ import { brotliDecompressSync, createBrotliDecompress, createGunzip, createInflate, gunzipSync, inflateSync, } from "node:zlib";
2
+ import { Readable } from "node:stream";
3
+ function parseEncodings(encoding) {
4
+ return encoding
5
+ .split(",")
6
+ .map((part) => part.trim().toLowerCase())
7
+ .filter((part) => part.length > 0 && part !== "identity");
8
+ }
9
+ function attachNoopDump(buffer) {
10
+ const payload = buffer;
11
+ payload.dump = async () => { };
12
+ return payload;
13
+ }
14
+ function attachStreamDump(stream) {
15
+ const payload = stream;
16
+ payload.dump = async () => {
17
+ try {
18
+ await payload.cancel();
19
+ }
20
+ catch {
21
+ //
22
+ }
23
+ };
24
+ return payload;
25
+ }
26
+ function decompressOnce(input, encoding) {
27
+ const buffer = Buffer.from(input);
28
+ switch (encoding) {
29
+ case "gzip":
30
+ case "x-gzip":
31
+ return gunzipSync(buffer);
32
+ case "deflate":
33
+ return inflateSync(buffer);
34
+ case "br":
35
+ return brotliDecompressSync(buffer);
36
+ default:
37
+ return input;
38
+ }
39
+ }
40
+ export function decompressBuffer(body, encoding) {
41
+ let current = body;
42
+ for (const enc of parseEncodings(encoding)) {
43
+ current = decompressOnce(current, enc);
44
+ }
45
+ return attachNoopDump(current);
46
+ }
47
+ export function createDecompressStream(body, encoding) {
48
+ let current = body;
49
+ for (const enc of parseEncodings(encoding)) {
50
+ if (enc === "gzip" || enc === "x-gzip") {
51
+ if (typeof DecompressionStream !== "undefined") {
52
+ current = current.pipeThrough(new DecompressionStream("gzip"));
53
+ continue;
54
+ }
55
+ const nodeReadable = Readable.fromWeb(current);
56
+ const decompressed = nodeReadable.pipe(createGunzip());
57
+ current = Readable.toWeb(decompressed);
58
+ continue;
59
+ }
60
+ if (enc === "deflate") {
61
+ if (typeof DecompressionStream !== "undefined") {
62
+ current = current.pipeThrough(new DecompressionStream("deflate"));
63
+ continue;
64
+ }
65
+ const nodeReadable = Readable.fromWeb(current);
66
+ const decompressed = nodeReadable.pipe(createInflate());
67
+ current = Readable.toWeb(decompressed);
68
+ continue;
69
+ }
70
+ if (enc === "br") {
71
+ const nodeReadable = Readable.fromWeb(current);
72
+ const decompressed = nodeReadable.pipe(createBrotliDecompress());
73
+ current = Readable.toWeb(decompressed);
74
+ }
75
+ }
76
+ return attachStreamDump(current);
77
+ }
78
+ //# sourceMappingURL=decompress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Method, RequestBodyData } from "@hyperttp/types";
2
2
  export type NormalizedBody = string | Uint8Array | ArrayBuffer | FormData | URLSearchParams | ReadableStream | Blob | null | undefined;
3
- export declare function normalizeHeaders(headers: unknown): Record<string, string>;
4
3
  export declare function normalizeMethod(method: string): Method;
4
+ export declare function normalizeUrl(req: any): string;
5
+ export declare function normalizeHeaders(headers: unknown): Record<string, string | string[]>;
5
6
  export declare function normalizeBody(method: Method, body: RequestBodyData | undefined): RequestBodyData | undefined;
6
7
  //# sourceMappingURL=normalize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,UAAU,GACV,WAAW,GACX,QAAQ,GACR,eAAe,GACf,cAAc,GACd,IAAI,GACJ,IAAI,GACJ,SAAS,CAAC;AA+Bd,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiEzE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GAAG,SAAS,GAChC,eAAe,GAAG,SAAS,CAQ7B"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,UAAU,GACV,WAAW,GACX,QAAQ,GACR,eAAe,GACf,cAAc,GACd,IAAI,GACJ,IAAI,GACJ,SAAS,CAAC;AAuCd,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAY7C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CA+HnC;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GAAG,SAAS,GAChC,eAAe,GAAG,SAAS,CAK7B"}