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.
		
		
		
		
		
			
		
			
				
					
					
						
							103 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							103 lines
						
					
					
						
							2.0 KiB
						
					
					
				var Readable = require('readable-stream').Readable | 
						|
var inherits = require('inherits') | 
						|
 | 
						|
module.exports = from2 | 
						|
 | 
						|
from2.ctor = ctor | 
						|
from2.obj = obj | 
						|
 | 
						|
var Proto = ctor() | 
						|
 | 
						|
function toFunction(list) { | 
						|
  list = list.slice() | 
						|
  return function (_, cb) { | 
						|
    var err = null | 
						|
    var item = list.length ? list.shift() : null | 
						|
    if (item instanceof Error) { | 
						|
      err = item | 
						|
      item = null | 
						|
    } | 
						|
 | 
						|
    cb(err, item) | 
						|
  } | 
						|
} | 
						|
 | 
						|
function from2(opts, read) { | 
						|
  if (typeof opts !== 'object' || Array.isArray(opts)) { | 
						|
    read = opts | 
						|
    opts = {} | 
						|
  } | 
						|
 | 
						|
  var rs = new Proto(opts) | 
						|
  rs._from = Array.isArray(read) ? toFunction(read) : (read || noop) | 
						|
  return rs | 
						|
} | 
						|
 | 
						|
function ctor(opts, read) { | 
						|
  if (typeof opts === 'function') { | 
						|
    read = opts | 
						|
    opts = {} | 
						|
  } | 
						|
 | 
						|
  opts = defaults(opts) | 
						|
 | 
						|
  inherits(Class, Readable) | 
						|
  function Class(override) { | 
						|
    if (!(this instanceof Class)) return new Class(override) | 
						|
    this._reading = false | 
						|
    this._callback = check | 
						|
    this.destroyed = false | 
						|
    Readable.call(this, override || opts) | 
						|
 | 
						|
    var self = this | 
						|
    var hwm = this._readableState.highWaterMark | 
						|
 | 
						|
    function check(err, data) { | 
						|
      if (self.destroyed) return | 
						|
      if (err) return self.destroy(err) | 
						|
      if (data === null) return self.push(null) | 
						|
      self._reading = false | 
						|
      if (self.push(data)) self._read(hwm) | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  Class.prototype._from = read || noop | 
						|
  Class.prototype._read = function(size) { | 
						|
    if (this._reading || this.destroyed) return | 
						|
    this._reading = true | 
						|
    this._from(size, this._callback) | 
						|
  } | 
						|
 | 
						|
  Class.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') | 
						|
    }) | 
						|
  } | 
						|
 | 
						|
  return Class | 
						|
} | 
						|
 | 
						|
function obj(opts, read) { | 
						|
  if (typeof opts === 'function' || Array.isArray(opts)) { | 
						|
    read = opts | 
						|
    opts = {} | 
						|
  } | 
						|
 | 
						|
  opts = defaults(opts) | 
						|
  opts.objectMode = true | 
						|
  opts.highWaterMark = 16 | 
						|
 | 
						|
  return from2(opts, read) | 
						|
} | 
						|
 | 
						|
function noop () {} | 
						|
 | 
						|
function defaults(opts) { | 
						|
  opts = opts || {} | 
						|
  return opts | 
						|
}
 | 
						|
 |