import type { NextForOptions, NextDecoratorOptions } from './interfaces';
type PropertyDecorator<T extends object> = (target: T, property: string, descriptor: PropertyDescriptor) => void;
/**
 * @description Designate decorated methods as next handler. Handler type must be assigned
 *
 * @export
 * @decorator
 * @template T
 * @param {(NextForOptions<T> | NextForOptions<T>[])} nextOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const NextFor: <T extends object>(nextOptions: NextForOptions<T> | NextForOptions<T>[]) => PropertyDecorator<T>;
/**
 * Designate decorated methods as async pre hooks.
 *
 * @export
 * @decorator
 * @template T
 * @param {(NextDecoratorOptions<T> | NextDecoratorOptions<T>[])} nextOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const NextAsyncPre: <T extends object>(nextOptions: NextDecoratorOptions<T> | NextDecoratorOptions<T>[]) => PropertyDecorator<T>;
/**
 * Designate decorated methods as async post hooks.
 *
 * @export
 * @decorator
 * @template T
 * @param {(NextDecoratorOptions<T> | NextDecoratorOptions<T>[])} nextOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const NextAsyncPost: <T extends object>(nextOptions: NextDecoratorOptions<T> | NextDecoratorOptions<T>[]) => PropertyDecorator<T>;
/**
 * Designate decorated methods as async pre and post hooks.
 *
 * @export
 * @decorator
 * @template T
 * @param {(NextDecoratorOptions<T> | NextDecoratorOptions<T>[])} nextOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const NextAsyncPreAndPost: <T extends object>(nextOptions: NextDecoratorOptions<T> | NextDecoratorOptions<T>[]) => PropertyDecorator<T>;
/**
 * Designate decorated methods as pre hooks.
 *
 * @export
 * @decorator
 * @template T
 * @param {(NextDecoratorOptions<T> | NextDecoratorOptions<T>[])} nextOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const NextPre: <T extends object>(nextOptions: NextDecoratorOptions<T> | NextDecoratorOptions<T>[]) => PropertyDecorator<T>;
/**
 * Designate decorated methods as post hook
 *
 * @export
 * @decorator
 * @template T
 * @param {(NextDecoratorOptions<T> | NextDecoratorOptions<T>[])} nextOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const NextPost: <T extends object>(nextOptions: NextDecoratorOptions<T> | NextDecoratorOptions<T>[]) => PropertyDecorator<T>;
/**
 * Designate decorated methods as pre and post hooks.
 *
 * @export
 * @decorator
 * @template T
 * @param {(NextDecoratorOptions<T> | NextDecoratorOptions<T>[])} nextOptions
 * @returns {PropertyDecorator<T>}
 */
export declare const NextPreAndPost: <T extends object>(nextOptions: NextDecoratorOptions<T> | NextDecoratorOptions<T>[]) => PropertyDecorator<T>;
export {};
