| 'use strict'; |
| const pump = require('pump'); |
| const bufferStream = require('./buffer-stream'); |
| |
| class MaxBufferError extends Error { |
| constructor() { |
| super('maxBuffer exceeded'); |
| this.name = 'MaxBufferError'; |
| } |
| } |
| |
| function getStream(inputStream, options) { |
| if (!inputStream) { |
| return Promise.reject(new Error('Expected a stream')); |
| } |
| |
| options = Object.assign({maxBuffer: Infinity}, options); |
| |
| const {maxBuffer} = options; |
| |
| let stream; |
| return new Promise((resolve, reject) => { |
| const rejectPromise = error => { |
| if (error) { // A null check |
| error.bufferedData = stream.getBufferedValue(); |
| } |
| reject(error); |
| }; |
| |
| stream = pump(inputStream, bufferStream(options), error => { |
| if (error) { |
| rejectPromise(error); |
| return; |
| } |
| |
| resolve(); |
| }); |
| |
| stream.on('data', () => { |
| if (stream.getBufferedLength() > maxBuffer) { |
| rejectPromise(new MaxBufferError()); |
| } |
| }); |
| }).then(() => stream.getBufferedValue()); |
| } |
| |
| module.exports = getStream; |
| module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'})); |
| module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true})); |
| module.exports.MaxBufferError = MaxBufferError; |