Spaces:
Sleeping
Sleeping
| 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(); | |
| } | |
| } | |
| } | |