@mail-core/cli
Version:
Инструментарий для написания cli-скриптов
86 lines • 2.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.npmInstallPackage = exports.npmInstall = exports.npmRun = exports.npxRun = exports.spawn = void 0;
const child_process_1 = require("child_process");
const spinner_1 = require("../console/spinner");
const console_1 = require("../console");
function spawn(cmd, args = [], options = {}) {
const opts = Object.assign({ cwd: process.cwd(), env: process.env, stdio: options.spinner ? 'ignore' : 'inherit' }, options);
let spinner = undefined;
let childProcess = {};
const promise = new Promise((resolve, reject) => {
var _a, _b;
console_1.verbose(`[spawn] ${cmd}:`, args);
let stdout = '';
let stderr = '';
childProcess = child_process_1.spawn(cmd, args, opts);
(_a = childProcess.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (chunk) => {
stdout += chunk;
});
(_b = childProcess.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (chunk) => {
stderr += chunk;
});
childProcess.on('close', (code) => {
if (spinner) {
spinner[code === 0 ? 'succeed' : 'fail']();
}
(code === 0 ? resolve : reject)({
code,
stdout,
stderr,
});
});
});
if (spinner_1.isSpinnerInstance(opts.spinner)) {
spinner = opts.spinner;
}
else if (opts.spinner) {
spinner = spinner_1.createSpinner(promise, opts.spinner === true ? {} : opts.spinner);
}
Object.defineProperties(childProcess, {
then: {
configurable: false,
writable: false,
enumerable: false,
value: promise.then.bind(promise),
},
catch: {
configurable: false,
writable: false,
enumerable: false,
value: promise.catch.bind(promise),
},
spinner: {
configurable: false,
writable: false,
enumerable: false,
value: spinner,
},
});
return childProcess;
}
exports.spawn = spawn;
function npxRun(script, cmd, args = [], options) {
return spawn('npx', [script, cmd].concat(args), options);
}
exports.npxRun = npxRun;
function npmRun(script, args = [], options) {
return spawn('npm', ['run', script, '--'].concat(args), options);
}
exports.npmRun = npmRun;
function npmInstall(options = {}) {
return spawn('npm', ['install'], options);
}
exports.npmInstall = npmInstall;
function npmInstallPackage(name, saveAs = true, options = {}) {
const args = ['install', name];
if (saveAs === 'dev') {
args.push('--save-dev');
}
else if (saveAs) {
args.push('--save');
}
return spawn('npm', args, options);
}
exports.npmInstallPackage = npmInstallPackage;
//# sourceMappingURL=exec.js.map