"use strict"; const Promise = require("bluebird"); const childProcess = require("child_process"); module.exports = function runProgram(binary, args = [], options = {}) { return new Promise((resolve, reject) => { let proc = childProcess.spawn(binary, args, Object.assign({ stdio: [ process.stdin, process.stdout, process.stderr ] }, options)); proc.on("error", (error) => { reject(error); }); proc.on("exit", (exitCode, signal) => { if (exitCode === 0) { resolve(); } else if (exitCode != null) { reject(`Non-zero exit code: ${exitCode}`); } else if (signal != null) { reject(`Process terminated by signal: ${signal}`); } else { reject("Process exited abnormally"); } }); }); };