A package that enables the implementation of a Finite State Machine.


License
ISC
Install
npm install xfinite@6.0.0

Documentation

xfinite

This package enables the implementation of a Finite State Machine.

A finite-state machine (FSM) or finite-state automaton (FSA, plural: automata), finite automaton, or simply a state machine, is a mathematical model of computation. It is an abstract machine that can be in exactly one of a finite number of states at any given time. The FSM can change from one state to another in response to some inputs; the change from one state to another is called a transition. An FSM is defined by a list of its states, its initial state, and the inputs that trigger each transition. Finite-state machines are of two types—deterministic finite-state machines and non-deterministic finite-state machines. A deterministic finite-state machine can be constructed equivalent to any non-deterministic one.1

Published Size (repository) Size (minified)
npm GitHub repo size npm bundle size
Statements Branches Functions Lines
Statements Branches Functions Lines

Table of Contents

Getting Started

Install the Package

  npm i xfinite

Add the Imports

  import { Machine, State, Input } from 'xfinite';

Define the Inputs

  const INPUT = {
    coin: 0.25,
    push: 'push',
  };

  const coin = new Input(INPUT.coin, STATE.unlocked);
  const push = new Input(INPUT.push, STATE.locked);

Define the States

  const STATE = {
    locked: 'locked',
    unlocked: 'unlocked',
  };

  const locked = new State(STATE.locked, [coin]);
  const unlocked = new State(STATE.unlocked, [push]);

Initialize the Machine

  const turnstile = new Machine(STATE.locked, [locked, unlocked]);

Or

  const turnstile = new Machine().addStates([locked, unlocked]).build(STATE.locked);

Execute the Machine

  turnstile.next(INPUT.coin).active; // 'unlocked'

  turnstile.next(INPUT.push).active; // 'locked'

  turnstile.next(INPUT.push).active; // 'locked'

  turnstile.next().active;           // 'locked'

  turnstile.next(INPUT.coin).active; // 'unlocked'

  turnstile.next('foo').active;      // 'unlocked'

  turnstile.next(INPUT.push).active; // 'locked'

Listen to State Changes

const onStateChange = (previous: string, current: string) => {
  console.log(`Previous: ${previous} | Current: ${current}`);
};
turnstile.onStateChange = onStateChange;

turnstile.active // 'locked'
turnstile.next(INPUT.push) // console: 'Previous: locked | Current: unlocked'

License

xfinite is ISC licensed.

References

1 Finite State Machine