https://github.com/dy/st8
Tiny state machine
https://github.com/dy/st8
state state-machine state-management
Last synced: 6 months ago
JSON representation
Tiny state machine
- Host: GitHub
- URL: https://github.com/dy/st8
- Owner: dy
- License: mit
- Created: 2014-08-21T12:13:58.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2022-02-19T19:08:16.000Z (over 4 years ago)
- Last Synced: 2025-09-12T23:53:26.649Z (9 months ago)
- Topics: state, state-machine, state-management
- Language: JavaScript
- Homepage:
- Size: 126 KB
- Stars: 7
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: license
Awesome Lists containing this project
README
# st8 [](https://github.com/dy/st8/actions/workflows/test.yml) [](http://npmjs.org/st8)
> Tiny state machine for structural describing behavior of components.
# Usage
```
$ npm install st8
```
## Standalone state machine
```js
import State from 'st8';
var state = new State({
// enter, exit
b: () => () => {},
// enter shortcut, forwards to state d
c: () => 'd',
// shorter cut, redirects to state a
d: 'a',
// any other state
_: 'a'
});
//enter state 'a', invoke corresponding callbacks
state.set('a');
//get current state
state.get(); // 'a'
```
## Define stateful object property
```js
import State from 'st8'
var state = new State({
a() {
// onenter
this === target //true
},
b() {
// onenter
this === target //true
return () => {
// onexit
}
}
}, target);
Object.defineProperty(target, property, {
set: function (value) {
return state.set(value);
},
get: function () {
return state.get();
}
});
```
# API
### let state = new State(states [, context])
Create a new state machine based on the `states` object. Optionally pass a `context` for callbacks.
### state.get()
Get current state.
### state.set(value)
Transition to a new state, invoking necessary callbacks.
🕉