refactor: add more sanity checks to charging profiles handling code
[e-mobility-charging-stations-simulator.git] / src / utils / Configuration.ts
index 4aaa2250dc77169cf0113b0958ce23738680da26..f03e0472570ec0af65a1a0dd070d57a8131fd911 100644 (file)
@@ -35,8 +35,8 @@ export class Configuration {
     'config.json',
   );
 
-  private static configurationFileWatcher: FSWatcher | undefined;
-  private static configurationData: ConfigurationData | null = null;
+  private static configurationFileWatcher?: FSWatcher;
+  private static configurationData?: ConfigurationData;
   private static configurationSectionCache = new Map<
     ConfigurationSection,
     ConfigurationSectionType
@@ -119,16 +119,18 @@ export class Configuration {
       "Use 'stationTemplateUrls' instead",
     );
     // eslint-disable-next-line @typescript-eslint/dot-notation
-    !isUndefined(Configuration.getConfigurationData()!['stationTemplateURLs']) &&
+    !isUndefined(
+      Configuration.getConfigurationData()!['stationTemplateURLs' as keyof ConfigurationData],
+    ) &&
       (Configuration.getConfigurationData()!.stationTemplateUrls =
         Configuration.getConfigurationData()![
           // eslint-disable-next-line @typescript-eslint/dot-notation
-          'stationTemplateURLs'
+          'stationTemplateURLs' as keyof ConfigurationData
         ] as StationTemplateUrl[]);
     Configuration.getConfigurationData()!.stationTemplateUrls.forEach(
       (stationTemplateUrl: StationTemplateUrl) => {
         // eslint-disable-next-line @typescript-eslint/dot-notation
-        if (!isUndefined(stationTemplateUrl['numberOfStation'])) {
+        if (!isUndefined(stationTemplateUrl['numberOfStation' as keyof StationTemplateUrl])) {
           console.error(
             `${chalk.green(Configuration.logPrefix())} ${chalk.red(
               `Deprecated configuration key 'numberOfStation' usage for template file '${stationTemplateUrl.file}' in 'stationTemplateUrls'. Use 'numberOfStations' instead`,
@@ -147,10 +149,14 @@ export class Configuration {
       "Use 'supervisionUrls' instead",
     );
     // eslint-disable-next-line @typescript-eslint/dot-notation
-    if (!isUndefined(Configuration.getConfigurationData()!['supervisionURLs'])) {
+    if (
+      !isUndefined(
+        Configuration.getConfigurationData()!['supervisionURLs' as keyof ConfigurationData],
+      )
+    ) {
       Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
         // eslint-disable-next-line @typescript-eslint/dot-notation
-        'supervisionURLs'
+        'supervisionURLs' as keyof ConfigurationData
       ] as string | string[];
     }
     return Configuration.getConfigurationData()?.supervisionUrls;
@@ -445,9 +451,14 @@ export class Configuration {
   ) {
     if (
       sectionName &&
-      !isUndefined(Configuration.getConfigurationData()![sectionName]) &&
+      !isUndefined(Configuration.getConfigurationData()![sectionName as keyof ConfigurationData]) &&
       !isUndefined(
-        (Configuration.getConfigurationData()![sectionName] as Record<string, unknown>)[key],
+        (
+          Configuration.getConfigurationData()![sectionName as keyof ConfigurationData] as Record<
+            string,
+            unknown
+          >
+        )[key],
       )
     ) {
       console.error(
@@ -457,7 +468,9 @@ export class Configuration {
           }`,
         )}`,
       );
-    } else if (!isUndefined(Configuration.getConfigurationData()![key])) {
+    } else if (
+      !isUndefined(Configuration.getConfigurationData()![key as keyof ConfigurationData])
+    ) {
       console.error(
         `${chalk.green(Configuration.logPrefix())} ${chalk.red(
           `Deprecated configuration key '${key}' usage${
@@ -468,7 +481,7 @@ export class Configuration {
     }
   }
 
-  private static getConfigurationData(): ConfigurationData | null {
+  private static getConfigurationData(): ConfigurationData | undefined {
     if (!Configuration.configurationData) {
       try {
         Configuration.configurationData = JSON.parse(
@@ -493,8 +506,7 @@ export class Configuration {
     try {
       return watch(Configuration.configurationFile, (event, filename): void => {
         if (filename!.trim()!.length > 0 && event === 'change') {
-          // Nullify to force configuration file reading
-          Configuration.configurationData = null;
+          delete Configuration.configurationData;
           Configuration.configurationSectionCache.clear();
           if (!isUndefined(Configuration.configurationChangeCallback)) {
             Configuration.configurationChangeCallback().catch((error) => {