Stateful finite state machine wrapper around
fsm
. Emits events when transitioning
states.
$ npm install fsm-event
const fsm = require('fsm-event')
const m = fsm('START', {
START: { pause: 'PAUSED' },
PAUSED: { resume: 'START' }
})
m.on('START:leave', cb => console.log('leaving start!'); cb())
m.on('PAUSED', () => console.log('paused state!'))
m('pause')
// 'leaving start'
// 'paused state!'
Create a state machine. start
defaults to START
.
Attach a listener to the state machine. See events for an overview of all events.
Transition states in the state machine. Must be a valid transition defined on
initalization. Will throw if an invalid transition is triggered. Alias:
m.emit(event)
.
Each state transition triggers 3 events. important: When listening to
:enter
or :leave
events, the callback must be called so that the state
machine can proceed to the next state.
error incorrect transition
<state> when new state is entered
<state>:enter when transitioning into state
<state>:leave when transitioning away from state
done when state transition finished
Most state machines have overly complicated interfaces for managing state. The fsm state machine is simple but doesn't manage state for you, so I wrote a wrapper around it that manages state in an event-driven way. The initial use case was to manage complex, stateful UI elements but it can be used anywhere.