28 lines
821 B
JavaScript
28 lines
821 B
JavaScript
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}).`);
|