From 8f84e70f2b70499d95286cbd208c3e931d890577 Mon Sep 17 00:00:00 2001 From: Emile Bangma Date: Wed, 19 Mar 2025 12:02:35 +0000 Subject: [PATCH] fix(frontmatter): prevent slug duplication through frontmatter --- quartz/plugins/transformers/frontmatter.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/quartz/plugins/transformers/frontmatter.ts b/quartz/plugins/transformers/frontmatter.ts index c04c52a24..a43b3b566 100644 --- a/quartz/plugins/transformers/frontmatter.ts +++ b/quartz/plugins/transformers/frontmatter.ts @@ -46,12 +46,18 @@ function getAliasSlugs(aliases: string[]): FullSlug[] { const isMd = getFileExtension(alias) === "md" const mockFp = isMd ? alias : alias + ".md" const slug = slugifyFilePath(mockFp as FilePath) - res.push(slug) + pushSlugs(res, slug) } return res } +function pushSlugs(arr: T[], ...items: T[]) { + for (const item of items) { + if (!arr.includes(item)) arr.push(item) + } +} + export const FrontMatter: QuartzTransformerPlugin> = (userOpts) => { const opts = { ...defaultOptions, ...userOpts } return { @@ -84,15 +90,15 @@ export const FrontMatter: QuartzTransformerPlugin> = (userOpts) if (aliases) { data.aliases = aliases // frontmatter file.data.aliases = getAliasSlugs(aliases) - allSlugs.push(...file.data.aliases) + pushSlugs(allSlugs, ...file.data.aliases) } if (data.permalink != null && data.permalink.toString() !== "") { data.permalink = data.permalink.toString() as FullSlug const aliases = file.data.aliases ?? [] - aliases.push(data.permalink) + pushSlugs(aliases, data.permalink) file.data.aliases = aliases - allSlugs.push(data.permalink) + pushSlugs(allSlugs, data.permalink) } const cssclasses = coerceToArray(coalesceAliases(data, ["cssclasses", "cssclass"]))