6.0.0 • Published 3 years ago

xfinite v6.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
3 years ago

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

PublishedSize (repository)Size (minified)
GitHub repo size
StatementsBranchesFunctionsLines
StatementsBranchesFunctionsLines

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

5.1.1

3 years ago

5.1.0

3 years ago

5.0.1

3 years ago

5.0.0

3 years ago

6.0.0

3 years ago

3.1.0

3 years ago

4.0.0

3 years ago

3.0.0

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago