const { Transform } = require('readable-stream') function inherits (fn, sup) { fn.super_ = sup fn.prototype = Object.create(sup.prototype, { constructor: { value: fn, enumerable: false, writable: true, configurable: true } }) } // create a new export function, used by both the main export and // the .ctor export, contains common logic for dealing with arguments function through2 (construct) { return (options, transform, flush) => { if (typeof options === 'function') { flush = transform transform = options options = {} } if (typeof transform !== 'function') { // noop transform = (chunk, enc, cb) => cb(null, chunk) } if (typeof flush !== 'function') { flush = null } return construct(options, transform, flush) } } // main export, just make me a transform stream! const make = through2((options, transform, flush) => { const t2 = new Transform(options) t2._transform = transform if (flush) { t2._flush = flush } return t2 }) // make me a reusable prototype that I can `new`, or implicitly `new` // with a constructor call const ctor = through2((options, transform, flush) => { function Through2 (override) { if (!(this instanceof Through2)) { return new Through2(override) } this.options = Object.assign({}, options, override) Transform.call(this, this.options) this._transform = transform if (flush) { this._flush = flush } } inherits(Through2, Transform) return Through2 }) const obj = through2(function (options, transform, flush) { const t2 = new Transform(Object.assign({ objectMode: true, highWaterMark: 16 }, options)) t2._transform = transform if (flush) { t2._flush = flush } return t2 }) module.exports = make module.exports.ctor = ctor module.exports.obj = obj