UNPKG

cs-element

Version:

Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support

256 lines 8.35 kB
/** * Интерфейсы для системы State Machine CSElement */ import { ICSElement } from './interfaces'; /** * Состояние в state machine */ export interface State { /** Уникальное имя состояния */ name: string; /** Описание состояния */ description?: string; /** Является ли состояние начальным */ initial?: boolean; /** Является ли состояние финальным */ final?: boolean; /** Обработчики событий при входе в состояние */ onEnter?: StateHandler[]; /** Обработчики событий при выходе из состояния */ onExit?: StateHandler[]; /** Метаданные состояния */ metadata?: Record<string, any>; } /** * Переход между состояниями */ export interface Transition { /** Уникальный ID перехода */ id: string; /** Состояние-источник */ from: string; /** Состояние-назначение */ to: string; /** Событие, которое запускает переход */ event: string; /** Условие для выполнения перехода */ guard?: TransitionGuard; /** Действия при выполнении перехода */ actions?: TransitionAction[]; /** Описание перехода */ description?: string; /** Приоритет перехода (больше = выше приоритет) */ priority?: number; } /** * Обработчик состояния */ export type StateHandler = (context: StateMachineContext) => void | Promise<void>; /** * Условие перехода */ export type TransitionGuard = (context: StateMachineContext, event: StateMachineEvent) => boolean | Promise<boolean>; /** * Действие при переходе */ export type TransitionAction = (context: StateMachineContext, event: StateMachineEvent) => void | Promise<void>; /** * Событие state machine */ export interface StateMachineEvent { /** Тип события */ type: string; /** Данные события */ payload?: any; /** Временная метка */ timestamp: number; /** Источник события */ source?: string; } /** * Контекст state machine */ export interface StateMachineContext { /** Связанный элемент CSElement */ element: ICSElement; /** Текущее состояние */ currentState: string; /** Предыдущее состояние */ previousState?: string; /** Данные контекста */ data: Map<string, any>; /** История переходов */ history: TransitionHistoryEntry[]; /** Метаданные */ metadata: Record<string, any>; } /** * Запись истории переходов */ export interface TransitionHistoryEntry { /** ID перехода */ transitionId: string; /** Состояние до перехода */ fromState: string; /** Состояние после перехода */ toState: string; /** Событие, которое вызвало переход */ event: StateMachineEvent; /** Временная метка */ timestamp: number; /** Длительность перехода в мс */ duration?: number; } /** * Конфигурация state machine */ export interface StateMachineConfig { /** Имя state machine */ name: string; /** Описание */ description?: string; /** Начальное состояние */ initialState: string; /** Состояния */ states: State[]; /** Переходы */ transitions: Transition[]; /** Строгий режим (проверка всех переходов) */ strict?: boolean; /** Включить логирование */ enableLogging?: boolean; /** Максимальный размер истории */ maxHistorySize?: number; } /** * Результат попытки перехода */ export interface TransitionResult { /** Успешен ли переход */ success: boolean; /** Состояние до перехода */ fromState: string; /** Состояние после перехода */ toState: string; /** Событие перехода */ event: StateMachineEvent; /** Выполненные действия */ executedActions: string[]; /** Ошибка, если переход неуспешен */ error?: string; /** Длительность перехода */ duration: number; } /** * Интерфейс State Machine */ export interface IStateMachine { /** Имя state machine */ readonly name: string; /** Текущее состояние */ readonly currentState: string; /** Контекст */ readonly context: StateMachineContext; /** Конфигурация */ readonly config: StateMachineConfig; /** * Отправить событие в state machine */ send(event: string | StateMachineEvent, payload?: any): Promise<TransitionResult>; /** * Проверить, возможен ли переход */ canTransition(event: string, toState?: string): boolean; /** * Получить возможные переходы из текущего состояния */ getPossibleTransitions(): Transition[]; /** * Получить состояние по имени */ getState(name: string): State | undefined; /** * Получить переход по ID */ getTransition(id: string): Transition | undefined; /** * Получить историю переходов */ getHistory(limit?: number): TransitionHistoryEntry[]; /** * Сбросить state machine в начальное состояние */ reset(): Promise<void>; /** * Уничтожить state machine */ destroy(): void; /** * Подписаться на события state machine */ subscribe(event: StateMachineEventType, callback: StateMachineEventCallback): string; /** * Отписаться от событий */ unsubscribe(event: StateMachineEventType, callbackId: string): boolean; } /** * Типы событий state machine */ export declare enum StateMachineEventType { STATE_CHANGED = "state-changed", TRANSITION_STARTED = "transition-started", TRANSITION_COMPLETED = "transition-completed", TRANSITION_FAILED = "transition-failed", ERROR = "error" } /** * Callback для событий state machine */ export type StateMachineEventCallback = (data: any) => void; /** * Менеджер State Machine для элементов */ export interface StateMachineManager { /** * Создать state machine для элемента */ create(element: ICSElement, config: StateMachineConfig): IStateMachine; /** * Получить state machine элемента */ get(elementId: string): IStateMachine | undefined; /** * Проверить, есть ли state machine для элемента */ has(elementId: string): boolean; /** * Удалить state machine элемента */ remove(elementId: string): boolean; /** * Получить все state machines */ getAll(): Map<string, IStateMachine>; /** * Найти state machines по состоянию */ findByState(state: string): IStateMachine[]; /** * Отправить событие всем state machines в определенном состоянии */ sendToState(state: string, event: string, payload?: any): Promise<Map<string, TransitionResult>>; /** * Получить статистику state machines */ getStats(): { total: number; byState: Map<string, number>; byName: Map<string, number>; }; /** * Очистить все state machines */ clear(): void; } //# sourceMappingURL=state-machine-interfaces.d.ts.map