From 18ed718cddd4a4ce0c69fbf1e590d33be225d00a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 30 Mar 2021 13:24:14 +0200 Subject: [PATCH 1/3] Fix bug introduced by babel/babel#13024 --- .../babel-compat-data/scripts/utils-build-data.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/babel-compat-data/scripts/utils-build-data.js b/packages/babel-compat-data/scripts/utils-build-data.js index 05bd79dc062a..33e7dca92986 100644 --- a/packages/babel-compat-data/scripts/utils-build-data.js +++ b/packages/babel-compat-data/scripts/utils-build-data.js @@ -88,7 +88,10 @@ exports.getLowestImplementedVersion = ( }; exports.generateData = (environments, features) => { - return Object.values(features).map(options => { + const data = {}; + + // eslint-disable-next-line prefer-const + for (let [key, options] of Object.entries(features)) { if (!options.features) { options = { features: [options], @@ -103,8 +106,10 @@ exports.generateData = (environments, features) => { }); addElectronSupportFromChromium(plugin); - return plugin; - }); + data[key] = plugin; + } + + return data; }; exports.writeFile = function (data, dataPath, name) { From 2dbc43487054df141c4b43134c444c089ab93c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 30 Mar 2021 13:25:15 +0200 Subject: [PATCH 2/3] Compile spread when compiling classes --- packages/babel-compat-data/data/plugins.json | 2 +- .../babel-compat-data/scripts/data/plugin-features.js | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/babel-compat-data/data/plugins.json b/packages/babel-compat-data/data/plugins.json index 4c6bca47064f..bbc8eb991390 100644 --- a/packages/babel-compat-data/data/plugins.json +++ b/packages/babel-compat-data/data/plugins.json @@ -320,7 +320,7 @@ "chrome": "46", "opera": "33", "edge": "13", - "firefox": "36", + "firefox": "45", "safari": "10", "node": "5", "ios": "10", diff --git a/packages/babel-compat-data/scripts/data/plugin-features.js b/packages/babel-compat-data/scripts/data/plugin-features.js index 2e6c23a0e8f8..3c4a0298c075 100644 --- a/packages/babel-compat-data/scripts/data/plugin-features.js +++ b/packages/babel-compat-data/scripts/data/plugin-features.js @@ -72,7 +72,14 @@ const es2015 = { ], }, "transform-spread": { - features: ["spread syntax for iterable objects"], + features: [ + "spread syntax for iterable objects", + // We need to compile classes when spread is not supported, because + // we cannot compile super(...args) without also rewriting the + // "super" handling. There is a bugfix that makes it better. + "class", + "super", + ], }, "transform-destructuring": { features: ["destructuring, assignment", "destructuring, declarations"], From f07469078082de25e5d1a3c38f5b0c6273f890a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 30 Mar 2021 13:28:20 +0200 Subject: [PATCH 3/3] Add test --- .../spread-super-firefox-40/input.js | 5 +++++ .../spread-super-firefox-40/options.json | 4 ++++ .../spread-super-firefox-40/output.js | 14 ++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/input.js create mode 100644 packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/options.json create mode 100644 packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/output.js diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/input.js b/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/input.js new file mode 100644 index 000000000000..4e30b070c313 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/input.js @@ -0,0 +1,5 @@ +class A extends B { + constructor(args) { + super(...args) + } +} diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/options.json b/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/options.json new file mode 100644 index 000000000000..17c885dd7378 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/options.json @@ -0,0 +1,4 @@ +{ + "targets": "firefox 40", + "presets": ["env"] +} diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/output.js b/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/output.js new file mode 100644 index 000000000000..21dc7642a48e --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/spread-super-firefox-40/output.js @@ -0,0 +1,14 @@ +var A = /*#__PURE__*/function (_B) { + "use strict"; + + babelHelpers.inherits(A, _B); + + var _super = babelHelpers.createSuper(A); + + function A(args) { + babelHelpers.classCallCheck(this, A); + return _super.call.apply(_super, [this].concat(babelHelpers.toConsumableArray(args))); + } + + return A; +}(B);