@benev/slate
Version:
frontend web stuff
37 lines • 997 B
JavaScript
export class Reactor {
flat;
signals;
#wait = Promise.resolve();
constructor(flat, signals) {
this.flat = flat;
this.signals = signals;
}
get wait() {
return Promise
.all([this.flat.wait, this.signals.wait])
.then(() => this.#wait);
}
reaction(collector, responder) {
const actuate = responder
? () => responder(collect())
: () => collect();
const lean = this.lean(actuate);
const collect = () => lean.collect(collector);
collect();
return lean.stop;
}
lean(actor) {
const lean1 = this.flat.lean(actor);
const lean2 = this.signals.lean(actor);
return {
stop() {
lean1.stop();
lean2.stop();
},
collect(collector) {
return lean1.collect(() => lean2.collect(collector));
},
};
}
}
//# sourceMappingURL=reactor.js.map