A finite state machine library
npm install ts-javascript-state-machine

A library for finite state machines.
> VERSION 3.0 Is a significant rewrite from earlier versions.
Existing 2.x users should be sure to read the Upgrade Guide.
In a browser:
``html`
> after downloading the source or the minified version
Using npm:
`shell`
npm install --save-dev @taoqf/javascript-state-machine
In Node.js:
`javascript`
var StateMachine = require('@taoqf/javascript-state-machine');
A state machine can be constructed using:
`javascript`
var fsm = new StateMachine({
init: 'solid',
transitions: [
{ name: 'melt', from: 'solid', to: 'liquid' },
{ name: 'freeze', from: 'liquid', to: 'solid' },
{ name: 'vaporize', from: 'liquid', to: 'gas' },
{ name: 'condense', from: 'gas', to: 'liquid' }
],
methods: {
onMelt: function() { console.log('I melted') },
onFreeze: function() { console.log('I froze') },
onVaporize: function() { console.log('I vaporized') },
onCondense: function() { console.log('I condensed') }
}
});
... which creates an object with a current state property:
* fsm.state
... methods to transition to a different state:
* fsm.melt()fsm.freeze()
* fsm.vaporize()
* fsm.condense()
*
... observer methods called automatically during the lifecycle of a transition:
* onMelt()onFreeze()
* onVaporize()
* onCondense()
*
... along with the following helper methods:
* fsm.is(s) - return true if state s is the current statefsm.can(t)
* - return true if transition t can occur from the current statefsm.cannot(t)
* - return true if transition t cannot occur from the current statefsm.transitions()
* - return list of transitions that are allowed from the current statefsm.allTransitions()
* - return list of all possible transitionsfsm.allStates()` - return list of all possible states
*
A state machine consists of a set of States
* solid
* liquid
* gas
A state machine changes state by using Transitions
* melt
* freeze
* vaporize
* condense
A state machine can perform actions during a transition by observing Lifecycle Events
* onBeforeMelt
* onAfterMelt
* onLeaveSolid
* onEnterLiquid
* ...
A state machine can also have arbitrary Data and Methods.
Multiple instances of a state machine can be created using a State Machine Factory.
Read more about
* States and Transitions
* Data and Methods
* Lifecycle Events
* Asynchronous Transitions
* Initialization
* Error Handling
* State History
* Visualization
* State Machine Factory
* Upgrading from 2.x
* TypeScript
You can Contribute to this project with issues or pull requests.
You might also want to support this project by purchasing a commercial license.
See RELEASE NOTES file.
Dual-licensed under the LGPL for the open source community and also available with support
under a commercial license.
If you have any ideas, feedback, requests or bug reports, you can reach me at
jake@codeincomplete.com, or via
my website: Code inComplete