surrogate
Version:
Object method hooks made easy
83 lines (82 loc) • 3.45 kB
TypeScript
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 {};