A tiny, simple, expressive, pragmatic Finite State Machine (FSM) library, optimized for Svelte.
- tiny: under
1kb
(minified); zero dependencies - simple: implements core FSM features, not the kitchen sink
- expressive: FSM constructs are mapped to core JavaScript features (see Usage Overview below)
- pragmatic: prioritizes developer happiness over strict adherance to FSM or Statechart formalizations
- Svelte-optimized: implements Svelte's store contract; philosophically aligned – feels at-home in a Svelte codebase
@kineticcafe/svelte-fsm-eventless is an extension to Ken Kunz's excellent svelte-fsm. The eventless transition support should be sufficient for most purposes, but it has only been tested for our purposes. You can watch kenkunz/svelte-fsm#10 for progress on the core implementation of eventless transitions. When svelte-fsm supports eventless transitions natively, we are likely to retire this library.
npm install @kineticcafe/svelte-fsm-eventless
<script>
import fsm from '@kineticcafe/svelte-fsm-eventless';
const simpleSwitch = fsm('off', {
off: { toggle: 'on' },
on: { toggle: 'off' }
});
</script>
<button value={$simpleSwitch} on:click={simpleSwitch.toggle}>
{$simpleSwitch}
</button>
Svelte FSM's API is delightfully simple. FSM constructs are intuitively mapped to core JavaScript language features, resulting in a highly expressive API that's effortless to remember, a joy to write, and natural to read.
- an fsm is defined by calling the default export
fsm()
function with 2 arguments:initial
andstates
- states is just an object consisting of nested
state
objects, which consist of…- transitions – property values or action return values that match another
state
- actions – functions that optionally transition (return a
state
)
- transitions – property values or action return values that match another
- events are invoked on a state machine as function calls, returning the resulting state
- timers (often used in state machines) are available by calling
.debounce(wait)
on any event - context is just… context (i.e., the lexical scope of your fsm)
- Watch the Lightning Talk from Svelte Summit Fall 2021
- Review the Full Documentation
- Check out the Examples
This extension would not exist without the excellent base library by kenkunz.