[6a3a178] | 1 | const Minipass = require('minipass')
|
---|
| 2 | const _data = Symbol('_data')
|
---|
| 3 | const _length = Symbol('_length')
|
---|
| 4 | class Collect extends Minipass {
|
---|
| 5 | constructor (options) {
|
---|
| 6 | super(options)
|
---|
| 7 | this[_data] = []
|
---|
| 8 | this[_length] = 0
|
---|
| 9 | }
|
---|
| 10 | write (chunk, encoding, cb) {
|
---|
| 11 | if (typeof encoding === 'function')
|
---|
| 12 | cb = encoding, encoding = 'utf8'
|
---|
| 13 |
|
---|
| 14 | if (!encoding)
|
---|
| 15 | encoding = 'utf8'
|
---|
| 16 |
|
---|
| 17 | const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding)
|
---|
| 18 | this[_data].push(c)
|
---|
| 19 | this[_length] += c.length
|
---|
| 20 | if (cb)
|
---|
| 21 | cb()
|
---|
| 22 | return true
|
---|
| 23 | }
|
---|
| 24 | end (chunk, encoding, cb) {
|
---|
| 25 | if (typeof chunk === 'function')
|
---|
| 26 | cb = chunk, chunk = null
|
---|
| 27 | if (typeof encoding === 'function')
|
---|
| 28 | cb = encoding, encoding = 'utf8'
|
---|
| 29 | if (chunk)
|
---|
| 30 | this.write(chunk, encoding)
|
---|
| 31 | const result = Buffer.concat(this[_data], this[_length])
|
---|
| 32 | super.write(result)
|
---|
| 33 | return super.end(cb)
|
---|
| 34 | }
|
---|
| 35 | }
|
---|
| 36 | module.exports = Collect
|
---|
| 37 |
|
---|
| 38 | // it would be possible to DRY this a bit by doing something like
|
---|
| 39 | // this.collector = new Collect() and listening on its data event,
|
---|
| 40 | // but it's not much code, and we may as well save the extra obj
|
---|
| 41 | class CollectPassThrough extends Minipass {
|
---|
| 42 | constructor (options) {
|
---|
| 43 | super(options)
|
---|
| 44 | this[_data] = []
|
---|
| 45 | this[_length] = 0
|
---|
| 46 | }
|
---|
| 47 | write (chunk, encoding, cb) {
|
---|
| 48 | if (typeof encoding === 'function')
|
---|
| 49 | cb = encoding, encoding = 'utf8'
|
---|
| 50 |
|
---|
| 51 | if (!encoding)
|
---|
| 52 | encoding = 'utf8'
|
---|
| 53 |
|
---|
| 54 | const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding)
|
---|
| 55 | this[_data].push(c)
|
---|
| 56 | this[_length] += c.length
|
---|
| 57 | return super.write(chunk, encoding, cb)
|
---|
| 58 | }
|
---|
| 59 | end (chunk, encoding, cb) {
|
---|
| 60 | if (typeof chunk === 'function')
|
---|
| 61 | cb = chunk, chunk = null
|
---|
| 62 | if (typeof encoding === 'function')
|
---|
| 63 | cb = encoding, encoding = 'utf8'
|
---|
| 64 | if (chunk)
|
---|
| 65 | this.write(chunk, encoding)
|
---|
| 66 | const result = Buffer.concat(this[_data], this[_length])
|
---|
| 67 | this.emit('collect', result)
|
---|
| 68 | return super.end(cb)
|
---|
| 69 | }
|
---|
| 70 | }
|
---|
| 71 | module.exports.PassThrough = CollectPassThrough
|
---|