diff --git a/package.json b/package.json index 27b93f0d95..87787a18cd 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-preset-flow": "7.0.0-alpha.18", "babel-preset-stage-0": "7.0.0-alpha.18", "babel-register": "7.0.0-alpha.18", - "babylon": "7.0.0-beta.26", + "babylon": "7.0.0-beta.27", "browserify": "^13.1.1", "bundle-collapser": "^1.2.1", "chai": "^4.1.0", diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index 9b68446565..dc3c737253 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -31,7 +31,7 @@ "babel-template": "7.0.0-beta.2", "babel-traverse": "7.0.0-beta.2", "babel-types": "7.0.0-beta.2", - "babylon": "7.0.0-beta.26", + "babylon": "7.0.0-beta.27", "convert-source-map": "^1.1.0", "debug": "^3.0.1", "json5": "^0.5.0", diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index 1d55da8132..c16e61d2e7 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -19,6 +19,6 @@ }, "devDependencies": { "babel-helper-fixtures": "7.0.0-beta.2", - "babylon": "^7.0.0-beta.26" + "babylon": "^7.0.0-beta.27" } } diff --git a/packages/babel-plugin-syntax-pipeline-operator/README.md b/packages/babel-plugin-syntax-pipeline-operator/README.md new file mode 100644 index 0000000000..a1c213b508 --- /dev/null +++ b/packages/babel-plugin-syntax-pipeline-operator/README.md @@ -0,0 +1,35 @@ +# babel-plugin-syntax-pipeline-operator + +Allow parsing of the pipeline operator `|>`. See [the proposal](https://github.com/tc39/proposal-pipeline-operator) for details. + +## Installation + +```sh +$ npm install babel-plugin-syntax-pipeline-operator +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```json +{ + "plugins": ["syntax-pipeline-operator"] +} +``` + +### Via CLI + +```sh +$ babel --plugins syntax-pipeline-operator script.js +``` + +### Via Node API + +```javascript +require("babel-core").transform("code", { + plugins: ["syntax-pipeline-operator"] +}); +``` diff --git a/packages/babel-plugin-syntax-pipeline-operator/package.json b/packages/babel-plugin-syntax-pipeline-operator/package.json new file mode 100644 index 0000000000..7b6254343b --- /dev/null +++ b/packages/babel-plugin-syntax-pipeline-operator/package.json @@ -0,0 +1,11 @@ +{ + "name": "babel-plugin-syntax-pipeline-operator", + "version": "7.0.0-beta.2", + "description": "Allow parsing of the pipeline operator", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-pipeline-operator", + "license": "MIT", + "main": "lib/index.js", + "keywords": [ + "babel-plugin" + ] +} diff --git a/packages/babel-plugin-syntax-pipeline-operator/src/index.js b/packages/babel-plugin-syntax-pipeline-operator/src/index.js new file mode 100644 index 0000000000..0021ae691c --- /dev/null +++ b/packages/babel-plugin-syntax-pipeline-operator/src/index.js @@ -0,0 +1,7 @@ +export default function() { + return { + manipulateOptions(opts, parserOpts) { + parserOpts.plugins.push("pipelineOperator"); + }, + }; +} diff --git a/packages/babel-plugin-transform-pipeline-operator/README.md b/packages/babel-plugin-transform-pipeline-operator/README.md new file mode 100644 index 0000000000..7fee94865b --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/README.md @@ -0,0 +1,35 @@ +# babel-plugin-transform-pipeline-operator + +Transform pipeline operator `|>` into call expressions. See [the proposal](https://github.com/tc39/proposal-pipeline-operator) for details. + +## Installation + +```sh +$ npm install babel-plugin-transform-pipeline-operator +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```json +{ + "plugins": ["transform-pipeline-operator"] +} +``` + +### Via CLI + +```sh +$ babel --plugins transform-pipeline-operator script.js +``` + +### Via Node API + +```javascript +require("babel-core").transform("code", { + plugins: ["transform-pipeline-operator"] +}); +``` diff --git a/packages/babel-plugin-transform-pipeline-operator/package.json b/packages/babel-plugin-transform-pipeline-operator/package.json new file mode 100644 index 0000000000..522c226543 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/package.json @@ -0,0 +1,17 @@ +{ + "name": "babel-plugin-transform-pipeline-operator", + "version": "7.0.0-beta.2", + "description": "Transform pipeline operator into call expressions", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-pipeline-operator", + "license": "MIT", + "main": "lib/index.js", + "keywords": [ + "babel-plugin" + ], + "dependencies": { + "babel-plugin-syntax-pipeline-operator": "7.0.0-beta.2" + }, + "devDependencies": { + "babel-helper-plugin-test-runner": "7.0.0-beta.2" + } +} diff --git a/packages/babel-plugin-transform-pipeline-operator/src/index.js b/packages/babel-plugin-transform-pipeline-operator/src/index.js new file mode 100644 index 0000000000..ba0f422f4c --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/src/index.js @@ -0,0 +1,56 @@ +import syntaxPipelineOperator from "babel-plugin-syntax-pipeline-operator"; + +export default function({ types: t }) { + return { + inherits: syntaxPipelineOperator, + + visitor: { + BinaryExpression(path) { + const { scope } = path; + const { node } = path; + const { operator, left } = node; + let { right } = node; + if (operator !== "|>") return; + + let optimizeArrow = + t.isArrowFunctionExpression(right) && t.isExpression(right.body); + let param; + + if (optimizeArrow) { + const { params } = right; + if (params.length === 1) { + param = params[0]; + } else if (params.length > 1) { + optimizeArrow = false; + } + } else if (t.isIdentifier(right, { name: "eval" })) { + right = t.sequenceExpression([t.numericLiteral(0), right]); + } + + if (optimizeArrow && !param) { + // Arrow function with 0 arguments + path.replaceWith(t.sequenceExpression([left, right.body])); + return; + } + + const placeholder = scope.generateUidIdentifierBasedOnNode( + param || left, + ); + scope.push({ id: placeholder }); + if (param) { + path.get("right").scope.rename(param.name, placeholder.name); + } + + const call = optimizeArrow + ? right.body + : t.callExpression(right, [placeholder]); + path.replaceWith( + t.sequenceExpression([ + t.assignmentExpression("=", placeholder, left), + call, + ]), + ); + }, + }, + }; +} diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/actual.js new file mode 100644 index 0000000000..98b1ab27dd --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/actual.js @@ -0,0 +1,14 @@ +var result = [5,10] + |> _ => _.map(x => x * 2) + |> _ => _.reduce( (a,b) => a + b ) + |> sum => sum + 1 + +assert.equal(result, 31) + + +var inc = (x) => x + 1; +var double = (x) => x * 2; + +var result2 = [4, 9].map( x => x |> inc |> double ) + +assert.deepEqual(result2, [10, 20]) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/exec.js new file mode 100644 index 0000000000..98b1ab27dd --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/exec.js @@ -0,0 +1,14 @@ +var result = [5,10] + |> _ => _.map(x => x * 2) + |> _ => _.reduce( (a,b) => a + b ) + |> sum => sum + 1 + +assert.equal(result, 31) + + +var inc = (x) => x + 1; +var double = (x) => x * 2; + +var result2 = [4, 9].map( x => x |> inc |> double ) + +assert.deepEqual(result2, [10, 20]) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/expected.js new file mode 100644 index 0000000000..c7e973fc80 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/arrow-functions/expected.js @@ -0,0 +1,15 @@ +var _ref, _ref2, _sum; + +var result = (_ref = [5, 10], (_ref2 = _ref.map(x => x * 2), (_sum = _ref2.reduce((a, b) => a + b), _sum + 1))); +assert.equal(result, 31); + +var inc = x => x + 1; + +var double = x => x * 2; + +var result2 = [4, 9].map(x => { + var _ref3, _x; + + return _ref3 = (_x = x, inc(_x)), double(_ref3); +}); +assert.deepEqual(result2, [10, 20]); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/actual.js new file mode 100644 index 0000000000..3d1a636f3c --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/actual.js @@ -0,0 +1,3 @@ +var inc = (x) => x + 1 + +assert.equal(10 |> inc, 11); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/exec.js new file mode 100644 index 0000000000..3d1a636f3c --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/exec.js @@ -0,0 +1,3 @@ +var inc = (x) => x + 1 + +assert.equal(10 |> inc, 11); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/expected.js new file mode 100644 index 0000000000..d045f8817d --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/basic/expected.js @@ -0,0 +1,5 @@ +var _; + +var inc = x => x + 1; + +assert.equal((_ = 10, inc(_)), 11); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/actual.js new file mode 100644 index 0000000000..3b7a74eb75 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/actual.js @@ -0,0 +1,4 @@ +var inc = (x) => x + 1; +var double = (x) => x * 2; + +assert.equal(10 |> inc |> double, 22); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/exec.js new file mode 100644 index 0000000000..3b7a74eb75 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/exec.js @@ -0,0 +1,4 @@ +var inc = (x) => x + 1; +var double = (x) => x * 2; + +assert.equal(10 |> inc |> double, 22); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/expected.js new file mode 100644 index 0000000000..c034b7ed8b --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/chaining/expected.js @@ -0,0 +1,7 @@ +var _ref, _; + +var inc = x => x + 1; + +var double = x => x * 2; + +assert.equal((_ref = (_ = 10, inc(_)), double(_ref)), 22); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/actual.js new file mode 100644 index 0000000000..4279d4fec8 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/actual.js @@ -0,0 +1,6 @@ + +var map = (fn) => (array) => array.map(fn); + +var result = [10,20] |> map(x => x * 20); + +assert.deepEqual(result, [200, 400]) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/exec.js new file mode 100644 index 0000000000..4279d4fec8 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/exec.js @@ -0,0 +1,6 @@ + +var map = (fn) => (array) => array.map(fn); + +var result = [10,20] |> map(x => x * 20); + +assert.deepEqual(result, [200, 400]) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/expected.js new file mode 100644 index 0000000000..eb38aa3dd7 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/currying/expected.js @@ -0,0 +1,6 @@ +var _ref; + +var map = fn => array => array.map(fn); + +var result = (_ref = [10, 20], map(x => x * 20)(_ref)); +assert.deepEqual(result, [200, 400]); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/actual.js new file mode 100644 index 0000000000..42adc52b53 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/actual.js @@ -0,0 +1,8 @@ +var a = 1, + b = 2, + c = 3; +var result = a + |> (a, b) => b + |> (a, b) => c; + +assert.equal(result, c) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/exec.js new file mode 100644 index 0000000000..42adc52b53 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/exec.js @@ -0,0 +1,8 @@ +var a = 1, + b = 2, + c = 3; +var result = a + |> (a, b) => b + |> (a, b) => c; + +assert.equal(result, c) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/expected.js new file mode 100644 index 0000000000..3dab7d000b --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/deoptimize-multi-param-arrow/expected.js @@ -0,0 +1,11 @@ +var _a; + +var a = 1, + b = 2, + c = 3; +var result = (_a = a, ((a, b) => { + var _b; + + return _b = b, ((a, b) => c)(_b); +})(_a)); +assert.equal(result, c); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/actual.js new file mode 100644 index 0000000000..25fc3f6a5e --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/actual.js @@ -0,0 +1,13 @@ +var obj = { + get prop() { + return this._prop = 1; + }, + + get method() { + if (!this._prop) throw new Error('invalid evaluation order'); + return (v) => v; + } +} + +var result = obj.prop |> obj.method; +assert.equal(result, 1); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/exec.js new file mode 100644 index 0000000000..25fc3f6a5e --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/exec.js @@ -0,0 +1,13 @@ +var obj = { + get prop() { + return this._prop = 1; + }, + + get method() { + if (!this._prop) throw new Error('invalid evaluation order'); + return (v) => v; + } +} + +var result = obj.prop |> obj.method; +assert.equal(result, 1); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/expected.js new file mode 100644 index 0000000000..5acb63faee --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/evaluation/expected.js @@ -0,0 +1,15 @@ +var _obj$prop; + +var obj = { + get prop() { + return this._prop = 1; + }, + + get method() { + if (!this._prop) throw new Error('invalid evaluation order'); + return v => v; + } + +}; +var result = (_obj$prop = obj.prop, obj.method(_obj$prop)); +assert.equal(result, 1); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/actual.js new file mode 100644 index 0000000000..41e11d0f77 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/actual.js @@ -0,0 +1,7 @@ +(function() { + 'use strict'; + var result = '(function() { return this; })()' + |> eval; + + assert.notEqual(result, undefined); +})(); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/exec.js new file mode 100644 index 0000000000..41e11d0f77 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/exec.js @@ -0,0 +1,7 @@ +(function() { + 'use strict'; + var result = '(function() { return this; })()' + |> eval; + + assert.notEqual(result, undefined); +})(); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/expected.js new file mode 100644 index 0000000000..5af6132e9e --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/indirect-eval/expected.js @@ -0,0 +1,8 @@ +(function () { + 'use strict'; + + var _functionReturn; + + var result = (_functionReturn = '(function() { return this; })()', (0, eval)(_functionReturn)); + assert.notEqual(result, undefined); +})(); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/actual.js new file mode 100644 index 0000000000..b83dc3f21b --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/actual.js @@ -0,0 +1,5 @@ +var array = [10,20,30]; + +var last = array |> a => a[a.length-1]; + +assert.equal(last, 30); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/exec.js new file mode 100644 index 0000000000..b83dc3f21b --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/exec.js @@ -0,0 +1,5 @@ +var array = [10,20,30]; + +var last = array |> a => a[a.length-1]; + +assert.equal(last, 30); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/expected.js new file mode 100644 index 0000000000..7a62766f9f --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/multiple-argument-use/expected.js @@ -0,0 +1,5 @@ +var _a; + +var array = [10, 20, 30]; +var last = (_a = array, _a[_a.length - 1]); +assert.equal(last, 30); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/actual.js new file mode 100644 index 0000000000..48643ed62e --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/actual.js @@ -0,0 +1,8 @@ +var a = 1, + b = 2, + c = 3; +var result = a + |> () => b + |> () => c; + +assert.equal(result, c) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/exec.js new file mode 100644 index 0000000000..48643ed62e --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/exec.js @@ -0,0 +1,8 @@ +var a = 1, + b = 2, + c = 3; +var result = a + |> () => b + |> () => c; + +assert.equal(result, c) diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/expected.js new file mode 100644 index 0000000000..2601890e5a --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/optimize-0-param-arrow/expected.js @@ -0,0 +1,5 @@ +var a = 1, + b = 2, + c = 3; +var result = (a, (b, c)); +assert.equal(result, c); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/options.json b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/options.json new file mode 100644 index 0000000000..cd9de337d5 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-pipeline-operator"] +} diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/actual.js new file mode 100644 index 0000000000..931ac81b29 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/actual.js @@ -0,0 +1,12 @@ + +var inc = (x) => x + 1; + +var result = 4 || 9 |> inc; +assert.equal(result, 5); + + +var f = (x) => x + 10 +var h = (x) => x + 20 + +var result2 = 10 |> f || h |> inc; +assert.equal(result2, 21); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/exec.js new file mode 100644 index 0000000000..931ac81b29 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/exec.js @@ -0,0 +1,12 @@ + +var inc = (x) => x + 1; + +var result = 4 || 9 |> inc; +assert.equal(result, 5); + + +var f = (x) => x + 10 +var h = (x) => x + 20 + +var result2 = 10 |> f || h |> inc; +assert.equal(result2, 21); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/expected.js new file mode 100644 index 0000000000..c066b6aaaa --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/precedence/expected.js @@ -0,0 +1,13 @@ +var _ref, _ref2, _; + +var inc = x => x + 1; + +var result = (_ref = 4 || 9, inc(_ref)); +assert.equal(result, 5); + +var f = x => x + 10; + +var h = x => x + 20; + +var result2 = (_ref2 = (_ = 10, (f || h)(_)), inc(_ref2)); +assert.equal(result2, 21); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/index.js b/packages/babel-plugin-transform-pipeline-operator/test/index.js new file mode 100644 index 0000000000..09cfbc31f5 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/index.js @@ -0,0 +1,3 @@ +import runner from "babel-helper-plugin-test-runner"; + +runner(__dirname); diff --git a/packages/babel-preset-stage-1/package.json b/packages/babel-preset-stage-1/package.json index 7c80eaf527..f159b9bf23 100644 --- a/packages/babel-preset-stage-1/package.json +++ b/packages/babel-preset-stage-1/package.json @@ -11,6 +11,7 @@ "babel-plugin-transform-decorators": "7.0.0-beta.2", "babel-plugin-transform-export-default": "7.0.0-beta.2", "babel-plugin-transform-optional-chaining": "7.0.0-beta.2", + "babel-plugin-transform-pipeline-operator": "7.0.0-beta.2", "babel-preset-stage-2": "7.0.0-beta.2" } } diff --git a/packages/babel-preset-stage-1/src/index.js b/packages/babel-preset-stage-1/src/index.js index fafec46d0f..7b204690da 100644 --- a/packages/babel-preset-stage-1/src/index.js +++ b/packages/babel-preset-stage-1/src/index.js @@ -3,6 +3,7 @@ import presetStage2 from "babel-preset-stage-2"; import transformDecorators from "babel-plugin-transform-decorators"; import transformExportDefault from "babel-plugin-transform-export-default"; import transformOptionalChaining from "babel-plugin-transform-optional-chaining"; +import transformPipelineOperator from "babel-plugin-transform-pipeline-operator"; export default function() { return { @@ -11,6 +12,7 @@ export default function() { transformDecorators, transformExportDefault, transformOptionalChaining, + transformPipelineOperator, ], }; } diff --git a/packages/babel-template/package.json b/packages/babel-template/package.json index 4d37590bcd..667e03829a 100644 --- a/packages/babel-template/package.json +++ b/packages/babel-template/package.json @@ -10,7 +10,7 @@ "dependencies": { "babel-traverse": "7.0.0-beta.2", "babel-types": "7.0.0-beta.2", - "babylon": "7.0.0-beta.26", + "babylon": "7.0.0-beta.27", "lodash": "^4.2.0" } } diff --git a/packages/babel-traverse/package.json b/packages/babel-traverse/package.json index ad55f1a8ac..ffd592f732 100644 --- a/packages/babel-traverse/package.json +++ b/packages/babel-traverse/package.json @@ -11,7 +11,7 @@ "babel-code-frame": "7.0.0-beta.2", "babel-helper-function-name": "7.0.0-beta.2", "babel-types": "7.0.0-beta.2", - "babylon": "7.0.0-beta.26", + "babylon": "7.0.0-beta.27", "debug": "^3.0.1", "globals": "^10.0.0", "invariant": "^2.2.0", diff --git a/packages/babel-types/package.json b/packages/babel-types/package.json index 8b586086a5..6f7e0b534d 100644 --- a/packages/babel-types/package.json +++ b/packages/babel-types/package.json @@ -14,6 +14,6 @@ }, "devDependencies": { "babel-generator": "7.0.0-beta.2", - "babylon": "^7.0.0-beta.26" + "babylon": "^7.0.0-beta.27" } } diff --git a/yarn.lock b/yarn.lock index 753c545025..e5334ef852 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1017,9 +1017,9 @@ babylon@7.0.0-beta.18: version "7.0.0-beta.18" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.18.tgz#5c23ee3fdb66358aabf3789779319c5b78a233c7" -babylon@7.0.0-beta.26: - version "7.0.0-beta.26" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.26.tgz#afc2c6b86113d000cc9476fd6f73e2a9223de8f7" +babylon@7.0.0-beta.27: + version "7.0.0-beta.27" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.27.tgz#b6edd30ef30619e2f630eb52585fdda84e6542cd" babylon@^6.17.4, babylon@^6.18.0: version "6.18.0"