+// eslint-disable-next-line @typescript-eslint/no-extraneous-class
+export class Configuration {
+ public static configurationChangeCallback?: () => Promise<void>
+
+ private static configurationFile: string | undefined
+ private static configurationFileReloading = false
+ private static configurationData?: ConfigurationData
+ private static configurationFileWatcher?: FSWatcher
+ private static configurationSectionCache: Map<ConfigurationSection, ConfigurationSectionType>
+
+ static {
+ const configurationFile = join(dirname(fileURLToPath(import.meta.url)), 'assets', 'config.json')
+ if (existsSync(configurationFile)) {
+ Configuration.configurationFile = configurationFile
+ } else {
+ console.error(
+ `${chalk.green(logPrefix())} ${chalk.red(
+ `Configuration file '${configurationFile}' not found, using default configuration`
+ )}`
+ )
+ Configuration.configurationData = {
+ stationTemplateUrls: [],
+ supervisionUrls: 'ws://localhost:8180/steve/websocket/CentralSystemService',
+ supervisionUrlDistribution: SupervisionUrlDistribution.ROUND_ROBIN,
+ uiServer: defaultUIServerConfiguration,
+ performanceStorage: defaultStorageConfiguration,
+ log: defaultLogConfiguration,
+ worker: defaultWorkerConfiguration
+ }
+ }
+ Configuration.configurationSectionCache = new Map<
+ ConfigurationSection,
+ ConfigurationSectionType
+ >([
+ [ConfigurationSection.log, Configuration.buildLogSection()],
+ [ConfigurationSection.performanceStorage, Configuration.buildPerformanceStorageSection()],
+ [ConfigurationSection.worker, Configuration.buildWorkerSection()],
+ [ConfigurationSection.uiServer, Configuration.buildUIServerSection()]
+ ])