redux-automata
Version:
Finite state automata for Redux.
46 lines (45 loc) • 2.54 kB
TypeScript
import * as Redux from "redux";
export interface InternalProps {
__sm_state: string;
}
export declare type AutomataState<TState> = TState & Partial<InternalProps>;
export declare const ACTION_TYPE_PREFIX = "@@AUTOMATA";
export declare type ActionPayload = any;
export declare type IsInvocableFunction = <TState>(state: AutomataState<TState>) => boolean;
export interface PayloadAction<TPayload extends ActionPayload = void> extends Redux.AnyAction {
payload?: TPayload;
}
export interface AutomataAction<TPayload extends ActionPayload = void> extends PayloadAction<TPayload> {
dispatch: Redux.Dispatch<AutomataAction<TPayload>>;
}
export interface ActionDefinition<TPayload extends ActionPayload = void> {
actionType: string;
isInvocable: IsInvocableFunction;
(payload: TPayload): PayloadAction<TPayload>;
}
export declare type TypedReducer<TState, TPayload extends ActionPayload = void> = (state: TState, arg: TPayload) => TState;
export interface StateDefinition<TState, TPayload extends ActionPayload = void> extends TypedReducer<TState, TPayload> {
stateName: string;
}
export interface LocalStore<TState, TAction extends PayloadAction = Redux.AnyAction> extends Redux.Dispatch<TAction> {
dispatch: Redux.Dispatch<TAction>;
getState: () => TState;
}
export declare type TransitionMethod<TState, TPayload extends ActionPayload = void> = (localStore: LocalStore<TState>, arg: TPayload) => void;
export interface StateMachineOptions<TState> {
in<TPayload extends ActionPayload>(state: StateDefinition<TState, TPayload>): StateFluentOptions<TState>;
inAny(): StateFluentOptions<TState>;
}
export interface StateFluentOptions<TState> {
on<TPayload extends ActionPayload>(action: ActionDefinition<TPayload>): ActionFluentOptions<TState, TPayload>;
or<TPayload extends ActionPayload>(state: StateDefinition<TState, TPayload>): StateFluentOptions<TState>;
}
export interface ActionFluentOptions<TState, TPayload extends ActionPayload = void> {
goTo(state: StateDefinition<TState, TPayload>): StateFluentOptionsEx<TState>;
execute(transition: TransitionMethod<TState, TPayload>): ActionFluentOptions<TState, TPayload>;
noop(): StateFluentOptionsEx<TState>;
}
export interface StateFluentOptionsEx<TState> {
in<TPayload extends ActionPayload>(state: StateDefinition<TState, TPayload>): StateFluentOptions<TState>;
on<TPayload extends ActionPayload>(action: ActionDefinition<TPayload>): ActionFluentOptions<TState, TPayload>;
}