UNPKG

funstream

Version:

Funstream gives you iteratorish methods on your streams.

41 lines (39 loc) 1.08 kB
'use strict' let fun const Readable = require('stream').Readable const FunStream = require('./fun-stream.js') const OPTS = require('./fun-stream.js').OPTS const DATA = Symbol('data') const INDEX = Symbol('index') class FunArray extends Readable { constructor (data, opts) { super({objectMode: true}) FunArray.funInit.call(this, opts) this[DATA] = data this[INDEX] = 0 } _read () { while (this[INDEX] < this[DATA].length) { if (!this.push(this[DATA][this[INDEX]++])) { return } } this.push(null) } forEach (forEachWith, forEachOpts) { const opts = Object.assign({}, this[OPTS], forEachOpts || {}) if (FunStream.isAsync(forEachWith, 1, opts)) { return FunStream.prototype.forEach.call(this, forEachWith, forEachOpts) } else { if (!fun) fun = require('./index.js') return fun(new opts.Promise(resolve => { process.nextTick(() => { this[DATA].forEach(v => forEachWith(v)) resolve() }) })) } } } FunStream.mixin(FunArray) module.exports = FunArray