cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
256 lines • 8.35 kB
TypeScript
/**
* Интерфейсы для системы 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