35 lines
854 B
JavaScript
35 lines
854 B
JavaScript
|
'use strict';
|
||
|
|
||
|
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();
|
||
|
}
|
||
|
};
|