0.1.3 • Published 2 years ago

sprut-state-flow v0.1.3

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

Sprut-state-flow

Инструмент для пошагового контроля процесса, составления карты переходов и контроля жизненного цикла каждого состояния. Работа со state-flow представляет собой создание состояний с подробными описанием и управлением переходов между ними.

Конфигурация состояний:

const states = {
    begin: {
        income: () => {},
        outcome: () => {},
        transitions: [ 'middle' ],
        events: {
            next: {
                handler: (resolve, error, flowData, ...args) => {
                    resolve('middle')
                }
            }
        }
    },
    middle: {
        transitions: [ 'final' ],
        events: {
            next: {
                handler: (resolve, error, flowData) => {
                    error('Some error');
                    resolve('final')
                }
            }
        }
    },
    final: {
        income: () => {}
    }
}

income - Обработчик, выполняющийся при каждом приходе к состоянию

outcome - Обработчик, выполняющийся при каждом покидании состояния

transitions - Имена состояний, возможных для переходов. Можно отключить, например, для не dev-режима во избежании лишних проверок

events - Регистрация действий, которые могут совершаться внутри данного состояния как события

Интерфейс объекта ошибок:

{
    flow: string[];
    system: string[];
}

flow - Ошибки, генерируемые Flow-классом или добавляемые обработчиком, аналог бизнес-ошибок

system - Ошибки, отлавлиемые с помощью внутри класса Flow при вызове обработчиков

Объект инициализации:

const props = {
    states,
    initialState: 'begin',
    finalState: 'final',
    initial: (...args) => { console.log('Initial handler arguments: ', ...args) },
    final: (...args) => { console.log('Final handler arguments: ', ...args, '\nFlow is completed') },
    initialData: {
        data: true
    },
    maxPendingMillisecondsTime: 10000,
    changeStateListener: (...args) => { console.log('Change state listener arguments: ', ...args); },
    errorListener: (...args) => { console.log('Error listener arguments: ', ...args); },
    isCheckStateTransitions: false
};

initial: (flowData, ...args) => {} - Обработчик инициализации flow, аргументы - накопленная(базовая) flowData, аргументы метода .start(...args)

final: (flowData) => {} - Обработчик завершения flow, аргументы - накопленный объект flowData

initialData - Объект данных, прокидываемый в обработчики, мутируемый, пустой объект по умолчанию

maxPendingMillisecondsTime - Количество миллисекунд ожидаемое до завершения обработки события, по истечение которого генерируется flow-ошибка, если не задан, время неограничено

changeStateListener - Обработчик изменения состояния

errorListener - Обработчик ошибок, вызывается каждый раз после обработчика изменения состояния, если оно было изменено

isCheckStateTransitions - Включение или отключение проверки валидности перехода при вызове resolve из обработчика события состояния, по умолчанию - true

Инициализация и старт:

const { Flow } = require('state-flow');
const flow = new Flow(props);

flow.start();
flow.event('next');

Интерфейс класса Flow, методы и свойства:

start: (...args: any[]) => void - Инициализация flow

event: (eventName: string | number | symbol, ...args: any[]) => void - Событие состояния

stop: () => void - Остановка flow с задействованием финального обработчика

isValidTransition: (state: string) => boolean - Проверка, является ли стейт валидным для перехода на него с нынешнего стейта

get maxPendingMillisecondsTime: number | null - Время ожидания обработки события состояния до ошибки

get isPending: boolean - Булево флаг ожидания обработки события состояния(до ошибки или окончания обработки)

get isResolved: boolean - Инверсия isPending, обработка события закончена

get inProgress: boolean - Булево флаг работы flow(true - если flow запущен и не завершён)

get states: string[] - Список всех состояний flow

get currentState: string - Имя состояния, в котором находится flow

get possibleTransitions: string[] - Список имён состояний, возможных для перехода в нынешнем состоянии flow

0.1.3

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago