| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | var Stream = require('stream').Streammodule.exports = legacyfunction legacy (fs) {  return {    ReadStream: ReadStream,    WriteStream: WriteStream  }  function ReadStream (path, options) {    if (!(this instanceof ReadStream)) return new ReadStream(path, options);    Stream.call(this);    var self = this;    this.path = path;    this.fd = null;    this.readable = true;    this.paused = false;    this.flags = 'r';    this.mode = 438; /*=0666*/    this.bufferSize = 64 * 1024;    options = options || {};    // Mixin options into this    var keys = Object.keys(options);    for (var index = 0, length = keys.length; index < length; index++) {      var key = keys[index];      this[key] = options[key];    }    if (this.encoding) this.setEncoding(this.encoding);    if (this.start !== undefined) {      if ('number' !== typeof this.start) {        throw TypeError('start must be a Number');      }      if (this.end === undefined) {        this.end = Infinity;      } else if ('number' !== typeof this.end) {        throw TypeError('end must be a Number');      }      if (this.start > this.end) {        throw new Error('start must be <= end');      }      this.pos = this.start;    }    if (this.fd !== null) {      process.nextTick(function() {        self._read();      });      return;    }    fs.open(this.path, this.flags, this.mode, function (err, fd) {      if (err) {        self.emit('error', err);        self.readable = false;        return;      }      self.fd = fd;      self.emit('open', fd);      self._read();    })  }  function WriteStream (path, options) {    if (!(this instanceof WriteStream)) return new WriteStream(path, options);    Stream.call(this);    this.path = path;    this.fd = null;    this.writable = true;    this.flags = 'w';    this.encoding = 'binary';    this.mode = 438; /*=0666*/    this.bytesWritten = 0;    options = options || {};    // Mixin options into this    var keys = Object.keys(options);    for (var index = 0, length = keys.length; index < length; index++) {      var key = keys[index];      this[key] = options[key];    }    if (this.start !== undefined) {      if ('number' !== typeof this.start) {        throw TypeError('start must be a Number');      }      if (this.start < 0) {        throw new Error('start must be >= zero');      }      this.pos = this.start;    }    this.busy = false;    this._queue = [];    if (this.fd === null) {      this._open = fs.open;      this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);      this.flush();    }  }}
 |