dis-dat
Version:
Run commands in parallel (dad / dis-and-dat) or sequentially (dtd / dis-then-dat)
120 lines • 4.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return worker;
}
});
var _crossspawncb = /*#__PURE__*/ _interop_require_default(require("cross-spawn-cb"));
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
var _spawnstreaming = /*#__PURE__*/ _interop_require_default(require("spawn-streaming"));
var _spawnterm = require("spawn-term");
var _stringargv = require("string-argv");
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _object_spread(target) {
for(var i = 1; i < arguments.length; i++){
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function(key) {
_define_property(target, key, source[key]);
});
}
return target;
}
var bracketsRegEx = /\{([\s\S]*)\}/;
function worker(commands, options, callback) {
var spawnOptions = _object_spread({
cwd: process.cwd()
}, options);
var results = [];
var queue = new _queuecb.default(options.concurrency || Infinity);
// Create session once for all processes (only if multiple commands)
var interactive = !!options.interactive;
var session = commands.length >= 2 && process.stdout.isTTY && _spawnterm.createSession && !options.streaming ? (0, _spawnterm.createSession)({
header: commands.join(' | '),
interactive: interactive
}) : null;
commands.forEach(function(_, index) {
queue.defer(function(cb) {
var next = function next(err, res) {
if (err && err.message.indexOf('ExperimentalWarning') >= 0) {
res = err;
err = null;
}
// suppress error
if (err && match) {
res = err;
err = null;
}
results.push({
index: index,
command: command,
args: args,
error: err,
result: res
});
if (err && options.concurrency === 1) {
cb(err); // break early
return;
}
cb();
};
var match = commands[index].match(bracketsRegEx);
var argv = match ? (0, _stringargv.parseArgsStringToArgv)(match[1]) : (0, _stringargv.parseArgsStringToArgv)(commands[index]);
var command = argv[0];
var args = argv.slice(1);
var prefix = (0, _spawnterm.formatArguments)(argv).join(' ');
if (!session && !options.silent) console.log("".concat(index > 0 ? '\n' : '', "$ ").concat((0, _spawnterm.formatArguments)([
command
].concat(args)).join(' ')));
// Show command when running single command (no terminal session, unless silent)
if (commands.length < 2) (0, _crossspawncb.default)(command, args, spawnOptions, next);
else if (session) session.spawn(command, args, spawnOptions, {
group: prefix,
expanded: options.expanded
}, next);
else (0, _spawnstreaming.default)(command, args, spawnOptions, {
prefix: process.stdout.isTTY ? prefix : undefined
}, next);
});
});
queue.await(function(err) {
results = results.sort(function(a, b) {
return a.index - b.index;
});
if (err) err.results = results;
if (session) {
session.waitAndClose(function() {
err ? callback(err) : callback(null, results);
});
} else {
err ? callback(err) : callback(null, results);
}
});
}
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }