@ublitzjs/dev-comments
Version:

47 lines (43 loc) • 1.3 kB
JavaScript
import { Worker } from "node:worker_threads";
import path from "node:path";
import fs from "node:fs/promises";
import os from "node:os";
var cpus = os.cpus().length;
async function minifyFolder(inputDir, outputDir, filesToMinify) {
await fs.mkdir(outputDir, { recursive: true });
var promises = [];
for (let i = 1; i <= cpus && filesToMinify.length; i++)
promises.push(RegisterWorkersToFiles(inputDir, outputDir, filesToMinify));
return Promise.all(promises);
}
async function RegisterWorkersToFiles(inputDir, outputDir, filesToMinify) {
do {
const fileName = filesToMinify.shift();
if (!fileName) return;
const inputPath = path.join(inputDir, fileName);
const outputPath = path.join(outputDir, fileName);
await minifyFile(inputPath, outputPath);
} while (filesToMinify.length);
}
async function minifyFile(input, output) {
const worker = new Worker(new URL("./worker.mjs", import.meta.url), {
workerData: {
input,
output,
},
});
return new Promise((resolve, reject) => {
worker.on("message", (msg) => {
resolve(msg);
});
worker.on("error", (err) => {
reject(err);
});
worker.on("exit", (code) => {
if (code !== 0) {
reject(code);
}
});
});
}
export { minifyFile, minifyFolder };