0.0.11 • Published 2 months ago
@romainfieve/finite-state-machine v0.0.11
✌️🔗🧭 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 }