From 4a252b9d82d576d5e4b88be8aa5f4d9e4726568d Mon Sep 17 00:00:00 2001 From: Farfurix Date: Wed, 29 Aug 2018 09:29:56 +0300 Subject: [PATCH 1/2] use `for...of` transform for client scripts --- package.json | 1 + src/client/.babelrc | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 0cdee323ab5..824148f7957 100644 --- a/package.json +++ b/package.json @@ -124,6 +124,7 @@ "@types/chai": "^3.5.2", "babel-eslint": "^7.1.1", "babel-plugin-add-module-exports": "^0.2.0", + "babel-plugin-transform-for-of-as-array": "^1.1.1", "basic-auth": "^1.1.0", "body-parser": "^1.17.1", "broken-link-checker": "^0.7.0", diff --git a/src/client/.babelrc b/src/client/.babelrc index c1e2c3a3347..6461c77e42e 100644 --- a/src/client/.babelrc +++ b/src/client/.babelrc @@ -4,6 +4,7 @@ ["env", { "loose": true }] ], "plugins": [ - "add-module-exports" + "add-module-exports", + "transform-for-of-as-array" ] } From d46be2f58a1fa9239d92f0f221b8a024a370f088 Mon Sep 17 00:00:00 2001 From: Farfurix Date: Fri, 31 Aug 2018 13:10:03 +0300 Subject: [PATCH 2/2] update client script Babel config, update client functions Babel config --- package.json | 2 +- src/client/.babelrc | 7 ++++++- src/compiler/compile-client-function.js | 18 +++--------------- src/compiler/load-babel-libs.js | 10 +++++++++- test/server/compiler-test.js | 4 ---- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 824148f7957..2d586f7fd51 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "async-exit-hook": "^1.1.2", "babel-core": "^6.22.1", "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-for-of-as-array": "^1.1.1", "babel-plugin-transform-runtime": "^6.22.0", "babel-preset-env": "^1.1.8", "babel-preset-flow": "^6.23.0", @@ -124,7 +125,6 @@ "@types/chai": "^3.5.2", "babel-eslint": "^7.1.1", "babel-plugin-add-module-exports": "^0.2.0", - "babel-plugin-transform-for-of-as-array": "^1.1.1", "basic-auth": "^1.1.0", "body-parser": "^1.17.1", "broken-link-checker": "^0.7.0", diff --git a/src/client/.babelrc b/src/client/.babelrc index 6461c77e42e..689ed47196f 100644 --- a/src/client/.babelrc +++ b/src/client/.babelrc @@ -1,7 +1,12 @@ { "compact": false, "presets": [ - ["env", { "loose": true }] + ["env", { + "loose": true, + "exclude": [ + "transform-es2015-typeof-symbol" + ] + }] ], "plugins": [ "add-module-exports", diff --git a/src/compiler/compile-client-function.js b/src/compiler/compile-client-function.js index d2b535ccfd8..588d79ba243 100644 --- a/src/compiler/compile-client-function.js +++ b/src/compiler/compile-client-function.js @@ -1,6 +1,6 @@ import hammerhead from 'testcafe-hammerhead'; import asyncToGenerator from 'babel-runtime/helpers/asyncToGenerator'; -import { noop, escapeRegExp as escapeRe } from 'lodash'; +import { noop } from 'lodash'; import loadBabelLibs from './load-babel-libs'; import { ClientFunctionAPIError } from '../errors/runtime'; import MESSAGE from '../errors/runtime/message'; @@ -29,27 +29,15 @@ var babelArtifactPolyfills = { re: /_stringify(\d+)\.default/, getCode: match => `var _stringify${match[1]} = { default: JSON.stringify };`, removeMatchingCode: false - }, - - 'typeof': { - re: new RegExp(escapeRe( - 'var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? ' + - 'function (obj) {return typeof obj;} : ' + - 'function (obj) {return obj && typeof Symbol === "function" && obj.constructor === Symbol ' + - '&& obj !== Symbol.prototype ? "symbol" : typeof obj;};' - ), 'g'), - - getCode: () => 'var _typeof = function(obj) { return typeof obj; };', - removeMatchingCode: true } }; function getBabelOptions () { - var { presetFallback } = loadBabelLibs(); + var { presetFallback, transformForOfAsArray } = loadBabelLibs(); return { - presets: [presetFallback], + presets: [{ plugins: [transformForOfAsArray] }, presetFallback], sourceMaps: false, retainLines: true, ast: false, diff --git a/src/compiler/load-babel-libs.js b/src/compiler/load-babel-libs.js index ea2bdd69fbb..5ed029828fc 100644 --- a/src/compiler/load-babel-libs.js +++ b/src/compiler/load-babel-libs.js @@ -6,6 +6,13 @@ function getOptsForPresetEnv () { }; } +function getOptsForPresetFallback () { + return { + loose: true, + exclude: ['transform-es2015-typeof-symbol'] + }; +} + // NOTE: lazy load heavy dependencies export default function loadBabelLibs () { return { @@ -14,7 +21,8 @@ export default function loadBabelLibs () { presetFlow: require('babel-preset-flow'), transformClassProperties: require('babel-plugin-transform-class-properties'), transformRuntime: require('babel-plugin-transform-runtime'), - presetFallback: require('babel-preset-env').default(null, { loose: true }), + transformForOfAsArray: require('babel-plugin-transform-for-of-as-array').default, + presetFallback: require('babel-preset-env').default(null, getOptsForPresetFallback()), presetEnv: require('babel-preset-env').default(null, getOptsForPresetEnv()) }; } diff --git a/test/server/compiler-test.js b/test/server/compiler-test.js index 5f8a3cf5e7f..50362506b1c 100644 --- a/test/server/compiler-test.js +++ b/test/server/compiler-test.js @@ -455,10 +455,6 @@ describe('Compiler', function () { return testClientFnCompilation('json-stringify'); }); - it('Should polyfill Babel `typeof` artifacts', function () { - return testClientFnCompilation('typeof'); - }); - describe('Regression', function () { it('Should compile ES6 object method (GH-1279)', function () { return testClientFnCompilation('gh1279');