X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FUtils.ts;h=58e9094c7a601bcd587cf59e6fd79b32a8823b95;hb=5f742aac345f2eb8897c24651d00c7fb43dabbf8;hp=b619144bd5beab7045bb0ff2deae16e5b141e106;hpb=43ff25b8055903d84a99969412c36196e979c6bd;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index b619144b..58e9094c 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -70,23 +70,20 @@ export const isValidTime = (date: unknown): boolean => { 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 => { @@ -104,7 +101,7 @@ 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; }; @@ -118,7 +115,7 @@ export const convertToFloat = (value: unknown): number => { 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; }; @@ -283,12 +280,12 @@ export const insertAt = (str: string, subStr: string, pos: number): string => * 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; }; @@ -385,3 +382,18 @@ export const isArraySorted = (array: T[], compareFn: (a: T, b: T) => number): } return true; }; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const once = ( + fn: (...args: A) => R, + context: T, +): ((...args: A) => R) => { + let result: R; + return (...args: A) => { + if (fn) { + result = fn.apply(context, args); + (fn as unknown as undefined) = (context as unknown as undefined) = undefined; + } + return result; + }; +};