fetch-nodeshim 0.1.0 → 0.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # minifetch
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Add web standard type/globals re-exports and polyfill `File` from `node:buffer`
8
+ Submitted by [@kitten](https://github.com/kitten) (See [#1](https://github.com/kitten/fetch-nodeshim/pull/1))
9
+
10
+ ### Patch Changes
11
+
12
+ - Add missing constructor type overloads and add missing `Blob` re-export
13
+ Submitted by [@kitten](https://github.com/kitten) (See [#2](https://github.com/kitten/fetch-nodeshim/pull/2))
14
+
3
15
  ## 0.1.0
4
16
 
5
17
  Initial Release.
@@ -1,3 +1,86 @@
1
- declare function fetch(input: string | URL | Request, requestInit?: RequestInit): Promise<Response>;
1
+ import * as buffer from 'node:buffer';
2
2
 
3
- export { fetch as default, fetch };
3
+ type Or<T, U> = void extends T ? U : T;
4
+ type HeadersInit = string[][] | Record<string, string | ReadonlyArray<string>> | _Headers;
5
+ type FormDataEntryValue = string | _File;
6
+ type RequestInfo = string | _URL | _Request;
7
+ interface _Iterable<T, TReturn = any, TNext = any>
8
+ extends Or<Iterable<T, TReturn, TNext>, globalThis.Iterable<T, TReturn, TNext>> {}
9
+ interface _AsyncIterable<T, TReturn = any, TNext = any>
10
+ extends Or<AsyncIterable<T, TReturn, TNext>, globalThis.AsyncIterable<T, TReturn, TNext>> {}
11
+ interface _ReadableStream<T = any> extends Or<ReadableStream<T>, globalThis.ReadableStream<T>> {}
12
+ type BodyInit =
13
+ | ArrayBuffer
14
+ | _Blob
15
+ | NodeJS.ArrayBufferView
16
+ | _URLSearchParams
17
+ | _ReadableStream
18
+ | _AsyncIterable<Uint8Array>
19
+ | _FormData
20
+ | _Iterable<Uint8Array>
21
+ | null
22
+ | string;
23
+ interface FileClass extends Or<typeof globalThis.File, typeof buffer.File> {}
24
+ interface _File extends _Blob, Or<File, globalThis.File> {
25
+ readonly name: string;
26
+ readonly lastModified: number;
27
+ }
28
+ interface _File extends Or<globalThis.File, buffer.File> {}
29
+ declare const _File: FileClass;
30
+ interface _RequestInit extends Or<RequestInit, globalThis.RequestInit> {
31
+ duplex?: 'half';
32
+ }
33
+ interface _ResponseInit extends Or<ResponseInit, globalThis.ResponseInit> {}
34
+ interface BlobClass extends Or<typeof Blob, typeof globalThis.Blob> {}
35
+ interface _Blob extends Or<Blob, globalThis.Blob> {}
36
+ declare const _Blob: BlobClass;
37
+ interface URLSearchParamsClass
38
+ extends Or<typeof URLSearchParams, typeof globalThis.URLSearchParams> {}
39
+ interface _URLSearchParams extends Or<URLSearchParams, globalThis.URLSearchParams> {}
40
+ declare const _URLSearchParams: URLSearchParamsClass;
41
+ interface URLClass extends Or<typeof URL, typeof globalThis.URL> {}
42
+ interface _URL extends Or<URL, globalThis.URL> {}
43
+ declare const _URL: URLClass;
44
+ interface RequestClass extends Or<typeof Request, typeof globalThis.Request> {
45
+ new (input: RequestInfo, init?: _RequestInit | Or<RequestInit, globalThis.RequestInit>): _Request;
46
+ }
47
+ interface _Request extends Or<Request, globalThis.Request> {}
48
+ declare const _Request: RequestClass;
49
+ interface ResponseClass extends Or<typeof Response, typeof globalThis.Response> {
50
+ new (body?: BodyInit, init?: _ResponseInit): _Response;
51
+ }
52
+ interface _Response extends Or<Response, globalThis.Response> {}
53
+ declare const _Response: ResponseClass;
54
+ interface HeadersClass extends Or<typeof Headers, typeof globalThis.Headers> {
55
+ new (init?: HeadersInit): _Headers;
56
+ }
57
+ interface _Headers extends Or<Headers, globalThis.Headers> {}
58
+ declare const _Headers: HeadersClass;
59
+ interface FormDataClass extends Or<typeof FormData, typeof globalThis.FormData> {}
60
+ interface _FormData
61
+ extends Or<FormData & _Iterable<[string, FormDataEntryValue]>, globalThis.FormData> {}
62
+ declare const _FormData: FormDataClass;
63
+
64
+ declare function _fetch(
65
+ input: string | _URL | _Request,
66
+ requestInit?: _RequestInit
67
+ ): Promise<_Response>;
68
+
69
+ export {
70
+ _Blob as Blob,
71
+ type BodyInit,
72
+ _File as File,
73
+ _FormData as FormData,
74
+ type FormDataEntryValue,
75
+ _Headers as Headers,
76
+ type HeadersInit,
77
+ _Request as Request,
78
+ type RequestInfo,
79
+ type _RequestInit as RequestInit,
80
+ _Response as Response,
81
+ type _ResponseInit as ResponseInit,
82
+ _URL as URL,
83
+ _URLSearchParams as URLSearchParams,
84
+ _fetch as default,
85
+ _fetch as fetch,
86
+ };
package/dist/minifetch.js CHANGED
@@ -16,6 +16,8 @@ var a = require("node:crypto");
16
16
 
17
17
  var s = require("node:zlib");
18
18
 
19
+ var i = require("node:buffer");
20
+
19
21
  function _interopNamespaceDefault(e) {
20
22
  var t = Object.create(null);
21
23
  if (e) {
@@ -35,17 +37,19 @@ function _interopNamespaceDefault(e) {
35
37
  return t;
36
38
  }
37
39
 
38
- var i = _interopNamespaceDefault(t);
40
+ var f = _interopNamespaceDefault(t);
41
+
42
+ var l = _interopNamespaceDefault(r);
39
43
 
40
- var f = _interopNamespaceDefault(r);
44
+ var u = _interopNamespaceDefault(n);
41
45
 
42
- var l = _interopNamespaceDefault(n);
46
+ var c = _interopNamespaceDefault(s);
43
47
 
44
- var u = _interopNamespaceDefault(s);
48
+ var d = _interopNamespaceDefault(i);
45
49
 
46
- var c = "\r\n";
50
+ var p = "\r\n";
47
51
 
48
- var d = "-".repeat(2);
52
+ var y = "-".repeat(2);
49
53
 
50
54
  var isBlob = e => {
51
55
  if ("object" == typeof e && "function" == typeof e.arrayBuffer && "string" == typeof e.type && "function" == typeof e.stream && "function" == typeof e.constructor) {
@@ -57,18 +61,18 @@ var isBlob = e => {
57
61
  };
58
62
 
59
63
  var getFormHeader = (e, t, r) => {
60
- var n = `${d}${e}${c}`;
64
+ var n = `${y}${e}${p}`;
61
65
  n += `Content-Disposition: form-data; name="${t}"`;
62
66
  if (isBlob(r)) {
63
- n += `; filename="${r.name ?? "blob"}"${c}`;
67
+ n += `; filename="${r.name ?? "blob"}"${p}`;
64
68
  n += `Content-Type: ${r.type || "application/octet-stream"}`;
65
69
  }
66
- return `${n}${c}${c}`;
70
+ return `${n}${p}${p}`;
67
71
  };
68
72
 
69
- var getFormFooter = e => `${d}${e}${d}${c}${c}`;
73
+ var getFormFooter = e => `${y}${e}${y}${p}${p}`;
70
74
 
71
- var p = new TextEncoder;
75
+ var h = new TextEncoder;
72
76
 
73
77
  var extractBody = t => {
74
78
  var r = null;
@@ -78,12 +82,12 @@ var extractBody = t => {
78
82
  n = null;
79
83
  s = 0;
80
84
  } else if ("string" == typeof t) {
81
- var i = p.encode(`${t}`);
85
+ var i = h.encode(`${t}`);
82
86
  r = "text/plain;charset=UTF-8";
83
87
  s = i.byteLength;
84
88
  n = i;
85
89
  } else if ((e => "object" == typeof e && "function" == typeof e.append && "function" == typeof e.delete && "function" == typeof e.get && "function" == typeof e.getAll && "function" == typeof e.has && "function" == typeof e.set && "function" == typeof e.sort && "URLSearchParams" === e[Symbol.toStringTag])(t)) {
86
- var f = p.encode(t.toString());
90
+ var f = h.encode(t.toString());
87
91
  n = f;
88
92
  s = f.byteLength;
89
93
  r = "application/x-www-form-urlencoded;charset=UTF-8";
@@ -105,28 +109,28 @@ var extractBody = t => {
105
109
  } else if ((e => "object" == typeof e && "function" == typeof e.getReader && "function" == typeof e.cancel && "function" == typeof e.tee)(t)) {
106
110
  n = t;
107
111
  } else if ((e => "object" == typeof e && "function" == typeof e.append && "function" == typeof e.set && "function" == typeof e.get && "function" == typeof e.getAll && "function" == typeof e.delete && "function" == typeof e.keys && "function" == typeof e.values && "function" == typeof e.entries && "function" == typeof e.constructor && "FormData" === e[Symbol.toStringTag])(t)) {
108
- var d = `formdata-${a.randomBytes(8).toString("hex")}`;
109
- r = `multipart/form-data; boundary=${d}`;
112
+ var c = `formdata-${a.randomBytes(8).toString("hex")}`;
113
+ r = `multipart/form-data; boundary=${c}`;
110
114
  s = ((e, t) => {
111
115
  var r = Buffer.byteLength(getFormFooter(t));
112
116
  for (var [n, o] of e) {
113
117
  r += Buffer.byteLength(getFormHeader(t, n, o)) + (isBlob(o) ? o.size : Buffer.byteLength(`${o}`)) + 2;
114
118
  }
115
119
  return r;
116
- })(t, d);
120
+ })(t, c);
117
121
  n = e.Readable.from(async function* generatorOfFormData(e, t) {
118
122
  var r = new TextEncoder;
119
123
  for (var [n, o] of e) {
120
124
  if (isBlob(o)) {
121
125
  yield r.encode(getFormHeader(t, n, o));
122
126
  yield* o.stream();
123
- yield r.encode(c);
127
+ yield r.encode(p);
124
128
  } else {
125
- yield r.encode(getFormHeader(t, n, o) + o + c);
129
+ yield r.encode(getFormHeader(t, n, o) + o + p);
126
130
  }
127
131
  }
128
132
  yield r.encode(getFormFooter(t));
129
- }(t, d));
133
+ }(t, c));
130
134
  } else if ((t => "function" == typeof t.getBoundary && "function" == typeof t.hasKnownLength && "function" == typeof t.getLengthSync && e.Readable.isReadable(t))(t)) {
131
135
  r = `multipart/form-data; boundary=${t.getBoundary()}`;
132
136
  s = t.hasKnownLength() ? t.getLengthSync() : null;
@@ -136,10 +140,10 @@ var extractBody = t => {
136
140
  } else if ((e => "function" == typeof e[Symbol.asyncIterator] || "function" == typeof e[Symbol.iterator])(t)) {
137
141
  n = e.Readable.from(t);
138
142
  } else {
139
- var y = p.encode(`${t}`);
143
+ var d = h.encode(`${t}`);
140
144
  r = "text/plain;charset=UTF-8";
141
- n = y;
142
- s = y.byteLength;
145
+ n = d;
146
+ s = d.byteLength;
143
147
  }
144
148
  return {
145
149
  contentLength: s,
@@ -159,7 +163,7 @@ class InflateStream extends e.Transform {
159
163
  r();
160
164
  return;
161
165
  }
162
- this._inflate = 8 == (15 & e[0]) ? u.createInflate(this._opts) : u.createInflateRaw(this._opts);
166
+ this._inflate = 8 == (15 & e[0]) ? c.createInflate(this._opts) : c.createInflateRaw(this._opts);
163
167
  this._inflate.on("data", this.push.bind(this));
164
168
  this._inflate.on("end", (() => this.push(null)));
165
169
  this._inflate.on("error", (e => this.destroy(e)));
@@ -175,6 +179,26 @@ class InflateStream extends e.Transform {
175
179
  }
176
180
  }
177
181
 
182
+ var v = globalThis.File || d.File;
183
+
184
+ if (void 0 === globalThis.File) {
185
+ globalThis.File = v;
186
+ }
187
+
188
+ var b = Blob;
189
+
190
+ var m = URLSearchParams;
191
+
192
+ var g = URL;
193
+
194
+ var w = Request;
195
+
196
+ var L = Response;
197
+
198
+ var T = Headers;
199
+
200
+ var _ = FormData;
201
+
178
202
  var headersOfRawHeaders = e => {
179
203
  var t = new Headers;
180
204
  for (var r = 0; r < e.length; r += 2) {
@@ -196,23 +220,23 @@ var methodToHttpOption = e => {
196
220
  };
197
221
 
198
222
  var urlToHttpOptions = e => {
199
- var t = new URL(e);
223
+ var t = new g(e);
200
224
  switch (t.protocol) {
201
225
  case "http:":
202
226
  case "https:":
203
- return l.urlToHttpOptions(t);
227
+ return u.urlToHttpOptions(t);
204
228
 
205
229
  default:
206
230
  throw new TypeError(`URL scheme "${t.protocol}" is not supported.`);
207
231
  }
208
232
  };
209
233
 
210
- async function fetch(t, r) {
234
+ async function _fetch(t, r) {
211
235
  var n = (e => null != e && "object" == typeof e && "body" in e)(t);
212
236
  var o = n ? t.url : t;
213
237
  var a = n ? t.body : r?.body || null;
214
238
  var s = n ? t.signal : r?.signal || void 0;
215
- var l = (e => {
239
+ var i = (e => {
216
240
  switch (e) {
217
241
  case "follow":
218
242
  case "manual":
@@ -226,42 +250,42 @@ async function fetch(t, r) {
226
250
  throw new TypeError(`Request constructor: ${e} is not an accepted type. Expected one of follow, manual, error.`);
227
251
  }
228
252
  })(n ? t.redirect : r?.redirect);
229
- var c = new URL(o);
253
+ var u = new g(o);
230
254
  var d = extractBody(a);
231
255
  var p = 0;
232
256
  var y = new Headers(r?.headers || (n ? t.headers : void 0));
233
257
  var h = {
234
- ...urlToHttpOptions(c),
258
+ ...urlToHttpOptions(u),
235
259
  method: methodToHttpOption(n ? t.method : r?.method),
236
260
  signal: s
237
261
  };
238
- return await new Promise((function _fetch(t, r) {
262
+ return await new Promise((function _call(t, r) {
239
263
  var n = h.method;
240
- var o = ("https:" === h.protocol ? i : f).request(h);
264
+ var o = ("https:" === h.protocol ? f : l).request(h);
241
265
  o.on("response", (o => {
242
266
  o.setTimeout(0);
243
- var i = {
267
+ var f = {
244
268
  status: o.statusCode,
245
269
  statusText: o.statusMessage,
246
270
  headers: headersOfRawHeaders(o.rawHeaders)
247
271
  };
248
- if (301 === (b = i.status) || 302 === b || 303 === b || 307 === b || 308 === b) {
249
- var f = i.headers.get("Location");
250
- var v = null != f ? new URL(f, c) : null;
251
- if ("error" === l) {
272
+ if (301 === (b = f.status) || 302 === b || 303 === b || 307 === b || 308 === b) {
273
+ var l = f.headers.get("Location");
274
+ var v = null != l ? new g(l, u) : null;
275
+ if ("error" === i) {
252
276
  r(new Error("URI requested responds with a redirect, redirect mode is set to error"));
253
277
  return;
254
- } else if ("manual" === l && null !== v) {
255
- i.headers.set("Location", v.toString());
256
- } else if ("follow" === l && null !== v) {
278
+ } else if ("manual" === i && null !== v) {
279
+ f.headers.set("Location", v.toString());
280
+ } else if ("follow" === i && null !== v) {
257
281
  if (++p > 20) {
258
- r(new Error(`maximum redirect reached at: ${c}`));
282
+ r(new Error(`maximum redirect reached at: ${u}`));
259
283
  return;
260
284
  } else if ("http:" !== v.protocol && "https:" !== v.protocol) {
261
285
  r(new Error("URL scheme must be a HTTP(S) scheme"));
262
286
  return;
263
287
  }
264
- if (303 === i.status || (301 === i.status || 302 === i.status) && "POST" === n) {
288
+ if (303 === f.status || (301 === f.status || 302 === f.status) && "POST" === n) {
265
289
  d = extractBody(null);
266
290
  h.method = "GET";
267
291
  y.delete("Content-Length");
@@ -271,8 +295,8 @@ async function fetch(t, r) {
271
295
  } else {
272
296
  d = extractBody(a);
273
297
  }
274
- Object.assign(h, urlToHttpOptions(c = v));
275
- return _fetch(t, r);
298
+ Object.assign(h, urlToHttpOptions(u = v));
299
+ return _call(t, r);
276
300
  }
277
301
  }
278
302
  var b;
@@ -284,41 +308,41 @@ async function fetch(t, r) {
284
308
  }
285
309
  };
286
310
  s?.addEventListener("abort", destroy);
287
- var g = o;
288
- var m = i.headers.get("Content-Encoding")?.toLowerCase();
289
- if ("HEAD" === n || 204 === i.status || 304 === i.status) {
290
- g = null;
291
- } else if (null != m) {
292
- i.headers.set("Content-Encoding", m);
293
- g = e.pipeline(g, (t => {
311
+ var m = o;
312
+ var w = f.headers.get("Content-Encoding")?.toLowerCase();
313
+ if ("HEAD" === n || 204 === f.status || 304 === f.status) {
314
+ m = null;
315
+ } else if (null != w) {
316
+ f.headers.set("Content-Encoding", w);
317
+ m = e.pipeline(m, (t => {
294
318
  switch (t) {
295
319
  case "br":
296
- return u.createBrotliDecompress({
297
- flush: u.constants.BROTLI_OPERATION_FLUSH,
298
- finishFlush: u.constants.BROTLI_OPERATION_FLUSH
320
+ return c.createBrotliDecompress({
321
+ flush: c.constants.BROTLI_OPERATION_FLUSH,
322
+ finishFlush: c.constants.BROTLI_OPERATION_FLUSH
299
323
  });
300
324
 
301
325
  case "gzip":
302
326
  case "x-gzip":
303
- return u.createGunzip({
304
- flush: u.constants.Z_SYNC_FLUSH,
305
- finishFlush: u.constants.Z_SYNC_FLUSH
327
+ return c.createGunzip({
328
+ flush: c.constants.Z_SYNC_FLUSH,
329
+ finishFlush: c.constants.Z_SYNC_FLUSH
306
330
  });
307
331
 
308
332
  case "deflate":
309
333
  case "x-deflate":
310
334
  return new InflateStream({
311
- flush: u.constants.Z_SYNC_FLUSH,
312
- finishFlush: u.constants.Z_SYNC_FLUSH
335
+ flush: c.constants.Z_SYNC_FLUSH,
336
+ finishFlush: c.constants.Z_SYNC_FLUSH
313
337
  });
314
338
 
315
339
  default:
316
340
  return new e.PassThrough;
317
341
  }
318
- })(m), destroy);
342
+ })(w), destroy);
319
343
  }
320
344
  t(function createResponse(e, t, r) {
321
- var n = new Response(e, t);
345
+ var n = new L(e, t);
322
346
  Object.defineProperty(n, "url", {
323
347
  value: r.url
324
348
  });
@@ -333,9 +357,9 @@ async function fetch(t, r) {
333
357
  });
334
358
  }
335
359
  return n;
336
- }(g, i, {
360
+ }(m, f, {
337
361
  type: "default",
338
- url: c.toString(),
362
+ url: u.toString(),
339
363
  redirected: p > 0
340
364
  }));
341
365
  }));
@@ -376,7 +400,23 @@ async function fetch(t, r) {
376
400
  }));
377
401
  }
378
402
 
379
- exports.default = fetch;
403
+ exports.Blob = b;
404
+
405
+ exports.File = v;
406
+
407
+ exports.FormData = _;
408
+
409
+ exports.Headers = T;
410
+
411
+ exports.Request = w;
412
+
413
+ exports.Response = L;
414
+
415
+ exports.URL = g;
416
+
417
+ exports.URLSearchParams = m;
418
+
419
+ exports.default = _fetch;
380
420
 
381
- exports.fetch = fetch;
421
+ exports.fetch = _fetch;
382
422
  //# sourceMappingURL=minifetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"minifetch.js","sources":["../src/body.ts","../src/encoding.ts","../src/fetch.ts"],"sourcesContent":["import { Readable } from 'node:stream';\nimport { isAnyArrayBuffer } from 'node:util/types';\nimport { randomBytes } from 'node:crypto';\n\nexport type BodyInit =\n | Exclude<RequestInit['body'], undefined | null>\n | FormDataPolyfill\n | Readable;\n\nexport interface BodyState {\n contentLength: number | null;\n contentType: string | null;\n body: Readable | ReadableStream | Uint8Array | null;\n}\n\ninterface FormDataPolyfill extends Readable {\n getBoundary(): string;\n getLengthSync(): number;\n hasKnownLength(): number;\n}\n\nconst CRLF = '\\r\\n';\nconst CRLF_LENGTH = 2;\nconst BOUNDARY = '-'.repeat(2);\n\nconst isReadable = (object: any): object is Readable =>\n Readable.isReadable(object);\n\nconst isIterable = (\n object: any\n): object is AsyncIterable<any> | Iterable<any> =>\n typeof object[Symbol.asyncIterator] === 'function' ||\n typeof object[Symbol.iterator] === 'function';\n\nconst isMultipartFormDataStream = (object: any): object is FormDataPolyfill =>\n typeof object.getBoundary === 'function' &&\n typeof object.hasKnownLength === 'function' &&\n typeof object.getLengthSync === 'function' &&\n Readable.isReadable(object);\n\nconst isFormData = (object: any): object is FormData =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.set === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.keys === 'function' &&\n typeof object.values === 'function' &&\n typeof object.entries === 'function' &&\n typeof object.constructor === 'function' &&\n object[Symbol.toStringTag] === 'FormData';\n\nconst isURLSearchParameters = (object: any): object is URLSearchParams =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.has === 'function' &&\n typeof object.set === 'function' &&\n typeof object.sort === 'function' &&\n object[Symbol.toStringTag] === 'URLSearchParams';\n\nconst isReadableStream = (object: any): object is ReadableStream =>\n typeof object === 'object' &&\n typeof object.getReader === 'function' &&\n typeof object.cancel === 'function' &&\n typeof object.tee === 'function';\n\nconst isBlob = (object: any): object is Blob => {\n if (\n typeof object === 'object' &&\n typeof object.arrayBuffer === 'function' &&\n typeof object.type === 'string' &&\n typeof object.stream === 'function' &&\n typeof object.constructor === 'function'\n ) {\n const tag = object[Symbol.toStringTag];\n return tag.startsWith('Blob') || tag.startsWith('File');\n } else {\n return false;\n }\n};\n\nconst makeFormBoundary = (): string =>\n `formdata-${randomBytes(8).toString('hex')}`;\n\nconst getFormHeader = (\n boundary: string,\n name: string,\n field: File | Blob | string\n): string => {\n let header = `${BOUNDARY}${boundary}${CRLF}`;\n header += `Content-Disposition: form-data; name=\"${name}\"`;\n if (isBlob(field)) {\n header += `; filename=\"${(field as File).name ?? 'blob'}\"${CRLF}`;\n header += `Content-Type: ${field.type || 'application/octet-stream'}`;\n }\n return `${header}${CRLF}${CRLF}`;\n};\n\nconst getFormFooter = (boundary: string) =>\n `${BOUNDARY}${boundary}${BOUNDARY}${CRLF}${CRLF}`;\n\nexport const getFormDataLength = (form: FormData, boundary: string) => {\n let length = Buffer.byteLength(getFormFooter(boundary));\n for (const [name, value] of form)\n length +=\n Buffer.byteLength(getFormHeader(boundary, name, value)) +\n (isBlob(value) ? value.size : Buffer.byteLength(`${value}`)) +\n CRLF_LENGTH;\n return length;\n};\n\nasync function* generatorOfFormData(\n form: FormData,\n boundary: string\n): AsyncGenerator<ArrayBufferLike> {\n const encoder = new TextEncoder();\n for (const [name, value] of form) {\n if (isBlob(value)) {\n yield encoder.encode(getFormHeader(boundary, name, value));\n yield* value.stream();\n yield encoder.encode(CRLF);\n } else {\n yield encoder.encode(getFormHeader(boundary, name, value) + value + CRLF);\n }\n }\n yield encoder.encode(getFormFooter(boundary));\n}\n\nconst encoder = new TextEncoder();\n\nexport const extractBody = (object: BodyInit | null): BodyState => {\n let type: string | null = null;\n let body: Readable | ReadableStream | Uint8Array | null;\n let size: number | null = null;\n if (object == null) {\n body = null;\n size = 0;\n } else if (typeof object === 'string') {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n size = bytes.byteLength;\n body = bytes;\n } else if (isURLSearchParameters(object)) {\n const bytes = encoder.encode(object.toString());\n body = bytes;\n size = bytes.byteLength;\n type = 'application/x-www-form-urlencoded;charset=UTF-8';\n } else if (isBlob(object)) {\n size = object.size;\n type = object.type || null;\n body = object.stream();\n } else if (object instanceof Uint8Array) {\n body = object;\n size = object.byteLength;\n } else if (isAnyArrayBuffer(object)) {\n const bytes = new Uint8Array(object);\n body = bytes;\n size = bytes.byteLength;\n } else if (ArrayBuffer.isView(object)) {\n const bytes = new Uint8Array(\n object.buffer,\n object.byteOffset,\n object.byteLength\n );\n body = bytes;\n size = bytes.byteLength;\n } else if (isReadableStream(object)) {\n body = object;\n } else if (isFormData(object)) {\n const boundary = makeFormBoundary();\n type = `multipart/form-data; boundary=${boundary}`;\n size = getFormDataLength(object, boundary);\n body = Readable.from(generatorOfFormData(object, boundary));\n } else if (isMultipartFormDataStream(object)) {\n type = `multipart/form-data; boundary=${object.getBoundary()}`;\n size = object.hasKnownLength() ? object.getLengthSync() : null;\n body = object as Readable;\n } else if (isReadable(object)) {\n body = object as Readable;\n } else if (isIterable(object)) {\n body = Readable.from(object);\n } else {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n body = bytes;\n size = bytes.byteLength;\n }\n return {\n contentLength: size,\n contentType: type,\n body,\n };\n};\n","import { PassThrough, Transform, TransformCallback } from 'node:stream';\nimport * as zlib from 'node:zlib';\n\n/** @see https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 */\ntype Encoding = 'gzip' | 'x-gzip' | 'deflate' | 'x-deflate' | 'br' | {};\n\n/** @see https://github.com/nodejs/undici/pull/2650 */\nclass InflateStream extends Transform {\n _opts?: zlib.ZlibOptions;\n _inflate?: Transform;\n\n constructor(opts?: zlib.ZlibOptions) {\n super();\n this._opts = opts;\n }\n\n _transform(\n chunk: Buffer,\n encoding: BufferEncoding,\n callback: TransformCallback\n ) {\n if (!this._inflate) {\n if (chunk.length === 0) {\n callback();\n return;\n }\n this._inflate =\n (chunk[0] & 0x0f) === 0x08\n ? zlib.createInflate(this._opts)\n : zlib.createInflateRaw(this._opts);\n this._inflate.on('data', this.push.bind(this));\n this._inflate.on('end', () => this.push(null));\n this._inflate.on('error', err => this.destroy(err));\n }\n this._inflate.write(chunk, encoding, callback);\n }\n\n _final(callback: TransformCallback) {\n if (this._inflate) {\n this._inflate.end();\n this._inflate = undefined;\n }\n callback();\n }\n}\n\nexport const createContentDecoder = (encoding: Encoding | {}) => {\n // See: https://github.com/nodejs/undici/blob/008187b/lib/web/fetch/index.js#L2138-L2160\n switch (encoding) {\n case 'br':\n return zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n });\n case 'gzip':\n case 'x-gzip':\n return zlib.createGunzip({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n case 'deflate':\n case 'x-deflate':\n return new InflateStream({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n default:\n return new PassThrough();\n }\n};\n","import { Stream, Readable, pipeline } from 'node:stream';\nimport * as https from 'node:https';\nimport * as http from 'node:http';\nimport * as url from 'node:url';\n\nimport { extractBody } from './body';\nimport { createContentDecoder } from './encoding';\n\n/** Maximum allowed redirects (matching Chromium's limit) */\nconst MAX_REDIRECTS = 20;\n\n/** Convert Node.js raw headers array to Headers */\nconst headersOfRawHeaders = (rawHeaders: readonly string[]): Headers => {\n const headers = new Headers();\n for (let i = 0; i < rawHeaders.length; i += 2)\n headers.set(rawHeaders[i], rawHeaders[i + 1]);\n return headers;\n};\n\n/** Assign Headers to a Node.js OutgoingMessage (request) */\nconst assignOutgoingMessageHeaders = (\n outgoing: http.OutgoingMessage,\n headers: Headers\n) => {\n if (typeof outgoing.setHeaders === 'function') {\n outgoing.setHeaders(headers);\n } else {\n for (const [key, value] of headers) outgoing.setHeader(key, value);\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst toRedirectOption = (\n redirect: string | undefined\n): 'follow' | 'manual' | 'error' => {\n switch (redirect) {\n case 'follow':\n case 'manual':\n case 'error':\n return redirect;\n case undefined:\n return 'follow';\n default:\n throw new TypeError(\n `Request constructor: ${redirect} is not an accepted type. Expected one of follow, manual, error.`\n );\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst methodToHttpOption = (method: string | undefined): string => {\n switch (method) {\n case 'CONNECT':\n case 'TRACE':\n case 'TRACK':\n throw new TypeError(\n `Failed to construct 'Request': '${method}' HTTP method is unsupported.`\n );\n default:\n return method ? method.toUpperCase() : 'GET';\n }\n};\n\n/** Convert URL to Node.js HTTP request options and disallow unsupported protocols */\nconst urlToHttpOptions = (input: URL) => {\n const _url = new URL(input);\n switch (_url.protocol) {\n // TODO: 'file:' and 'data:' support\n case 'http:':\n case 'https:':\n return url.urlToHttpOptions(_url);\n default:\n throw new TypeError(`URL scheme \"${_url.protocol}\" is not supported.`);\n }\n};\n\n/** Returns if `input` is a Request object */\nconst isRequest = (input: any): input is Request =>\n input != null && typeof input === 'object' && 'body' in input;\n\n/** Returns if status `code` is a redirect code */\nconst isRedirectCode = (\n code: number | undefined\n): code is 301 | 302 | 303 | 307 | 308 =>\n code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n\nfunction createResponse(\n body: ConstructorParameters<typeof Response>[0] | null,\n init: ResponseInit,\n params: {\n url: string;\n redirected: boolean;\n type: 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';\n }\n) {\n const response = new Response(body, init);\n Object.defineProperty(response, 'url', { value: params.url });\n if (params.type !== 'default')\n Object.defineProperty(response, 'type', { value: params.type });\n if (params.redirected)\n Object.defineProperty(response, 'redirected', { value: params.redirected });\n return response;\n}\n\nexport async function fetch(\n input: string | URL | Request,\n requestInit?: RequestInit\n): Promise<Response> {\n const initFromRequest = isRequest(input);\n const initUrl = initFromRequest ? input.url : input;\n const initBody = initFromRequest ? input.body : requestInit?.body || null;\n const signal = initFromRequest\n ? input.signal\n : requestInit?.signal || undefined;\n const redirect = toRedirectOption(\n initFromRequest ? input.redirect : requestInit?.redirect\n );\n\n let requestUrl = new URL(initUrl);\n let requestBody = extractBody(initBody);\n let redirects = 0;\n\n const requestHeaders = new Headers(\n requestInit?.headers || (initFromRequest ? input.headers : undefined)\n );\n const requestOptions = {\n ...urlToHttpOptions(requestUrl),\n method: methodToHttpOption(\n initFromRequest ? input.method : requestInit?.method\n ),\n signal,\n } satisfies http.RequestOptions;\n\n function _fetch(\n resolve: (response: Response | Promise<Response>) => void,\n reject: (reason?: any) => void\n ) {\n const method = requestOptions.method;\n const protocol = requestOptions.protocol === 'https:' ? https : http;\n const outgoing = protocol.request(requestOptions);\n\n outgoing.on('response', incoming => {\n incoming.setTimeout(0); // Forcefully disable timeout\n\n const init = {\n status: incoming.statusCode,\n statusText: incoming.statusMessage,\n headers: headersOfRawHeaders(incoming.rawHeaders),\n } satisfies ResponseInit;\n\n if (isRedirectCode(init.status)) {\n const location = init.headers.get('Location');\n const locationURL =\n location != null ? new URL(location, requestUrl) : null;\n if (redirect === 'error') {\n // TODO: do we need a special Error instance here?\n reject(\n new Error(\n 'URI requested responds with a redirect, redirect mode is set to error'\n )\n );\n return;\n } else if (redirect === 'manual' && locationURL !== null) {\n init.headers.set('Location', locationURL.toString());\n } else if (redirect === 'follow' && locationURL !== null) {\n if (++redirects > MAX_REDIRECTS) {\n reject(new Error(`maximum redirect reached at: ${requestUrl}`));\n return;\n } else if (\n locationURL.protocol !== 'http:' &&\n locationURL.protocol !== 'https:'\n ) {\n // TODO: do we need a special Error instance here?\n reject(new Error('URL scheme must be a HTTP(S) scheme'));\n return;\n }\n\n if (\n init.status === 303 ||\n ((init.status === 301 || init.status === 302) && method === 'POST')\n ) {\n requestBody = extractBody(null);\n requestOptions.method = 'GET';\n requestHeaders.delete('Content-Length');\n } else if (\n requestBody.body != null &&\n requestBody.contentLength == null\n ) {\n reject(new Error('Cannot follow redirect with a streamed body'));\n return;\n } else {\n requestBody = extractBody(initBody);\n }\n\n Object.assign(\n requestOptions,\n urlToHttpOptions((requestUrl = locationURL))\n );\n return _fetch(resolve, reject);\n }\n }\n\n const destroy = (reason?: any) => {\n signal?.removeEventListener('abort', destroy);\n if (reason) {\n incoming.destroy(signal?.aborted ? signal.reason : reason);\n reject(signal?.aborted ? signal.reason : reason);\n }\n };\n\n signal?.addEventListener('abort', destroy);\n\n let body: Readable | null = incoming;\n const encoding = init.headers.get('Content-Encoding')?.toLowerCase();\n if (method === 'HEAD' || init.status === 204 || init.status === 304) {\n body = null;\n } else if (encoding != null) {\n init.headers.set('Content-Encoding', encoding);\n body = pipeline(body, createContentDecoder(encoding), destroy);\n }\n\n resolve(\n createResponse(body, init, {\n type: 'default',\n url: requestUrl.toString(),\n redirected: redirects > 0,\n })\n );\n });\n\n outgoing.on('error', reject);\n\n if (!requestHeaders.has('Accept')) requestHeaders.set('Accept', '*/*');\n if (requestBody.contentType)\n requestHeaders.set('Content-Type', requestBody.contentType);\n\n if (requestBody.body == null && (method === 'POST' || method === 'PUT')) {\n requestHeaders.set('Content-Length', '0');\n } else if (requestBody.body != null && requestBody.contentLength != null) {\n requestHeaders.set('Content-Length', `${requestBody.contentLength}`);\n }\n\n assignOutgoingMessageHeaders(outgoing, requestHeaders);\n\n if (requestBody.body == null) {\n outgoing.end();\n } else if (requestBody.body instanceof Uint8Array) {\n outgoing.write(requestBody.body);\n outgoing.end();\n } else {\n const body =\n requestBody.body instanceof Stream\n ? requestBody.body\n : Readable.fromWeb(requestBody.body);\n pipeline(body, outgoing, error => {\n if (error) reject(error);\n });\n }\n }\n\n return await new Promise(_fetch);\n}\n"],"names":["CRLF","BOUNDARY","repeat","isBlob","object","arrayBuffer","type","stream","constructor","tag","Symbol","toStringTag","startsWith","getFormHeader","boundary","name","field","header","getFormFooter","encoder","TextEncoder","extractBody","body","size","bytes","encode","byteLength","append","delete","get","getAll","has","set","sort","isURLSearchParameters","toString","Uint8Array","isAnyArrayBuffer","ArrayBuffer","isView","buffer","byteOffset","getReader","cancel","tee","isReadableStream","keys","values","entries","isFormData","randomBytes","getFormDataLength","form","length","Buffer","value","Readable","from","async","generatorOfFormData","getBoundary","hasKnownLength","getLengthSync","isReadable","isMultipartFormDataStream","asyncIterator","iterator","isIterable","contentLength","contentType","InflateStream","Transform","opts","super","this","_opts","_transform","chunk","encoding","callback","_inflate","zlib","createInflate","createInflateRaw","on","push","bind","err","destroy","write","_final","end","undefined","headersOfRawHeaders","rawHeaders","headers","Headers","i","methodToHttpOption","method","TypeError","toUpperCase","urlToHttpOptions","input","_url","URL","protocol","url","fetch","requestInit","initFromRequest","isRequest","initUrl","initBody","signal","redirect","toRedirectOption","requestUrl","requestBody","redirects","requestHeaders","requestOptions","Promise","_fetch","resolve","reject","outgoing","https","http","request","incoming","setTimeout","init","status","statusCode","statusText","statusMessage","code","location","locationURL","Error","Object","assign","reason","removeEventListener","aborted","addEventListener","toLowerCase","pipeline","createBrotliDecompress","flush","constants","BROTLI_OPERATION_FLUSH","finishFlush","createGunzip","Z_SYNC_FLUSH","PassThrough","createContentDecoder","createResponse","params","response","Response","defineProperty","redirected","assignOutgoingMessageHeaders","setHeaders","key","setHeader","Stream","fromWeb","error"],"mappings":"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"}
1
+ {"version":3,"file":"minifetch.js","sources":["../src/body.ts","../src/encoding.ts","../src/webstd.ts","../src/fetch.ts"],"sourcesContent":["import { Readable } from 'node:stream';\nimport { isAnyArrayBuffer } from 'node:util/types';\nimport { randomBytes } from 'node:crypto';\nimport { Blob, FormData, URLSearchParams } from './webstd';\n\nexport type BodyInit =\n | Exclude<RequestInit['body'], undefined | null>\n | FormDataPolyfill\n | Readable;\n\nexport interface BodyState {\n contentLength: number | null;\n contentType: string | null;\n body: Readable | ReadableStream | Uint8Array | null;\n}\n\ninterface FormDataPolyfill extends Readable {\n getBoundary(): string;\n getLengthSync(): number;\n hasKnownLength(): number;\n}\n\nconst CRLF = '\\r\\n';\nconst CRLF_LENGTH = 2;\nconst BOUNDARY = '-'.repeat(2);\n\nconst isReadable = (object: any): object is Readable =>\n Readable.isReadable(object);\n\nconst isIterable = (\n object: any\n): object is AsyncIterable<any> | Iterable<any> =>\n typeof object[Symbol.asyncIterator] === 'function' ||\n typeof object[Symbol.iterator] === 'function';\n\nconst isMultipartFormDataStream = (object: any): object is FormDataPolyfill =>\n typeof object.getBoundary === 'function' &&\n typeof object.hasKnownLength === 'function' &&\n typeof object.getLengthSync === 'function' &&\n Readable.isReadable(object);\n\nconst isFormData = (object: any): object is FormData =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.set === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.keys === 'function' &&\n typeof object.values === 'function' &&\n typeof object.entries === 'function' &&\n typeof object.constructor === 'function' &&\n object[Symbol.toStringTag] === 'FormData';\n\nconst isURLSearchParameters = (object: any): object is URLSearchParams =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.has === 'function' &&\n typeof object.set === 'function' &&\n typeof object.sort === 'function' &&\n object[Symbol.toStringTag] === 'URLSearchParams';\n\nconst isReadableStream = (object: any): object is ReadableStream =>\n typeof object === 'object' &&\n typeof object.getReader === 'function' &&\n typeof object.cancel === 'function' &&\n typeof object.tee === 'function';\n\nconst isBlob = (object: any): object is Blob => {\n if (\n typeof object === 'object' &&\n typeof object.arrayBuffer === 'function' &&\n typeof object.type === 'string' &&\n typeof object.stream === 'function' &&\n typeof object.constructor === 'function'\n ) {\n const tag = object[Symbol.toStringTag];\n return tag.startsWith('Blob') || tag.startsWith('File');\n } else {\n return false;\n }\n};\n\nconst makeFormBoundary = (): string =>\n `formdata-${randomBytes(8).toString('hex')}`;\n\nconst getFormHeader = (\n boundary: string,\n name: string,\n field: File | Blob | string\n): string => {\n let header = `${BOUNDARY}${boundary}${CRLF}`;\n header += `Content-Disposition: form-data; name=\"${name}\"`;\n if (isBlob(field)) {\n header += `; filename=\"${(field as File).name ?? 'blob'}\"${CRLF}`;\n header += `Content-Type: ${field.type || 'application/octet-stream'}`;\n }\n return `${header}${CRLF}${CRLF}`;\n};\n\nconst getFormFooter = (boundary: string) =>\n `${BOUNDARY}${boundary}${BOUNDARY}${CRLF}${CRLF}`;\n\nexport const getFormDataLength = (form: FormData, boundary: string) => {\n let length = Buffer.byteLength(getFormFooter(boundary));\n for (const [name, value] of form)\n length +=\n Buffer.byteLength(getFormHeader(boundary, name, value)) +\n (isBlob(value) ? value.size : Buffer.byteLength(`${value}`)) +\n CRLF_LENGTH;\n return length;\n};\n\nasync function* generatorOfFormData(\n form: FormData,\n boundary: string\n): AsyncGenerator<ArrayBufferLike> {\n const encoder = new TextEncoder();\n for (const [name, value] of form) {\n if (isBlob(value)) {\n yield encoder.encode(getFormHeader(boundary, name, value));\n yield* value.stream();\n yield encoder.encode(CRLF);\n } else {\n yield encoder.encode(getFormHeader(boundary, name, value) + value + CRLF);\n }\n }\n yield encoder.encode(getFormFooter(boundary));\n}\n\nconst encoder = new TextEncoder();\n\nexport const extractBody = (object: BodyInit | null): BodyState => {\n let type: string | null = null;\n let body: Readable | ReadableStream | Uint8Array | null;\n let size: number | null = null;\n if (object == null) {\n body = null;\n size = 0;\n } else if (typeof object === 'string') {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n size = bytes.byteLength;\n body = bytes;\n } else if (isURLSearchParameters(object)) {\n const bytes = encoder.encode(object.toString());\n body = bytes;\n size = bytes.byteLength;\n type = 'application/x-www-form-urlencoded;charset=UTF-8';\n } else if (isBlob(object)) {\n size = object.size;\n type = object.type || null;\n body = object.stream();\n } else if (object instanceof Uint8Array) {\n body = object;\n size = object.byteLength;\n } else if (isAnyArrayBuffer(object)) {\n const bytes = new Uint8Array(object);\n body = bytes;\n size = bytes.byteLength;\n } else if (ArrayBuffer.isView(object)) {\n const bytes = new Uint8Array(\n object.buffer,\n object.byteOffset,\n object.byteLength\n );\n body = bytes;\n size = bytes.byteLength;\n } else if (isReadableStream(object)) {\n body = object;\n } else if (isFormData(object)) {\n const boundary = makeFormBoundary();\n type = `multipart/form-data; boundary=${boundary}`;\n size = getFormDataLength(object, boundary);\n body = Readable.from(generatorOfFormData(object, boundary));\n } else if (isMultipartFormDataStream(object)) {\n type = `multipart/form-data; boundary=${object.getBoundary()}`;\n size = object.hasKnownLength() ? object.getLengthSync() : null;\n body = object as Readable;\n } else if (isReadable(object)) {\n body = object as Readable;\n } else if (isIterable(object)) {\n body = Readable.from(object);\n } else {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n body = bytes;\n size = bytes.byteLength;\n }\n return {\n contentLength: size,\n contentType: type,\n body,\n };\n};\n","import { PassThrough, Transform, TransformCallback } from 'node:stream';\nimport * as zlib from 'node:zlib';\n\n/** @see https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 */\ntype Encoding = 'gzip' | 'x-gzip' | 'deflate' | 'x-deflate' | 'br' | {};\n\n/** @see https://github.com/nodejs/undici/pull/2650 */\nclass InflateStream extends Transform {\n _opts?: zlib.ZlibOptions;\n _inflate?: Transform;\n\n constructor(opts?: zlib.ZlibOptions) {\n super();\n this._opts = opts;\n }\n\n _transform(\n chunk: Buffer,\n encoding: BufferEncoding,\n callback: TransformCallback\n ) {\n if (!this._inflate) {\n if (chunk.length === 0) {\n callback();\n return;\n }\n this._inflate =\n (chunk[0] & 0x0f) === 0x08\n ? zlib.createInflate(this._opts)\n : zlib.createInflateRaw(this._opts);\n this._inflate.on('data', this.push.bind(this));\n this._inflate.on('end', () => this.push(null));\n this._inflate.on('error', err => this.destroy(err));\n }\n this._inflate.write(chunk, encoding, callback);\n }\n\n _final(callback: TransformCallback) {\n if (this._inflate) {\n this._inflate.end();\n this._inflate = undefined;\n }\n callback();\n }\n}\n\nexport const createContentDecoder = (encoding: Encoding | {}) => {\n // See: https://github.com/nodejs/undici/blob/008187b/lib/web/fetch/index.js#L2138-L2160\n switch (encoding) {\n case 'br':\n return zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n });\n case 'gzip':\n case 'x-gzip':\n return zlib.createGunzip({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n case 'deflate':\n case 'x-deflate':\n return new InflateStream({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n default:\n return new PassThrough();\n }\n};\n","import * as buffer from 'node:buffer';\n\ntype Or<T, U> = void extends T ? U : T;\n\nexport type HeadersInit =\n | string[][]\n | Record<string, string | ReadonlyArray<string>>\n | _Headers;\n\nexport type FormDataEntryValue = string | _File;\n\nexport type RequestInfo = string | _URL | _Request;\n\ninterface _Iterable<T, TReturn = any, TNext = any>\n extends Or<\n Iterable<T, TReturn, TNext>,\n globalThis.Iterable<T, TReturn, TNext>\n > {}\ninterface _AsyncIterable<T, TReturn = any, TNext = any>\n extends Or<\n AsyncIterable<T, TReturn, TNext>,\n globalThis.AsyncIterable<T, TReturn, TNext>\n > {}\ninterface _ReadableStream<T = any>\n extends Or<ReadableStream<T>, globalThis.ReadableStream<T>> {}\n\n// NOTE: AsyncIterable<Uint8Array> is left out\nexport type BodyInit =\n | ArrayBuffer\n | _Blob\n | NodeJS.ArrayBufferView\n | _URLSearchParams\n | _ReadableStream\n | _AsyncIterable<Uint8Array>\n | _FormData\n | _Iterable<Uint8Array>\n | null\n | string;\n\n// See: https://nodejs.org/docs/latest-v20.x/api/globals.html#class-file\n// The `File` global was only added in Node.js 20\ninterface _File extends _Blob, Or<File, globalThis.File> {\n readonly name: string;\n readonly lastModified: number;\n}\ninterface _File extends Or<globalThis.File, buffer.File> {}\ninterface FileClass extends Or<typeof globalThis.File, typeof buffer.File> {}\nconst _File: FileClass = globalThis.File || buffer.File;\nif (typeof globalThis.File === 'undefined') {\n globalThis.File = _File;\n}\n\n// There be dragons here.\n// This is complex because of overlapping definitions in lib.dom, @types/node, and undici-types\n// Some types define and overload constructor interfaces with type interfaces\n// Here, we have to account for global differences and split the overloads apart\n\ninterface _RequestInit extends Or<RequestInit, globalThis.RequestInit> {\n duplex?: 'half';\n}\ninterface _ResponseInit extends Or<ResponseInit, globalThis.ResponseInit> {}\n\ninterface _Blob extends Or<Blob, globalThis.Blob> {}\ninterface BlobClass extends Or<typeof Blob, typeof globalThis.Blob> {}\nconst _Blob: BlobClass = Blob;\n\ninterface _URLSearchParams\n extends Or<URLSearchParams, globalThis.URLSearchParams> {}\ninterface URLSearchParamsClass\n extends Or<typeof URLSearchParams, typeof globalThis.URLSearchParams> {}\nconst _URLSearchParams: URLSearchParamsClass = URLSearchParams as any;\n\ninterface _URL extends Or<URL, globalThis.URL> {}\ninterface URLClass extends Or<typeof URL, typeof globalThis.URL> {}\nconst _URL: URLClass = URL;\n\ninterface _Request extends Or<Request, globalThis.Request> {}\ninterface RequestClass extends Or<typeof Request, typeof globalThis.Request> {\n new (\n input: RequestInfo,\n init?: _RequestInit | Or<RequestInit, globalThis.RequestInit>\n ): _Request;\n}\nconst _Request: RequestClass = Request;\n\ninterface _Response extends Or<Response, globalThis.Response> {}\ninterface ResponseClass\n extends Or<typeof Response, typeof globalThis.Response> {\n new (body?: BodyInit, init?: _ResponseInit): _Response;\n}\nconst _Response: ResponseClass = Response;\n\ninterface _Headers extends Or<Headers, globalThis.Headers> {}\ninterface HeadersClass extends Or<typeof Headers, typeof globalThis.Headers> {\n new (init?: HeadersInit): _Headers;\n}\nconst _Headers: HeadersClass = Headers;\n\ninterface _FormData\n extends Or<\n FormData & _Iterable<[string, FormDataEntryValue]>,\n globalThis.FormData\n > {}\ninterface FormDataClass\n extends Or<typeof FormData, typeof globalThis.FormData> {}\nconst _FormData: FormDataClass = FormData;\n\nexport {\n type _RequestInit as RequestInit,\n type _ResponseInit as ResponseInit,\n _Blob as Blob,\n _File as File,\n _URL as URL,\n _URLSearchParams as URLSearchParams,\n _Request as Request,\n _Response as Response,\n _Headers as Headers,\n _FormData as FormData,\n};\n","import { Stream, Readable, pipeline } from 'node:stream';\nimport * as https from 'node:https';\nimport * as http from 'node:http';\nimport * as url from 'node:url';\n\nimport { extractBody } from './body';\nimport { createContentDecoder } from './encoding';\nimport { URL, Request, RequestInit, Response } from './webstd';\n\n/** Maximum allowed redirects (matching Chromium's limit) */\nconst MAX_REDIRECTS = 20;\n\n/** Convert Node.js raw headers array to Headers */\nconst headersOfRawHeaders = (rawHeaders: readonly string[]): Headers => {\n const headers = new Headers();\n for (let i = 0; i < rawHeaders.length; i += 2)\n headers.set(rawHeaders[i], rawHeaders[i + 1]);\n return headers;\n};\n\n/** Assign Headers to a Node.js OutgoingMessage (request) */\nconst assignOutgoingMessageHeaders = (\n outgoing: http.OutgoingMessage,\n headers: Headers\n) => {\n if (typeof outgoing.setHeaders === 'function') {\n outgoing.setHeaders(headers);\n } else {\n for (const [key, value] of headers) outgoing.setHeader(key, value);\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst toRedirectOption = (\n redirect: string | undefined\n): 'follow' | 'manual' | 'error' => {\n switch (redirect) {\n case 'follow':\n case 'manual':\n case 'error':\n return redirect;\n case undefined:\n return 'follow';\n default:\n throw new TypeError(\n `Request constructor: ${redirect} is not an accepted type. Expected one of follow, manual, error.`\n );\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst methodToHttpOption = (method: string | undefined): string => {\n switch (method) {\n case 'CONNECT':\n case 'TRACE':\n case 'TRACK':\n throw new TypeError(\n `Failed to construct 'Request': '${method}' HTTP method is unsupported.`\n );\n default:\n return method ? method.toUpperCase() : 'GET';\n }\n};\n\n/** Convert URL to Node.js HTTP request options and disallow unsupported protocols */\nconst urlToHttpOptions = (input: URL) => {\n const _url = new URL(input);\n switch (_url.protocol) {\n // TODO: 'file:' and 'data:' support\n case 'http:':\n case 'https:':\n return url.urlToHttpOptions(_url);\n default:\n throw new TypeError(`URL scheme \"${_url.protocol}\" is not supported.`);\n }\n};\n\n/** Returns if `input` is a Request object */\nconst isRequest = (input: any): input is Request =>\n input != null && typeof input === 'object' && 'body' in input;\n\n/** Returns if status `code` is a redirect code */\nconst isRedirectCode = (\n code: number | undefined\n): code is 301 | 302 | 303 | 307 | 308 =>\n code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n\nfunction createResponse(\n body: ConstructorParameters<typeof Response>[0] | null,\n init: ResponseInit,\n params: {\n url: string;\n redirected: boolean;\n type: 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';\n }\n) {\n const response = new Response(body, init);\n Object.defineProperty(response, 'url', { value: params.url });\n if (params.type !== 'default')\n Object.defineProperty(response, 'type', { value: params.type });\n if (params.redirected)\n Object.defineProperty(response, 'redirected', { value: params.redirected });\n return response;\n}\n\nasync function _fetch(\n input: string | URL | Request,\n requestInit?: RequestInit\n): Promise<Response> {\n const initFromRequest = isRequest(input);\n const initUrl = initFromRequest ? input.url : input;\n const initBody = initFromRequest ? input.body : requestInit?.body || null;\n const signal = initFromRequest\n ? input.signal\n : requestInit?.signal || undefined;\n const redirect = toRedirectOption(\n initFromRequest ? input.redirect : requestInit?.redirect\n );\n\n let requestUrl = new URL(initUrl);\n let requestBody = extractBody(initBody);\n let redirects = 0;\n\n const requestHeaders = new Headers(\n requestInit?.headers || (initFromRequest ? input.headers : undefined)\n );\n const requestOptions = {\n ...urlToHttpOptions(requestUrl),\n method: methodToHttpOption(\n initFromRequest ? input.method : requestInit?.method\n ),\n signal,\n } satisfies http.RequestOptions;\n\n function _call(\n resolve: (response: Response | Promise<Response>) => void,\n reject: (reason?: any) => void\n ) {\n const method = requestOptions.method;\n const protocol = requestOptions.protocol === 'https:' ? https : http;\n const outgoing = protocol.request(requestOptions);\n\n outgoing.on('response', incoming => {\n incoming.setTimeout(0); // Forcefully disable timeout\n\n const init = {\n status: incoming.statusCode,\n statusText: incoming.statusMessage,\n headers: headersOfRawHeaders(incoming.rawHeaders),\n } satisfies ResponseInit;\n\n if (isRedirectCode(init.status)) {\n const location = init.headers.get('Location');\n const locationURL =\n location != null ? new URL(location, requestUrl) : null;\n if (redirect === 'error') {\n // TODO: do we need a special Error instance here?\n reject(\n new Error(\n 'URI requested responds with a redirect, redirect mode is set to error'\n )\n );\n return;\n } else if (redirect === 'manual' && locationURL !== null) {\n init.headers.set('Location', locationURL.toString());\n } else if (redirect === 'follow' && locationURL !== null) {\n if (++redirects > MAX_REDIRECTS) {\n reject(new Error(`maximum redirect reached at: ${requestUrl}`));\n return;\n } else if (\n locationURL.protocol !== 'http:' &&\n locationURL.protocol !== 'https:'\n ) {\n // TODO: do we need a special Error instance here?\n reject(new Error('URL scheme must be a HTTP(S) scheme'));\n return;\n }\n\n if (\n init.status === 303 ||\n ((init.status === 301 || init.status === 302) && method === 'POST')\n ) {\n requestBody = extractBody(null);\n requestOptions.method = 'GET';\n requestHeaders.delete('Content-Length');\n } else if (\n requestBody.body != null &&\n requestBody.contentLength == null\n ) {\n reject(new Error('Cannot follow redirect with a streamed body'));\n return;\n } else {\n requestBody = extractBody(initBody);\n }\n\n Object.assign(\n requestOptions,\n urlToHttpOptions((requestUrl = locationURL))\n );\n return _call(resolve, reject);\n }\n }\n\n const destroy = (reason?: any) => {\n signal?.removeEventListener('abort', destroy);\n if (reason) {\n incoming.destroy(signal?.aborted ? signal.reason : reason);\n reject(signal?.aborted ? signal.reason : reason);\n }\n };\n\n signal?.addEventListener('abort', destroy);\n\n let body: Readable | null = incoming;\n const encoding = init.headers.get('Content-Encoding')?.toLowerCase();\n if (method === 'HEAD' || init.status === 204 || init.status === 304) {\n body = null;\n } else if (encoding != null) {\n init.headers.set('Content-Encoding', encoding);\n body = pipeline(body, createContentDecoder(encoding), destroy);\n }\n\n resolve(\n createResponse(body, init, {\n type: 'default',\n url: requestUrl.toString(),\n redirected: redirects > 0,\n })\n );\n });\n\n outgoing.on('error', reject);\n\n if (!requestHeaders.has('Accept')) requestHeaders.set('Accept', '*/*');\n if (requestBody.contentType)\n requestHeaders.set('Content-Type', requestBody.contentType);\n\n if (requestBody.body == null && (method === 'POST' || method === 'PUT')) {\n requestHeaders.set('Content-Length', '0');\n } else if (requestBody.body != null && requestBody.contentLength != null) {\n requestHeaders.set('Content-Length', `${requestBody.contentLength}`);\n }\n\n assignOutgoingMessageHeaders(outgoing, requestHeaders);\n\n if (requestBody.body == null) {\n outgoing.end();\n } else if (requestBody.body instanceof Uint8Array) {\n outgoing.write(requestBody.body);\n outgoing.end();\n } else {\n const body =\n requestBody.body instanceof Stream\n ? requestBody.body\n : Readable.fromWeb(requestBody.body);\n pipeline(body, outgoing, error => {\n if (error) reject(error);\n });\n }\n }\n\n return await new Promise(_call);\n}\n\nexport { _fetch as fetch };\n"],"names":["CRLF","BOUNDARY","repeat","isBlob","object","arrayBuffer","type","stream","constructor","tag","Symbol","toStringTag","startsWith","getFormHeader","boundary","name","field","header","getFormFooter","encoder","TextEncoder","extractBody","body","size","bytes","encode","byteLength","append","delete","get","getAll","has","set","sort","isURLSearchParameters","toString","Uint8Array","isAnyArrayBuffer","ArrayBuffer","isView","buffer","byteOffset","getReader","cancel","tee","isReadableStream","keys","values","entries","isFormData","randomBytes","getFormDataLength","form","length","Buffer","value","Readable","from","async","generatorOfFormData","getBoundary","hasKnownLength","getLengthSync","isReadable","isMultipartFormDataStream","asyncIterator","iterator","isIterable","contentLength","contentType","InflateStream","Transform","opts","super","this","_opts","_transform","chunk","encoding","callback","_inflate","zlib","createInflate","createInflateRaw","on","push","bind","err","destroy","write","_final","end","undefined","_File","globalThis","File","_Blob","Blob","_URLSearchParams","URLSearchParams","_URL","URL","_Request","Request","_Response","Response","_Headers","Headers","_FormData","FormData","headersOfRawHeaders","rawHeaders","headers","i","methodToHttpOption","method","TypeError","toUpperCase","urlToHttpOptions","input","_url","protocol","url","_fetch","requestInit","initFromRequest","isRequest","initUrl","initBody","signal","redirect","toRedirectOption","requestUrl","requestBody","redirects","requestHeaders","requestOptions","Promise","_call","resolve","reject","outgoing","https","http","request","incoming","setTimeout","init","status","statusCode","statusText","statusMessage","code","location","locationURL","Error","Object","assign","reason","removeEventListener","aborted","addEventListener","toLowerCase","pipeline","createBrotliDecompress","flush","constants","BROTLI_OPERATION_FLUSH","finishFlush","createGunzip","Z_SYNC_FLUSH","PassThrough","createContentDecoder","createResponse","params","response","defineProperty","redirected","assignOutgoingMessageHeaders","setHeaders","key","setHeader","Stream","fromWeb","error"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Readable as e, PassThrough as t, Transform as n, pipeline as r, Stream as o } from "node:stream";
1
+ import { Readable as e, PassThrough as t, Transform as r, pipeline as n, Stream as o } from "node:stream";
2
2
 
3
3
  import * as a from "node:https";
4
4
 
@@ -12,9 +12,11 @@ import { randomBytes as l } from "node:crypto";
12
12
 
13
13
  import * as c from "node:zlib";
14
14
 
15
- var u = "\r\n";
15
+ import * as u from "node:buffer";
16
16
 
17
- var d = "-".repeat(2);
17
+ var d = "\r\n";
18
+
19
+ var p = "-".repeat(2);
18
20
 
19
21
  var isBlob = e => {
20
22
  if ("object" == typeof e && "function" == typeof e.arrayBuffer && "string" == typeof e.type && "function" == typeof e.stream && "function" == typeof e.constructor) {
@@ -25,107 +27,107 @@ var isBlob = e => {
25
27
  }
26
28
  };
27
29
 
28
- var getFormHeader = (e, t, n) => {
29
- var r = `${d}${e}${u}`;
30
- r += `Content-Disposition: form-data; name="${t}"`;
31
- if (isBlob(n)) {
32
- r += `; filename="${n.name ?? "blob"}"${u}`;
33
- r += `Content-Type: ${n.type || "application/octet-stream"}`;
30
+ var getFormHeader = (e, t, r) => {
31
+ var n = `${p}${e}${d}`;
32
+ n += `Content-Disposition: form-data; name="${t}"`;
33
+ if (isBlob(r)) {
34
+ n += `; filename="${r.name ?? "blob"}"${d}`;
35
+ n += `Content-Type: ${r.type || "application/octet-stream"}`;
34
36
  }
35
- return `${r}${u}${u}`;
37
+ return `${n}${d}${d}`;
36
38
  };
37
39
 
38
- var getFormFooter = e => `${d}${e}${d}${u}${u}`;
40
+ var getFormFooter = e => `${p}${e}${p}${d}${d}`;
39
41
 
40
- var p = new TextEncoder;
42
+ var y = new TextEncoder;
41
43
 
42
44
  var extractBody = t => {
43
- var n = null;
44
- var r;
45
+ var r = null;
46
+ var n;
45
47
  var o = null;
46
48
  if (null == t) {
47
- r = null;
49
+ n = null;
48
50
  o = 0;
49
51
  } else if ("string" == typeof t) {
50
- var a = p.encode(`${t}`);
51
- n = "text/plain;charset=UTF-8";
52
+ var a = y.encode(`${t}`);
53
+ r = "text/plain;charset=UTF-8";
52
54
  o = a.byteLength;
53
- r = a;
55
+ n = a;
54
56
  } else if ((e => "object" == typeof e && "function" == typeof e.append && "function" == typeof e.delete && "function" == typeof e.get && "function" == typeof e.getAll && "function" == typeof e.has && "function" == typeof e.set && "function" == typeof e.sort && "URLSearchParams" === e[Symbol.toStringTag])(t)) {
55
- var s = p.encode(t.toString());
56
- r = s;
57
+ var s = y.encode(t.toString());
58
+ n = s;
57
59
  o = s.byteLength;
58
- n = "application/x-www-form-urlencoded;charset=UTF-8";
60
+ r = "application/x-www-form-urlencoded;charset=UTF-8";
59
61
  } else if (isBlob(t)) {
60
62
  o = t.size;
61
- n = t.type || null;
62
- r = t.stream();
63
+ r = t.type || null;
64
+ n = t.stream();
63
65
  } else if (t instanceof Uint8Array) {
64
- r = t;
66
+ n = t;
65
67
  o = t.byteLength;
66
68
  } else if (f(t)) {
67
69
  var i = new Uint8Array(t);
68
- r = i;
70
+ n = i;
69
71
  o = i.byteLength;
70
72
  } else if (ArrayBuffer.isView(t)) {
71
73
  var c = new Uint8Array(t.buffer, t.byteOffset, t.byteLength);
72
- r = c;
74
+ n = c;
73
75
  o = c.byteLength;
74
76
  } else if ((e => "object" == typeof e && "function" == typeof e.getReader && "function" == typeof e.cancel && "function" == typeof e.tee)(t)) {
75
- r = t;
77
+ n = t;
76
78
  } else if ((e => "object" == typeof e && "function" == typeof e.append && "function" == typeof e.set && "function" == typeof e.get && "function" == typeof e.getAll && "function" == typeof e.delete && "function" == typeof e.keys && "function" == typeof e.values && "function" == typeof e.entries && "function" == typeof e.constructor && "FormData" === e[Symbol.toStringTag])(t)) {
77
- var d = `formdata-${l(8).toString("hex")}`;
78
- n = `multipart/form-data; boundary=${d}`;
79
+ var u = `formdata-${l(8).toString("hex")}`;
80
+ r = `multipart/form-data; boundary=${u}`;
79
81
  o = ((e, t) => {
80
- var n = Buffer.byteLength(getFormFooter(t));
81
- for (var [r, o] of e) {
82
- n += Buffer.byteLength(getFormHeader(t, r, o)) + (isBlob(o) ? o.size : Buffer.byteLength(`${o}`)) + 2;
82
+ var r = Buffer.byteLength(getFormFooter(t));
83
+ for (var [n, o] of e) {
84
+ r += Buffer.byteLength(getFormHeader(t, n, o)) + (isBlob(o) ? o.size : Buffer.byteLength(`${o}`)) + 2;
83
85
  }
84
- return n;
85
- })(t, d);
86
- r = e.from(async function* generatorOfFormData(e, t) {
87
- var n = new TextEncoder;
88
- for (var [r, o] of e) {
86
+ return r;
87
+ })(t, u);
88
+ n = e.from(async function* generatorOfFormData(e, t) {
89
+ var r = new TextEncoder;
90
+ for (var [n, o] of e) {
89
91
  if (isBlob(o)) {
90
- yield n.encode(getFormHeader(t, r, o));
92
+ yield r.encode(getFormHeader(t, n, o));
91
93
  yield* o.stream();
92
- yield n.encode(u);
94
+ yield r.encode(d);
93
95
  } else {
94
- yield n.encode(getFormHeader(t, r, o) + o + u);
96
+ yield r.encode(getFormHeader(t, n, o) + o + d);
95
97
  }
96
98
  }
97
- yield n.encode(getFormFooter(t));
98
- }(t, d));
99
+ yield r.encode(getFormFooter(t));
100
+ }(t, u));
99
101
  } else if ((t => "function" == typeof t.getBoundary && "function" == typeof t.hasKnownLength && "function" == typeof t.getLengthSync && e.isReadable(t))(t)) {
100
- n = `multipart/form-data; boundary=${t.getBoundary()}`;
102
+ r = `multipart/form-data; boundary=${t.getBoundary()}`;
101
103
  o = t.hasKnownLength() ? t.getLengthSync() : null;
102
- r = t;
104
+ n = t;
103
105
  } else if ((t => e.isReadable(t))(t)) {
104
- r = t;
106
+ n = t;
105
107
  } else if ((e => "function" == typeof e[Symbol.asyncIterator] || "function" == typeof e[Symbol.iterator])(t)) {
106
- r = e.from(t);
108
+ n = e.from(t);
107
109
  } else {
108
- var y = p.encode(`${t}`);
109
- n = "text/plain;charset=UTF-8";
110
- r = y;
111
- o = y.byteLength;
110
+ var p = y.encode(`${t}`);
111
+ r = "text/plain;charset=UTF-8";
112
+ n = p;
113
+ o = p.byteLength;
112
114
  }
113
115
  return {
114
116
  contentLength: o,
115
- contentType: n,
116
- body: r
117
+ contentType: r,
118
+ body: n
117
119
  };
118
120
  };
119
121
 
120
- class InflateStream extends n {
122
+ class InflateStream extends r {
121
123
  constructor(e) {
122
124
  super();
123
125
  this._opts = e;
124
126
  }
125
- _transform(e, t, n) {
127
+ _transform(e, t, r) {
126
128
  if (!this._inflate) {
127
129
  if (0 === e.length) {
128
- n();
130
+ r();
129
131
  return;
130
132
  }
131
133
  this._inflate = 8 == (15 & e[0]) ? c.createInflate(this._opts) : c.createInflateRaw(this._opts);
@@ -133,7 +135,7 @@ class InflateStream extends n {
133
135
  this._inflate.on("end", (() => this.push(null)));
134
136
  this._inflate.on("error", (e => this.destroy(e)));
135
137
  }
136
- this._inflate.write(e, t, n);
138
+ this._inflate.write(e, t, r);
137
139
  }
138
140
  _final(e) {
139
141
  if (this._inflate) {
@@ -144,10 +146,30 @@ class InflateStream extends n {
144
146
  }
145
147
  }
146
148
 
149
+ var h = globalThis.File || u.File;
150
+
151
+ if (void 0 === globalThis.File) {
152
+ globalThis.File = h;
153
+ }
154
+
155
+ var m = Blob;
156
+
157
+ var v = URLSearchParams;
158
+
159
+ var b = URL;
160
+
161
+ var g = Request;
162
+
163
+ var w = Response;
164
+
165
+ var L = Headers;
166
+
167
+ var T = FormData;
168
+
147
169
  var headersOfRawHeaders = e => {
148
170
  var t = new Headers;
149
- for (var n = 0; n < e.length; n += 2) {
150
- t.set(e[n], e[n + 1]);
171
+ for (var r = 0; r < e.length; r += 2) {
172
+ t.set(e[r], e[r + 1]);
151
173
  }
152
174
  return t;
153
175
  };
@@ -165,7 +187,7 @@ var methodToHttpOption = e => {
165
187
  };
166
188
 
167
189
  var urlToHttpOptions = e => {
168
- var t = new URL(e);
190
+ var t = new b(e);
169
191
  switch (t.protocol) {
170
192
  case "http:":
171
193
  case "https:":
@@ -176,11 +198,11 @@ var urlToHttpOptions = e => {
176
198
  }
177
199
  };
178
200
 
179
- async function fetch(n, i) {
180
- var f = (e => null != e && "object" == typeof e && "body" in e)(n);
181
- var l = f ? n.url : n;
182
- var u = f ? n.body : i?.body || null;
183
- var d = f ? n.signal : i?.signal || void 0;
201
+ async function _fetch(r, i) {
202
+ var f = (e => null != e && "object" == typeof e && "body" in e)(r);
203
+ var l = f ? r.url : r;
204
+ var u = f ? r.body : i?.body || null;
205
+ var d = f ? r.signal : i?.signal || void 0;
184
206
  var p = (e => {
185
207
  switch (e) {
186
208
  case "follow":
@@ -194,19 +216,19 @@ async function fetch(n, i) {
194
216
  default:
195
217
  throw new TypeError(`Request constructor: ${e} is not an accepted type. Expected one of follow, manual, error.`);
196
218
  }
197
- })(f ? n.redirect : i?.redirect);
198
- var y = new URL(l);
219
+ })(f ? r.redirect : i?.redirect);
220
+ var y = new b(l);
199
221
  var h = extractBody(u);
200
222
  var m = 0;
201
- var v = new Headers(i?.headers || (f ? n.headers : void 0));
202
- var b = {
223
+ var v = new Headers(i?.headers || (f ? r.headers : void 0));
224
+ var g = {
203
225
  ...urlToHttpOptions(y),
204
- method: methodToHttpOption(f ? n.method : i?.method),
226
+ method: methodToHttpOption(f ? r.method : i?.method),
205
227
  signal: d
206
228
  };
207
- return await new Promise((function _fetch(n, i) {
208
- var f = b.method;
209
- var l = ("https:" === b.protocol ? a : s).request(b);
229
+ return await new Promise((function _call(r, i) {
230
+ var f = g.method;
231
+ var l = ("https:" === g.protocol ? a : s).request(g);
210
232
  l.on("response", (e => {
211
233
  e.setTimeout(0);
212
234
  var o = {
@@ -216,7 +238,7 @@ async function fetch(n, i) {
216
238
  };
217
239
  if (301 === (l = o.status) || 302 === l || 303 === l || 307 === l || 308 === l) {
218
240
  var a = o.headers.get("Location");
219
- var s = null != a ? new URL(a, y) : null;
241
+ var s = null != a ? new b(a, y) : null;
220
242
  if ("error" === p) {
221
243
  i(new Error("URI requested responds with a redirect, redirect mode is set to error"));
222
244
  return;
@@ -232,7 +254,7 @@ async function fetch(n, i) {
232
254
  }
233
255
  if (303 === o.status || (301 === o.status || 302 === o.status) && "POST" === f) {
234
256
  h = extractBody(null);
235
- b.method = "GET";
257
+ g.method = "GET";
236
258
  v.delete("Content-Length");
237
259
  } else if (null != h.body && null == h.contentLength) {
238
260
  i(new Error("Cannot follow redirect with a streamed body"));
@@ -240,8 +262,8 @@ async function fetch(n, i) {
240
262
  } else {
241
263
  h = extractBody(u);
242
264
  }
243
- Object.assign(b, urlToHttpOptions(y = s));
244
- return _fetch(n, i);
265
+ Object.assign(g, urlToHttpOptions(y = s));
266
+ return _call(r, i);
245
267
  }
246
268
  }
247
269
  var l;
@@ -253,13 +275,13 @@ async function fetch(n, i) {
253
275
  }
254
276
  };
255
277
  d?.addEventListener("abort", destroy);
256
- var g = e;
257
- var w = o.headers.get("Content-Encoding")?.toLowerCase();
278
+ var L = e;
279
+ var T = o.headers.get("Content-Encoding")?.toLowerCase();
258
280
  if ("HEAD" === f || 204 === o.status || 304 === o.status) {
259
- g = null;
260
- } else if (null != w) {
261
- o.headers.set("Content-Encoding", w);
262
- g = r(g, (e => {
281
+ L = null;
282
+ } else if (null != T) {
283
+ o.headers.set("Content-Encoding", T);
284
+ L = n(L, (e => {
263
285
  switch (e) {
264
286
  case "br":
265
287
  return c.createBrotliDecompress({
@@ -284,25 +306,25 @@ async function fetch(n, i) {
284
306
  default:
285
307
  return new t;
286
308
  }
287
- })(w), destroy);
309
+ })(T), destroy);
288
310
  }
289
- n(function createResponse(e, t, n) {
290
- var r = new Response(e, t);
291
- Object.defineProperty(r, "url", {
292
- value: n.url
311
+ r(function createResponse(e, t, r) {
312
+ var n = new w(e, t);
313
+ Object.defineProperty(n, "url", {
314
+ value: r.url
293
315
  });
294
- if ("default" !== n.type) {
295
- Object.defineProperty(r, "type", {
296
- value: n.type
316
+ if ("default" !== r.type) {
317
+ Object.defineProperty(n, "type", {
318
+ value: r.type
297
319
  });
298
320
  }
299
- if (n.redirected) {
300
- Object.defineProperty(r, "redirected", {
301
- value: n.redirected
321
+ if (r.redirected) {
322
+ Object.defineProperty(n, "redirected", {
323
+ value: r.redirected
302
324
  });
303
325
  }
304
- return r;
305
- }(g, o, {
326
+ return n;
327
+ }(L, o, {
306
328
  type: "default",
307
329
  url: y.toString(),
308
330
  redirected: m > 0
@@ -324,8 +346,8 @@ async function fetch(n, i) {
324
346
  if ("function" == typeof e.setHeaders) {
325
347
  e.setHeaders(t);
326
348
  } else {
327
- for (var [n, r] of t) {
328
- e.setHeader(n, r);
349
+ for (var [r, n] of t) {
350
+ e.setHeader(r, n);
329
351
  }
330
352
  }
331
353
  })(l, v);
@@ -335,8 +357,8 @@ async function fetch(n, i) {
335
357
  l.write(h.body);
336
358
  l.end();
337
359
  } else {
338
- var g = h.body instanceof o ? h.body : e.fromWeb(h.body);
339
- r(g, l, (e => {
360
+ var L = h.body instanceof o ? h.body : e.fromWeb(h.body);
361
+ n(L, l, (e => {
340
362
  if (e) {
341
363
  i(e);
342
364
  }
@@ -345,5 +367,5 @@ async function fetch(n, i) {
345
367
  }));
346
368
  }
347
369
 
348
- export { fetch as default, fetch };
370
+ export { m as Blob, h as File, T as FormData, L as Headers, g as Request, w as Response, b as URL, v as URLSearchParams, _fetch as default, _fetch as fetch };
349
371
  //# sourceMappingURL=minifetch.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"minifetch.mjs","sources":["../src/body.ts","../src/encoding.ts","../src/fetch.ts"],"sourcesContent":["import { Readable } from 'node:stream';\nimport { isAnyArrayBuffer } from 'node:util/types';\nimport { randomBytes } from 'node:crypto';\n\nexport type BodyInit =\n | Exclude<RequestInit['body'], undefined | null>\n | FormDataPolyfill\n | Readable;\n\nexport interface BodyState {\n contentLength: number | null;\n contentType: string | null;\n body: Readable | ReadableStream | Uint8Array | null;\n}\n\ninterface FormDataPolyfill extends Readable {\n getBoundary(): string;\n getLengthSync(): number;\n hasKnownLength(): number;\n}\n\nconst CRLF = '\\r\\n';\nconst CRLF_LENGTH = 2;\nconst BOUNDARY = '-'.repeat(2);\n\nconst isReadable = (object: any): object is Readable =>\n Readable.isReadable(object);\n\nconst isIterable = (\n object: any\n): object is AsyncIterable<any> | Iterable<any> =>\n typeof object[Symbol.asyncIterator] === 'function' ||\n typeof object[Symbol.iterator] === 'function';\n\nconst isMultipartFormDataStream = (object: any): object is FormDataPolyfill =>\n typeof object.getBoundary === 'function' &&\n typeof object.hasKnownLength === 'function' &&\n typeof object.getLengthSync === 'function' &&\n Readable.isReadable(object);\n\nconst isFormData = (object: any): object is FormData =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.set === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.keys === 'function' &&\n typeof object.values === 'function' &&\n typeof object.entries === 'function' &&\n typeof object.constructor === 'function' &&\n object[Symbol.toStringTag] === 'FormData';\n\nconst isURLSearchParameters = (object: any): object is URLSearchParams =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.has === 'function' &&\n typeof object.set === 'function' &&\n typeof object.sort === 'function' &&\n object[Symbol.toStringTag] === 'URLSearchParams';\n\nconst isReadableStream = (object: any): object is ReadableStream =>\n typeof object === 'object' &&\n typeof object.getReader === 'function' &&\n typeof object.cancel === 'function' &&\n typeof object.tee === 'function';\n\nconst isBlob = (object: any): object is Blob => {\n if (\n typeof object === 'object' &&\n typeof object.arrayBuffer === 'function' &&\n typeof object.type === 'string' &&\n typeof object.stream === 'function' &&\n typeof object.constructor === 'function'\n ) {\n const tag = object[Symbol.toStringTag];\n return tag.startsWith('Blob') || tag.startsWith('File');\n } else {\n return false;\n }\n};\n\nconst makeFormBoundary = (): string =>\n `formdata-${randomBytes(8).toString('hex')}`;\n\nconst getFormHeader = (\n boundary: string,\n name: string,\n field: File | Blob | string\n): string => {\n let header = `${BOUNDARY}${boundary}${CRLF}`;\n header += `Content-Disposition: form-data; name=\"${name}\"`;\n if (isBlob(field)) {\n header += `; filename=\"${(field as File).name ?? 'blob'}\"${CRLF}`;\n header += `Content-Type: ${field.type || 'application/octet-stream'}`;\n }\n return `${header}${CRLF}${CRLF}`;\n};\n\nconst getFormFooter = (boundary: string) =>\n `${BOUNDARY}${boundary}${BOUNDARY}${CRLF}${CRLF}`;\n\nexport const getFormDataLength = (form: FormData, boundary: string) => {\n let length = Buffer.byteLength(getFormFooter(boundary));\n for (const [name, value] of form)\n length +=\n Buffer.byteLength(getFormHeader(boundary, name, value)) +\n (isBlob(value) ? value.size : Buffer.byteLength(`${value}`)) +\n CRLF_LENGTH;\n return length;\n};\n\nasync function* generatorOfFormData(\n form: FormData,\n boundary: string\n): AsyncGenerator<ArrayBufferLike> {\n const encoder = new TextEncoder();\n for (const [name, value] of form) {\n if (isBlob(value)) {\n yield encoder.encode(getFormHeader(boundary, name, value));\n yield* value.stream();\n yield encoder.encode(CRLF);\n } else {\n yield encoder.encode(getFormHeader(boundary, name, value) + value + CRLF);\n }\n }\n yield encoder.encode(getFormFooter(boundary));\n}\n\nconst encoder = new TextEncoder();\n\nexport const extractBody = (object: BodyInit | null): BodyState => {\n let type: string | null = null;\n let body: Readable | ReadableStream | Uint8Array | null;\n let size: number | null = null;\n if (object == null) {\n body = null;\n size = 0;\n } else if (typeof object === 'string') {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n size = bytes.byteLength;\n body = bytes;\n } else if (isURLSearchParameters(object)) {\n const bytes = encoder.encode(object.toString());\n body = bytes;\n size = bytes.byteLength;\n type = 'application/x-www-form-urlencoded;charset=UTF-8';\n } else if (isBlob(object)) {\n size = object.size;\n type = object.type || null;\n body = object.stream();\n } else if (object instanceof Uint8Array) {\n body = object;\n size = object.byteLength;\n } else if (isAnyArrayBuffer(object)) {\n const bytes = new Uint8Array(object);\n body = bytes;\n size = bytes.byteLength;\n } else if (ArrayBuffer.isView(object)) {\n const bytes = new Uint8Array(\n object.buffer,\n object.byteOffset,\n object.byteLength\n );\n body = bytes;\n size = bytes.byteLength;\n } else if (isReadableStream(object)) {\n body = object;\n } else if (isFormData(object)) {\n const boundary = makeFormBoundary();\n type = `multipart/form-data; boundary=${boundary}`;\n size = getFormDataLength(object, boundary);\n body = Readable.from(generatorOfFormData(object, boundary));\n } else if (isMultipartFormDataStream(object)) {\n type = `multipart/form-data; boundary=${object.getBoundary()}`;\n size = object.hasKnownLength() ? object.getLengthSync() : null;\n body = object as Readable;\n } else if (isReadable(object)) {\n body = object as Readable;\n } else if (isIterable(object)) {\n body = Readable.from(object);\n } else {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n body = bytes;\n size = bytes.byteLength;\n }\n return {\n contentLength: size,\n contentType: type,\n body,\n };\n};\n","import { PassThrough, Transform, TransformCallback } from 'node:stream';\nimport * as zlib from 'node:zlib';\n\n/** @see https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 */\ntype Encoding = 'gzip' | 'x-gzip' | 'deflate' | 'x-deflate' | 'br' | {};\n\n/** @see https://github.com/nodejs/undici/pull/2650 */\nclass InflateStream extends Transform {\n _opts?: zlib.ZlibOptions;\n _inflate?: Transform;\n\n constructor(opts?: zlib.ZlibOptions) {\n super();\n this._opts = opts;\n }\n\n _transform(\n chunk: Buffer,\n encoding: BufferEncoding,\n callback: TransformCallback\n ) {\n if (!this._inflate) {\n if (chunk.length === 0) {\n callback();\n return;\n }\n this._inflate =\n (chunk[0] & 0x0f) === 0x08\n ? zlib.createInflate(this._opts)\n : zlib.createInflateRaw(this._opts);\n this._inflate.on('data', this.push.bind(this));\n this._inflate.on('end', () => this.push(null));\n this._inflate.on('error', err => this.destroy(err));\n }\n this._inflate.write(chunk, encoding, callback);\n }\n\n _final(callback: TransformCallback) {\n if (this._inflate) {\n this._inflate.end();\n this._inflate = undefined;\n }\n callback();\n }\n}\n\nexport const createContentDecoder = (encoding: Encoding | {}) => {\n // See: https://github.com/nodejs/undici/blob/008187b/lib/web/fetch/index.js#L2138-L2160\n switch (encoding) {\n case 'br':\n return zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n });\n case 'gzip':\n case 'x-gzip':\n return zlib.createGunzip({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n case 'deflate':\n case 'x-deflate':\n return new InflateStream({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n default:\n return new PassThrough();\n }\n};\n","import { Stream, Readable, pipeline } from 'node:stream';\nimport * as https from 'node:https';\nimport * as http from 'node:http';\nimport * as url from 'node:url';\n\nimport { extractBody } from './body';\nimport { createContentDecoder } from './encoding';\n\n/** Maximum allowed redirects (matching Chromium's limit) */\nconst MAX_REDIRECTS = 20;\n\n/** Convert Node.js raw headers array to Headers */\nconst headersOfRawHeaders = (rawHeaders: readonly string[]): Headers => {\n const headers = new Headers();\n for (let i = 0; i < rawHeaders.length; i += 2)\n headers.set(rawHeaders[i], rawHeaders[i + 1]);\n return headers;\n};\n\n/** Assign Headers to a Node.js OutgoingMessage (request) */\nconst assignOutgoingMessageHeaders = (\n outgoing: http.OutgoingMessage,\n headers: Headers\n) => {\n if (typeof outgoing.setHeaders === 'function') {\n outgoing.setHeaders(headers);\n } else {\n for (const [key, value] of headers) outgoing.setHeader(key, value);\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst toRedirectOption = (\n redirect: string | undefined\n): 'follow' | 'manual' | 'error' => {\n switch (redirect) {\n case 'follow':\n case 'manual':\n case 'error':\n return redirect;\n case undefined:\n return 'follow';\n default:\n throw new TypeError(\n `Request constructor: ${redirect} is not an accepted type. Expected one of follow, manual, error.`\n );\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst methodToHttpOption = (method: string | undefined): string => {\n switch (method) {\n case 'CONNECT':\n case 'TRACE':\n case 'TRACK':\n throw new TypeError(\n `Failed to construct 'Request': '${method}' HTTP method is unsupported.`\n );\n default:\n return method ? method.toUpperCase() : 'GET';\n }\n};\n\n/** Convert URL to Node.js HTTP request options and disallow unsupported protocols */\nconst urlToHttpOptions = (input: URL) => {\n const _url = new URL(input);\n switch (_url.protocol) {\n // TODO: 'file:' and 'data:' support\n case 'http:':\n case 'https:':\n return url.urlToHttpOptions(_url);\n default:\n throw new TypeError(`URL scheme \"${_url.protocol}\" is not supported.`);\n }\n};\n\n/** Returns if `input` is a Request object */\nconst isRequest = (input: any): input is Request =>\n input != null && typeof input === 'object' && 'body' in input;\n\n/** Returns if status `code` is a redirect code */\nconst isRedirectCode = (\n code: number | undefined\n): code is 301 | 302 | 303 | 307 | 308 =>\n code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n\nfunction createResponse(\n body: ConstructorParameters<typeof Response>[0] | null,\n init: ResponseInit,\n params: {\n url: string;\n redirected: boolean;\n type: 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';\n }\n) {\n const response = new Response(body, init);\n Object.defineProperty(response, 'url', { value: params.url });\n if (params.type !== 'default')\n Object.defineProperty(response, 'type', { value: params.type });\n if (params.redirected)\n Object.defineProperty(response, 'redirected', { value: params.redirected });\n return response;\n}\n\nexport async function fetch(\n input: string | URL | Request,\n requestInit?: RequestInit\n): Promise<Response> {\n const initFromRequest = isRequest(input);\n const initUrl = initFromRequest ? input.url : input;\n const initBody = initFromRequest ? input.body : requestInit?.body || null;\n const signal = initFromRequest\n ? input.signal\n : requestInit?.signal || undefined;\n const redirect = toRedirectOption(\n initFromRequest ? input.redirect : requestInit?.redirect\n );\n\n let requestUrl = new URL(initUrl);\n let requestBody = extractBody(initBody);\n let redirects = 0;\n\n const requestHeaders = new Headers(\n requestInit?.headers || (initFromRequest ? input.headers : undefined)\n );\n const requestOptions = {\n ...urlToHttpOptions(requestUrl),\n method: methodToHttpOption(\n initFromRequest ? input.method : requestInit?.method\n ),\n signal,\n } satisfies http.RequestOptions;\n\n function _fetch(\n resolve: (response: Response | Promise<Response>) => void,\n reject: (reason?: any) => void\n ) {\n const method = requestOptions.method;\n const protocol = requestOptions.protocol === 'https:' ? https : http;\n const outgoing = protocol.request(requestOptions);\n\n outgoing.on('response', incoming => {\n incoming.setTimeout(0); // Forcefully disable timeout\n\n const init = {\n status: incoming.statusCode,\n statusText: incoming.statusMessage,\n headers: headersOfRawHeaders(incoming.rawHeaders),\n } satisfies ResponseInit;\n\n if (isRedirectCode(init.status)) {\n const location = init.headers.get('Location');\n const locationURL =\n location != null ? new URL(location, requestUrl) : null;\n if (redirect === 'error') {\n // TODO: do we need a special Error instance here?\n reject(\n new Error(\n 'URI requested responds with a redirect, redirect mode is set to error'\n )\n );\n return;\n } else if (redirect === 'manual' && locationURL !== null) {\n init.headers.set('Location', locationURL.toString());\n } else if (redirect === 'follow' && locationURL !== null) {\n if (++redirects > MAX_REDIRECTS) {\n reject(new Error(`maximum redirect reached at: ${requestUrl}`));\n return;\n } else if (\n locationURL.protocol !== 'http:' &&\n locationURL.protocol !== 'https:'\n ) {\n // TODO: do we need a special Error instance here?\n reject(new Error('URL scheme must be a HTTP(S) scheme'));\n return;\n }\n\n if (\n init.status === 303 ||\n ((init.status === 301 || init.status === 302) && method === 'POST')\n ) {\n requestBody = extractBody(null);\n requestOptions.method = 'GET';\n requestHeaders.delete('Content-Length');\n } else if (\n requestBody.body != null &&\n requestBody.contentLength == null\n ) {\n reject(new Error('Cannot follow redirect with a streamed body'));\n return;\n } else {\n requestBody = extractBody(initBody);\n }\n\n Object.assign(\n requestOptions,\n urlToHttpOptions((requestUrl = locationURL))\n );\n return _fetch(resolve, reject);\n }\n }\n\n const destroy = (reason?: any) => {\n signal?.removeEventListener('abort', destroy);\n if (reason) {\n incoming.destroy(signal?.aborted ? signal.reason : reason);\n reject(signal?.aborted ? signal.reason : reason);\n }\n };\n\n signal?.addEventListener('abort', destroy);\n\n let body: Readable | null = incoming;\n const encoding = init.headers.get('Content-Encoding')?.toLowerCase();\n if (method === 'HEAD' || init.status === 204 || init.status === 304) {\n body = null;\n } else if (encoding != null) {\n init.headers.set('Content-Encoding', encoding);\n body = pipeline(body, createContentDecoder(encoding), destroy);\n }\n\n resolve(\n createResponse(body, init, {\n type: 'default',\n url: requestUrl.toString(),\n redirected: redirects > 0,\n })\n );\n });\n\n outgoing.on('error', reject);\n\n if (!requestHeaders.has('Accept')) requestHeaders.set('Accept', '*/*');\n if (requestBody.contentType)\n requestHeaders.set('Content-Type', requestBody.contentType);\n\n if (requestBody.body == null && (method === 'POST' || method === 'PUT')) {\n requestHeaders.set('Content-Length', '0');\n } else if (requestBody.body != null && requestBody.contentLength != null) {\n requestHeaders.set('Content-Length', `${requestBody.contentLength}`);\n }\n\n assignOutgoingMessageHeaders(outgoing, requestHeaders);\n\n if (requestBody.body == null) {\n outgoing.end();\n } else if (requestBody.body instanceof Uint8Array) {\n outgoing.write(requestBody.body);\n outgoing.end();\n } else {\n const body =\n requestBody.body instanceof Stream\n ? requestBody.body\n : Readable.fromWeb(requestBody.body);\n pipeline(body, outgoing, error => {\n if (error) reject(error);\n });\n }\n }\n\n return await new Promise(_fetch);\n}\n"],"names":["CRLF","BOUNDARY","repeat","isBlob","object","arrayBuffer","type","stream","constructor","tag","Symbol","toStringTag","startsWith","getFormHeader","boundary","name","field","header","getFormFooter","encoder","TextEncoder","extractBody","body","size","bytes","encode","byteLength","append","delete","get","getAll","has","set","sort","isURLSearchParameters","toString","Uint8Array","isAnyArrayBuffer","ArrayBuffer","isView","buffer","byteOffset","getReader","cancel","tee","isReadableStream","keys","values","entries","isFormData","randomBytes","getFormDataLength","form","length","Buffer","value","Readable","from","async","generatorOfFormData","getBoundary","hasKnownLength","getLengthSync","isReadable","isMultipartFormDataStream","asyncIterator","iterator","isIterable","contentLength","contentType","InflateStream","Transform","opts","super","this","_opts","_transform","chunk","encoding","callback","_inflate","zlib","createInflate","createInflateRaw","on","push","bind","err","destroy","write","_final","end","undefined","headersOfRawHeaders","rawHeaders","headers","Headers","i","methodToHttpOption","method","TypeError","toUpperCase","urlToHttpOptions","input","_url","URL","protocol","url","fetch","requestInit","initFromRequest","isRequest","initUrl","initBody","signal","redirect","toRedirectOption","requestUrl","requestBody","redirects","requestHeaders","requestOptions","Promise","_fetch","resolve","reject","outgoing","https","http","request","incoming","setTimeout","init","status","statusCode","statusText","statusMessage","code","location","locationURL","Error","Object","assign","reason","removeEventListener","aborted","addEventListener","toLowerCase","pipeline","createBrotliDecompress","flush","constants","BROTLI_OPERATION_FLUSH","finishFlush","createGunzip","Z_SYNC_FLUSH","PassThrough","createContentDecoder","createResponse","params","response","Response","defineProperty","redirected","assignOutgoingMessageHeaders","setHeaders","key","setHeader","Stream","fromWeb","error"],"mappings":"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"}
1
+ {"version":3,"file":"minifetch.mjs","sources":["../src/body.ts","../src/encoding.ts","../src/webstd.ts","../src/fetch.ts"],"sourcesContent":["import { Readable } from 'node:stream';\nimport { isAnyArrayBuffer } from 'node:util/types';\nimport { randomBytes } from 'node:crypto';\nimport { Blob, FormData, URLSearchParams } from './webstd';\n\nexport type BodyInit =\n | Exclude<RequestInit['body'], undefined | null>\n | FormDataPolyfill\n | Readable;\n\nexport interface BodyState {\n contentLength: number | null;\n contentType: string | null;\n body: Readable | ReadableStream | Uint8Array | null;\n}\n\ninterface FormDataPolyfill extends Readable {\n getBoundary(): string;\n getLengthSync(): number;\n hasKnownLength(): number;\n}\n\nconst CRLF = '\\r\\n';\nconst CRLF_LENGTH = 2;\nconst BOUNDARY = '-'.repeat(2);\n\nconst isReadable = (object: any): object is Readable =>\n Readable.isReadable(object);\n\nconst isIterable = (\n object: any\n): object is AsyncIterable<any> | Iterable<any> =>\n typeof object[Symbol.asyncIterator] === 'function' ||\n typeof object[Symbol.iterator] === 'function';\n\nconst isMultipartFormDataStream = (object: any): object is FormDataPolyfill =>\n typeof object.getBoundary === 'function' &&\n typeof object.hasKnownLength === 'function' &&\n typeof object.getLengthSync === 'function' &&\n Readable.isReadable(object);\n\nconst isFormData = (object: any): object is FormData =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.set === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.keys === 'function' &&\n typeof object.values === 'function' &&\n typeof object.entries === 'function' &&\n typeof object.constructor === 'function' &&\n object[Symbol.toStringTag] === 'FormData';\n\nconst isURLSearchParameters = (object: any): object is URLSearchParams =>\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.has === 'function' &&\n typeof object.set === 'function' &&\n typeof object.sort === 'function' &&\n object[Symbol.toStringTag] === 'URLSearchParams';\n\nconst isReadableStream = (object: any): object is ReadableStream =>\n typeof object === 'object' &&\n typeof object.getReader === 'function' &&\n typeof object.cancel === 'function' &&\n typeof object.tee === 'function';\n\nconst isBlob = (object: any): object is Blob => {\n if (\n typeof object === 'object' &&\n typeof object.arrayBuffer === 'function' &&\n typeof object.type === 'string' &&\n typeof object.stream === 'function' &&\n typeof object.constructor === 'function'\n ) {\n const tag = object[Symbol.toStringTag];\n return tag.startsWith('Blob') || tag.startsWith('File');\n } else {\n return false;\n }\n};\n\nconst makeFormBoundary = (): string =>\n `formdata-${randomBytes(8).toString('hex')}`;\n\nconst getFormHeader = (\n boundary: string,\n name: string,\n field: File | Blob | string\n): string => {\n let header = `${BOUNDARY}${boundary}${CRLF}`;\n header += `Content-Disposition: form-data; name=\"${name}\"`;\n if (isBlob(field)) {\n header += `; filename=\"${(field as File).name ?? 'blob'}\"${CRLF}`;\n header += `Content-Type: ${field.type || 'application/octet-stream'}`;\n }\n return `${header}${CRLF}${CRLF}`;\n};\n\nconst getFormFooter = (boundary: string) =>\n `${BOUNDARY}${boundary}${BOUNDARY}${CRLF}${CRLF}`;\n\nexport const getFormDataLength = (form: FormData, boundary: string) => {\n let length = Buffer.byteLength(getFormFooter(boundary));\n for (const [name, value] of form)\n length +=\n Buffer.byteLength(getFormHeader(boundary, name, value)) +\n (isBlob(value) ? value.size : Buffer.byteLength(`${value}`)) +\n CRLF_LENGTH;\n return length;\n};\n\nasync function* generatorOfFormData(\n form: FormData,\n boundary: string\n): AsyncGenerator<ArrayBufferLike> {\n const encoder = new TextEncoder();\n for (const [name, value] of form) {\n if (isBlob(value)) {\n yield encoder.encode(getFormHeader(boundary, name, value));\n yield* value.stream();\n yield encoder.encode(CRLF);\n } else {\n yield encoder.encode(getFormHeader(boundary, name, value) + value + CRLF);\n }\n }\n yield encoder.encode(getFormFooter(boundary));\n}\n\nconst encoder = new TextEncoder();\n\nexport const extractBody = (object: BodyInit | null): BodyState => {\n let type: string | null = null;\n let body: Readable | ReadableStream | Uint8Array | null;\n let size: number | null = null;\n if (object == null) {\n body = null;\n size = 0;\n } else if (typeof object === 'string') {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n size = bytes.byteLength;\n body = bytes;\n } else if (isURLSearchParameters(object)) {\n const bytes = encoder.encode(object.toString());\n body = bytes;\n size = bytes.byteLength;\n type = 'application/x-www-form-urlencoded;charset=UTF-8';\n } else if (isBlob(object)) {\n size = object.size;\n type = object.type || null;\n body = object.stream();\n } else if (object instanceof Uint8Array) {\n body = object;\n size = object.byteLength;\n } else if (isAnyArrayBuffer(object)) {\n const bytes = new Uint8Array(object);\n body = bytes;\n size = bytes.byteLength;\n } else if (ArrayBuffer.isView(object)) {\n const bytes = new Uint8Array(\n object.buffer,\n object.byteOffset,\n object.byteLength\n );\n body = bytes;\n size = bytes.byteLength;\n } else if (isReadableStream(object)) {\n body = object;\n } else if (isFormData(object)) {\n const boundary = makeFormBoundary();\n type = `multipart/form-data; boundary=${boundary}`;\n size = getFormDataLength(object, boundary);\n body = Readable.from(generatorOfFormData(object, boundary));\n } else if (isMultipartFormDataStream(object)) {\n type = `multipart/form-data; boundary=${object.getBoundary()}`;\n size = object.hasKnownLength() ? object.getLengthSync() : null;\n body = object as Readable;\n } else if (isReadable(object)) {\n body = object as Readable;\n } else if (isIterable(object)) {\n body = Readable.from(object);\n } else {\n const bytes = encoder.encode(`${object}`);\n type = 'text/plain;charset=UTF-8';\n body = bytes;\n size = bytes.byteLength;\n }\n return {\n contentLength: size,\n contentType: type,\n body,\n };\n};\n","import { PassThrough, Transform, TransformCallback } from 'node:stream';\nimport * as zlib from 'node:zlib';\n\n/** @see https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 */\ntype Encoding = 'gzip' | 'x-gzip' | 'deflate' | 'x-deflate' | 'br' | {};\n\n/** @see https://github.com/nodejs/undici/pull/2650 */\nclass InflateStream extends Transform {\n _opts?: zlib.ZlibOptions;\n _inflate?: Transform;\n\n constructor(opts?: zlib.ZlibOptions) {\n super();\n this._opts = opts;\n }\n\n _transform(\n chunk: Buffer,\n encoding: BufferEncoding,\n callback: TransformCallback\n ) {\n if (!this._inflate) {\n if (chunk.length === 0) {\n callback();\n return;\n }\n this._inflate =\n (chunk[0] & 0x0f) === 0x08\n ? zlib.createInflate(this._opts)\n : zlib.createInflateRaw(this._opts);\n this._inflate.on('data', this.push.bind(this));\n this._inflate.on('end', () => this.push(null));\n this._inflate.on('error', err => this.destroy(err));\n }\n this._inflate.write(chunk, encoding, callback);\n }\n\n _final(callback: TransformCallback) {\n if (this._inflate) {\n this._inflate.end();\n this._inflate = undefined;\n }\n callback();\n }\n}\n\nexport const createContentDecoder = (encoding: Encoding | {}) => {\n // See: https://github.com/nodejs/undici/blob/008187b/lib/web/fetch/index.js#L2138-L2160\n switch (encoding) {\n case 'br':\n return zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n });\n case 'gzip':\n case 'x-gzip':\n return zlib.createGunzip({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n case 'deflate':\n case 'x-deflate':\n return new InflateStream({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n default:\n return new PassThrough();\n }\n};\n","import * as buffer from 'node:buffer';\n\ntype Or<T, U> = void extends T ? U : T;\n\nexport type HeadersInit =\n | string[][]\n | Record<string, string | ReadonlyArray<string>>\n | _Headers;\n\nexport type FormDataEntryValue = string | _File;\n\nexport type RequestInfo = string | _URL | _Request;\n\ninterface _Iterable<T, TReturn = any, TNext = any>\n extends Or<\n Iterable<T, TReturn, TNext>,\n globalThis.Iterable<T, TReturn, TNext>\n > {}\ninterface _AsyncIterable<T, TReturn = any, TNext = any>\n extends Or<\n AsyncIterable<T, TReturn, TNext>,\n globalThis.AsyncIterable<T, TReturn, TNext>\n > {}\ninterface _ReadableStream<T = any>\n extends Or<ReadableStream<T>, globalThis.ReadableStream<T>> {}\n\n// NOTE: AsyncIterable<Uint8Array> is left out\nexport type BodyInit =\n | ArrayBuffer\n | _Blob\n | NodeJS.ArrayBufferView\n | _URLSearchParams\n | _ReadableStream\n | _AsyncIterable<Uint8Array>\n | _FormData\n | _Iterable<Uint8Array>\n | null\n | string;\n\n// See: https://nodejs.org/docs/latest-v20.x/api/globals.html#class-file\n// The `File` global was only added in Node.js 20\ninterface _File extends _Blob, Or<File, globalThis.File> {\n readonly name: string;\n readonly lastModified: number;\n}\ninterface _File extends Or<globalThis.File, buffer.File> {}\ninterface FileClass extends Or<typeof globalThis.File, typeof buffer.File> {}\nconst _File: FileClass = globalThis.File || buffer.File;\nif (typeof globalThis.File === 'undefined') {\n globalThis.File = _File;\n}\n\n// There be dragons here.\n// This is complex because of overlapping definitions in lib.dom, @types/node, and undici-types\n// Some types define and overload constructor interfaces with type interfaces\n// Here, we have to account for global differences and split the overloads apart\n\ninterface _RequestInit extends Or<RequestInit, globalThis.RequestInit> {\n duplex?: 'half';\n}\ninterface _ResponseInit extends Or<ResponseInit, globalThis.ResponseInit> {}\n\ninterface _Blob extends Or<Blob, globalThis.Blob> {}\ninterface BlobClass extends Or<typeof Blob, typeof globalThis.Blob> {}\nconst _Blob: BlobClass = Blob;\n\ninterface _URLSearchParams\n extends Or<URLSearchParams, globalThis.URLSearchParams> {}\ninterface URLSearchParamsClass\n extends Or<typeof URLSearchParams, typeof globalThis.URLSearchParams> {}\nconst _URLSearchParams: URLSearchParamsClass = URLSearchParams as any;\n\ninterface _URL extends Or<URL, globalThis.URL> {}\ninterface URLClass extends Or<typeof URL, typeof globalThis.URL> {}\nconst _URL: URLClass = URL;\n\ninterface _Request extends Or<Request, globalThis.Request> {}\ninterface RequestClass extends Or<typeof Request, typeof globalThis.Request> {\n new (\n input: RequestInfo,\n init?: _RequestInit | Or<RequestInit, globalThis.RequestInit>\n ): _Request;\n}\nconst _Request: RequestClass = Request;\n\ninterface _Response extends Or<Response, globalThis.Response> {}\ninterface ResponseClass\n extends Or<typeof Response, typeof globalThis.Response> {\n new (body?: BodyInit, init?: _ResponseInit): _Response;\n}\nconst _Response: ResponseClass = Response;\n\ninterface _Headers extends Or<Headers, globalThis.Headers> {}\ninterface HeadersClass extends Or<typeof Headers, typeof globalThis.Headers> {\n new (init?: HeadersInit): _Headers;\n}\nconst _Headers: HeadersClass = Headers;\n\ninterface _FormData\n extends Or<\n FormData & _Iterable<[string, FormDataEntryValue]>,\n globalThis.FormData\n > {}\ninterface FormDataClass\n extends Or<typeof FormData, typeof globalThis.FormData> {}\nconst _FormData: FormDataClass = FormData;\n\nexport {\n type _RequestInit as RequestInit,\n type _ResponseInit as ResponseInit,\n _Blob as Blob,\n _File as File,\n _URL as URL,\n _URLSearchParams as URLSearchParams,\n _Request as Request,\n _Response as Response,\n _Headers as Headers,\n _FormData as FormData,\n};\n","import { Stream, Readable, pipeline } from 'node:stream';\nimport * as https from 'node:https';\nimport * as http from 'node:http';\nimport * as url from 'node:url';\n\nimport { extractBody } from './body';\nimport { createContentDecoder } from './encoding';\nimport { URL, Request, RequestInit, Response } from './webstd';\n\n/** Maximum allowed redirects (matching Chromium's limit) */\nconst MAX_REDIRECTS = 20;\n\n/** Convert Node.js raw headers array to Headers */\nconst headersOfRawHeaders = (rawHeaders: readonly string[]): Headers => {\n const headers = new Headers();\n for (let i = 0; i < rawHeaders.length; i += 2)\n headers.set(rawHeaders[i], rawHeaders[i + 1]);\n return headers;\n};\n\n/** Assign Headers to a Node.js OutgoingMessage (request) */\nconst assignOutgoingMessageHeaders = (\n outgoing: http.OutgoingMessage,\n headers: Headers\n) => {\n if (typeof outgoing.setHeaders === 'function') {\n outgoing.setHeaders(headers);\n } else {\n for (const [key, value] of headers) outgoing.setHeader(key, value);\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst toRedirectOption = (\n redirect: string | undefined\n): 'follow' | 'manual' | 'error' => {\n switch (redirect) {\n case 'follow':\n case 'manual':\n case 'error':\n return redirect;\n case undefined:\n return 'follow';\n default:\n throw new TypeError(\n `Request constructor: ${redirect} is not an accepted type. Expected one of follow, manual, error.`\n );\n }\n};\n\n/** Normalize methods and disallow special methods */\nconst methodToHttpOption = (method: string | undefined): string => {\n switch (method) {\n case 'CONNECT':\n case 'TRACE':\n case 'TRACK':\n throw new TypeError(\n `Failed to construct 'Request': '${method}' HTTP method is unsupported.`\n );\n default:\n return method ? method.toUpperCase() : 'GET';\n }\n};\n\n/** Convert URL to Node.js HTTP request options and disallow unsupported protocols */\nconst urlToHttpOptions = (input: URL) => {\n const _url = new URL(input);\n switch (_url.protocol) {\n // TODO: 'file:' and 'data:' support\n case 'http:':\n case 'https:':\n return url.urlToHttpOptions(_url);\n default:\n throw new TypeError(`URL scheme \"${_url.protocol}\" is not supported.`);\n }\n};\n\n/** Returns if `input` is a Request object */\nconst isRequest = (input: any): input is Request =>\n input != null && typeof input === 'object' && 'body' in input;\n\n/** Returns if status `code` is a redirect code */\nconst isRedirectCode = (\n code: number | undefined\n): code is 301 | 302 | 303 | 307 | 308 =>\n code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n\nfunction createResponse(\n body: ConstructorParameters<typeof Response>[0] | null,\n init: ResponseInit,\n params: {\n url: string;\n redirected: boolean;\n type: 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';\n }\n) {\n const response = new Response(body, init);\n Object.defineProperty(response, 'url', { value: params.url });\n if (params.type !== 'default')\n Object.defineProperty(response, 'type', { value: params.type });\n if (params.redirected)\n Object.defineProperty(response, 'redirected', { value: params.redirected });\n return response;\n}\n\nasync function _fetch(\n input: string | URL | Request,\n requestInit?: RequestInit\n): Promise<Response> {\n const initFromRequest = isRequest(input);\n const initUrl = initFromRequest ? input.url : input;\n const initBody = initFromRequest ? input.body : requestInit?.body || null;\n const signal = initFromRequest\n ? input.signal\n : requestInit?.signal || undefined;\n const redirect = toRedirectOption(\n initFromRequest ? input.redirect : requestInit?.redirect\n );\n\n let requestUrl = new URL(initUrl);\n let requestBody = extractBody(initBody);\n let redirects = 0;\n\n const requestHeaders = new Headers(\n requestInit?.headers || (initFromRequest ? input.headers : undefined)\n );\n const requestOptions = {\n ...urlToHttpOptions(requestUrl),\n method: methodToHttpOption(\n initFromRequest ? input.method : requestInit?.method\n ),\n signal,\n } satisfies http.RequestOptions;\n\n function _call(\n resolve: (response: Response | Promise<Response>) => void,\n reject: (reason?: any) => void\n ) {\n const method = requestOptions.method;\n const protocol = requestOptions.protocol === 'https:' ? https : http;\n const outgoing = protocol.request(requestOptions);\n\n outgoing.on('response', incoming => {\n incoming.setTimeout(0); // Forcefully disable timeout\n\n const init = {\n status: incoming.statusCode,\n statusText: incoming.statusMessage,\n headers: headersOfRawHeaders(incoming.rawHeaders),\n } satisfies ResponseInit;\n\n if (isRedirectCode(init.status)) {\n const location = init.headers.get('Location');\n const locationURL =\n location != null ? new URL(location, requestUrl) : null;\n if (redirect === 'error') {\n // TODO: do we need a special Error instance here?\n reject(\n new Error(\n 'URI requested responds with a redirect, redirect mode is set to error'\n )\n );\n return;\n } else if (redirect === 'manual' && locationURL !== null) {\n init.headers.set('Location', locationURL.toString());\n } else if (redirect === 'follow' && locationURL !== null) {\n if (++redirects > MAX_REDIRECTS) {\n reject(new Error(`maximum redirect reached at: ${requestUrl}`));\n return;\n } else if (\n locationURL.protocol !== 'http:' &&\n locationURL.protocol !== 'https:'\n ) {\n // TODO: do we need a special Error instance here?\n reject(new Error('URL scheme must be a HTTP(S) scheme'));\n return;\n }\n\n if (\n init.status === 303 ||\n ((init.status === 301 || init.status === 302) && method === 'POST')\n ) {\n requestBody = extractBody(null);\n requestOptions.method = 'GET';\n requestHeaders.delete('Content-Length');\n } else if (\n requestBody.body != null &&\n requestBody.contentLength == null\n ) {\n reject(new Error('Cannot follow redirect with a streamed body'));\n return;\n } else {\n requestBody = extractBody(initBody);\n }\n\n Object.assign(\n requestOptions,\n urlToHttpOptions((requestUrl = locationURL))\n );\n return _call(resolve, reject);\n }\n }\n\n const destroy = (reason?: any) => {\n signal?.removeEventListener('abort', destroy);\n if (reason) {\n incoming.destroy(signal?.aborted ? signal.reason : reason);\n reject(signal?.aborted ? signal.reason : reason);\n }\n };\n\n signal?.addEventListener('abort', destroy);\n\n let body: Readable | null = incoming;\n const encoding = init.headers.get('Content-Encoding')?.toLowerCase();\n if (method === 'HEAD' || init.status === 204 || init.status === 304) {\n body = null;\n } else if (encoding != null) {\n init.headers.set('Content-Encoding', encoding);\n body = pipeline(body, createContentDecoder(encoding), destroy);\n }\n\n resolve(\n createResponse(body, init, {\n type: 'default',\n url: requestUrl.toString(),\n redirected: redirects > 0,\n })\n );\n });\n\n outgoing.on('error', reject);\n\n if (!requestHeaders.has('Accept')) requestHeaders.set('Accept', '*/*');\n if (requestBody.contentType)\n requestHeaders.set('Content-Type', requestBody.contentType);\n\n if (requestBody.body == null && (method === 'POST' || method === 'PUT')) {\n requestHeaders.set('Content-Length', '0');\n } else if (requestBody.body != null && requestBody.contentLength != null) {\n requestHeaders.set('Content-Length', `${requestBody.contentLength}`);\n }\n\n assignOutgoingMessageHeaders(outgoing, requestHeaders);\n\n if (requestBody.body == null) {\n outgoing.end();\n } else if (requestBody.body instanceof Uint8Array) {\n outgoing.write(requestBody.body);\n outgoing.end();\n } else {\n const body =\n requestBody.body instanceof Stream\n ? requestBody.body\n : Readable.fromWeb(requestBody.body);\n pipeline(body, outgoing, error => {\n if (error) reject(error);\n });\n }\n }\n\n return await new Promise(_call);\n}\n\nexport { _fetch as fetch };\n"],"names":["CRLF","BOUNDARY","repeat","isBlob","object","arrayBuffer","type","stream","constructor","tag","Symbol","toStringTag","startsWith","getFormHeader","boundary","name","field","header","getFormFooter","encoder","TextEncoder","extractBody","body","size","bytes","encode","byteLength","append","delete","get","getAll","has","set","sort","isURLSearchParameters","toString","Uint8Array","isAnyArrayBuffer","ArrayBuffer","isView","buffer","byteOffset","getReader","cancel","tee","isReadableStream","keys","values","entries","isFormData","randomBytes","getFormDataLength","form","length","Buffer","value","Readable","from","async","generatorOfFormData","getBoundary","hasKnownLength","getLengthSync","isReadable","isMultipartFormDataStream","asyncIterator","iterator","isIterable","contentLength","contentType","InflateStream","Transform","opts","super","this","_opts","_transform","chunk","encoding","callback","_inflate","zlib","createInflate","createInflateRaw","on","push","bind","err","destroy","write","_final","end","undefined","_File","globalThis","File","_Blob","Blob","_URLSearchParams","URLSearchParams","_URL","URL","_Request","Request","_Response","Response","_Headers","Headers","_FormData","FormData","headersOfRawHeaders","rawHeaders","headers","i","methodToHttpOption","method","TypeError","toUpperCase","urlToHttpOptions","input","_url","protocol","url","_fetch","requestInit","initFromRequest","isRequest","initUrl","initBody","signal","redirect","toRedirectOption","requestUrl","requestBody","redirects","requestHeaders","requestOptions","Promise","_call","resolve","reject","outgoing","https","http","request","incoming","setTimeout","init","status","statusCode","statusText","statusMessage","code","location","locationURL","Error","Object","assign","reason","removeEventListener","aborted","addEventListener","toLowerCase","pipeline","createBrotliDecompress","flush","constants","BROTLI_OPERATION_FLUSH","finishFlush","createGunzip","Z_SYNC_FLUSH","PassThrough","createContentDecoder","createResponse","params","response","defineProperty","redirected","assignOutgoingMessageHeaders","setHeaders","key","setHeader","Stream","fromWeb","error"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fetch-nodeshim",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "A Node.js fetch shim using built-in Request, Response, and Headers (but without native fetch)",
5
5
  "author": "Phil Pluckthun <phil@kitten.sh>",
6
6
  "source": "./src/index.ts",
@@ -41,6 +41,8 @@
41
41
  "@rollup/plugin-commonjs": "^28.0.2",
42
42
  "@rollup/plugin-node-resolve": "^16.0.0",
43
43
  "@rollup/plugin-terser": "^0.4.4",
44
+ "@types-internal/node-18": "npm:@types/node@^18.19.0",
45
+ "@types-internal/node-20": "npm:@types/node@^20.17.0",
44
46
  "@types/node": "^22.12.0",
45
47
  "busboy": "^0.3.1",
46
48
  "dotenv": "^16.4.7",
@@ -53,14 +55,18 @@
53
55
  "rollup-plugin-cjs-check": "^1.0.3",
54
56
  "rollup-plugin-dts": "^6.1.1",
55
57
  "typescript": "^5.7.3",
56
- "undici-types": "^7.3.0",
58
+ "undici-types": "^6.20.0",
57
59
  "vitest": "^3.0.4"
58
60
  },
59
61
  "scripts": {
60
62
  "test": "vitest test",
61
63
  "test:run": "vitest test --run",
62
- "check": "tsc --noEmit",
63
64
  "build": "rollup -c ./scripts/rollup.config.mjs",
65
+ "postbuild": "tsc --noEmit ./dist/minifetch.d.ts",
66
+ "check": "tsc --noEmit",
67
+ "check:node18": "tsc --noEmit -p ./tsconfig-node18.json",
68
+ "check:node20": "tsc --noEmit -p ./tsconfig-node20.json",
69
+ "check:all": "run-s check check:node18 check:node20",
64
70
  "clean": "rimraf dist node_modules/.cache",
65
71
  "changeset:version": "changeset version && pnpm install --lockfile-only",
66
72
  "changeset:publish": "changeset publish"