| 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 | 
| } |