import { promises as fs } from "fs"; import ejs from "ejs"; import path from "path"; import { Page, PostMetadata } from "../metadata"; import * as util from "../util"; import { TutorialSeries } from "./tutorials"; async function generateFeed(posts: Page[], permalink: string, category?: string) { posts = posts.sort((a, b) => { const aDate = (a.metadata).date; const bDate = (b.metadata).date; return bDate.getTime() - aDate.getTime(); }); const dest = path.join(permalink, "feed.xml"); let text = (await fs.readFile("site/feed.xml.ejs")).toString(); text = ejs.render(text, { posts, category, permalink, feedPath: dest }, { filename: "site/feed.xml.ejs" }); util.write(dest, text); } export default async function rss(posts: Page[], categories: Map, tutorials: TutorialSeries[]) { generateFeed(posts, "/"); categories.forEach((posts, category) => { generateFeed(posts, `/${category}/`, category); }); tutorials.forEach(series => { generateFeed(series.posts, `/tutorials/${series.series}/`, series.seriesName); }); }