1.0.1 • Published 1 month ago

@ellementul/state-machine v1.0.1

Weekly downloads
-
License
ISC
Repository
github
Last release
1 month ago

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)
1.0.1

1 month ago

1.0.0

1 month ago