johnny-cli
Version:
CLI for Johnny Deps
34 lines (26 loc) • 939 B
JavaScript
// @flow
import R from 'ramda';
import {spawn} from 'child_process';
export default async (args: Array<string>) => new Promise(async (resolve, reject) => {
const
spawned = spawn('npm', args);
let
stderrData = '',
stdoutData = '';
spawned.stdout.on('data', data => stdoutData += data);
spawned.stderr.on('data', data => stderrData += data);
spawned.on('close', resolve);
stderrData = (
await new Promise(stdErrResolve => spawned.stderr.on('end', () => stdErrResolve(stderrData)))
).replace(/\n+$/, '');
stdoutData = (
await new Promise(stdOutResolve => spawned.stdout.on('end', () => stdOutResolve(stdoutData)))
).replace(/\n+$/, '');
if(stdoutData)
console.log('\n' + stdoutData);
// Ignore output with only WARNs and empty lines
if(stderrData && !R.all(line => !line || line.match(/^npm WARN.*/gi), stderrData.split('\n')))
reject(stderrData);
else if(stderrData)
console.log(`\n${stderrData}\n`);
});