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: {
data: 'START',
pause: 'PAUSED',
end: 'END',
error: 'ERROR'
},
PAUSED: {
pause: 'PAUSED',
resume: 'START',
error: 'ERROR'
},
ERROR: {},
END: {}
})
m.on('START:leave', cb => console.log('leaving start!'); cb())
m.on('PAUSED', () => console.log('paused state!'))
m('START')
m('PAUSED')
// 'leaving start'
// 'paused state!'
Create a state machine.
Attach a listener to the state machine.
Transition states in the state machine. Must be a valid state defined on init.
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.
<state> main state function
<state>:enter called when transitioning into state
<state>:leave called when transitioning away from state
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.
- fsm - Finite State Machines in javascript
- machina.js - js ex machina - finite state machines in JavaScript
- javascript-state-machine - A finite state machine javascript micro framework
- SimpleStateManager - browser width state manager