blob: a3c67d22eebc2d858afd985e723d010ad7d267c1 [file] [log] [blame]
var util = require('util')
var Promise = require('bluebird')
var EventEmitter = require('eventemitter3').EventEmitter
function RiskyStream(stream) {
EventEmitter.call(this)
this.endListener = function() {
this.ended = true
this.stream.removeListener('end', this.endListener)
if (!this.expectingEnd) {
this.emit('unexpectedEnd')
}
this.emit('end')
}.bind(this)
this.stream = stream
.on('end', this.endListener)
this.expectingEnd = false
this.ended = false
}
util.inherits(RiskyStream, EventEmitter)
RiskyStream.prototype.end = function() {
this.expectEnd()
return this.stream.end()
}
RiskyStream.prototype.expectEnd = function() {
this.expectingEnd = true
return this
}
RiskyStream.prototype.waitForEnd = function() {
var stream = this.stream
var endListener
this.expectEnd()
return new Promise(function(resolve) {
if (stream.ended) {
return resolve(true)
}
stream.on('end', endListener = function() {
resolve(true)
})
// Make sure we actually have a chance to get the 'end' event.
stream.resume()
})
.finally(function() {
stream.removeListener('end', endListener)
})
}
module.exports = RiskyStream