|
|
- var stream = require('readable-stream')
- var inherits = require('inherits')
-
- var SIGNAL_FLUSH =(Buffer.from && Buffer.from !== Uint8Array.from)
- ? Buffer.from([0])
- : new Buffer([0])
-
- module.exports = WriteStream
-
- function WriteStream (opts, write, flush) {
- if (!(this instanceof WriteStream)) return new WriteStream(opts, write, flush)
-
- if (typeof opts === 'function') {
- flush = write
- write = opts
- opts = {}
- }
-
- stream.Writable.call(this, opts)
-
- this.destroyed = false
- this._worker = write || null
- this._flush = flush || null
- }
-
- inherits(WriteStream, stream.Writable)
-
- WriteStream.obj = function (opts, worker, flush) {
- if (typeof opts === 'function') return WriteStream.obj(null, opts, worker)
- if (!opts) opts = {}
- opts.objectMode = true
- return new WriteStream(opts, worker, flush)
- }
-
- WriteStream.prototype._write = function (data, enc, cb) {
- if (SIGNAL_FLUSH === data) this._flush(cb)
- else this._worker(data, enc, cb)
- }
-
- WriteStream.prototype.end = function (data, enc, cb) {
- if (!this._flush) return stream.Writable.prototype.end.apply(this, arguments)
- if (typeof data === 'function') return this.end(null, null, data)
- if (typeof enc === 'function') return this.end(data, null, enc)
- if (data) this.write(data)
- if (!this._writableState.ending) this.write(SIGNAL_FLUSH)
- return stream.Writable.prototype.end.call(this, cb)
- }
-
- WriteStream.prototype.destroy = function (err) {
- if (this.destroyed) return
- this.destroyed = true
- if (err) this.emit('error', err)
- this.emit('close')
- }
|