2 const pump = require('pump');
3 const bufferStream = require('./buffer-stream');
5 class MaxBufferError extends Error {
7 super('maxBuffer exceeded');
8 this.name = 'MaxBufferError';
12 function getStream(inputStream, options) {
14 return Promise.reject(new Error('Expected a stream'));
17 options = Object.assign({maxBuffer: Infinity}, options);
19 const {maxBuffer} = options;
22 return new Promise((resolve, reject) => {
23 const rejectPromise = error => {
24 if (error) { // A null check
25 error.bufferedData = stream.getBufferedValue();
30 stream = pump(inputStream, bufferStream(options), error => {
39 stream.on('data', () => {
40 if (stream.getBufferedLength() > maxBuffer) {
41 rejectPromise(new MaxBufferError());
44 }).then(() => stream.getBufferedValue());
47 module.exports = getStream;
48 module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'}));
49 module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true}));
50 module.exports.MaxBufferError = MaxBufferError;