diff options
author | 2023-07-28 12:00:26 -0400 | |
---|---|---|
committer | 2023-07-28 12:00:26 -0400 | |
commit | 861f10eafd4bf4fa08b8e943d64adec51a4c9c1d (patch) | |
tree | 1d25b77bfcebd7bfd178b26d1dbb8e5c3c946e65 | |
parent | 98ca04f91546ed620f9a3ec0d35a6f597fb11e97 (diff) | |
download | astro-861f10eafd4bf4fa08b8e943d64adec51a4c9c1d.tar.gz astro-861f10eafd4bf4fa08b8e943d64adec51a4c9c1d.tar.zst astro-861f10eafd4bf4fa08b8e943d64adec51a4c9c1d.zip |
Fix redirect in SSR (Node and dynamic) (#7856)
-rw-r--r-- | .changeset/green-berries-flow.md | 5 | ||||
-rw-r--r-- | packages/astro/src/@types/astro.ts | 3 | ||||
-rw-r--r-- | packages/astro/src/core/routing/manifest/serialization.ts | 3 | ||||
-rw-r--r-- | packages/astro/test/redirects.test.js | 2 |
4 files changed, 11 insertions, 2 deletions
diff --git a/.changeset/green-berries-flow.md b/.changeset/green-berries-flow.md new file mode 100644 index 000000000..38e894b5a --- /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 fb34954ac..e30ee3b9e 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<RouteData, 'generate' | 'pattern'> & { +export type SerializedRouteData = Omit<RouteData, 'generate' | 'pattern' | 'redirectRoute'> & { 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 f27477eca..ddbe5eca3 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 ecb13993a..17c1070dc 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 () => { |