pinkmine/src/configs/app.ts

45 lines
1.7 KiB
TypeScript

import RedmineIssueEventEmitterConfigLoader from '@app/event-emitter/configs/main-config';
import { readFileSync } from 'fs';
import { join } from 'path';
import { parse } from 'jsonc-parser';
import { AppConfig } from 'src/models/app-config.model';
import RedmineStatusesConfigLoader from './statuses.config';
import RedmineStatusChangesConfigLoader from './status-changes.config';
import RedmineEccmConfig from './eccm.config';
import RedmineCurrentUserRulesConfig from './current-user-rules.config';
import SimpleKanbanBoardConfig from './simple-kanban-board.config';
const redmineIssueEventEmitterConfig = RedmineIssueEventEmitterConfigLoader();
const redmineStatusesConfig = RedmineStatusesConfigLoader();
const redmineStatusChanges = RedmineStatusChangesConfigLoader();
const redmineEccm = RedmineEccmConfig();
const redmineCurrentUserRules = RedmineCurrentUserRulesConfig();
const simpleKanbanBoard = SimpleKanbanBoardConfig();
let appConfig: AppConfig;
export default (): AppConfig => {
if (appConfig) {
return appConfig;
}
const userDefinedConfigPath = process.env['ELTEX_REDMINE_HELPER_CONFIG_PATH'];
const defaultConfigPath = join('configs', 'main-config.jsonc');
const configPath = userDefinedConfigPath || defaultConfigPath;
const rawData = readFileSync(configPath, { encoding: 'utf-8' });
const data = parse(rawData);
appConfig = {
...data,
redmineStatuses: redmineStatusesConfig,
redmineIssueEventEmitterConfig: redmineIssueEventEmitterConfig,
redmineStatusChanges: redmineStatusChanges,
redmineEccm: redmineEccm,
redmineCurrentUserRules: redmineCurrentUserRules,
simpleKanbanBoard: simpleKanbanBoard,
};
return appConfig;
};