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