diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a90d4b9f4..132aa7f628 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -143,7 +143,7 @@ See [CHANGELOG - 6to5](CHANGELOG-6to5.md) for the pre-4.0.0 version changelog. * The `Literal` node type has been unoverloaded and split into `BooleanLiteral`, `RegExpLiteral`, `NumericLiteral`, `StringLiteral` and `NullLiteral`. * The `SpreadProperty` (from `object-rest-spread`) node type has been split into `RestProperty` (for `ObjectPattern`) and `SpreadProperty` (for `ObjectExpression`) * Remove `module.exports` export interop for CommonJS module formatter. - * `externalHelpers` option has been moved into the plugin `babel-plugin-external-helper-2`. + * `externalHelpers` option has been moved into the plugin `babel-plugin-external-helpers-2`. * **New Feature** * Add plugin options. * Add callable class constructor. diff --git a/Makefile b/Makefile index 84f67b1d48..20f49dcddf 100644 --- a/Makefile +++ b/Makefile @@ -31,10 +31,12 @@ test-clean: rm -rf packages/*/test/tmp rm -rf packages/*/test-fixtures.json -test: lint +test-only: ./scripts/test.sh make test-clean +test: lint test-only + test-cov: clean BABEL_ENV=test; \ gulp build diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index 5441963c30..79970f5dd6 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -50,7 +50,7 @@ "regenerator": "0.8.35", "shebang-regex": "^1.0.0", "slash": "^1.0.0", - "source-map": "^0.4.0", + "source-map": "^0.5.0", "source-map-support": "^0.2.10" }, "devDependencies": { diff --git a/packages/babel-core/test/_transformation-helper.js b/packages/babel-core/test/_transformation-helper.js index 8ebe82db41..588d64df02 100644 --- a/packages/babel-core/test/_transformation-helper.js +++ b/packages/babel-core/test/_transformation-helper.js @@ -107,8 +107,8 @@ function run(task, done) { } }; - var fn = new Function("require", "done", "exports", execCode); - fn.call(global, fakeRequire, chai.assert, {}, done); + var fn = new Function("require", "assert", "exports", "done", "transform", execCode); + fn.call(global, fakeRequire, chai.assert, {}, done, transform); } catch (err) { err.message = exec.loc + ": " + err.message; err.message += codeFrame(execCode); diff --git a/packages/babel-core/test/fixtures/plugins/regression-2772/exec.js b/packages/babel-core/test/fixtures/plugins/regression-2772/exec.js new file mode 100644 index 0000000000..558dbeaa02 --- /dev/null +++ b/packages/babel-core/test/fixtures/plugins/regression-2772/exec.js @@ -0,0 +1,37 @@ +var code = ` +(function() { + function foo(b){ + b === "lol"; + foo(b); + } +})(); +`; + +transform(code, { + plugins: [ + function (b) { + var t = b.types; + return { + visitor: { + // Replace block statements with a new node without changing anything + BlockStatement: function(path) { + if (path.node.seen) { + return; + } + var node = t.blockStatement(path.node.body); + node.seen = true; + path.replaceWith(node); + }, + // do type inference + BinaryExpression: function(path) { + var left = path.get("left"); + var right = path.get("right"); + left.baseTypeStrictlyMatches(right); + } + } + }; + } + ], + compact: true, + comments: false, +}).code; diff --git a/packages/babel-core/test/fixtures/transformation/async-to-generator/object-method/actual.js b/packages/babel-core/test/fixtures/transformation/async-to-generator/object-method/actual.js new file mode 100644 index 0000000000..c6400ef2fa --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/async-to-generator/object-method/actual.js @@ -0,0 +1,6 @@ +let obj = { + a: 123, + async foo(bar) { + return await baz(bar); + } +} diff --git a/packages/babel-core/test/fixtures/transformation/async-to-generator/object-method/expected.js b/packages/babel-core/test/fixtures/transformation/async-to-generator/object-method/expected.js new file mode 100644 index 0000000000..7628e45eca --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/async-to-generator/object-method/expected.js @@ -0,0 +1,8 @@ +let obj = { + a: 123, + foo(bar) { + return babelHelpers.asyncToGenerator(function* () { + return yield baz(bar); + })(); + } +}; diff --git a/packages/babel-core/test/fixtures/transformation/es6.classes/export-super-class/actual.js b/packages/babel-core/test/fixtures/transformation/es6.classes/export-super-class/actual.js new file mode 100644 index 0000000000..76170bb418 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/es6.classes/export-super-class/actual.js @@ -0,0 +1 @@ +export default class extends A {} diff --git a/packages/babel-core/test/fixtures/transformation/es6.classes/export-super-class/expected.js b/packages/babel-core/test/fixtures/transformation/es6.classes/export-super-class/expected.js new file mode 100644 index 0000000000..62032a4013 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/es6.classes/export-super-class/expected.js @@ -0,0 +1,12 @@ +var _class = (function (_A) { + babelHelpers.inherits(_class, _A); + + function _class() { + babelHelpers.classCallCheck(this, _class); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments)); + } + + return _class; +})(A); + +export default _class; diff --git a/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/non-typeof/actual.js b/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/non-typeof/actual.js new file mode 100644 index 0000000000..b637888826 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/non-typeof/actual.js @@ -0,0 +1,5 @@ +export default function (number) { + if (!isNaN(number)) { + return 1; + } +} diff --git a/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/non-typeof/expected.js b/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/non-typeof/expected.js new file mode 100644 index 0000000000..b637888826 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/non-typeof/expected.js @@ -0,0 +1,5 @@ +export default function (number) { + if (!isNaN(number)) { + return 1; + } +} diff --git a/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/options.json b/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/options.json new file mode 100644 index 0000000000..a9b95ca6a3 --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/transform-es2015-typeof-symbol/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-es2015-typeof-symbol"] +} diff --git a/packages/babel-core/test/plugins.js b/packages/babel-core/test/plugins.js new file mode 100644 index 0000000000..93adae6413 --- /dev/null +++ b/packages/babel-core/test/plugins.js @@ -0,0 +1 @@ +require("./_transformation-helper").run("plugins"); diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index bd369d8c1a..ffa5d59da0 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -18,7 +18,7 @@ "is-integer": "^1.0.4", "lodash": "^3.10.1", "repeating": "^1.1.3", - "source-map": "^0.4.4", + "source-map": "^0.5.0", "trim-right": "^1.0.1" }, "devDependencies": { diff --git a/packages/babel-helper-remap-async-to-generator/src/index.js b/packages/babel-helper-remap-async-to-generator/src/index.js index 453f4c52ad..8a08e58ec4 100644 --- a/packages/babel-helper-remap-async-to-generator/src/index.js +++ b/packages/babel-helper-remap-async-to-generator/src/index.js @@ -24,7 +24,7 @@ let awaitVisitor = { } }; -function classMethod(path: NodePath, callId: Object) { +function classOrObjectMethod(path: NodePath, callId: Object) { let node = path.node; let body = node.body; @@ -99,8 +99,8 @@ export default function (path: NodePath, callId: Object) { path.traverse(awaitVisitor); - if (path.isClassMethod()) { - return classMethod(path, callId); + if (path.isClassMethod() || path.isObjectMethod()) { + return classOrObjectMethod(path, callId); } else { return plainFunction(path, callId); } diff --git a/packages/babel-messages/src/index.js b/packages/babel-messages/src/index.js index 53a769f1b1..5c136dc5f2 100644 --- a/packages/babel-messages/src/index.js +++ b/packages/babel-messages/src/index.js @@ -56,7 +56,7 @@ export function get(key: string, ...args): string { // replace $0 placeholders with args return msg.replace(/\$(\d+)/g, function (str, i) { - return args[--i]; + return args[i - 1]; }); } diff --git a/packages/babel-plugin-transform-es2015-classes/src/index.js b/packages/babel-plugin-transform-es2015-classes/src/index.js index 887890d343..9dc92babbb 100644 --- a/packages/babel-plugin-transform-es2015-classes/src/index.js +++ b/packages/babel-plugin-transform-es2015-classes/src/index.js @@ -8,13 +8,15 @@ export default function ({ types: t }) { ClassDeclaration(path) { let { node } = path; + let ref = node.id || path.scope.generateUidIdentifier("class"); + if (path.parentPath.isExportDefaultDeclaration()) { path = path.parentPath; - path.insertAfter(t.exportDefaultDeclaration(node.id)); + path.insertAfter(t.exportDefaultDeclaration(ref)); } path.replaceWith(t.variableDeclaration("let", [ - t.variableDeclarator(node.id, t.toExpression(node)) + t.variableDeclarator(ref, t.toExpression(node)) ])); }, diff --git a/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js b/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js index a3da0e6267..08df2600a8 100644 --- a/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js +++ b/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js @@ -6,7 +6,7 @@ export default function ({ types: t }) { UnaryExpression(path) { let { node, parent } = path; if (node[IGNORE]) return; - if (path.find(path => !!path.node._generated)) return; + if (path.find(path => path.node && !!path.node._generated)) return; if (path.parentPath.isBinaryExpression() && t.EQUALITY_BINARY_OPERATORS.indexOf(parent.operator) >= 0) { // optimise `typeof foo === "string"` since we can determine that they'll never need to handle symbols diff --git a/packages/babel-plugin-transform-regenerator/lib/visit.js b/packages/babel-plugin-transform-regenerator/lib/visit.js index 0f68ffc686..c4a0d2efb2 100644 --- a/packages/babel-plugin-transform-regenerator/lib/visit.js +++ b/packages/babel-plugin-transform-regenerator/lib/visit.js @@ -146,6 +146,10 @@ function getOuterFnExpr(funPath) { var node = funPath.node; t.assertFunction(node); + if (!node.id) { + node.id = funPath.scope.parent.generateUidIdentifier("callee"); + } + if (node.generator && // Non-generator functions don't need to be marked. t.isFunctionDeclaration(node)) { var pp = funPath.findParent(function (path) { @@ -171,9 +175,7 @@ function getOuterFnExpr(funPath) { ); } - return node.id || ( - node.id = funPath.scope.parent.generateUidIdentifier("callee") - ); + return node.id; } function getRuntimeMarkDecl(blockPath) { diff --git a/packages/babel-polyfill/scripts/build-dist.sh b/packages/babel-polyfill/scripts/build-dist.sh index 38f8477688..db5b2bd2ed 100755 --- a/packages/babel-polyfill/scripts/build-dist.sh +++ b/packages/babel-polyfill/scripts/build-dist.sh @@ -12,6 +12,6 @@ node $BROWSERIFY_CMD lib/index.js \ --plugin derequire/plugin \ >dist/polyfill.js node $UGLIFY_CMD dist/polyfill.js \ - --compress warnings=false \ - --mangle \ + --compress keep_fnames,keep_fargs,warnings=false \ + --mangle keep_fnames \ >dist/polyfill.min.js diff --git a/packages/babel-preset-react/index.js b/packages/babel-preset-react/index.js index b488ccb658..327f02e403 100644 --- a/packages/babel-preset-react/index.js +++ b/packages/babel-preset-react/index.js @@ -4,5 +4,6 @@ module.exports = { require("babel-plugin-transform-flow-strip-types"), require("babel-plugin-syntax-flow"), require("babel-plugin-syntax-jsx"), + require("babel-plugin-transform-react-display-name"), ] }; diff --git a/packages/babel-preset-react/package.json b/packages/babel-preset-react/package.json index c71eb9e293..11d4a13297 100644 --- a/packages/babel-preset-react/package.json +++ b/packages/babel-preset-react/package.json @@ -10,7 +10,8 @@ "dependencies": { "babel-plugin-syntax-flow": "^6.0.14", "babel-plugin-syntax-jsx": "^6.0.14", - "babel-plugin-transform-react-jsx": "^6.0.14", - "babel-plugin-transform-flow-strip-types": "^6.0.14" + "babel-plugin-transform-flow-strip-types": "^6.0.14", + "babel-plugin-transform-react-display-name": "^6.0.14", + "babel-plugin-transform-react-jsx": "^6.0.14" } }