Socket
Socket
Sign inDemoInstall

fd-slicer

Package Overview
Dependencies
1
Maintainers
2
Versions
12
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.3.2 to 0.4.0

97

index.js

@@ -6,2 +6,3 @@ var fs = require('fs');

var Writable = stream.Writable;
var PassThrough = stream.PassThrough;
var Pend = require('pend');

@@ -11,2 +12,4 @@ var EventEmitter = require('events').EventEmitter;

module.exports = FdSlicer;
FdSlicer.BufferSlicer = BufferSlicer;
FdSlicer.createFromBuffer = createFromBuffer;

@@ -86,3 +89,3 @@ util.inherits(FdSlicer, EventEmitter);

this.start = options.start || 0;
this.end = options.end;
this.endOffset = options.end;
this.pos = this.start;

@@ -97,4 +100,4 @@ this.destroyed = false;

var toRead = Math.min(self._readableState.highWaterMark, n);
if (self.end != null) {
toRead = Math.min(toRead, self.end - self.pos);
if (self.endOffset != null) {
toRead = Math.min(toRead, self.endOffset - self.pos);
}

@@ -185,1 +188,89 @@ if (toRead <= 0) {

};
util.inherits(BufferSlicer, EventEmitter);
function BufferSlicer(buffer) {
EventEmitter.call(this);
this.refCount = 0;
this.buffer = buffer;
}
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);
process.nextTick(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.start = options.start || 0;
readStream.endOffset = options.end;
readStream.pos = readStream.endOffset || this.buffer.length; // yep, we're already done
readStream.destroyed = false;
readStream.write(this.buffer.slice(readStream.start, readStream.pos));
readStream.end();
readStream.destroy = function() {
readStream.destroyed = true;
};
return readStream;
};
BufferSlicer.prototype.createWriteStream = function(options) {
var bufferSlicer = this;
options = options || {};
var writeStream = new WriteStream(options);
writeStream.start = options.start || 0;
writeStream.endOffset = options.end || Infinity;
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');
};
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) {
return new BufferSlicer(buffer);
}

2

package.json
{
"name": "fd-slicer",
"version": "0.3.2",
"version": "0.4.0",
"description": "safely create multiple ReadStream or WriteStream objects from the same file descriptor",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -39,2 +39,4 @@ # fd-slicer

* Ability to set a maximum size and emit an error if this size is exceeded.
* Ability to create an `FdSlicer` instance from a `Buffer`. This enables you
to provide API for handling files as well as buffers using the same API.

@@ -59,5 +61,18 @@ ## Usage

You can also create from a buffer:
```js
var FdSlicer = require('fd-slicer');
var fdSlicer = FdSlicer.createFromBuffer(someBuffer);
var firstPart = fdSlicer.createReadStream({start: 0, end: 100});
var secondPart = fdSlicer.createReadStream({start: 100});
var firstOut = fs.createWriteStream("first.txt");
var secondOut = fs.createWriteStream("second.txt");
firstPart.pipe(firstOut);
secondPart.pipe(secondOut);
```
## API Documentation
### FdSlicer(fd, [options])
### new FdSlicer(fd, [options])

@@ -84,2 +99,10 @@ ```js

### FdSlicer.createFromBuffer(buffer)
```js
var FdSlicer = require('fd-slicer');
var fdSlicer = FdSlicer.createFromBuffer(someBuffer);
// ...
```
#### Properties

@@ -89,3 +112,3 @@

The file descriptor passed in.
The file descriptor passed in. `undefined` if created from a buffer.

@@ -166,2 +189,3 @@ #### Methods

Emitted when fd-slicer closes the file descriptor due to `autoClose`.
Emitted when fd-slicer closes the file descriptor due to `autoClose`. Never
emitted if created from a buffer.
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc