This commit is contained in:
21
vscode-server-linux-x64-web/node_modules/fd-slicer/LICENSE
generated
vendored
Normal file
21
vscode-server-linux-x64-web/node_modules/fd-slicer/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
Copyright (c) 2014 Andrew Kelley
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation files
|
||||
(the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
296
vscode-server-linux-x64-web/node_modules/fd-slicer/index.js
generated
vendored
Normal file
296
vscode-server-linux-x64-web/node_modules/fd-slicer/index.js
generated
vendored
Normal file
@ -0,0 +1,296 @@
|
||||
var fs = require('fs');
|
||||
var util = require('util');
|
||||
var stream = require('stream');
|
||||
var Readable = stream.Readable;
|
||||
var Writable = stream.Writable;
|
||||
var PassThrough = stream.PassThrough;
|
||||
var Pend = require('pend');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
exports.createFromBuffer = createFromBuffer;
|
||||
exports.createFromFd = createFromFd;
|
||||
exports.BufferSlicer = BufferSlicer;
|
||||
exports.FdSlicer = FdSlicer;
|
||||
|
||||
util.inherits(FdSlicer, EventEmitter);
|
||||
function FdSlicer(fd, options) {
|
||||
options = options || {};
|
||||
EventEmitter.call(this);
|
||||
|
||||
this.fd = fd;
|
||||
this.pend = new Pend();
|
||||
this.pend.max = 1;
|
||||
this.refCount = 0;
|
||||
this.autoClose = !!options.autoClose;
|
||||
}
|
||||
|
||||
FdSlicer.prototype.read = function(buffer, offset, length, position, callback) {
|
||||
var self = this;
|
||||
self.pend.go(function(cb) {
|
||||
fs.read(self.fd, buffer, offset, length, position, function(err, bytesRead, buffer) {
|
||||
cb();
|
||||
callback(err, bytesRead, buffer);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
FdSlicer.prototype.write = function(buffer, offset, length, position, callback) {
|
||||
var self = this;
|
||||
self.pend.go(function(cb) {
|
||||
fs.write(self.fd, buffer, offset, length, position, function(err, written, buffer) {
|
||||
cb();
|
||||
callback(err, written, buffer);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
FdSlicer.prototype.createReadStream = function(options) {
|
||||
return new ReadStream(this, options);
|
||||
};
|
||||
|
||||
FdSlicer.prototype.createWriteStream = function(options) {
|
||||
return new WriteStream(this, options);
|
||||
};
|
||||
|
||||
FdSlicer.prototype.ref = function() {
|
||||
this.refCount += 1;
|
||||
};
|
||||
|
||||
FdSlicer.prototype.unref = function() {
|
||||
var self = this;
|
||||
self.refCount -= 1;
|
||||
|
||||
if (self.refCount > 0) return;
|
||||
if (self.refCount < 0) throw new Error("invalid unref");
|
||||
|
||||
if (self.autoClose) {
|
||||
fs.close(self.fd, onCloseDone);
|
||||
}
|
||||
|
||||
function onCloseDone(err) {
|
||||
if (err) {
|
||||
self.emit('error', err);
|
||||
} else {
|
||||
self.emit('close');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
util.inherits(ReadStream, Readable);
|
||||
function ReadStream(context, options) {
|
||||
options = options || {};
|
||||
Readable.call(this, options);
|
||||
|
||||
this.context = context;
|
||||
this.context.ref();
|
||||
|
||||
this.start = options.start || 0;
|
||||
this.endOffset = options.end;
|
||||
this.pos = this.start;
|
||||
this.destroyed = false;
|
||||
}
|
||||
|
||||
ReadStream.prototype._read = function(n) {
|
||||
var self = this;
|
||||
if (self.destroyed) return;
|
||||
|
||||
var toRead = Math.min(self._readableState.highWaterMark, n);
|
||||
if (self.endOffset != null) {
|
||||
toRead = Math.min(toRead, self.endOffset - self.pos);
|
||||
}
|
||||
if (toRead <= 0) {
|
||||
self.destroyed = true;
|
||||
self.push(null);
|
||||
self.context.unref();
|
||||
return;
|
||||
}
|
||||
self.context.pend.go(function(cb) {
|
||||
if (self.destroyed) return cb();
|
||||
var buffer = new Buffer(toRead);
|
||||
fs.read(self.context.fd, buffer, 0, toRead, self.pos, function(err, bytesRead) {
|
||||
if (err) {
|
||||
self.destroy(err);
|
||||
} else if (bytesRead === 0) {
|
||||
self.destroyed = true;
|
||||
self.push(null);
|
||||
self.context.unref();
|
||||
} else {
|
||||
self.pos += bytesRead;
|
||||
self.push(buffer.slice(0, bytesRead));
|
||||
}
|
||||
cb();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
ReadStream.prototype.destroy = function(err) {
|
||||
if (this.destroyed) return;
|
||||
err = err || new Error("stream destroyed");
|
||||
this.destroyed = true;
|
||||
this.emit('error', err);
|
||||
this.context.unref();
|
||||
};
|
||||
|
||||
util.inherits(WriteStream, Writable);
|
||||
function WriteStream(context, options) {
|
||||
options = options || {};
|
||||
Writable.call(this, options);
|
||||
|
||||
this.context = context;
|
||||
this.context.ref();
|
||||
|
||||
this.start = options.start || 0;
|
||||
this.endOffset = (options.end == null) ? Infinity : +options.end;
|
||||
this.bytesWritten = 0;
|
||||
this.pos = this.start;
|
||||
this.destroyed = false;
|
||||
|
||||
this.on('finish', this.destroy.bind(this));
|
||||
}
|
||||
|
||||
WriteStream.prototype._write = function(buffer, encoding, callback) {
|
||||
var self = this;
|
||||
if (self.destroyed) return;
|
||||
|
||||
if (self.pos + buffer.length > self.endOffset) {
|
||||
var err = new Error("maximum file length exceeded");
|
||||
err.code = 'ETOOBIG';
|
||||
self.destroy();
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
self.context.pend.go(function(cb) {
|
||||
if (self.destroyed) return cb();
|
||||
fs.write(self.context.fd, buffer, 0, buffer.length, self.pos, function(err, bytes) {
|
||||
if (err) {
|
||||
self.destroy();
|
||||
cb();
|
||||
callback(err);
|
||||
} else {
|
||||
self.bytesWritten += bytes;
|
||||
self.pos += bytes;
|
||||
self.emit('progress');
|
||||
cb();
|
||||
callback();
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
WriteStream.prototype.destroy = function() {
|
||||
if (this.destroyed) return;
|
||||
this.destroyed = true;
|
||||
this.context.unref();
|
||||
};
|
||||
|
||||
util.inherits(BufferSlicer, EventEmitter);
|
||||
function BufferSlicer(buffer, options) {
|
||||
EventEmitter.call(this);
|
||||
|
||||
options = options || {};
|
||||
this.refCount = 0;
|
||||
this.buffer = buffer;
|
||||
this.maxChunkSize = options.maxChunkSize || Number.MAX_SAFE_INTEGER;
|
||||
}
|
||||
|
||||
BufferSlicer.prototype.read = function(buffer, offset, length, position, callback) {
|
||||
var end = position + length;
|
||||
var delta = end - this.buffer.length;
|
||||
var written = (delta > 0) ? delta : length;
|
||||
this.buffer.copy(buffer, offset, position, end);
|
||||
setImmediate(function() {
|
||||
callback(null, written);
|
||||
});
|
||||
};
|
||||
|
||||
BufferSlicer.prototype.write = function(buffer, offset, length, position, callback) {
|
||||
buffer.copy(this.buffer, position, offset, offset + length);
|
||||
setImmediate(function() {
|
||||
callback(null, length, buffer);
|
||||
});
|
||||
};
|
||||
|
||||
BufferSlicer.prototype.createReadStream = function(options) {
|
||||
options = options || {};
|
||||
var readStream = new PassThrough(options);
|
||||
readStream.destroyed = false;
|
||||
readStream.start = options.start || 0;
|
||||
readStream.endOffset = options.end;
|
||||
// by the time this function returns, we'll be done.
|
||||
readStream.pos = readStream.endOffset || this.buffer.length;
|
||||
|
||||
// respect the maxChunkSize option to slice up the chunk into smaller pieces.
|
||||
var entireSlice = this.buffer.slice(readStream.start, readStream.pos);
|
||||
var offset = 0;
|
||||
while (true) {
|
||||
var nextOffset = offset + this.maxChunkSize;
|
||||
if (nextOffset >= entireSlice.length) {
|
||||
// last chunk
|
||||
if (offset < entireSlice.length) {
|
||||
readStream.write(entireSlice.slice(offset, entireSlice.length));
|
||||
}
|
||||
break;
|
||||
}
|
||||
readStream.write(entireSlice.slice(offset, nextOffset));
|
||||
offset = nextOffset;
|
||||
}
|
||||
|
||||
readStream.end();
|
||||
readStream.destroy = function() {
|
||||
readStream.destroyed = true;
|
||||
};
|
||||
return readStream;
|
||||
};
|
||||
|
||||
BufferSlicer.prototype.createWriteStream = function(options) {
|
||||
var bufferSlicer = this;
|
||||
options = options || {};
|
||||
var writeStream = new Writable(options);
|
||||
writeStream.start = options.start || 0;
|
||||
writeStream.endOffset = (options.end == null) ? this.buffer.length : +options.end;
|
||||
writeStream.bytesWritten = 0;
|
||||
writeStream.pos = writeStream.start;
|
||||
writeStream.destroyed = false;
|
||||
writeStream._write = function(buffer, encoding, callback) {
|
||||
if (writeStream.destroyed) return;
|
||||
|
||||
var end = writeStream.pos + buffer.length;
|
||||
if (end > writeStream.endOffset) {
|
||||
var err = new Error("maximum file length exceeded");
|
||||
err.code = 'ETOOBIG';
|
||||
writeStream.destroyed = true;
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
buffer.copy(bufferSlicer.buffer, writeStream.pos, 0, buffer.length);
|
||||
|
||||
writeStream.bytesWritten += buffer.length;
|
||||
writeStream.pos = end;
|
||||
writeStream.emit('progress');
|
||||
callback();
|
||||
};
|
||||
writeStream.destroy = function() {
|
||||
writeStream.destroyed = true;
|
||||
};
|
||||
return writeStream;
|
||||
};
|
||||
|
||||
BufferSlicer.prototype.ref = function() {
|
||||
this.refCount += 1;
|
||||
};
|
||||
|
||||
BufferSlicer.prototype.unref = function() {
|
||||
this.refCount -= 1;
|
||||
|
||||
if (this.refCount < 0) {
|
||||
throw new Error("invalid unref");
|
||||
}
|
||||
};
|
||||
|
||||
function createFromBuffer(buffer, options) {
|
||||
return new BufferSlicer(buffer, options);
|
||||
}
|
||||
|
||||
function createFromFd(fd, options) {
|
||||
return new FdSlicer(fd, options);
|
||||
}
|
36
vscode-server-linux-x64-web/node_modules/fd-slicer/package.json
generated
vendored
Normal file
36
vscode-server-linux-x64-web/node_modules/fd-slicer/package.json
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "fd-slicer",
|
||||
"version": "1.1.0",
|
||||
"description": "safely create multiple ReadStream or WriteStream objects from the same file descriptor",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "mocha --reporter spec --check-leaks",
|
||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/test.js",
|
||||
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --timeout 10000 --reporter spec --check-leaks test/test.js"
|
||||
},
|
||||
"author": "Andrew Kelley <superjoe30@gmail.com>",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"istanbul": "~0.3.3",
|
||||
"mocha": "~2.0.1",
|
||||
"stream-equal": "~0.1.5",
|
||||
"streamsink": "~1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"pend": "~1.2.0"
|
||||
},
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/andrewrk/node-fd-slicer.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/andrewrk/node-fd-slicer/issues"
|
||||
},
|
||||
"keywords": [
|
||||
"createReadStream",
|
||||
"createWriteStream"
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user