refactor: split WorkerConstants class
[e-mobility-charging-stations-simulator.git] / src / utils / Configuration.ts
index f03e0472570ec0af65a1a0dd070d57a8131fd911..ad8d328df83f1da34d864c59d5431b6b79539dbc 100644 (file)
@@ -20,7 +20,13 @@ import {
   type UIServerConfiguration,
   type WorkerConfiguration,
 } from '../types';
-import { WorkerConstants, WorkerProcessType } from '../worker';
+import {
+  DEFAULT_ELEMENT_START_DELAY,
+  DEFAULT_POOL_MAX_SIZE,
+  DEFAULT_POOL_MIN_SIZE,
+  DEFAULT_WORKER_START_DELAY,
+  WorkerProcessType,
+} from '../worker';
 
 type ConfigurationSectionType =
   | LogConfiguration
@@ -47,7 +53,7 @@ export class Configuration {
     [ConfigurationSection.uiServer, Configuration.buildUIServerSection()],
   ]);
 
-  private static configurationChangeCallback: () => Promise<void>;
+  private static configurationChangeCallback?: () => Promise<void>;
 
   private constructor() {
     // This is intentional
@@ -60,33 +66,8 @@ export class Configuration {
   public static getConfigurationSection<T extends ConfigurationSectionType>(
     sectionName: ConfigurationSection,
   ): T {
-    if (!Configuration.configurationSectionCache.has(sectionName)) {
-      switch (sectionName) {
-        case ConfigurationSection.log:
-          Configuration.configurationSectionCache.set(sectionName, Configuration.buildLogSection());
-          break;
-        case ConfigurationSection.performanceStorage:
-          Configuration.configurationSectionCache.set(
-            sectionName,
-            Configuration.buildPerformanceStorageSection(),
-          );
-          break;
-        case ConfigurationSection.worker:
-          Configuration.configurationSectionCache.set(
-            sectionName,
-            Configuration.buildWorkerSection(),
-          );
-          break;
-        case ConfigurationSection.uiServer:
-          Configuration.configurationSectionCache.set(
-            sectionName,
-            Configuration.buildUIServerSection(),
-          );
-          break;
-        default:
-          // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
-          throw new Error(`Unknown configuration section '${sectionName}'`);
-      }
+    if (!Configuration.isConfigurationSectionCached(sectionName)) {
+      Configuration.cacheConfigurationSection(sectionName);
     }
     return Configuration.configurationSectionCache.get(sectionName) as T;
   }
@@ -188,6 +169,39 @@ export class Configuration {
     return Configuration.buildWorkerSection().processType === WorkerProcessType.dynamicPool;
   }
 
+  private static isConfigurationSectionCached(sectionName: ConfigurationSection): boolean {
+    return Configuration.configurationSectionCache.has(sectionName);
+  }
+
+  private static cacheConfigurationSection(sectionName: ConfigurationSection): void {
+    switch (sectionName) {
+      case ConfigurationSection.log:
+        Configuration.configurationSectionCache.set(sectionName, Configuration.buildLogSection());
+        break;
+      case ConfigurationSection.performanceStorage:
+        Configuration.configurationSectionCache.set(
+          sectionName,
+          Configuration.buildPerformanceStorageSection(),
+        );
+        break;
+      case ConfigurationSection.worker:
+        Configuration.configurationSectionCache.set(
+          sectionName,
+          Configuration.buildWorkerSection(),
+        );
+        break;
+      case ConfigurationSection.uiServer:
+        Configuration.configurationSectionCache.set(
+          sectionName,
+          Configuration.buildUIServerSection(),
+        );
+        break;
+      default:
+        // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
+        throw new Error(`Unknown configuration section '${sectionName}'`);
+    }
+  }
+
   private static buildUIServerSection(): UIServerConfiguration {
     if (hasOwnProp(Configuration.getConfigurationData(), 'uiWebSocketServer')) {
       console.error(
@@ -393,11 +407,11 @@ export class Configuration {
     );
     const defaultWorkerConfiguration: WorkerConfiguration = {
       processType: WorkerProcessType.workerSet,
-      startDelay: WorkerConstants.DEFAULT_WORKER_START_DELAY,
+      startDelay: DEFAULT_WORKER_START_DELAY,
       elementsPerWorker: 'auto',
-      elementStartDelay: WorkerConstants.DEFAULT_ELEMENT_START_DELAY,
-      poolMinSize: WorkerConstants.DEFAULT_POOL_MIN_SIZE,
-      poolMaxSize: WorkerConstants.DEFAULT_POOL_MAX_SIZE,
+      elementStartDelay: DEFAULT_ELEMENT_START_DELAY,
+      poolMinSize: DEFAULT_POOL_MIN_SIZE,
+      poolMaxSize: DEFAULT_POOL_MAX_SIZE,
     };
     hasOwnProp(Configuration.getConfigurationData(), 'workerPoolStrategy') &&
       delete Configuration.getConfigurationData()?.workerPoolStrategy;
@@ -509,7 +523,7 @@ export class Configuration {
           delete Configuration.configurationData;
           Configuration.configurationSectionCache.clear();
           if (!isUndefined(Configuration.configurationChangeCallback)) {
-            Configuration.configurationChangeCallback().catch((error) => {
+            Configuration.configurationChangeCallback!().catch((error) => {
               throw typeof error === 'string' ? new Error(error) : error;
             });
           }