aboutsummaryrefslogtreecommitdiff
path: root/src/node-fallbacks/@vercel_fetch.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-09 05:40:07 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-09 05:40:07 -0700
commit8a02ad48a5eb1319c1bf3e9eb97e013924db875f (patch)
tree0d82d072026501e6e8086712764a1b9b45f87218 /src/node-fallbacks/@vercel_fetch.js
parentc30ec608b1484628cc28b4811b9d62e1c142b281 (diff)
downloadbun-8a02ad48a5eb1319c1bf3e9eb97e013924db875f.tar.gz
bun-8a02ad48a5eb1319c1bf3e9eb97e013924db875f.tar.zst
bun-8a02ad48a5eb1319c1bf3e9eb97e013924db875f.zip
fetc h!!!
Diffstat (limited to 'src/node-fallbacks/@vercel_fetch.js')
-rw-r--r--src/node-fallbacks/@vercel_fetch.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/node-fallbacks/@vercel_fetch.js b/src/node-fallbacks/@vercel_fetch.js
new file mode 100644
index 000000000..5ab626670
--- /dev/null
+++ b/src/node-fallbacks/@vercel_fetch.js
@@ -0,0 +1,31 @@
+// This is just a no-op. Intent is to prevent importing a bunch of stuff that isn't relevant.
+module.exports = (wrapper = Bun.fetch) => {
+ return async function vercelFetch(url, opts = {}) {
+ // Convert Object bodies to JSON if they are JS objects
+ if (
+ opts.body &&
+ typeof opts.body === "object" &&
+ (!("buffer" in opts.body) ||
+ typeof opts.body.buffer !== "object" ||
+ !(opts.body.buffer instanceof ArrayBuffer))
+ ) {
+ opts.body = JSON.stringify(opts.body);
+ // Content length will automatically be set
+ if (!opts.headers) opts.headers = new Headers();
+
+ opts.headers.set("Content-Type", "application/json");
+ }
+
+ try {
+ return await wrapper(url, opts);
+ } catch (err) {
+ if (typeof err === "string") {
+ err = new Error(err);
+ }
+
+ err.url = url;
+ err.opts = opts;
+ throw err;
+ }
+ };
+};