blog/src/pages/rss.xml.ts

32 lines
1020 B
TypeScript
Raw Normal View History

2024-08-03 16:40:20 +08:00
import { siteConfig } from '@/config'
import rss from '@astrojs/rss'
import { getSortedPosts } from '@utils/content-utils'
import type { APIContext } from 'astro'
2024-08-03 16:40:20 +08:00
import MarkdownIt from 'markdown-it'
import sanitizeHtml from 'sanitize-html'
2024-08-03 16:40:20 +08:00
const parser = new MarkdownIt()
export async function GET(context: APIContext) {
2024-08-03 16:40:20 +08:00
const blog = await getSortedPosts()
return rss({
title: siteConfig.title,
description: siteConfig.subtitle || 'No description',
site: context.site ?? 'https://fuwari.vercel.app',
items: blog.map(post => {
const body = typeof post.data.body === 'string' ? post.data.body : ''
return {
title: post.data.title,
pubDate: post.data.published,
description: post.data.description || '',
link: `/posts/${post.slug}/`,
content: sanitizeHtml(parser.render(body), {
allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']),
}),
}
}),
customData: `<language>${siteConfig.lang}</language>`,
2024-08-03 16:40:20 +08:00
})
}