63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
const esbuild = require("esbuild");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const iterations = parseInt(process.env.MHB_ITERATIONS, 10);
|
|
const inputDir = process.env.MHB_INPUT_DIR;
|
|
const htmlOnly = process.env.MHB_HTML_ONLY === "1";
|
|
const outputDir = process.env.MHB_OUTPUT_DIR;
|
|
|
|
module.exports = {
|
|
htmlOnly,
|
|
|
|
esbuildCss: (code, type) => {
|
|
if (type === "inline") {
|
|
code = `x{${code}}`;
|
|
}
|
|
code = esbuild.transformSync(code, {
|
|
charset: "utf8",
|
|
legalComments: "none",
|
|
loader: "css",
|
|
minify: true,
|
|
sourcemap: false,
|
|
}).code;
|
|
if (type === "inline") {
|
|
code = code.trim().slice(2, -1);
|
|
}
|
|
return code;
|
|
},
|
|
|
|
esbuildJs: (code) =>
|
|
esbuild.transformSync(code, {
|
|
charset: "utf8",
|
|
legalComments: "none",
|
|
loader: "js",
|
|
minify: true,
|
|
sourcemap: false,
|
|
}).code,
|
|
|
|
run: (minifierFn) => {
|
|
console.log(
|
|
JSON.stringify(
|
|
fs.readdirSync(inputDir).map((name) => {
|
|
const src = fs.readFileSync(path.join(inputDir, name), "utf8");
|
|
|
|
const out = minifierFn(src);
|
|
const len = Buffer.from(out).length;
|
|
if (outputDir) {
|
|
fs.writeFileSync(path.join(outputDir, name), out);
|
|
}
|
|
|
|
const start = process.hrtime.bigint();
|
|
for (let i = 0; i < iterations; i++) {
|
|
minifierFn(src);
|
|
}
|
|
const elapsed = process.hrtime.bigint() - start;
|
|
|
|
return [name, len, iterations, Number(elapsed) / 1_000_000_000];
|
|
})
|
|
)
|
|
);
|
|
},
|
|
};
|