mirror of
https://github.com/thangisme/notes.git
synced 2024-12-22 15:36:36 -05:00
45 lines
1.0 KiB
JavaScript
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;
|
|
}
|