2022-11-02 20:28:48 +01:00
|
|
|
import path from "node:path";
|
|
|
|
import fs from "node:fs/promises";
|
2022-12-26 20:18:32 +01:00
|
|
|
import css, { processCSS } from "@leafac/css";
|
|
|
|
import javascript from "@leafac/javascript";
|
2022-11-02 20:28:48 +01:00
|
|
|
import esbuild from "esbuild";
|
|
|
|
|
|
|
|
await fs.writeFile("global.css", processCSS(css``));
|
|
|
|
|
|
|
|
await fs.writeFile(
|
|
|
|
"index.mjs",
|
|
|
|
javascript`
|
|
|
|
import "@fontsource/jetbrains-mono/variable.css";
|
|
|
|
import "@fontsource/jetbrains-mono/variable-italic.css";
|
|
|
|
|
|
|
|
import "tippy.js/dist/tippy.css";
|
|
|
|
import "tippy.js/dist/svg-arrow.css";
|
|
|
|
import "tippy.js/dist/border.css";
|
|
|
|
import "@leafac/css/build/browser.css";
|
|
|
|
import "./global.css";
|
|
|
|
|
|
|
|
import tippy, * as tippyStatic from "tippy.js";
|
|
|
|
window.tippy = tippy;
|
|
|
|
window.tippy.hideAll = tippyStatic.hideAll;
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
// import * as leafac from "@leafac/javascript/build/leafac--javascript.mjs";
|
|
|
|
// window.leafac = leafac;
|
|
|
|
`
|
|
|
|
);
|
|
|
|
|
|
|
|
const esbuildResult = await esbuild.build({
|
|
|
|
entryPoints: ["index.mjs"],
|
|
|
|
outdir: "../build/static/",
|
|
|
|
entryNames: "[dir]/[name]--[hash]",
|
|
|
|
assetNames: "[dir]/[name]--[hash]",
|
|
|
|
|
|
|
|
loader: { ".woff2": "file" },
|
|
|
|
|
|
|
|
target: ["chrome100", "safari14", "edge100", "firefox100", "ios14"],
|
|
|
|
|
|
|
|
bundle: true,
|
|
|
|
minify: true,
|
|
|
|
sourcemap: true,
|
|
|
|
metafile: true,
|
|
|
|
});
|
|
|
|
|
|
|
|
await fs.unlink("global.css");
|
|
|
|
await fs.unlink("index.mjs");
|
|
|
|
|
|
|
|
const paths = {};
|
|
|
|
|
|
|
|
for (const [javascriptBundle, { entryPoint, cssBundle }] of Object.entries(
|
|
|
|
esbuildResult.metafile.outputs
|
|
|
|
))
|
|
|
|
if (entryPoint === "index.mjs" && typeof cssBundle === "string") {
|
|
|
|
paths["index.css"] = cssBundle.slice("../build/static/".length);
|
|
|
|
paths["index.mjs"] = javascriptBundle.slice("../build/static/".length);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
await fs.writeFile(
|
|
|
|
new URL("../build/static/paths.json", import.meta.url),
|
|
|
|
JSON.stringify(paths, undefined, 2)
|
|
|
|
);
|
|
|
|
|
|
|
|
for (const source of ["favicon.ico"]) {
|
|
|
|
const destination = path.join("../build/static", source);
|
|
|
|
await fs.mkdir(path.dirname(destination), { recursive: true });
|
|
|
|
await fs.copyFile(source, destination);
|
|
|
|
}
|