diff --git a/apps/svelte.dev/content/docs/svelte/98-reference/01-state.md b/apps/svelte.dev/content/docs/svelte/98-reference/01-$state.md similarity index 100% rename from apps/svelte.dev/content/docs/svelte/98-reference/01-state.md rename to apps/svelte.dev/content/docs/svelte/98-reference/01-$state.md diff --git a/apps/svelte.dev/src/lib/server/content.ts b/apps/svelte.dev/src/lib/server/content.ts index 3562d96867..6a02ca6131 100644 --- a/apps/svelte.dev/src/lib/server/content.ts +++ b/apps/svelte.dev/src/lib/server/content.ts @@ -60,10 +60,6 @@ function create_docs() { return slug.replace(/\/[^/]+(\/[^/]+)$/g, '$1'); } - function remove_docs(slugs: string) { - return slugs.replace(/^docs\//, ''); - } - let docs: { /** The top level entries/packages: svelte/kit/etc. Key is the topic */ topics: Record; @@ -74,7 +70,7 @@ function create_docs() { for (const topic of index.docs.children) { const pkg = topic.slug.split('/')[1]; const sections = topic.children; - const transformed_topic: Document = (docs.topics[remove_docs(topic.slug)] = { + const transformed_topic: Document = (docs.topics[topic.slug] = { ...topic, children: [] }); @@ -90,7 +86,12 @@ function create_docs() { for (const page of pages) { const slug = remove_section(page.slug); - const transformed_page: Document = (docs.pages[remove_docs(slug)] = { + + if (Object.hasOwn(docs.pages, slug)) { + throw new Error(`${docs.pages[slug].file} conflicts with ${page.file}`); + } + + const transformed_page: Document = (docs.pages[slug] = { ...page, slug, next: page.next?.slug.startsWith(`docs/${pkg}/`) diff --git a/apps/svelte.dev/src/routes/docs/[...path]/+layout.server.ts b/apps/svelte.dev/src/routes/docs/[...path]/+layout.server.ts index 56b4c3cb09..739c6e5d25 100644 --- a/apps/svelte.dev/src/routes/docs/[...path]/+layout.server.ts +++ b/apps/svelte.dev/src/routes/docs/[...path]/+layout.server.ts @@ -1,16 +1,22 @@ import { docs } from '$lib/server/content'; +import { redirect } from '@sveltejs/kit'; import { error } from '@sveltejs/kit'; export const prerender = true; export async function load({ params }) { - const page = docs.topics[params.path.split('/')[0]]; + const topic = params.path.split('/')[0]; + const document = docs.topics[`docs/${topic}`]; - if (!page) { + if (!document) { error(404, 'Not found'); } + if (params.path === topic) { + redirect(307, `/${document.children[0].children[0].slug}`); + } + return { - sections: page.children + sections: document.children }; } diff --git a/apps/svelte.dev/src/routes/docs/[...path]/+page.server.js b/apps/svelte.dev/src/routes/docs/[...path]/+page.server.js index 6f224b0712..286d0d0d8e 100644 --- a/apps/svelte.dev/src/routes/docs/[...path]/+page.server.js +++ b/apps/svelte.dev/src/routes/docs/[...path]/+page.server.js @@ -1,15 +1,11 @@ import { docs } from '$lib/server/content'; import { render_content } from '$lib/server/renderer'; -import { error, redirect } from '@sveltejs/kit'; +import { error } from '@sveltejs/kit'; export async function load({ params }) { - const document = docs.pages[params.path]; + const document = docs.pages[`docs/${params.path}`]; if (!document) { - const topic = docs.topics[params.path]; - if (topic) { - redirect(307, `/${topic.children[0].children[0].slug}`); - } error(404); }