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;
|
|
|