diff --git a/package.json b/package.json index 9005897af5f..d9806d4c869 100644 --- a/package.json +++ b/package.json @@ -49,12 +49,11 @@ "prepublish": "publish-please guard" }, "dependencies": { - "babel-core": "^6.18.2", - "babel-plugin-transform-runtime": "^6.15.0", - "babel-preset-es2015": "^6.18.0", - "babel-preset-es2015-node4": "^2.1.0", - "babel-preset-stage-2": "^6.18.0", - "babel-runtime": "^6.18.0", + "babel-core": "^6.22.1", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-preset-env": "^1.1.8", + "babel-preset-stage-2": "^6.22.0", + "babel-runtime": "^6.22.0", "bin-v8-flags-filter": "^1.0.0", "callsite": "^1.0.0", "callsite-record": "^3.2.1", @@ -104,7 +103,7 @@ "useragent": "^2.1.7" }, "devDependencies": { - "babel-eslint": "^6.0.0", + "babel-eslint": "^7.1.1", "babel-plugin-add-module-exports": "^0.2.0", "basic-auth": "^1.1.0", "broken-link-checker": "^0.7.0", @@ -114,7 +113,7 @@ "del": "^2.2.0", "dom-walk": "^0.1.1", "error-stack-parser": "^1.3.3", - "eslint-plugin-babel": "^3.1.0", + "eslint-plugin-babel": "^4.0.1", "eslint-plugin-hammerhead": "0.0.6", "eslint-plugin-import": "^1.14.0", "express": "^4.13.3", @@ -129,7 +128,7 @@ "gulp-if": "^2.0.0", "gulp-less": "^3.0.3", "gulp-ll": "^1.0.1", - "gulp-mocha": "^2.1.2", + "gulp-mocha": "^3.0.1", "gulp-mustache": "^1.1.1", "gulp-prompt": "^0.2.0", "gulp-qunit-harness": "^0.1.10", diff --git a/src/.babelrc b/src/.babelrc index b463ddec0a8..9310dde9ccb 100644 --- a/src/.babelrc +++ b/src/.babelrc @@ -1,7 +1,7 @@ { "compact": false, "presets": [ - ["es2015", { "loose": true }], + ["env", { "loose": true }], "babel-preset-stage-2" ], "plugins": [ diff --git a/src/.eslintrc b/src/.eslintrc index 213f587c7f3..9da038d9e2f 100644 --- a/src/.eslintrc +++ b/src/.eslintrc @@ -1,6 +1,6 @@ { "rules": { - "babel/arrow-parens": [2, "as-needed"], + "arrow-parens": [2, "as-needed"], "arrow-spacing": [2, { "before": true, "after": true }], "prefer-arrow-callback": 2 }, diff --git a/src/client/.babelrc b/src/client/.babelrc index 791469081a2..c1e2c3a3347 100644 --- a/src/client/.babelrc +++ b/src/client/.babelrc @@ -1,7 +1,7 @@ { "compact": false, "presets": [ - ["es2015", { "loose": true }] + ["env", { "loose": true }] ], "plugins": [ "add-module-exports" diff --git a/src/compiler/es-next/compile-client-function.js b/src/compiler/es-next/compile-client-function.js index bb02daef566..7dd232ad236 100644 --- a/src/compiler/es-next/compile-client-function.js +++ b/src/compiler/es-next/compile-client-function.js @@ -52,10 +52,10 @@ var babelArtifactPolyfills = { function getBabelOptions () { - var { presetES2015Loose } = loadBabelLibs(); + var { presetFallback } = loadBabelLibs(); return { - presets: [presetES2015Loose], + presets: [presetFallback], sourceMaps: false, retainLines: true, ast: false, diff --git a/src/compiler/es-next/index.js b/src/compiler/es-next/index.js index 665f8126a7c..4dc08aa35e2 100644 --- a/src/compiler/es-next/index.js +++ b/src/compiler/es-next/index.js @@ -3,7 +3,6 @@ import { readFileSync } from 'fs'; import stripBom from 'strip-bom'; import sourceMapSupport from 'source-map-support'; import loadBabelLibs from './load-babel-libs'; -import NODE_VER from '../../utils/node-version'; import Globals from '../../api/globals'; import { TestCompilationError, APIError } from '../../errors/runtime'; import stackCleaningHook from '../../errors/stack-cleaning-hook'; @@ -32,9 +31,7 @@ export default class ESNextCompiler { } static _getBabelOptions (filename) { - var { presetStage2, transformRuntime, presetES2015Loose, presetES2015Node4 } = loadBabelLibs(); - - var presetES2015 = NODE_VER < 4 ? presetES2015Loose : presetES2015Node4; + var { presetStage2, transformRuntime, presetEnv } = loadBabelLibs(); // NOTE: passPrePreset and complex presets is a workaround for https://github.com/babel/babel/issues/2877 // Fixes https://github.com/DevExpress/testcafe/issues/969 @@ -44,7 +41,7 @@ export default class ESNextCompiler { { plugins: transformRuntime }, { passPerPreset: false, - presets: [presetStage2, presetES2015] + presets: [presetStage2, presetEnv] } ], filename: filename, diff --git a/src/compiler/es-next/load-babel-libs.js b/src/compiler/es-next/load-babel-libs.js index 558eb4ed6cb..38a61d30b84 100644 --- a/src/compiler/es-next/load-babel-libs.js +++ b/src/compiler/es-next/load-babel-libs.js @@ -1,14 +1,24 @@ import NODE_VER from '../../utils/node-version'; +function getOptsForPresetEnv () { + var opts = { targets: { node: 'current' }, loose: true }; + + // NOTE: Disable transforming generators into state-machine for node>=4, because this versions have native generators. + // Also this versions have native template literals, regenerator do not work with them: + // https://github.com/facebook/regenerator/issues/276 + if (NODE_VER >= 4) + opts.exclude = ['transform-regenerator']; + + return opts; +} + // NOTE: lazy load heavy dependencies export default function loadBabelLibs () { return { - babel: require('babel-core'), - presetStage2: require('babel-preset-stage-2'), - transformRuntime: require('babel-plugin-transform-runtime'), - presetES2015Loose: require('babel-preset-es2015').buildPreset({ loose: true }), - - // NOTE: we don't need this preset if we are on older versions of Node - presetES2015Node4: NODE_VER >= 4 ? require('babel-preset-es2015-node4') : null + babel: require('babel-core'), + presetStage2: require('babel-preset-stage-2'), + transformRuntime: require('babel-plugin-transform-runtime'), + presetFallback: require('babel-preset-env').default(null, { loose: true }), + presetEnv: require('babel-preset-env').default(null, getOptsForPresetEnv()) }; } diff --git a/test/server/data/client-fn-compilation/basic/expected.js b/test/server/data/client-fn-compilation/basic/expected.js index 0a116d9e66b..d5f325c71e3 100644 --- a/test/server/data/client-fn-compilation/basic/expected.js +++ b/test/server/data/client-fn-compilation/basic/expected.js @@ -1,7 +1,7 @@ (function () { return (function () { - var _window$location = __get$(window, "location"); - var hostname = __get$(_window$location, "hostname"), + var _window$location = __get$(window, "location"), + hostname = __get$(_window$location, "hostname"), port = __get$(_window$location, "port"); return hostname + ':' + port; });