kizu
Version:
An easy-to-use, fast, and defensive Typescript/Javascript test runner designed to help you to write simple, readable, and maintainable tests.
36 lines • 1.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.workerPool = workerPool;
const os_1 = require("os");
const child_process_1 = require("child_process");
const toResult_1 = require("./lib/toResult");
const numCores = (0, os_1.cpus)().length; // will be the size of our worker pool
let numWorkers = 0;
let currentSpecFileIndex = 0;
function workerPool(specFiles, addTestResults) {
return new Promise((resolve, reject) => {
function next() {
if (currentSpecFileIndex >= specFiles.length && numWorkers === 0)
resolve();
if (currentSpecFileIndex >= specFiles.length)
return;
if (numWorkers >= numCores)
return;
const file = specFiles[currentSpecFileIndex];
const [err, worker] = (0, toResult_1.toResult)(() => (0, child_process_1.fork)(file));
if (err) {
return reject(new Error(`failed to create worker for ${file}`));
}
numWorkers++;
currentSpecFileIndex++;
worker.on('close', () => {
numWorkers--;
next();
});
worker.on('message', (msg) => addTestResults(file, msg));
next();
}
next();
});
}
//# sourceMappingURL=workerPool.js.map