Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fugufish/moleculer-state-machine
State Machine mixin that extends a Moleculer Service to act as a finite-state machine.
https://github.com/fugufish/moleculer-state-machine
moleculer moleculerjs state-machine
Last synced: 2 months ago
JSON representation
State Machine mixin that extends a Moleculer Service to act as a finite-state machine.
- Host: GitHub
- URL: https://github.com/fugufish/moleculer-state-machine
- Owner: fugufish
- License: mit
- Created: 2018-11-25T06:39:47.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-18T20:21:09.000Z (over 2 years ago)
- Last Synced: 2024-09-22T06:08:12.061Z (4 months ago)
- Topics: moleculer, moleculerjs, state-machine
- Language: JavaScript
- Size: 93.8 KB
- Stars: 15
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-moleculer - moleculer-state-machine - State Machine mixin that extends a Moleculer Service to act as a finite-state machine. (Services / Others)
README
![Moleculer logo](https://raw.githubusercontent.com/ice-services/moleculer/HEAD/docs/assets/logo.png)
# Moleculer State Machine[![Tests](https://github.com/fugufish/moleculer-state-machine/actions/workflows/node.js.yml/badge.svg)](https://github.com/fugufish/moleculer-state-machine/actions/workflows/node.js.yml)
Moleculer State Machine is an add on for the [Moleculer](https://moleculer.services/)
microservices framework that allows services to be extended with
[finite-state machine](https://en.wikipedia.org/wiki/Finite-state_machine) behavior.
It does so by acting as a high level wrapper for
[javascript-state-machine](https://github.com/jakesgordon/javascript-state-machine).## Basic Usage
Moleculer State Machine will look in the service `settings` for the state machine
options:```javascript
const StateMachine = require("moleculer-state-machine");{
name: "service-with-state-machine",
mixins: [
StateMachine
],
settings: {
initialState: "new",
stateTransitions: [
{name: "age", from: "new", to: "old"}
]
}
}
```
In this example calling `age()` on the service will trigger a transition from `"new"`
to `"old"`.
## Delegations
The mixin delegates the methods `is`, `can`, `cannot`, `transitions`,
`allTransitions`, `allStates`, and the `state` property to an internal instance of
`javascript-state-machine` that is created on service creation.## Events
The mixin emits all `javascript-stage-machine` events as service events prefixed by
the service name. The `onBeforeTransition` event for example will emit on the broker
`test.onBeforeTransition`. The event payload will be as follows:
```javascript
{
event: ..., // the name fo the event
transition: ..., // the name of the transition function
from: ... // the state being transitioned from
to: ... // the state being transitioned to
}
```See [javascript-state-machine lifecylce events](https://github.com/jakesgordon/javascript-state-machine/blob/master/docs/lifecycle-events.md)
for more details.## Callbacks
Methods can be defined on the service that will be called when a specific state
machine event occurs. These callbacks are called with the same arguments as
as events.See [javascript-state-machine lifecylce events](https://github.com/jakesgordon/javascript-state-machine/blob/master/docs/lifecycle-events.md)
for more details.## License
Moleculer State Machine is available under the MIT license](https://tldrlegal.com/license/mit-license).