65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
var Splicer = require('stream-splicer');
|
|
var inherits = require('inherits');
|
|
|
|
module.exports = Labeled;
|
|
inherits(Labeled, Splicer);
|
|
|
|
module.exports.obj = function (streams, opts) {
|
|
if (!opts) opts = {};
|
|
opts.objectMode = true;
|
|
return new Labeled(streams, opts);
|
|
};
|
|
|
|
function Labeled (streams, opts) {
|
|
if (!(this instanceof Labeled)) return new Labeled(streams, opts);
|
|
Splicer.call(this, [], opts);
|
|
|
|
var reps = [];
|
|
for (var i = 0; i < streams.length; i++) {
|
|
var s = streams[i];
|
|
if (typeof s === 'string') continue;
|
|
if (Array.isArray(s)) {
|
|
s = new Labeled(s, opts);
|
|
}
|
|
if (i >= 0 && typeof streams[i-1] === 'string') {
|
|
s.label = streams[i-1];
|
|
}
|
|
reps.push(s);
|
|
}
|
|
if (typeof streams[i-1] === 'string') {
|
|
reps.push(new Labeled([], opts));
|
|
}
|
|
this.splice.apply(this, [0,0].concat(reps));
|
|
}
|
|
|
|
Labeled.prototype.indexOf = function (stream) {
|
|
if (typeof stream === 'string') {
|
|
for (var i = 0; i < this._streams.length; i++) {
|
|
if (this._streams[i].label === stream) return i;
|
|
}
|
|
return -1;
|
|
}
|
|
else {
|
|
return Splicer.prototype.indexOf.call(this, stream);
|
|
}
|
|
};
|
|
|
|
Labeled.prototype.get = function (key) {
|
|
if (typeof key === 'string') {
|
|
var ix = this.indexOf(key);
|
|
if (ix < 0) return undefined;
|
|
return this._streams[ix];
|
|
}
|
|
else return Splicer.prototype.get.call(this, key);
|
|
};
|
|
|
|
Labeled.prototype.splice = function (key) {
|
|
var ix;
|
|
if (typeof key === 'string') {
|
|
ix = this.indexOf(key);
|
|
}
|
|
else ix = key;
|
|
var args = [ ix ].concat([].slice.call(arguments, 1));
|
|
return Splicer.prototype.splice.apply(this, args);
|
|
};
|