pot-js
Version:
Process management module
80 lines (56 loc) • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = createScriptRunner;
var _potLogger = require('pot-logger');
var _potLogger2 = _interopRequireDefault(_potLogger);
var _crossSpawn = require('cross-spawn');
var _crossSpawn2 = _interopRequireDefault(_crossSpawn);
var _npmPath = require('npm-path');
var _npmPath2 = _interopRequireDefault(_npmPath);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function createScriptRunner() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return function runScript(command) {
if (!command) return;
var _options$logger = options.logger;
const logger = _options$logger === undefined ? _potLogger2.default : _options$logger,
silence = options.silence,
spawnOptions = _objectWithoutProperties(options, ['logger', 'silence']);
let env = spawnOptions.env;
const $PATH = _npmPath2.default.getSync(spawnOptions);
if (env) {
env[_npmPath2.default.PATH] = $PATH;
} else {
env = _extends({}, process.env, {
[_npmPath2.default.PATH]: $PATH
});
}
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
const child = (0, _crossSpawn2.default)(command, args, _extends({}, spawnOptions, {
env,
shell: true
}));
if (!silence) {
if (child.stdout) {
child.stdout.on('data', data => {
logger.info(`${data}`);
});
}
if (child.stderr) {
child.stderr.on('data', data => {
logger.error(`${data}`);
});
}
child.on('close', code => {
logger.info(`child process exited with code ${code}`);
});
}
return child;
};
}