From 861f10eafd4bf4fa08b8e943d64adec51a4c9c1d Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Fri, 28 Jul 2023 12:00:26 -0400 Subject: [PATCH] Fix redirect in SSR (Node and dynamic) (#7856) --- .changeset/green-berries-flow.md | 5 +++++ packages/astro/src/@types/astro.ts | 3 ++- packages/astro/src/core/routing/manifest/serialization.ts | 3 +++ packages/astro/test/redirects.test.js | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changeset/green-berries-flow.md diff --git a/.changeset/green-berries-flow.md b/.changeset/green-berries-flow.md new file mode 100644 index 000000000000..38e894b5a5cf --- /dev/null +++ b/.changeset/green-berries-flow.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Properly serialize redirect config for SSR diff --git a/packages/astro/src/@types/astro.ts b/packages/astro/src/@types/astro.ts index fb34954ac743..e30ee3b9e23b 100644 --- a/packages/astro/src/@types/astro.ts +++ b/packages/astro/src/@types/astro.ts @@ -1962,9 +1962,10 @@ export type RedirectRouteData = RouteData & { redirect: string; }; -export type SerializedRouteData = Omit & { +export type SerializedRouteData = Omit & { generate: undefined; pattern: string; + redirectRoute: SerializedRouteData | undefined; _meta: { trailingSlash: AstroConfig['trailingSlash']; }; diff --git a/packages/astro/src/core/routing/manifest/serialization.ts b/packages/astro/src/core/routing/manifest/serialization.ts index f27477ecae5a..ddbe5eca3819 100644 --- a/packages/astro/src/core/routing/manifest/serialization.ts +++ b/packages/astro/src/core/routing/manifest/serialization.ts @@ -10,6 +10,7 @@ export function serializeRouteData( ...routeData, generate: undefined, pattern: routeData.pattern.source, + redirectRoute: routeData.redirectRoute ? serializeRouteData(routeData.redirectRoute, trailingSlash) : undefined, _meta: { trailingSlash }, }; } @@ -25,5 +26,7 @@ export function deserializeRouteData(rawRouteData: SerializedRouteData): RouteDa pathname: rawRouteData.pathname || undefined, segments: rawRouteData.segments, prerender: rawRouteData.prerender, + redirect: rawRouteData.redirect, + redirectRoute: rawRouteData.redirectRoute ? deserializeRouteData(rawRouteData.redirectRoute) : undefined, }; } diff --git a/packages/astro/test/redirects.test.js b/packages/astro/test/redirects.test.js index ecb13993a5ee..17c1070dc2ad 100644 --- a/packages/astro/test/redirects.test.js +++ b/packages/astro/test/redirects.test.js @@ -47,7 +47,7 @@ describe('Astro.redirect', () => { const request = new Request('http://example.com/api/redirect'); const response = await app.render(request); expect(response.status).to.equal(301); - expect(response.headers.get('Location')).to.equal('/'); + expect(response.headers.get('Location')).to.equal('/test'); }); it('Uses 308 for non-GET methods', async () => {