From 859763367e4fe01ec738aa0c5d92f3ed72b6880e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Tue, 12 Dec 2023 14:37:24 +0100 Subject: [PATCH] fix: throw error if config import fails feat: log used config in backend --- .../backend/config/default/elasticsearchrc.js | 4 +- .../backend/config/default/tools/version.js | 10 +++-- backend/backend/src/config.ts | 43 ++++++++----------- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/backend/backend/config/default/elasticsearchrc.js b/backend/backend/config/default/elasticsearchrc.js index 2c535d9a..81e2cec2 100644 --- a/backend/backend/config/default/elasticsearchrc.js +++ b/backend/backend/config/default/elasticsearchrc.js @@ -11,13 +11,13 @@ * * To get more information about the meaning of specific fields, please use your IDE to read the TSDoc documentation. * - * @type {import('../../src/storage/elasticsearch/types/elasticsearch-config.js')} + * @type {import('../../src/storage/elasticsearch/types/elasticsearch-config.js').ElasticsearchConfigFile} */ const config = { internal: { database: { name: 'elasticsearch', - version: '5.6', + version: '8.4.2', query: { minMatch: '75%', queryType: 'dis_max', diff --git a/backend/backend/config/default/tools/version.js b/backend/backend/config/default/tools/version.js index b21b681e..997c0a9b 100644 --- a/backend/backend/config/default/tools/version.js +++ b/backend/backend/config/default/tools/version.js @@ -1,5 +1,7 @@ // @ts-check import {readFile, readdir} from 'fs/promises'; +import url from 'url'; +import path from 'path'; /** * @example version(1, import.meta.url) @@ -27,10 +29,10 @@ export async function version(options, base) { * @returns {Promise} */ export async function versions(base) { - const directory = await readdir(new URL(base)); - const versions = [...new Set(directory.map(it => it.replace(/\.\w+\.md$/, '')))].sort( - (a, b) => -a.localeCompare(b, undefined, {numeric: true}), - ); + const directory = await readdir(path.dirname(url.fileURLToPath(base))); + const versions = [ + ...new Set(directory.filter(it => it.endsWith('.md')).map(it => it.replace(/\.\w+\.md$/, ''))), + ].sort((a, b) => -a.localeCompare(b, undefined, {numeric: true})); return Promise.all(versions.map(versionName => version({version: versionName}, base))); } diff --git a/backend/backend/src/config.ts b/backend/backend/src/config.ts index c187654b..8fd61566 100644 --- a/backend/backend/src/config.ts +++ b/backend/backend/src/config.ts @@ -2,6 +2,7 @@ import {cosmiconfig, PublicExplorer} from 'cosmiconfig'; import {SCConfigFile} from '@openstapps/core'; import path from 'path'; import deepmerge from 'deepmerge'; +import {Logger} from '@openstapps/logger'; const fallbackNamespace = 'default'; const configPath = 'config'; @@ -23,31 +24,25 @@ function configLoader(moduleName: string): PublicExplorer { * Find and load a config file */ async function findConfig(moduleName: string, namespace = fallbackNamespace): Promise { - return configLoader(moduleName) - .search(path.posix.join('.', configPath, namespace)) - .then(it => it!.config as T) - .catch(() => - configLoader(moduleName) - .search(path.posix.join('.', configPath, fallbackNamespace)) - .then(it => it!.config), - ); -} + const config = await configLoader(moduleName).search(path.posix.join('.', configPath, namespace)); -/** - * Loads a config file - */ -async function loadConfig(moduleName: string): Promise { - const namespace = process.env.NODE_APP_INSTANCE; - const database = process.env.NODE_CONFIG_ENV; - - const config = await findConfig(moduleName, namespace); - if (database) { - const databaseConfig = await findConfig(database, namespace); - return deepmerge(config, databaseConfig); + if (config) { + Logger.info(`Using ${namespace} config for ${moduleName}`); + return config.config; + } else { + Logger.info(`Using ${fallbackNamespace} config for ${moduleName}`); + return configLoader(moduleName) + .search(path.posix.join('.', configPath, fallbackNamespace)) + .then(it => it!.config); } - - return config; } -export const backendConfig = await loadConfig('backend'); -export const prometheusConfig = await loadConfig('prometheus'); +const namespace = process.env.NODE_APP_INSTANCE; +const database = process.env.NODE_CONFIG_ENV; + +export const prometheusConfig = await findConfig('prometheus', namespace); + +const backendConfigWithoutDatabase = await findConfig('backend', namespace); +export const backendConfig = database + ? deepmerge(backendConfigWithoutDatabase, await findConfig(database, namespace)) + : backendConfigWithoutDatabase;