; | |
const {PassThrough: PassThroughStream} = require('stream'); | |
module.exports = options => { | |
options = {...options}; | |
const {array} = options; | |
let {encoding} = options; | |
const isBuffer = encoding === 'buffer'; | |
let objectMode = false; | |
if (array) { | |
objectMode = !(encoding || isBuffer); | |
} else { | |
encoding = encoding || 'utf8'; | |
} | |
if (isBuffer) { | |
encoding = null; | |
} | |
const stream = new PassThroughStream({objectMode}); | |
if (encoding) { | |
stream.setEncoding(encoding); | |
} | |
let length = 0; | |
const chunks = []; | |
stream.on('data', chunk => { | |
chunks.push(chunk); | |
if (objectMode) { | |
length = chunks.length; | |
} else { | |
length += chunk.length; | |
} | |
}); | |
stream.getBufferedValue = () => { | |
if (array) { | |
return chunks; | |
} | |
return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); | |
}; | |
stream.getBufferedLength = () => length; | |
return stream; | |
}; | |