From ddba7ba89ff329913bb708d920c0c12dab43d7fc Mon Sep 17 00:00:00 2001 From: Artem Yavorsky Date: Mon, 26 Jun 2017 14:33:58 +0300 Subject: [PATCH 1/2] Add destructuring case for modules-commonjs. --- .../src/index.js | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js index c5832e35b7..cc5130fc9a 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js @@ -300,15 +300,43 @@ export default function () { const id = decl.get("id"); const init = decl.get("init"); + const exportsToInsert = []; + if (!init.node) init.replaceWith(t.identifier("undefined")); if (id.isIdentifier()) { addTo(exports, id.node.name, id.node); init.replaceWith(buildExportsAssignment(id.node, init.node).expression); nonHoistedExportNames[id.node.name] = true; - } else { - // todo + } else if (id.isObjectPattern()) { + for (let i = 0; i < id.node.properties.length; i++) { + const prop = id.node.properties[i]; + let propValue = prop.value; + if (t.isAssignmentPattern(propValue)) { + propValue = propValue.left; + } else if (t.isRestProperty(prop)) { + propValue = prop.argument; + } + addTo(exports, propValue.name, propValue); + exportsToInsert.push(buildExportsAssignment(propValue, propValue)); + nonHoistedExportNames[propValue.name] = true; + } + } else if (id.isArrayPattern() && id.node.elements) { + for (let i = 0; i < id.node.elements.length; i++) { + let elem = id.node.elements[i]; + if (!elem) continue; + if (t.isAssignmentPattern(elem)) { + elem = elem.left; + } else if (t.isRestElement(elem)) { + elem = elem.argument; + } + const name = elem.name; + addTo(exports, name, elem); + exportsToInsert.push(buildExportsAssignment(elem, elem)); + nonHoistedExportNames[name] = true; + } } + path.insertAfter(exportsToInsert); } path.replaceWith(declaration.node); } From 2cfd01aeb61990a7060595100276e6b155782b0a Mon Sep 17 00:00:00 2001 From: Artem Yavorsky Date: Mon, 26 Jun 2017 15:44:18 +0300 Subject: [PATCH 2/2] Add fixtures for exports with desctucturing. --- .../package.json | 3 ++- .../actual.js | 1 + .../expected.js | 5 +++++ .../strict/export-const-destructuring-array-rest/actual.js | 1 + .../export-const-destructuring-array-rest/expected.js | 6 ++++++ .../strict/export-const-destructuring-array/actual.js | 1 + .../strict/export-const-destructuring-array/expected.js | 5 +++++ .../actual.js | 1 + .../expected.js | 5 +++++ .../strict/export-const-destructuring-object-rest/actual.js | 1 + .../export-const-destructuring-object-rest/expected.js | 5 +++++ .../strict/export-const-destructuring-object/actual.js | 1 + .../strict/export-const-destructuring-object/expected.js | 5 +++++ .../test/fixtures/strict/options.json | 6 +++++- 14 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/expected.js diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/package.json b/packages/babel-plugin-transform-es2015-modules-commonjs/package.json index e9fdac4c9f..548ec4c753 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/package.json +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/package.json @@ -14,6 +14,7 @@ "babel-plugin" ], "devDependencies": { - "babel-helper-plugin-test-runner": "7.0.0-alpha.12" + "babel-helper-plugin-test-runner": "7.0.0-alpha.12", + "babel-plugin-syntax-object-rest-spread": "7.0.0-alpha.12" } } diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/actual.js new file mode 100644 index 0000000000..15f05d97e4 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/actual.js @@ -0,0 +1 @@ +export const [foo, bar = 2] = []; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/expected.js new file mode 100644 index 0000000000..124bbfcc78 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-default-params/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +const [foo, bar = 2] = []; +exports.foo = foo; +exports.bar = bar; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/actual.js new file mode 100644 index 0000000000..0a9d393da8 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/actual.js @@ -0,0 +1 @@ +export const [foo, bar, ...baz] = []; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/expected.js new file mode 100644 index 0000000000..c975988eb9 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array-rest/expected.js @@ -0,0 +1,6 @@ +"use strict"; + +const [foo, bar, ...baz] = []; +exports.foo = foo; +exports.bar = bar; +exports.baz = baz; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/actual.js new file mode 100644 index 0000000000..17971b0e11 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/actual.js @@ -0,0 +1 @@ +export const [foo, bar] = []; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/expected.js new file mode 100644 index 0000000000..e2fafbd5ca --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-array/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +const [foo, bar] = []; +exports.foo = foo; +exports.bar = bar; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/actual.js new file mode 100644 index 0000000000..03958a0709 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/actual.js @@ -0,0 +1 @@ +export const { foo, bar = 1 } = {}; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/expected.js new file mode 100644 index 0000000000..2f72b34fb6 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +const { foo, bar = 1 } = {}; +exports.foo = foo; +exports.bar = bar; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/actual.js new file mode 100644 index 0000000000..d4d52568ce --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/actual.js @@ -0,0 +1 @@ +export const { foo, ...bar } = {}; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/expected.js new file mode 100644 index 0000000000..4e27e34014 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +const { foo, ...bar } = {}; +exports.foo = foo; +exports.bar = bar; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/actual.js new file mode 100644 index 0000000000..f571493604 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/actual.js @@ -0,0 +1 @@ +export const { foo: bar, baz } = {}; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/expected.js new file mode 100644 index 0000000000..83cc6e03df --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +const { foo: bar, baz } = {}; +exports.bar = bar; +exports.baz = baz; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/options.json b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/options.json index b2db9b9205..273fda603d 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/options.json +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/options.json @@ -1,3 +1,7 @@ { - "plugins": ["external-helpers", ["transform-es2015-modules-commonjs", { "strict": true }]] + "plugins": [ + "external-helpers", + "syntax-object-rest-spread", + ["transform-es2015-modules-commonjs", { "strict": true }] + ] }