simon-einzinger.de/docs/.vitepress/theme/composables/posts.data.ts
2025-01-24 19:05:29 +01:00

42 lines
834 B
TypeScript

import { createContentLoader } from "vitepress";
interface Post {
title: string;
url: string;
date: {
time: number;
string: string;
};
excerpt: string | undefined;
}
declare const data: Post[];
export { data };
export default createContentLoader("posts/*.md", {
excerpt: true,
transform(raw): Post[] {
return raw
.map(({ url, frontmatter, excerpt }) => ({
title: frontmatter.title,
url,
excerpt,
date: formatDate(frontmatter.date),
}))
.sort((a, b) => a.title.localeCompare(b.title));
},
});
function formatDate(raw: string): Post["date"] {
const date = new Date(raw);
date.setUTCHours(12);
return {
time: +date,
string: date.toLocaleDateString("de-DE", {
year: "numeric",
month: "long",
day: "numeric",
}),
};
}