This commit is contained in:
+18
@@ -0,0 +1,18 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user