@poomcha/retrier
Version:
Retry synchronous or asynchronous functions.
366 lines (363 loc) • 16.5 kB
TypeScript
interface EffectCallback<T> {
callback: (...args: any) => T | Promise<T>;
args?: any[];
override?: boolean;
}
type RetryOptionsSync<OnSuccess, OnFailure> = {
onSuccess?: EffectCallback<OnSuccess>;
onFailure?: EffectCallback<OnFailure>;
};
type RetryOptionsAsync<OnSuccess, OnFailure> = {
delay?: number;
} & RetryOptionsSync<OnSuccess, OnFailure>;
type RetrierOptions<OnSuccess, OnFailure> = {
maxRetries?: number;
} & RetryOptionsAsync<OnSuccess, OnFailure>;
/**
* The Retrier class provides methods to retry operations synchronously and asynchronously
* with a specified number of retries.
*
* @see [source](https://github.com/Poomcha/retrier)
*
*/
declare class Retrier {
protected _maxRetries: number;
protected readonly _maxRetriesDefault: number;
protected _delay: number;
protected readonly _delayDefault: number;
protected _onSuccess: EffectCallback<any> | undefined;
protected _onFailure: EffectCallback<any> | undefined;
/**
* Constructs a new Retrier instance with optional configuration options.
* @constructor
*
* @param options - Optional configuration options.
* @param options.maxRetries - The maximum number of retries.
* @param options.delay - Delay between two retries in ms.
* @param options.onSuccess - onSuccess callback, can override default return.
* @param options.onFailure - onFailure callback, can override default error throwing.
* @throws Will throw an error if the maxRetries or delay are not valid positive integer
* [0, Number.MAX_SAFE_INTEGER].
*/
constructor(options?: RetrierOptions<any, any>);
/**
* Gets the maximum number of retries.
*
* @returns The maximum number of retries.
*/
getMaxRetries(): number;
/**
* Gets the delay between retries.
*
* @returns Delay between retries.
*/
getDelay(): number;
/**
* Get the _onSuccess private member.
*
* @returns _onSuccess member
*/
getOnSuccess(): EffectCallback<any> | undefined;
/**
* Get the _onFailure private member.
*
* @returns _onFailure member.
*/
getOnFailure(): EffectCallback<any> | undefined;
/**
* Sets the maximum number of retries.
*
* @param n - The number of retries to set.
* @throws Will throw an error if the number is not a valid positive integer.
*/
setMaxRetries(n: number): void;
/**
* Sets the delay between retries.
*
* @param delay - Delay between retries.
* @throws Will throw an error if the number is not a valid positive integer
*/
setDelay(delay: number): void;
/**
* Sets the _onSuccess member
*
* @param onSuccess
* @param onSuccess.callback Callback to call on success
* @param onSuccess.args Arguments to pass to the callback
* @param onSuccess.override If true, override default behaviour of retry functions
*/
setOnSuccess<T>(onSuccess: EffectCallback<T>): void;
/**
* Sets the _onFailure member
*
* @param onFailure
* @param onFailure.callback Callback to call on failure
* @param onFailure.args Arguments to pass to the callback
* @param onFailure.override If true, override default behaviour of retry functions
*/
setOnFailure<T>(onFailure: EffectCallback<T>): void;
/**
* Retries a synchronous operation, with a specified number of retries.
* Returns the result of the operation as soon as it succeed, or throws
* operation's error.
* Give access to onSuccess and onFailure optionnal handlers to handle
* success or failure.
* onSuccess and onFailure are given operation result as first argument.
*
* @see [source](https://github.com/Poomcha/retrier)
*
*
* @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
* @param callback - Function to retry.
* @param args - Optionnal arguments for callback.
*
*
* @param options - Optionnal options.
*
*
* @param options.onSuccess -
* @param options.onSuccess.callback - Function to run on success.
* @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
*
* @param options.Failure -
* @param options.onFailure.callback - Function to run on failure.
* @param options.onFailure.args - Optionnal arguments for onFailure.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
*
*
* @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
*
*
* @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
*/
static retryStaticSync<T, OnSuccess, OnFailure>(maxRetries: number, callback: (...args: any[]) => T, args?: any[], options?: RetryOptionsSync<OnSuccess, OnFailure>): T | OnSuccess | OnFailure;
/**
* Retries an asynchronous operation, with a specified number of retries.
* Returns the result of the operation as soon as it succeed, or throws
* operation's error.
* Give access to onSuccess and onFailure optionnal handlers to handle
* success or failure.
* onSuccess and onFailure are given operation result as first argument.
*
* @see [source](https://github.com/Poomcha/retrier)
*
* @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
* @param callback - Function to retry.
* @param args - Optionnal arguments for callback.
*
*
* @param options - Optionnal options.
*
* @param options.delay - Positive integer, delay between 2 retry.
*
* @param options.onSuccess -
* @param options.onSuccess.callback - Function to run on success.
* @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
*
* @param options.Failure -
* @param options.onFailure.callback - Function to run on failure.
* @param options.onFailure.args - Optionnal arguments for onFailure.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
*
*
* @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
*
*
* @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
*/
static retryStaticAsync<T, OnSuccess, OnFailure>(maxRetries: number, callback: (...args: any[]) => Promise<T>, args?: any[], options?: RetryOptionsAsync<OnSuccess, OnFailure>): Promise<T | OnSuccess | OnFailure>;
/**
* Retries a synchronous operation, with a specified number of retries.
* Returns the result of the operation as soon as it succeed, or throws
* operation's error.
* Give access to onSuccess and onFailure optionnal handlers to handle
* success or failure.
* onSuccess and onFailure are given operation result as first argument.
*
* @see [source](https://github.com/Poomcha/retrier)
*
*
* @param callback - Function to retry.
* @param args - Optionnal arguments for callback.
*
*
* @param options - Optionnal options, overule instance configuration.
*
* @param options.maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
*
* @param options.onSuccess -
* @param options.onSuccess.callback - Function to run on success.
* @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
*
* @param options.Failure -
* @param options.onFailure.callback - Function to run on failure.
* @param options.onFailure.args - Optionnal arguments for onFailure.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
*
*
* @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
*
*
* @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
*/
retrySync<T, OnSuccess, OnFailure>(callback: (...args: any[]) => T, args?: any[], options?: RetrierOptions<OnSuccess, OnFailure>): T | OnSuccess | OnFailure;
/**
* Retries an asynchronous operation, with a specified number of retries.
* Returns the result of the operation as soon as it succeed, or throws
* operation's error.
* Give access to onSuccess and onFailure optionnal handlers to handle
* success or failure.
* onSuccess and onFailure are given operation result as first argument.
*
* @see [source](https://github.com/Poomcha/retrier)
*
* @param callback - Function to retry.
* @param args - Optionnal arguments for callback.
*
*
* @param options - Optionnal options.
*
* @param options.maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
*
* @param options.delay - Positive integer, delay between 2 retry.
*
* @param options.onSuccess -
* @param options.onSuccess.callback - Function to run on success.
* @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
*
* @param options.Failure -
* @param options.onFailure.callback - Function to run on failure.
* @param options.onFailure.args - Optionnal arguments for onFailure.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
*
*
* @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
*
*
* @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
*/
retryAsync<T, OnSuccess, OnFailure>(callback: (...args: any[]) => Promise<T>, args?: any[], options?: RetrierOptions<OnSuccess, OnFailure>): Promise<T | OnSuccess | OnFailure>;
/**
* Internal method to retry a synchronous operation.
*
* @param callback - The callback function to retry.
* @param retry - The current retry count.
* @param args - Optional arguments to pass to the callback.
* @param options - Optional retry options.
* @returns The result of the callback function.
* @throws Will throw an error if all retries fail.
*/
private static _retrySync;
/**
* Internal method to retry an asynchronous operation.
*
* @param callback - The callback function to retry.
* @param retry - The current retry count.
* @param args - Optional arguments to pass to the callback.
* @param options - Optional retry options.
* @returns A promise that resolves to the result of the callback function.
* @throws Will throw an error if all retries fail.
*/
private static _retryAsync;
/**
* Internal method to set options configuration for non static sync methods
*
* @param options
*/
private makeOptionsSync;
/**
* Internal method to set options configuration for non static async methods
*
* @param options
*/
private makeOptionsAsync;
}
/**
* Retries a synchronous operation, with a specified number of retries.
* Returns the result of the operation as soon as it succeed, or throws
* operation's error.
* Give access to onSuccess and onFailure optionnal handlers to handle
* success or failure.
* onSuccess and onFailure are given operation result as first argument.
*
* @see [source](https://github.com/Poomcha/retrier)
*
*
* @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
* @param callback - Function to retry.
* @param args - Optionnal arguments for callback.
*
*
* @param options - Optionnal options.
*
*
* @param options.onSuccess -
* @param options.onSuccess.callback - Function to run on success.
* @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
*
* @param options.Failure -
* @param options.onFailure.callback - Function to run on failure.
* @param options.onFailure.args - Optionnal arguments for onFailure.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
*
*
* @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
*
*
* @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
*/
declare const retrySync: typeof Retrier.retryStaticSync;
/**
* Retries an asynchronous operation, with a specified number of retries.
* Returns the result of the operation as soon as it succeed, or throws
* operation's error.
* Give access to onSuccess and onFailure optionnal handlers to handle
* success or failure.
* onSuccess and onFailure are given operation result as first argument.
*
* @see [source](https://github.com/Poomcha/retrier)
*
* @param maxRetries - Positive integer, max number of retries <code>(Number[0, MAX_SAFE_INTEGER])</code>.
* @param callback - Function to retry.
* @param args - Optionnal arguments for callback.
*
*
* @param options - Optionnal options.
*
* @param options.delay - Positive integer, delay between 2 retry.
*
* @param options.onSuccess -
* @param options.onSuccess.callback - Function to run on success.
* @param options.onSuccess.args - Optionnal arguments for onSuccess.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onSuccess.override - Optionnal boolean, if true retrySync will return options.onSuccess.callback result.
*
* @param options.Failure -
* @param options.onFailure.callback - Function to run on failure.
* @param options.onFailure.args - Optionnal arguments for onFailure.callback,
* first argument will always be global callback result as <code>[res, ...args]</code>.
* @param options.onFailure.override - Boolean, if true retrySync will return options.onFailure.callback result.
*
*
* @returns callback result or options.onSuccess.callback result or options.onFailure.callback result.
*
*
* @throw callback error or options.onSuccess.callback error or options.onFailure.callback error.
*/
declare const retryAsync: typeof Retrier.retryStaticAsync;
export { Retrier, retryAsync, retrySync };