import {NextRequest} from 'next/server' import {Feed} from 'feed' import * as cheerio from 'cheerio' import {getAllArticles} from '@/lib/getAllArticles' export async function GET(req: NextRequest) { let siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? "" let articles = await getAllArticles() let author = { name: 'Ryan Freeman', email: 'hello@ryanfreeman.dev' } let feed = new Feed({ title: author.name, description: 'Full-stack software engineer who enjoys building cloud-native applications.', author, id: siteUrl, link: siteUrl, image: `${siteUrl}/favicon.ico`, favicon: `${siteUrl}/favicon.ico`, copyright: `Copyright ${(new Date).getFullYear()} Ryan Freeman. All rights reserved.`, feedLinks: { rss2: `${siteUrl}/feed.xml` } }) for (let article of articles) { let url = `${siteUrl}/writing/${article.slug}` let html = await (await fetch(url)).text() let $ = cheerio.load(html) let _article = $('article').first() let title = _article.find('h1').first().text() let date = _article.find('time').first().attr('datetime') ?? new Date() let content = _article.find('.prose').first().html() ?? "" feed.addItem({ title, id: url, link: url, content, author: [author], contributor: [author], date: new Date(date) }) } return new Response(feed.rss2(), { status: 200, headers: { 'Content-Type': 'application/xml' } }) }