xfinite v6.0.0
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) |
---|---|---|
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.