From 0d3a7e9cc6413ed798a055de46a98c95eed57019 Mon Sep 17 00:00:00 2001 From: Artem Gurzhii Date: Thu, 2 Mar 2017 19:14:03 +0100 Subject: [PATCH 01/13] Code refactoring for the babel-generator (#5344) * refactoring code for babel-generator package * removing spaces and refactoring if statement * fixing warnings --- packages/babel-generator/src/index.js | 4 +- .../babel-generator/src/node/parentheses.js | 153 ++++++------------ packages/babel-generator/src/printer.js | 8 +- packages/babel-generator/src/whitespace.js | 4 +- 4 files changed, 57 insertions(+), 112 deletions(-) diff --git a/packages/babel-generator/src/index.js b/packages/babel-generator/src/index.js index 138336546c..27adb65697 100644 --- a/packages/babel-generator/src/index.js +++ b/packages/babel-generator/src/index.js @@ -10,9 +10,7 @@ import type { Format } from "./printer"; */ class Generator extends Printer { - constructor(ast, opts, code) { - opts = opts || {}; - + constructor(ast, opts = {}, code) { const tokens = ast.tokens || []; const format = normalizeOptions(code, opts, tokens); const map = opts.sourceMaps ? new SourceMap(opts, code) : null; diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 948198f7cb..5cf16c2324 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -34,12 +34,8 @@ export function NullableTypeAnnotation(node: Object, parent: Object): boolean { export { NullableTypeAnnotation as FunctionTypeAnnotation }; export function UpdateExpression(node: Object, parent: Object): boolean { - if (t.isMemberExpression(parent) && parent.object === node) { - // (foo++).test() - return true; - } - - return false; + // (foo++).test() + return t.isMemberExpression(parent) && parent.object === node; } export function ObjectExpression(node: Object, parent: Object, printStack: Array): boolean { @@ -51,15 +47,11 @@ export function DoExpression(node: Object, parent: Object, printStack: Array nodePos) { - return true; - } - - // Logical expressions with the same precedence don't need parens. - if (parentPos === nodePos && parent.right === node && !t.isLogicalExpression(parent)) { + if ( + // Logical expressions with the same precedence don't need parens. + (parentPos === nodePos && parent.right === node && !t.isLogicalExpression(parent)) || + parentPos > nodePos + ) { return true; } } @@ -84,55 +75,27 @@ export function Binary(node: Object, parent: Object): boolean { } export function BinaryExpression(node: Object, parent: Object): boolean { - if (node.operator === "in") { - // let i = (1 in []); - if (t.isVariableDeclarator(parent)) { - return true; - } - - // for ((1 in []);;); - if (t.isFor(parent)) { - return true; - } - } - - return false; + // let i = (1 in []); + // for ((1 in []);;); + return node.operator === "in" && (t.isVariableDeclarator(parent) || t.isFor(parent)); } export function SequenceExpression(node: Object, parent: Object): boolean { - if (t.isForStatement(parent)) { + + if ( // Although parentheses wouldn"t hurt around sequence // expressions in the head of for loops, traditional style // dictates that e.g. i++, j++ should not be wrapped with // parentheses. - return false; - } - - if (t.isExpressionStatement(parent) && parent.expression === node) { - return false; - } - - if (t.isReturnStatement(parent)) { - return false; - } - - if (t.isThrowStatement(parent)) { - return false; - } - - if (t.isSwitchStatement(parent) && parent.discriminant === node) { - return false; - } - - if (t.isWhileStatement(parent) && parent.test === node) { - return false; - } - - if (t.isIfStatement(parent) && parent.test === node) { - return false; - } - - if (t.isForInStatement(parent) && parent.right === node) { + t.isForStatement(parent) || + t.isThrowStatement(parent) || + t.isReturnStatement(parent) || + (t.isIfStatement(parent) && parent.test === node) || + (t.isWhileStatement(parent) && parent.test === node) || + (t.isForInStatement(parent) && parent.right === node) || + (t.isSwitchStatement(parent) && parent.discriminant === node) || + (t.isExpressionStatement(parent) && parent.expression === node) + ) { return false; } @@ -158,15 +121,9 @@ export function ClassExpression(node: Object, parent: Object, printStack: Array< } export function UnaryLike(node: Object, parent: Object): boolean { - if (t.isMemberExpression(parent, { object: node })) { - return true; - } - - if (t.isCallExpression(parent, { callee: node }) || t.isNewExpression(parent, { callee: node })) { - return true; - } - - return false; + return t.isMemberExpression(parent, { object: node }) || + t.isCallExpression(parent, { callee: node }) || + t.isNewExpression(parent, { callee: node }); } export function FunctionExpression(node: Object, parent: Object, printStack: Array): boolean { @@ -189,19 +146,12 @@ export function ArrowFunctionExpression(node: Object, parent: Object): boolean { } export function ConditionalExpression(node: Object, parent: Object): boolean { - if (t.isUnaryLike(parent)) { - return true; - } - - if (t.isBinary(parent)) { - return true; - } - - if (t.isConditionalExpression(parent, { test: node })) { - return true; - } - - if (t.isAwaitExpression(parent)) { + if ( + t.isUnaryLike(parent) || + t.isBinary(parent) || + t.isConditionalExpression(parent, { test: node }) || + t.isAwaitExpression(parent) + ) { return true; } @@ -227,28 +177,23 @@ function isFirstInStatement(printStack: Array, { i--; let parent = printStack[i]; while (i > 0) { - if (t.isExpressionStatement(parent, { expression: node })) { + if ( + t.isExpressionStatement(parent, { expression: node }) || + t.isTaggedTemplateExpression(parent) || + considerDefaultExports && t.isExportDefaultDeclaration(parent, { declaration: node }) || + considerArrow && t.isArrowFunctionExpression(parent, { body: node }) + ) { return true; } - if (t.isTaggedTemplateExpression(parent)) { - return true; - } - - if (considerDefaultExports && t.isExportDefaultDeclaration(parent, { declaration: node })) { - return true; - } - - if (considerArrow && t.isArrowFunctionExpression(parent, { body: node })) { - return true; - } - - if ((t.isCallExpression(parent, { callee: node })) || - (t.isSequenceExpression(parent) && parent.expressions[0] === node) || - (t.isMemberExpression(parent, { object: node })) || - (t.isConditional(parent, { test: node })) || - (t.isBinary(parent, { left: node })) || - (t.isAssignmentExpression(parent, { left: node }))) { + if ( + t.isCallExpression(parent, { callee: node }) || + (t.isSequenceExpression(parent) && parent.expressions[0] === node) || + t.isMemberExpression(parent, { object: node }) || + t.isConditional(parent, { test: node }) || + t.isBinary(parent, { left: node }) || + t.isAssignmentExpression(parent, { left: node }) + ) { node = parent; i--; parent = printStack[i]; diff --git a/packages/babel-generator/src/printer.js b/packages/babel-generator/src/printer.js index 6d164fc2fe..ccb7576cd7 100644 --- a/packages/babel-generator/src/printer.js +++ b/packages/babel-generator/src/printer.js @@ -330,9 +330,11 @@ export default class Printer { this._maybeAddAuxComment(this._insideAux && !oldInAux); let needsParens = n.needsParens(node, parent, this._printStack); - if (this.format.retainFunctionParens && - node.type === "FunctionExpression" && - node.extra && node.extra.parenthesized) { + if ( + this.format.retainFunctionParens && + node.type === "FunctionExpression" && + node.extra && node.extra.parenthesized + ) { needsParens = true; } if (needsParens) this.token("("); diff --git a/packages/babel-generator/src/whitespace.js b/packages/babel-generator/src/whitespace.js index 6a055e02e2..aabe0d123a 100644 --- a/packages/babel-generator/src/whitespace.js +++ b/packages/babel-generator/src/whitespace.js @@ -5,7 +5,7 @@ export default class Whitespace { constructor(tokens) { this.tokens = tokens; - this.used = {}; + this.used = {}; } /** @@ -59,7 +59,7 @@ export default class Whitespace { if (!endToken || !endToken.loc) return 0; const start = startToken ? startToken.loc.end.line : 1; - const end = endToken.loc.start.line; + const end = endToken.loc.start.line; let lines = 0; for (let line = start; line < end; line++) { From 2127df0db0cb20eef69acb858e8259d0ff410dd6 Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Thu, 2 Mar 2017 22:29:34 -0600 Subject: [PATCH 02/13] Fix transform-object-rest-spread README [skip ci] (#5409) --- .../README.md | 60 +++++++++++-------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/packages/babel-plugin-transform-object-rest-spread/README.md b/packages/babel-plugin-transform-object-rest-spread/README.md index 61c3debfff..79f2432d03 100644 --- a/packages/babel-plugin-transform-object-rest-spread/README.md +++ b/packages/babel-plugin-transform-object-rest-spread/README.md @@ -4,19 +4,22 @@ ## Example +### Rest Properties + ```js -// Rest properties let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; console.log(x); // 1 console.log(y); // 2 console.log(z); // { a: 3, b: 4 } +``` -// Spread properties +### Spread Properties + +```js let n = { x, y, ...z }; console.log(n); // { x: 1, y: 2, a: 3, b: 4 } ``` - ## Installation ```sh @@ -35,27 +38,6 @@ npm install --save-dev babel-plugin-transform-object-rest-spread } ``` -## Options - -This plugin will use babel's `extends` helper, which will polyfill `Object.assign` by default. - -* `useBuiltIns` - Do not use Babel's helper's and just transform to use the built-in method (Disabled by default). - -```json -{ - "plugins": [ - ["transform-object-rest-spread", { "useBuiltIns": true }] - ] -} -``` - -```js -// source -z = { x, ...y }; -// compiled -z = Object.assign({ x }, y); -``` - ### Via CLI ```sh @@ -70,6 +52,36 @@ require("babel-core").transform("code", { }); ``` +## Options + +### `useBuiltIns` + +`boolean`, defaults to `false`. + +By default, this plugin uses Babel's `extends` helper which polyfills `Object.assign`. Enabling this option will use `Object.assign` directly. + +**.babelrc** + +```json +{ + "plugins": [ + ["transform-object-rest-spread", { "useBuiltIns": true }] + ] +} +``` + +**In** + +```js +z = { x, ...y }; +``` + +**Out** + +```js +z = Object.assign({ x }, y); +``` + ## References * [Proposal: Object Rest/Spread Properties for ECMAScript](https://github.com/sebmarkbage/ecmascript-rest-spread) From bc65822379bf194491eb02b9be7f213f3a562cd9 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Mon, 6 Mar 2017 14:21:58 -0500 Subject: [PATCH 03/13] Add `noInterop` option to `babel-plugin-transform-es2015-modules-commonjs`. The intent of this option is to toggle module interop behavior. When `true` no `interopRequireXXX` helper invocations will be emitted. (cherry picked from commit 0d1edb9811694d25df2ef75a1e8de773624ec6b8) --- .../fixtures/amd/noInterop-export-from/actual.js | 1 + .../fixtures/amd/noInterop-export-from/expected.js | 13 +++++++++++++ .../amd/noInterop-export-from/options.json | 3 +++ .../amd/noInterop-import-default-only/actual.js | 3 +++ .../amd/noInterop-import-default-only/expected.js | 5 +++++ .../amd/noInterop-import-default-only/options.json | 3 +++ .../src/index.js | 7 ++++--- .../test/fixtures/noInterop/export-from/actual.js | 1 + .../fixtures/noInterop/export-from/expected.js | 14 ++++++++++++++ .../noInterop/import-default-only/actual.js | 3 +++ .../noInterop/import-default-only/expected.js | 5 +++++ .../fixtures/noInterop/import-wildcard/actual.js | 4 ++++ .../fixtures/noInterop/import-wildcard/expected.js | 6 ++++++ .../test/fixtures/noInterop/options.json | 3 +++ .../test/fixtures/strict/import-wildcard/actual.js | 4 ++++ .../fixtures/strict/import-wildcard/expected.js | 6 ++++++ 16 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/options.json create mode 100644 packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/options.json create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/options.json create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/expected.js diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/actual.js b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/actual.js new file mode 100644 index 0000000000..7d2c9b022e --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/actual.js @@ -0,0 +1 @@ +export { default } from 'foo'; diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/expected.js b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/expected.js new file mode 100644 index 0000000000..cd5f804ab6 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/expected.js @@ -0,0 +1,13 @@ +define(['exports', 'foo'], function (exports, _foo) { + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + Object.defineProperty(exports, 'default', { + enumerable: true, + get: function () { + return _foo.default; + } + }); +}); diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/options.json b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/options.json new file mode 100644 index 0000000000..096d2b9404 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-export-from/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", ["transform-es2015-modules-amd", { "noInterop": true }]] +} diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/actual.js b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/actual.js new file mode 100644 index 0000000000..44567cb185 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/actual.js @@ -0,0 +1,3 @@ +import foo from "foo"; + +foo; diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/expected.js b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/expected.js new file mode 100644 index 0000000000..acdfb3b580 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/expected.js @@ -0,0 +1,5 @@ +define(["foo"], function (_foo) { + "use strict"; + + _foo.default; +}); diff --git a/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/options.json b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/options.json new file mode 100644 index 0000000000..096d2b9404 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-amd/test/fixtures/amd/noInterop-import-default-only/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", ["transform-es2015-modules-amd", { "noInterop": true }]] +} 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 74af212c55..2afc2d6fbb 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js @@ -150,6 +150,7 @@ export default function () { this.ranCommonJS = true; const strict = !!this.opts.strict; + const noInterop = !!this.opts.noInterop; const { scope } = path; @@ -326,7 +327,7 @@ export default function () { } else if (specifier.isExportDefaultSpecifier()) { // todo } else if (specifier.isExportSpecifier()) { - if (specifier.node.local.name === "default") { + if (!noInterop && specifier.node.local.name === "default") { topNodes.push(buildExportsFrom(t.stringLiteral(specifier.node.exported.name), t.memberExpression( t.callExpression(this.addHelper("interopRequireDefault"), [ref]), @@ -370,7 +371,7 @@ export default function () { for (let i = 0; i < specifiers.length; i++) { const specifier = specifiers[i]; if (t.isImportNamespaceSpecifier(specifier)) { - if (strict) { + if (strict || noInterop) { remaps[specifier.local.name] = uid; } else { const varDecl = t.variableDeclaration("var", [ @@ -401,7 +402,7 @@ export default function () { if (specifier.imported.name === "default") { if (wildcard) { target = wildcard; - } else { + } else if (!noInterop) { target = wildcard = path.scope.generateUidIdentifier(uid.name); const varDecl = t.variableDeclaration("var", [ t.variableDeclarator( diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/actual.js new file mode 100644 index 0000000000..7d2c9b022e --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/actual.js @@ -0,0 +1 @@ +export { default } from 'foo'; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/expected.js new file mode 100644 index 0000000000..c986dfedbb --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/export-from/expected.js @@ -0,0 +1,14 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _foo = require('foo'); + +Object.defineProperty(exports, 'default', { + enumerable: true, + get: function () { + return _foo.default; + } +}); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/actual.js new file mode 100644 index 0000000000..65b75b7293 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/actual.js @@ -0,0 +1,3 @@ +import foo from "foo"; + +foo(); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/expected.js new file mode 100644 index 0000000000..1bc59ef949 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-default-only/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +var _foo = require("foo"); + +(0, _foo.default)(); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/actual.js new file mode 100644 index 0000000000..bf67ef46a2 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/actual.js @@ -0,0 +1,4 @@ +import * as foo from 'foo'; + +foo.bar(); +foo.baz(); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/expected.js new file mode 100644 index 0000000000..284db9decd --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/import-wildcard/expected.js @@ -0,0 +1,6 @@ +'use strict'; + +var _foo = require('foo'); + +_foo.bar(); +_foo.baz(); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/options.json b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/options.json new file mode 100644 index 0000000000..b2a35b9fc8 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/noInterop/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", ["transform-es2015-modules-commonjs", { "noInterop": true }]] +} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/actual.js new file mode 100644 index 0000000000..bf67ef46a2 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/actual.js @@ -0,0 +1,4 @@ +import * as foo from 'foo'; + +foo.bar(); +foo.baz(); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/expected.js new file mode 100644 index 0000000000..284db9decd --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/import-wildcard/expected.js @@ -0,0 +1,6 @@ +'use strict'; + +var _foo = require('foo'); + +_foo.bar(); +_foo.baz(); From 290995923e3b1f0f828f062487e8f2095f56ee62 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Mon, 6 Mar 2017 20:19:38 -0500 Subject: [PATCH 04/13] Add docs for strict and noInterop with es2015-modules-commonjs. (cherry picked from commit 23de276718eda141b7a02934851256462e6b762e) --- .../README.md | 4 ++ .../README.md | 45 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/babel-plugin-transform-es2015-modules-amd/README.md b/packages/babel-plugin-transform-es2015-modules-amd/README.md index 04455655ac..bf54c82a75 100644 --- a/packages/babel-plugin-transform-es2015-modules-amd/README.md +++ b/packages/babel-plugin-transform-es2015-modules-amd/README.md @@ -55,3 +55,7 @@ require("babel-core").transform("code", { plugins: ["transform-es2015-modules-amd"] }); ``` + +### Options + +See options for `babel-plugin-transform-es2015-commonjs`. diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/README.md b/packages/babel-plugin-transform-es2015-modules-commonjs/README.md index 3a802ab571..33088cc868 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/README.md +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/README.md @@ -82,10 +82,53 @@ Object.defineProperty(exports, "__esModule", { }); ``` -In environments that don't support this you can enable loose mode on `es6.modules` +In environments that don't support this you can enable loose mode on `babel-plugin-transform-es20150-modules-commonjs` and instead of using `Object.defineProperty` an assignment will be used instead. ```javascript var foo = exports.foo = 5; exports.__esModule = true; ``` + +### `strict` + +`boolean`, defaults to `false` + +By default, when using exports with babel a non-enumerable `__esModule` property +is exported. In some cases this property is used to determine if the import _is_ the +default export or if it _contains_ the default export. + +```javascript +var foo = exports.foo = 5; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +``` + +In order to prevent the `__esModule` property from being exported, you can set +the `strict` option to `true`. + +### `noInterop` + +`boolean`, defaults to `false` + +By default, when using exports with babel a non-enumerable `__esModule` property +is exported. This property is then used to determine if the import _is_ the default +export or if it _contains_ the default export. + +```javascript +"use strict"; + +var _foo = require("foo"); + +var _foo2 = _interopRequireDefault(_foo); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} +``` + +In cases where the auto-unwrapping of `default` is not needed, you can set the +`noInterop` option to `true` to avoid the usage of the `interopRequireDefault` +helper (shown in inline form above). From 3d52d30e49e75e4fcc556768490bd727e55e99dc Mon Sep 17 00:00:00 2001 From: Seth Bergman Date: Sun, 12 Mar 2017 03:24:57 -0500 Subject: [PATCH 05/13] Fixed broken links in README.md [skip ci] (#5449) * Fixed broken links in README.md - [plugins](https://github.com/babel/babel/blob/master/docs/plugins) => [plugins](https://babeljs.io/docs/plugins/) - [presets](https://github.com/babel/babel/blob/master/docs/plugins/#presets) => [presets](https://babeljs.io/docs/plugins/preset-latest/) * Corrected the presets link [skip-ci] Changed to: ``` [presets](https://babeljs.io/docs/plugins/#presets) ``` --- packages/babel-core/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/babel-core/README.md b/packages/babel-core/README.md index 5b2f4d53d1..ebff1f1837 100644 --- a/packages/babel-core/README.md +++ b/packages/babel-core/README.md @@ -108,8 +108,8 @@ Following is a table of the options you can use: | `moduleRoot` | `(sourceRoot)` | Optional prefix for the AMD module formatter that will be prepend to the filename on module definitions. | | `only` | `null` | A [glob](https://github.com/isaacs/minimatch), regex, or mixed array of both, matching paths to **only** compile. Can also be an array of arrays containing paths to explicitly match. When attempting to compile a non-matching file it's returned verbatim. | | `parserOpts` | `{}` | An object containing the options to be passed down to the babel parser, babylon | -| `plugins` | `[]` | List of [plugins](/docs/plugins/) to load and use. | -| `presets` | `[]` | List of [presets](/docs/plugins/#presets) (a set of plugins) to load and use. | +| `plugins` | `[]` | List of [plugins](https://babeljs.io/docs/plugins/) to load and use. | +| `presets` | `[]` | List of [presets](https://babeljs.io/docs/plugins/#presets) (a set of plugins) to load and use. | | `retainLines` | `false` | Retain line numbers. This will lead to wacky code but is handy for scenarios where you can't use source maps. (**NOTE:** This will not retain the columns) | | `resolveModuleSource` | `null` | Resolve a module source ie. `import "SOURCE";` to a custom value. Called as `resolveModuleSource(source, filename)`. | | `shouldPrintComment` | `null` | An optional callback that controls whether a comment should be output or not. Called as `shouldPrintComment(commentContents)`. **NOTE:** This overrides the `comment` option when used. | From 2bb6dff00a4da92ae4d9afe86d14f6c82e9f20b3 Mon Sep 17 00:00:00 2001 From: Aaron Ang Date: Fri, 10 Mar 2017 06:49:28 -0800 Subject: [PATCH 06/13] Use absolute paths in Babel's CONTRIBUTING.md (#5431) --- CONTRIBUTING.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 340292b203..f979d6d797 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ ---- -

+

Setup | Running linting/tests @@ -27,7 +27,7 @@ Contributions are always welcome, no matter how large or small. - If you aren't just making a documentation change, you'll probably want to learn a bit about a few topics. - [ASTs](https://en.wikipedia.org/wiki/Abstract_syntax_tree) (Abstract Syntax Tree): The Babel AST [spec](https://github.com/babel/babylon/blob/master/ast/spec.md) is a bit different from [ESTree](https://github.com/estree/estree). The differences are listed [here](https://github.com/babel/babylon#output). - - This repository's [`/doc`](/doc) directory for notes on Babel's internals + - This repository's [`/doc`](https://github.com/babel/babel/tree/master/doc) directory for notes on Babel's internals - Check out [the Babel Plugin Handbook](https://github.com/thejameskyle/babel-handbook/blob/master/translations/en/plugin-handbook.md#babel-plugin-handbook) - core plugins are written the same way as any other plugin! - Check out [AST Explorer](http://astexplorer.net/#/scUfOmVOG5) to learn more about ASTs or make your own plugin in the browser - When you feel ready to finally jump into the babel source code a good start is to look out for issues which are labeled with [help-wanted](https://github.com/babel/babel/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) and/or [beginner-friendly](https://github.com/babel/babel/issues?q=is%3Aissue+is%3Aopen+label%3A%22beginner-friendly%22). @@ -44,7 +44,7 @@ Babel is built for node 0.10 and up but we develop using node 6. Make sure you a You can check this with `node -v` and `npm -v`. -#### Setup +### Setup ```sh $ git clone https://github.com/babel/babel @@ -74,7 +74,7 @@ If you wish to build a copy of Babel for distribution, then run: $ make build-dist ``` -#### Running linting/tests +### Running linting/tests You can run lint via: @@ -105,7 +105,7 @@ $ make test-only Most likely you'll want to focus in on a specific issue. -To run tests for a specific package in [packages](/packages), you can use the `TEST_ONLY` environment variable: +To run tests for a specific package in [packages](https://github.com/babel/babel/tree/master/packages), you can use the `TEST_ONLY` environment variable: ```sh $ TEST_ONLY=babel-cli make test @@ -130,27 +130,27 @@ $ BABEL_ENV=cov make build $ ./scripts/test-cov.sh ``` -#### Writing tests +### Writing tests -Most packages in [`/packages`](/packages) have a `test` folder, however some tests might be in other packages or in [`/packages/babel-core`](/packages/babel-core/test/fixtures). +Most packages in [`/packages`](https://github.com/babel/babel/tree/master/packages) have a `test` folder, however some tests might be in other packages or in [`/packages/babel-core`](https://github.com/babel/babel/tree/master/packages/babel-core/test/fixtures). -##### `babel-plugin-x` +#### `babel-plugin-x` All the Babel plugins (and other packages) that have a `/test/fixtures` are written in a similar way. -For example, in [`babel-plugin-transform-exponentiation-operator/test`](/packages/babel-plugin-transform-exponentiation-operator/test): +For example, in [`babel-plugin-transform-exponentiation-operator/test`](https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-exponentiation-operator/test): -- There is an `index.js` file. It imports our [test helper](/packages/babel-helper-plugin-test-runner). (You don't have to worry about this). -- There can be multiple folders under [`/fixtures`](/packages/babel-plugin-transform-exponentiation-operator/test/fixtures) - - There is an [`options.json`](/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/options.json) file whose function is similar to a `.babelrc` file, allowing you to pass in the plugins and settings you need for your tests. +- There is an `index.js` file. It imports our [test helper](https://github.com/babel/babel/tree/master/packages/babel-helper-plugin-test-runner). (You don't have to worry about this). +- There can be multiple folders under [`/fixtures`](https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-exponentiation-operator/test/fixtures) + - There is an [`options.json`](https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/options.json) file whose function is similar to a `.babelrc` file, allowing you to pass in the plugins and settings you need for your tests. - For this test, we only need the relevant plugin, so it's just `{ "plugins": ["transform-exponentiation-operator"] }`. - If necessary, you can have an `options.json` with different options in each subfolder. - In each subfolder, you can organize your directory structure by categories of tests. (Example: these folders can be named after the feature you are testing or can reference the issue number they fix) - Generally, there are two kinds of tests for plugins - - The first is a simple test of the input and output produced by running Babel on some code. We do this by creating an [`actual.js`](packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/binary/actual.js) file and an [`expected.js`](/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/binary/expected.js) file. + - The first is a simple test of the input and output produced by running Babel on some code. We do this by creating an [`actual.js`](https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/binary/actual.js) file and an [`expected.js`](https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/binary/expected.js) file. - If you need to expect an error, you can ignore creating the `expected.js` file and pass a new `throws` key to the `options.json` that contains the error string that is created. - - The second and preferred type is a test that actually evaluates the produced code and asserts that certain properties are true or false. We do this by creating an [`exec.js`](/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/comprehensive/exec.js) file. + - The second and preferred type is a test that actually evaluates the produced code and asserts that certain properties are true or false. We do this by creating an [`exec.js`](https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/comprehensive/exec.js) file. In an actual/expected test, you simply write out the code you want transformed in `actual.js`. @@ -183,7 +183,7 @@ If you need to check for an error that is thrown you can add to the `options.jso } ``` -##### Bootstrapping expected output +#### Bootstrapping expected output For both `babel-plugin-x` and `babylon`, you can easily generate an `expected.js`/`expected.json` automatically by just providing `actual.js` and running the tests as you usually would. @@ -199,7 +199,7 @@ For both `babel-plugin-x` and `babylon`, you can easily generate an `expected.js - expected.json (will be generated if not created) ``` -#### Debugging code +### Debugging code A common approach to debugging JavaScript code is to walk through the code using the [Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/) debugger. For illustration purposes, we are going to assume that we need to get a better understanding of [`Generator.generate()`](https://github.com/babel/babel/blob/b5246994b57f06af871be6a63dcc4c6fd41d94d6/packages/babel-generator/src/index.js#L32), which is responsible for generating code for a given AST. @@ -236,9 +236,9 @@ The debugger starts at the first executed line of code, which is Mocha's first l Click _Resume script execution_ Resume script execution button. to jump to the set breakpoint. Note that the code shown in Chrome DevTools is compiled code and therefore differs. -#### Internals +## Internals - AST spec ([babylon/ast/spec.md](https://github.com/babel/babylon/blob/master/ast/spec.md)) -- Versioning ([doc/design/versioning.md](./doc/design/versioning.md)) -- Monorepo ([doc/design/monorepo.md](./doc/design/monorepo.md)) -- Compiler environment support ([doc/design/compiler-environment-support.md](./doc/design/compiler-environment-support.md)) -- Compiler assumptions ([doc/design/compiler-assumptions.md](./doc/design/compiler-assumptions.md)) +- Versioning ([doc/design/versioning.md](https://github.com/babel/babel/blob/master/doc/design/versioning.md) +- Monorepo ([doc/design/monorepo.md](https://github.com/babel/babel/blob/master/doc/design/monorepo.md)) +- Compiler environment support ([doc/design/compiler-environment-support.md](https://github.com/babel/babel/blob/master/doc/design/compiler-environment-support.md)) +- Compiler assumptions ([doc/design/compiler-assumptions.md](https://github.com/babel/babel/blob/master/doc/design/compiler-assumptions.md)) From b78fc9b4d0080babaa04eff9f56ce78cfaccf55b Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Sun, 12 Mar 2017 21:40:38 -0400 Subject: [PATCH 07/13] Keep parentheses for logical expression when in await expression (fix #5428) (#5433) (#5453) --- packages/babel-generator/src/node/parentheses.js | 3 ++- .../test/fixtures/parentheses/await-expression/actual.js | 1 + .../test/fixtures/parentheses/await-expression/expected.js | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 5cf16c2324..f2ba48d320 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -50,7 +50,8 @@ export function Binary(node: Object, parent: Object): boolean { if ( ((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) || t.isUnaryLike(parent) || - (t.isMemberExpression(parent) && parent.object === node) + (t.isMemberExpression(parent) && parent.object === node) || + t.isAwaitExpression(parent) ) { return true; } diff --git a/packages/babel-generator/test/fixtures/parentheses/await-expression/actual.js b/packages/babel-generator/test/fixtures/parentheses/await-expression/actual.js index d4bdc6b74a..8289263007 100644 --- a/packages/babel-generator/test/fixtures/parentheses/await-expression/actual.js +++ b/packages/babel-generator/test/fixtures/parentheses/await-expression/actual.js @@ -5,6 +5,7 @@ async function asdf() { true ? (await 1) : (await 2); await (1 ? 2 : 3); await (await 1); + await (a || b); } async function a(b) { diff --git a/packages/babel-generator/test/fixtures/parentheses/await-expression/expected.js b/packages/babel-generator/test/fixtures/parentheses/await-expression/expected.js index dc2cb361e0..271a15791e 100644 --- a/packages/babel-generator/test/fixtures/parentheses/await-expression/expected.js +++ b/packages/babel-generator/test/fixtures/parentheses/await-expression/expected.js @@ -5,6 +5,7 @@ async function asdf() { true ? await 1 : await 2; await (1 ? 2 : 3); await await 1; + await (a || b); } async function a(b) { From a8cf9079a81569d584137fd2a266a6004721ea23 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Sun, 12 Mar 2017 22:03:19 -0400 Subject: [PATCH 08/13] changelog for 6.24.0 [skip ci] (#5452) --- CHANGELOG.md | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96d28278e1..3802a583f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,103 @@ _Note: Gaps between patch versions are faulty, broken or test releases._ See [CHANGELOG - 6to5](CHANGELOG-6to5.md) for the pre-4.0.0 version changelog. +## 6.24.0 (2017-03-13) + +A quick release for 2 features: + +- Thanks to @rwjblue, there is now a `noInterop` option for our `es2015-modules` transform to remove the `interopRequireDefault` and `interopRequireWildcard` helpers. + +Input + +```js +import foo from "foo"; +foo; +``` + +Regular Output + +```js +var _foo = require("foo"); +var _foo2 = _interopRequireDefault(_foo); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_foo2.default; +``` + +Output with option `noInterop` + +```js +"use strict"; +var _foo = require("foo"); +(0, _foo.default)(); +``` + +> This also helps [ember-cli migrate to Babel 6](https://github.com/ember-cli/ember-cli/pull/6828). + +- @izaakschroeder has added `dirname` to the preset constructor which presets can use to resolve things relative to files. + +Example usage of `fileContext.dirname` in a preset + +```js +module.exports = function preset (context, options, fileContext) { + if (/resolve-addons-relative-to-file$/.test(fileContext.dirname)) { + return { + plugins: ['plugin-here'], + }; + } + return {}; +}; +``` + +> This will help out with reusing a [`browserslist` file for babel-preset-env](https://github.com/babel/babel-preset-env/issues/26) and for plugins like https://github.com/tleunen/babel-plugin-module-resolver. + +#### :rocket: New Feature +* `babel-plugin-transform-es2015-modules-amd`, `babel-plugin-transform-es2015-modules-commonjs` + * [#5427](https://github.com/babel/babel/pull/5427) Backport `noInterop` flag for modules to 6.x. ([@rwjblue](https://github.com/rwjblue)) +* `babel-core` + * [#4834](https://github.com/babel/babel/pull/4834) Pass `dirname` as extra metadata to preset constructor. ([@izaakschroeder](https://github.com/izaakschroeder)) + +#### :bug: Bug Fix +* `babel-generator` + * [#5453](https://github.com/babel/babel/pull/5453) Keep parentheses for logical expression when in await expression. ([@aaronang](https://github.com/aaronang)) + * [#5339](https://github.com/babel/babel/pull/5339) Wrap some generated do expressions in parens. ([@zjmiller](https://github.com/zjmiller)) +* `babel-generator`, `babel-plugin-transform-object-rest-spread` + * [#5322](https://github.com/babel/babel/pull/5322) Fix for-await printing. ([@danez](https://github.com/danez)) + +#### :memo: Documentation + +* [#5449](https://github.com/babel/babel/pull/5449) Fixed broken links in README.md [skip-ci]. ([@sethbergman](https://github.com/sethbergman)) +* [#5409](https://github.com/babel/babel/pull/5409) Fix transform-object-rest-spread README. ([@existentialism](https://github.com/existentialism)) +* [#5379](https://github.com/babel/babel/pull/5379) Lint code snippets in READMEs. ([@xtuc](https://github.com/xtuc)) +* [#5334](https://github.com/babel/babel/pull/5334) Shorthand properties examples. ([@bhoule](https://github.com/bhoule)) +* [#5329](https://github.com/babel/babel/pull/5329) Update CONTRIBUTING.md with respect to coverage check [skip ci]. ([@zjmiller](https://github.com/zjmiller)) + +#### :house: Internal +* Other + * [#5338](https://github.com/babel/babel/pull/5338) Improve babel-generator's code coverage. ([@alxpy](https://github.com/alxpy)) + * [#5336](https://github.com/babel/babel/pull/5336) Enable codecov partial coverage. ([@danez](https://github.com/danez)) + * [#5350](https://github.com/babel/babel/pull/5350) Remove redundant NODE_ENV=test in Makefile. ([@aaronang](https://github.com/aaronang)) + * [#5312](https://github.com/babel/babel/pull/5312) [skip ci] Add devEngines to package.json. ([@yavorsky](https://github.com/yavorsky)) +* `babel-cli` + * [#5342](https://github.com/babel/babel/pull/5342) Add test for passing arguments to babel-node (#5163). ([@outsideris](https://github.com/outsideris)) +* `babel-traverse` + * [#5296](https://github.com/babel/babel/pull/5296) Add test for reference paths. ([@jasonLaster](https://github.com/jasonLaster)) + +#### Committers: 14 +- Aaron Ang ([aaronang](https://github.com/aaronang)) +- Alex Kuzmenko ([alxpy](https://github.com/alxpy)) +- Artem Gurzhii ([artemgurzhii](https://github.com/artemgurzhii)) +- Artem Yavorsky ([yavorsky](https://github.com/yavorsky)) +- Brendan Houle ([bhoule](https://github.com/bhoule)) +- Brian Ng ([existentialism](https://github.com/existentialism)) +- Daniel Tschinder ([danez](https://github.com/danez)) +- Izaak Schroeder ([izaakschroeder](https://github.com/izaakschroeder)) +- Jason Laster ([jasonLaster](https://github.com/jasonLaster)) +- JeongHoon Byun (aka Outsider) ([outsideris](https://github.com/outsideris)) +- Robert Jackson ([rwjblue](https://github.com/rwjblue)) +- Seth Bergman ([sethbergman](https://github.com/sethbergman)) +- Sven SAULEAU ([xtuc](https://github.com/xtuc)) +- Zachary Miller ([zjmiller](https://github.com/zjmiller)) + ## 6.23.0 (2017-02-13) #### :rocket: New Feature From 71e4336f651a7d6ce5b56eefc19570582ca20a69 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Sun, 12 Mar 2017 22:18:08 -0400 Subject: [PATCH 09/13] v6.24.0 --- lerna.json | 2 +- packages/babel-cli/package.json | 6 +++--- packages/babel-core/package.json | 8 ++++---- packages/babel-generator/package.json | 2 +- .../babel-helper-plugin-test-runner/package.json | 4 ++-- .../package.json | 4 ++-- .../package.json | 6 +++--- .../package.json | 4 ++-- .../package.json | 6 +++--- packages/babel-preset-es2015/package.json | 12 ++++++------ packages/babel-preset-latest/package.json | 6 +++--- packages/babel-register/package.json | 4 ++-- 12 files changed, 32 insertions(+), 32 deletions(-) diff --git a/lerna.json b/lerna.json index 169db035c1..117685b8a5 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.0.0-beta.23", - "version": "6.23.1", + "version": "6.24.0", "changelog": { "repo": "babel/babel", "labels": { diff --git a/packages/babel-cli/package.json b/packages/babel-cli/package.json index b2f56d6cfa..650754193a 100644 --- a/packages/babel-cli/package.json +++ b/packages/babel-cli/package.json @@ -1,6 +1,6 @@ { "name": "babel-cli", - "version": "6.23.0", + "version": "6.24.0", "description": "Babel command line.", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", @@ -16,8 +16,8 @@ "compiler" ], "dependencies": { - "babel-core": "^6.23.0", - "babel-register": "^6.23.0", + "babel-core": "^6.24.0", + "babel-register": "^6.24.0", "babel-polyfill": "^6.23.0", "babel-runtime": "^6.22.0", "commander": "^2.8.1", diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index f9eecdac84..782335fc44 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -1,6 +1,6 @@ { "name": "babel-core", - "version": "6.23.1", + "version": "6.24.0", "description": "Babel compiler core.", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", @@ -27,12 +27,12 @@ }, "dependencies": { "babel-code-frame": "^6.22.0", - "babel-generator": "^6.23.0", + "babel-generator": "^6.24.0", "babel-helpers": "^6.23.0", "babel-messages": "^6.23.0", "babel-template": "^6.23.0", "babel-runtime": "^6.22.0", - "babel-register": "^6.23.0", + "babel-register": "^6.24.0", "babel-traverse": "^6.23.1", "babel-types": "^6.23.0", "babylon": "^6.11.0", @@ -48,7 +48,7 @@ }, "devDependencies": { "babel-helper-fixtures": "^6.22.0", - "babel-helper-transform-fixture-test-runner": "^6.23.0", + "babel-helper-transform-fixture-test-runner": "^6.24.0", "babel-polyfill": "^6.23.0" } } diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index 0212353f43..f306ab9665 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -1,6 +1,6 @@ { "name": "babel-generator", - "version": "6.23.0", + "version": "6.24.0", "description": "Turns an AST into code.", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", diff --git a/packages/babel-helper-plugin-test-runner/package.json b/packages/babel-helper-plugin-test-runner/package.json index c8b0dfa1f2..8e305b6964 100644 --- a/packages/babel-helper-plugin-test-runner/package.json +++ b/packages/babel-helper-plugin-test-runner/package.json @@ -1,12 +1,12 @@ { "name": "babel-helper-plugin-test-runner", - "version": "6.22.0", + "version": "6.24.0", "description": "Helper function to support test runner", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-plugin-test-runner", "license": "MIT", "main": "lib/index.js", "dependencies": { "babel-runtime": "^6.22.0", - "babel-helper-transform-fixture-test-runner": "^6.22.0" + "babel-helper-transform-fixture-test-runner": "^6.24.0" } } diff --git a/packages/babel-helper-transform-fixture-test-runner/package.json b/packages/babel-helper-transform-fixture-test-runner/package.json index 6b4b60f922..1f3b785bf5 100644 --- a/packages/babel-helper-transform-fixture-test-runner/package.json +++ b/packages/babel-helper-transform-fixture-test-runner/package.json @@ -1,6 +1,6 @@ { "name": "babel-helper-transform-fixture-test-runner", - "version": "6.23.0", + "version": "6.24.0", "description": "Transform test runner for babel-helper-fixtures module", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", @@ -9,7 +9,7 @@ "main": "lib/index.js", "dependencies": { "babel-runtime": "^6.22.0", - "babel-core": "^6.23.0", + "babel-core": "^6.24.0", "babel-polyfill": "^6.23.0", "babel-helper-fixtures": "^6.22.0", "source-map": "^0.5.0", diff --git a/packages/babel-plugin-transform-es2015-modules-amd/package.json b/packages/babel-plugin-transform-es2015-modules-amd/package.json index 81560058ad..d25079b7a3 100644 --- a/packages/babel-plugin-transform-es2015-modules-amd/package.json +++ b/packages/babel-plugin-transform-es2015-modules-amd/package.json @@ -1,12 +1,12 @@ { "name": "babel-plugin-transform-es2015-modules-amd", - "version": "6.22.0", + "version": "6.24.0", "description": "This plugin transforms ES2015 modules to AMD", "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-modules-amd", "license": "MIT", "main": "lib/index.js", "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.0", "babel-template": "^6.22.0", "babel-runtime": "^6.22.0" }, @@ -14,6 +14,6 @@ "babel-plugin" ], "devDependencies": { - "babel-helper-plugin-test-runner": "^6.22.0" + "babel-helper-plugin-test-runner": "^6.24.0" } } diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/package.json b/packages/babel-plugin-transform-es2015-modules-commonjs/package.json index 574befaf5f..148504224f 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/package.json +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-transform-es2015-modules-commonjs", - "version": "6.23.0", + "version": "6.24.0", "description": "This plugin transforms ES2015 modules to CommonJS", "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-modules-commonjs", "license": "MIT", @@ -15,6 +15,6 @@ "babel-plugin" ], "devDependencies": { - "babel-helper-plugin-test-runner": "^6.22.0" + "babel-helper-plugin-test-runner": "^6.24.0" } } diff --git a/packages/babel-plugin-transform-es2015-modules-umd/package.json b/packages/babel-plugin-transform-es2015-modules-umd/package.json index 8c424e9f1e..15e7dd4244 100644 --- a/packages/babel-plugin-transform-es2015-modules-umd/package.json +++ b/packages/babel-plugin-transform-es2015-modules-umd/package.json @@ -1,12 +1,12 @@ { "name": "babel-plugin-transform-es2015-modules-umd", - "version": "6.23.0", + "version": "6.24.0", "description": "This plugin transforms ES2015 modules to UMD", "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-modules-umd", "license": "MIT", "main": "lib/index.js", "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", "babel-template": "^6.23.0", "babel-runtime": "^6.22.0" }, @@ -14,6 +14,6 @@ "babel-plugin" ], "devDependencies": { - "babel-helper-plugin-test-runner": "^6.22.0" + "babel-helper-plugin-test-runner": "^6.24.0" } } diff --git a/packages/babel-preset-es2015/package.json b/packages/babel-preset-es2015/package.json index 78d66ad217..15cccddece 100644 --- a/packages/babel-preset-es2015/package.json +++ b/packages/babel-preset-es2015/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-es2015", - "version": "6.22.0", + "version": "6.24.0", "description": "Babel preset for all es2015 plugins.", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", @@ -19,10 +19,10 @@ "babel-plugin-transform-es2015-for-of": "^6.22.0", "babel-plugin-transform-es2015-function-name": "^6.22.0", "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.0", "babel-plugin-transform-es2015-modules-systemjs": "^6.22.0", - "babel-plugin-transform-es2015-modules-umd": "^6.22.0", + "babel-plugin-transform-es2015-modules-umd": "^6.24.0", "babel-plugin-transform-es2015-object-super": "^6.22.0", "babel-plugin-transform-es2015-parameters": "^6.22.0", "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", @@ -34,7 +34,7 @@ "babel-plugin-transform-regenerator": "^6.22.0" }, "devDependencies": { - "babel-helper-transform-fixture-test-runner": "^6.22.0", - "babel-helper-plugin-test-runner": "^6.22.0" + "babel-helper-transform-fixture-test-runner": "^6.24.0", + "babel-helper-plugin-test-runner": "^6.24.0" } } diff --git a/packages/babel-preset-latest/package.json b/packages/babel-preset-latest/package.json index f5a306981d..85791245c0 100644 --- a/packages/babel-preset-latest/package.json +++ b/packages/babel-preset-latest/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-latest", - "version": "6.22.0", + "version": "6.24.0", "description": "Babel preset including es2015+", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", @@ -8,11 +8,11 @@ "repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-latest", "main": "lib/index.js", "dependencies": { - "babel-preset-es2015": "^6.22.0", + "babel-preset-es2015": "^6.24.0", "babel-preset-es2016": "^6.22.0", "babel-preset-es2017": "^6.22.0" }, "devDependencies": { - "babel-helper-plugin-test-runner": "^6.22.0" + "babel-helper-plugin-test-runner": "^6.24.0" } } diff --git a/packages/babel-register/package.json b/packages/babel-register/package.json index 762d9a3360..2d1e7c7668 100644 --- a/packages/babel-register/package.json +++ b/packages/babel-register/package.json @@ -1,6 +1,6 @@ { "name": "babel-register", - "version": "6.23.0", + "version": "6.24.0", "description": "babel require hook", "license": "MIT", "repository": "https://github.com/babel/babel/tree/master/packages/babel-register", @@ -8,7 +8,7 @@ "main": "lib/node.js", "browser": "lib/browser.js", "dependencies": { - "babel-core": "^6.23.0", + "babel-core": "^6.24.0", "babel-runtime": "^6.22.0", "core-js": "^2.4.0", "home-or-tmp": "^2.0.0", From e30197b96bda5182e794aadd5ab09263175a1349 Mon Sep 17 00:00:00 2001 From: Sven SAULEAU Date: Thu, 16 Mar 2017 08:53:38 +0100 Subject: [PATCH 10/13] docs: [skip ci] update documentation --- packages/babel-generator/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/babel-generator/README.md b/packages/babel-generator/README.md index 46a4c051b3..a337191353 100644 --- a/packages/babel-generator/README.md +++ b/packages/babel-generator/README.md @@ -39,6 +39,7 @@ quotes | `'single'` or `'double'` | autodetect based on `ast.tok filename | string | | Used in warning messages flowCommaSeparator | boolean | `false` | Set to `true` to use commas instead of semicolons as Flow property separators jsonCompatibleStrings | boolean | `false` | Set to true to run `jsesc` with "json": true to print "\u00A9" vs. "©"; + Options for source maps: name | type | default | description From 8859715893cd2cc7d94993abbf02fc233bed9cc6 Mon Sep 17 00:00:00 2001 From: Ryan Paul Date: Thu, 16 Mar 2017 14:17:37 -0600 Subject: [PATCH 11/13] Removes unused lodash dependency from babel-helper-builder-react-jsx (#5486) --- packages/babel-helper-builder-react-jsx/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/babel-helper-builder-react-jsx/package.json b/packages/babel-helper-builder-react-jsx/package.json index 6fed8d9b0d..92fb33891d 100644 --- a/packages/babel-helper-builder-react-jsx/package.json +++ b/packages/babel-helper-builder-react-jsx/package.json @@ -8,7 +8,6 @@ "dependencies": { "babel-runtime": "^6.22.0", "babel-types": "^6.23.0", - "esutils": "^2.0.0", - "lodash": "^4.2.0" + "esutils": "^2.0.0" } } From 256fcbc58f3bed051b13523fcc2603cd3169c3a1 Mon Sep 17 00:00:00 2001 From: Diogo Franco Date: Sun, 19 Mar 2017 11:28:52 +0900 Subject: [PATCH 12/13] Treat "await" as an invalid identifier (#4954) It is valid (outside `async` functions) in the "script" parse goal, but always invalid in the "module" parse goal. Fixes #4952. --- .../test/fixtures/function-name/await/actual.js | 3 +++ .../test/fixtures/function-name/await/expected.js | 3 +++ packages/babel-types/src/validators.js | 3 +++ packages/babel-types/test/validators.js | 4 ++++ 4 files changed, 13 insertions(+) create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js new file mode 100644 index 0000000000..8f9c647db8 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js @@ -0,0 +1,3 @@ +export {}; + +var obj = { await: function () {} }; diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js new file mode 100644 index 0000000000..4289b26aa5 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js @@ -0,0 +1,3 @@ +export {}; + +var obj = { await: function _await() {} }; \ No newline at end of file diff --git a/packages/babel-types/src/validators.js b/packages/babel-types/src/validators.js index c5f25327bd..dc8143ae9d 100644 --- a/packages/babel-types/src/validators.js +++ b/packages/babel-types/src/validators.js @@ -167,6 +167,9 @@ export function isReferenced(node: Object, parent: Object): boolean { export function isValidIdentifier(name: string): boolean { if (typeof name !== "string" || esutils.keyword.isReservedWordES6(name, true)) { return false; + } else if (name === "await") { + // invalid in module, valid in script; better be safe (see #4952) + return false; } else { return esutils.keyword.isIdentifierNameES6(name); } diff --git a/packages/babel-types/test/validators.js b/packages/babel-types/test/validators.js index 2e7e55d085..ccc83f665b 100644 --- a/packages/babel-types/test/validators.js +++ b/packages/babel-types/test/validators.js @@ -26,5 +26,9 @@ suite("validators", function () { assert(t.isNodesEquivalent(parse(program), parse(program2)) === false); }); + + it("rejects 'await' as an identifier", function () { + assert(t.isValidIdentifier("await") === false); + }); }); }); From b3c7337face4f3b3154b154486aa31b1ba992fae Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Sun, 12 Mar 2017 22:23:51 -0400 Subject: [PATCH 13/13] Fix changelog [skip ci] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3802a583f7..f90ac42c12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -110,6 +110,10 @@ module.exports = function preset (context, options, fileContext) { - Sven SAULEAU ([xtuc](https://github.com/xtuc)) - Zachary Miller ([zjmiller](https://github.com/zjmiller)) +## 6.23.1 (2017-02-13) + +Regression: Revert https://github.com/babel/babel/pull/5306 since it made a backwards-incompatible change. + ## 6.23.0 (2017-02-13) #### :rocket: New Feature