-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 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 = <T extends JsonType>(
+ file: string,
+ fileType: FileType,
+ logPrefix: string,
+ refreshedVariable?: T,
+ listener: WatchListener<string> = (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
+ })