@ace-util/injects
Version:
Utils.
48 lines (47 loc) • 1.45 kB
TypeScript
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 {};