X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FUtils.ts;h=dc7ad9fe0ecf94aa16c46610cf2d1438582c2500;hb=2ed9c7a844dd0ff83236dab693c18d2fad046310;hp=3ef99c5f2fdcab960c8e8234371eba0830d59c51;hpb=5edd8ba0f8978cfb3ca9d80f299d9748c6c5970e;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 3ef99c5f..dc7ad9fe 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -1,6 +1,13 @@ import { randomBytes, randomInt, randomUUID } from 'node:crypto'; import { inspect } from 'node:util'; +import { + formatDuration, + millisecondsToHours, + millisecondsToMinutes, + millisecondsToSeconds, + secondsToMilliseconds, +} from 'date-fns'; import clone from 'just-clone'; import { Constants } from './Constants'; @@ -21,32 +28,27 @@ export const validateUUID = (uuid: string): boolean => { }; export const sleep = async (milliSeconds: number): Promise => { - return new Promise((resolve) => setTimeout(resolve as () => void, milliSeconds)); + return new Promise((resolve) => setTimeout(resolve as () => void, milliSeconds)); }; export const formatDurationMilliSeconds = (duration: number): string => { duration = convertToInt(duration); - const hours = Math.floor(duration / (3600 * 1000)); - const minutes = Math.floor((duration / 1000 - hours * 3600) / 60); - const seconds = duration / 1000 - hours * 3600 - minutes * 60; - let hoursStr = hours.toString(); - let minutesStr = minutes.toString(); - let secondsStr = seconds.toString(); - - if (hours < 10) { - hoursStr = `0${hours.toString()}`; - } - if (minutes < 10) { - minutesStr = `0${minutes.toString()}`; - } - if (seconds < 10) { - secondsStr = `0${seconds.toString()}`; - } - return `${hoursStr}:${minutesStr}:${secondsStr.substring(0, 6)}`; + const days = Math.floor(duration / (24 * 3600 * 1000)); + const hours = Math.floor(millisecondsToHours(duration) - days * 24); + const minutes = Math.floor(millisecondsToMinutes(duration) - days * 24 * 60 - hours * 60); + const seconds = Math.floor( + millisecondsToSeconds(duration) - days * 24 * 3600 - hours * 3600 - minutes * 60, + ); + return formatDuration({ + days, + hours, + minutes, + seconds, + }); }; export const formatDurationSeconds = (duration: number): string => { - return formatDurationMilliSeconds(duration * 1000); + return formatDurationMilliSeconds(secondsToMilliseconds(duration)); }; export const convertToDate = ( @@ -59,7 +61,7 @@ export const convertToDate = ( return value; } if (isString(value) || typeof value === 'number') { - return new Date(value); + return new Date(value!); } return null; }; @@ -79,6 +81,7 @@ export const convertToInt = (value: unknown): number => { changedValue = parseInt(value as string); } if (isNaN(changedValue)) { + // eslint-disable-next-line @typescript-eslint/no-base-to-string throw new Error(`Cannot convert to integer: ${value.toString()}`); } return changedValue; @@ -93,6 +96,7 @@ export const convertToFloat = (value: unknown): number => { changedValue = parseFloat(value as string); } if (isNaN(changedValue)) { + // eslint-disable-next-line @typescript-eslint/no-base-to-string throw new Error(`Cannot convert to float: ${value.toString()}`); } return changedValue; @@ -196,7 +200,7 @@ export const isCFEnvironment = (): boolean => { }; export const isIterable = (obj: T): boolean => { - return !isNullOrUndefined(obj) ? typeof obj[Symbol.iterator] === 'function' : false; + return !isNullOrUndefined(obj) ? typeof obj[Symbol.iterator as keyof T] === 'function' : false; }; const isString = (value: unknown): boolean => { @@ -297,7 +301,7 @@ export const JSONStringifyWithMapSupport = ( ): string => { return JSON.stringify( obj, - (key, value: Record) => { + (_, value: Record) => { if (value instanceof Map) { return { dataType: 'Map', @@ -330,8 +334,12 @@ export const getWebSocketCloseEventStatusString = (code: number): string => { return '(For applications)'; } } - if (!isUndefined(WebSocketCloseEventStatusString[code])) { - return WebSocketCloseEventStatusString[code] as string; + if ( + !isUndefined( + WebSocketCloseEventStatusString[code as keyof typeof WebSocketCloseEventStatusString], + ) + ) { + return WebSocketCloseEventStatusString[code as keyof typeof WebSocketCloseEventStatusString]; } return '(Unknown)'; };