mirror of
https://github.com/fmhy/edit.git
synced 2026-02-18 09:11:33 +11:00
comment
This commit is contained in:
parent
e6a599f579
commit
b8a82112dd
1 changed files with 16 additions and 1 deletions
|
|
@ -1,30 +1,45 @@
|
||||||
|
// Import the 'createContentLoader' function from VitePress and the 'groupBy' function from a local '../utils' module.
|
||||||
import { createContentLoader, type ContentData } from 'vitepress'
|
import { createContentLoader, type ContentData } from 'vitepress'
|
||||||
import { groupBy } from '../utils'
|
import { groupBy } from '../utils'
|
||||||
|
|
||||||
|
// Define an interface 'Post' that represents a blog post with a title, URL, and date.
|
||||||
interface Post {
|
interface Post {
|
||||||
title: string
|
title: string
|
||||||
url: string
|
url: string
|
||||||
date: string
|
date: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Declare a type 'Dictionary' as the return type of the 'transformRawPosts' function.
|
||||||
type Dictionary = ReturnType<typeof transformRawPosts>
|
type Dictionary = ReturnType<typeof transformRawPosts>
|
||||||
|
|
||||||
|
// Declare a constant 'data' of type 'Dictionary'.
|
||||||
declare const data: Dictionary
|
declare const data: Dictionary
|
||||||
|
|
||||||
|
// Export the 'data' constant for use in other modules.
|
||||||
export { data }
|
export { data }
|
||||||
|
|
||||||
|
// Define the 'transformRawPosts' function that takes an array of 'ContentData' objects and returns a dictionary of posts grouped by year.
|
||||||
function transformRawPosts(rawPosts: ContentData[]): Record<string, Post[]> {
|
function transformRawPosts(rawPosts: ContentData[]): Record<string, Post[]> {
|
||||||
|
// Map each 'ContentData' object to a 'Post' object, extracting the title, URL, and formatted date.
|
||||||
const posts: Post[] = rawPosts
|
const posts: Post[] = rawPosts
|
||||||
.map(({ url, frontmatter }) => ({
|
.map(({ url, frontmatter }) => ({
|
||||||
title: frontmatter.title,
|
title: frontmatter.title,
|
||||||
url,
|
url,
|
||||||
date: (frontmatter.date as Date).toISOString().slice(0, 10)
|
date: (frontmatter.date as Date).toISOString().slice(0, 10)
|
||||||
}))
|
}))
|
||||||
.sort((a, b) => b.date.localeCompare(a.date))
|
|
||||||
|
|
||||||
|
// Sort the posts in descending order by date.
|
||||||
|
.sort((a, b) => b.date.localeCompare(a.date))
|
||||||
|
|
||||||
|
// Group the posts by year using the 'groupBy' function from '../utils'.
|
||||||
return groupBy(posts, (post) => post.date.slice(0, 4))
|
return groupBy(posts, (post) => post.date.slice(0, 4))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Export the default 'createContentLoader' function, which is responsible for loading and processing the markdown files for blog posts.
|
||||||
export default createContentLoader('posts/*.md', {
|
export default createContentLoader('posts/*.md', {
|
||||||
|
// Include the source code when loading the markdown files.
|
||||||
includeSrc: true,
|
includeSrc: true,
|
||||||
|
|
||||||
|
// Transform the loaded raw markdown data using the 'transformRawPosts' function.
|
||||||
transform: (raw) => transformRawPosts(raw)
|
transform: (raw) => transformRawPosts(raw)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue