import { createHash } from "node:crypto"; import { copyFileSync, readFileSync, writeFileSync } from "node:fs"; import { extname, join } from "node:path"; const outputDir = process.env.STATIC_OUTPUT_DIR || "/out"; const replacements = new Map(); for (const filename of ["app.js", "style.css", "reader-contract.js", "reader-store.js", "reader.js", "reader.css"]) { const source = join(outputDir, filename); const content = readFileSync(source); const hash = createHash("sha256").update(content).digest("hex").slice(0, 12); const extension = extname(filename); const stem = filename.slice(0, -extension.length); const versioned = `${stem}.${hash}${extension}`; copyFileSync(source, join(outputDir, versioned)); replacements.set(`/static/${filename}`, `/static/${versioned}`); } for (const filename of ["index.html", "reader.html", "sw.js"]) { const path = join(outputDir, filename); let content = readFileSync(path, "utf8"); for (const [original, versioned] of replacements) { content = content.split(original).join(versioned); } writeFileSync(path, content); }