This commit is contained in:
2026-02-27 12:13:52 +02:00
parent 200058ba03
commit 279f40486b
5 changed files with 127 additions and 25 deletions

View File

@@ -1,5 +1,7 @@
const fs = require("fs");
const path = require("path");
const CleanCSS = require("clean-css");
const { minify } = require("terser");
const ROOT_DIR = path.resolve(__dirname, "..");
const DIST_DIR = path.join(ROOT_DIR, "dist");
@@ -20,24 +22,8 @@ function readFiles(folder, files) {
.join("\n\n");
}
function minifyCss(css) {
return css
.replace(/\/\*[\s\S]*?\*\//g, "")
.replace(/\s+/g, " ")
.replace(/\s*([{}:;,])\s*/g, "$1")
.replace(/;}/g, "}")
.trim();
}
function minifyJs(js) {
return js
.replace(/\/\*[\s\S]*?\*\//g, "")
.replace(/^\s*\/\/.*$/gm, "")
.replace(/\s+/g, " ")
.trim();
}
function buildCss() {
const cssMinifier = new CleanCSS({ level: 2 });
const baseCss = readFiles(BASE_CSS_DIR, BASE_CSS_FILES);
const themeFolders = fs
.readdirSync(THEMES_DIR, { withFileTypes: true })
@@ -57,9 +43,14 @@ function buildCss() {
const distFile = path.join(DIST_DIR, `y2k-alerts-${themeName}.css`);
const distMinFile = path.join(DIST_DIR, `y2k-alerts-${themeName}.min.css`);
const minified = cssMinifier.minify(output);
if (minified.errors.length > 0) {
throw new Error(`CSS minification failed for ${themeName}: ${minified.errors.join(", ")}`);
}
fs.writeFileSync(distFile, output, "utf8");
fs.writeFileSync(distMinFile, minifyCss(output), "utf8");
fs.writeFileSync(distMinFile, minified.styles, "utf8");
});
const genericFile = path.join(DIST_DIR, "y2k-alerts-generic.css");
@@ -74,20 +65,40 @@ function buildCss() {
}
}
function buildJs() {
async function buildJs() {
const jsBundle = readFiles(JS_DIR, JS_FILES);
const distFile = path.join(DIST_DIR, "y2k-alerts.js");
const distMinFile = path.join(DIST_DIR, "y2k-alerts.min.js");
const minified = await minify(jsBundle, {
compress: true,
mangle: true,
format: {
comments: false
}
});
if (!minified.code) {
throw new Error("JS minification failed: terser returned empty output.");
}
fs.writeFileSync(distFile, jsBundle, "utf8");
fs.writeFileSync(distMinFile, minifyJs(jsBundle), "utf8");
fs.writeFileSync(distMinFile, minified.code, "utf8");
}
function build() {
async function build() {
ensureDir(DIST_DIR);
buildCss();
buildJs();
await buildJs();
console.log("Built y2k-alerts assets in dist/");
}
build();
if (require.main === module) {
build().catch((error) => {
console.error(error);
process.exit(1);
});
}
module.exports = {
build
};