diff options
Diffstat (limited to 'packages/webapi/src')
-rw-r--r-- | packages/webapi/src/lib/fetch.ts | 102 | ||||
-rw-r--r-- | packages/webapi/src/ponyfill.ts | 9 | ||||
-rw-r--r-- | packages/webapi/src/types.d.ts | 2 |
3 files changed, 7 insertions, 106 deletions
diff --git a/packages/webapi/src/lib/fetch.ts b/packages/webapi/src/lib/fetch.ts deleted file mode 100644 index f8500a846..000000000 --- a/packages/webapi/src/lib/fetch.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { bootstrap as bootstrapGlobalAgent } from 'global-agent' -import type { RequestInit } from 'node-fetch' -import { default as nodeFetch, Headers, Request, Response } from 'node-fetch' -import Stream from 'node:stream' -import * as _ from './utils' - -bootstrapGlobalAgent({ - environmentVariableNamespace: '', -}) - -export { Headers, Request, Response } - -export const fetch = { - fetch( - resource: string | Request, - init?: Partial<FetchInit> - ): Promise<Response> { - const resourceURL = new URL( - _.__object_isPrototypeOf(Request.prototype, resource) - ? (resource as Request).url - : _.pathToPosix(resource), - typeof Object(globalThis.process).cwd === 'function' - ? 'file:' + _.pathToPosix(process.cwd()) + '/' - : 'file:' - ) - - if (resourceURL.protocol.toLowerCase() === 'file:') { - return import('node:fs').then((fs) => { - try { - const stats = fs.statSync(resourceURL) - const body = fs.createReadStream(resourceURL) - - return new Response(body, { - status: 200, - statusText: '', - headers: { - 'content-length': String(stats.size), - date: new Date().toUTCString(), - 'last-modified': new Date(stats.mtimeMs).toUTCString(), - }, - }) - } catch (error) { - const body = new Stream.Readable() - - body._read = () => {} - body.push(null) - - return new Response(body, { - status: 404, - statusText: '', - headers: { - date: new Date().toUTCString(), - }, - }) - } - }) - } else { - return nodeFetch(resource, init) - } - }, -}.fetch - -type USVString = {} & string - -interface FetchInit { - body: RequestInit['body'] - cache: - | 'default' - | 'no-store' - | 'reload' - | 'no-cache' - | 'force-cache' - | 'only-if-cached' - credentials: 'omit' | 'same-origin' | 'include' - headers: Headers | Record<string, string> - method: - | 'GET' - | 'HEAD' - | 'POST' - | 'PUT' - | 'DELETE' - | 'CONNECT' - | 'OPTIONS' - | 'TRACE' - | 'PATCH' - | USVString - mode: 'cors' | 'no-cors' | 'same-origin' | USVString - redirect: 'follow' | 'manual' | 'error' - referrer: USVString - referrerPolicy: - | 'no-referrer' - | 'no-referrer-when-downgrade' - | 'same-origin' - | 'origin' - | 'strict-origin' - | 'origin-when-cross-origin' - | 'strict-origin-when-cross-origin' - | 'unsafe-url' - integrity: USVString - keepalive: boolean - signal: AbortSignal -} diff --git a/packages/webapi/src/ponyfill.ts b/packages/webapi/src/ponyfill.ts index fc92975b5..a1088bdb4 100644 --- a/packages/webapi/src/ponyfill.ts +++ b/packages/webapi/src/ponyfill.ts @@ -7,6 +7,7 @@ import { import { Event, EventTarget } from 'event-target-shim' import { Blob, File } from 'fetch-blob/from.js' import { FormData } from 'formdata-polyfill/esm.min.js' +import * as undici from 'undici' import { URLPattern } from 'urlpattern-polyfill' import { ByteLengthQueuingStrategy, @@ -21,7 +22,7 @@ import { WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter, -} from 'web-streams-polyfill/dist/ponyfill.es6.mjs' +} from 'node:stream/web' import { cancelAnimationFrame, requestAnimationFrame, @@ -30,7 +31,6 @@ import { atob, btoa } from './lib/Base64' import { CharacterData, Comment, Text } from './lib/CharacterData' import { CustomEvent } from './lib/CustomEvent' import { DOMException } from './lib/DOMException' -import { fetch, Headers, Request, Response } from './lib/fetch' import { cancelIdleCallback, requestIdleCallback } from './lib/IdleCallback' import structuredClone from './lib/structuredClone' import { clearTimeout, setTimeout } from './lib/Timeout' @@ -83,6 +83,11 @@ import { initPromise } from './lib/Promise' import { initRelativeIndexingMethod } from './lib/RelativeIndexingMethod' import { initString } from './lib/String' +const fetch = undici.fetch +const Headers = undici.Headers +const Response = undici.Response +const Request = undici.Request + export { AbortController, AbortSignal, diff --git a/packages/webapi/src/types.d.ts b/packages/webapi/src/types.d.ts index 09c57387b..2597566ee 100644 --- a/packages/webapi/src/types.d.ts +++ b/packages/webapi/src/types.d.ts @@ -3,5 +3,3 @@ declare module '@ungap/structured-clone/esm/index.js' declare module '@ungap/structured-clone/esm/deserialize.js' declare module '@ungap/structured-clone/esm/serialize.js' declare module 'abort-controller/dist/abort-controller.mjs' -declare module 'node-fetch/src/index.js' -declare module 'web-streams-polyfill/dist/ponyfill.es6.mjs' |