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