@ellementul/state-machine
v1.0.1
Published
Friendly Minimal State Machine
Downloads
2
Readme
Friendly Minimal State Machine
Constructor
import { StateMachine } from '@ellementul/state-machine'
const stateMachine = new StateMachine() // without options
How to defined states and actions
Recommendation: use constants for names of actions and states, methods to call actions will make automatically by them names!
const FIRST_STATE_NAME = "Uniq State Name"
const SECOND_STATE_NAME = "Second State Uniq Name"
const FIRST_ACTION_NAME = "Action Uniq Name"
const SECOND_ACTION_NAME = "Second Action Uniq Name"
stateMachine.addAction(
FIRST_ACTION_NAME, // States will be defined by Uniq name automatically if one of them is not exist yet.
FIRST_STATE_NAME,
SECOND_STATE_NAME
)
.addAction( //chaining calling
SECOND_ACTION_NAME, // States will be find automatically for new action
SECOND_STATE_NAME,
FIRST_STATE_NAME,
() => {} // optionally set callback on action
)
Defined Init Action
stateMachine.addAction(StateMachine.INIT_ACTION_NAME, FIRST_STATE_NAME)//Second argument optionaly
// default it is
stateMachine.addAction(StateMachine.INIT_ACTION_NAME, StateMachine.INIT_STATE_NAME)
//or just run state machine
stateMachine.start()
Start machine
stateMachine.start(FIRST_STATE_NAME) //Optionally first argument it need if you didn't set init Action yet, then init action will be create automatically
Set callback on action
const callback = (actionName, prevState, nextState) => {}
stateMachine.on(FIRST_ACTION_NAME, callback)
NOTE: Old callback will be rewrite!
If need remove callback:
stateMachine.off(FIRST_ACTION_NAME)
Call your action
const result = stateMachine.call(FIRST_ACTION_NAME)
Restart machine
const result = stateMachine.call(StateMachine.INIT_ACTION_NAME)
Method return true
if it is successfully
Call to enter in defined state
Find action to exit current state and to enter next state If so action don't exist, then call Exeption
stateMachine.setState(FIRST_STATE_NAME)
TODO if it will need
Actions chain
Find chain of actions to enter needed state
stateMachine.findActionsToEnter(FIRST_STATE_NAME)