Typing.
[e-mobility-charging-stations-simulator.git] / src / utils / Utils.ts
index c54bb17fa7431c587d21548b6923975d058bb5b4..69ccc318143b7f481b0a0f059d5c5aacff1f19dc 100644 (file)
@@ -5,14 +5,16 @@ export default class Utils {
     return uuid();
   }
 
-  static async sleep(ms: number): Promise<NodeJS.Timeout> {
-    return new Promise((resolve) => setTimeout(resolve, ms));
+  static async sleep(milliSeconds: number): Promise<NodeJS.Timeout> {
+    return new Promise((resolve) => setTimeout(resolve, milliSeconds));
   }
 
-  static secondstoHHMMSS(seconds): string {
-    const date = new Date();
-    date.setSeconds(seconds);
-    return date.toISOString().substr(11, 8);
+  static secondsToHHMMSS(seconds: number): string {
+    return new Date(seconds * 1000).toISOString().substr(11, 8);
+  }
+
+  static milliSecondsToHHMMSS(milliSeconds: number): string {
+    return new Date(milliSeconds).toISOString().substr(11, 8);
   }
 
   static removeExtraEmptyLines(tab): void {
@@ -100,7 +102,8 @@ export default class Utils {
   }
 
   static roundTo(number: number, scale: number): number {
-    return Utils.convertToFloat(number.toFixed(scale));
+    const roundPower = Math.pow(10, scale);
+    return Math.round(number * roundPower) / roundPower;
   }
 
   static getRandomFloatRounded(max: number, min = 0, scale = 2): number {
@@ -115,10 +118,6 @@ export default class Utils {
     return date.toLocaleString() + prefixString;
   }
 
-  static objectHasOwnProperty(object, property) {
-    return Object.prototype.hasOwnProperty.call(object, property);
-  }
-
   static cloneObject(object) {
     return JSON.parse(JSON.stringify(object));
   }
@@ -147,7 +146,7 @@ export default class Utils {
     return typeof value === 'string';
   }
 
-  static isUndefined(value) {
+  static isUndefined(value): boolean {
     return typeof value === 'undefined';
   }
 
@@ -160,6 +159,9 @@ export default class Utils {
   }
 
   static isEmptyArray(object): boolean {
+    if (!object) {
+      return true;
+    }
     if (Array.isArray(object) && object.length > 0) {
       return false;
     }
@@ -169,4 +171,16 @@ export default class Utils {
   static isEmptyObject(obj): boolean {
     return !Object.keys(obj).length;
   }
+
+  static insertAt = (str: string, subStr: string, pos: number): string => `${str.slice(0, pos)}${subStr}${str.slice(pos)}`;
+
+  /**
+   * @param  {number} [retryNumber=0]
+   * @return {number} - delay in milliseconds
+   */
+  static exponentialDelay(retryNumber = 0): number {
+    const delay = Math.pow(2, retryNumber) * 100;
+    const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay
+    return delay + randomSum;
+  }
 }