import type { AllowArray } from '@sequelize/utils'; export type AsyncHookReturn = Promise | void; type HookParameters = Hook extends (...args2: any) => any ? Parameters : never; type OnRunHook = (eventTarget: object, isAsync: boolean, hookName: HookName, args: HookParameters) => AsyncHookReturn; /** * @private */ export declare class HookHandler { #private; constructor(eventTarget: object, validHookNames: Array, onRunHook?: OnRunHook); removeListener(hookName: HookName, listenerOrListenerName: string | HookConfig[HookName]): void; removeAllListeners(): void; hasListeners(hookName: keyof HookConfig): boolean; getListenerCount(hookName: keyof HookConfig): number; runSync(hookName: HookName, ...args: HookConfig[HookName] extends (...args2: any) => any ? Parameters : never): void; runAsync(hookName: HookName, ...args: HookConfig[HookName] extends (...args2: any) => any ? Parameters : never): Promise; /** * Registers a listener for a hook. * * Returns a function that can be called to deregister the listener. * * @param hookName * @param listener * @param listenerName */ addListener(hookName: HookName, listener: HookConfig[HookName], listenerName?: string): () => void; addListeners(listeners: { [Key in keyof HookConfig]?: AllowArray; }): void; } export declare class HookHandlerBuilder { #private; constructor(validHookNames: Array, onRunHook?: OnRunHook); getFor(target: object): HookHandler; } export interface NewHookable { /** * Controls which hooks should be run. * * Possible values: * - false: All hooks will be run. (default) * - true: No hooks will be run. * - An array of strings: The hooks listed in the array will not be run. * - An object with the "except" property: Only the hooks listed in the array will be run. */ noHooks?: boolean | undefined | readonly HookNames[] | { except: readonly HookNames[]; }; } export declare function mayRunHook(hookName: HookName, noHooksConfig: NewHookable['noHooks']): boolean; export {}; //# sourceMappingURL=hooks.d.ts.map