0.0.11 • Published 2 months ago

@romainfieve/finite-state-machine v0.0.11

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

✌️🔗🧭 finite-state-machine

A TypeScript library to work with finite state machines.

Table of Content

Installation

yarn add @romainfieve/finite-state-machine

or

npm install @romainfieve/finite-state-machine

Usage

const isAdult = (age?: number) => !!age && age >= 18

enum States {
    Age = 'age',
    FirstName = 'firstName',
    IsAllowed = 'isAllowed',
    LastName = 'lastName',
}

type Data = {
    age?: number
    firstName?: string
    isAllowed?: boolean
    lastName?: string
}

const transitions: Transitions<States, Data> = {
    age: (data) => (isAdult(data.age) ? States.FirstName : States.IsAllowed),
    isAllowed: (data) => (data.isAllowed ? States.FirstName : undefined),
    firstName: (_data) => States.LastName,
    lastName: (_data) => undefined,
}

const converters: Converters<States, Data> = {
    age: (age: number, _data) => ({ isAllowed: isAdult(age), age }),
    isAllowed: (isAllowed: boolean, _data) => ({ isAllowed }),
    firstName: (firstName: string, _data) => ({ firstName }),
    lastName: (lastName: string, _data) => ({ lastName }),
}

const fsm = new FiniteStateMachine({
    initialState: States.Age,
    initialData: {},
    transitions,
    converters,
})
    .set(18)
    .set('John')
    .set('Doe')

const state = fsm.state // 'lastName'
const data = fsm.data // { lastName: 'Doe', firstName: 'John', age: 18, isAllowed: true }

0.0.11

2 months ago

0.0.10

5 months ago

0.0.9

5 months ago

0.0.7

6 months ago

0.0.6

6 months ago

0.0.5

6 months ago

0.0.4

6 months ago

0.0.3

6 months ago

0.0.2

6 months ago

0.0.1

8 months ago