UNPKG

state-machine

Version:

An expressive, feature-rich, event-driven JavaScript finite-state machine

85 lines (47 loc) 2.58 kB
# JavaScript State Machine ![state-machine-map](https://cloud.githubusercontent.com/assets/132681/20330716/a9446ecc-ab98-11e6-89b7-8c55a5abb46e.gif) ### Abstract State Machine is a library for managing a finite set of states, and moving between them via actions and transitions. From its intuitive configuration through its powerful event-based architecture and rich API, State Machine makes it easy to describe and manage interaction with complex state-dependent systems like components, multi-step forms, purchase funnels, visualisations or games. ### Features State Machine has been designed from the outset to feel intuitive and fun to use: - Easily-configurable via JavaScript config or instance methods - DSL for shorthand transition and handler assignment - Add and remove states and actions on the fly - Pause, resume, cancel or end transitions at any point - Handle system, state, action and transition events - Rich API and system introspection - Object-oriented architecture, fully-inspectable in DevTools ### Demo View the live demo at: - [statemachine.davestewart.io](http://statemachine.davestewart.io) To run / tinker with the demo locally, see the Development section. ### Installation State Machine can be used directly in the browser, or in a Browserify, Node or ES6 project. Install via NPM using: ``` npm install state-machine ``` **Note**: If you are expecting the package [wheeyls/stateMachine](https://github.com/wheeyls/stateMachine) it has now been depreciated. To continue to use *that* package in your project, ensure you use the version `0.3.0` in your `package.json`. ### Docs View the documentation at: - [docs/readme.md](docs/readme.md) ## Development ### Installation Clone the repo using: ``` git clone https://github.com/davestewart/javascript-state-machine ``` ### Tasks The following NPM tasks are available, via `npm run <task>`: - `dev` - compile and watch the source to `state-machine.js` - `build` - compile the source to `state-machine.min.js` - `demo` - compile, watch and copy the development build to `demo/` and serve demo files at `http://localhost:8888` - `test` - run all tests ### Testing To run a single or set of tests, use the following syntax: - `npm run test -- --grep="<filename>"` ## Mentions Inspired by [@jakesgordon](https://github.com/jakesgordon/javascript-state-machine/)'s JavaScript State Machine. Special thanks to Michael Wheeler ([@wheeyls](https://github.com/wheeyls)) who very kindly donated the NPM package name [state-machine](https://www.npmjs.com/package/state-machine).