X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Futils%2FFileUtils.ts;h=4e556a4bc1c3d642c8c9edecbb92049d5e880044;hb=42486f2357b011f9244c6b29f4e05185138ce8d1;hp=c0891e646a1da0242b31da66375a0251f733cb0f;hpb=6ce0bca57a96ef920df4e0786d8f28b0b89a36ef;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts index c0891e64..4e556a4b 100644 --- a/src/utils/FileUtils.ts +++ b/src/utils/FileUtils.ts @@ -1,21 +1,49 @@ -import logger from './Logger'; +import fs from 'node:fs'; -export default class FileUtils { - static handleFileException(logPrefix: string, fileType: string, filePath: string, error: NodeJS.ErrnoException, consoleOut = false): void { - const prefix = logPrefix.length !== 0 ? logPrefix + ' ' : ''; - if (error.code === 'ENOENT') { - if (consoleOut) { - console.warn(prefix + fileType + ' file ' + filePath + ' not found: ', error); - } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' not found: %j', error); +import { ErrorUtils } from './ErrorUtils'; +import { logger } from './Logger'; +import { Utils } from './Utils'; +import type { FileType, JsonType } from '../types'; + +export class FileUtils { + private constructor() { + // This is intentional + } + + public static watchJsonFile( + file: string, + fileType: FileType, + logPrefix: string, + refreshedVariable?: T, + listener: fs.WatchListener = (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) { + ErrorUtils.handleFileException( + file, + fileType, + error as NodeJS.ErrnoException, + logPrefix, + { + throwError: false, + } + ); + } } - } else { - if (consoleOut) { - console.error(prefix + fileType + ' file ' + filePath + ' opening error: ', error); - } else { - logger.error(prefix + fileType + ' file ' + filePath + ' opening error: %j', error); + } + ): fs.FSWatcher | undefined { + if (Utils.isNotEmptyString(file)) { + try { + return fs.watch(file, listener); + } catch (error) { + ErrorUtils.handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, { + throwError: false, + }); } - throw error; + } else { + logger.info(`${logPrefix} No ${fileType} file to watch given. Not monitoring its changes`); } } }