UNPKG

typescript-fsm

Version:

finite state machine with async callbacks

44 lines (43 loc) 2.15 kB
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; }