UNPKG

shelljs

Version:

Portable Unix shell commands for Node.js

72 lines (61 loc) 1.99 kB
var childProcess = require('child_process'); var fs = require('fs'); function main() { var paramFilePath = process.argv[2]; var serializedParams = fs.readFileSync(paramFilePath, 'utf8'); var params = JSON.parse(serializedParams); var cmd = params.command; var execOptions = params.execOptions; var pipe = params.pipe; var stdoutFile = params.stdoutFile; var stderrFile = params.stderrFile; function isMaxBufferError(err) { var maxBufferErrorPattern = /^.*\bmaxBuffer\b.*exceeded.*$/; if (err instanceof Error && err.message && err.message.match(maxBufferErrorPattern)) { // < v10 // Error: stdout maxBuffer exceeded return true; } else if (err instanceof RangeError && err.message && err.message.match(maxBufferErrorPattern)) { // >= v10 // RangeError [ERR_CHILD_PROCESS_STDIO_MAXBUFFER]: stdout maxBuffer length // exceeded return true; } return false; } var stdoutStream = fs.createWriteStream(stdoutFile); var stderrStream = fs.createWriteStream(stderrFile); function appendError(message, code) { stderrStream.write(message); process.exitCode = code; } var c = childProcess.exec(cmd, execOptions, function (err) { if (!err) { process.exitCode = 0; } else if (isMaxBufferError(err)) { appendError('maxBuffer exceeded', 1); } else if (err.code === undefined && err.message) { /* istanbul ignore next */ appendError(err.message, 1); } else if (err.code === undefined) { /* istanbul ignore next */ appendError('Unknown issue', 1); } else { process.exitCode = err.code; } }); c.stdout.pipe(stdoutStream); c.stderr.pipe(stderrStream); c.stdout.pipe(process.stdout); c.stderr.pipe(process.stderr); if (pipe) { c.stdin.end(pipe); } } // This file should only be executed. This module does not export anything. /* istanbul ignore else */ if (require.main === module) { main(); }