'use strict' const stream = require('stream') const numbers = new Array(1000).join(',').split(',').map((v, k) => k) let acc = '' const strings = numbers.map(n => acc += n) const bufs = strings.map(s => new Buffer(s)) const objs = strings.map(s => ({ str: s })) module.exports = class Numbers { constructor (opt) { this.objectMode = opt.objectMode this.encoding = opt.encoding this.ii = 0 this.done = false } pipe (dest) { this.dest = dest this.go() return dest } go () { let flowing = true while (flowing) { if (this.ii >= 1000) { this.dest.end() this.done = true flowing = false } else { flowing = this.dest.write( (this.objectMode ? objs : this.encoding ? strings : bufs)[this.ii++]) } } if (!this.done) this.dest.once('drain', _ => this.go()) } }