FMHY-Website/website/theme/posts.data.ts
taskylizard 16bf6230c0
k
2025-06-27 22:54:07 +00:00

33 lines
821 B
TypeScript

import type { ContentData } from 'vitepress'
import { createContentLoader } from 'vitepress'
import { groupBy } from '../utils'
interface Post {
title: string
url: string
date: string
}
// prettier-ignore
type Dictionary = ReturnType<typeof createContentLoader>;
declare const data: Dictionary
export { data }
// prettier-ignore
function transformRawPosts(rawPosts: ContentData[]): Record<string, Post[]> {
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)
})