| 'use strict'; | 
| 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; | 
| }; |