Files
apophenia.news/scripts/lib/io.mjs

31 lines
1.1 KiB
JavaScript

import fs from "node:fs/promises";
import path from "node:path";
import { PUBLIC, SRC } from "./constants.mjs";
import { renderRobots, renderRss, renderSitemap } from "./renderers.mjs";
export const ensureCleanGenerated = async () => {
await fs.mkdir(SRC, { recursive: true });
const children = await fs.readdir(SRC, { withFileTypes: true });
const keep = new Set(["assets"]);
await Promise.all(
children
.filter((d) => d.isDirectory() && !keep.has(d.name))
.map((d) => fs.rm(path.join(SRC, d.name), { recursive: true, force: true }))
);
};
export const writePage = async (parts, html) => {
const filePath = path.join(...parts);
await fs.mkdir(path.dirname(filePath), { recursive: true });
await fs.writeFile(filePath, html, "utf8");
};
export const writeDiscoveryFiles = async (articles, authors) => {
await fs.mkdir(PUBLIC, { recursive: true });
await Promise.all([
fs.writeFile(path.join(PUBLIC, "rss.xml"), renderRss(articles), "utf8"),
fs.writeFile(path.join(PUBLIC, "sitemap.xml"), renderSitemap(articles, authors), "utf8"),
fs.writeFile(path.join(PUBLIC, "robots.txt"), renderRobots(), "utf8")
]);
};