object-fsm v1.0.1
object-fsm
###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.
Installation
npm install object-fsmHow to use
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: redAPI Docs
ObjectFsm
Mixes FSM into the object.
Parameters
objThe object that will become an FSM
addState
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
addStates
Adds a list of states to FSM
Parameters
setStartingState
Sets a starting state. FSM immediately moves to that state.
Parameters
statestring
hasState
Returns true if FSM has state {state}
Parameters
state
Returns boolean
hasEvent
Checks if FSM has given event
Parameters
eventstring
Returns boolean
addEvent
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
handleEvent
Notifies FSM about an event
Parameters
eventstring Existing eventarguments...Any Will be passed to event handler
Returns Any Return value of the event handler
canHandleEvent
Returns true if FSM is able to handle event right now
Parameters
event
Returns boolean
deferTransition
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.
finalizeTransition
Finalizes a deferred transition.
Testing
npm testRuns tests of the source code located in src directory.
Tests are located in test directory.
License
MIT