###Make any JavaScript object to be a finite state machine
Stable, production-ready and battle-tested. Supports NodeJS version 4 and later. Tested up to Node 10.
npm install object-fsm
var ObjectFsm = require('object-fsm');
// Any object can become an FSM
var light = {};
// Mix in ObjectFsm to the object
ObjectFsm(light);
light.addStates(['Green', 'Yellow', 'Red']);
light.setStartingState('Red'); // Current state -> Red
// Parameters are: eventName, stateFrom, stateTo, handlerFunc (see doc)
light.addEvent('go', 'Red', 'Green', function () {
console.log('Let\'s go!');
});
light.addEvent('prepareToStop', 'Green', 'Yellow', function () {
console.log('Prepare to stop...');
});
light.addEvent('stop', 'Yellow', 'Red', function () {
console.log('Everybody stop!');
});
light.handleEvent('go'); // state: green
light.handleEvent('prepareToStop'); // state: yellow
light.handleEvent('stop'); // state: redMixes FSM into the object.
Parameters
objThe object that will become an FSM
Adds a state to FSM Note that FSM automatically enters the state added first
Parameters
statestring State name
Returns boolean result Whether adding a state succeeded or not
Adds a list of states to FSM
Parameters
Sets a starting state. FSM immediately moves to that state.
Parameters
statestring
Returns true if FSM has state {state}
Parameters
state
Returns boolean
Checks if FSM has given event
Parameters
eventstring
Returns boolean
Adds a new event to FSM
Parameters
eventNamestring Event namestatesFrom(Array<string> | string) A one or more states in which FSM can handle this eventstateTostring State to which the event transitions FSMhandler[function (Any): Any] Function that is invoked upon event
Notifies FSM about an event
Parameters
eventstring Existing eventarguments...Any Will be passed to event handler
Returns Any Return value of the event handler
Returns true if FSM is able to handle event right now
Parameters
event
Returns boolean
Defers an ongoing transition until future call to finalizeTransition.
Use for any asynchronous event hanling.
NOTE: this function can be called only in event handler (during an event), or in willTransition event handler.
Finalizes a deferred transition.
npm test
Runs tests of the source code located in src directory.
Tests are located in test directory.
MIT