| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | var Transform = require('readable-stream').Transform  , inherits  = require('util').inherits  , xtend     = require('xtend')function DestroyableTransform(opts) {  Transform.call(this, opts)  this._destroyed = false}inherits(DestroyableTransform, Transform)DestroyableTransform.prototype.destroy = function(err) {  if (this._destroyed) return  this._destroyed = true    var self = this  process.nextTick(function() {    if (err)      self.emit('error', err)    self.emit('close')  })}// a noop _transform functionfunction noop (chunk, enc, callback) {  callback(null, chunk)}// create a new export function, used by both the main export and// the .ctor export, contains common logic for dealing with argumentsfunction through2 (construct) {  return function (options, transform, flush) {    if (typeof options == 'function') {      flush     = transform      transform = options      options   = {}    }    if (typeof transform != 'function')      transform = noop    if (typeof flush != 'function')      flush = null    return construct(options, transform, flush)  }}// main export, just make me a transform stream!module.exports = through2(function (options, transform, flush) {  var t2 = new DestroyableTransform(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 callmodule.exports.ctor = through2(function (options, transform, flush) {  function Through2 (override) {    if (!(this instanceof Through2))      return new Through2(override)    this.options = xtend(options, override)    DestroyableTransform.call(this, this.options)  }  inherits(Through2, DestroyableTransform)  Through2.prototype._transform = transform  if (flush)    Through2.prototype._flush = flush  return Through2})module.exports.obj = through2(function (options, transform, flush) {  var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options))  t2._transform = transform  if (flush)    t2._flush = flush  return t2})
 |