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