updated
Version:
check for updated package.json dependencies
44 lines (35 loc) • 1.18 kB
JavaScript
import { spawn } from 'child_process'
export default function npm (...args) {
let stdout = []
let stderr = []
// spawn npm
return new Promise((resolve, reject) => {
const npm = spawn('npm', ['--json'].concat(args))
npm.stdout.on('data', data => stdout.push(data))
npm.stderr.on('data', data => stderr.push(data))
npm.on('close', code => {
stdout = Buffer.concat(stdout)
stderr = Buffer.concat(stderr)
// exit with errors
if (code !== 0) {
return reject({ issue: 'spawn', args, code, stdout, stderr: stderr.toString() }) // eslint-disable-line prefer-promise-reject-errors
}
// no output
/* istanbul ignore next */
if (stdout.length === 0) {
return resolve()
}
// special condition for npm --version
if (args.includes('--version')) {
return resolve(stdout.toString())
}
// process results
try {
return resolve(JSON.parse(stdout))
} catch (error) {
/* istanbul ignore next */
return reject({ issue: 'json', content: stdout.toString() }) // eslint-disable-line prefer-promise-reject-errors
}
})
})
}