UNPKG

dis-dat

Version:

Run commands in parallel (dad / dis-and-dat) or sequentially (dtd / dis-then-dat)

120 lines 4.76 kB
"use strict"; 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; }