return false;
};
-export const convertToDate = (
- value: Date | string | number | null | undefined,
-): Date | null | undefined => {
+export const convertToDate = (value: Date | string | number | undefined): Date | undefined => {
if (isNullOrUndefined(value)) {
- return value as null | undefined;
+ return value as undefined;
}
if (isDate(value)) {
return value as Date;
}
if (isString(value) || typeof value === 'number') {
- value = new Date(value as string | number);
- if (isNaN(value.getTime())) {
- throw new Error(`Cannot convert to date: ${String(value)}`);
+ const valueToDate = new Date(value as string | number);
+ if (isNaN(valueToDate.getTime())) {
+ throw new Error(`Cannot convert to date: '${value as string | number}'`);
}
- return value;
+ return valueToDate;
}
- return null;
};
export const convertToInt = (value: unknown): number => {
changedValue = parseInt(value as string);
}
if (isNaN(changedValue)) {
- throw new Error(`Cannot convert to integer: ${String(value)}`);
+ throw new Error(`Cannot convert to integer: '${String(value)}'`);
}
return changedValue;
};
changedValue = parseFloat(value as string);
}
if (isNaN(changedValue)) {
- throw new Error(`Cannot convert to float: ${String(value)}`);
+ throw new Error(`Cannot convert to float: '${String(value)}'`);
}
return changedValue;
};
* Computes the retry delay in milliseconds using an exponential backoff algorithm.
*
* @param retryNumber - the number of retries that have already been attempted
- * @param maxDelayRatio - the maximum ratio of the delay that can be randomized
+ * @param delayFactor - the base delay factor in milliseconds
* @returns delay in milliseconds
*/
-export const exponentialDelay = (retryNumber = 0, maxDelayRatio = 0.2): number => {
- const delay = Math.pow(2, retryNumber) * 100;
- const randomSum = delay * maxDelayRatio * secureRandom(); // 0-(maxDelayRatio*100)% of the delay
+export const exponentialDelay = (retryNumber = 0, delayFactor = 100): number => {
+ const delay = Math.pow(2, retryNumber) * delayFactor;
+ const randomSum = delay * 0.2 * secureRandom(); // 0-20% of the delay
return delay + randomSum;
};
}
return true;
};
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export const once = <T, A extends any[], R>(
+ fn: (...args: A) => R,
+ context: T,
+): ((...args: A) => R) => {
+ let result: R;
+ return (...args: A) => {
+ if (fn) {
+ result = fn.apply<T, A, R>(context, args);
+ (fn as unknown as undefined) = (context as unknown as undefined) = undefined;
+ }
+ return result;
+ };
+};