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.
|
|
const Minipass = require('minipass') const _flush = Symbol('_flush') const _flushed = Symbol('_flushed') const _flushing = Symbol('_flushing') class Flush extends Minipass { constructor (opt = {}) { if (typeof opt === 'function') opt = { flush: opt }
super(opt)
// or extend this class and provide a 'flush' method in your subclass
if (typeof opt.flush !== 'function' && typeof this.flush !== 'function') throw new TypeError('must provide flush function in options')
this[_flush] = opt.flush || this.flush }
emit (ev, ...data) { if ((ev !== 'end' && ev !== 'finish') || this[_flushed]) return super.emit(ev, ...data)
if (this[_flushing]) return
this[_flushing] = true
const afterFlush = er => { this[_flushed] = true er ? super.emit('error', er) : super.emit('end') }
const ret = this[_flush](afterFlush) if (ret && ret.then) ret.then(() => afterFlush(), er => afterFlush(er)) } }
module.exports = Flush
|