From be6a5c14296a253f2b232f653bea2131c808ab75 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 22 Nov 2022 17:28:55 +0000 Subject: [PATCH] fix: better headers.getAll polyfill --- packages/runtime/src/helpers/edge.ts | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/packages/runtime/src/helpers/edge.ts b/packages/runtime/src/helpers/edge.ts index 093850e078..de1dbe93f7 100644 --- a/packages/runtime/src/helpers/edge.ts +++ b/packages/runtime/src/helpers/edge.ts @@ -89,23 +89,18 @@ globalThis.process = { env: {...Deno.env.toObject(), NEXT_RUNTIME: 'edge', 'NEXT const self = {} let _ENTRIES = {} -class Response extends globalThis.Response { - constructor(body, init) { - super(body, init); - // Next.js uses this extension to the Headers API implemented by Cloudflare workerd - this.headers.getAll = (name) => { - name = name.toLowerCase(); - if (name !== "set-cookie") { - throw new Error("Headers.getAll is only supported for Set-Cookie"); - } - return [...this.headers.entries()] - .filter(([key]) => key === name) - .map(([, value]) => value); - }; - } +// Next.js uses this extension to the Headers API implemented by Cloudflare workerd +if(!('getAll' in Headers.prototype)) { + Headers.prototype.getAll = function getAll(name) { + name = name.toLowerCase(); + if (name !== "set-cookie") { + throw new Error("Headers.getAll is only supported for Set-Cookie"); + } + return [...this.entries()] + .filter(([key]) => key === name) + .map(([, value]) => value); + }; } - - // Next uses blob: urls to refer to local assets, so we need to intercept these const _fetch = globalThis.fetch const fetch = async (url, init) => {