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
847 B
51 lines
847 B
'use strict'; |
|
const PassThrough = require('stream').PassThrough; |
|
|
|
module.exports = opts => { |
|
opts = Object.assign({}, opts); |
|
|
|
const array = opts.array; |
|
let encoding = opts.encoding; |
|
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; |
|
};
|
|
|