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.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							61 lines
						
					
					
						
							1.4 KiB
						
					
					
				| 'use strict';
 | |
| const {constants: BufferConstants} = require('buffer');
 | |
| const pump = require('pump');
 | |
| const bufferStream = require('./buffer-stream');
 | |
| 
 | |
| class MaxBufferError extends Error {
 | |
| 	constructor() {
 | |
| 		super('maxBuffer exceeded');
 | |
| 		this.name = 'MaxBufferError';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| async function getStream(inputStream, options) {
 | |
| 	if (!inputStream) {
 | |
| 		return Promise.reject(new Error('Expected a stream'));
 | |
| 	}
 | |
| 
 | |
| 	options = {
 | |
| 		maxBuffer: Infinity,
 | |
| 		...options
 | |
| 	};
 | |
| 
 | |
| 	const {maxBuffer} = options;
 | |
| 
 | |
| 	let stream;
 | |
| 	await new Promise((resolve, reject) => {
 | |
| 		const rejectPromise = error => {
 | |
| 			// Don't retrieve an oversized buffer.
 | |
| 			if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
 | |
| 				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());
 | |
| 			}
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	return stream.getBufferedValue();
 | |
| }
 | |
| 
 | |
| module.exports = getStream;
 | |
| // TODO: Remove this for the next major release
 | |
| module.exports.default = getStream;
 | |
| module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
 | |
| module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
 | |
| module.exports.MaxBufferError = MaxBufferError;
 |