You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							119 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							119 lines
						
					
					
						
							2.6 KiB
						
					
					
				var Stream = require('stream').Stream
 | 
						|
 | 
						|
module.exports = legacy
 | 
						|
 | 
						|
function 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();
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |