UML State Machine
An implemenation of the UML state machine pattern in Javascript.
- Hierarchical
- onEntry onExit function
- Observable
Install
npm install uml-state-machine --save
Usage
Here is the hello word of finite state machine: a light switch:
- 2 events:
evOn
andevOff
. - 2 states:
Off
andOn
. - 2 actions:
light.doOff()
andlight.doOn()
.
State machine diagram describing the light switch:
const stateMachineDefinition = name: "LightSwitch" events: "evOn" "evOff" state: states: "Off": light transitions: event: "evOn" nextState: "On" actions: light "On": light transitions: event: "evOff" nextState: "Off" actions: light const light = ; const machine = ; machine;machine;machine;
Hierarchical example
Hierarchical state machine allows to model state as a tree, the goal is to gather states that share common transitions.
When transitioning from one state to another, a chain of onExit
and onEntry
functions is called.
const smDef = name: "Hierarchical" events: "evOn" "evOff" state: transitions: event:"evOn" nextState:"S2_3" states: "S1": states: "S1_1":{} "S1_2": states: "S1_2_1":{} "S1_2_2":{} "S2": states: "S2_1":{} "S2_2":{} "S2_3":{} const machine = ; machine;/*onEntry SonEntry S1onEntry S1_1*/machine/* onTransitionBegin S1_1 S2_3onExit S1_1onExit S1onEntry S2onEntry S2_3onTransitionEnd S1_1 S2_3*/
Observable
To find out what's going on inside the state mahine, customs observers
can be attached.
Below is an example of a simple observer that logs when a state enters or exits, and when a transition begins and ends.
const machine = ;