From 965a9082d5dd0711e29eec1418cc1cec939fefe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.swiss> Date: Mon, 7 Oct 2024 18:07:53 +0200 Subject: [PATCH] Config => Adapt to getEnvVar function --- NodeApp/src/config/Config.ts | 50 +++++++++++++-------------- NodeApp/src/config/ConfigFiles.ts | 27 ++++++++++++--- NodeApp/src/config/LocalConfigFile.ts | 9 ++--- 3 files changed, 53 insertions(+), 33 deletions(-) diff --git a/NodeApp/src/config/Config.ts b/NodeApp/src/config/Config.ts index 615a369..ec06f03 100644 --- a/NodeApp/src/config/Config.ts +++ b/NodeApp/src/config/Config.ts @@ -1,19 +1,18 @@ -import getAppDataPath from 'appdata-path'; +import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig'; +import GitlabManager from '../managers/GitlabManager'; class Config { - public readonly localConfig: { - folder: string; sessionFile: string; stateFile: string; - }; + public gitlabManager!: GitlabManager; - public readonly versionUpdateInformationPeriodHours: number; + public versionUpdateInformationPeriodHours!: number; - public readonly gitlab: { + public gitlab!: { cliReleasePage: string cliPreAlphaReleasePage: string }; - public readonly login: { + public login!: { server: { port: number, route: string }, gitlab: { @@ -23,51 +22,52 @@ class Config { } }; - public readonly folders: { + public folders!: { defaultLocalExercise: string }; - public readonly exercise: { + public exercise!: { neededFiles: Array<string> }; - public interactiveMode: boolean; + public interactiveMode!: boolean; - constructor() { - this.localConfig = { - folder : getAppDataPath('DojoCLI'), - sessionFile: process.env.LOCAL_CONFIG_FILE_SESSION || '', - stateFile : process.env.LOCAL_CONFIG_STATE || '' - }; + constructor() { } + + async init(apiUrl: string) { + await ClientsSharedConfig.init(apiUrl); + const getEnvVar = ClientsSharedConfig.envVarGetter(); + + this.gitlabManager = new GitlabManager(ClientsSharedConfig.gitlab.URL, ClientsSharedConfig.login.gitlab.client.id, ClientsSharedConfig.login.gitlab.url.redirect, ClientsSharedConfig.login.gitlab.url.token); - this.versionUpdateInformationPeriodHours = Number(process.env.VERSION_UPDATE_INFORMATION_PERIOD_HOURS || 24); + this.versionUpdateInformationPeriodHours = Number(getEnvVar('VERSION_UPDATE_INFORMATION_PERIOD_HOURS', '24')); this.gitlab = { - cliReleasePage : process.env.GITLAB_CLI_RELEASE_PAGE || '', - cliPreAlphaReleasePage: process.env.GITLAB_CLI_PREALPHA_RELEASE_PAGE || '' + cliReleasePage : getEnvVar('GITLAB_CLI_RELEASE_PAGE', ''), + cliPreAlphaReleasePage: getEnvVar('GITLAB_CLI_PREALPHA_RELEASE_PAGE', '') }; this.login = { server: { - port : Number(process.env.LOGIN_SERVER_PORT || 30992), - route: process.env.LOGIN_SERVER_ROUTE || '' + port : Number(getEnvVar('LOGIN_SERVER_PORT', '30992')), + route: getEnvVar('LOGIN_SERVER_ROUTE', '') }, gitlab: { url: { - code: process.env.LOGIN_GITLAB_URL_CODE || '' + code: getEnvVar('LOGIN_GITLAB_URL_CODE', '') } } }; this.folders = { - defaultLocalExercise: process.env.LOCAL_EXERCISE_DEFAULT_FOLDER || './' + defaultLocalExercise: getEnvVar('LOCAL_EXERCISE_DEFAULT_FOLDER', './') }; this.exercise = { - neededFiles: JSON.parse(process.env.EXERCISE_NEEDED_FILES || '[]') + neededFiles: JSON.parse(getEnvVar('EXERCISE_NEEDED_FILES', '[]')) }; - this.interactiveMode = process.env.INTERACTIVE_MODE === 'true'; + this.interactiveMode = getEnvVar('INTERACTIVE_MODE', 'false') === 'true'; } } diff --git a/NodeApp/src/config/ConfigFiles.ts b/NodeApp/src/config/ConfigFiles.ts index 9744e26..c92fb27 100644 --- a/NodeApp/src/config/ConfigFiles.ts +++ b/NodeApp/src/config/ConfigFiles.ts @@ -1,9 +1,28 @@ import LocalConfigFile from './LocalConfigFile.js'; -import Config from './Config.js'; +import getAppDataPath from 'appdata-path'; -const sessionConfigFile = new LocalConfigFile(Config.localConfig.sessionFile); -const stateConfigFile = new LocalConfigFile(Config.localConfig.stateFile); +class ConfigFiles { + private localConfig: { + folder: string; sessionFile: string; stateFile: string; + }; + public sessionConfigFile!: LocalConfigFile; + public stateConfigFile!: LocalConfigFile; -export { sessionConfigFile, stateConfigFile }; \ No newline at end of file + constructor() { + this.localConfig = { + folder : getAppDataPath('DojoCLI'), + sessionFile: process.env.LOCAL_CONFIG_FILE_SESSION ?? '', + stateFile : process.env.LOCAL_CONFIG_FILE_STATE ?? '' + }; + } + + init() { + this.sessionConfigFile = new LocalConfigFile(this.localConfig.folder, this.localConfig.sessionFile); + this.stateConfigFile = new LocalConfigFile(this.localConfig.folder, this.localConfig.stateFile); + } +} + + +export default new ConfigFiles(); \ No newline at end of file diff --git a/NodeApp/src/config/LocalConfigFile.ts b/NodeApp/src/config/LocalConfigFile.ts index 29f62a6..996e6e1 100644 --- a/NodeApp/src/config/LocalConfigFile.ts +++ b/NodeApp/src/config/LocalConfigFile.ts @@ -1,26 +1,27 @@ import * as fs from 'fs'; -import Config from './Config.js'; import JSON5 from 'json5'; class LocalConfigFile { + private readonly folder: string; private readonly filename: string; - constructor(filename: string) { + constructor(folder: string, filename: string) { + this.folder = folder; this.filename = filename; this.loadConfig(); } private get configPath(): string { - return `${ Config.localConfig.folder }/${ this.filename }`; + return `${ this.folder }/${ this.filename }`; } private _config: { [key: string]: unknown } = {}; loadConfig() { if ( !fs.existsSync(this.configPath) ) { - fs.mkdirSync(Config.localConfig.folder, { recursive: true }); + fs.mkdirSync(this.folder, { recursive: true }); fs.writeFileSync(this.configPath, JSON5.stringify({})); } -- GitLab