f52a4df7ef3ee5f45f2eeb10c40e1f2b900c9e9b
1 import { type FSWatcher
, readFileSync
, watch
, type WatchListener
} from
'node:fs'
3 import type { FileType
, JsonType
} from
'../types/index.js'
5 import { handleFileException
} from
'./ErrorUtils.js'
6 import { logger
} from
'./Logger.js'
7 import { isNotEmptyString
} from
'./Utils.js'
9 export const watchJsonFile
= <T
extends JsonType
>(
13 refreshedVariable
?: T
,
14 listener
: WatchListener
<string> = (event
, filename
) => {
15 if (isNotEmptyString(filename
) && event
=== 'change') {
17 logger
.debug(`${logPrefix} ${fileType} file ${file} have changed, reload`)
18 refreshedVariable
!= null &&
19 (refreshedVariable
= JSON
.parse(readFileSync(file
, 'utf8')) as T
)
21 handleFileException(file
, fileType
, error
as NodeJS
.ErrnoException
, logPrefix
, {
27 ): FSWatcher
| undefined => {
28 if (isNotEmptyString(file
)) {
30 return watch(file
, listener
)
32 handleFileException(file
, fileType
, error
as NodeJS
.ErrnoException
, logPrefix
, {
37 logger
.info(`${logPrefix} No ${fileType} file to watch given. Not monitoring its changes`)