diff --git a/packages/babel-plugin-transform-pipeline-operator/src/index.js b/packages/babel-plugin-transform-pipeline-operator/src/index.js index 93085d7d9d..26abdf0c29 100644 --- a/packages/babel-plugin-transform-pipeline-operator/src/index.js +++ b/packages/babel-plugin-transform-pipeline-operator/src/index.js @@ -18,9 +18,9 @@ export default function({ types: t }) { if (optimizeArrow) { const { params } = right; - if (params.length === 1) { + if (params.length === 1 && t.isIdentifier(params[0])) { param = params[0]; - } else if (params.length > 1) { + } else if (params.length > 0) { optimizeArrow = false; } } else if (t.isIdentifier(right, { name: "eval" })) { diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/actual.js new file mode 100644 index 0000000000..f851a666ba --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/actual.js @@ -0,0 +1,7 @@ +// Array destructing +const result = [0] |> ([x]) => x; +assert.equal(result, 0); + +// Object destructuring +const result2 = { y: 1, z: 2 } |> ({ y, z }) => y + z; +assert.equal(result, 3); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/exec.js new file mode 100644 index 0000000000..9fb8a5cc53 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/exec.js @@ -0,0 +1,7 @@ +// Array destructing +const result = [0] |> ([x]) => x; +assert.equal(result, 0); + +// Object destructuring +const result2 = { y: 1, z: 2 } |> ({ y, z }) => y + z; +assert.equal(result2, 3); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/expected.js new file mode 100644 index 0000000000..08f7b4a496 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/expected.js @@ -0,0 +1,14 @@ +var _ref, _y$z; + +// Array destructing +const result = (_ref = [0], (([x]) => x)(_ref)); +assert.equal(result, 0); // Object destructuring + +const result2 = (_y$z = { + y: 1, + z: 2 +}, (({ + y, + z +}) => y + z)(_y$z)); +assert.equal(result, 3); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/options.json b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/options.json new file mode 100644 index 0000000000..7d8c3c204c --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/options.json @@ -0,0 +1,3 @@ +{ + "minNodeVersion": "6.0.0" +}