diff --git a/src/Statement.js b/src/Statement.js index 4852167..9d75f13 100644 --- a/src/Statement.js +++ b/src/Statement.js @@ -86,7 +86,7 @@ export default class Statement { // special case – shorthand properties. because node.key === node.value, // we can't differentiate once we've descended into the node - if ( node.type === 'Property' && node.shorthand ) { + if ( node.type === 'Property' && node.shorthand && parent.type !== 'ObjectPattern' ) { const reference = new Reference( node.key, scope ); reference.isShorthandProperty = true; // TODO feels a bit kludgy references.push( reference ); diff --git a/test/form/object-destructuring-default-values/_config.js b/test/form/object-destructuring-default-values/_config.js new file mode 100644 index 0000000..18347b6 --- /dev/null +++ b/test/form/object-destructuring-default-values/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'object destructuring default values are preserved' +}; diff --git a/test/form/object-destructuring-default-values/_expected/amd.js b/test/form/object-destructuring-default-values/_expected/amd.js new file mode 100644 index 0000000..e3d2006 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/amd.js @@ -0,0 +1,9 @@ +define(function () { 'use strict'; + + const a = 1; + const b = 2; + const { c = a } = {}; + const [ d = b ] = []; + console.log(c, d); + +}); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/_expected/cjs.js b/test/form/object-destructuring-default-values/_expected/cjs.js new file mode 100644 index 0000000..b6918f0 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/cjs.js @@ -0,0 +1,7 @@ +'use strict'; + +const a = 1; +const b = 2; +const { c = a } = {}; +const [ d = b ] = []; +console.log(c, d); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/_expected/es6.js b/test/form/object-destructuring-default-values/_expected/es6.js new file mode 100644 index 0000000..7dda542 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/es6.js @@ -0,0 +1,5 @@ +const a = 1; +const b = 2; +const { c = a } = {}; +const [ d = b ] = []; +console.log(c, d); diff --git a/test/form/object-destructuring-default-values/_expected/iife.js b/test/form/object-destructuring-default-values/_expected/iife.js new file mode 100644 index 0000000..643b120 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/iife.js @@ -0,0 +1,9 @@ +(function () { 'use strict'; + + const a = 1; + const b = 2; + const { c = a } = {}; + const [ d = b ] = []; + console.log(c, d); + +})(); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/_expected/umd.js b/test/form/object-destructuring-default-values/_expected/umd.js new file mode 100644 index 0000000..e13c8f3 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/umd.js @@ -0,0 +1,13 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory() : + typeof define === 'function' && define.amd ? define(factory) : + factory(); +}(this, function () { 'use strict'; + + const a = 1; + const b = 2; + const { c = a } = {}; + const [ d = b ] = []; + console.log(c, d); + +})); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/main.js b/test/form/object-destructuring-default-values/main.js new file mode 100644 index 0000000..7dda542 --- /dev/null +++ b/test/form/object-destructuring-default-values/main.js @@ -0,0 +1,5 @@ +const a = 1; +const b = 2; +const { c = a } = {}; +const [ d = b ] = []; +console.log(c, d);