force handler functions
Some checks failed
Pull request change / publish (pull_request) Failing after 10s

This commit is contained in:
2025-11-06 15:51:16 -07:00
parent 466e95cb14
commit 1dcdc17436

View File

@@ -1,44 +1,44 @@
import { Stream } from 'stream'; import { Stream } from "stream";
export class Interactor { export class Interactor {
_actions = new Stream(); #actions = new Stream();
_reactions = new Stream(); #reactions = new Stream();
_latestReaction; #latestReaction;
#latestReactions = {};
constructor(initialReaction = new Reaction()) { constructor(initialReaction = new Reaction()) {
this._latestReactions = {}; this.#actions.listen((action) =>
this._actions.listen((action) => this._interaction(action)); this[`handle${action.constructor.name}`](action)
);
this._react(initialReaction); this._react(initialReaction);
} }
act(action) { act(action) {
if (!(action instanceof Action)) throw 'invalid action'; if (!(action instanceof Action)) throw "invalid action";
this._actions.add(action); this.#actions.add(action);
} }
observe(reactionHandler, provideLatestReaction = true) { observe(reactionHandler, provideLatestReaction = true) {
if (provideLatestReaction) reactionHandler(this._latestReaction); if (provideLatestReaction) reactionHandler(this.#latestReaction);
let listener = (reaction) => { let listener = (reaction) => {
if (!(reaction instanceof Reaction)) throw 'invalid reaction'; if (!(reaction instanceof Reaction)) throw "invalid reaction";
reactionHandler(reaction); reactionHandler(reaction);
}; };
this._reactions.listen(listener); this.#reactions.listen(listener);
return listener; return listener;
} }
ignore(listener) { ignore(listener) {
this._reactions.ignore(listener); this.#reactions.ignore(listener);
} }
_interaction(action) {}
_react(reaction) { _react(reaction) {
if (!(reaction instanceof Reaction)) throw 'invalid reaction'; if (!(reaction instanceof Reaction)) throw "invalid reaction";
let latest = this._latestReactions[reaction.constructor.name]; let latest = this.#latestReactions[reaction.constructor.name];
if (!reaction.equals(latest)) { if (!reaction.equals(latest)) {
this._latestReaction = reaction; this.#latestReaction = reaction;
this._latestReactions[reaction.constructor.name] = reaction; this.#latestReactions[reaction.constructor.name] = reaction;
this._reactions.add(reaction); this.#reactions.add(reaction);
} }
} }
} }