diff options
author | HiDeoo | 2025-02-20 00:13:33 +0100 |
---|---|---|
committer | GitHub | 2025-02-20 00:13:33 +0100 |
commit | ec5ca5953e62b6ad2de78996d37e08522aa4aa76 (patch) | |
tree | 717730815c062c47ef80261ab61c04c057c81f53 | |
parent | 070ec8be3812d3f750a1e2a56b8043049b05ea48 (diff) | |
download | IT.starlight-ec5ca5953e62b6ad2de78996d37e08522aa4aa76.tar.gz IT.starlight-ec5ca5953e62b6ad2de78996d37e08522aa4aa76.tar.bz2 IT.starlight-ec5ca5953e62b6ad2de78996d37e08522aa4aa76.zip |
Fix issue with rewriting (#2904)
Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>
-rw-r--r-- | .changeset/forty-ways-beam.md | 5 | ||||
-rw-r--r-- | packages/starlight/__e2e__/fixtures/ssr/src/middleware.ts | 8 | ||||
-rw-r--r-- | packages/starlight/__e2e__/ssr.test.ts | 8 | ||||
-rw-r--r-- | packages/starlight/locals.ts | 1 |
4 files changed, 22 insertions, 0 deletions
diff --git a/.changeset/forty-ways-beam.md b/.changeset/forty-ways-beam.md new file mode 100644 index 00000000..8ab92cb9 --- /dev/null +++ b/.changeset/forty-ways-beam.md @@ -0,0 +1,5 @@ +--- +'@astrojs/starlight': patch +--- + +Fixes an issue preventing the use of [rewrites](https://docs.astro.build/en/guides/routing/#rewrites). diff --git a/packages/starlight/__e2e__/fixtures/ssr/src/middleware.ts b/packages/starlight/__e2e__/fixtures/ssr/src/middleware.ts new file mode 100644 index 00000000..621cb87a --- /dev/null +++ b/packages/starlight/__e2e__/fixtures/ssr/src/middleware.ts @@ -0,0 +1,8 @@ +import { defineMiddleware } from 'astro:middleware'; + +export const onRequest = defineMiddleware((context, next) => { + if (context.url.pathname === '/content') { + return context.rewrite('/demo'); + } + return next(); +}); diff --git a/packages/starlight/__e2e__/ssr.test.ts b/packages/starlight/__e2e__/ssr.test.ts index 1bfd6d43..1c21e0a1 100644 --- a/packages/starlight/__e2e__/ssr.test.ts +++ b/packages/starlight/__e2e__/ssr.test.ts @@ -54,6 +54,14 @@ test('SSR mode renders the same splash page as prerendering', async ({ expectEquivalentHTML(prerenderContent, ssrContent); }); +test('supports middleware rewriting', async ({ page, getProdServer }) => { + const starlight = await getProdServer(); + const response = await starlight.goto('/content'); + + expect(response?.status()).toBe(200); + await expect(page.locator('#server-check')).toHaveText('On server'); +}); + function expectEquivalentHTML(a: string, b: string) { expect(getNormalizedHTML(a)).toEqual(getNormalizedHTML(b)); } diff --git a/packages/starlight/locals.ts b/packages/starlight/locals.ts index 5337f586..29088d26 100644 --- a/packages/starlight/locals.ts +++ b/packages/starlight/locals.ts @@ -20,6 +20,7 @@ export const onRequest = defineMiddleware(async (context, next) => { * avoid generating route data in this middleware which also runs for non-Starlight route. */ export function initializeStarlightRoute(context: APIContext) { + if ('starlightRoute' in context.locals) return; const state: { routeData: StarlightRouteData | undefined } = { routeData: undefined }; Object.defineProperty(context.locals, 'starlightRoute', { get() { |