Select Git revision
Config.ts 3.11 KiB
import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
import GitlabManager from '../managers/GitlabManager';
import ConfigFiles from './ConfigFiles';
import inquirer from 'inquirer';
class Config {
readonly INTERACTIVE_MODE_CONFIG_KEY = 'interactiveMode';
public gitlabManager!: GitlabManager;
public versionUpdateInformationPeriodHours!: number;
public gitlab!: {
cliReleasePage: string
cliPreAlphaReleasePage: string
};
public login!: {
server: {
port: number, route: string
}, gitlab: {
url: {
code: string
}
}
};
public folders!: {
defaultLocalExercise: string
};
public exercise!: {
neededFiles: Array<string>
};
public interactiveMode!: boolean;
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(getEnvVar('VERSION_UPDATE_INFORMATION_PERIOD_HOURS', '24'));
this.gitlab = {
cliReleasePage : getEnvVar('GITLAB_CLI_RELEASE_PAGE', ''),
cliPreAlphaReleasePage: getEnvVar('GITLAB_CLI_PREALPHA_RELEASE_PAGE', '')
};
this.login = {
server: {
port : Number(getEnvVar('LOGIN_SERVER_PORT', '30992')),
route: getEnvVar('LOGIN_SERVER_ROUTE', '')
},
gitlab: {
url: {
code: getEnvVar('LOGIN_GITLAB_URL_CODE', '')
}
}
};
this.folders = {
defaultLocalExercise: getEnvVar('LOCAL_EXERCISE_DEFAULT_FOLDER', './')
};
this.exercise = {
neededFiles: JSON.parse(getEnvVar('EXERCISE_NEEDED_FILES', '[]'))
};
const interactiveMode: boolean | null = ConfigFiles.stateConfigFile.getParam(this.INTERACTIVE_MODE_CONFIG_KEY) as boolean | null;
this.interactiveMode = interactiveMode == null ? await this.askInteractiveMode() : interactiveMode;
}
setInteractiveMode(state: boolean) {
ConfigFiles.stateConfigFile.setParam(this.INTERACTIVE_MODE_CONFIG_KEY, state);
}
async askInteractiveMode(): Promise<boolean> {
const state: boolean = (await inquirer.prompt({
name : 'state',
message: 'An interactive mode is available. Do you want to enable it by default ?',
type : 'confirm',
default: true
})).state;
this.setInteractiveMode(state);
return state;
}
}
export default new Config();