| "use strict"; | 
| Object.defineProperty(exports, "__esModule", { value: true }); | 
| const child_process_1 = require("child_process"); | 
| class ShellError extends Error { | 
|     constructor(message) { | 
|         message = message && message.split('\n')[0]; // assign only first line | 
|         super(message); | 
|     } | 
| } | 
| exports.ShellError = ShellError; | 
| function shellAsync(command, options = {}) { | 
|     return new Promise((resolve, reject) => { | 
|         const nextOptions = Object.assign({}, options, { shell: true, stdio: options.stdio || 'inherit' }); | 
|         const asyncProcess = child_process_1.spawn(command, nextOptions); | 
|         let output = null; | 
|         asyncProcess.on('error', (error) => { | 
|             reject(new ShellError(`Failed to start command: ${command}; ${error.toString()}`)); | 
|         }); | 
|         asyncProcess.on('close', (exitCode) => { | 
|             if (exitCode === 0) { | 
|                 resolve(output); | 
|             } | 
|             else { | 
|                 reject(new ShellError(`Command failed: ${command} with exit code ${exitCode}`)); | 
|             } | 
|         }); | 
|         if (nextOptions.stdio === 'pipe') { | 
|             asyncProcess.stdout.on('data', (buffer) => { | 
|                 output = buffer.toString(); | 
|             }); | 
|         } | 
|         if (nextOptions.timeout) { | 
|             setTimeout(() => { | 
|                 asyncProcess.kill(); | 
|                 reject(new ShellError(`Command timeout: ${command}`)); | 
|             }, nextOptions.timeout); | 
|         } | 
|     }); | 
| } | 
| function shellSync(command, options = {}) { | 
|     try { | 
|         const nextOptions = Object.assign({}, options, { stdio: options.stdio || 'inherit' }); | 
|         const buffer = child_process_1.execSync(command, nextOptions); | 
|         if (buffer) { | 
|             return buffer.toString(); | 
|         } | 
|         return null; | 
|     } | 
|     catch (error) { | 
|         throw new ShellError(error.message); | 
|     } | 
| } | 
| function shell(command, options) { | 
|     return options && options.async | 
|         ? shellAsync(command, options) | 
|         : shellSync(command, options); | 
| } | 
| exports.default = shell; | 
| //# sourceMappingURL=shell.js.map |