UNPKG

@beenotung/tslib

Version:
64 lines (63 loc) 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.exec = void 0; exports.spawn = spawn; exports.spawnAndWait = spawnAndWait; const tslib_1 = require("tslib"); const child_process_1 = require("child_process"); const util = tslib_1.__importStar(require("util")); exports.exec = util.promisify(child_process_1.exec); function spawn(options) { let { cmd, args } = options; if (!args) { args = cmd.split(' '); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion cmd = args.shift(); } return new Promise((resolve, reject) => { const child = (0, child_process_1.spawn)(cmd, args, options.options); child.stdout.setEncoding('utf8'); child.stdout.on('data', options.on_stdout || (data => process.stdout.write(data.toString()))); child.stderr.setEncoding('utf8'); child.stderr.on('data', options.on_stderr || (data => process.stderr.write(data.toString()))); child.on('error', err => { if (options.on_error) { options.on_error(err); } else { console.error(err); process.exit(1); } }); child.on('close', code => { if (code) { reject(code); } else { resolve(code); } }); }); } /** * spawn a child process and return the stdout and stderr in promise * * the console is not used to output the stdout and stderr */ async function spawnAndWait(options) { let stdout = ''; let stderr = ''; let error = null; const code = await spawn({ cmd: options.cmd, args: options.args, options: options.options, on_stdout: chunk => (stdout += chunk), on_stderr: chunk => (stderr += chunk), on_error: err => (error = err), }); if (error) { throw error; } return { code, stdout, stderr }; }