Add hierarchical social metadata overrides

This commit is contained in:
Meta Vens 2026-06-24 13:38:39 +01:00
commit 218e9cb661
2 changed files with 33 additions and 2 deletions

View file

@ -1,4 +1,5 @@
import { QuartzPluginData } from "../plugins/vfile"
import { mergeHierarchicalSocialMetadata, socialMetadataSlug } from "./siteSocialOverrides"
export type SocialImageRef =
| {
@ -23,6 +24,13 @@ export type SiteSocialMetadata = {
image?: SocialImageRef
}
export function resolveSiteSocialMetadata(_fileData: QuartzPluginData): SiteSocialMetadata {
return {}
const siteSocialMetadata: SiteSocialMetadata = {}
const siteSocialMetadataOverrides: Record<string, SiteSocialMetadata> = {}
export function resolveSiteSocialMetadata(fileData: QuartzPluginData): SiteSocialMetadata {
return mergeHierarchicalSocialMetadata(
siteSocialMetadata,
socialMetadataSlug(fileData),
siteSocialMetadataOverrides,
)
}

View file

@ -0,0 +1,23 @@
import { QuartzPluginData } from "../plugins/vfile"
export function socialMetadataSlug(fileData: QuartzPluginData): string {
return typeof fileData.slug === "string" ? fileData.slug : "index"
}
export function findHierarchicalSocialMetadata<T>(
slug: string,
overrides: Record<string, T>,
): T | undefined {
return Object.entries(overrides)
.filter(([prefix]) => slug === prefix || slug.startsWith(`${prefix}/`))
.sort(([left], [right]) => right.length - left.length)[0]?.[1]
}
export function mergeHierarchicalSocialMetadata<T extends object>(
baseMetadata: T,
slug: string,
overrides: Record<string, Partial<T>>,
): T {
const matchingOverride = findHierarchicalSocialMetadata(slug, overrides)
return matchingOverride ? { ...baseMetadata, ...matchingOverride } : baseMetadata
}