summaryrefslogtreecommitdiff
path: root/src/pages/rss.xml.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/rss.xml.ts')
-rw-r--r--src/pages/rss.xml.ts37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts
new file mode 100644
index 0000000..f8831b7
--- /dev/null
+++ b/src/pages/rss.xml.ts
@@ -0,0 +1,37 @@
+import { getRssString } from '@astrojs/rss';
+
+import { SITE, METADATA, APP_BLOG } from 'astrowind:config';
+import { fetchPosts } from '~/utils/blog';
+import { getPermalink } from '~/utils/permalinks';
+
+export const GET = async () => {
+ if (!APP_BLOG.isEnabled) {
+ return new Response(null, {
+ status: 404,
+ statusText: 'Not found',
+ });
+ }
+
+ const posts = await fetchPosts();
+
+ const rss = await getRssString({
+ title: `${SITE.name}’s Blog`,
+ description: METADATA?.description || '',
+ site: import.meta.env.SITE,
+
+ items: posts.map((post) => ({
+ link: getPermalink(post.permalink, 'post'),
+ title: post.title,
+ description: post.excerpt,
+ pubDate: post.publishDate,
+ })),
+
+ trailingSlash: SITE.trailingSlash,
+ });
+
+ return new Response(rss, {
+ headers: {
+ 'Content-Type': 'application/xml',
+ },
+ });
+};