minify-html/bench/runners/common.js

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];
})
)
);
},
};