Simplify duplicate slug checks

This commit is contained in:
Emile Bangma 2025-03-22 00:48:11 +00:00 committed by GitHub
parent 036c309c4b
commit 37e7e67518
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -46,18 +46,12 @@ function getAliasSlugs(aliases: string[]): FullSlug[] {
const isMd = getFileExtension(alias) === "md" const isMd = getFileExtension(alias) === "md"
const mockFp = isMd ? alias : alias + ".md" const mockFp = isMd ? alias : alias + ".md"
const slug = slugifyFilePath(mockFp as FilePath) const slug = slugifyFilePath(mockFp as FilePath)
pushSlugs(res, slug) res.push(slug)
} }
return res return res
} }
function pushSlugs<T>(arr: T[], ...items: T[]) {
for (const item of items) {
if (!arr.includes(item)) arr.push(item)
}
}
export const FrontMatter: QuartzTransformerPlugin<Partial<Options>> = (userOpts) => { export const FrontMatter: QuartzTransformerPlugin<Partial<Options>> = (userOpts) => {
const opts = { ...defaultOptions, ...userOpts } const opts = { ...defaultOptions, ...userOpts }
return { return {
@ -90,15 +84,15 @@ export const FrontMatter: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
if (aliases) { if (aliases) {
data.aliases = aliases // frontmatter data.aliases = aliases // frontmatter
file.data.aliases = getAliasSlugs(aliases) file.data.aliases = getAliasSlugs(aliases)
pushSlugs(allSlugs, ...file.data.aliases) allSlugs.push(...file.data.aliases)
} }
if (data.permalink != null && data.permalink.toString() !== "") { if (data.permalink != null && data.permalink.toString() !== "") {
data.permalink = data.permalink.toString() as FullSlug data.permalink = data.permalink.toString() as FullSlug
const aliases = file.data.aliases ?? [] const aliases = file.data.aliases ?? []
pushSlugs(aliases, data.permalink) aliases.push(data.permalink)
file.data.aliases = aliases file.data.aliases = aliases
pushSlugs(allSlugs, data.permalink) allSlugs.push(data.permalink)
} }
const cssclasses = coerceToArray(coalesceAliases(data, ["cssclasses", "cssclass"])) const cssclasses = coerceToArray(coalesceAliases(data, ["cssclasses", "cssclass"]))
@ -120,6 +114,11 @@ export const FrontMatter: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
if (socialImage) data.socialImage = socialImage if (socialImage) data.socialImage = socialImage
// Remove duplicate slugs
const uniqueSlugs = [...new Set(allSlugs)]
allSlugs.length = 0
uniqueSlugs.forEach((slug) => allSlugs.push(slug))
// fill in frontmatter // fill in frontmatter
file.data.frontmatter = data as QuartzPluginData["frontmatter"] file.data.frontmatter = data as QuartzPluginData["frontmatter"]
} }