Files
eewing ec317eb17c
CI / build (push) Has been skipped
CI / deploy (push) Successful in 1m11s
INIT
2026-02-18 15:17:47 -06:00

19 lines
553 B
JavaScript

import { simpleBox } from "svelte-toolbelt";
export class StateMachine {
state;
#machine;
constructor(initialState, machine) {
this.state = simpleBox(initialState);
this.#machine = machine;
this.dispatch = this.dispatch.bind(this);
}
#reducer(event) {
// @ts-expect-error state.current is keyof M
const nextState = this.#machine[this.state.current][event];
return nextState ?? this.state.current;
}
dispatch(event) {
this.state.current = this.#reducer(event);
}
}