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"], 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) { 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);