X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FFileUtils.ts;h=51871884ccc38e7c7b6d09c7d6cd37c1a6ad3192;hb=7c2c6fd37881dd238855cae4a0d0a21d0d44111a;hp=014ebbdece21cf9a3c9b512573faf95c741693f1;hpb=717c1e56bde34461c2a53b73cc1ca04aed39392f;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts index 014ebbde..51871884 100644 --- a/src/utils/FileUtils.ts +++ b/src/utils/FileUtils.ts @@ -1,39 +1,37 @@ -import { EmptyObject } from '../types/EmptyObject'; -import { HandleErrorParams } from '../types/Error'; -import chalk from 'chalk'; -import logger from './Logger'; +import fs from 'node:fs'; -export default class FileUtils { - static handleFileException(logPrefix: string, fileType: string, filePath: string, error: NodeJS.ErrnoException, - params: HandleErrorParams = { throwError: true, consoleOut: false }): void { - const prefix = logPrefix.length !== 0 ? logPrefix + ' ' : ''; - if (error.code === 'ENOENT') { - if (params?.consoleOut) { - console.warn(chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' not found: '), error); - } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' not found: %j', error); - } - } else if (error.code === 'EEXIST') { - if (params?.consoleOut) { - console.warn(chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' already exists: '), error); - } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' already exists: %j', error); - } - } else if (error.code === 'EACCES') { - if (params?.consoleOut) { - console.warn(chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' access denied: '), error); - } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' access denied: %j', error); - } - } else { - if (params?.consoleOut) { - console.warn(chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' error: '), error); - } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' error: %j', error); - } - if (params?.throwError) { - throw error; +import { handleFileException } from './ErrorUtils'; +import { logger } from './Logger'; +import { Utils } from './Utils'; +import type { FileType, JsonType } from '../types'; + +export const 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) { + handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, { + throwError: false, + }); } } } -} +): fs.FSWatcher | undefined => { + if (Utils.isNotEmptyString(file)) { + try { + return fs.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`); + } +};