Broadcast Channel: optimize requests handling implementation
[e-mobility-charging-stations-simulator.git] / src / utils / Utils.ts
index 1ad1a7924bb0b5e4eb5e8fc7778a9d89f953eda6..2dff293af5f31479f5c8fde2f6cc43b3b84dc346 100644 (file)
@@ -2,6 +2,8 @@ import crypto from 'crypto';
 
 import { v4 as uuid } from 'uuid';
 
+import { WebSocketCloseEventStatusString } from '../types/WebSocket';
+
 export default class Utils {
   private constructor() {
     // This is intentional
@@ -238,4 +240,49 @@ export default class Utils {
   public static secureRandom(): number {
     return crypto.randomBytes(4).readUInt32LE() / 0x100000000;
   }
+
+  public static JSONStringifyWithMapSupport(
+    obj: Record<string, unknown> | Record<string, unknown>[],
+    space?: number
+  ): string {
+    return JSON.stringify(
+      obj,
+      (key, value: Record<string, unknown>) => {
+        if (value instanceof Map) {
+          return {
+            dataType: 'Map',
+            value: [...value],
+          };
+        }
+        return value;
+      },
+      space
+    );
+  }
+
+  /**
+   * Convert websocket error code to human readable string message
+   *
+   * @param code websocket error code
+   * @returns human readable string message
+   */
+  public static getWebSocketCloseEventStatusString(code: number): string {
+    if (code >= 0 && code <= 999) {
+      return '(Unused)';
+    } else if (code >= 1016) {
+      if (code <= 1999) {
+        return '(For WebSocket standard)';
+      } else if (code <= 2999) {
+        return '(For WebSocket extensions)';
+      } else if (code <= 3999) {
+        return '(For libraries and frameworks)';
+      } else if (code <= 4999) {
+        return '(For applications)';
+      }
+    }
+    if (!Utils.isUndefined(WebSocketCloseEventStatusString[code])) {
+      return WebSocketCloseEventStatusString[code] as string;
+    }
+    return '(Unknown)';
+  }
 }