-import { EmptyObject } from '../types/EmptyObject';
-import { FileType } from '../types/FileType';
-import { HandleErrorParams } from '../types/Error';
-import { JsonType } from '../types/JsonType';
-import Utils from './Utils';
+import fs from 'node:fs';
+
import chalk from 'chalk';
-import fs from 'fs';
-import logger from './Logger';
-export default class FileUtils {
+// import { Utils, logger } from './internal';
+import { logger } from './Logger';
+import { Utils } from './Utils';
+import type { EmptyObject, FileType, HandleErrorParams, JsonType } from '../types';
+
+export class FileUtils {
+ private constructor() {
+ // This is intentional
+ }
+
public static watchJsonFile<T extends JsonType>(
- logPrefix: string,
- fileType: FileType,
file: string,
+ fileType: FileType,
+ logPrefix: string,
refreshedVariable?: T,
listener: fs.WatchListener<string> = (event, filename) => {
- if (filename && event === 'change') {
+ if (Utils.isNotEmptyString(filename) && event === 'change') {
try {
- logger.debug(logPrefix + ' ' + fileType + ' file ' + file + ' have changed, reload');
+ logger.debug(`${logPrefix} ${fileType} file ${file} have changed, reload`);
refreshedVariable && (refreshedVariable = JSON.parse(fs.readFileSync(file, 'utf8')) as T);
} catch (error) {
- FileUtils.handleFileException(logPrefix, fileType, file, error as NodeJS.ErrnoException, {
+ FileUtils.handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, {
throwError: false,
});
}
}
}
- ): fs.FSWatcher {
- if (file) {
+ ): fs.FSWatcher | undefined {
+ if (Utils.isNotEmptyString(file)) {
try {
return fs.watch(file, listener);
} catch (error) {
- FileUtils.handleFileException(logPrefix, fileType, file, error as NodeJS.ErrnoException, {
+ FileUtils.handleFileException(file, fileType, error as NodeJS.ErrnoException, logPrefix, {
throwError: false,
});
}
}
public static handleFileException(
- logPrefix: string,
- fileType: FileType,
file: string,
+ fileType: FileType,
error: NodeJS.ErrnoException,
+ logPrefix: string,
params: HandleErrorParams<EmptyObject> = { throwError: true, consoleOut: false }
): void {
- const prefix = !Utils.isEmptyString(logPrefix) ? logPrefix + ' ' : '';
- if (error.code === 'ENOENT') {
- if (params?.consoleOut) {
- console.warn(
- chalk.green(prefix) + chalk.yellow(fileType + ' file ' + file + ' not found: '),
- error
- );
- } else {
- 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 ' + file + ' already exists: '),
- error
- );
- } else {
- 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 ' + file + ' access denied: '),
- error
- );
- } else {
- logger.warn(prefix + fileType + ' file ' + file + ' access denied: %j', error);
- }
+ const prefix = Utils.isNotEmptyString(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 {
- if (params?.consoleOut) {
- console.warn(
- chalk.green(prefix) + chalk.yellow(fileType + ' file ' + file + ' error: '),
- error
- );
- } else {
- logger.warn(prefix + fileType + ' file ' + file + ' error: %j', error);
- }
- if (params?.throwError) {
- throw error;
- }
+ logger.warn(`${prefix}${logMsg}`, error);
+ }
+ if (params?.throwError) {
+ throw error;
}
}
}