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