• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const {PassThrough} = require('stream');
3
4module.exports = options => {
5	options = Object.assign({}, options);
6
7	const {array} = options;
8	let {encoding} = options;
9	const buffer = encoding === 'buffer';
10	let objectMode = false;
11
12	if (array) {
13		objectMode = !(encoding || buffer);
14	} else {
15		encoding = encoding || 'utf8';
16	}
17
18	if (buffer) {
19		encoding = null;
20	}
21
22	let len = 0;
23	const ret = [];
24	const stream = new PassThrough({objectMode});
25
26	if (encoding) {
27		stream.setEncoding(encoding);
28	}
29
30	stream.on('data', chunk => {
31		ret.push(chunk);
32
33		if (objectMode) {
34			len = ret.length;
35		} else {
36			len += chunk.length;
37		}
38	});
39
40	stream.getBufferedValue = () => {
41		if (array) {
42			return ret;
43		}
44
45		return buffer ? Buffer.concat(ret, len) : ret.join('');
46	};
47
48	stream.getBufferedLength = () => len;
49
50	return stream;
51};
52