| '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; |