A finite state machine library

Downloads in past


3.1.36 years ago6 years agoMinified + gzip package size for ts-javascript-state-machine in KB


Javascript State Machine
NPM version Build Status
A library for finite state machines.
matter state machine

NOTE for existing users

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:
<script src='https://unpkg.com/@taoqf/javascript-state-machine'></script>
<!-- or -->
<script src='https://unpkg.com/@taoqf/javascript-state-machine/dist/state-machine.min.js'></script>

after downloading the source or the minified version

Using npm:
npm install --save-dev @taoqf/javascript-state-machine

In Node.js:
var StateMachine = require('@taoqf/javascript-state-machine');
A state machine can be constructed using:
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:
... 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 state fsm.can(t) - return true if transition t can occur from the current state fsm.cannot(t) - return true if transition t cannot occur from the current state fsm.transitions() - return list of transitions that are allowed from the current state fsm.allTransitions() - return list of all possible transitions fsm.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.
Release Notes
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