import { IStateTreeNode } from "./NodeUtils"; import { IDisposer } from "../utils"; export declare type IMiddlewareEventType = "action" | "flow_spawn" | "flow_resume" | "flow_resume_error" | "flow_return" | "flow_throw"; export declare type IMiddlewareEvent = { type: IMiddlewareEventType; name: string; id: number; parentId: number; rootId: number; context: IStateTreeNode; tree: IStateTreeNode; args: any[]; }; export declare type IMiddlewareHandler = (actionCall: IMiddlewareEvent, next: (actionCall: IMiddlewareEvent) => any) => any; export declare function getNextActionId(): number; export declare function runWithActionContext(context: IMiddlewareEvent, fn: Function): any; export declare function getActionContext(): IMiddlewareEvent; export declare function createActionInvoker(target: IStateTreeNode, name: string, fn: T): () => any; export declare function addMiddleware(target: IStateTreeNode, middleware: IMiddlewareHandler): IDisposer; export declare function decorate(middleware: IMiddlewareHandler, fn: T): T;