tryloop
Version:
Simple library for retrying operations, it supports multiple backoff strategies.
41 lines (26 loc) • 966 B
text/typescript
/* HELPERS */
type PartialExcept<Object, Keys extends keyof Object> = Partial<Object> & {
[Key in Keys]: Required<Pick<Object, Key>>[Key]
};
/* MAIN */
type FN = () => unknown;
type Result<Options extends PartialOptions<AbstractOptions>> = Awaited<ReturnType<Options['fn']> | undefined>;
type PartialOptions<Options extends AbstractOptions> = PartialExcept<Options, 'fn'>;
type InferPartialOptions<T extends FN | PartialOptions<AbstractOptions>> = T extends FN ? { fn: T } : T;
type AbstractOptions = {
fn: FN,
timeout: number,
tries: number
};
type ExponentialOptions = AbstractOptions & {
factor: number,
minInterval: number,
maxInterval: number
};
type IdleOptions = AbstractOptions;
type LinearOptions = AbstractOptions & {
interval: number
};
type RAFOptions = AbstractOptions;
/* EXPORT */
export type {FN, Result, PartialOptions, InferPartialOptions, AbstractOptions, ExponentialOptions, IdleOptions, LinearOptions, RAFOptions};