surrogate
Version:
Object method hooks made easy
26 lines (25 loc) • 1.38 kB
TypeScript
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;
}