Files
AFFiNE-Mirror/blocksuite/docs-site/.vitepress/theme/composables/posts.data.ts
2026-04-29 17:23:23 +08:00

45 lines
1.0 KiB
TypeScript

import { format, formatDistance } from 'date-fns';
import { createContentLoader } from 'vitepress';
interface Post {
title: string;
authors: { name: string; link: string }[];
url: string;
date: {
raw: string;
time: number;
formatted: string;
since: string;
};
}
function formatDate(raw: string) {
const date = new Date(raw);
date.setUTCHours(8);
return {
raw: date.toISOString().split('T')[0],
time: +date,
formatted: format(date, 'yyyy/MM/dd'),
since: formatDistance(date, new Date(), { addSuffix: true }),
};
}
const data = [] as Post[];
export { data };
export default createContentLoader('blog/*.md', {
includeSrc: true,
transform(raw) {
return raw
.filter(item => item.url !== '/blog/')
.map(({ url, frontmatter }) => ({
title: frontmatter.title,
authors: frontmatter.authors ?? [],
excerpt: frontmatter.excerpt ?? '',
url,
date: formatDate(frontmatter.date),
}))
.sort((a, b) => b.date.time - a.date.time);
},
});