From 519c34bc60d2367cbd3edfd96d56e1dacd88e084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1n=20D=C3=A9nes?= Date: Sat, 26 Dec 2020 15:17:15 +0100 Subject: [PATCH] Nested key support --- package-lock.json | 2 +- src/cli.js | 1 + src/ergogen.js | 1 + src/utils.js | 23 +++++++++++++++++++++++ test/utils.js | 7 +++++++ 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test/utils.js diff --git a/package-lock.json b/package-lock.json index c1d1252..dab4816 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ergogen", - "version": "0.1.0", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/cli.js b/src/cli.js index 7ecbc7a..3ab36de 100644 --- a/src/cli.js +++ b/src/cli.js @@ -62,6 +62,7 @@ try { } catch (err) { throw new Error(`Malformed input within "${args.c}": ${err}`) } +config = u.expand_nested_keys(config) // points diff --git a/src/ergogen.js b/src/ergogen.js index 99231d1..d12ad8a 100644 --- a/src/ergogen.js +++ b/src/ergogen.js @@ -1,4 +1,5 @@ module.exports = { + utils: require('./utils'), points: require('./points'), outlines: require('./outlines'), cases: require('./cases'), diff --git a/src/utils.js b/src/utils.js index 8be4db0..d2c4c6f 100644 --- a/src/utils.js +++ b/src/utils.js @@ -2,6 +2,29 @@ const m = require('makerjs') exports.deepcopy = (value) => JSON.parse(JSON.stringify(value)) +const deep_assign = exports.deep_assign = (obj, key, val) => { + const levels = key.split('.') + const last = levels.pop() + let step = obj + for (const level of levels) { + step[level] = step[level] || {} + step = step[level] + } + step[last] = val + return obj +} + +const expand_nested_keys = exports.expand_nested_keys = (config) => { + if (typeof config == 'object') { + const result = {} + for (const [key, val] of Object.entries(config)) { + deep_assign(result, key, expand_nested_keys(val)) + } + return result + } + return config +} + const eq = exports.eq = (a=[], b=[]) => { return a[0] === b[0] && a[1] === b[1] } diff --git a/test/utils.js b/test/utils.js new file mode 100644 index 0000000..cd7e4f2 --- /dev/null +++ b/test/utils.js @@ -0,0 +1,7 @@ +const u = require('../src/utils') + +describe('Utils', function() { + it('deep_assign', function() { + u.deep_assign({}, 'a.b.c', 1).should.deep.equal({a: {b: {c: 1}}}) + }) +}) \ No newline at end of file