diff --git a/package.json b/package.json index 13fae493..3fab28cf 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "@astrojs/partytown": "^1.0.3", + "@astrojs/rss": "^2.1.1", "@astrojs/sitemap": "^1.1.0", "@astrojs/tailwind": "^3.0.1", "astro": "^2.0.15", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index deac1903..263fbf33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,6 +2,7 @@ lockfileVersion: 5.4 specifiers: '@astrojs/partytown': ^1.0.3 + '@astrojs/rss': ^2.1.1 '@astrojs/sitemap': ^1.1.0 '@astrojs/tailwind': ^3.0.1 '@commitlint/cli': ^17.4.4 @@ -31,6 +32,7 @@ specifiers: dependencies: '@astrojs/partytown': 1.0.3 + '@astrojs/rss': 2.1.1 '@astrojs/sitemap': 1.1.0 '@astrojs/tailwind': 3.0.1_enl5tymeuxlslzmmdrwlr7zkvy astro: 2.0.15_435aevtanapkguv7m72cl6trbi @@ -132,6 +134,13 @@ packages: prismjs: 1.29.0 dev: false + /@astrojs/rss/2.1.1: + resolution: {integrity: sha512-3BpCqyCmVWfrGqyc1YXUQf7O3QjORYNmvxzeKvp0E+7KGiKj8ckRzwj90xGYjbKcb/BwKfzYgek4+BrZ1aqQtA==} + dependencies: + fast-xml-parser: 4.1.2 + kleur: 4.1.5 + dev: false + /@astrojs/sitemap/1.1.0: resolution: {integrity: sha512-JnKZcbD0WdFxw2VAj3qXb0cYKuvk6nwBYPfUy+plSa9TC9hikQrDFpd7yapOPTRf3AdmUittzFckoTw/nUilCw==} dependencies: @@ -2547,6 +2556,13 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-xml-parser/4.1.2: + resolution: {integrity: sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastq/1.14.0: resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} dependencies: @@ -4996,6 +5012,10 @@ packages: engines: {node: '>=8'} dev: true + /strnum/1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /style-to-object/0.3.0: resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} dependencies: diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts new file mode 100644 index 00000000..2592b977 --- /dev/null +++ b/src/pages/rss.xml.ts @@ -0,0 +1,30 @@ +import rss from '@astrojs/rss' +import type { APIContext } from 'astro' +import { getCollection } from 'astro:content' + +import siteConfig from '@/configs/site' + +const { title, description } = siteConfig + +export const get = async ({ site }: APIContext) => { + if (site === undefined || site.toString().length === 0) { + return { + body: '' + } + } + + const allPosts = await getCollection('leetcode-solutions') + + return rss({ + title, + description, + site: site.toString(), + items: allPosts.map((post) => ({ + title: post.data.title, + description: `LeetCode Problem #${post.data.title}`, + pubDate: new Date(post.data.pubDate), + link: `/${post.slug}`, + })), + customData: 'en-US', + }) +}