You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
const isFn = require('./isFn');
|
|
const extend = require('./extend');
|
|
const inherits = require('./inherits');
|
|
|
|
const Transform = require('stream').Transform;
|
|
|
|
exports = through(function(opts, transform, flush) {
|
|
const t = new Transform(opts);
|
|
|
|
t._transform = transform;
|
|
if (flush) t._flush = flush;
|
|
|
|
return t;
|
|
});
|
|
|
|
exports.obj = through(function(opts, transform, flush) {
|
|
const t = new Transform(
|
|
extend(
|
|
{
|
|
objectMode: true,
|
|
highWaterMark: 16
|
|
},
|
|
opts
|
|
)
|
|
);
|
|
|
|
t._transform = transform;
|
|
if (flush) t._flush = flush;
|
|
|
|
return t;
|
|
});
|
|
|
|
exports.ctor = through(function(opts, transform, flush) {
|
|
function Through(override) {
|
|
if (!(this instanceof Through)) return new Through(override);
|
|
|
|
Transform.call(this, extend(opts, override));
|
|
}
|
|
|
|
inherits(Through, Transform);
|
|
|
|
const proto = Through.prototype;
|
|
proto._transform = transform;
|
|
if (flush) proto._flush = flush;
|
|
|
|
return Through;
|
|
});
|
|
|
|
function through(streamFactory) {
|
|
return function(opts, transform, flush) {
|
|
if (isFn(opts)) {
|
|
flush = transform;
|
|
transform = opts;
|
|
opts = {};
|
|
}
|
|
|
|
if (!isFn(transform)) transform = defTransform;
|
|
if (!isFn(flush)) flush = null;
|
|
|
|
return streamFactory(opts, transform, flush);
|
|
};
|
|
}
|
|
|
|
function defTransform(chunk, enc, cb) {
|
|
cb(null, chunk);
|
|
}
|
|
|
|
module.exports = exports;
|
|
|