mirror of
https://github.com/shimataro/ssh-key-action.git
synced 2025-06-19 22:52:10 +10:00
58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
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
|