You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							50 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							50 lines
						
					
					
						
							1.2 KiB
						
					
					
				'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;
 | 
						|
 |