| "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 |