summaryrefslogtreecommitdiff
path: root/packages/webapi/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/webapi/src')
-rw-r--r--packages/webapi/src/lib/fetch.ts102
-rw-r--r--packages/webapi/src/ponyfill.ts9
-rw-r--r--packages/webapi/src/types.d.ts2
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'