import { getCollection, type CollectionEntry } from 'astro:content'
import { themeConfig } from '@/config'
import type { APIContext } from 'astro'
export async function generateRSS(context: APIContext) {
const posts = await getCollection('posts')
const filteredPosts = posts.filter((post: CollectionEntry<'posts'>) => !post.id.startsWith('_'))
const sortedPosts = filteredPosts.sort(
(a: CollectionEntry<'posts'>, b: CollectionEntry<'posts'>) =>
b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
)
const rss = `
${themeConfig.site.title}
${context.site}
${themeConfig.site.description}
zh-CN
${new Date().toUTCString()}
${sortedPosts
.map(
(post: CollectionEntry<'posts'>) => `
-
${context.site}/${post.id}/
${context.site}/${post.id}/
${post.data.pubDate.toUTCString()}
`
)
.join('')}
`
return new Response(rss, {
headers: {
'Content-Type': 'application/xml; charset=utf-8'
}
})
}
export async function generateAtom(context: APIContext) {
const posts = await getCollection('posts')
const filteredPosts = posts.filter((post: CollectionEntry<'posts'>) => !post.id.startsWith('_'))
const sortedPosts = filteredPosts.sort(
(a: CollectionEntry<'posts'>, b: CollectionEntry<'posts'>) =>
b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
)
const atom = `
${themeConfig.site.title}
${themeConfig.site.description}
${context.site}
${new Date().toISOString()}
${sortedPosts
.map(
(post: CollectionEntry<'posts'>) => `
${post.data.title}
${context.site}/${post.id}/
${post.data.pubDate.toISOString()}
`
)
.join('')}
`
return new Response(atom, {
headers: {
'Content-Type': 'application/xml; charset=utf-8'
}
})
}