+ public static getConfigurationSection<T extends ConfigurationSectionType>(
+ sectionName: ConfigurationSection,
+ ): T {
+ if (!Configuration.isConfigurationSectionCached(sectionName)) {
+ Configuration.cacheConfigurationSection(sectionName);
+ }
+ return Configuration.configurationSectionCache.get(sectionName) as T;
+ }
+
+ public static getStationTemplateUrls(): StationTemplateUrl[] | undefined {
+ const checkDeprecatedConfigurationKeysOnce = once(
+ Configuration.checkDeprecatedConfigurationKeys.bind(Configuration),
+ Configuration,
+ );
+ checkDeprecatedConfigurationKeysOnce();
+ return Configuration.getConfigurationData()?.stationTemplateUrls;
+ }
+
+ public static getSupervisionUrls(): string | string[] | undefined {
+ if (
+ !isUndefined(
+ Configuration.getConfigurationData()?.['supervisionURLs' as keyof ConfigurationData],
+ )
+ ) {
+ Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
+ 'supervisionURLs' as keyof ConfigurationData
+ ] as string | string[];
+ }
+ return Configuration.getConfigurationData()?.supervisionUrls;
+ }
+
+ public static getSupervisionUrlDistribution(): SupervisionUrlDistribution | undefined {
+ return hasOwnProp(Configuration.getConfigurationData(), 'supervisionUrlDistribution')
+ ? Configuration.getConfigurationData()?.supervisionUrlDistribution
+ : SupervisionUrlDistribution.ROUND_ROBIN;
+ }
+
+ public static workerPoolInUse(): boolean {
+ return [WorkerProcessType.dynamicPool, WorkerProcessType.staticPool].includes(
+ Configuration.getConfigurationSection<WorkerConfiguration>(ConfigurationSection.worker)
+ .processType!,
+ );
+ }
+
+ public static workerDynamicPoolInUse(): boolean {
+ return (
+ Configuration.getConfigurationSection<WorkerConfiguration>(ConfigurationSection.worker)
+ .processType === WorkerProcessType.dynamicPool
+ );
+ }
+
+ private static logPrefix = (): string => {
+ return logPrefix(' Simulator configuration |');
+ };
+
+ private static isConfigurationSectionCached(sectionName: ConfigurationSection): boolean {
+ return Configuration.configurationSectionCache.has(sectionName);
+ }
+
+ private static cacheConfigurationSection(sectionName: ConfigurationSection): void {
+ switch (sectionName) {
+ case ConfigurationSection.log:
+ Configuration.configurationSectionCache.set(sectionName, Configuration.buildLogSection());
+ break;
+ case ConfigurationSection.performanceStorage:
+ Configuration.configurationSectionCache.set(
+ sectionName,
+ Configuration.buildPerformanceStorageSection(),
+ );
+ break;
+ case ConfigurationSection.worker:
+ Configuration.configurationSectionCache.set(
+ sectionName,
+ Configuration.buildWorkerSection(),
+ );
+ break;
+ case ConfigurationSection.uiServer:
+ Configuration.configurationSectionCache.set(
+ sectionName,
+ Configuration.buildUIServerSection(),
+ );
+ break;
+ default:
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
+ throw new Error(`Unknown configuration section '${sectionName}'`);