website/scripts/gen-favicon.mjs
2026-09-08 19:29:17 -04:00

27 lines
822 B
JavaScript

import { execFileSync } from "node:child_process";
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import sharp from "sharp";
const svg = readFileSync("public/favicon.svg");
const sizes = [16, 32, 48];
const tmp = mkdtempSync(join(tmpdir(), "favicon-"));
try {
const pngs = [];
for (const s of sizes) {
const out = join(tmp, `${s}.png`);
await sharp(svg, { density: 384 })
.resize(s, s, { fit: "contain", background: { r: 0, g: 0, b: 0, alpha: 0 } })
.png()
.toFile(out);
pngs.push(out);
}
execFileSync("magick", [...pngs, "public/favicon.ico"], { stdio: "inherit" });
console.log(`wrote public/favicon.ico (${sizes.join(", ")} px)`);
} finally {
rmSync(tmp, { recursive: true, force: true });
}