refactor(simulator): convert some class method helpers to arrow function
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 28 May 2023 20:33:20 +0000 (22:33 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 28 May 2023 20:33:20 +0000 (22:33 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/Bootstrap.ts
src/charging-station/ChargingStation.ts
src/charging-station/IdTagsCache.ts
src/charging-station/ocpp/OCPPIncomingRequestService.ts
src/charging-station/ocpp/OCPPRequestService.ts
src/charging-station/ocpp/OCPPServiceUtils.ts
src/performance/storage/JsonFileStorage.ts
src/performance/storage/Storage.ts
src/utils/ErrorUtils.ts
src/utils/FileUtils.ts
src/utils/index.ts

index 802a944525cc4c824e6a282aa048c20ab6a0e9cc..35f67a9504a7cb43089efcd651ee22e36c87c785 100644 (file)
@@ -22,7 +22,14 @@ import {
   type StationTemplateUrl,
   type Statistics,
 } from '../types';
-import { Configuration, Constants, ErrorUtils, Utils, logger } from '../utils';
+import {
+  Configuration,
+  Constants,
+  Utils,
+  handleUncaughtException,
+  handleUnhandledRejection,
+  logger,
+} from '../utils';
 import { type MessageHandler, type WorkerAbstract, WorkerFactory } from '../worker';
 
 const moduleName = 'Bootstrap';
@@ -51,8 +58,8 @@ export class Bootstrap extends EventEmitter {
       process.on(signal, this.gracefulShutdown);
     }
     // Enable unconditionally for now
-    ErrorUtils.handleUnhandledRejection();
-    ErrorUtils.handleUncaughtException();
+    handleUnhandledRejection();
+    handleUncaughtException();
     this.initializedCounters = false;
     this.started = false;
     this.initializeCounters();
index 94447bb3930272fc3586778ce43aa49a22ace66e..28138afb0b3764514ee374235edf5b89cafca01c 100644 (file)
@@ -89,14 +89,14 @@ import {
   Configuration,
   Constants,
   DCElectricUtils,
-  ErrorUtils,
-  FileUtils,
   MessageChannelUtils,
   Utils,
   buildChargingStationAutomaticTransactionGeneratorConfiguration,
   buildConnectorsStatus,
   buildEvsesStatus,
+  handleFileException,
   logger,
+  watchJsonFile,
 } from '../utils';
 
 export class ChargingStation {
@@ -645,7 +645,7 @@ export class ChargingStation {
         }
         this.openWSConnection();
         // Monitor charging station template file
-        this.templateFileWatcher = FileUtils.watchJsonFile(
+        this.templateFileWatcher = watchJsonFile(
           this.templateFile,
           FileType.ChargingStationTemplate,
           this.logPrefix(),
@@ -957,7 +957,7 @@ export class ChargingStation {
         this.templateFileHash = template.templateHash;
       }
     } catch (error) {
-      ErrorUtils.handleFileException(
+      handleFileException(
         this.templateFile,
         FileType.ChargingStationTemplate,
         error as NodeJS.ErrnoException,
@@ -1539,7 +1539,7 @@ export class ChargingStation {
           this.configurationFileHash = configuration.configurationHash;
         }
       } catch (error) {
-        ErrorUtils.handleFileException(
+        handleFileException(
           this.configurationFile,
           FileType.ChargingStationConfiguration,
           error as NodeJS.ErrnoException,
@@ -1628,7 +1628,7 @@ export class ChargingStation {
               this.configurationFileHash = configurationHash;
             })
             .catch((error) => {
-              ErrorUtils.handleFileException(
+              handleFileException(
                 this.configurationFile,
                 FileType.ChargingStationConfiguration,
                 error as NodeJS.ErrnoException,
@@ -1646,7 +1646,7 @@ export class ChargingStation {
           );
         }
       } catch (error) {
-        ErrorUtils.handleFileException(
+        handleFileException(
           this.configurationFile,
           FileType.ChargingStationConfiguration,
           error as NodeJS.ErrnoException,
index fd35fa8baaecca49d58924ef6d970a2da0672558..890ac1fbf12892a04c7afcde3e27d04f09845154 100644 (file)
@@ -3,7 +3,7 @@ import fs from 'node:fs';
 import type { ChargingStation } from './ChargingStation';
 import { ChargingStationUtils } from './ChargingStationUtils';
 import { FileType, IdTagDistribution } from '../types';
-import { ErrorUtils, FileUtils, Utils, logger } from '../utils';
+import { Utils, handleFileException, logger, watchJsonFile } from '../utils';
 
 type IdTagsCacheValueType = {
   idTags: string[];
@@ -116,7 +116,7 @@ export class IdTagsCache {
   private setIdTagsCache(file: string, idTags: string[]) {
     return this.idTagsCaches.set(file, {
       idTags,
-      idTagsFileWatcher: FileUtils.watchJsonFile(
+      idTagsFileWatcher: watchJsonFile(
         file,
         FileType.Authorization,
         this.logPrefix(file),
@@ -130,7 +130,7 @@ export class IdTagsCache {
               this.deleteIdTagsCache(file);
               this.deleteIdTagsCacheIndexes(file);
             } catch (error) {
-              ErrorUtils.handleFileException(
+              handleFileException(
                 file,
                 FileType.Authorization,
                 error as NodeJS.ErrnoException,
@@ -172,7 +172,7 @@ export class IdTagsCache {
       try {
         return JSON.parse(fs.readFileSync(file, 'utf8')) as string[];
       } catch (error) {
-        ErrorUtils.handleFileException(
+        handleFileException(
           file,
           FileType.Authorization,
           error as NodeJS.ErrnoException,
index 4d2b29e3d0c695f5fbbdac79fdff1782bd6f04b6..2a304c31f118e138ab716150cc893d7ea0db9161 100644 (file)
@@ -15,7 +15,7 @@ import type {
   JsonType,
   OCPPVersion,
 } from '../../types';
-import { ErrorUtils, logger } from '../../utils';
+import { logger, setDefaultErrorParams } from '../../utils';
 
 const moduleName = 'OCPPIncomingRequestService';
 
@@ -62,7 +62,7 @@ export abstract class OCPPIncomingRequestService extends AsyncResource {
     error: Error,
     params: HandleErrorParams<T> = { throwError: true, consoleOut: false }
   ): T | undefined {
-    ErrorUtils.setDefaultErrorParams(params);
+    setDefaultErrorParams(params);
     logger.error(
       `${chargingStation.logPrefix()} ${moduleName}.handleIncomingRequestError: Incoming request command '${commandName}' error:`,
       error
index 2a6a8c1884898d9d3c123cd071cda6f88c9befe0..a3b78ca63ec8e40d44a07c7a12f9689ed38eee63 100644 (file)
@@ -23,7 +23,7 @@ import {
   type ResponseCallback,
   type ResponseType,
 } from '../../types';
-import { Constants, ErrorUtils, Utils, logger } from '../../utils';
+import { Constants, Utils, handleSendMessageError, logger } from '../../utils';
 
 const moduleName = 'OCPPRequestService';
 
@@ -133,7 +133,7 @@ export abstract class OCPPRequestService {
         commandName
       );
     } catch (error) {
-      ErrorUtils.handleSendMessageError(chargingStation, commandName, error as Error, {
+      handleSendMessageError(chargingStation, commandName, error as Error, {
         throwError: true,
       });
     }
@@ -155,7 +155,7 @@ export abstract class OCPPRequestService {
         commandName
       );
     } catch (error) {
-      ErrorUtils.handleSendMessageError(chargingStation, commandName, error as Error);
+      handleSendMessageError(chargingStation, commandName, error as Error);
     }
   }
 
@@ -180,7 +180,7 @@ export abstract class OCPPRequestService {
         params
       );
     } catch (error) {
-      ErrorUtils.handleSendMessageError(chargingStation, commandName, error as Error, {
+      handleSendMessageError(chargingStation, commandName, error as Error, {
         throwError: params.throwError,
       });
     }
index a4702dd6bcf242f3a2eeb234e5e65c985d9452f3..078fa0a09551ca56e9e8d66bb94aad9cb2dab92c 100644 (file)
@@ -30,7 +30,7 @@ import {
   type StatusNotificationRequest,
   type StatusNotificationResponse,
 } from '../../types';
-import { ErrorUtils, Utils, logger } from '../../utils';
+import { Utils, handleFileException, logger } from '../../utils';
 
 export class OCPPServiceUtils {
   protected constructor() {
@@ -264,7 +264,7 @@ export class OCPPServiceUtils {
     try {
       return JSON.parse(fs.readFileSync(filePath, 'utf8')) as JSONSchemaType<T>;
     } catch (error) {
-      ErrorUtils.handleFileException(
+      handleFileException(
         filePath,
         FileType.JsonSchema,
         error as NodeJS.ErrnoException,
index 2a712a6008f61722ef21dddaac5acd2e3ba14d53..0fd29d0214f4ec6a138281f1e84d61011591ae03 100644 (file)
@@ -6,7 +6,7 @@ import path from 'node:path';
 import { Storage } from './Storage';
 import { BaseError } from '../../exception';
 import { FileType, type Statistics } from '../../types';
-import { AsyncLock, AsyncLockType, Constants, ErrorUtils, Utils } from '../../utils';
+import { AsyncLock, AsyncLockType, Constants, Utils, handleFileException } from '../../utils';
 
 export class JsonFileStorage extends Storage {
   private fd: number | null = null;
@@ -32,7 +32,7 @@ export class JsonFileStorage extends Storage {
         );
       })
       .catch((error) => {
-        ErrorUtils.handleFileException(
+        handleFileException(
           this.dbName,
           FileType.PerformanceRecords,
           error as NodeJS.ErrnoException,
@@ -53,7 +53,7 @@ export class JsonFileStorage extends Storage {
         this.fd = fs.openSync(this.dbName, 'a+');
       }
     } catch (error) {
-      ErrorUtils.handleFileException(
+      handleFileException(
         this.dbName,
         FileType.PerformanceRecords,
         error as NodeJS.ErrnoException,
@@ -69,7 +69,7 @@ export class JsonFileStorage extends Storage {
         this.fd = null;
       }
     } catch (error) {
-      ErrorUtils.handleFileException(
+      handleFileException(
         this.dbName,
         FileType.PerformanceRecords,
         error as NodeJS.ErrnoException,
index 39345cdf18a851efeed644ab41aeeb121097c3a0..1360dabbad61aa2ec0feb3bde2fddfdd5d8b6d06 100644 (file)
@@ -9,7 +9,7 @@ import {
   type Statistics,
   StorageType,
 } from '../../types';
-import { ErrorUtils, Utils, logger } from '../../utils';
+import { Utils, logger, setDefaultErrorParams } from '../../utils';
 
 export abstract class Storage {
   protected readonly storageUri: URL;
@@ -27,7 +27,7 @@ export abstract class Storage {
     table?: string,
     params: HandleErrorParams<EmptyObject> = { throwError: false, consoleOut: false }
   ): void {
-    ErrorUtils.setDefaultErrorParams(params, { throwError: false, consoleOut: false });
+    setDefaultErrorParams(params, { throwError: false, consoleOut: false });
     const inTableOrCollectionStr =
       (!Utils.isNullOrUndefined(table) || !table) && ` in table or collection '${table}'`;
     logger.error(
index bca12b6463f5a2e76c6388f6b476fda65658c0b8..b4f52ba894a9e57891a04954bbe066b6b1d40ad8 100644 (file)
@@ -17,85 +17,79 @@ const defaultErrorParams = {
   consoleOut: false,
 };
 
-export class ErrorUtils {
-  private constructor() {
-    // This is intentional
-  }
+export const handleUncaughtException = (): void => {
+  process.on('uncaughtException', (error: Error) => {
+    console.error(chalk.red('Uncaught exception: '), error);
+  });
+};
 
-  public static handleUncaughtException(): void {
-    process.on('uncaughtException', (error: Error) => {
-      console.error(chalk.red('Uncaught exception: '), error);
-    });
-  }
+export const handleUnhandledRejection = (): void => {
+  process.on('unhandledRejection', (reason: unknown) => {
+    console.error(chalk.red('Unhandled rejection: '), reason);
+  });
+};
 
-  public static handleUnhandledRejection(): void {
-    process.on('unhandledRejection', (reason: unknown) => {
-      console.error(chalk.red('Unhandled rejection: '), reason);
-    });
+export const handleFileException = (
+  file: string,
+  fileType: FileType,
+  error: NodeJS.ErrnoException,
+  logPrefix: string,
+  params: HandleErrorParams<EmptyObject> = defaultErrorParams
+): void => {
+  setDefaultErrorParams(params);
+  const prefix = Utils.isNotEmptyString(logPrefix) ? `${logPrefix} ` : '';
+  let logMsg: string;
+  switch (error.code) {
+    case 'ENOENT':
+      logMsg = `${fileType} file ${file} not found:`;
+      break;
+    case 'EEXIST':
+      logMsg = `${fileType} file ${file} already exists:`;
+      break;
+    case 'EACCES':
+      logMsg = `${fileType} file ${file} access denied:`;
+      break;
+    case 'EPERM':
+      logMsg = `${fileType} file ${file} permission denied:`;
+      break;
+    default:
+      logMsg = `${fileType} file ${file} error:`;
   }
-
-  public static handleFileException(
-    file: string,
-    fileType: FileType,
-    error: NodeJS.ErrnoException,
-    logPrefix: string,
-    params: HandleErrorParams<EmptyObject> = defaultErrorParams
-  ): void {
-    ErrorUtils.setDefaultErrorParams(params);
-    const prefix = Utils.isNotEmptyString(logPrefix) ? `${logPrefix} ` : '';
-    let logMsg: string;
-    switch (error.code) {
-      case 'ENOENT':
-        logMsg = `${fileType} file ${file} not found:`;
-        break;
-      case 'EEXIST':
-        logMsg = `${fileType} file ${file} already exists:`;
-        break;
-      case 'EACCES':
-        logMsg = `${fileType} file ${file} access denied:`;
-        break;
-      case 'EPERM':
-        logMsg = `${fileType} file ${file} permission denied:`;
-        break;
-      default:
-        logMsg = `${fileType} file ${file} error:`;
-    }
-    if (params?.consoleOut === true) {
-      if (params?.throwError) {
-        console.error(`${chalk.green(prefix)}${chalk.red(`${logMsg} `)}`, error);
-      } else {
-        console.warn(`${chalk.green(prefix)}${chalk.yellow(`${logMsg} `)}`, error);
-      }
-    } else if (params?.consoleOut === false) {
-      if (params?.throwError) {
-        logger.error(`${prefix}${logMsg}`, error);
-      } else {
-        logger.warn(`${prefix}${logMsg}`, error);
-      }
+  if (params?.consoleOut === true) {
+    if (params?.throwError) {
+      console.error(`${chalk.green(prefix)}${chalk.red(`${logMsg} `)}`, error);
+    } else {
+      console.warn(`${chalk.green(prefix)}${chalk.yellow(`${logMsg} `)}`, error);
     }
+  } else if (params?.consoleOut === false) {
     if (params?.throwError) {
-      throw error;
+      logger.error(`${prefix}${logMsg}`, error);
+    } else {
+      logger.warn(`${prefix}${logMsg}`, error);
     }
   }
-
-  public static handleSendMessageError(
-    chargingStation: ChargingStation,
-    commandName: RequestCommand | IncomingRequestCommand,
-    error: Error,
-    params: HandleErrorParams<EmptyObject> = { throwError: false, consoleOut: false }
-  ): void {
-    ErrorUtils.setDefaultErrorParams(params, { throwError: false, consoleOut: false });
-    logger.error(`${chargingStation.logPrefix()} Request command '${commandName}' error:`, error);
-    if (params?.throwError === true) {
-      throw error;
-    }
+  if (params?.throwError) {
+    throw error;
   }
+};
 
-  public static setDefaultErrorParams<T extends JsonType>(
-    params: HandleErrorParams<T>,
-    defaultParams: HandleErrorParams<T> = defaultErrorParams
-  ): HandleErrorParams<T> {
-    params = { ...defaultParams, ...params };
-    return params;
+export const handleSendMessageError = (
+  chargingStation: ChargingStation,
+  commandName: RequestCommand | IncomingRequestCommand,
+  error: Error,
+  params: HandleErrorParams<EmptyObject> = { throwError: false, consoleOut: false }
+): void => {
+  setDefaultErrorParams(params, { throwError: false, consoleOut: false });
+  logger.error(`${chargingStation.logPrefix()} Request command '${commandName}' error:`, error);
+  if (params?.throwError === true) {
+    throw error;
   }
-}
+};
+
+export const setDefaultErrorParams = <T extends JsonType>(
+  params: HandleErrorParams<T>,
+  defaultParams: HandleErrorParams<T> = defaultErrorParams
+): HandleErrorParams<T> => {
+  params = { ...defaultParams, ...params };
+  return params;
+};
index 4e556a4bc1c3d642c8c9edecbb92049d5e880044..51871884ccc38e7c7b6d09c7d6cd37c1a6ad3192 100644 (file)
@@ -1,49 +1,37 @@
 import fs from 'node:fs';
 
-import { ErrorUtils } from './ErrorUtils';
+import { handleFileException } from './ErrorUtils';
 import { logger } from './Logger';
 import { Utils } from './Utils';
 import type { FileType, JsonType } from '../types';
 
-export class FileUtils {
-  private constructor() {
-    // This is intentional
-  }
-
-  public static watchJsonFile<T extends JsonType>(
-    file: string,
-    fileType: FileType,
-    logPrefix: string,
-    refreshedVariable?: T,
-    listener: fs.WatchListener<string> = (event, filename) => {
-      if (Utils.isNotEmptyString(filename) && event === 'change') {
-        try {
-          logger.debug(`${logPrefix} ${fileType} file ${file} have changed, reload`);
-          refreshedVariable && (refreshedVariable = JSON.parse(fs.readFileSync(file, 'utf8')) as T);
-        } catch (error) {
-          ErrorUtils.handleFileException(
-            file,
-            fileType,
-            error as NodeJS.ErrnoException,
-            logPrefix,
-            {
-              throwError: false,
-            }
-          );
-        }
-      }
-    }
-  ): fs.FSWatcher | undefined {
-    if (Utils.isNotEmptyString(file)) {
+export const watchJsonFile = <T extends JsonType>(
+  file: string,
+  fileType: FileType,
+  logPrefix: string,
+  refreshedVariable?: T,
+  listener: fs.WatchListener<string> = (event, filename) => {
+    if (Utils.isNotEmptyString(filename) && event === 'change') {
       try {
-        return fs.watch(file, listener);
+        logger.debug(`${logPrefix} ${fileType} file ${file} have changed, reload`);
+        refreshedVariable && (refreshedVariable = JSON.parse(fs.readFileSync(file, 'utf8')) as T);
       } catch (error) {
-        ErrorUtils.handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, {
+        handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, {
           throwError: false,
         });
       }
-    } else {
-      logger.info(`${logPrefix} No ${fileType} file to watch given. Not monitoring its changes`);
     }
   }
-}
+): fs.FSWatcher | undefined => {
+  if (Utils.isNotEmptyString(file)) {
+    try {
+      return fs.watch(file, listener);
+    } catch (error) {
+      handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, {
+        throwError: false,
+      });
+    }
+  } else {
+    logger.info(`${logPrefix} No ${fileType} file to watch given. Not monitoring its changes`);
+  }
+};
index b034c9a28f26b93b1ae5c6fa94a07213023ee1af..2273562e6589c53ceef77da8686bcb3095b9b7f5 100644 (file)
@@ -9,8 +9,14 @@ export {
 export { CircularArray } from './CircularArray';
 export { Configuration } from './Configuration';
 export { Constants } from './Constants';
-export { ErrorUtils } from './ErrorUtils';
-export { FileUtils } from './FileUtils';
+export {
+  handleFileException,
+  handleUncaughtException,
+  handleUnhandledRejection,
+  handleSendMessageError,
+  setDefaultErrorParams,
+} from './ErrorUtils';
+export { watchJsonFile } from './FileUtils';
 export { MessageChannelUtils } from './MessageChannelUtils';
 export { Utils } from './Utils';
 export { logger } from './Logger';