typescript-fsm
Version:
finite state machine with async callbacks
44 lines (43 loc) • 2.15 kB
TypeScript
export type SyncCallback = ((...args: unknown[]) => void);
export type Callback = ((...args: unknown[]) => Promise<void>) | SyncCallback;
export interface ITransition<STATE, EVENT, CALLBACK> {
fromState: STATE;
event: EVENT;
toState: STATE;
cb: CALLBACK;
}
export declare function t<STATE, EVENT, CALLBACK>(fromState: STATE, event: EVENT, toState: STATE, cb?: CALLBACK): ITransition<STATE, EVENT, CALLBACK>;
export type ILogger = Partial<typeof console> & {
error(...data: unknown[]): void;
};
/**
* StateMachine
* TypeScript finite state machine class with async transformations.
*/
export declare class StateMachine<STATE extends string | number | symbol, EVENT extends string | number | symbol, CALLBACK extends Record<EVENT, Callback> = Record<EVENT, Callback>> {
protected init: STATE;
protected transitions: ITransition<STATE, EVENT, CALLBACK[EVENT]>[];
protected readonly logger: ILogger;
protected _current: STATE;
constructor(init: STATE, transitions?: ITransition<STATE, EVENT, CALLBACK[EVENT]>[], logger?: ILogger);
addTransitions(transitions: ITransition<STATE, EVENT, CALLBACK[EVENT]>[]): void;
getState(): STATE;
can(event: EVENT): boolean;
getNextState(event: EVENT): STATE | undefined;
isFinal(): boolean;
protected formatErr(fromState: STATE, event: EVENT): string;
dispatch<E extends EVENT>(event: E, ...args: unknown[]): Promise<void>;
/**
* Generate a Mermaid StateDiagram of the current machine.
*/
toMermaid(title?: string): string;
}
/**
* SyncStateMachine
* TypeScript finite state machine class with sync transformations.
*/
export declare class SyncStateMachine<STATE extends string | number | symbol, EVENT extends string | number | symbol, CALLBACK extends Record<EVENT, SyncCallback> = Record<EVENT, SyncCallback>> extends StateMachine<STATE, EVENT, CALLBACK> {
constructor(init: STATE, transitions?: ITransition<STATE, EVENT, CALLBACK[EVENT]>[], logger?: ILogger);
dispatch<E extends EVENT>(_event: E, ..._args: unknown[]): Promise<void>;
syncDispatch<E extends EVENT>(event: E, ...args: unknown[]): boolean;
}