Add hierarchical social metadata overrides
This commit is contained in:
parent
5486f04aac
commit
218e9cb661
2 changed files with 33 additions and 2 deletions
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
23
quartz/util/siteSocialOverrides.ts
Normal file
23
quartz/util/siteSocialOverrides.ts
Normal 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
|
||||
}
|
||||
Loading…
Reference in a new issue