From a26031d490ac0af68ed1e5285cdcced7bfcbe1b8 Mon Sep 17 00:00:00 2001 From: radishzzz Date: Sat, 25 Jan 2025 03:14:52 +0000 Subject: [PATCH] feat: add custom slug validation and handling for posts - Enhance content configuration with slug validation to ensure only valid characters are used - Update post routing to support custom slugs with fallback to default slug - Implement slug duplication check to prevent conflicts across different languages - Modify various page components to use custom or default slugs in URL generation --- src/content/config.ts | 14 +++++++++++++- src/pages/[lang]/index.astro | 4 ++-- src/pages/[lang]/posts/[slug].astro | 12 +++++++++++- src/pages/[lang]/rss.xml.ts | 2 +- src/pages/[lang]/tags/[tags].astro | 2 +- src/pages/index.astro | 4 ++-- src/pages/posts/[slug].astro | 11 ++++++++++- src/pages/rss.xml.ts | 2 +- src/pages/tags/[tags].astro | 2 +- src/utils/content.config.ts | 25 +++++++++++++++++++++++++ 10 files changed, 67 insertions(+), 11 deletions(-) diff --git a/src/content/config.ts b/src/content/config.ts index a5ac255..dc035c6 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -11,7 +11,19 @@ const postsCollection = defineCollection({ image: z.string().optional().default(''), // Extended Settings lang: z.string().optional().default(''), - slug: z.string().optional().default(''), + slug: z.string() + .optional() + .default('') + .refine( + (slug) => { + if (!slug) + return true + return /^[\w\-]*$/.test(slug) + }, + { + message: 'Slug can only contain letters, numbers, hyphens and underscores', + }, + ), toc: z.boolean().optional().default(false), pin: z.boolean().optional().default(false), draft: z.boolean().optional().default(false), diff --git a/src/pages/[lang]/index.astro b/src/pages/[lang]/index.astro index 87d2755..def533c 100644 --- a/src/pages/[lang]/index.astro +++ b/src/pages/[lang]/index.astro @@ -21,7 +21,7 @@ const posts = await getPosts()