- Notifications
You must be signed in to change notification settings - Fork0
Carbon FSM is a async enabled lightweight but powerful finite state machine for javascript/nodejs
License
NotificationsYou must be signed in to change notification settings
HydroCarbons/carbon-fsm
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
npm install carbon-fsm --save
const{ FiniteStateMachine}=require("carbon-fsm");
varFSM=newFiniteStateMachine(myAppConfig)
awaitFSM.send("EVENT_NAME")
FSM.currentState()
FSM.Data()
FSM.displayHistory()e.g.[History]................................................................................0.00(fsm-init)=>[STATE_A]3.01EVENT_C @STATE_A=>[STATE_C]3.01EVENT_F @STATE_C=>[STATE_F]4.01timer_over @STATE_F=>[STATE_C]4.01EVENT_ERROR @STATE_C=>[STATE_ERROR]5.01timer_over @STATE_ERROR=>[STATE_C]5.01EVENT_A @STATE_C=>[STATE_A]14.23EVENT_FINAL @STATE_A=>[STATE_FINAL]................................................................................
FSM.displayStateTransitionDiagram()e.g.[StateTransitionDiagram]((fsm-init))=>STATE_A(EVENT_C)=>STATE_C(EVENT_F)=>STATE_F(timer_over)=>STATE_C(EVENT_ERROR)=>STATE_ERROR(timer_over)=>STATE_C(EVENT_A)=>STATE_A(EVENT_FINAL)=>STATE_FINAL
FSM.displayCurrentState(frequencyInMillseconds)
varmyAppEngineConfiguration={// App Specific Data_data:{},// Specify initial state of the FSM_initialState:"STATE_A",// State & Event Table// Format:// STATE_NAME : { STATE_DATA }// where STATE_DATA = "on" is a function executed by FSM on entering the state// = type is type of the state. It can be "timer" or "final"// = TRANSITION_MAP = { EVENT_NAME : STATE_NAME }//// "timer" State (Special state type)// = FSM executes "on" function and then wait for "timer_duration"// before auto transitioning to state specified in "timer_over"// => timer_over can have a state name or// $last_state or $initial_state//// "final" State (Special state type)// = FSM stops processing events after executing "on" function// of final state.//STATE_A:{// State processing functionon:asyncfunction(data){console.log("Processing A")// do something with your data},// Event to State Transition MapEVENT_B:"STATE_B",EVENT_C:"STATE_C", ...EVENT_F:"STATE_F",EVENT_FINAL:"STATE_FINAL",EVENT_ERROR:"STATE_ERROR"},STATE_ERROR:{on:asyncfunction(data){/* do something with the error scenario */},// Special type of state marked with "timer" type// special type of the state which will auto transition after timer is overtype:"timer",timer_duration:1000,timer_over:"$last_state"},STATE_E:{on:asyncfunction(data){/* */},type:"timer",timer_duration:1000,timer_over:"$initial_state"},STATE_FINAL:{on:asyncfunction(data){/* */},// Special type of state marked with "final" typetype:"final"}}
Check out data pipeline processing and a generic FSM app in the examples folder (https://github.com/HydroCarbons/carbon-fsm/tree/master/examples).
You can contribute to this project with issues or pull requests.
If you have any ideas, feedback, requests or bug reports, you can reach me athydrocarbons@outlook.com.