You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.0 KiB
87 lines
2.0 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _os = _interopRequireDefault(require("os"));
|
|
|
|
var _jestWorker = _interopRequireDefault(require("jest-worker"));
|
|
|
|
var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"));
|
|
|
|
var _minify = _interopRequireDefault(require("./minify"));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const workerPath = require.resolve('./worker');
|
|
|
|
class TaskRunner {
|
|
constructor(options = {}) {
|
|
this.cache = options.cache;
|
|
this.numberWorkers = TaskRunner.getNumberWorkers(options.parallel);
|
|
}
|
|
|
|
static getNumberWorkers(parallel) {
|
|
// In some cases cpus() returns undefined
|
|
// https://github.com/nodejs/node/issues/19022
|
|
const cpus = _os.default.cpus() || {
|
|
length: 1
|
|
};
|
|
return parallel === true ? cpus.length - 1 : Math.min(Number(parallel) || 0, cpus.length - 1);
|
|
}
|
|
|
|
async runTask(task) {
|
|
if (this.worker) {
|
|
return this.worker.transform((0, _serializeJavascript.default)(task));
|
|
}
|
|
|
|
return (0, _minify.default)(task);
|
|
}
|
|
|
|
async run(tasks) {
|
|
if (this.numberWorkers > 1) {
|
|
this.worker = new _jestWorker.default(workerPath, {
|
|
numWorkers: this.numberWorkers
|
|
});
|
|
}
|
|
|
|
return Promise.all(tasks.map(task => {
|
|
const enqueue = async () => {
|
|
let result;
|
|
|
|
try {
|
|
result = await this.runTask(task);
|
|
} catch (error) {
|
|
result = {
|
|
error
|
|
};
|
|
}
|
|
|
|
if (this.cache.isEnabled() && !result.error) {
|
|
return this.cache.store(task, result).then(() => result, () => result);
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
if (this.cache.isEnabled()) {
|
|
return this.cache.get(task).then(data => data, enqueue);
|
|
}
|
|
|
|
return enqueue();
|
|
}));
|
|
}
|
|
|
|
async exit() {
|
|
if (!this.worker) {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
return this.worker.end();
|
|
}
|
|
|
|
}
|
|
|
|
exports.default = TaskRunner; |