1.0.5 • Published 11 months ago

fsm-libts v1.0.5

Weekly downloads
-
License
MIT
Repository
-
Last release
11 months ago

FSM Library

NPM GitHub

Overview

fsm-libts is a lightweight, TypeScript-based Finite State Machine (FSM) library designed to help manage state transitions in a predictable and maintainable way. It’s perfect for use in JavaScript or TypeScript projects, including React applications.

Installation

You can install the fsm-libts via npm:

npm install fsm-libts

If you are using Yarn:

yarn add fsm-libts

Usage

Basic Example

Here's how you can create and use an FSM in your project:

import { FSM } from 'fsm-libts';

// Define your state machine
const fsm = new FSM('idle', {
  idle: { on: { FETCH: 'loading' } },
  loading: { on: { SUCCESS: 'success', FAILURE: 'error' } },
  success: { on: { RESET: 'idle' } },
  error: { on: { RETRY: 'loading' } },
});

// Check the initial state
console.log(fsm.getState()); // Outputs: 'idle'

// Send an event to transition states
fsm.send('FETCH');
console.log(fsm.getState()); // Outputs: 'loading'

// Handle success
fsm.send('SUCCESS');
console.log(fsm.getState()); // Outputs: 'success'

// Reset the state
fsm.send('RESET');
console.log(fsm.getState()); // Outputs: 'idle'

Tests

The code is fully unit tested. Additonally, all code has been vetted using (TypeScript).

 npm run test

API Reference

The FSM class is the core of the fsm-libts. It allows you to define states, transitions, and handle state changes.

constructor(initialState: string, transitions: TransitionMap)

  • initialState: The state the FSM should start in.
  • transitions: An object defining the possible state transitions.
  • getState(): string Returns the current state of the FSM.
  • send(event: string): void Sends an event to the FSM, which triggers a state transition if the event is valid for the current state.

Example:

const fsm = new FSM('idle', {
  idle: { on: { START: 'running' } },
  running: { on: { STOP: 'idle' } },
});

fsm.send('START');
console.log(fsm.getState()); // Outputs: 'running'

License MIT

This project is licensed under the MIT License. See the LICENSE file for details.

1.0.5

11 months ago

1.0.4

11 months ago

1.0.3

11 months ago