declare const Finity: { configure(): StateMachineConfigurator; configure(): StateMachineConfigurator; start(config: Configuration): StateMachine; }; export default Finity; export interface BaseConfigurator { getConfig(): Configuration; } export interface StateMachineConfigurator extends BaseConfigurator { global(): GlobalConfigurator; initialState(state: S): StateConfigurator; state(state: S): StateConfigurator; start(): StateMachine; } export type StateHook = (state: S, context: Context) => void; export type TransitionHook = (fromState: S, toState: S, context: Context) => void; export type UnhandledEventHook = (event: E, state: S, context: Context) => void; export interface GlobalConfigurator extends BaseConfigurator, StateMachineConfigurator { onStateEnter(hook: StateHook): GlobalConfigurator; onStateExit(hook: StateHook): GlobalConfigurator; onTransition(hook: TransitionHook): GlobalConfigurator; onStateChange(hook: TransitionHook): GlobalConfigurator; onUnhandledEvent(hook: UnhandledEventHook): GlobalConfigurator; } export type StateAction = (state: S, context: Context) => void; export type AsyncOperation = (state: S, context: Context) => Promise; export interface StateConfigurator extends BaseConfigurator, StateMachineConfigurator { onEnter(action: StateAction): StateConfigurator; onExit(action: StateAction): StateConfigurator; on(event: E): TriggerConfigurator; onAny(): TriggerConfigurator; onTimeout(timeout: number): TimerConfigurator; do(asyncOperation: AsyncOperation): AsyncConfigurator; submachine(submachineConfig: Configuration): StateConfigurator; } export interface TriggerConfigurator extends BaseConfigurator { transitionTo(targetState: S): TransitionConfigurator; selfTransition(): TransitionConfigurator; internalTransition(): TransitionConfigurator; ignore(): TransitionConfigurator; } export interface TimerConfigurator extends TriggerConfigurator { } export interface AsyncConfigurator extends BaseConfigurator { onSuccess(): TriggerConfigurator; onFailure(): TriggerConfigurator; } export type TransitionAction = (fromState: S, toState: S, context: Context) => void; export type Condition = (context: Context) => boolean; export interface TransitionConfigurator extends BaseConfigurator, StateConfigurator, TriggerConfigurator, AsyncConfigurator { withAction(action: TransitionAction): TransitionConfigurator; withCondition(condition: Condition): TransitionConfigurator; } export interface Configuration { } export interface StateMachine { getCurrentState(): S; getStateHierarchy(): S[]; canHandle(event: E, eventPayload?: any): boolean; handle(event: E, eventPayload?: any): StateMachine; } export interface Context { stateMachine: StateMachine; event?: E; eventPayload?: any; result?: any; error?: Error; }