JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2056
  • Score
    100M100P100Q93982F
  • License MIT

Stateful finite state machine wrapper around fsm

Package Exports

  • fsm-event

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (fsm-event) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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', {
  START: { pause: 'PAUSED' },
  PAUSED: { resume: 'START' }
})

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

m('pause')
// 'leaving start'
// 'paused state!'

API

m = fsm([start,] events)

Create a state machine. start defaults to START.

m.on(event, cb)

Attach a listener to the state machine. See events for an overview of all events.

m(event)

Transition states in the state machine. Must be a valid transition defined on initalization. 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.

error           incorrect transition
<state>         when new state is entered
<state>:enter   when transitioning into state
<state>:leave   when transitioning away from state
done            when state transition finished

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