a2r
Version:
A2R Framework
48 lines (47 loc) • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const child_process_1 = require("child_process");
/**
* Executes command on terminal passing all received arguments
*
* If you want to run something like `mkdir -m 777 mydir` you'll need to call this method like
* `exec('mkdir', ['-m', '777', 'mydir'])`.
* @param {string} command Command to execute (i.e. `mkdir`)
* @param {readonly string[]} args Arguments for command (i.e `-m` and `777`)
* @param {SpawnOptionsWithoutStdio | undefined} options Spawn options (https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options)
* @returns {Promise<CommandResponse>} Command response
*/
const exec = (command, args, options) => new Promise((resolve, reject) => {
const res = {
command,
args: args.join(' '),
closeCode: null,
exitCode: null,
stdout: '',
closeSignal: null,
exitSignal: null,
error: null,
};
let closed = false;
const cmd = (0, child_process_1.spawn)(command, args, options);
cmd.stdout.on('data', (data) => {
if (!closed) {
res.stdout += data.toString();
}
});
cmd.on('error', (err) => {
res.error = err;
reject(res);
});
cmd.on('close', (code, signal) => {
closed = true;
res.closeCode = code;
res.closeSignal = signal;
});
cmd.on('exit', (code, signal) => {
res.exitCode = code;
res.exitSignal = signal;
resolve(res);
});
});
exports.default = exec;