A minimal state machine class
npm i @ts-ddd/state-machine
yarn add @ts-ddd/state-machine
pnpm install @ts-ddd/state-machine
bun add @ts-ddd/state-machine
import { StateMachine } from '@ts-ddd/state-machine';
enum LightTransitions {
RED = "red",
GREEN = "green",
PULSING_GREEN = "pulsing_green",
AMBER = "amber",
}
const transitions = {
[LightTransitions.RED]: [LightTransitions.GREEN],
[LightTransitions.GREEN]: [LightTransitions.PULSING_GREEN],
[LightTransitions.PULSING_GREEN]: [LightTransitions.AMBER],
[LightTransitions.AMBER]: [LightTransitions.RED],
}
const light = StateMachine.instance({
transitions,
currentState: LightTransitions.RED,
});
light.setState(LightTransitions.GREEN);
light.canTransitionTo(LightTransitions.PULSING_GREEN) // true
StateMachine.validateTransition(transitions, LightTransitions.RED, LightTransitions.GREEN) // true
StateMachine.validateTransition(transitions, LightTransitions.PULSING_GREEN, LightTransitions.GREEN) // false
light.getState() // 'green'
light.is(LightTransitions.AMBER) // false