fetch-nodeshim 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/LICENSE.md +1 -0
- package/dist/minifetch.d.ts +26 -3
- package/dist/minifetch.js +164 -109
- package/dist/minifetch.js.map +1 -1
- package/dist/minifetch.mjs +142 -87
- package/dist/minifetch.mjs.map +1 -1
- package/package.json +1 -1
package/dist/minifetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
+
{"version":3,"file":"minifetch.js","sources":["../src/webstd.ts","../src/body.ts","../src/encoding.ts","../src/fetch.ts"],"sourcesContent":["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 { Readable } from 'node:stream';\nimport { isAnyArrayBuffer } from 'node:util/types';\nimport { randomBytes } from 'node:crypto';\nimport { Response, 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\nconst kBodyInternals = Symbol('kBodyInternals');\n\nexport class Body {\n private [kBodyInternals]: BodyState;\n\n constructor(init: BodyInit | null) {\n this[kBodyInternals] = extractBody(init);\n }\n\n get body() {\n return this[kBodyInternals].body;\n }\n\n get bodyUsed() {\n const { body } = this[kBodyInternals];\n if (isReadable(body)) {\n return Readable.isDisturbed(body);\n } else if (isReadableStream(body)) {\n return body.locked;\n } else {\n return false;\n }\n }\n\n async arrayBuffer() {\n const { body } = this[kBodyInternals];\n return isAnyArrayBuffer(body)\n ? body\n : new Response(this.body).arrayBuffer();\n }\n\n async formData() {\n const { body, contentLength, contentType } = this[kBodyInternals];\n const headers = {};\n if (contentLength) headers['Content-Length'] = contentLength;\n if (contentType) headers['Content-Type'] = contentType;\n return new Response(body, { headers }).formData();\n }\n\n async blob() {\n const { contentType } = this[kBodyInternals];\n return new Blob([await this.arrayBuffer()], {\n type: contentType ?? undefined,\n });\n }\n\n async json() {\n const text = await this.text();\n return JSON.parse(text);\n }\n\n async text() {\n return new TextDecoder().decode(await this.arrayBuffer());\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';\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":["_File","globalThis","File","buffer","_Blob","Blob","_URLSearchParams","URLSearchParams","_URL","URL","_Request","Request","_Response","Response","_Headers","Headers","_FormData","FormData","CRLF","BOUNDARY","repeat","isReadable","object","Readable","isReadableStream","getReader","cancel","tee","isBlob","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","byteOffset","keys","values","entries","isFormData","randomBytes","getFormDataLength","form","length","Buffer","value","from","async","generatorOfFormData","getBoundary","hasKnownLength","getLengthSync","isMultipartFormDataStream","asyncIterator","iterator","isIterable","contentLength","contentType","kBodyInternals","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","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","Body","bodyUsed","isDisturbed","locked","formData","blob","json","text","JSON","parse","TextDecoder","decode"],"mappings":"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"}
|
package/dist/minifetch.mjs
CHANGED
|
@@ -10,13 +10,37 @@ import { isAnyArrayBuffer as f } from "node:util/types";
|
|
|
10
10
|
|
|
11
11
|
import { randomBytes as l } from "node:crypto";
|
|
12
12
|
|
|
13
|
-
import * as c from "node:
|
|
13
|
+
import * as c from "node:buffer";
|
|
14
14
|
|
|
15
|
-
import * as u from "node:
|
|
15
|
+
import * as u from "node:zlib";
|
|
16
16
|
|
|
17
|
-
var d =
|
|
17
|
+
var d = globalThis.File || c.File;
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
if (void 0 === globalThis.File) {
|
|
20
|
+
globalThis.File = d;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var y = Blob;
|
|
24
|
+
|
|
25
|
+
var p = URLSearchParams;
|
|
26
|
+
|
|
27
|
+
var h = URL;
|
|
28
|
+
|
|
29
|
+
var v = Request;
|
|
30
|
+
|
|
31
|
+
var m = Response;
|
|
32
|
+
|
|
33
|
+
var b = Headers;
|
|
34
|
+
|
|
35
|
+
var g = FormData;
|
|
36
|
+
|
|
37
|
+
var w = "\r\n";
|
|
38
|
+
|
|
39
|
+
var L = "-".repeat(2);
|
|
40
|
+
|
|
41
|
+
var isReadable = t => e.isReadable(t);
|
|
42
|
+
|
|
43
|
+
var isReadableStream = e => "object" == typeof e && "function" == typeof e.getReader && "function" == typeof e.cancel && "function" == typeof e.tee;
|
|
20
44
|
|
|
21
45
|
var isBlob = e => {
|
|
22
46
|
if ("object" == typeof e && "function" == typeof e.arrayBuffer && "string" == typeof e.type && "function" == typeof e.stream && "function" == typeof e.constructor) {
|
|
@@ -28,18 +52,18 @@ var isBlob = e => {
|
|
|
28
52
|
};
|
|
29
53
|
|
|
30
54
|
var getFormHeader = (e, t, r) => {
|
|
31
|
-
var n = `${
|
|
55
|
+
var n = `${L}${e}${w}`;
|
|
32
56
|
n += `Content-Disposition: form-data; name="${t}"`;
|
|
33
57
|
if (isBlob(r)) {
|
|
34
|
-
n += `; filename="${r.name ?? "blob"}"${
|
|
58
|
+
n += `; filename="${r.name ?? "blob"}"${w}`;
|
|
35
59
|
n += `Content-Type: ${r.type || "application/octet-stream"}`;
|
|
36
60
|
}
|
|
37
|
-
return `${n}${
|
|
61
|
+
return `${n}${w}${w}`;
|
|
38
62
|
};
|
|
39
63
|
|
|
40
|
-
var getFormFooter = e => `${
|
|
64
|
+
var getFormFooter = e => `${L}${e}${L}${w}${w}`;
|
|
41
65
|
|
|
42
|
-
var
|
|
66
|
+
var T = new TextEncoder;
|
|
43
67
|
|
|
44
68
|
var extractBody = t => {
|
|
45
69
|
var r = null;
|
|
@@ -49,12 +73,12 @@ var extractBody = t => {
|
|
|
49
73
|
n = null;
|
|
50
74
|
o = 0;
|
|
51
75
|
} else if ("string" == typeof t) {
|
|
52
|
-
var a =
|
|
76
|
+
var a = T.encode(`${t}`);
|
|
53
77
|
r = "text/plain;charset=UTF-8";
|
|
54
78
|
o = a.byteLength;
|
|
55
79
|
n = a;
|
|
56
80
|
} 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)) {
|
|
57
|
-
var s =
|
|
81
|
+
var s = T.encode(t.toString());
|
|
58
82
|
n = s;
|
|
59
83
|
o = s.byteLength;
|
|
60
84
|
r = "application/x-www-form-urlencoded;charset=UTF-8";
|
|
@@ -73,7 +97,7 @@ var extractBody = t => {
|
|
|
73
97
|
var c = new Uint8Array(t.buffer, t.byteOffset, t.byteLength);
|
|
74
98
|
n = c;
|
|
75
99
|
o = c.byteLength;
|
|
76
|
-
} else if ((
|
|
100
|
+
} else if (isReadableStream(t)) {
|
|
77
101
|
n = t;
|
|
78
102
|
} 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)) {
|
|
79
103
|
var u = `formdata-${l(8).toString("hex")}`;
|
|
@@ -91,9 +115,9 @@ var extractBody = t => {
|
|
|
91
115
|
if (isBlob(o)) {
|
|
92
116
|
yield r.encode(getFormHeader(t, n, o));
|
|
93
117
|
yield* o.stream();
|
|
94
|
-
yield r.encode(
|
|
118
|
+
yield r.encode(w);
|
|
95
119
|
} else {
|
|
96
|
-
yield r.encode(getFormHeader(t, n, o) + o +
|
|
120
|
+
yield r.encode(getFormHeader(t, n, o) + o + w);
|
|
97
121
|
}
|
|
98
122
|
}
|
|
99
123
|
yield r.encode(getFormFooter(t));
|
|
@@ -102,15 +126,15 @@ var extractBody = t => {
|
|
|
102
126
|
r = `multipart/form-data; boundary=${t.getBoundary()}`;
|
|
103
127
|
o = t.hasKnownLength() ? t.getLengthSync() : null;
|
|
104
128
|
n = t;
|
|
105
|
-
} else if (
|
|
129
|
+
} else if (isReadable(t)) {
|
|
106
130
|
n = t;
|
|
107
131
|
} else if ((e => "function" == typeof e[Symbol.asyncIterator] || "function" == typeof e[Symbol.iterator])(t)) {
|
|
108
132
|
n = e.from(t);
|
|
109
133
|
} else {
|
|
110
|
-
var
|
|
134
|
+
var d = T.encode(`${t}`);
|
|
111
135
|
r = "text/plain;charset=UTF-8";
|
|
112
|
-
n =
|
|
113
|
-
o =
|
|
136
|
+
n = d;
|
|
137
|
+
o = d.byteLength;
|
|
114
138
|
}
|
|
115
139
|
return {
|
|
116
140
|
contentLength: o,
|
|
@@ -119,6 +143,57 @@ var extractBody = t => {
|
|
|
119
143
|
};
|
|
120
144
|
};
|
|
121
145
|
|
|
146
|
+
var S = Symbol("kBodyInternals");
|
|
147
|
+
|
|
148
|
+
class Body {
|
|
149
|
+
constructor(e) {
|
|
150
|
+
this[S] = extractBody(e);
|
|
151
|
+
}
|
|
152
|
+
get body() {
|
|
153
|
+
return this[S].body;
|
|
154
|
+
}
|
|
155
|
+
get bodyUsed() {
|
|
156
|
+
var {body: t} = this[S];
|
|
157
|
+
if (isReadable(t)) {
|
|
158
|
+
return e.isDisturbed(t);
|
|
159
|
+
} else if (isReadableStream(t)) {
|
|
160
|
+
return t.locked;
|
|
161
|
+
} else {
|
|
162
|
+
return !1;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async arrayBuffer() {
|
|
166
|
+
var {body: e} = this[S];
|
|
167
|
+
return f(e) ? e : new m(this.body).arrayBuffer();
|
|
168
|
+
}
|
|
169
|
+
async formData() {
|
|
170
|
+
var {body: e, contentLength: t, contentType: r} = this[S];
|
|
171
|
+
var n = {};
|
|
172
|
+
if (t) {
|
|
173
|
+
n["Content-Length"] = t;
|
|
174
|
+
}
|
|
175
|
+
if (r) {
|
|
176
|
+
n["Content-Type"] = r;
|
|
177
|
+
}
|
|
178
|
+
return new m(e, {
|
|
179
|
+
headers: n
|
|
180
|
+
}).formData();
|
|
181
|
+
}
|
|
182
|
+
async blob() {
|
|
183
|
+
var {contentType: e} = this[S];
|
|
184
|
+
return new y([ await this.arrayBuffer() ], {
|
|
185
|
+
type: e ?? void 0
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
async json() {
|
|
189
|
+
var e = await this.text();
|
|
190
|
+
return JSON.parse(e);
|
|
191
|
+
}
|
|
192
|
+
async text() {
|
|
193
|
+
return (new TextDecoder).decode(await this.arrayBuffer());
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
122
197
|
class InflateStream extends r {
|
|
123
198
|
constructor(e) {
|
|
124
199
|
super();
|
|
@@ -130,7 +205,7 @@ class InflateStream extends r {
|
|
|
130
205
|
r();
|
|
131
206
|
return;
|
|
132
207
|
}
|
|
133
|
-
this._inflate = 8 == (15 & e[0]) ?
|
|
208
|
+
this._inflate = 8 == (15 & e[0]) ? u.createInflate(this._opts) : u.createInflateRaw(this._opts);
|
|
134
209
|
this._inflate.on("data", this.push.bind(this));
|
|
135
210
|
this._inflate.on("end", (() => this.push(null)));
|
|
136
211
|
this._inflate.on("error", (e => this.destroy(e)));
|
|
@@ -146,26 +221,6 @@ class InflateStream extends r {
|
|
|
146
221
|
}
|
|
147
222
|
}
|
|
148
223
|
|
|
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
|
-
|
|
169
224
|
var headersOfRawHeaders = e => {
|
|
170
225
|
var t = new Headers;
|
|
171
226
|
for (var r = 0; r < e.length; r += 2) {
|
|
@@ -187,7 +242,7 @@ var methodToHttpOption = e => {
|
|
|
187
242
|
};
|
|
188
243
|
|
|
189
244
|
var urlToHttpOptions = e => {
|
|
190
|
-
var t = new
|
|
245
|
+
var t = new h(e);
|
|
191
246
|
switch (t.protocol) {
|
|
192
247
|
case "http:":
|
|
193
248
|
case "https:":
|
|
@@ -201,9 +256,9 @@ var urlToHttpOptions = e => {
|
|
|
201
256
|
async function _fetch(r, i) {
|
|
202
257
|
var f = (e => null != e && "object" == typeof e && "body" in e)(r);
|
|
203
258
|
var l = f ? r.url : r;
|
|
204
|
-
var
|
|
259
|
+
var c = f ? r.body : i?.body || null;
|
|
205
260
|
var d = f ? r.signal : i?.signal || void 0;
|
|
206
|
-
var
|
|
261
|
+
var y = (e => {
|
|
207
262
|
switch (e) {
|
|
208
263
|
case "follow":
|
|
209
264
|
case "manual":
|
|
@@ -217,18 +272,18 @@ async function _fetch(r, i) {
|
|
|
217
272
|
throw new TypeError(`Request constructor: ${e} is not an accepted type. Expected one of follow, manual, error.`);
|
|
218
273
|
}
|
|
219
274
|
})(f ? r.redirect : i?.redirect);
|
|
220
|
-
var
|
|
221
|
-
var
|
|
222
|
-
var
|
|
223
|
-
var
|
|
224
|
-
var
|
|
225
|
-
...urlToHttpOptions(
|
|
275
|
+
var p = new h(l);
|
|
276
|
+
var v = extractBody(c);
|
|
277
|
+
var b = 0;
|
|
278
|
+
var g = new Headers(i?.headers || (f ? r.headers : void 0));
|
|
279
|
+
var w = {
|
|
280
|
+
...urlToHttpOptions(p),
|
|
226
281
|
method: methodToHttpOption(f ? r.method : i?.method),
|
|
227
282
|
signal: d
|
|
228
283
|
};
|
|
229
284
|
return await new Promise((function _call(r, i) {
|
|
230
|
-
var f =
|
|
231
|
-
var l = ("https:" ===
|
|
285
|
+
var f = w.method;
|
|
286
|
+
var l = ("https:" === w.protocol ? a : s).request(w);
|
|
232
287
|
l.on("response", (e => {
|
|
233
288
|
e.setTimeout(0);
|
|
234
289
|
var o = {
|
|
@@ -238,31 +293,31 @@ async function _fetch(r, i) {
|
|
|
238
293
|
};
|
|
239
294
|
if (301 === (l = o.status) || 302 === l || 303 === l || 307 === l || 308 === l) {
|
|
240
295
|
var a = o.headers.get("Location");
|
|
241
|
-
var s = null != a ? new
|
|
242
|
-
if ("error" ===
|
|
296
|
+
var s = null != a ? new h(a, p) : null;
|
|
297
|
+
if ("error" === y) {
|
|
243
298
|
i(new Error("URI requested responds with a redirect, redirect mode is set to error"));
|
|
244
299
|
return;
|
|
245
|
-
} else if ("manual" ===
|
|
300
|
+
} else if ("manual" === y && null !== s) {
|
|
246
301
|
o.headers.set("Location", s.toString());
|
|
247
|
-
} else if ("follow" ===
|
|
248
|
-
if (++
|
|
249
|
-
i(new Error(`maximum redirect reached at: ${
|
|
302
|
+
} else if ("follow" === y && null !== s) {
|
|
303
|
+
if (++b > 20) {
|
|
304
|
+
i(new Error(`maximum redirect reached at: ${p}`));
|
|
250
305
|
return;
|
|
251
306
|
} else if ("http:" !== s.protocol && "https:" !== s.protocol) {
|
|
252
307
|
i(new Error("URL scheme must be a HTTP(S) scheme"));
|
|
253
308
|
return;
|
|
254
309
|
}
|
|
255
310
|
if (303 === o.status || (301 === o.status || 302 === o.status) && "POST" === f) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
} else if (null !=
|
|
311
|
+
v = extractBody(null);
|
|
312
|
+
w.method = "GET";
|
|
313
|
+
g.delete("Content-Length");
|
|
314
|
+
} else if (null != v.body && null == v.contentLength) {
|
|
260
315
|
i(new Error("Cannot follow redirect with a streamed body"));
|
|
261
316
|
return;
|
|
262
317
|
} else {
|
|
263
|
-
|
|
318
|
+
v = extractBody(c);
|
|
264
319
|
}
|
|
265
|
-
Object.assign(
|
|
320
|
+
Object.assign(w, urlToHttpOptions(p = s));
|
|
266
321
|
return _call(r, i);
|
|
267
322
|
}
|
|
268
323
|
}
|
|
@@ -284,23 +339,23 @@ async function _fetch(r, i) {
|
|
|
284
339
|
L = n(L, (e => {
|
|
285
340
|
switch (e) {
|
|
286
341
|
case "br":
|
|
287
|
-
return
|
|
288
|
-
flush:
|
|
289
|
-
finishFlush:
|
|
342
|
+
return u.createBrotliDecompress({
|
|
343
|
+
flush: u.constants.BROTLI_OPERATION_FLUSH,
|
|
344
|
+
finishFlush: u.constants.BROTLI_OPERATION_FLUSH
|
|
290
345
|
});
|
|
291
346
|
|
|
292
347
|
case "gzip":
|
|
293
348
|
case "x-gzip":
|
|
294
|
-
return
|
|
295
|
-
flush:
|
|
296
|
-
finishFlush:
|
|
349
|
+
return u.createGunzip({
|
|
350
|
+
flush: u.constants.Z_SYNC_FLUSH,
|
|
351
|
+
finishFlush: u.constants.Z_SYNC_FLUSH
|
|
297
352
|
});
|
|
298
353
|
|
|
299
354
|
case "deflate":
|
|
300
355
|
case "x-deflate":
|
|
301
356
|
return new InflateStream({
|
|
302
|
-
flush:
|
|
303
|
-
finishFlush:
|
|
357
|
+
flush: u.constants.Z_SYNC_FLUSH,
|
|
358
|
+
finishFlush: u.constants.Z_SYNC_FLUSH
|
|
304
359
|
});
|
|
305
360
|
|
|
306
361
|
default:
|
|
@@ -309,7 +364,7 @@ async function _fetch(r, i) {
|
|
|
309
364
|
})(T), destroy);
|
|
310
365
|
}
|
|
311
366
|
r(function createResponse(e, t, r) {
|
|
312
|
-
var n = new
|
|
367
|
+
var n = new m(e, t);
|
|
313
368
|
Object.defineProperty(n, "url", {
|
|
314
369
|
value: r.url
|
|
315
370
|
});
|
|
@@ -326,21 +381,21 @@ async function _fetch(r, i) {
|
|
|
326
381
|
return n;
|
|
327
382
|
}(L, o, {
|
|
328
383
|
type: "default",
|
|
329
|
-
url:
|
|
330
|
-
redirected:
|
|
384
|
+
url: p.toString(),
|
|
385
|
+
redirected: b > 0
|
|
331
386
|
}));
|
|
332
387
|
}));
|
|
333
388
|
l.on("error", i);
|
|
334
|
-
if (!
|
|
335
|
-
|
|
389
|
+
if (!g.has("Accept")) {
|
|
390
|
+
g.set("Accept", "*/*");
|
|
336
391
|
}
|
|
337
|
-
if (
|
|
338
|
-
|
|
392
|
+
if (v.contentType) {
|
|
393
|
+
g.set("Content-Type", v.contentType);
|
|
339
394
|
}
|
|
340
|
-
if (null ==
|
|
341
|
-
|
|
342
|
-
} else if (null !=
|
|
343
|
-
|
|
395
|
+
if (null == v.body && ("POST" === f || "PUT" === f)) {
|
|
396
|
+
g.set("Content-Length", "0");
|
|
397
|
+
} else if (null != v.body && null != v.contentLength) {
|
|
398
|
+
g.set("Content-Length", `${v.contentLength}`);
|
|
344
399
|
}
|
|
345
400
|
((e, t) => {
|
|
346
401
|
if ("function" == typeof e.setHeaders) {
|
|
@@ -350,14 +405,14 @@ async function _fetch(r, i) {
|
|
|
350
405
|
e.setHeader(r, n);
|
|
351
406
|
}
|
|
352
407
|
}
|
|
353
|
-
})(l,
|
|
354
|
-
if (null ==
|
|
408
|
+
})(l, g);
|
|
409
|
+
if (null == v.body) {
|
|
355
410
|
l.end();
|
|
356
|
-
} else if (
|
|
357
|
-
l.write(
|
|
411
|
+
} else if (v.body instanceof Uint8Array) {
|
|
412
|
+
l.write(v.body);
|
|
358
413
|
l.end();
|
|
359
414
|
} else {
|
|
360
|
-
var L =
|
|
415
|
+
var L = v.body instanceof o ? v.body : e.fromWeb(v.body);
|
|
361
416
|
n(L, l, (e => {
|
|
362
417
|
if (e) {
|
|
363
418
|
i(e);
|
|
@@ -367,5 +422,5 @@ async function _fetch(r, i) {
|
|
|
367
422
|
}));
|
|
368
423
|
}
|
|
369
424
|
|
|
370
|
-
export {
|
|
425
|
+
export { y as Blob, Body, d as File, g as FormData, b as Headers, v as Request, m as Response, h as URL, p as URLSearchParams, _fetch as default, _fetch as fetch };
|
|
371
426
|
//# sourceMappingURL=minifetch.mjs.map
|