aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/docs/scripts/generate-rss.js
diff options
context:
space:
mode:
authorHsiangNianian <admin@jyunko.cn>2023-04-22 19:52:26 +0800
committerHsiangNianian <admin@jyunko.cn>2023-04-22 19:52:26 +0800
commit4838df315931bb883f704ec3e1abe2685f296cdf (patch)
tree57a8550c4cd5338f1126364bb518c6cde8d96e7d /docs/scripts/generate-rss.js
parentdb74ade0234a40c2120ad5f2a41bee50ce13de02 (diff)
downloadHydroRoll-4838df315931bb883f704ec3e1abe2685f296cdf.tar.gz
HydroRoll-4838df315931bb883f704ec3e1abe2685f296cdf.zip
😀
Diffstat (limited to 'docs/scripts/generate-rss.js')
-rw-r--r--docs/scripts/generate-rss.js58
1 files changed, 58 insertions, 0 deletions
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();