import { listPosts } from '~~/server/utils/posts' import { getSiteData } from '~~/server/utils/site' const escape = (s: string) => s.replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') export default defineEventHandler(async (event) => { const base = useRuntimeConfig().public.siteUrl.replace(/\/+$/, '') const posts = (await listPosts()).filter((p) => !p.draft).slice(0, 30) const site = await getSiteData() const items = posts .map( (post) => ` ${escape(post.title)} ${base}/blog/${post.slug} ${base}/blog/${post.slug} ${new Date(post.date).toUTCString()} ${escape(post.description)} ${post.tags.map((t) => ` ${escape(t)}`).join('\n')} `, ) .join('\n') const xml = ` ${escape(site.domain)} ${base} ${escape(site.description)} en ${new Date().toUTCString()} ${items} ` setHeader(event, 'content-type', 'application/rss+xml; charset=utf-8') setHeader(event, 'cache-control', 'public, max-age=600') return xml })