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.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							118 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(); | 
						|
    } | 
						|
  } | 
						|
}
 | 
						|
 |