Skip to Content
👋 Добро пожаловать в документацию lite-fsm!

lite-fsm

Build StatusBundle Sizenpm versionnpm downloadsCoverage Status

lite-fsm — минималистичная и эффективная библиотека для работы с конечными автоматами в JavaScript и TypeScript проектах. Она помогает структурировать и упорядочить логику приложения через формализацию состояний, событий и переходов между ними.

О библиотеке

lite-fsm предлагает простой способ создания надёжных и предсказуемых систем через декларативное описание их поведения. В основе библиотеки лежит концепция конечных автоматов — математической модели, позволяющей организовать логику вашего приложения в виде набора состояний и правил перехода между ними.

С помощью lite-fsm вы сможете:

  • Структурировать сложную интерактивную логику UI-компонентов
  • Организовывать и контролировать жизненные циклы процессов
  • Упрощать тестирование и отладку кода
  • Создавать прозрачные и понятные потоки управления данными
  • Избегать ошибок, связанных с неучтёнными состояниями

Библиотека специально разработана с фокусом на простоту и производительность, что делает её подходящей как для небольших компонентов, так и для сложных систем.

Почему конечные автоматы?

  • Ясная логика: Когда все возможные состояния и переходы определены явно, код становится более читаемым и поддерживаемым
  • Надёжность: Нельзя попасть в неопределённое состояние или выполнить недопустимый переход — все варианты учтены на этапе проектирования
  • Самодокументируемость: Структура автомата естественным образом документирует поведение компонента или процесса
  • Снижение сложности: Даже запутанная бизнес-логика становится более управляемой благодаря разделению на дискретные состояния
  • Наглядность: Состояния и переходы явно описаны, их легко визуализировать, что облегчает анализ кода проекта
  • Лёгкое тестирование: Полный детерминизм упрощает тестирование

Ключевые возможности

  • Лаконичный API: Интуитивно понятный интерфейс без лишних абстракций
  • Архитектурный фреймворк: Готовые паттерны для управления состоянием приложения и организации бизнес-логики
  • Интеграция с React: Специализированные хуки и компоненты для простого встраивания в React-приложения
  • Расширяемость через middleware: Возможность встраивать дополнительную функциональность по аналогии с Redux middleware
  • Надёжная типизация: Поддержка TypeScript с выводом типов и проверками на уровне компиляции
  • Оптимальный размер: Минимальный вес зависимостей для быстрой загрузки
  • Поддержка advanced паттернов: Реализация концепций statecharts для сложных приложений
  • Прозрачная иммутабельность: Встроенная поддержка Immer

Быстрый старт

Установка

lite-fsm доступен через npm и другие популярные пакетные менеджеры.

npm install lite-fsm

Пример использования

import { createMachine, MachineManager } from "lite-fsm"; const playback = createMachine({ config: { IDLE: { DO_INIT: "PAUSED", }, PAUSED: { DO_PLAY: "PLAYING", }, PLAYING: { DO_PAUSE: "PAUSED", TIME_UPDATE: null, }, END: {}, }, initialState: "IDLE", initialContext: { currentTime: null, duration: null, remainingTime: null, }, effects: { PLAYING: ({ services }) => services.playerService.play(), PAUSED: ({ services }) => services.playerService.pause(), }, }); const manager = MachineManager({ playback }); manager.setDependencies({ services: { playerService: { play: () => Promise.resolve(), pause: () => Promise.resolve(), }, }, }); manager.onTransition((prevState, nextState) => { console.log("[onTransition]", { prevState, nextState }); }); manager.transition({ type: "DO_INIT" }); manager.transition({ type: "DO_PLAY" }); manager.transition({ type: "TIME_UPDATE", payload: { currentTime: 0, duration: 60, remainingTime: 60 }, }); const { state, context } = manager.getState().playback;

React: Для интеграции lite-fsm с React используйте специализированные хуки и компоненты, описанные в разделе Использование с React.

TypeScript: Если вы используете TypeScript, обязательно ознакомьтесь с разделом TypeScript для получения информации о строгой типизации и полном использовании возможностей статической проверки типов.

Куда дальше?

После ознакомления с основами, вы можете изучить другие разделы документации:

Last updated on