@thi.ng/rstream
Version:
Reactive streams & subscription primitives for constructing dataflow graphs / pipelines
33 lines (32 loc) • 772 B
JavaScript
import {
State
} from "./api.js";
import { ASidechain } from "./asidechain.js";
import { __optsWithID } from "./idgen.js";
const sidechainToggle = (src, side, opts) => src.subscribe(new SidechainToggle(side, opts));
class SidechainToggle extends ASidechain {
isActive;
constructor(side, opts) {
opts = __optsWithID("sidetoggle", opts);
super(opts);
this.isActive = !!opts.initial;
const pred = opts.pred || (() => true);
this.sideSub = side.subscribe({
next: (x) => {
if (pred(x)) {
this.isActive = !this.isActive;
}
},
done: () => this.done()
});
}
next(x) {
if (this.isActive && this.state < State.DONE) {
super.next(x);
}
}
}
export {
SidechainToggle,
sidechainToggle
};