fix: strict condition on boolean
[e-mobility-charging-stations-simulator.git] / src / charging-station / IdTagsCache.ts
index 55fcb9241873a3845c87b6cf67b8fb6a59a606bf..5e0ab0b8f0778c2fbf02333c579657387a5c1d5f 100644 (file)
@@ -1,14 +1,21 @@
-import fs from 'node:fs';
+import { type FSWatcher, readFileSync } from 'node:fs';
 
 import type { ChargingStation } from './ChargingStation';
-import { ChargingStationUtils } from './ChargingStationUtils';
+import { getIdTagsFile } from './Helpers';
 import { FileType, IdTagDistribution } from '../types';
-import { Utils, handleFileException, logger, watchJsonFile } from '../utils';
-
-type IdTagsCacheValueType = {
+import {
+  handleFileException,
+  isNotEmptyString,
+  logPrefix,
+  logger,
+  secureRandom,
+  watchJsonFile,
+} from '../utils';
+
+interface IdTagsCacheValueType {
   idTags: string[];
-  idTagsFileWatcher: fs.FSWatcher | undefined;
-};
+  idTagsFileWatcher: FSWatcher | undefined;
+}
 
 export class IdTagsCache {
   private static instance: IdTagsCache | null = null;
@@ -39,10 +46,10 @@ export class IdTagsCache {
   public getIdTag(
     distribution: IdTagDistribution,
     chargingStation: ChargingStation,
-    connectorId: number
+    connectorId: number,
   ): string {
     const hashId = chargingStation.stationInfo.hashId;
-    const idTagsFile = ChargingStationUtils.getIdTagsFile(chargingStation.stationInfo);
+    const idTagsFile = getIdTagsFile(chargingStation.stationInfo)!;
     switch (distribution) {
       case IdTagDistribution.RANDOM:
         return this.getRandomIdTag(hashId, idTagsFile);
@@ -74,39 +81,39 @@ export class IdTagsCache {
   }
 
   private getRandomIdTag(hashId: string, file: string): string {
-    const idTags = this.getIdTags(file);
+    const idTags = this.getIdTags(file)!;
     const addressableKey = this.getIdTagsCacheIndexesAddressableKey(file, hashId);
     this.idTagsCachesAddressableIndexes.set(
       addressableKey,
-      Math.floor(Utils.secureRandom() * idTags.length)
+      Math.floor(secureRandom() * idTags.length),
     );
-    return idTags[this.idTagsCachesAddressableIndexes.get(addressableKey)];
+    return idTags[this.idTagsCachesAddressableIndexes.get(addressableKey)!];
   }
 
   private getRoundRobinIdTag(hashId: string, file: string): string {
-    const idTags = this.getIdTags(file);
+    const idTags = this.getIdTags(file)!;
     const addressableKey = this.getIdTagsCacheIndexesAddressableKey(file, hashId);
     const idTagIndex = this.idTagsCachesAddressableIndexes.get(addressableKey) ?? 0;
     const idTag = idTags[idTagIndex];
     this.idTagsCachesAddressableIndexes.set(
       addressableKey,
-      idTagIndex === idTags.length - 1 ? 0 : idTagIndex + 1
+      idTagIndex === idTags.length - 1 ? 0 : idTagIndex + 1,
     );
     return idTag;
   }
 
   private getConnectorAffinityIdTag(chargingStation: ChargingStation, connectorId: number): string {
-    const file = ChargingStationUtils.getIdTagsFile(chargingStation.stationInfo);
-    const idTags = this.getIdTags(file);
+    const file = getIdTagsFile(chargingStation.stationInfo)!;
+    const idTags = this.getIdTags(file)!;
     const addressableKey = this.getIdTagsCacheIndexesAddressableKey(
       file,
-      chargingStation.stationInfo.hashId
+      chargingStation.stationInfo.hashId,
     );
     this.idTagsCachesAddressableIndexes.set(
       addressableKey,
-      (chargingStation.index - 1 + (connectorId - 1)) % idTags.length
+      (chargingStation.index - 1 + (connectorId - 1)) % idTags.length,
     );
-    return idTags[this.idTagsCachesAddressableIndexes.get(addressableKey)];
+    return idTags[this.idTagsCachesAddressableIndexes.get(addressableKey)!];
   }
 
   private hasIdTagsCache(file: string): boolean {
@@ -122,10 +129,10 @@ export class IdTagsCache {
         this.logPrefix(file),
         undefined,
         (event, filename) => {
-          if (Utils.isNotEmptyString(filename) && event === 'change') {
+          if (isNotEmptyString(filename) && event === 'change') {
             try {
               logger.debug(
-                `${this.logPrefix(file)} ${FileType.Authorization} file have changed, reload`
+                `${this.logPrefix(file)} ${FileType.Authorization} file have changed, reload`,
               );
               this.deleteIdTagsCache(file);
               this.deleteIdTagsCacheIndexes(file);
@@ -137,11 +144,11 @@ export class IdTagsCache {
                 this.logPrefix(file),
                 {
                   throwError: false,
-                }
+                },
               );
             }
           }
-        }
+        },
       ),
     });
   }
@@ -156,7 +163,7 @@ export class IdTagsCache {
   }
 
   private deleteIdTagsCacheIndexes(file: string): boolean {
-    let deleted: boolean[];
+    const deleted: boolean[] = [];
     for (const [key] of this.idTagsCachesAddressableIndexes) {
       if (key.startsWith(file)) {
         deleted.push(this.idTagsCachesAddressableIndexes.delete(key));
@@ -170,15 +177,15 @@ export class IdTagsCache {
   }
 
   private getIdTagsFromFile(file: string): string[] {
-    if (Utils.isNotEmptyString(file)) {
+    if (isNotEmptyString(file)) {
       try {
-        return JSON.parse(fs.readFileSync(file, 'utf8')) as string[];
+        return JSON.parse(readFileSync(file, 'utf8')) as string[];
       } catch (error) {
         handleFileException(
           file,
           FileType.Authorization,
           error as NodeJS.ErrnoException,
-          this.logPrefix(file)
+          this.logPrefix(file),
         );
       }
     }
@@ -186,6 +193,6 @@ export class IdTagsCache {
   }
 
   private logPrefix = (file: string): string => {
-    return Utils.logPrefix(` Id tags cache for id tags file '${file}' |`);
+    return logPrefix(` Id tags cache for id tags file '${file}' |`);
   };
 }