blob: ae45d3d9e74179435313e0b76c53a86de50f3840 [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001'use strict';
2const PassThrough = require('stream').PassThrough;
3
4module.exports = opts => {
5 opts = Object.assign({}, opts);
6
7 const array = opts.array;
8 let encoding = opts.encoding;
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};