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