notes/node_modules/gather-stream/index.js

45 lines
1.0 KiB
JavaScript

var Writable = require('stream').Writable,
util = require('util');
function Gatherer(opts) {
opts.decodeStrings = true;
Writable.call(this, opts);
this._length = 0;
this._chunks = [];
this._maxLength = ('maxLength' in opts) ? opts.maxLength : Infinity;
}
util.inherits(Gatherer, Writable);
Gatherer.prototype._write = function (d, _enc, cb) {
if (this._length + d.length > this._maxLength) {
return cb(new Error("Maximum length exceeded!"));
}
this._chunks.push(d);
this._length += d.length;
cb();
}
Gatherer.prototype.getBuffer = function () {
return Buffer.concat(this._chunks, this._length);
}
module.exports = function (opts, cb) {
if (typeof opts === 'function') {
cb = opts;
opts = {};
}
var target = new Gatherer(opts);
target.on('error', cb);
target.on('pipe', function (source) {
source.on('error', cb);
});
target.on('unpipe', function (source) {
source.removeListener('error', cb);
});
target.on('finish', function () {
cb(null, target.getBuffer());
});
return target;
}