mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-12 13:38:32 +00:00
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
import { type PageData } from 'vitepress';
|
|
import getStructuredData from './getStructuredData';
|
|
import { createGeneralOGImage, createIconOGImage } from './createOGImage';
|
|
|
|
export async function transformPageData(pageData: PageData) {
|
|
pageData.frontmatter.head ??= [];
|
|
if (
|
|
pageData.relativePath.startsWith('icons/') &&
|
|
!pageData.relativePath.startsWith('icons/lab/') &&
|
|
pageData.params?.name
|
|
) {
|
|
const iconName = pageData.params.name;
|
|
pageData.title = `${iconName} icon details`;
|
|
|
|
const taggedAs = pageData.params?.tags?.length
|
|
? `Tagged as: ${pageData.params.tags.join(', ')}.`
|
|
: '';
|
|
const categorizedIn = pageData.params?.category?.length
|
|
? `Categorized in: ${pageData.params.category.join(', ')}.`
|
|
: '';
|
|
|
|
pageData.description =
|
|
`Details and related icons for ${iconName} icon. ${taggedAs} ${categorizedIn}`.trim();
|
|
|
|
const structuredData = await getStructuredData(iconName, pageData);
|
|
|
|
const ogPath = await createIconOGImage(iconName, pageData.params?.tags || []);
|
|
|
|
if (ogPath) {
|
|
const content = `https://lucide.dev${ogPath}`;
|
|
pageData.frontmatter.head.push(
|
|
[
|
|
'meta',
|
|
{
|
|
property: 'og:image',
|
|
content,
|
|
},
|
|
],
|
|
[
|
|
'meta',
|
|
{
|
|
property: 'twitter:image',
|
|
content,
|
|
},
|
|
],
|
|
);
|
|
}
|
|
|
|
pageData.frontmatter.head.push([
|
|
'script',
|
|
{ type: 'application/ld+json' },
|
|
JSON.stringify(structuredData),
|
|
]);
|
|
}
|
|
|
|
if (pageData.relativePath.startsWith('guide/')) {
|
|
const ogPath = await createGeneralOGImage(pageData);
|
|
|
|
if (ogPath) {
|
|
const content = `https://lucide.dev${ogPath}`;
|
|
pageData.frontmatter.head.push(
|
|
[
|
|
'meta',
|
|
{
|
|
property: 'og:image',
|
|
content,
|
|
},
|
|
],
|
|
[
|
|
'meta',
|
|
{
|
|
property: 'twitter:image',
|
|
content,
|
|
},
|
|
],
|
|
);
|
|
}
|
|
}
|
|
}
|