import rss from "@astrojs/rss"; import type { APIRoute } from "astro"; import { getCollection, render } from "astro:content"; import { blogFeedItem, type EntryWithPubDate } from "@utils/feed"; const MAX_ITEMS = 8; export const GET: APIRoute = async ({ site }) => { if (!site) { throw new Error("site is required."); } const posts = ( (await getCollection("blog", (post) => !post.data.isDraft && post.data.pubDate)) as EntryWithPubDate<"blog">[] ) .sort((a, b) => b.data.pubDate.getTime() - a.data.pubDate.getTime()) .slice(0, MAX_ITEMS); return rss({ title: "Blog | Bad Manners", description: "Blog posts by Bad Manners.", site: new URL("blog", site), xmlns: { atom: "http://www.w3.org/2005/Atom" }, customData: ``, items: await Promise.all( posts.map(async (post) => blogFeedItem(site, post.data, post.id, (await render(post)).Content)), ), }); };