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'>) => ` <![CDATA[${post.data.title}]]> ${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' } }) }