diff --git a/src/prepare.js b/src/prepare.js index 1d60699..b579b67 100644 --- a/src/prepare.js +++ b/src/prepare.js @@ -33,14 +33,26 @@ const extend = exports.extend = (...args) => { } const traverse = exports.traverse = (config, root, breadcrumbs, op) => { - if (a.type(config)() !== 'object') return config - const result = {} - for (const [key, val] of Object.entries(config)) { - breadcrumbs.push(key) - op(result, key, traverse(val, root, breadcrumbs, op), root, breadcrumbs) - breadcrumbs.pop() + if (a.type(config)() == 'object') { + const result = {} + for (const [key, val] of Object.entries(config)) { + breadcrumbs.push(key) + op(result, key, traverse(val, root, breadcrumbs, op), root, breadcrumbs) + breadcrumbs.pop() + } + return result + } else if (a.type(config)() == 'array') { + const result = [] + let index = 0 + for (const val of config) { + breadcrumbs.push(`[${index}]`) + result[index] = traverse(val, root, breadcrumbs, op) + breadcrumbs.pop() + index++ + } + return result } - return result + return config } exports.unnest = config => traverse(config, config, [], (target, key, val) => { diff --git a/test/unit/prepare.js b/test/unit/prepare.js index 5f7f44c..b643e9d 100644 --- a/test/unit/prepare.js +++ b/test/unit/prepare.js @@ -7,6 +7,9 @@ describe('Prepare', function() { d: 2, 'e.f': 3 }}).should.deep.equal({a: {b: {c: {d: 2, e: {f: 3}}}}}) + p.unnest({'root': [{ + 'a.b': 1 + }]}).should.deep.equal({root: [{a: {b: 1}}]}) }) it('extend', function() {