UNPKG

@stnekroman/tstools

Version:

Set of handy tools for TypeScript development

33 lines (32 loc) 3.33 kB
export declare namespace Functions { type Callback = () => void; type Provider<T> = () => T; type MapFunction<T, R> = (data: T) => R; type Consumer<T> = MapFunction<T, void>; type Filter<T> = MapFunction<T, boolean>; type Comparator<T> = (a: T, b: T) => number; type ArgsFunction<ARGS extends unknown[], R> = (...args: ARGS) => R; function noop(..._args: any[]): void; function identity<T>(arg: T): Provider<T>; function join<ARGS extends unknown[]>(...functions: ArgsFunction<ARGS, void>[]): ArgsFunction<ARGS, void>; function extractor<T, K extends keyof T = keyof T>(field: K): MapFunction<T, T[K]>; type PipedFunction<F extends ArgsFunction<any[], any>> = F & { pipe<NEXT extends MapFunction<ReturnType<F>, any>>(next: NEXT): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT>>>; pipe<NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>>(next1: NEXT1, next2: NEXT2): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT2>>>; pipe<NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>, NEXT3 extends MapFunction<ReturnType<NEXT2>, any>>(next1: NEXT1, next2: NEXT2, next3: NEXT3): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT3>>>; pipe<NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>, NEXT3 extends MapFunction<ReturnType<NEXT2>, any>, NEXT4 extends MapFunction<ReturnType<NEXT3>, any>>(next1: NEXT1, next2: NEXT2, next3: NEXT3, next4: NEXT4): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT4>>>; pipe<NEXTS extends MapFunction<any, any>[]>(...nexts: NEXTS): PipedFunction<ArgsFunction<Parameters<F>, any>>; }; function pipe<F extends ArgsFunction<any[], any>>(fn: F): PipedFunction<F>; function pipe<F extends ArgsFunction<any[], any>, NEXT1 extends MapFunction<ReturnType<F>, any>>(fn: F, next1: NEXT1): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT1>>>; function pipe<F extends ArgsFunction<any[], any>, NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>>(fn: F, next1: NEXT1, next2: NEXT2): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT2>>>; function pipe<F extends ArgsFunction<any[], any>, NEXT1 extends MapFunction<ReturnType<F>, any>, NEXT2 extends MapFunction<ReturnType<NEXT1>, any>, NEXT3 extends MapFunction<ReturnType<NEXT2>, any>>(fn: F, next1: NEXT1, next2: NEXT2, next3: NEXT3): PipedFunction<ArgsFunction<Parameters<F>, ReturnType<NEXT3>>>; function pipe<F extends ArgsFunction<any[], any>>(...fns: F[]): PipedFunction<ArgsFunction<Parameters<F>, any>>; type MemoizedFunction<F extends ArgsFunction<any[], any>> = { (...args: Parameters<F>): ReturnType<F>; clear(): void; }; function memo<F extends ArgsFunction<any[], any>>(func: F, cacheId?: Functions.MapFunction<Parameters<F>, string>): MemoizedFunction<F>; function retry<F extends ArgsFunction<unknown[], unknown>>(func: F, count?: number, onError?: Functions.Consumer<unknown>): ReturnType<F>; function retryAsync<F extends ArgsFunction<unknown[], Promise<unknown>>>(func: F, count?: number, onError?: Functions.Consumer<unknown>): Promise<Awaited<ReturnType<F>>>; }