var spawn = require('child_process').spawn function spawnPlease(command, args, stdin, options) { // if there are only three arguments and the third argument is an object, treat it as the options object and set stdin to null if(!options && typeof stdin === 'object') { options = stdin stdin = undefined } // defaults options = options || {} if(options.rejectOnError === undefined) { options.rejectOnError = true } var stdout = '' var stderr = '' var child = spawn(command, args, options) if(!spawnPlease.Promise) { throw new Error('No built-in Promise. You will need to use a Promise library and spawnPlease.Promise = Promise.') } return new spawnPlease.Promise(function (resolve, reject) { if(stdin !== undefined) { child.stdin.write(stdin) } child.stdin.end() child.stdout.on('data', function (data) { stdout += data }) child.stderr.on('data', function (data) { stderr += data }) if(options.rejectOnError) { child.addListener('error', reject) } child.on('close', function (code) { if(code !== 0 && options.rejectOnError) { reject(stderr) } else { resolve(stdout) } }) }) } spawnPlease.Promise = typeof Promise !== 'undefined' ? Promise : null module.exports = spawnPlease