From 0c1f37dd044ddc2cd06eb6d8190c2c716e5f421c Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 11 Nov 2022 19:16:35 +0000 Subject: [PATCH] fix: polyfill headers.getAll --- packages/runtime/src/helpers/edge.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/runtime/src/helpers/edge.ts b/packages/runtime/src/helpers/edge.ts index 76ee557d64..093850e078 100644 --- a/packages/runtime/src/helpers/edge.ts +++ b/packages/runtime/src/helpers/edge.ts @@ -89,6 +89,23 @@ 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 uses blob: urls to refer to local assets, so we need to intercept these const _fetch = globalThis.fetch const fetch = async (url, init) => {