cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
74 lines • 2.59 kB
TypeScript
/**
* Базовая реализация State Machine для CSElement
*/
import { EventEmitter } from 'eventemitter3';
import { IStateMachine, StateMachineConfig, StateMachineContext, StateMachineEvent, StateMachineEventType, StateMachineEventCallback, State, Transition, TransitionResult, TransitionHistoryEntry } from '../types/state-machine-interfaces';
import { ICSElement } from '../types/interfaces';
/**
* Реализация State Machine
*/
export declare class StateMachine extends EventEmitter implements IStateMachine {
private _config;
private _context;
private _states;
private _transitions;
private _transitionsByEvent;
private _callbacks;
private _destroyed;
constructor(element: ICSElement, config: StateMachineConfig);
get name(): string;
get currentState(): string;
get context(): StateMachineContext;
get 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;
private validateConfig;
private initializeStates;
private initializeTransitions;
private findTransitionsForEvent;
private canExecuteTransition;
private executeTransition;
private enterState;
private exitState;
private emitEvent;
private generateId;
}
//# sourceMappingURL=StateMachine.d.ts.map