VisualFSM
27 subscribers
2 photos
6 links
VisualFSM - Kotlin Multiplatform library for FSM based MVI with visualization and analysis tools

https://github.com/kontur-mobile/visualfsm

chat: https://t.me/visualfsm_support
Download Telegram
Первый публичный релиз VisualFSM доступен на Maven Central

Базовые классы, JVM и KMM версия:
implementation('ru.kontur.mobile.visualfsm:visualfsm-core:1.0.0')

Поддержка RxJava 3 (FeatureRx, AsyncWorkerRx и их зависимости):
implementation('ru.kontur.mobile.visualfsm:visualfsm-rxjava3:1.0.0')

Поддержка RxJava 2 (FeatureRx, AsyncWorkerRx и их зависимости):
implementation('ru.kontur.mobile.visualfsm:visualfsm-rxjava2:1.0.0')

Инструменты для анализа и построения графа:
testImplementation('ru.kontur.mobile.visualfsm:visualfsm-tools:1.0.0')

Документация и исходный код: https://github.com/Kontur-Mobile/VisualFSM
Опубликован bugfix релиз 1.0.1, список изменений:

Исправление ошибок:
- Модуль visualfsm-tools: при построении графа FSM использовались не только sealed классы состояний, но и другие вложенные классы, теперь при построении графа FSM используются только sealed классы.
- Все модули: исправлено создание артефактов javadoc.
Опубликован bugfix релиз 1.0.2, список изменений:

Исправление ошибок:
- AsyncWorker и AsyncWorkerRx: Добавлена дополнительная проверка в сценарии отмены асинхронной задачи. Перед запуском Action обработки результата проверяется, что задача не была отменена другим состоянием.
Опубликован bugfix релиз 1.0.3, список изменений:

Исправление ошибок:
- Исправлено состояние гонки между FeatureRx и AsyncWorkerRx при отмене асинхронной задачи.
Опубликован релиз 1.1.0, список изменений:

Новая функциональность:
- KSP кодогенерация TransitionsFactory. Cокращает код Action и Transition - больше не нужно указывать в конструкторе Transition классы начального и конечного состояния, и не нужно вручную реализовывать getTransitions() метод внутри Action. Как подключить кодогенерацию читайте в Quickstart
Опубликован bugfix релиз 1.1.1, список изменений:

Исправление ошибок:
- Исправлено состояние гонки между Feature и AsyncWorker при вызове proceed метода.
- Исправлен порядок инициализации объекта Feature.
Опубликованы примеры использования библиотеки VisualFSM в Android и KMM (Android + iOS) проектах:
- в KMM (Android + iOS) проекте используются Kotlin Coroutines, Jetpack Compose, SwiftUI. 80% кода на Kotlin (FSM и Android Ui) и 20% на Swift (iOS Ui):
https://github.com/Kontur-Mobile/VisualFSM-Sample-KMM
- в Android проекте используются Kotlin Coroutines, Jetpack Compose:
https://github.com/Kontur-Mobile/VisualFSM-Sample-Android
Опубликован bugfix релиз 1.1.2, список изменений:

- Исправлена видимость функции VisualFSM.getAdjacencyMap() для реализации кастомных проверок в unit тестах.
Опубликован релиз 1.2.0, список изменений:

Новая функциональность:
- Новый Task для AsyncWorker - ExecuteIfNotExistWithSameClass. Запустить задачу, только если операция с тем же классом состояния в данный момент не выполняется. Используется для операций с выдачей результата в несколько этапов. Например, отображение данных по мере загрузки или отображение прогресса.
- Kotlin 1.7.20
Опубликован релиз 1.2.1, содержащий небольшие улучшения:

- Добавлен модификатор internal для сгенерированной TransitionFactory, если базовый класс Action содержит модификатор internal
- Добавлена проверка корректности имени классов обобщений(Generics) Feature и Transition на этапе кодогенерации
- Добавлен метод getEdgeName в инструменты VisualFSM для получения имени ребра по Transition классу
- Произведена замена Flow на StateFlow для подписки на состояния Feature
Опубликован релиз 1.3.0, список изменений:

Улучшения:
⁃ Добавлена возможность подмены Coroutine Dispatcher в AsyncWorker через конструктор

Исправления ошибок:
⁃ Исправлен обработчик исключений onStateSubscriptionError в AsyncWorker, в который попадают все необработанные исключения
Опубликован релиз 1.3.1, список изменений:

Исправления ошибок:
⁃ Исправлена обработка задачи AsyncWorker ExecuteAndCancelExist
Опубликован релиз 1.3.2, список изменений:

Исправления ошибок:
- Исправлено поведение AsyncWorker.proceed() после вызова AsyncWorker.unbind() метода
⁃ Исправлена обработка задачи AsyncWorker ExecuteAndCancelExist
Опубликован релиз 1.3.3, содержащий небольшие улучшения:

- Исправлено использование AtomicFU, больше нет необходимости подключать его в качестве зависимости к основному проекту
- Добавлен suppress для предупреждений в сгенерированном коде
Опубликован релиз 1.4.0, список изменений:

Улучшения:
- Кастомизация визуализации графа

Для повышения читаемости графа добавлена возможность управлять graphviz атрибутами при генерации графа.
Используя 'DotAttributes' можно изменять стиль всего графа, задавать форму и цвет ребер и нод.
Используйте готовый пресет 'DotAttributesDefaultPreset' или создайте собственный для своего проекта.
Опубликован релиз 1.5.1, список изменений:

Новые возможности:
- Добавлена функциональность по генерации csv файла со всеми переходами для анализа FSM сторонними средствами
Опубликована статья Игоря Гордеева об оценке покрытия Ui-тестами бизнес-логики, используя инструменты VisualFSM.
Опубликован релиз 2.0.0, список изменений:

- добавлена возможность в generic параметрах Transition указывать в качестве источника и назначения перехода sealed класс для описания группы переходов в одном Transition
- добавлен новый тип Transition - SelfTransition, для сокращения записи перехода состояния без изменения класса состояния
- обновлены версии зависимостей

Изменения без обратной совместимости:

- минимальная версия Kotlin в проекте 1.9
- минимальная версия JDK в проекте 17
- изменение поведения Transition в generic параметрах которого указан базовый sealed класс

Обновлен пример использования в KMM проекте:
https://github.com/Kontur-Mobile/VisualFSM-Sample-KMM
Опубликован релиз 3.0.0, список изменений:

Новая функциональность:
- добавлена опциональная возможность задавать внешний источник состояний для Feature (IStateSource). Это может быть полезно для взаимодействия между Features через общее состояние или для работы с другими фреймворками, основанными на работе с состояниями. Документация

Исправление ошибок:
- исправлена ошибка построения графа при использовании вложенных классов в классах состояний

Удаление устаревших методов и интеграций:
- прекращена поддержка RxJava 2
- удалены устаревшие конструкторы Feature
- удалены устаревшие методы отрисовки графа состояний
Опубликован релиз 4.0.0, список изменений

- добавлен аргумент LogParams в Feature для настройки встроенного логирования с поддержкой пользовательских логгеров и форматтеров. Эта возможность является альтернативой реализации интерфейса TransitionCallbacks с целью логгирования

- обновлён TransitionCallbacks: переопределение каждого из методов теперь опционально, добавлен метод onInitialStateReceived

- удалены deprecated методы в Transition

- обновлены зависимости