24 lines
1.0 KiB
TypeScript
24 lines
1.0 KiB
TypeScript
import { copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
|
|||
|
|
|
||
|
|
await mkdir("dist/assets", { recursive: true });
|
||
|
|
const result = await Bun.build({
|
||
|
|
entrypoints: ["src/client/main.ts"],
|
||
|
|
outdir: "dist/assets",
|
||
|
|
target: "browser",
|
||
|
|
minify: true,
|
||
|
|
naming: "app.js",
|
||
|
|
});
|
||
|
|
if (!result.success) {
|
||
|
|
for (const log of result.logs) console.error(log);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
const buildId = Date.now().toString(36);
|
||
|
|
const html = await readFile("src/client/index.html", "utf8");
|
||
|
|
await writeFile("dist/index.html", html.replaceAll("__BUILD_ID__", buildId));
|
||
|
|
await copyFile("src/client/styles.css", "dist/styles.css");
|
||
|
|
await copyFile("src/client/manifest.webmanifest", "dist/manifest.webmanifest");
|
||
|
|
await copyFile("src/client/icon.svg", "dist/icon.svg");
|
||
|
|
for (const size of [180, 192, 512]) await copyFile(`src/client/icon-${size}.png`, `dist/icon-${size}.png`);
|
||
|
|
const worker = await readFile("src/client/sw.js", "utf8");
|
||
|
|
await writeFile("dist/sw.js", worker.replaceAll("__BUILD_ID__", buildId));
|
||
|
|
console.log("Built PWA in dist/");
|