| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | var util = require('util');var PassThrough = require('readable-stream/passthrough');module.exports = {  Readable: Readable,  Writable: Writable};util.inherits(Readable, PassThrough);util.inherits(Writable, PassThrough);// Patch the given method of instance so that the callback// is executed once, before the actual method is called the// first time.function beforeFirstCall(instance, method, callback) {  instance[method] = function() {    delete instance[method];    callback.apply(this, arguments);    return this[method].apply(this, arguments);  };}function Readable(fn, options) {  if (!(this instanceof Readable))    return new Readable(fn, options);  PassThrough.call(this, options);  beforeFirstCall(this, '_read', function() {    var source = fn.call(this, options);    var emit = this.emit.bind(this, 'error');    source.on('error', emit);    source.pipe(this);  });  this.emit('readable');}function Writable(fn, options) {  if (!(this instanceof Writable))    return new Writable(fn, options);  PassThrough.call(this, options);  beforeFirstCall(this, '_write', function() {    var destination = fn.call(this, options);    var emit = this.emit.bind(this, 'error');    destination.on('error', emit);    this.pipe(destination);  });  this.emit('writable');}
 |