import { createContentLoader, type ContentData } from 'vitepress' import { groupBy } from '../utils' interface Post { title: string url: string date: string } type Dictionary = ReturnType declare const data: Dictionary export { data } function transformRawPosts(rawPosts: ContentData[]): Record { const posts: Post[] = rawPosts .map(({ url, frontmatter }) => ({ title: frontmatter.title, url, date: (frontmatter.date as Date).toISOString().slice(0, 10) })) .sort((a, b) => b.date.localeCompare(a.date)) return groupBy(posts, (post) => post.date.slice(0, 4)) } export default createContentLoader('posts/*.md', { includeSrc: true, transform: (raw) => transformRawPosts(raw) })