diff --git a/docs/src/components/Test.astro b/docs/src/components/Test.astro new file mode 100644 index 00000000000..5d3bcaf7a17 --- /dev/null +++ b/docs/src/components/Test.astro @@ -0,0 +1,7 @@ +
I am purple
+ + diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx index 985a7e61a15..fb6a2f47b6e 100644 --- a/docs/src/content/docs/index.mdx +++ b/docs/src/content/docs/index.mdx @@ -28,6 +28,10 @@ hero: link: https://github.com/withastro/starlight --- +import Test from '../../components/Test.astro'; + + + import { CardGrid, Card } from '@astrojs/starlight/components'; import AboutAstro from '~/components/about-astro.astro'; import TestimonialGrid from '~/components/testimonial-grid.astro'; diff --git a/docs/src/pages/[...dog].astro b/docs/src/pages/[...dog].astro new file mode 100644 index 00000000000..b7c79b64c24 --- /dev/null +++ b/docs/src/pages/[...dog].astro @@ -0,0 +1,36 @@ +--- +import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro'; + +/** + * Two conditions must be met for the issue to occur: + * + * - Use a rest parameter for the route + * - Render `` + */ + +export function getStaticPaths() { + return [ + { params: { dog: 'clifford' } }, + { params: { dog: 'rover' } }, + { params: { dog: 'spot' } }, + ]; +} +--- + + +

This is a custom page

+
+ + + + diff --git a/packages/starlight/routes/common.astro b/packages/starlight/routes/common.astro index b96ef3fba4c..396f6c8ced0 100644 --- a/packages/starlight/routes/common.astro +++ b/packages/starlight/routes/common.astro @@ -1,6 +1,6 @@ --- import Page from '../components/Page.astro'; -import { useRouteData } from '../utils/routing/data'; +import { useRouteData } from '../utils/routing/use-data'; import { attachRouteDataAndRunMiddleware } from '../utils/routing/middleware'; await attachRouteDataAndRunMiddleware(Astro, await useRouteData(Astro)); diff --git a/packages/starlight/utils/routing/data.ts b/packages/starlight/utils/routing/data.ts index 302532d98e5..350d1d71040 100644 --- a/packages/starlight/utils/routing/data.ts +++ b/packages/starlight/utils/routing/data.ts @@ -117,7 +117,7 @@ export function getSiteTitleHref(locale: string | undefined): string { } /** Generate a route object for Starlight’s 404 page. */ -async function get404Route(locals: App.Locals): Promise { +export async function get404Route(locals: App.Locals): Promise { const { lang = BuiltInDefaultLocale.lang, dir = BuiltInDefaultLocale.dir } = config.defaultLocale || {}; let locale = config.defaultLocale?.locale; diff --git a/packages/starlight/utils/routing/use-data.ts b/packages/starlight/utils/routing/use-data.ts new file mode 100644 index 00000000000..5964f16f5f3 --- /dev/null +++ b/packages/starlight/utils/routing/use-data.ts @@ -0,0 +1,14 @@ +import type { APIContext } from 'astro'; +import { getRouteBySlugParam } from '../routing'; +import type { StarlightRouteData } from './types'; +import { render } from 'astro:content'; +import { generateRouteData, get404Route } from './data'; + +export async function useRouteData(context: APIContext): Promise { + const route = + ('slug' in context.params && getRouteBySlugParam(context.params.slug)) || + (await get404Route(context.locals)); + const { Content, headings } = await render(route.entry); + const routeData = generateRouteData({ props: { ...route, headings }, url: context.url }); + return { ...routeData, Content }; +}