X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FFileUtils.ts;h=543a2b23c2eda50f157680f15377ee335ec697da;hb=4c3f6c20f9416e148a3d26b6a06acc13274ab469;hp=8edbb4c5ec0b2f79ed3d0c4f7adf7005f742a08f;hpb=23132a44933014c707d4fc3d0c681dc99cee7828;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts index 8edbb4c5..543a2b23 100644 --- a/src/utils/FileUtils.ts +++ b/src/utils/FileUtils.ts @@ -1,21 +1,38 @@ -import logger from './Logger'; +import { type FSWatcher, readFileSync, watch, type WatchListener } 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.error(prefix + fileType + ' file ' + filePath + ' not found: ', error); - } else { - logger.error(prefix + fileType + ' file ' + filePath + ' not found: %j', error); - } - } else { - if (consoleOut) { - console.error(prefix + fileType + ' file ' + filePath + ' opening error: ', error); - } else { - logger.error(prefix + fileType + ' file ' + filePath + ' opening error: %j', error); +import type { FileType, JsonType } from '../types/index.js' +import { handleFileException } from './ErrorUtils.js' +import { logger } from './Logger.js' +import { isNotEmptyString } from './Utils.js' + +export const watchJsonFile = ( + file: string, + fileType: FileType, + logPrefix: string, + refreshedVariable?: T, + listener: WatchListener = (event, filename) => { + if (isNotEmptyString(filename) && event === 'change') { + try { + logger.debug(`${logPrefix} ${fileType} file ${file} have changed, reload`) + refreshedVariable != null && + (refreshedVariable = JSON.parse(readFileSync(file, 'utf8')) as T) + } catch (error) { + handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, { + throwError: false + }) } - 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`) + } }