wishthis/node_modules/fork-stream/index.js
2022-01-21 09:28:41 +01:00

57 lines
1.2 KiB
JavaScript

var stream = require("stream");
var ForkStream = module.exports = function ForkStream(options) {
options = options || {};
options.objectMode = true;
stream.Writable.call(this, options);
if (options.classifier) {
this._classifier = options.classifier;
}
this.a = new stream.Readable(options);
this.b = new stream.Readable(options);
var self = this;
var resume = function resume() {
if (self.resume) {
var r = self.resume;
self.resume = null;
r.call(null);
}
};
this.a._read = resume;
this.b._read = resume;
this.on("finish", function() {
self.a.push(null);
self.b.push(null);
});
};
ForkStream.prototype = Object.create(stream.Writable.prototype, {constructor: {value: ForkStream}});
ForkStream.prototype._classifier = function(e, done) {
return done(null, !!e);
};
ForkStream.prototype._write = function _write(input, encoding, done) {
var self = this;
this._classifier.call(null, input, function(err, res) {
if (err) {
return done(err);
}
var out = res ? self.a : self.b;
if (out.push(input)) {
return done();
} else {
self.resume = done;
}
});
};