@turbox3d/reactivity
Version:
Large-scale reactive state management library
59 lines (58 loc) • 1.81 kB
TypeScript
import { Domain } from './core/domain';
import { ReactionId, DepNodeAssembly } from './core/collector';
import { EMaterialType } from './const/enums';
import { Action } from './core/action';
import { ActionType } from './core/store';
export interface Mutation {
(...restPayload: any[]): any | Promise<any>;
}
export interface DispatchedAction {
payload: any[];
original: Mutation;
name: string;
displayName: string;
action?: Action;
type?: EMaterialType;
domain?: Domain;
immediately?: boolean;
isInner?: boolean;
forceSaveHistory?: boolean;
isNeedRecord?: boolean;
}
export interface ConfigCtx {
middleware: {
logger?: boolean;
diffLogger?: boolean;
effect?: boolean;
perf?: boolean;
skipNestLog?: boolean;
skipNestPerfLog?: boolean;
};
timeTravel: {
isActive?: boolean;
isNeedRecord?: boolean;
maxStepNumber?: number;
keepActionChain?: boolean;
};
disableReactive?: boolean;
strictMode?: boolean;
devTool?: boolean;
batchUpdateOnFinish?: () => void;
}
export type BabelDescriptor<T> = TypedPropertyDescriptor<T> & {
initializer?: () => any;
};
export type HistoryOperationType = 'save' | 'undo' | 'redo' | 'clear';
export type Dispatch = (action: DispatchedAction) => any | Promise<any>;
export type MiddlewareParam = {
dispatch: Dispatch;
getActionChain: () => ActionType[];
getDependencyGraph: () => Map<object, DepNodeAssembly>;
};
export interface Middleware {
({ dispatch, getActionChain, getDependencyGraph }: MiddlewareParam): (next: Dispatch) => Dispatch;
}
export interface Store {
dispatch: Dispatch;
subscribe: (listener: Function, componentInstanceUid: ReactionId, idCustomType?: string) => () => void;
}