X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FFileUtils.ts;h=5c15734bfe97cbf7857b3199f53ece7114ff1368;hb=be9b0d5057a74c22b436cca1364ab1d8417144f7;hp=38df26a9eb23419de11c4040a39170f7104978a2;hpb=e81916227dc1a059ae4080cdb5fb4c0ef383788d;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts index 38df26a9..5c15734b 100644 --- a/src/utils/FileUtils.ts +++ b/src/utils/FileUtils.ts @@ -1,14 +1,49 @@ +import { JsonType, JsonValue } from '../types/JsonType'; + import { EmptyObject } from '../types/EmptyObject'; +import { FileType } from '../types/FileType'; import { HandleErrorParams } from '../types/Error'; import Utils from './Utils'; import chalk from 'chalk'; +import fs from 'fs'; import logger from './Logger'; export default class FileUtils { + static watchJsonFile( + logPrefix: string, + fileType: FileType, + file: string, + attribute?: T, + listener: fs.WatchListener = (event, filename) => { + if (filename && event === 'change') { + try { + logger.debug(logPrefix + ' ' + fileType + ' file ' + file + ' have changed, reload'); + attribute && (attribute = JSON.parse(fs.readFileSync(file, 'utf8')) as T); + } catch (error) { + FileUtils.handleFileException(logPrefix, fileType, file, error as NodeJS.ErrnoException, { + throwError: false, + }); + } + } + } + ) { + if (file) { + try { + fs.watch(file, listener); + } catch (error) { + FileUtils.handleFileException(logPrefix, fileType, file, error as NodeJS.ErrnoException, { + throwError: false, + }); + } + } else { + logger.info(`${logPrefix} No ${fileType} file to watch given. Not monitoring its changes`); + } + } + static handleFileException( logPrefix: string, - fileType: string, - filePath: string, + fileType: FileType, + file: string, error: NodeJS.ErrnoException, params: HandleErrorParams = { throwError: true, consoleOut: false } ): void { @@ -16,38 +51,38 @@ export default class FileUtils { if (error.code === 'ENOENT') { if (params?.consoleOut) { console.warn( - chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' not found: '), + chalk.green(prefix) + chalk.yellow(fileType + ' file ' + file + ' not found: '), error ); } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' not found: %j', error); + logger.warn(prefix + fileType + ' file ' + file + ' not found: %j', error); } } else if (error.code === 'EEXIST') { if (params?.consoleOut) { console.warn( - chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' already exists: '), + chalk.green(prefix) + chalk.yellow(fileType + ' file ' + file + ' already exists: '), error ); } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' already exists: %j', error); + logger.warn(prefix + fileType + ' file ' + file + ' already exists: %j', error); } } else if (error.code === 'EACCES') { if (params?.consoleOut) { console.warn( - chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' access denied: '), + chalk.green(prefix) + chalk.yellow(fileType + ' file ' + file + ' access denied: '), error ); } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' access denied: %j', error); + logger.warn(prefix + fileType + ' file ' + file + ' access denied: %j', error); } } else { if (params?.consoleOut) { console.warn( - chalk.green(prefix) + chalk.yellow(fileType + ' file ' + filePath + ' error: '), + chalk.green(prefix) + chalk.yellow(fileType + ' file ' + file + ' error: '), error ); } else { - logger.warn(prefix + fileType + ' file ' + filePath + ' error: %j', error); + logger.warn(prefix + fileType + ' file ' + file + ' error: %j', error); } if (params?.throwError) { throw error;