From a5b9461b3f705497e1a6c5acf70ef4dc7291d59f Mon Sep 17 00:00:00 2001 From: Jon Wong Date: Wed, 6 Dec 2017 12:37:24 -0800 Subject: [PATCH] Adding support for `objectRestSpread` within props --- __tests__/helper.js | 2 +- __tests__/src/getPropValue-test.js | 9 +++++++++ src/values/expressions/ObjectExpression.js | 8 +++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/__tests__/helper.js b/__tests__/helper.js index eb21067..5993fe5 100644 --- a/__tests__/helper.js +++ b/__tests__/helper.js @@ -4,7 +4,7 @@ const parser = require('babylon'); function parse(code) { return parser.parse(code, { - plugins: ['jsx', 'functionBind', 'estree'], + plugins: ['jsx', 'functionBind', 'estree', 'objectRestSpread'], }); } diff --git a/__tests__/src/getPropValue-test.js b/__tests__/src/getPropValue-test.js index 83729bb..adb9c0e 100644 --- a/__tests__/src/getPropValue-test.js +++ b/__tests__/src/getPropValue-test.js @@ -768,6 +768,15 @@ describe('getPropValue', () => { assert.deepEqual(expected, actual); }); + + it('should evaluate to a correct representation of the object, ignore spread properties', () => { + const prop = extractProp('
'); + + const expected = { bar: 'baz', baz: 'bar', foo: { bar: 'meh' } }; + const actual = getPropValue(prop); + + assert.deepEqual(expected, actual); + }); }); describe('New expression', () => { diff --git a/src/values/expressions/ObjectExpression.js b/src/values/expressions/ObjectExpression.js index 71c1782..b8a446f 100644 --- a/src/values/expressions/ObjectExpression.js +++ b/src/values/expressions/ObjectExpression.js @@ -9,7 +9,13 @@ import getValue from './index'; export default function extractValueFromObjectExpression(value) { return value.properties.reduce((obj, property) => { const object = Object.assign({}, obj); - object[getValue(property.key)] = getValue(property.value); + if (property.type === 'SpreadProperty') { + if (property.argument.type === 'ObjectExpression') { + return Object.assign(object, extractValueFromObjectExpression(property.argument)); + } + } else { + object[getValue(property.key)] = getValue(property.value); + } return object; }, {}); }