Skip to content

Commit

Permalink
Compile classes when spread is unsupported (#13075)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Mar 31, 2021
1 parent 3e174e9 commit d563773
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 5 deletions.
2 changes: 1 addition & 1 deletion packages/babel-compat-data/data/plugins.json
Expand Up @@ -320,7 +320,7 @@
"chrome": "46",
"opera": "33",
"edge": "13",
"firefox": "36",
"firefox": "45",
"safari": "10",
"node": "5",
"ios": "10",
Expand Down
9 changes: 8 additions & 1 deletion packages/babel-compat-data/scripts/data/plugin-features.js
Expand Up @@ -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"],
Expand Down
11 changes: 8 additions & 3 deletions packages/babel-compat-data/scripts/utils-build-data.js
Expand Up @@ -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],
Expand All @@ -103,8 +106,10 @@ exports.generateData = (environments, features) => {
});
addElectronSupportFromChromium(plugin);

return plugin;
});
data[key] = plugin;
}

return data;
};

exports.writeFile = function (data, dataPath, name) {
Expand Down
@@ -0,0 +1,5 @@
class A extends B {
constructor(args) {
super(...args)
}
}
@@ -0,0 +1,4 @@
{
"targets": "firefox 40",
"presets": ["env"]
}
@@ -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);

0 comments on commit d563773

Please sign in to comment.