slice-stream
Version:
Pipe data through a stream until some fixed length is reached, then callback.
35 lines (26 loc) • 854 B
JavaScript
;
module.exports = SliceStream;
var Transform = require('readable-stream/transform');
var inherits = require("util").inherits;
inherits(SliceStream, Transform);
function SliceStream(opts, sliceFn) {
if (!(this instanceof SliceStream)) {
return new SliceStream(opts, sliceFn);
}
this._opts = opts;
this._accumulatedLength = 0;
this.sliceFn = sliceFn;
Transform.call(this);
}
SliceStream.prototype._transform = function (chunk, encoding, callback) {
this._accumulatedLength += chunk.length;
if (this._accumulatedLength >= this._opts.length) {
//todo handle more than one slice in a stream
var offset = chunk.length - (this._accumulatedLength - this._opts.length);
this.sliceFn(chunk.slice(0, offset), true, chunk.slice(offset));
callback();
} else {
this.sliceFn(chunk);
callback();
}
};