Merge dependabot/npm_and_yarn/types/tar-6.1.12 into combined-prs-branch
[e-mobility-charging-stations-simulator.git] / src / utils / FileUtils.ts
index e08fb128be960b721d99645be66ea11f617419af..543a2b23c2eda50f157680f15377ee335ec697da 100644 (file)
@@ -1,76 +1,38 @@
-import fs from 'node:fs';
+import { type FSWatcher, readFileSync, watch, type WatchListener } from 'node:fs'
 
-import chalk from 'chalk';
+import type { FileType, JsonType } from '../types/index.js'
+import { handleFileException } from './ErrorUtils.js'
+import { logger } from './Logger.js'
+import { isNotEmptyString } from './Utils.js'
 
-import { logger } from './Logger';
-import { Utils } from './Utils';
-import type { EmptyObject, FileType, HandleErrorParams, 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) {
-          FileUtils.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: WatchListener<string> = (event, filename) => {
+    if (isNotEmptyString(filename) && event === 'change') {
       try {
-        return fs.watch(file, listener);
+        logger.debug(`${logPrefix} ${fileType} file ${file} have changed, reload`)
+        refreshedVariable != null &&
+          (refreshedVariable = JSON.parse(readFileSync(file, 'utf8')) as T)
       } catch (error) {
-        FileUtils.handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, {
-          throwError: false,
-        });
+        handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, {
+          throwError: false
+        })
       }
-    } else {
-      logger.info(`${logPrefix} No ${fileType} file to watch given. Not monitoring its changes`);
     }
   }
-
-  public static handleFileException(
-    file: string,
-    fileType: FileType,
-    error: NodeJS.ErrnoException,
-    logPrefix: string,
-    params: HandleErrorParams<EmptyObject> = { throwError: true, consoleOut: false }
-  ): void {
-    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;
-      default:
-        logMsg = `${fileType} file ${file} error:`;
-    }
-    if (params?.consoleOut) {
-      console.warn(`${chalk.green(prefix)}${chalk.yellow(`${logMsg} `)}`, error);
-    } else {
-      logger.warn(`${prefix}${logMsg}`, error);
-    }
-    if (params?.throwError) {
-      throw error;
+): FSWatcher | undefined => {
+  if (isNotEmptyString(file)) {
+    try {
+      return 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`)
   }
 }