fluent-machine
v0.1.11
Published
Spec compliant state machines using JSX, XML or JSON and chainable methods
Maintainers
Readme
Fluent machine
Spec compliant state machines using JSX, SCXML or JSON and chainable methods.
Example:
import fsm from "fluent-machine";
// Define state chart using JSX
const humanStateChart = (
<>
<State initial id="sleeping">
<Transition event="walk" target="walking" />
</State>
<State id="walking">
<Transition event="sleep" target="sleeping" />
<Transition event="run" target="running" />
</State>
<State initial id="running">
<Transition event="walk" target="walking" />
</State>
</>
);
const context = {
energy: 10,
speed: 0,
};
// Create a machine (also supports SCXML or Xstate JSON)
const humanMachine = fsm(humanStateChart, context);
// Add conditions, assignments or invoke side effects with chained syntax
humanMachine
.when({
state: "walking",
event: "run",
})
.cond((context) => {
return context.energy > 5;
})
.assign((context) => ({
energy: context.energy--,
speed: 10,
}));
humanMachine
.when({
state: "sleeping",
})
.assign((context) => ({
energy: context.energy++,
speed: 0,
}));
// Start machine
export const service = humanMachine.start();Features
| SCXML specification | flux-machine | | ------------------- | :--------------: | | scxml | ✅ | | state | ✅ | | parallel | ❌ | | transition | ✅ | | initial | ❌ | | final | ❌ | | onentry | ❌ | | onexit | ❌ | | history | ❌ | | raise | ❌ | | if | ❌ | | elseif | ❌ | | else | ❌ | | foreach | ❌ | | log | ❌ | | datamodel | ✅ | | data | ✅ | | assign | ✅ | | donedata | ❌ | | content | ❌ | | param | ❌ | | script | ❌ | | send | ✅ | | cancel | ❌ | | invoke | ✅ | | finalize | ❌ |
FAQ
Should I use this in production?
- No, not until it reaches V1.0.0
- It's an experiment that I coded in a weekend it and only supports the conditions in
src/tests/fsm.test.tsx
