From 3b6b42ec1aa561788740393d3c5883466d5cb575 Mon Sep 17 00:00:00 2001 From: Lars Berning <151194+laberning@users.noreply.github.com> Date: Thu, 27 May 2021 09:36:03 +0200 Subject: [PATCH] extracts merge function into a helper module --- app/engine/RowingEngine.test.js | 2 +- app/tools/ConfigManager.js | 22 +--------------------- app/tools/Helper.js | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 app/tools/Helper.js diff --git a/app/engine/RowingEngine.test.js b/app/engine/RowingEngine.test.js index a82f09c..ba85c96 100644 --- a/app/engine/RowingEngine.test.js +++ b/app/engine/RowingEngine.test.js @@ -9,7 +9,7 @@ import loglevel from 'loglevel' import rowerProfiles from '../../config/rowerProfiles.js' import { createRowingEngine } from './RowingEngine.js' import { replayRowingSession } from '../tools/RowingRecorder.js' -import { deepMerge } from '../tools/ConfigManager.js' +import { deepMerge } from '../tools/Helper.js' const log = loglevel.getLogger('RowingEngine.test') log.setLevel('warn') diff --git a/app/tools/ConfigManager.js b/app/tools/ConfigManager.js index 12742fc..ed4575b 100644 --- a/app/tools/ConfigManager.js +++ b/app/tools/ConfigManager.js @@ -5,6 +5,7 @@ Merges the different config files and presents the configuration to the application */ import defaultConfig from '../../config/default.config.js' +import { deepMerge } from './Helper.js' async function getConfig () { let customConfig @@ -15,27 +16,6 @@ async function getConfig () { return customConfig !== undefined ? deepMerge(defaultConfig, customConfig.default) : defaultConfig } -export function deepMerge (...objects) { - const isObject = obj => obj && typeof obj === 'object' - - return objects.reduce((prev, obj) => { - Object.keys(obj).forEach(key => { - const pVal = prev[key] - const oVal = obj[key] - - if (Array.isArray(pVal) && Array.isArray(oVal)) { - prev[key] = pVal.concat(...oVal) - } else if (isObject(pVal) && isObject(oVal)) { - prev[key] = deepMerge(pVal, oVal) - } else { - prev[key] = oVal - } - }) - - return prev - }, {}) -} - const config = await getConfig() export default config diff --git a/app/tools/Helper.js b/app/tools/Helper.js new file mode 100644 index 0000000..63f388e --- /dev/null +++ b/app/tools/Helper.js @@ -0,0 +1,28 @@ +'use strict' +/* + Open Rowing Monitor, https://github.com/laberning/openrowingmonitor + + Helper functions +*/ + +// deeply merges any number of objects into a new object +export function deepMerge (...objects) { + const isObject = obj => obj && typeof obj === 'object' + + return objects.reduce((prev, obj) => { + Object.keys(obj).forEach(key => { + const pVal = prev[key] + const oVal = obj[key] + + if (Array.isArray(pVal) && Array.isArray(oVal)) { + prev[key] = pVal.concat(...oVal) + } else if (isObject(pVal) && isObject(oVal)) { + prev[key] = deepMerge(pVal, oVal) + } else { + prev[key] = oVal + } + }) + + return prev + }, {}) +}