import { readdir, readFile, writeFile } from "node:fs/promises"; import { createHash } from "node:crypto"; const assets = [ "/", "/manifest.webmanifest", "/icon.svg", "/icon-192.png", "/icon-512.png", ...(await readdir("dist/assets")) .filter((f) => /\.(js|css)$/.test(f)) .map((f) => "/assets/" + f), ...(await readdir("dist/fonts")) .filter((f) => f === "RobotoFlex-Variable.ttf") .map((f) => "/fonts/" + f), ]; const rev = createHash("sha256") .update(assets.join("|")) .digest("hex") .slice(0, 12); const template = await readFile("public/sw.js", "utf8"); await writeFile( "dist/sw.js", template .replace("__REVISION__", rev) .replace("/* build assets */ []", JSON.stringify(assets)), ); console.log(`Офлайн-кэш: ${assets.length} ресурсов (${rev}).`);