"use strict";
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
};
|
Object.defineProperty(exports, "__esModule", { value: true });
|
const child_process_1 = require("child_process");
|
const path_1 = __importDefault(require("path"));
|
const common_1 = require("./common");
|
const loggerAlias = common_1.logger;
|
function runSync(command, options) {
|
try {
|
const nextOptions = {
|
cwd: options.cwd,
|
env: options.env,
|
stdio: options.stdio,
|
timeout: options.timeout
|
};
|
const buffer = child_process_1.execSync(command, nextOptions);
|
if (buffer) {
|
return buffer.toString();
|
}
|
return null;
|
}
|
catch (error) {
|
throw new common_1.RunJSError(error.message);
|
}
|
}
|
function runAsync(command, options) {
|
return new Promise((resolve, reject) => {
|
const nextOptions = {
|
cwd: options.cwd,
|
env: options.env,
|
shell: true,
|
stdio: options.stdio
|
};
|
const asyncProcess = child_process_1.spawn(command, nextOptions);
|
let output = null;
|
asyncProcess.on("error", (error) => {
|
reject(new Error(`Failed to start command: ${command}; ${error.toString()}`));
|
});
|
asyncProcess.on("close", (exitCode) => {
|
if (exitCode === 0) {
|
resolve(output);
|
}
|
else {
|
reject(new Error(`Command failed: ${command} with exit code ${exitCode}`));
|
}
|
});
|
if (options.stdio === "pipe") {
|
asyncProcess.stdout.on("data", (buffer) => {
|
output = buffer.toString();
|
});
|
}
|
if (options.timeout) {
|
setTimeout(() => {
|
asyncProcess.kill();
|
reject(new Error(`Command timeout: ${command}`));
|
}, options.timeout);
|
}
|
});
|
}
|
function run(command, options = {}, logger = loggerAlias) {
|
const binPath = path_1.default.resolve("./node_modules/.bin");
|
// Pick relevant option keys and set default values
|
const nextOptions = {
|
async: !!options.async,
|
cwd: options.cwd,
|
env: options.env || process.env,
|
stdio: options.stdio || "inherit",
|
timeout: options.timeout
|
};
|
const env = nextOptions.env;
|
// Include in PATH node_modules bin path
|
if (env) {
|
env.PATH = [binPath, env.PATH || process.env.PATH].join(path_1.default.delimiter);
|
}
|
logger.title(command);
|
// Handle async call
|
if (options.async) {
|
return runAsync(command, nextOptions);
|
}
|
// Handle sync call by default
|
return runSync(command, nextOptions);
|
}
|
exports.run = run;
|
/**
|
* @deprecated
|
*/
|
function option(thisObj, name = "") {
|
return (thisObj && thisObj.options && thisObj.options[name]) || null;
|
}
|
exports.option = option;
|
function options(thisObj) {
|
return (thisObj && thisObj.options) || {};
|
}
|
exports.options = options;
|
function help(func, annotation) {
|
// Because the validation above currently gets compiled out,
|
// Explictly validate the function input
|
if (typeof func === "function") {
|
func.help = annotation;
|
}
|
else {
|
throw new Error("first help() argument must be a function");
|
}
|
}
|
exports.help = help;
|
//# sourceMappingURL=index.js.map
|