aboutsummaryrefslogtreecommitdiff
path: root/src/js/thirdparty/node-fetch.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/thirdparty/node-fetch.js')
-rw-r--r--src/js/thirdparty/node-fetch.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/js/thirdparty/node-fetch.js b/src/js/thirdparty/node-fetch.js
new file mode 100644
index 000000000..899536d9b
--- /dev/null
+++ b/src/js/thirdparty/node-fetch.js
@@ -0,0 +1,63 @@
+const { Headers, Request, Response, Blob, File = Blob, FormData } = globalThis;
+const realFetch = Bun.fetch;
+
+function fetch(...args) {
+ // require("node-fetch") returns the default export which means we need to
+ // repeat the ESM exports onto it.
+ //
+ // We don't want to copy that onto the global fetch object, so we wrap it.
+ return realFetch(...args);
+}
+
+class AbortError extends DOMException {
+ constructor(message) {
+ super(message, "AbortError");
+ }
+}
+
+class FetchBaseError extends Error {
+ constructor(message, type) {
+ super(message);
+ this.type = type;
+ }
+}
+
+class FetchError extends FetchBaseError {
+ constructor(message, type, systemError) {
+ super(message, type);
+ this.code = systemError?.code;
+ }
+}
+
+function blobFrom(path, options) {
+ return Promise.resolve(Bun.file(data));
+}
+
+function blobFromSync(path, options) {
+ return Bun.file(data);
+}
+
+var fileFrom = blobFrom;
+var fileFromSync = blobFromSync;
+
+function isRedirect(code) {
+ return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+}
+
+export default Object.assign(fetch, {
+ AbortError,
+ Blob,
+ FetchBaseError,
+ FetchError,
+ File,
+ FormData,
+ Headers,
+ Request,
+ Response,
+ blobFrom,
+ blobFromSync,
+ fileFrom,
+ fileFromSync,
+ isRedirect,
+ fetch,
+});