42 lines
834 B
TypeScript
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",
|
|
}),
|
|
};
|
|
}
|