UNPKG

flexmonster-mongo-connector

Version:

Custom data source API implementation for MongoDB

60 lines (49 loc) 2.53 kB
import { ConfigInterface } from "./ConfigInterface"; export class ConfigManager { private static _instance: ConfigManager = undefined; private _currentConfig: ConfigInterface = undefined; private _defaultConfig: ConfigInterface = { cacheMemoryLimit: 0, //no limit; in MB cacheEnabled: true, cacheTimeToLive: 0, //data in cache does not get outdated (in minutes) (cacheTimeToLive) logsEnabled: false }; constructor(config?: ConfigInterface) { if (ConfigManager._instance !== undefined) throw new Error("Initialization failed: "+ "use Singleton.getInstance() instead of new."); this._currentConfig = this.validateConfig(config); } public static getInstance(config?: ConfigInterface): ConfigManager { if (this._instance === undefined) { this._instance = new ConfigManager(config); } return this._instance; } private validateConfig(config: ConfigInterface): ConfigInterface { if (config === undefined) return this._defaultConfig; let currentConfig: ConfigInterface = {}; if (config.cacheMemoryLimit !== undefined || config.cacheMemoryLimit !== null) { currentConfig.cacheMemoryLimit = !isNaN(config.cacheMemoryLimit) && config.cacheMemoryLimit > 0 ? config.cacheMemoryLimit : this._defaultConfig.cacheMemoryLimit; } if (config.cacheTimeToLive !== undefined || config.cacheTimeToLive !== null) { currentConfig.cacheTimeToLive = !isNaN(config.cacheTimeToLive) && config.cacheTimeToLive > 0 ? config.cacheTimeToLive : this._defaultConfig.cacheTimeToLive; } currentConfig.cacheEnabled = (config.cacheEnabled !== undefined || config.cacheEnabled !== null) ? (typeof config.cacheEnabled === "boolean" ? config.cacheEnabled : this._defaultConfig.cacheEnabled) : this._defaultConfig.cacheEnabled currentConfig.logsEnabled = config.logsEnabled !== undefined || config.logsEnabled !== null ? (typeof config.logsEnabled === "boolean" ? config.logsEnabled : this._defaultConfig.logsEnabled) : this._defaultConfig.logsEnabled; return currentConfig; } public get currentConfig(): ConfigInterface { return this._currentConfig; } public toString(): string { return JSON.stringify(this.currentConfig); } }