feat(ui): display supervision url in charging stations list
[e-mobility-charging-stations-simulator.git] / src / utils / Configuration.ts
index 021bce021bfd661becfc99dabc85c0d9b3dbd815..19afc5861111c7bd41e6ff2ba65e554e51deb35c 100644 (file)
@@ -15,7 +15,7 @@ import {
   logPrefix
 } from './ConfigurationUtils.js'
 import { Constants } from './Constants.js'
-import { hasOwnProp, isCFEnvironment, isUndefined, once } from './Utils.js'
+import { hasOwnProp, isCFEnvironment, once } from './Utils.js'
 import {
   ApplicationProtocol,
   type ConfigurationData,
@@ -45,7 +45,7 @@ type ConfigurationSectionType =
 
 // eslint-disable-next-line @typescript-eslint/no-extraneous-class
 export class Configuration {
-  public static configurationChangeCallback: () => Promise<void>
+  public static configurationChangeCallback?: () => Promise<void>
 
   private static readonly configurationFile = join(
     dirname(fileURLToPath(import.meta.url)),
@@ -90,9 +90,8 @@ export class Configuration {
 
   public static getSupervisionUrls (): string | string[] | undefined {
     if (
-      !isUndefined(
-        Configuration.getConfigurationData()?.['supervisionURLs' as keyof ConfigurationData]
-      )
+      Configuration.getConfigurationData()?.['supervisionURLs' as keyof ConfigurationData] !==
+      undefined
     ) {
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
@@ -178,17 +177,37 @@ export class Configuration {
   }
 
   private static buildPerformanceStorageSection (): StorageConfiguration {
-    let storageConfiguration: StorageConfiguration = {
-      enabled: false,
-      type: StorageType.JSON_FILE,
-      uri: getDefaultPerformanceStorageUri(StorageType.JSON_FILE)
+    let storageConfiguration: StorageConfiguration
+    switch (Configuration.getConfigurationData()?.performanceStorage?.type) {
+      case StorageType.SQLITE:
+        storageConfiguration = {
+          enabled: false,
+          type: StorageType.SQLITE,
+          uri: getDefaultPerformanceStorageUri(StorageType.SQLITE)
+        }
+        break
+      case StorageType.JSON_FILE:
+        storageConfiguration = {
+          enabled: false,
+          type: StorageType.JSON_FILE,
+          uri: getDefaultPerformanceStorageUri(StorageType.JSON_FILE)
+        }
+        break
+      case StorageType.NONE:
+      default:
+        storageConfiguration = {
+          enabled: true,
+          type: StorageType.NONE
+        }
+        break
     }
     if (hasOwnProp(Configuration.getConfigurationData(), ConfigurationSection.performanceStorage)) {
       storageConfiguration = {
         ...storageConfiguration,
         ...Configuration.getConfigurationData()?.performanceStorage,
-        ...(Configuration.getConfigurationData()?.performanceStorage?.type ===
-          StorageType.JSON_FILE &&
+        ...((Configuration.getConfigurationData()?.performanceStorage?.type ===
+          StorageType.JSON_FILE ||
+          Configuration.getConfigurationData()?.performanceStorage?.type === StorageType.SQLITE) &&
           Configuration.getConfigurationData()?.performanceStorage?.uri != null && {
           uri: buildPerformanceUriFilePath(
             // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -318,9 +337,8 @@ export class Configuration {
       undefined,
       "Use 'stationTemplateUrls' instead"
     )
-    !isUndefined(
-      Configuration.getConfigurationData()?.['stationTemplateURLs' as keyof ConfigurationData]
-    ) &&
+    Configuration.getConfigurationData()?.['stationTemplateURLs' as keyof ConfigurationData] !==
+      undefined &&
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       (Configuration.getConfigurationData()!.stationTemplateUrls =
         // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -329,7 +347,8 @@ export class Configuration {
         ] as StationTemplateUrl[])
     Configuration.getConfigurationData()?.stationTemplateUrls.forEach(
       (stationTemplateUrl: StationTemplateUrl) => {
-        if (!isUndefined(stationTemplateUrl?.['numberOfStation' as keyof StationTemplateUrl])) {
+        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
+        if (stationTemplateUrl['numberOfStation' as keyof StationTemplateUrl] !== undefined) {
           console.error(
             `${chalk.green(logPrefix())} ${chalk.red(
               `Deprecated configuration key 'numberOfStation' usage for template file '${stationTemplateUrl.file}' in 'stationTemplateUrls'. Use 'numberOfStations' instead`
@@ -490,17 +509,14 @@ export class Configuration {
   ): void {
     if (
       sectionName != null &&
-      !isUndefined(
-        Configuration.getConfigurationData()?.[sectionName as keyof ConfigurationData]
-      ) &&
-      !isUndefined(
-        (
-          Configuration.getConfigurationData()?.[sectionName as keyof ConfigurationData] as Record<
-          string,
-          unknown
-          >
-        )?.[key]
-      )
+      Configuration.getConfigurationData()?.[sectionName as keyof ConfigurationData] !==
+        undefined &&
+      (
+        Configuration.getConfigurationData()?.[sectionName as keyof ConfigurationData] as Record<
+        string,
+        unknown
+        >
+      )[key] !== undefined
     ) {
       console.error(
         `${chalk.green(logPrefix())} ${chalk.red(
@@ -510,7 +526,7 @@ export class Configuration {
         )}`
       )
     } else if (
-      !isUndefined(Configuration.getConfigurationData()?.[key as keyof ConfigurationData])
+      Configuration.getConfigurationData()?.[key as keyof ConfigurationData] !== undefined
     ) {
       console.error(
         `${chalk.green(logPrefix())} ${chalk.red(
@@ -549,7 +565,7 @@ export class Configuration {
         if (
           !Configuration.configurationFileReloading &&
           // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-          filename!.trim()!.length > 0 &&
+          filename!.trim().length > 0 &&
           event === 'change'
         ) {
           Configuration.configurationFileReloading = true
@@ -561,9 +577,9 @@ export class Configuration {
           )
           delete Configuration.configurationData
           Configuration.configurationSectionCache.clear()
-          if (!isUndefined(Configuration.configurationChangeCallback)) {
+          if (Configuration.configurationChangeCallback !== undefined) {
             Configuration.configurationChangeCallback()
-              .catch((error) => {
+              .catch(error => {
                 throw typeof error === 'string' ? new Error(error) : error
               })
               .finally(() => {