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.
		
		
		
		
		
			
		
			
				
					
					
						
							51 lines
						
					
					
						
							841 B
						
					
					
				
			
		
		
	
	
							51 lines
						
					
					
						
							841 B
						
					
					
				'use strict'; | 
						|
const {PassThrough} = require('stream'); | 
						|
 | 
						|
module.exports = options => { | 
						|
	options = Object.assign({}, options); | 
						|
 | 
						|
	const {array} = options; | 
						|
	let {encoding} = options; | 
						|
	const buffer = encoding === 'buffer'; | 
						|
	let objectMode = false; | 
						|
 | 
						|
	if (array) { | 
						|
		objectMode = !(encoding || buffer); | 
						|
	} else { | 
						|
		encoding = encoding || 'utf8'; | 
						|
	} | 
						|
 | 
						|
	if (buffer) { | 
						|
		encoding = null; | 
						|
	} | 
						|
 | 
						|
	let len = 0; | 
						|
	const ret = []; | 
						|
	const stream = new PassThrough({objectMode}); | 
						|
 | 
						|
	if (encoding) { | 
						|
		stream.setEncoding(encoding); | 
						|
	} | 
						|
 | 
						|
	stream.on('data', chunk => { | 
						|
		ret.push(chunk); | 
						|
 | 
						|
		if (objectMode) { | 
						|
			len = ret.length; | 
						|
		} else { | 
						|
			len += chunk.length; | 
						|
		} | 
						|
	}); | 
						|
 | 
						|
	stream.getBufferedValue = () => { | 
						|
		if (array) { | 
						|
			return ret; | 
						|
		} | 
						|
 | 
						|
		return buffer ? Buffer.concat(ret, len) : ret.join(''); | 
						|
	}; | 
						|
 | 
						|
	stream.getBufferedLength = () => len; | 
						|
 | 
						|
	return stream; | 
						|
};
 | 
						|
 |