0efccbc3c8ceeadf52ceaae6f2b0c83b1264e1c5
3 import chalk from
'chalk';
5 import logger from
'./Logger';
6 import Utils from
'./Utils';
7 import type { EmptyObject
} from
'../types/EmptyObject';
8 import type { HandleErrorParams
} from
'../types/Error';
9 import type { FileType
} from
'../types/FileType';
10 import type { JsonType
} from
'../types/JsonType';
12 export default class FileUtils
{
13 private constructor() {
14 // This is intentional
17 public static watchJsonFile
<T
extends JsonType
>(
21 refreshedVariable
?: T
,
22 listener
: fs
.WatchListener
<string> = (event
, filename
) => {
23 if (filename
&& event
=== 'change') {
25 logger
.debug(logPrefix
+ ' ' + fileType
+ ' file ' + file
+ ' have changed, reload');
26 refreshedVariable
&& (refreshedVariable
= JSON
.parse(fs
.readFileSync(file
, 'utf8')) as T
);
28 FileUtils
.handleFileException(logPrefix
, fileType
, file
, error
as NodeJS
.ErrnoException
, {
37 return fs
.watch(file
, listener
);
39 FileUtils
.handleFileException(logPrefix
, fileType
, file
, error
as NodeJS
.ErrnoException
, {
44 logger
.info(`${logPrefix} No ${fileType} file to watch given. Not monitoring its changes`);
48 public static handleFileException(
52 error
: NodeJS
.ErrnoException
,
53 params
: HandleErrorParams
<EmptyObject
> = { throwError
: true, consoleOut
: false }
55 const prefix
= !Utils
.isEmptyString(logPrefix
) ? logPrefix
+ ' ' : '';
56 if (error
.code
=== 'ENOENT') {
57 if (params
?.consoleOut
) {
59 chalk
.green(prefix
) + chalk
.yellow(fileType
+ ' file ' + file
+ ' not found: '),
63 logger
.warn(prefix
+ fileType
+ ' file ' + file
+ ' not found:', error
);
65 } else if (error
.code
=== 'EEXIST') {
66 if (params
?.consoleOut
) {
68 chalk
.green(prefix
) + chalk
.yellow(fileType
+ ' file ' + file
+ ' already exists: '),
72 logger
.warn(prefix
+ fileType
+ ' file ' + file
+ ' already exists:', error
);
74 } else if (error
.code
=== 'EACCES') {
75 if (params
?.consoleOut
) {
77 chalk
.green(prefix
) + chalk
.yellow(fileType
+ ' file ' + file
+ ' access denied: '),
81 logger
.warn(prefix
+ fileType
+ ' file ' + file
+ ' access denied:', error
);
84 if (params
?.consoleOut
) {
86 chalk
.green(prefix
) + chalk
.yellow(fileType
+ ' file ' + file
+ ' error: '),
90 logger
.warn(prefix
+ fileType
+ ' file ' + file
+ ' error:', error
);
92 if (params
?.throwError
) {