UNPKG

surrogate

Version:

Object method hooks made easy

26 lines (25 loc) 1.38 kB
import type { Whichever } from '../../which'; import type { SurrogateOptions, SurrogateHandlers, SurrogateUnwrapped, SurrogateHandlerOptions } from '../../interfaces'; export type Constructor<T> = { new (...args: any[]): T; }; export interface SurrogateDecorateOptions<T extends object> extends SurrogateOptions { locateWith?: Constructor<T>; } export interface SurrogateDecoratorOptions<T extends object, Arguments extends Array<any> = any, Result = any> { options?: SurrogateHandlerOptions<T, Arguments, Result>; handler: SurrogateHandlers<T, Arguments, Result>; } export type SurrogateDelegateOptions<T extends object, Arguments extends Array<any> = any, Result = any> = SurrogateHandlers<T, Arguments, Result> | SurrogateDecoratorOptions<T, Arguments, Result> | SurrogateDecoratorOptions<T, Arguments, Result>[]; export interface SurrogateForOptions<T extends object, Arguments extends Array<any> = any, Result = any> { options: SurrogateDelegateOptions<T, Arguments, Result>; type: Whichever; } export type Action<T extends object> = keyof SurrogateUnwrapped<T> | (keyof SurrogateUnwrapped<T>)[] | string | string[]; export interface NextDecoratorOptions<T extends object> { options?: SurrogateHandlerOptions<T>; action: Action<T>; } export interface NextForOptions<T extends object> extends NextDecoratorOptions<T> { type: Whichever; }