X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FFileUtils.ts;h=543a2b23c2eda50f157680f15377ee335ec697da;hb=ce0abd8248cbc1c976bb298e45daeb0749387619;hp=8ef8168039b449e3bbd3d36c727852b07b413af8;hpb=7164966d863b4539243b473c5e2e9d22fb9b5fd1;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts index 8ef81680..543a2b23 100644 --- a/src/utils/FileUtils.ts +++ b/src/utils/FileUtils.ts @@ -1,80 +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 } from '../types/EmptyObject'; -import type { HandleErrorParams } from '../types/Error'; -import type { FileType } from '../types/FileType'; -import type { JsonType } from '../types/JsonType'; - -export default 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.isEmptyString(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.isEmptyString(file)) { +export const watchJsonFile = ( + file: string, + fileType: FileType, + logPrefix: string, + refreshedVariable?: T, + listener: WatchListener = (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 = { throwError: true, consoleOut: false } - ): void { - const prefix = !Utils.isEmptyString(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) { - logMsg = `${logMsg} `; - 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`) } }