70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
import * as esbuild from "esbuild";
|
|
import fs from "node:fs/promises";
|
|
import path from "node:path";
|
|
|
|
const filesToCopy = [
|
|
"node_modules/htmx.org/dist/htmx.min.js",
|
|
"node_modules/htmx-ext-preload/dist/preload.min.js",
|
|
"node_modules/htmx-ext-head-support/dist/head-support.min.js",
|
|
];
|
|
|
|
const filesToMinifyRoot = "web/src/js";
|
|
|
|
const outputRoot = "web/static/js";
|
|
|
|
async function minifyFiles() {
|
|
try {
|
|
const files = (await fs.readdir(filesToMinifyRoot))
|
|
.filter((p) => p.endsWith(".js"))
|
|
.map((p) => {
|
|
return {
|
|
src: path.join(filesToMinifyRoot, p),
|
|
dest: path.join(outputRoot, p.substring(0, p.length - 3) + ".min.js"),
|
|
};
|
|
});
|
|
|
|
for (const file of files) {
|
|
await esbuild.build({
|
|
entryPoints: [file.src],
|
|
bundle: false,
|
|
minify: true,
|
|
outfile: file.dest,
|
|
});
|
|
console.log(`Minified ${file.src} to ${file.dest}`);
|
|
}
|
|
} catch (err) {
|
|
console.error("could not minify files", err);
|
|
}
|
|
}
|
|
|
|
async function coppyFromNodemodules() {
|
|
try {
|
|
const fileMap = filesToCopy.map((file) => {
|
|
return {
|
|
src: file,
|
|
dest: path.join(outputRoot, path.basename(file)),
|
|
};
|
|
});
|
|
|
|
for (const file of fileMap) {
|
|
await fs.copyFile(file.src, file.dest);
|
|
console.log(`Copied ${path.basename(file.dest)}`);
|
|
}
|
|
} catch (err) {
|
|
console.error("JS build failed:", err);
|
|
process.exit(2);
|
|
}
|
|
}
|
|
|
|
async function build() {
|
|
console.log("Starting JS build...");
|
|
|
|
await minifyFiles();
|
|
await coppyFromNodemodules();
|
|
|
|
console.log("JS build complete!");
|
|
}
|
|
|
|
build();
|
|
|