UNPKG

spawn-to-readstream

Version:

Converts spawn to a ReadStream, buffers the error and emits it

48 lines (36 loc) 1.02 kB
"use strict"; var through = require('through2'); var limit = require('limit-spawn'); function readStreamIfy(ps, maxBytes) { var err = ''; var limitExceeded = false; var stream = through(); if (maxBytes) { limit(ps, maxBytes); } ps.on('error', function(err) { stream.emit('error', err); }); ps.on('max-limit-exceeded', function() { limitExceeded = true; }); ps.stdout.on('data', function(data) { stream.emit('data', data); }); ps.stderr.on('data', function(buf) { err += buf; }); ps.on('close', function(code) { // code === null when child_process is killed if (code !== 0 && code !== null) { stream.emit('error', new Error('non-zero exit code ' + code + '\n\n' + err)); } else { stream.emit('end', limitExceeded); } }); // this was needed after switching to through2 stream.pause(); setImmediate(function() { stream.resume(); }); return stream; } module.exports = readStreamIfy;