From 4838df315931bb883f704ec3e1abe2685f296cdf Mon Sep 17 00:00:00 2001 From: HsiangNianian Date: Sat, 22 Apr 2023 19:52:26 +0800 Subject: 😀 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/scripts/generate-rss.js | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 docs/scripts/generate-rss.js (limited to 'docs/scripts/generate-rss.js') diff --git a/docs/scripts/generate-rss.js b/docs/scripts/generate-rss.js new file mode 100644 index 0000000..29e2cd8 --- /dev/null +++ b/docs/scripts/generate-rss.js @@ -0,0 +1,58 @@ +const { promises: fs, statSync } = require("fs"); +const path = require("path"); +const RSS = require("rss"); +const matter = require("gray-matter"); + +function dateSortDesc(a, b) { + const date1 = new Date(a.data.date); + const date2 = new Date(b.data.date); + if (date1 > date2) return -1; + if (date1 < date2) return 1; + return 0; +} + +async function generate() { + const feed = new RSS({ + title: "Turbo Blog", + description: "Turbo news, updates, and announcements.", + site_url: "https://turbo.build", + feed_url: "https://turbo.build/feed.xml", + image_url: "https://turbo.build/api/og", + }); + + const posts = await fs.readdir(path.join(__dirname, "..", "pages", "blog")); + + const sortedData = []; + for (const post of posts) { + if (post.startsWith("index.") || post.startsWith("_meta.json")) continue; + const file = await fs.readFile( + path.join(__dirname, "..", "pages", "blog", post) + ); + sortedData.push({ ...matter(file), slug: post.replace(".mdx", "") }); + } + + // sort by date + sortedData.sort(dateSortDesc); + + for (const frontmatter of sortedData) { + // get the og image size + const stat = statSync( + path.join(__dirname, "..", "public", frontmatter.data.ogImage) + ); + feed.item({ + title: frontmatter.data.title, + url: "https://turbo.build/blog/" + frontmatter.slug, // intentionally including slash here + date: frontmatter.data.date, + description: frontmatter.data.description, + enclosure: { + url: "https://turbo.build" + frontmatter.data.ogImage, // intentionally omitting slash here + type: "image/png", + size: stat.size, + }, + }); + } + + await fs.writeFile("./public/feed.xml", feed.xml({ indent: true })); +} + +generate(); -- cgit v1.2.3-70-g09d2