1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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
|