UNPKG

@ace-util/injects

Version:
48 lines (47 loc) 1.45 kB
declare type GetRestArgs<T extends any[]> = T extends [infer A, ...infer B] ? B : never; /** * Inject result */ export declare type InjectResult<F extends (...args: any) => any> = { /** * Has function form injection * @param functionToCheck Function to check */ has(functionToCheck?: F | boolean): F | boolean; /** * Remove function form injection * @param functionToRemove Function to remove * @param priority Priority */ remove(functionToRemove: F, priority?: number): boolean; /** * Remove all functions form injection * @param priority Priority */ removeAll(priority: boolean | number): void; /** * Filter from injection tag, will always have a return value * @param value Value to filter * @param args Arguments */ filter(value: Parameters<F>[0], ...args: GetRestArgs<Parameters<F>>): Promise<Parameters<F>[0]>; /** * Execute from injection tag, won't have a return value * @param args Arguments */ exec(...args: Parameters<F>): Promise<void>; }; /** * Injection instance */ export interface InjectFunction<T extends Record<string, (...args: any) => any>> { /** * Execute a tag */ <K extends keyof T>(tag: K): InjectResult<T[K]>; /** * Inject function to a tag */ <K extends keyof T>(tag: K, functionToAdd: T[K], priority?: number, acceptedArgs?: number): void; } export {};