| const Minipass = require('minipass') | 
| const _data = Symbol('_data') | 
| const _length = Symbol('_length') | 
| class Collect extends Minipass { | 
|   constructor (options) { | 
|     super(options) | 
|     this[_data] = [] | 
|     this[_length] = 0 | 
|   } | 
|   write (chunk, encoding, cb) { | 
|     if (typeof encoding === 'function') | 
|       cb = encoding, encoding = 'utf8' | 
|   | 
|     if (!encoding) | 
|       encoding = 'utf8' | 
|   | 
|     const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding) | 
|     this[_data].push(c) | 
|     this[_length] += c.length | 
|     if (cb) | 
|       cb() | 
|     return true | 
|   } | 
|   end (chunk, encoding, cb) { | 
|     if (typeof chunk === 'function') | 
|       cb = chunk, chunk = null | 
|     if (typeof encoding === 'function') | 
|       cb = encoding, encoding = 'utf8' | 
|     if (chunk) | 
|       this.write(chunk, encoding) | 
|     const result = Buffer.concat(this[_data], this[_length]) | 
|     super.write(result) | 
|     return super.end(cb) | 
|   } | 
| } | 
| module.exports = Collect | 
|   | 
| // it would be possible to DRY this a bit by doing something like | 
| // this.collector = new Collect() and listening on its data event, | 
| // but it's not much code, and we may as well save the extra obj | 
| class CollectPassThrough extends Minipass { | 
|   constructor (options) { | 
|     super(options) | 
|     this[_data] = [] | 
|     this[_length] = 0 | 
|   } | 
|   write (chunk, encoding, cb) { | 
|     if (typeof encoding === 'function') | 
|       cb = encoding, encoding = 'utf8' | 
|   | 
|     if (!encoding) | 
|       encoding = 'utf8' | 
|   | 
|     const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding) | 
|     this[_data].push(c) | 
|     this[_length] += c.length | 
|     return super.write(chunk, encoding, cb) | 
|   } | 
|   end (chunk, encoding, cb) { | 
|     if (typeof chunk === 'function') | 
|       cb = chunk, chunk = null | 
|     if (typeof encoding === 'function') | 
|       cb = encoding, encoding = 'utf8' | 
|     if (chunk) | 
|       this.write(chunk, encoding) | 
|     const result = Buffer.concat(this[_data], this[_length]) | 
|     this.emit('collect', result) | 
|     return super.end(cb) | 
|   } | 
| } | 
| module.exports.PassThrough = CollectPassThrough |