/** * Describe an event with it's name and the handler function arguments */ export type EventDefinition = { /** * Name of the event * * @example * "core:document:create:after" */ name: string; /** * Arguments of the event */ args: any[]; }; /** * Describe an ask event with it's name and the payload and result types */ export type AskEventDefinition = { /** * Name of the event * * @example * "core:document:create" */ name: string; /** * Payload of the event */ payload: any; /** * Result of the event */ result: any; }; /** * Handler for hook events */ export type HookEventHandler = (...args: TEventDefinition["args"]) => Promise | void; /** * Handler for pipe event. * * It should return a promise resolving the first received argument. */ export type PipeEventHandler = (...args: TEventDefinition["args"]) => Promise; /** * Handler for cluster event. */ export type ClusterEventHandler = (...args: TEventDefinition["args"]) => any; /** * Handler for ask event. */ export type AskEventHandler = (...args: [payload?: TAskEventDefinition["payload"], ...rest: any[]]) => Promise | TAskEventDefinition["result"]; /** * Handler for call event. */ export type CallEventHandler = (...args: [payload?: TAskEventDefinition["payload"], ...rest: any[]]) => TAskEventDefinition["result"]; /** * @deprecated Use HookEventHandler, PipeEventHandler or ClusterEventHandler */ export type EventHandler = (...payload: any) => any;