aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/blog/feed.xml
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/blog/feed.xml')
-rw-r--r--src/routes/blog/feed.xml/+server.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/routes/blog/feed.xml/+server.ts b/src/routes/blog/feed.xml/+server.ts
new file mode 100644
index 0000000..a2a80f5
--- /dev/null
+++ b/src/routes/blog/feed.xml/+server.ts
@@ -0,0 +1,41 @@
+import { RSS_ROOT } from '$/lib';
+import { RSSChannelElement, RSSItemElement, RSSRootElement } from '$/lib/vendor/rss/rss';
+import { XMLDeclaration, XMLDocumentRoot, XMLElement, XMLRootElement, XMLText } from '$/lib/vendor/rss/xml'
+import { dev } from '$app/environment';
+import posts from '../posts';
+
+export const GET = async (req) => {
+ const doc = new XMLDocumentRoot().child(
+ new XMLDeclaration().version().encoding(),
+ new RSSRootElement()
+ .channel(
+ new RSSChannelElement(
+ 'Latest blog posts for 7222e800',
+ 'Some Fancy Description Here',
+ RSS_ROOT
+ )
+ .pubDate(new Date('2026-01-14T15:53:57Z') /* When the last item was published */)
+ .lastBuildDate(new Date() /* When this file was last updated - usually when your build process last ran */)
+ .language('en')
+ .child(new XMLElement('nonStandardElement').attribute('non-standard', 'true'))
+ .generator()
+ .items(
+ ...(await Promise.all(Object.values(posts)))
+ .filter(v => v.metadata.published === true || (dev && req.url.searchParams.has('include-unpublished')))
+ .map(({ metadata }) => {
+ const item = new RSSItemElement(`${metadata.published === true ? '' : metadata.published ? '🚧 ' : '🛑 '}${metadata.title}`, metadata.blurb, new URL(`${metadata.id}-${metadata.slug}`, RSS_ROOT));
+ if (metadata.author)
+ item.author(metadata.author);
+ item.pubDate(new Date(metadata.created));
+ item.guid(new URL(`${metadata.id}`, RSS_ROOT).href, true)
+ return item;
+ })
+ ),
+ )
+ )
+ return new Response(doc.toString(), {
+ headers: {
+ 'Content-Type': 'application/rss+xml;charset=utf-8'
+ }
+ })
+}