export type Handler = (...args: any[]) => any; export interface Hook { getHandlers(): Handler[]; register(handler: T): Hook; delete(handler: T): Hook; call(...args: any[]): void; } export interface AsyncSeriesHook extends Hook { call(...args: any[]): Promise; } export interface AsyncSeriesWaterfallHook extends Hook { call(...args: any[]): Promise; } export interface AsyncParallelHook extends Hook { call(...args: any[]): Promise; } export interface AsyncBailHook extends Hook { call(...args: any[]): Promise; } /** * Create an async series hook. * Upon execution, it will execute every handler in order with the same context */ declare const createAsyncSeriesHook: () => { call(context: unknown): Promise; getHandlers(): Handler[]; register(handler: T): Hook; delete(handler: T): Hook; }; /** * Create an async series waterfall hook. * Upon execution, it will execute every handler in order and pass the return value of the last handler to the next one */ declare const createAsyncSeriesWaterfallHook: () => { call(param: unknown): Promise; getHandlers(): Handler[]; register(handler: T): Hook; delete(handler: T): Hook; }; /** * Create an async parallel hook. * Upon execution, it will execute every registered handler in band. */ declare const createAsyncParallelHook: () => { call(context: unknown): Promise; getHandlers(): Handler[]; register(handler: T): Hook; delete(handler: T): Hook; }; /** * Create an async parallel hook. * Upon execution, it will execute every registered handler in serie and return the first result found. */ declare const createAsyncBailHook: () => { call(context: unknown): Promise; getHandlers(): Handler[]; register(handler: T): Hook; delete(handler: T): Hook; }; export declare const internals: { createHook: () => Hook; }; export { createAsyncSeriesHook, createAsyncSeriesWaterfallHook, createAsyncParallelHook, createAsyncBailHook, }; //# sourceMappingURL=hooks.d.ts.map