portable-fsm

Simple, node/browser compatible generic FSM system

Usage no npm install needed!

<script type="module">
  import portableFsm from 'https://cdn.skypack.dev/portable-fsm';
</script>

README

portable-fsm

Simple, node/browser compatible generic FSM system

Examples

var
    FSM = require('portable-fsm'),
    fsm = new FSM();

fsm.debug = true;

fsm.addState('start', {
    init: 'inProgress'
});
fsm.addState('inProgress', {
    abort: 'cancelled',
    complete: 'done'
});

fsm.on('inProgress',
    function() {
        console.log('Progress start');
        if(Math.random() > 0.5) {
            console.log(' -> Aborting...');
            fsm.consume('abort');
        } else {
            console.log(' -> Completing...');
            fsm.consume('complete');
        }
    },
    function() {
        console.log('Progress end');
    }
);
fsm.on('cancelled', function() {
    console.log('Operation cancelled');
});
fsm.on('done', function() {
    console.log('Operation completed');
});
fsm.when('complete', function() { console.log('ALL DONE!');});
fsm.when('abort', function() { console.log('ABORT! ABORT! ABORT!');});

fsm.consume('init');