You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							96 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							96 lines
						
					
					
						
							2.1 KiB
						
					
					
				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 function | 
						|
function 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 arguments | 
						|
function 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 call | 
						|
module.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 | 
						|
})
 | 
						|
 |