Skip to content

nvdnkpr/fsm-event

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fsm-event

NPM version build status Test coverage Downloads js-standard-style

Stateful finite state machine wrapper around fsm. Emits events when transitioning states.

Installation

$ npm install fsm-event

Usage

const fsm = require('fsm-event')

const m = fsm({
  START: {
    data: 'START',
    pause: 'PAUSED',
    end: 'END',
    error: 'ERROR'
  },
  PAUSED: {
    pause: 'PAUSED',
    resume: 'START',
    error: 'ERROR'
  },
  ERROR: {},
  END: {}
})

m.on('START:leave', cb => console.log('leaving start!'); cb())
m.on('PAUSED', () => console.log('paused state!'))

m('START')
m('PAUSED')
// 'leaving start'
// 'paused state!'

API

m = fsm(events)

Create a state machine.

m.on(event, cb)

Attach a listener to the state machine.

m(event)

Transition states in the state machine. Must be a valid state defined on init. Will throw if an invalid transition is triggered. Alias: m.emit(event).

Events

Each state transition triggers 3 events. important: When listening to :enter or :leave events, the callback must be called so that the state machine can proceed to the next state.

<state>         main state function 
<state>:enter   called when transitioning into state
<state>:leave   called when transitioning away from state

Why?

Most state machines have overly complicated interfaces for managing state. The fsm state machine is simple but doesn't manage state for you, so I wrote a wrapper around it that manages state in an event-driven way. The initial use case was to manage complex, stateful UI elements but it can be used anywhere.

See Also

License

MIT

About

🎰 stateful finite state machine

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%