import type { Action, SurrogateForOptions, SurrogateDelegateOptions, SurrogateDecorateOptions } from './interfaces';
type PropertyDecorator<T extends object> = (target: T, property: Action<T>) => void;
/**
 * @description Register class for automatic surrogate wrapping
 *
 * @export
 * @decorator
 * @template T
 * @param {SurrogateDecorateOptions<T>} [delegateOptions={}]
 */
export declare const SurrogateDelegate: <T extends object>(delegateOptions?: SurrogateDecorateOptions<T>) => <K extends Function>(klass: K) => K;
/**
 * @description Registers hooks for decorated methods. Handler type must be assigned.
 *
 * @export
 * @decorator
 * @template T
 * @param {(SurrogateForOptions<T> | SurrogateForOptions<T>[])} forOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const SurrogateFor: <T extends object>(forOptions: SurrogateForOptions<T, any, any> | SurrogateForOptions<T, any, any>[]) => PropertyDecorator<T>;
/**
 * @description Registers pre and post hooks for decorated methods
 *
 * @export
 * @decorator
 * @template T
 * @param {(SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[])} decoratorOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const SurrogatePreAndPost: <T extends object>(decoratorOptions: SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[]) => PropertyDecorator<T>;
/**
 * @description Registers pre hooks for decorated methods
 *
 * @export
 * @decorator
 * @template T
 * @param {(SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[])} decoratorOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const SurrogatePre: <T extends object>(decoratorOptions: SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[]) => PropertyDecorator<T>;
/**
 * @description Registers post hooks for decorated methods
 *
 * @export
 * @decorator
 * @template T
 * @param {(SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[])} decoratorOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const SurrogatePost: <T extends object>(decoratorOptions: SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[]) => PropertyDecorator<T>;
/**
 * @description Registers async pre and post hooks for decorated methods
 *
 * @export
 * @decorator
 * @template T
 * @param {(SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[])} decoratorOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const SurrogateAsyncPreAndPost: <T extends object>(decoratorOptions: SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[]) => PropertyDecorator<T>;
/**
 * @description Registers async post hooks for decorated methods
 *
 * @export
 * @decorator
 * @template T
 * @param {(SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[])} decoratorOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const SurrogateAsyncPost: <T extends object, Arguments extends any[] = any, Result = any>(decoratorOptions: SurrogateDelegateOptions<T, Arguments, Result> | SurrogateDelegateOptions<T, Arguments, Result>[]) => PropertyDecorator<T>;
/**
 * @description Registers async pre hooks for decorated methods
 *
 * @export
 * @decorator
 * @template T
 * @param {(SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[])} decoratorOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const SurrogateAsyncPre: <T extends object>(decoratorOptions: SurrogateDelegateOptions<T> | SurrogateDelegateOptions<T>[]) => PropertyDecorator<T>;
export {};
