forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			119 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			119 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 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(); | ||
|  |     } | ||
|  |   } | ||
|  | } |