var stream = require("readable-stream"); var duplex2 = module.exports = function duplex2(options, writable, readable) { return new DuplexWrapper(options, writable, readable); }; var DuplexWrapper = exports.DuplexWrapper = function DuplexWrapper(options, writable, readable) { if (typeof readable === "undefined") { readable = writable; writable = options; options = null; } options = options || {}; options.objectMode = true; stream.Duplex.call(this, options); this._bubbleErrors = (typeof options.bubbleErrors === "undefined") || !!options.bubbleErrors; this._writable = writable; this._readable = readable; var self = this; writable.once("finish", function() { self.end(); }); this.once("finish", function() { writable.end(); }); readable.on("data", function(e) { if (!self.push(e)) { readable.pause(); } }); readable.once("end", function() { return self.push(null); }); if (this._bubbleErrors) { writable.on("error", function(err) { return self.emit("error", err); }); readable.on("error", function(err) { return self.emit("error", err); }); } }; DuplexWrapper.prototype = Object.create(stream.Duplex.prototype, {constructor: {value: DuplexWrapper}}); DuplexWrapper.prototype._write = function _write(input, encoding, done) { this._writable.write(input, encoding, done); }; DuplexWrapper.prototype._read = function _read(n) { this._readable.resume(); };