diff --git a/.changeset/large-beans-accept.md b/.changeset/large-beans-accept.md new file mode 100644 index 000000000000..a4542ab385f3 --- /dev/null +++ b/.changeset/large-beans-accept.md @@ -0,0 +1,5 @@ +--- +"wrangler": patch +--- + +fix: Makes Response Headers object mutable after a call to `next()` in Pages Functions diff --git a/examples/pages-functions-app/functions/_middleware.ts b/examples/pages-functions-app/functions/_middleware.ts new file mode 100644 index 000000000000..524cb599838e --- /dev/null +++ b/examples/pages-functions-app/functions/_middleware.ts @@ -0,0 +1,5 @@ +export const onRequest = async ({ next }) => { + const response = await next(); + response.headers.set("x-custom", "header value"); + return response; +}; diff --git a/examples/pages-functions-app/tests/index.test.ts b/examples/pages-functions-app/tests/index.test.ts index dc4b478887dd..53147f889fa5 100644 --- a/examples/pages-functions-app/tests/index.test.ts +++ b/examples/pages-functions-app/tests/index.test.ts @@ -52,6 +52,7 @@ describe("Pages Functions", () => { it("renders static pages", async () => { const response = await waitUntilReady("http://localhost:8789/"); + expect(response.headers.get("x-custom")).toBe("header value"); const text = await response.text(); expect(text).toContain("Hello, world!"); }); diff --git a/packages/wrangler/pages/functions/template-worker.ts b/packages/wrangler/pages/functions/template-worker.ts index fb2f847da025..20ca1b4c656d 100644 --- a/packages/wrangler/pages/functions/template-worker.ts +++ b/packages/wrangler/pages/functions/template-worker.ts @@ -110,7 +110,7 @@ export default { // https://fetch.spec.whatwg.org/#null-body-status return new Response( [101, 204, 205, 304].includes(response.status) ? null : response.body, - response + { ...response, headers: new Headers([...response.headers.entries()]) } ); } else if (__FALLBACK_SERVICE__) { // There are no more handlers so finish with the fallback service (`env.ASSETS.fetch` in Pages' case)