reactors-cli
Version:
Command line utility for reactors
64 lines (48 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = std;
var _child_process = require('child_process');
var _events = require('events');
var _events2 = _interopRequireDefault(_events);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
function std(cmd) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var emitter = new _events2.default();
var _cmd$split = cmd.split(/\s+/),
_cmd$split2 = _toArray(_cmd$split),
entry = _cmd$split2[0],
bits = _cmd$split2.slice(1);
var ps = (0, _child_process.spawn)(entry, bits, options);
var out = [];
var err = [];
ps.on('error', function (error) {
return emitter.emit('error', error);
}).on('exit', function (status) {
process.stdin.unpipe(ps.stdin);
process.stdin.end();
if (status === 0) {
emitter.emit('done', { err: err.join(''), out: out.join('') });
} else {
emitter.emit('error', new Error('Got status ' + status));
}
});
ps.stdout.on('data', function (data) {
out.push(data.toString());
emitter.emit('message', {
std: 'out',
data: data.toString()
});
});
ps.stderr.on('data', function (data) {
err.push(data.toString());
emitter.emit('message', {
std: 'err',
data: data.toString()
});
});
process.stdin.pipe(ps.stdin);
return emitter;
}