JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3643
  • Score
    100M100P100Q102761F
  • 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.

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('PAUSED', () => console.log('paused state!'))
m.on('PAUSED:enter', cb => cb())
m.on('PAUSED:leave', cb => cb())

m('START')

API

const m = fsm(events)

Create a state machine.

m.on(event, cb)

Attach a listener to the state machine.

m(event)

Trigger an event on the state machine. Must be a valid state defined on init. Alias: m.emit(event).

Events

Each state 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 stateless, so I wrote a stateful wrapper around it. This allows me to managage application state without creating complex branches; my direct use case for this was building stateful UI elements.

See Also

License

MIT