diff --git a/.changeset/kind-dodos-shop.md b/.changeset/kind-dodos-shop.md new file mode 100644 index 0000000000..339f506e08 --- /dev/null +++ b/.changeset/kind-dodos-shop.md @@ -0,0 +1,5 @@ +--- +"@remix-run/router": patch +--- + +Persist `headers` on `loader` `request`'s after SSR document `action` request diff --git a/packages/router/__tests__/router-test.ts b/packages/router/__tests__/router-test.ts index f8939b6378..6f447ebd12 100644 --- a/packages/router/__tests__/router-test.ts +++ b/packages/router/__tests__/router-test.ts @@ -10935,7 +10935,13 @@ describe("a router", () => { ], }, ]); - await query(createSubmitRequest("/child")); + await query( + createSubmitRequest("/child", { + headers: { + test: "value", + }, + }) + ); // @ts-expect-error let actionRequest = actionStub.mock.calls[0][0]?.request; @@ -10952,8 +10958,12 @@ describe("a router", () => { let childLoaderRequest = childLoaderStub.mock.calls[0][0]?.request; expect(rootLoaderRequest.method).toBe("GET"); expect(rootLoaderRequest.url).toBe("http://localhost/child"); + expect(rootLoaderRequest.headers.get("test")).toBe("value"); + expect(await rootLoaderRequest.text()).toBe(""); expect(childLoaderRequest.method).toBe("GET"); expect(childLoaderRequest.url).toBe("http://localhost/child"); + expect(childLoaderRequest.headers.get("test")).toBe("value"); + // Can't re-read body here since it's the same request as the root }); it("should support a requestContext passed to loaders and actions", async () => { diff --git a/packages/router/router.ts b/packages/router/router.ts index 6fa916608b..c3becf195f 100644 --- a/packages/router/router.ts +++ b/packages/router/router.ts @@ -2257,7 +2257,11 @@ export function unstable_createStaticHandler( } // Create a GET request for the loaders - let loaderRequest = new Request(request.url, { signal: request.signal }); + let loaderRequest = new Request(request.url, { + headers: request.headers, + redirect: request.redirect, + signal: request.signal, + }); let context = await loadRouteData(loaderRequest, matches, requestContext); return {