choppa
Version:
Chop a stream into specified size chunks.
37 lines (30 loc) • 855 B
JavaScript
var through = require('through2');
var choppa = function(chunkSize) {
chunkSize = chunkSize === undefined ? 1 : chunkSize;
var prev = new Buffer(0);
var transform = function(chunk, enc, cb) {
if (typeof chunk === 'string') chunk = new Buffer(chunk);
chunk = Buffer.concat([prev, chunk]);
var self = this;
if (chunkSize > 0) {
while (chunk.length >= chunkSize) {
self.push(chunk.slice(0, chunkSize));
chunk = chunk.slice(chunkSize);
}
prev = chunk;
} else {
while (chunk.length) {
var size = Math.floor(Math.random() * chunk.length) + 1;
self.push(chunk.slice(0, size));
chunk = chunk.slice(size);
}
}
cb();
};
var flush = function(cb) {
this.push(prev);
cb();
};
return through.obj(transform, flush);
};
module.exports = choppa;