Tiny finite state machine library for fun and profit. See the tests for more usage examples.
Here is a quick example of how this module can be used in other modules. The TypeScript Module Resolution Logic makes it quite easy. The file src/index.ts
is a barrel that re-exports selected exports from other files. The package.json file contains main
attribute that points to the generated lib/index.js
file and typings
attribute that points to the generated lib/index.d.ts
file.
- To use the
FSM
class in a TypeScript file -
import { FSM } from "@barakplasma/finite-state-machine";
const anFSM = new FSM();
anFSM.addState('on');
anFSM.addState('off');
anFSM.on({ inputName: 'toggle' }, () => {
return new Map([['on', 'off'], ['off', 'on']]);
});
const { dispatch } = anFSM;
dispatch({ inputName: 'toggle' });
anFSM.getCurrentState() // 'off'
- To use the
FSM
class in a JavaScript file -
const FSM = require('@barakplasma/finite-state-machine').FSM;
const anFSM = new FSM();
anFSM.addState('on');
anFSM.addState('off');
anFSM.on({ inputName: 'toggle' }, () => {
return new Map([['on', 'off'], ['off', 'on']]);
});
const { dispatch } = anFSM;
dispatch({ inputName: 'toggle' });
anFSM.getCurrentState() // 'off'