43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
import { baseUrl } from 'app/sitemap'
|
|
import { getBlogPosts } from 'app/blog/utils'
|
|
|
|
export async function GET() {
|
|
let allBlogs = await getBlogPosts()
|
|
|
|
const itemsXml = allBlogs
|
|
.sort((a, b) => {
|
|
if (new Date(a.metadata.publishedAt) > new Date(b.metadata.publishedAt)) {
|
|
return -1
|
|
}
|
|
return 1
|
|
})
|
|
.map(
|
|
(post) =>
|
|
`<item>
|
|
<title>${post.metadata.title}</title>
|
|
<link>${baseUrl}/blog/${post.slug}</link>
|
|
<description>${post.metadata.summary || ''}</description>
|
|
<pubDate>${new Date(
|
|
post.metadata.publishedAt
|
|
).toUTCString()}</pubDate>
|
|
</item>`
|
|
)
|
|
.join('\n')
|
|
|
|
const rssFeed = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
<rss version="2.0">
|
|
<channel>
|
|
<title>My Portfolio</title>
|
|
<link>${baseUrl}</link>
|
|
<description>This is my portfolio RSS feed</description>
|
|
${itemsXml}
|
|
</channel>
|
|
</rss>`
|
|
|
|
return new Response(rssFeed, {
|
|
headers: {
|
|
'Content-Type': 'text/xml',
|
|
},
|
|
})
|
|
}
|