import { IHookStore, IDisposable, Token, MethodName, HookType, IValidAspectHook, IHookOptions, InstanceCreator } from '../types'; export declare const HOOKED_SYMBOL: unique symbol; export declare function applyHooks(instance: T, token: Token, hooks: IHookStore): T; /** * To use hooks to assemble a final wrapped function * @param rawMethod the original method * @param hooks hooks */ export declare function createHookedFunction(methodName: MethodName, rawMethod: (...args: Args) => Result, hooks: Array>): (...args: Args) => Result; export declare function isPromiseLike(thing: any): thing is Promise; export declare class HookStore implements IHookStore { private parent?; private hooks; constructor(parent?: IHookStore | undefined); createHooks(hooks: IValidAspectHook[]): IDisposable; hasHooks(token: Token): boolean; getHooks(token: Token, method: string | number | symbol): IValidAspectHook[]; createOneHook(hook: IValidAspectHook): IDisposable; removeOneHook(hook: IValidAspectHook): void; } export declare type IHookMetadata = Array<{ prop: MethodName; type: HookType; target: Token; targetMethod: MethodName; options: IHookOptions; }>; export declare function markAsAspect(target: object): void; export declare function markAsHook(target: object, prop: MethodName, type: HookType, hookTarget: Token, targetMethod: MethodName, options: IHookOptions): void; export declare function isAspectCreator(target: InstanceCreator): boolean; export declare function getHookMeta(target: any): IHookMetadata; export declare function isHooked(target: any): boolean;