From dc76b43519c340f003173a95291e5fe0d406c192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Sun, 9 Sep 2018 20:08:17 +0200 Subject: [PATCH] Allow extending untranspiled classes --- .../misc/regression-1155/options.json | 2 +- .../misc/regression-1155/output.js | 4 +- packages/babel-helpers/src/helpers.js | 31 +++++++++-- .../test/fixtures/nested-class/options.json | 2 +- .../nested-class/super-call-in-key/output.js | 4 +- .../super-property-in-key/output.js | 4 +- .../derived-multiple-supers/output.js | 6 +- .../fixtures/private-loose/derived/output.js | 4 +- .../fixtures/private-loose/foobar/output.js | 4 +- .../test/fixtures/private-loose/options.json | 7 +-- .../private-in-derived/output.js | 4 +- .../private-loose/super-expression/output.js | 4 +- .../private-loose/super-statement/output.js | 4 +- .../private/derived-multiple-supers/output.js | 6 +- .../test/fixtures/private/derived/output.js | 4 +- .../test/fixtures/private/foobar/output.js | 4 +- .../test/fixtures/private/options.json | 7 +-- .../private/private-in-derived/output.js | 4 +- .../fixtures/private/super-call/output.js | 4 +- .../private/super-expression/output.js | 4 +- .../private/super-statement/output.js | 4 +- .../fixtures/public-loose/derived/output.js | 4 +- .../fixtures/public-loose/foobar/options.json | 2 +- .../fixtures/public-loose/foobar/output.js | 4 +- .../test/fixtures/public-loose/options.json | 2 +- .../public-loose/regression-T6719/output.js | 4 +- .../public-loose/static-super/output.js | 4 +- .../public-loose/super-call/output.js | 4 +- .../public-loose/super-expression/output.js | 4 +- .../public-loose/super-statement/output.js | 4 +- .../public/derived-multiple-supers/output.js | 6 +- .../test/fixtures/public/derived/output.js | 4 +- .../test/fixtures/public/foobar/output.js | 8 ++- .../test/fixtures/public/options.json | 2 +- .../public/regression-T6719/output.js | 4 +- .../fixtures/public/static-super/output.js | 4 +- .../test/fixtures/public/super-call/output.js | 4 +- .../public/super-expression/output.js | 4 +- .../fixtures/public/super-statement/output.js | 4 +- .../test/fixtures/regression/6154/output.js | 10 +++- .../fixtures/regression/T6719/options.json | 2 +- .../test/fixtures/regression/T6719/output.js | 4 +- .../fixtures/legacy-regression/7030/output.js | 8 ++- .../src/transformClass.js | 26 +++++---- .../fixtures/extend-builtins/loose/output.js | 12 +++- .../extend-builtins/shadowed/output.js | 8 ++- .../fixtures/extend-builtins/spec/output.js | 10 +++- .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../get-set-loose/memoized-assign/output.js | 12 ++++ .../get-set-loose/memoized-update/output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 12 ++++ .../output.js | 14 +++-- .../output.js | 14 +++-- .../output.js | 14 +++-- .../output.js | 14 +++-- .../output.js | 14 +++-- .../output.js | 14 +++-- .../output.js | 14 +++-- .../output.js | 14 +++-- .../get-set/memoized-assign/output.js | 16 ++++-- .../get-set/memoized-update/output.js | 16 ++++-- .../output.js | 16 ++++-- .../output.js | 16 ++++-- .../output.js | 16 ++++-- .../output.js | 16 ++++-- .../output.js | 16 ++++-- .../output.js | 16 ++++-- .../output.js | 16 ++++-- .../with-superClass/output.js | 10 ++++ .../loose/accessing-super-class/output.js | 2 + .../accessing-super-properties/output.js | 2 + .../loose/calling-super-properties/output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../test/fixtures/loose/options.json | 2 +- .../output.js | 4 ++ .../test/fixtures/loose/super-class/output.js | 2 + .../test/fixtures/regression/2663/output.js | 8 ++- .../test/fixtures/regression/2694/output.js | 8 ++- .../test/fixtures/regression/2775/output.js | 8 ++- .../test/fixtures/regression/3028/output.js | 12 +++- .../test/fixtures/regression/5769/output.js | 8 ++- .../test/fixtures/regression/5817/output.js | 8 ++- .../test/fixtures/regression/8499/exec.js | 31 +++++++---- .../test/fixtures/regression/8499/input.js | 31 +++++++---- .../test/fixtures/regression/8499/output.js | 55 ++++++++++++------- .../test/fixtures/regression/T2494/output.js | 8 ++- .../test/fixtures/regression/T2997/output.js | 8 ++- .../test/fixtures/regression/T7537/output.js | 8 ++- .../spec/accessing-super-class/output.js | 10 ++-- .../spec/accessing-super-properties/output.js | 4 +- .../spec/calling-super-properties/output.js | 4 +- .../test/fixtures/spec/constructor/output.js | 4 +- .../output.js | 6 +- .../output.js | 4 +- .../output.js | 4 +- .../output.js | 4 +- .../output.js | 2 + .../output.js | 2 + .../output.js | 2 + .../spec/export-super-class/output.mjs | 4 +- .../spec/extend-untranspiled-class/exec.js | 35 ++++++++++++ .../nested-class-super-call-in-key/output.js | 4 +- .../output.js | 4 +- .../nested-object-super-call-in-key/output.js | 4 +- .../output.js | 4 +- .../test/fixtures/spec/options.json | 2 +- .../spec/super-class-anonymous/output.js | 20 +++++-- .../output.js | 8 ++- .../test/fixtures/spec/super-class/output.js | 4 +- .../spec/super-correct-new-target/exec.js | 14 +++++ .../spec/super-proto-modifications/exec.js | 15 +++++ .../output.js | 8 ++- .../output.js | 8 ++- .../options.json | 2 +- .../output.js | 4 +- .../options.json | 2 +- .../output.js | 4 +- .../options.json | 2 +- .../output.js | 4 +- .../output.js | 4 +- .../output.js | 4 +- .../output.js | 4 +- .../output.js | 4 +- .../output.js | 2 + .../output.js | 4 +- .../function-name/modules-3/output.js | 8 ++- .../parameters/rest-nested-iife/output.js | 8 ++- .../regression/6057-expanded/output.js | 14 +++-- .../output.js | 8 ++- .../corejs-useES6Modules/output.mjs | 9 ++- .../fixtures/use-options/corejs/output.mjs | 9 ++- .../useESModules-cjs-auto/output.js | 8 ++- .../use-options/useESModules-cjs/output.js | 8 ++- .../useESModules-mjs-auto/output.mjs | 8 ++- .../use-options/useESModules-mjs/output.mjs | 8 ++- .../output.js | 8 ++- .../plugins-integration/issue-7527/output.js | 10 +++- 152 files changed, 1013 insertions(+), 265 deletions(-) create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/extend-untranspiled-class/exec.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/super-correct-new-target/exec.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/super-proto-modifications/exec.js diff --git a/packages/babel-core/test/fixtures/transformation/misc/regression-1155/options.json b/packages/babel-core/test/fixtures/transformation/misc/regression-1155/options.json index cf0501f1cfba..d650f3fb41ba 100644 --- a/packages/babel-core/test/fixtures/transformation/misc/regression-1155/options.json +++ b/packages/babel-core/test/fixtures/transformation/misc/regression-1155/options.json @@ -1,7 +1,7 @@ { "plugins": [ "transform-classes", - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "transform-block-scoping" ] } diff --git a/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js b/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js index bd723923bd6b..7e4ac18f7b30 100644 --- a/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js +++ b/packages/babel-core/test/fixtures/transformation/misc/regression-1155/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo(options) { babelHelpers.classCallCheck(this, Foo); var parentOptions = {}; @@ -11,7 +13,7 @@ var Foo = /*#__PURE__*/function (_Bar) { this; }; - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this, parentOptions)); + return _super.call(this, parentOptions); } return Foo; diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 90a0bca64ab5..66b4e1fbfe25 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -502,10 +502,8 @@ helpers.setPrototypeOf = helper("7.0.0-beta.0")` } `; -helpers.construct = helper("7.0.0-beta.0")` - import setPrototypeOf from "setPrototypeOf"; - - function isNativeReflectConstruct() { +helpers.isNativeReflectConstruct = helper("7.9.0")` + export default function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; // core-js@3 @@ -529,6 +527,11 @@ helpers.construct = helper("7.0.0-beta.0")` return false; } } +`; + +helpers.construct = helper("7.0.0-beta.0")` + import setPrototypeOf from "setPrototypeOf"; + import isNativeReflectConstruct from "isNativeReflectConstruct"; export default function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { @@ -732,6 +735,26 @@ helpers.possibleConstructorReturn = helper("7.0.0-beta.0")` } `; +helpers.createSuper = helper("7.9.0")` + import getPrototypeOf from "getPrototypeOf"; + import isNativeReflectConstruct from "isNativeReflectConstruct"; + import possibleConstructorReturn from "possibleConstructorReturn"; + + export default function _createSuper(Derived) { + return function () { + var Super = getPrototypeOf(Derived), result; + if (isNativeReflectConstruct()) { + // NOTE: This doesn't work if this.__proto__.constructor has been modified. + var NewTarget = getPrototypeOf(this).constructor; + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + return possibleConstructorReturn(this, result); + } + } + `; + helpers.superPropBase = helper("7.0.0-beta.0")` import getPrototypeOf from "getPrototypeOf"; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/options.json index 0326c24fae36..c67f29027e57 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/options.json +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "proposal-class-properties", "transform-classes" ] diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-call-in-key/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-call-in-key/output.js index f40cc28647d3..412f97e6c007 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-call-in-key/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-call-in-key/output.js @@ -13,13 +13,15 @@ let Hello = function Hello() { let Outer = /*#__PURE__*/function (_Hello) { babelHelpers.inherits(Outer, _Hello); + var _super = babelHelpers.createSuper(Outer); + function Outer() { let _this2; var _this; babelHelpers.classCallCheck(this, Outer); - _this2 = _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this)); + _this2 = _this = _super.call(this); let Inner = function Inner() { babelHelpers.classCallCheck(this, Inner); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-property-in-key/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-property-in-key/output.js index 6b41f008719a..a78f558efdb8 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-property-in-key/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/nested-class/super-property-in-key/output.js @@ -17,13 +17,15 @@ let Hello = /*#__PURE__*/function () { let Outer = /*#__PURE__*/function (_Hello) { babelHelpers.inherits(Outer, _Hello); + var _super = babelHelpers.createSuper(Outer); + function Outer() { let _babelHelpers$get$cal; var _this; babelHelpers.classCallCheck(this, Outer); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this)); + _this = _super.call(this); _babelHelpers$get$cal = babelHelpers.get(babelHelpers.getPrototypeOf(Outer.prototype), "toString", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); let Inner = function Inner() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived-multiple-supers/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived-multiple-supers/output.js index 7a1b496bc087..bd303bc40a8f 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived-multiple-supers/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived-multiple-supers/output.js @@ -3,19 +3,21 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); if (condition) { - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); Object.defineProperty(babelHelpers.assertThisInitialized(_this), _bar, { writable: true, value: "foo" }); } else { - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); Object.defineProperty(babelHelpers.assertThisInitialized(_this), _bar, { writable: true, value: "foo" diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived/output.js index 5595be2ad7fa..e7be19c316d8 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/derived/output.js @@ -15,11 +15,13 @@ var Bar = /*#__PURE__*/function (_Foo) { babelHelpers.inherits(Bar, _Foo); + var _super = babelHelpers.createSuper(Bar); + function Bar(...args) { var _this; babelHelpers.classCallCheck(this, Bar); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Bar).call(this, ...args)); + _this = _super.call(this, ...args); Object.defineProperty(babelHelpers.assertThisInitialized(_this), _prop2, { writable: true, value: "bar" diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/foobar/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/foobar/output.js index a57b9bec1b26..663e43398a95 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/foobar/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/foobar/output.js @@ -3,11 +3,13 @@ var Child = /*#__PURE__*/function (_Parent) { babelHelpers.inherits(Child, _Parent); + var _super = babelHelpers.createSuper(Child); + function Child() { var _this; babelHelpers.classCallCheck(this, Child); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Child).call(this)); + _this = _super.call(this); Object.defineProperty(babelHelpers.assertThisInitialized(_this), _scopedFunctionWithThis, { writable: true, value: function value() { diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/options.json index 5e00622446a2..d0b48e090623 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/options.json +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/options.json @@ -1,11 +1,6 @@ { "plugins": [ - [ - "external-helpers", - { - "helperVersion": "7.0.2" - } - ], + ["external-helpers", { "helperVersion": "7.100.0" }], ["proposal-class-properties", { "loose": true }], "transform-classes", "transform-block-scoping", diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/private-in-derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/private-in-derived/output.js index e742b9aa1c4e..b2e775e1b463 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/private-in-derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/private-in-derived/output.js @@ -10,9 +10,11 @@ var Outer = function Outer() { var Test = /*#__PURE__*/function (_babelHelpers$classPr) { babelHelpers.inherits(Test, _babelHelpers$classPr); + var _super = babelHelpers.createSuper(Test); + function Test() { babelHelpers.classCallCheck(this, Test); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Test).apply(this, arguments)); + return _super.apply(this, arguments); } return Test; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-expression/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-expression/output.js index 18c55e366403..168fdba89b9d 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-expression/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-expression/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _temp, _this; babelHelpers.classCallCheck(this, Foo); - foo((_temp = _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)), Object.defineProperty(babelHelpers.assertThisInitialized(_this), _bar, { + foo((_temp = _this = _super.call(this), Object.defineProperty(babelHelpers.assertThisInitialized(_this), _bar, { writable: true, value: "foo" }), _temp)); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-statement/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-statement/output.js index 37aa66cd8e5a..72eee4648134 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-statement/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private-loose/super-statement/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); Object.defineProperty(babelHelpers.assertThisInitialized(_this), _bar, { writable: true, value: "foo" diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived-multiple-supers/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived-multiple-supers/output.js index 86d4806181b8..a8c4abcad7dd 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived-multiple-supers/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived-multiple-supers/output.js @@ -3,20 +3,22 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); if (condition) { - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); _bar.set(babelHelpers.assertThisInitialized(_this), { writable: true, value: "foo" }); } else { - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); _bar.set(babelHelpers.assertThisInitialized(_this), { writable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived/output.js index 3ec15a15d860..4aaeba669a96 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/derived/output.js @@ -16,11 +16,13 @@ var Bar = /*#__PURE__*/function (_Foo) { babelHelpers.inherits(Bar, _Foo); + var _super = babelHelpers.createSuper(Bar); + function Bar(...args) { var _this; babelHelpers.classCallCheck(this, Bar); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Bar).call(this, ...args)); + _this = _super.call(this, ...args); _prop2.set(babelHelpers.assertThisInitialized(_this), { writable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/foobar/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/foobar/output.js index 7f8529f19880..39314dc51ca5 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/foobar/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/foobar/output.js @@ -3,11 +3,13 @@ var Child = /*#__PURE__*/function (_Parent) { babelHelpers.inherits(Child, _Parent); + var _super = babelHelpers.createSuper(Child); + function Child() { var _this; babelHelpers.classCallCheck(this, Child); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Child).call(this)); + _this = _super.call(this); _scopedFunctionWithThis.set(babelHelpers.assertThisInitialized(_this), { writable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/options.json index 5e2180d412eb..1b96399c594a 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/options.json +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/options.json @@ -1,11 +1,6 @@ { "plugins": [ - [ - "external-helpers", - { - "helperVersion": "7.4.4" - } - ], + ["external-helpers", { "helperVersion": "7.100.0" }], "proposal-class-properties", "transform-classes", "transform-block-scoping", diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/private-in-derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/private-in-derived/output.js index 2880d3f768b8..fe872c14e0b9 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/private-in-derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/private-in-derived/output.js @@ -11,9 +11,11 @@ var Outer = function Outer() { var Test = /*#__PURE__*/function (_babelHelpers$classPr) { babelHelpers.inherits(Test, _babelHelpers$classPr); + var _super = babelHelpers.createSuper(Test); + function Test() { babelHelpers.classCallCheck(this, Test); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Test).apply(this, arguments)); + return _super.apply(this, arguments); } return Test; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-call/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-call/output.js index 013b10ff2f2d..ea5df3087aa5 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-call/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-call/output.js @@ -19,11 +19,13 @@ var B = /*#__PURE__*/function (_A) { babelHelpers.inherits(B, _A); + var _super = babelHelpers.createSuper(B); + function B(...args) { var _this; babelHelpers.classCallCheck(this, B); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(B).call(this, ...args)); + _this = _super.call(this, ...args); _foo.set(babelHelpers.assertThisInitialized(_this), { writable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-expression/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-expression/output.js index 8741caf92d71..30481ac4cb3e 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-expression/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-expression/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _temp, _this; babelHelpers.classCallCheck(this, Foo); - foo((_temp = _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)), _bar.set(babelHelpers.assertThisInitialized(_this), { + foo((_temp = _this = _super.call(this), _bar.set(babelHelpers.assertThisInitialized(_this), { writable: true, value: "foo" }), _temp)); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-statement/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-statement/output.js index 807f1c92350f..d795323464bf 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-statement/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/private/super-statement/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); _bar.set(babelHelpers.assertThisInitialized(_this), { writable: true, diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js index 40cdae4acda2..f4c7902b9a33 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/derived/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo(...args) { var _this; babelHelpers.classCallCheck(this, Foo); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this, ...args)); + _this = _super.call(this, ...args); _this.bar = "foo"; return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/options.json index f43ead744a23..2abcedf61cd4 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/options.json +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], ["proposal-class-properties", { "loose": true }] ], "presets": ["env"] diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js index 3b770f6bc2dd..86a6067497dc 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/foobar/output.js @@ -3,11 +3,13 @@ var Child = /*#__PURE__*/function (_Parent) { babelHelpers.inherits(Child, _Parent); + var _super = babelHelpers.createSuper(Child); + function Child() { var _this; babelHelpers.classCallCheck(this, Child); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Child).call(this)); + _this = _super.call(this); _this.scopedFunctionWithThis = function () { _this.name = {}; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/options.json index 524cdc31421b..d0b48e090623 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/options.json +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], ["proposal-class-properties", { "loose": true }], "transform-classes", "transform-block-scoping", diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js index 138ced973de8..337ecc232cb2 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/regression-T6719/output.js @@ -6,9 +6,11 @@ function withContext(ComposedComponent) { babelHelpers.inherits(WithContext, _Component); + var _super = babelHelpers.createSuper(WithContext); + function WithContext() { babelHelpers.classCallCheck(this, WithContext); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(WithContext).apply(this, arguments)); + return _super.apply(this, arguments); } return WithContext; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-super/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-super/output.js index 1ab9e4361426..f139990e47fb 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-super/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/static-super/output.js @@ -11,9 +11,11 @@ var B = /*#__PURE__*/function (_A) { babelHelpers.inherits(B, _A); + var _super = babelHelpers.createSuper(B); + function B() { babelHelpers.classCallCheck(this, B); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(B).apply(this, arguments)); + return _super.apply(this, arguments); } return B; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js index d5ec6898f582..b5c5aee2e870 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-call/output.js @@ -19,11 +19,13 @@ var B = /*#__PURE__*/function (_A) { babelHelpers.inherits(B, _A); + var _super = babelHelpers.createSuper(B); + function B(...args) { var _this; babelHelpers.classCallCheck(this, B); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(B).call(this, ...args)); + _this = _super.call(this, ...args); _this.foo = babelHelpers.get(babelHelpers.getPrototypeOf(B.prototype), "foo", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js index 1a7d62ff94c1..032dca07d841 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-expression/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _temp, _this; babelHelpers.classCallCheck(this, Foo); - foo((_temp = _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)), _this.bar = "foo", _temp)); + foo((_temp = _this = _super.call(this), _this.bar = "foo", _temp)); return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js index 181442f0b267..293dce824f2e 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public-loose/super-statement/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); _this.bar = "foo"; return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived-multiple-supers/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived-multiple-supers/output.js index 367c4d2a335e..6609659cb434 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived-multiple-supers/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived-multiple-supers/output.js @@ -3,16 +3,18 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); if (condition) { - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "bar", "foo"); } else { - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "bar", "foo"); } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js index 38a3cd1a368c..68f1b88a7914 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/derived/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo(...args) { var _this; babelHelpers.classCallCheck(this, Foo); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this, ...args)); + _this = _super.call(this, ...args); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "bar", "foo"); return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js index d84a299fd80b..9b47d54c7232 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/foobar/output.js @@ -1,13 +1,19 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var Child = /*#__PURE__*/function (_Parent) { "use strict"; babelHelpers.inherits(Child, _Parent); + var _super = _createSuper(Child); + function Child() { var _this; babelHelpers.classCallCheck(this, Child); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Child).call(this)); + _this = _super.call(this); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "scopedFunctionWithThis", function () { _this.name = {}; }); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/options.json index d19c255940b8..1b96399c594a 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/options.json +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "proposal-class-properties", "transform-classes", "transform-block-scoping", diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js index 45f40f424902..2ac7f4d8a222 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/regression-T6719/output.js @@ -6,9 +6,11 @@ function withContext(ComposedComponent) { babelHelpers.inherits(WithContext, _Component); + var _super = babelHelpers.createSuper(WithContext); + function WithContext() { babelHelpers.classCallCheck(this, WithContext); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(WithContext).apply(this, arguments)); + return _super.apply(this, arguments); } return WithContext; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-super/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-super/output.js index f7edb5e9e1ef..623ee42f2bf5 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-super/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/static-super/output.js @@ -11,9 +11,11 @@ var B = /*#__PURE__*/function (_A) { babelHelpers.inherits(B, _A); + var _super = babelHelpers.createSuper(B); + function B() { babelHelpers.classCallCheck(this, B); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(B).apply(this, arguments)); + return _super.apply(this, arguments); } return B; diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js index 8ab280c58f46..c9ce8c4eaaf1 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-call/output.js @@ -19,11 +19,13 @@ var B = /*#__PURE__*/function (_A) { babelHelpers.inherits(B, _A); + var _super = babelHelpers.createSuper(B); + function B(...args) { var _this; babelHelpers.classCallCheck(this, B); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(B).call(this, ...args)); + _this = _super.call(this, ...args); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "foo", babelHelpers.get(babelHelpers.getPrototypeOf(B.prototype), "foo", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this))); return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js index c2ca13b06dd2..7ede665cbf19 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-expression/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _temp, _this; babelHelpers.classCallCheck(this, Foo); - foo((_temp = _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)), babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "bar", "foo"), _temp)); + foo((_temp = _this = _super.call(this), babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "bar", "foo"), _temp)); return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js index 2d60c270929e..7de51e029296 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/public/super-statement/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "bar", "foo"); return _this; } diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js index a95ba0b77893..ed264028f1db 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/6154/output.js @@ -1,9 +1,13 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } @@ -26,9 +30,9 @@ var Test = function Test() { var Other = /*#__PURE__*/function (_Test) { _inherits(Other, _Test); - function Other() { - var _getPrototypeOf2; + var _super = _createSuper(Other); + function Other() { var _this; _classCallCheck(this, Other); @@ -37,7 +41,7 @@ var Test = function Test() { args[_key] = arguments[_key]; } - _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Other)).call.apply(_getPrototypeOf2, [this].concat(args))); + _this = _super.call.apply(_super, [this].concat(args)); _defineProperty(_assertThisInitialized(_this), "a", function () { return _get(_getPrototypeOf(Other.prototype), "test", _assertThisInitialized(_this)); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/options.json index 524cdc31421b..d0b48e090623 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/options.json +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], ["proposal-class-properties", { "loose": true }], "transform-classes", "transform-block-scoping", diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js index 138ced973de8..337ecc232cb2 100644 --- a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/T6719/output.js @@ -6,9 +6,11 @@ function withContext(ComposedComponent) { babelHelpers.inherits(WithContext, _Component); + var _super = babelHelpers.createSuper(WithContext); + function WithContext() { babelHelpers.classCallCheck(this, WithContext); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(WithContext).apply(this, arguments)); + return _super.apply(this, arguments); } return WithContext; diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/legacy-regression/7030/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/legacy-regression/7030/output.js index b9dd561412ba..7968206b020d 100644 --- a/packages/babel-plugin-proposal-decorators/test/fixtures/legacy-regression/7030/output.js +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/legacy-regression/7030/output.js @@ -2,10 +2,14 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -30,12 +34,14 @@ var A = /*#__PURE__*/function (_B) { _inherits(A, _B); + var _super = _createSuper(A); + function A(timestamp) { var _this; _classCallCheck(this, A); - _this = _possibleConstructorReturn(this, _getPrototypeOf(A).call(this)); + _this = _super.call(this); _this.timestamp = timestamp; _this.moment = moment(timestamp); return _this; diff --git a/packages/babel-plugin-transform-classes/src/transformClass.js b/packages/babel-plugin-transform-classes/src/transformClass.js index 308e2711abb0..86040d39bd31 100644 --- a/packages/babel-plugin-transform-classes/src/transformClass.js +++ b/packages/babel-plugin-transform-classes/src/transformClass.js @@ -35,6 +35,7 @@ export default function transformClass( classId: undefined, classRef: undefined, + superFnId: undefined, superName: undefined, superReturns: [], isDerived: false, @@ -257,7 +258,7 @@ export default function transformClass( } function wrapSuperCall(bareSuper, superRef, thisRef, body) { - let bareSuperNode = bareSuper.node; + const bareSuperNode = bareSuper.node; let call; if (classState.isLoose) { @@ -284,18 +285,11 @@ export default function transformClass( call = t.logicalExpression("||", bareSuperNode, t.thisExpression()); } else { - bareSuperNode = optimiseCall( - t.callExpression(classState.file.addHelper("getPrototypeOf"), [ - t.cloneNode(classState.classRef), - ]), + call = optimiseCall( + t.cloneNode(classState.superFnId), t.thisExpression(), bareSuperNode.arguments, ); - - call = t.callExpression( - classState.file.addHelper("possibleConstructorReturn"), - [t.thisExpression(), bareSuperNode], - ); } if ( @@ -544,7 +538,9 @@ export default function transformClass( function pushInheritsToBody() { if (!classState.isDerived || classState.pushedInherits) return; - setState({ pushedInherits: true }); + const superFnId = path.scope.generateUidIdentifier("super"); + + setState({ pushedInherits: true, superFnId }); // Unshift to ensure that the constructor inheritance is set up before // any properties can be assigned to the prototype. @@ -557,6 +553,14 @@ export default function transformClass( [t.cloneNode(classState.classRef), t.cloneNode(classState.superName)], ), ), + t.variableDeclaration("var", [ + t.variableDeclarator( + superFnId, + t.callExpression(classState.file.addHelper("createSuper"), [ + t.cloneNode(classState.classRef), + ]), + ), + ]), ); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js index c31cfcaef370..9230fff358ba 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/loose/output.js @@ -1,10 +1,16 @@ +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } -function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } -function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } @@ -17,6 +23,8 @@ var List = /*#__PURE__*/function (_Array) { _inheritsLoose(List, _Array); + var _super = _createSuper(List); + function List() { return _Array.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js index 0489c0111aec..52c3dde7f06c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/shadowed/output.js @@ -1,3 +1,7 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Array = function Array() { "use strict"; @@ -9,9 +13,11 @@ let List = /*#__PURE__*/function (_Array) { babelHelpers.inherits(List, _Array); + var _super = _createSuper(List); + function List() { babelHelpers.classCallCheck(this, List); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(List).apply(this, arguments)); + return _super.apply(this, arguments); } return List; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js index 7813c0c9e26a..0a7c551ef3b2 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/extend-builtins/spec/output.js @@ -1,5 +1,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } @@ -8,9 +10,9 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } -function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } -function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } @@ -23,10 +25,12 @@ var List = /*#__PURE__*/function (_Array) { _inherits(List, _Array); + var _super = _createSuper(List); + function List() { _classCallCheck(this, List); - return _possibleConstructorReturn(this, _getPrototypeOf(List).apply(this, arguments)); + return _super.apply(this, arguments); } return List; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-data-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-data-defined-on-parent/output.js index 36ae19da78ef..6d3415aa0afa 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-data-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-data-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = /*#__PURE__*/function () { @@ -19,6 +29,8 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-getter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-getter-defined-on-parent/output.js index 22e33e1fbd8f..f1371ed46c8b 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-getter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-getter-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } @@ -29,6 +39,8 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-not-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-not-defined-on-parent/output.js index 35437a744d3b..9ed97f0c2ec3 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-not-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-not-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -7,6 +17,8 @@ let Base = function Base() {}; let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-setter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-setter-defined-on-parent/output.js index 43755b886d77..9d25641c274e 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-setter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/call-semantics-setter-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } @@ -22,6 +32,8 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-data-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-data-defined-on-parent/output.js index 073dbb8f9086..bd5ee6020c49 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-data-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-data-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -9,6 +19,8 @@ Base.prototype.test = 1; let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-getter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-getter-defined-on-parent/output.js index e100018292d6..bd46ab982405 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-getter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-getter-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } @@ -25,6 +35,8 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-not-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-not-defined-on-parent/output.js index 62247a8c4d96..01ede98d6eef 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-not-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-not-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -7,6 +17,8 @@ let Base = function Base() {}; let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-setter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-setter-defined-on-parent/output.js index 9afd6ef654fc..ac67ea823f5d 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-setter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/get-semantics-setter-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } @@ -22,6 +32,8 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-assign/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-assign/output.js index 92cb4f6d39aa..c4161f1720e5 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-assign/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-assign/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -25,6 +35,8 @@ const proper = { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-update/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-update/output.js index 950af23a4295..9987a9ed6d77 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-update/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/memoized-update/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -25,6 +35,8 @@ const proper = { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-data-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-data-defined-on-parent/output.js index bfb30c85242a..a7dd5688f27d 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-data-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-data-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -13,6 +23,8 @@ Object.defineProperty(Base.prototype, 'test', { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-getter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-getter-defined-on-parent/output.js index 386a31be8017..e7ca2647c345 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-getter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-getter-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } @@ -27,6 +37,8 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-data-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-data-on-obj/output.js index 6bee588327f5..e756c975be8d 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-data-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-data-on-obj/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -7,6 +17,8 @@ let Base = function Base() {}; let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-getter-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-getter-on-obj/output.js index 80aa04f8ebeb..edb44eb565c6 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-getter-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-getter-on-obj/output.js @@ -4,6 +4,16 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -13,6 +23,8 @@ let called = false; let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-not-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-not-on-obj/output.js index 6035452d69ec..1bcaf2635a36 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-not-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-not-on-obj/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -7,6 +17,8 @@ let Base = function Base() {}; let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-setter-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-setter-on-obj/output.js index d3349f28f1ae..61368782c076 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-setter-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-not-defined-on-parent-setter-on-obj/output.js @@ -4,6 +4,16 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let Base = function Base() {}; @@ -13,6 +23,8 @@ let value = 2; let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-setter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-setter-defined-on-parent/output.js index 85df34460909..942849a17346 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-setter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set-loose/set-semantics-setter-defined-on-parent/output.js @@ -1,5 +1,15 @@ "use strict"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } @@ -24,6 +34,8 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inheritsLoose(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { return _Base.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-data-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-data-defined-on-parent/output.js index 94092e3ea30a..fc6e02de2af6 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-data-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-data-defined-on-parent/output.js @@ -1,12 +1,16 @@ "use strict"; +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -40,10 +44,12 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-getter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-getter-defined-on-parent/output.js index b8c0f6735a27..e3e9389b2950 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-getter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-getter-defined-on-parent/output.js @@ -1,12 +1,16 @@ "use strict"; +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -43,10 +47,12 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-not-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-not-defined-on-parent/output.js index 52c350d60ac2..b73753b42de4 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-not-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-not-defined-on-parent/output.js @@ -4,13 +4,17 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -27,10 +31,12 @@ let Base = function Base() { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-setter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-setter-defined-on-parent/output.js index 332e8eecebdb..3d75ce6c0f0c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-setter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/call-semantics-setter-defined-on-parent/output.js @@ -1,12 +1,16 @@ "use strict"; +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -38,10 +42,12 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-data-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-data-defined-on-parent/output.js index 0b3bc1d3c3fb..99744c1fb221 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-data-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-data-defined-on-parent/output.js @@ -4,13 +4,17 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -29,10 +33,12 @@ Base.prototype.test = 1; let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-getter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-getter-defined-on-parent/output.js index 87780db29acc..a2194ddfe0dd 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-getter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-getter-defined-on-parent/output.js @@ -1,12 +1,16 @@ "use strict"; +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -39,10 +43,12 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-not-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-not-defined-on-parent/output.js index 5c794632ab0d..513e835adcfa 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-not-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-not-defined-on-parent/output.js @@ -4,13 +4,17 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -27,10 +31,12 @@ let Base = function Base() { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-setter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-setter-defined-on-parent/output.js index 0d99c3dddfae..bacc7a5ef0b9 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-setter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/get-semantics-setter-defined-on-parent/output.js @@ -1,12 +1,16 @@ "use strict"; +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -38,10 +42,12 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-assign/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-assign/output.js index e710c472d2bb..127439825a30 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-assign/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-assign/output.js @@ -4,10 +4,6 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -18,6 +14,14 @@ function _get(target, property, receiver) { if (typeof Reflect !== "undefined" & function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -51,10 +55,12 @@ const proper = { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-update/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-update/output.js index 53cf010b978d..aa95d54b4856 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-update/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/memoized-update/output.js @@ -4,10 +4,6 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -18,6 +14,14 @@ function _get(target, property, receiver) { if (typeof Reflect !== "undefined" & function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -51,10 +55,12 @@ const proper = { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-data-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-data-defined-on-parent/output.js index 3549c37e6c43..b84eb4872827 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-data-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-data-defined-on-parent/output.js @@ -4,10 +4,6 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -16,6 +12,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -37,10 +41,12 @@ Object.defineProperty(Base.prototype, 'test', { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-getter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-getter-defined-on-parent/output.js index 16740dce8da5..9ee28a04d5ae 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-getter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-getter-defined-on-parent/output.js @@ -1,9 +1,5 @@ "use strict"; -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -12,6 +8,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -44,10 +48,12 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-data-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-data-on-obj/output.js index 5f181148a89c..50b3ac7c426c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-data-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-data-on-obj/output.js @@ -4,10 +4,6 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -16,6 +12,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -31,10 +35,12 @@ let Base = function Base() { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-getter-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-getter-on-obj/output.js index c7ea1bc767b7..0a42eebbd94f 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-getter-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-getter-on-obj/output.js @@ -4,10 +4,6 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -16,6 +12,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -31,10 +35,12 @@ let Base = function Base() { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-not-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-not-on-obj/output.js index 1f2bb71dcb0c..6bcda1bad1e2 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-not-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-not-on-obj/output.js @@ -4,10 +4,6 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -16,6 +12,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -31,10 +35,12 @@ let Base = function Base() { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-setter-on-obj/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-setter-on-obj/output.js index 3c1d12a6c202..16a236e4fa6c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-setter-on-obj/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-not-defined-on-parent-setter-on-obj/output.js @@ -4,10 +4,6 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -16,6 +12,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -33,10 +37,12 @@ let value = 2; let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-setter-defined-on-parent/output.js b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-setter-defined-on-parent/output.js index 9d848c45fc1e..afb937e48e13 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-setter-defined-on-parent/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/get-set/set-semantics-setter-defined-on-parent/output.js @@ -1,9 +1,5 @@ "use strict"; -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { set = Reflect.set; } else { set = function set(target, property, value, receiver) { var base = _superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { _defineProperty(receiver, property, value); } return true; }; } return set(target, property, value, receiver); } function _set(target, property, value, receiver, isStrict) { var s = set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error('failed to set property'); } return value; } @@ -12,6 +8,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -44,10 +48,12 @@ let Base = /*#__PURE__*/function () { let Obj = /*#__PURE__*/function (_Base) { _inherits(Obj, _Base); + var _super = _createSuper(Obj); + function Obj() { _classCallCheck(this, Obj); - return _possibleConstructorReturn(this, _getPrototypeOf(Obj).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Obj, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js index d2dd7f34e2ec..c08176afaad3 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose-classCallCheck/with-superClass/output.js @@ -1,5 +1,13 @@ +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } let B = function B() { @@ -11,6 +19,8 @@ let A = /*#__PURE__*/function (_B) { _inheritsLoose(A, _B); + var _super = _createSuper(A); + function A(track) { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js index eff73dbfb3a6..b42367cc0b04 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-class/output.js @@ -3,6 +3,8 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inheritsLoose(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { var _Foo$prototype$test; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js index 6f6704143517..98fd6a19b297 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/accessing-super-properties/output.js @@ -3,6 +3,8 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inheritsLoose(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js index ce2f520f331a..d963c05ec505 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/calling-super-properties/output.js @@ -3,6 +3,8 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inheritsLoose(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js index 5ec44193fbf4..a9317a96c071 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-must-call-super/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inheritsLoose(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js index f1631c3f0da1..f28de2a86c61 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-falsey/output.js @@ -3,6 +3,8 @@ var Child = /*#__PURE__*/function (_Base) { babelHelpers.inheritsLoose(Child, _Base); + var _super = babelHelpers.createSuper(Child); + function Child() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js index 60a3d860a4c5..0e336b7e554d 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/derived-constructor-no-super-return-object/output.js @@ -3,6 +3,8 @@ var Child = /*#__PURE__*/function (_Base) { babelHelpers.inheritsLoose(Child, _Base); + var _super = babelHelpers.createSuper(Child); + function Child() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/options.json b/packages/babel-plugin-transform-classes/test/fixtures/loose/options.json index a89247845869..6b7851da95fe 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "transform-function-name", ["transform-classes", { "loose": true }], ["transform-spread", { "loose": true }], diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js index e96b1f982a5e..a82dc8502907 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class-id-member-expression/output.js @@ -3,6 +3,8 @@ var BaseController = /*#__PURE__*/function (_Chaplin$Controller) { babelHelpers.inheritsLoose(BaseController, _Chaplin$Controller); + var _super = babelHelpers.createSuper(BaseController); + function BaseController() { return _Chaplin$Controller.apply(this, arguments) || this; } @@ -15,6 +17,8 @@ var BaseController2 = /*#__PURE__*/function (_Chaplin$Controller$A) { babelHelpers.inheritsLoose(BaseController2, _Chaplin$Controller$A); + var _super2 = babelHelpers.createSuper(BaseController2); + function BaseController2() { return _Chaplin$Controller$A.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js index e0204405affa..a7af86b1fac4 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/super-class/output.js @@ -3,6 +3,8 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inheritsLoose(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { return _Foo.apply(this, arguments) || this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/2663/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/2663/output.js index 494aec133278..e8f1a2bc3a09 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/2663/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/2663/output.js @@ -11,15 +11,21 @@ var _events = require("events"); var _binarySerializer = babelHelpers.interopRequireDefault(require("./helpers/binary-serializer")); +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + // import ... var Connection = /*#__PURE__*/function (_EventEmitter) { babelHelpers.inherits(Connection, _EventEmitter); + var _super = _createSuper(Connection); + function Connection(endpoint, joinKey, joinData, roomId) { var _this; babelHelpers.classCallCheck(this, Connection); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Connection).call(this)); + _this = _super.call(this); _this.isConnected = false; _this.roomId = roomId; // ... diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/2694/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/2694/output.js index 4742d3e3d510..7651f2cd2c1a 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/2694/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/2694/output.js @@ -7,12 +7,18 @@ exports["default"] = void 0; var _BaseFoo2 = babelHelpers.interopRequireDefault(require("./BaseFoo")); +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var SubFoo = /*#__PURE__*/function (_BaseFoo) { babelHelpers.inherits(SubFoo, _BaseFoo); + var _super = _createSuper(SubFoo); + function SubFoo() { babelHelpers.classCallCheck(this, SubFoo); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(SubFoo).apply(this, arguments)); + return _super.apply(this, arguments); } babelHelpers.createClass(SubFoo, null, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.js index 105707c93d7c..36329369f081 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/2775/output.js @@ -7,12 +7,18 @@ exports["default"] = void 0; var _react = babelHelpers.interopRequireDefault(require("react")); +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var RandomComponent = /*#__PURE__*/function (_Component) { babelHelpers.inherits(RandomComponent, _Component); + var _super = _createSuper(RandomComponent); + function RandomComponent() { babelHelpers.classCallCheck(this, RandomComponent); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(RandomComponent).call(this)); + return _super.call(this); } babelHelpers.createClass(RandomComponent, [{ diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/3028/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/3028/output.js index 80cecee47392..fe95c6133591 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/3028/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/3028/output.js @@ -5,6 +5,10 @@ Object.defineProperty(exports, "__esModule", { }); exports["default"] = void 0; +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var b = function b() { babelHelpers.classCallCheck(this, b); }; @@ -12,11 +16,13 @@ var b = function b() { var a1 = /*#__PURE__*/function (_b) { babelHelpers.inherits(a1, _b); + var _super = _createSuper(a1); + function a1() { var _this; babelHelpers.classCallCheck(this, a1); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(a1).call(this)); + _this = _super.call(this); _this.x = function () { return babelHelpers.assertThisInitialized(_this); @@ -31,11 +37,13 @@ var a1 = /*#__PURE__*/function (_b) { var a2 = /*#__PURE__*/function (_b2) { babelHelpers.inherits(a2, _b2); + var _super2 = _createSuper(a2); + function a2() { var _this2; babelHelpers.classCallCheck(this, a2); - _this2 = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(a2).call(this)); + _this2 = _super2.call(this); _this2.x = function () { return babelHelpers.assertThisInitialized(_this2); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/5769/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/5769/output.js index 466856e8ebc1..8c4aff6e2f2c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/5769/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/5769/output.js @@ -1,3 +1,7 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var Point = /*#__PURE__*/function () { "use strict"; @@ -19,11 +23,13 @@ var ColorPoint = /*#__PURE__*/function (_Point) { babelHelpers.inherits(ColorPoint, _Point); + var _super = _createSuper(ColorPoint); + function ColorPoint() { var _this; babelHelpers.classCallCheck(this, ColorPoint); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(ColorPoint).call(this)); + _this = _super.call(this); _this.x = 2; babelHelpers.set(babelHelpers.getPrototypeOf(ColorPoint.prototype), "x", 3, babelHelpers.assertThisInitialized(_this), true); expect(_this.x).toBe(3); // A diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js index 9c6d685681d1..f5a493b47c9a 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/5817/output.js @@ -1,13 +1,19 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var A = /*#__PURE__*/function (_B) { "use strict"; babelHelpers.inherits(A, _B); + var _super = _createSuper(A); + function A() { var _this; babelHelpers.classCallCheck(this, A); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(A).call(this)); + _this = _super.call(this); _this.arrow1 = function (x) { return x; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/exec.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/exec.js index 45af5099a97e..1a5d146d5e17 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/exec.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/exec.js @@ -1,17 +1,26 @@ -// Pretend that `Reflect.construct` isn't supported. -this.Reflect = undefined; +const oldReflect = this.Reflect; +const oldHTMLElement = this.HTMLElement; -this.HTMLElement = function() { - // Here, `this.HTMLElement` is this function, not the original HTMLElement - // constructor. `this.constructor` should be this function too, but isn't. - constructor = this.constructor; -}; +try { + // Pretend that `Reflect.construct` isn't supported. + this.Reflect = undefined; -var constructor; + this.HTMLElement = function() { + // Here, `this.HTMLElement` is this function, not the original HTMLElement + // constructor. `this.constructor` should be this function too, but isn't. + constructor = this.constructor; + }; -class CustomElement extends HTMLElement {}; -new CustomElement(); + var constructor; -expect(constructor).toBe(CustomElement); + class CustomElement extends HTMLElement {}; + new CustomElement(); + + expect(constructor).toBe(CustomElement); +} finally { + // Restore original env + this.Reflect = oldReflect; + this.HTMLElement = oldHTMLElement; +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/input.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/input.js index 45af5099a97e..1a5d146d5e17 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/input.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/input.js @@ -1,17 +1,26 @@ -// Pretend that `Reflect.construct` isn't supported. -this.Reflect = undefined; +const oldReflect = this.Reflect; +const oldHTMLElement = this.HTMLElement; -this.HTMLElement = function() { - // Here, `this.HTMLElement` is this function, not the original HTMLElement - // constructor. `this.constructor` should be this function too, but isn't. - constructor = this.constructor; -}; +try { + // Pretend that `Reflect.construct` isn't supported. + this.Reflect = undefined; -var constructor; + this.HTMLElement = function() { + // Here, `this.HTMLElement` is this function, not the original HTMLElement + // constructor. `this.constructor` should be this function too, but isn't. + constructor = this.constructor; + }; -class CustomElement extends HTMLElement {}; -new CustomElement(); + var constructor; -expect(constructor).toBe(CustomElement); + class CustomElement extends HTMLElement {}; + new CustomElement(); + + expect(constructor).toBe(CustomElement); +} finally { + // Restore original env + this.Reflect = oldReflect; + this.HTMLElement = oldHTMLElement; +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/output.js index 6ace03a2e269..14d5c2903a82 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/8499/output.js @@ -1,27 +1,42 @@ -// Pretend that `Reflect.construct` isn't supported. -this.Reflect = undefined; +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } -this.HTMLElement = function () { - // Here, `this.HTMLElement` is this function, not the original HTMLElement - // constructor. `this.constructor` should be this function too, but isn't. - constructor = this.constructor; -}; +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -var constructor; +var oldReflect = this.Reflect; +var oldHTMLElement = this.HTMLElement; -var CustomElement = /*#__PURE__*/function (_HTMLElement) { - "use strict"; +try { + // Pretend that `Reflect.construct` isn't supported. + this.Reflect = undefined; - babelHelpers.inherits(CustomElement, _HTMLElement); + this.HTMLElement = function () { + // Here, `this.HTMLElement` is this function, not the original HTMLElement + // constructor. `this.constructor` should be this function too, but isn't. + constructor = this.constructor; + }; - function CustomElement() { - babelHelpers.classCallCheck(this, CustomElement); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(CustomElement).apply(this, arguments)); - } + var constructor; - return CustomElement; -}( /*#__PURE__*/babelHelpers.wrapNativeSuper(HTMLElement)); + var CustomElement = /*#__PURE__*/function (_HTMLElement) { + "use strict"; -; -new CustomElement(); -expect(constructor).toBe(CustomElement); + babelHelpers.inherits(CustomElement, _HTMLElement); + + var _super = _createSuper(CustomElement); + + function CustomElement() { + babelHelpers.classCallCheck(this, CustomElement); + return _super.apply(this, arguments); + } + + return CustomElement; + }( /*#__PURE__*/babelHelpers.wrapNativeSuper(HTMLElement)); + + ; + new CustomElement(); + expect(constructor).toBe(CustomElement); +} finally { + // Restore original env + this.Reflect = oldReflect; + this.HTMLElement = oldHTMLElement; +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js index 0b0b038b725c..28e39b9e94c6 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2494/output.js @@ -1,12 +1,18 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var x = { Foo: /*#__PURE__*/function (_Foo) { "use strict"; babelHelpers.inherits(_class, _Foo); + var _super = _createSuper(_class); + function _class() { babelHelpers.classCallCheck(this, _class); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(_class).apply(this, arguments)); + return _super.apply(this, arguments); } return _class; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js index 83a4d9ae07fc..b703ca5e0afe 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T2997/output.js @@ -1,3 +1,7 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var A = function A() { "use strict"; @@ -9,11 +13,13 @@ var B = /*#__PURE__*/function (_A) { babelHelpers.inherits(B, _A); + var _super = _createSuper(B); + function B() { var _this; babelHelpers.classCallCheck(this, B); - return babelHelpers.possibleConstructorReturn(_this, _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(B).call(this))); + return babelHelpers.possibleConstructorReturn(_this, _this = _super.call(this)); } return B; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js index 8befdd7a144b..e5d041033b0e 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/T7537/output.js @@ -1,9 +1,13 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -23,12 +27,14 @@ var A = /*#__PURE__*/function (_B) { _inherits(A, _B); + var _super = _createSuper(A); + function A(track) { var _this; _classCallCheck(this, A); - if (track !== undefined) _this = _possibleConstructorReturn(this, _getPrototypeOf(A).call(this, track));else _this = _possibleConstructorReturn(this, _getPrototypeOf(A).call(this)); + if (track !== undefined) _this = _super.call(this, track);else _this = _super.call(this); return _possibleConstructorReturn(_this); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js index 5c4fead9d598..77dbe4314605 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-class/output.js @@ -3,17 +3,19 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inherits(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { - var _babelHelpers$getProt, _babelHelpers$get; + var _babelHelpers$get; var _this; babelHelpers.classCallCheck(this, Test); woops.super.test(); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Test).call(this)); + _this = _super.call(this); babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "test", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Test).apply(this, arguments)); - _this = babelHelpers.possibleConstructorReturn(this, (_babelHelpers$getProt = babelHelpers.getPrototypeOf(Test)).call.apply(_babelHelpers$getProt, [this, "test"].concat(Array.prototype.slice.call(arguments)))); + _this = _super.apply(this, arguments); + _this = _super.call.apply(_super, [this, "test"].concat(Array.prototype.slice.call(arguments))); babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "test", babelHelpers.assertThisInitialized(_this)).apply(babelHelpers.assertThisInitialized(_this), arguments); (_babelHelpers$get = babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "test", babelHelpers.assertThisInitialized(_this))).call.apply(_babelHelpers$get, [babelHelpers.assertThisInitialized(_this), "test"].concat(Array.prototype.slice.call(arguments))); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js index 36b20276ad8d..5270e43bc628 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/accessing-super-properties/output.js @@ -3,11 +3,13 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inherits(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { var _this; babelHelpers.classCallCheck(this, Test); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Test).call(this)); + _this = _super.call(this); babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "test", babelHelpers.assertThisInitialized(_this)); babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "test", babelHelpers.assertThisInitialized(_this)).whatever; return _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js index ba4f9143ea3c..196eec6fa626 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/calling-super-properties/output.js @@ -3,11 +3,13 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inherits(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { var _this; babelHelpers.classCallCheck(this, Test); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Test).call(this)); + _this = _super.call(this); babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "test", babelHelpers.assertThisInitialized(_this)).whatever(); babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "test", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); return _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js index 567fc9f364c0..6946e46f345b 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/constructor/output.js @@ -10,11 +10,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); _this.state = "test"; return _this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js index 1db3f162cbe9..ade319d8d45b 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/delay-arrow-function-for-bare-super-derived/output.js @@ -3,13 +3,15 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - return _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this, () => { + return _this = _super.call(this, () => { _this.test; - })); + }); } return Foo; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js index 85c2f478d833..b3d1b7a57f7a 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-2/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - if (eval("false")) _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + if (eval("false")) _this = _super.call(this); return babelHelpers.possibleConstructorReturn(_this); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js index d7db30fb9eaa..5f3edc9406a3 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-3/output.js @@ -3,12 +3,14 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - var fn = () => _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + var fn = () => _this = _super.call(this); fn(); return babelHelpers.possibleConstructorReturn(_this); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js index e76276d3cfbc..370e4fcc20b3 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super-4/output.js @@ -3,12 +3,14 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - var fn = () => _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + var fn = () => _this = _super.call(this); return babelHelpers.possibleConstructorReturn(_this); } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js index 2a40e13e0662..a157017211b6 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-must-call-super/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js index e3bfc77684df..a7f2e0026fb3 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-falsey/output.js @@ -3,6 +3,8 @@ var Child = /*#__PURE__*/function (_Base) { babelHelpers.inherits(Child, _Base); + var _super = babelHelpers.createSuper(Child); + function Child() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js index 865a3560fb3c..7e0a9e8bbb1c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/derived-constructor-no-super-return-object/output.js @@ -3,6 +3,8 @@ var Child = /*#__PURE__*/function (_Base) { babelHelpers.inherits(Child, _Base); + var _super = babelHelpers.createSuper(Child); + function Child() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/export-super-class/output.mjs b/packages/babel-plugin-transform-classes/test/fixtures/spec/export-super-class/output.mjs index f174f3e4a3e8..1a0e60f72428 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/export-super-class/output.mjs +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/export-super-class/output.mjs @@ -1,9 +1,11 @@ var _default = /*#__PURE__*/function (_A) { babelHelpers.inherits(_default, _A); + var _super = babelHelpers.createSuper(_default); + function _default() { babelHelpers.classCallCheck(this, _default); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(_default).apply(this, arguments)); + return _super.apply(this, arguments); } return _default; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/extend-untranspiled-class/exec.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/extend-untranspiled-class/exec.js new file mode 100644 index 000000000000..a2b35ba4627d --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/extend-untranspiled-class/exec.js @@ -0,0 +1,35 @@ +"use strict"; + +var log = []; +var SuperClass = require("module-which-exports-native-class"); + +class SubClass extends SuperClass { + constructor() { + log.push(4); + super(); + } + method() { + log.push(5); + super.method(); + } + static method() { + log.push(6); + super.method(); + } +} + +new SubClass().method(); +SubClass.method(); + +expect(log).toEqual([4, 1, 5, 2, 6, 3]); + +// Magic function to avoid transpiling class +function require() { + return eval(`( + class SuperClass { + constructor() { log.push(1); } + method() { log.push(2); } + static method() { log.push(3); } + } + )`); +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-call-in-key/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-call-in-key/output.js index 462cc4bc9e61..fe4902958d94 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-call-in-key/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-call-in-key/output.js @@ -13,6 +13,8 @@ var Hello = function Hello() { var Outer = /*#__PURE__*/function (_Hello) { babelHelpers.inherits(Outer, _Hello); + var _super = babelHelpers.createSuper(Outer); + function Outer() { var _this2 = this; @@ -26,7 +28,7 @@ var Outer = /*#__PURE__*/function (_Hello) { } babelHelpers.createClass(Inner, [{ - key: _this = babelHelpers.possibleConstructorReturn(_this2, babelHelpers.getPrototypeOf(Outer).call(_this2)), + key: _this = _super.call(_this2), value: function value() { return 'hello'; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-property-in-key/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-property-in-key/output.js index 6156472de55d..a97b64752a0f 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-property-in-key/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-class-super-property-in-key/output.js @@ -17,11 +17,13 @@ var Hello = /*#__PURE__*/function () { var Outer = /*#__PURE__*/function (_Hello) { babelHelpers.inherits(Outer, _Hello); + var _super = babelHelpers.createSuper(Outer); + function Outer() { var _this; babelHelpers.classCallCheck(this, Outer); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this)); + _this = _super.call(this); var Inner = /*#__PURE__*/function () { function Inner() { diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-call-in-key/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-call-in-key/output.js index 4725d5886bfe..ea22ce935a6a 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-call-in-key/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-call-in-key/output.js @@ -13,12 +13,14 @@ var Hello = function Hello() { var Outer = /*#__PURE__*/function (_Hello) { babelHelpers.inherits(Outer, _Hello); + var _super = babelHelpers.createSuper(Outer); + function Outer() { var _this; babelHelpers.classCallCheck(this, Outer); var Inner = { - [_this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this))]() { + [_this = _super.call(this)]() { return 'hello'; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-property-in-key/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-property-in-key/output.js index 5da25567cee1..694e77e9754c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-property-in-key/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/nested-object-super-property-in-key/output.js @@ -17,11 +17,13 @@ var Hello = /*#__PURE__*/function () { var Outer = /*#__PURE__*/function (_Hello) { babelHelpers.inherits(Outer, _Hello); + var _super = babelHelpers.createSuper(Outer); + function Outer() { var _this; babelHelpers.classCallCheck(this, Outer); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Outer).call(this)); + _this = _super.call(this); var Inner = { [babelHelpers.get(babelHelpers.getPrototypeOf(Outer.prototype), "toString", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this))]() { return 'hello'; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/options.json index 8d402a794c7e..cac9bea7af04 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "transform-function-name", "transform-classes", "transform-spread", diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js index a3451dcd27fb..6e3ff68be6e4 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-anonymous/output.js @@ -3,9 +3,11 @@ var TestEmpty = /*#__PURE__*/function (_ref) { babelHelpers.inherits(TestEmpty, _ref); + var _super = babelHelpers.createSuper(TestEmpty); + function TestEmpty() { babelHelpers.classCallCheck(this, TestEmpty); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(TestEmpty).apply(this, arguments)); + return _super.apply(this, arguments); } return TestEmpty; @@ -24,9 +26,11 @@ var TestConstructorOnly = /*#__PURE__*/function (_ref2) { babelHelpers.inherits(TestConstructorOnly, _ref2); + var _super2 = babelHelpers.createSuper(TestConstructorOnly); + function TestConstructorOnly() { babelHelpers.classCallCheck(this, TestConstructorOnly); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(TestConstructorOnly).apply(this, arguments)); + return _super2.apply(this, arguments); } return TestConstructorOnly; @@ -45,9 +49,11 @@ var TestMethodOnly = /*#__PURE__*/function (_ref3) { babelHelpers.inherits(TestMethodOnly, _ref3); + var _super3 = babelHelpers.createSuper(TestMethodOnly); + function TestMethodOnly() { babelHelpers.classCallCheck(this, TestMethodOnly); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(TestMethodOnly).apply(this, arguments)); + return _super3.apply(this, arguments); } return TestMethodOnly; @@ -70,9 +76,11 @@ var TestConstructorAndMethod = /*#__PURE__*/function (_ref4) { babelHelpers.inherits(TestConstructorAndMethod, _ref4); + var _super4 = babelHelpers.createSuper(TestConstructorAndMethod); + function TestConstructorAndMethod() { babelHelpers.classCallCheck(this, TestConstructorAndMethod); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(TestConstructorAndMethod).apply(this, arguments)); + return _super4.apply(this, arguments); } return TestConstructorAndMethod; @@ -95,9 +103,11 @@ var TestMultipleMethods = /*#__PURE__*/function (_ref5) { babelHelpers.inherits(TestMultipleMethods, _ref5); + var _super5 = babelHelpers.createSuper(TestMultipleMethods); + function TestMultipleMethods() { babelHelpers.classCallCheck(this, TestMultipleMethods); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(TestMultipleMethods).apply(this, arguments)); + return _super5.apply(this, arguments); } return TestMultipleMethods; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js index 08be71d5ffdf..b78e78a090e7 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class-id-member-expression/output.js @@ -3,9 +3,11 @@ var BaseController = /*#__PURE__*/function (_Chaplin$Controller) { babelHelpers.inherits(BaseController, _Chaplin$Controller); + var _super = babelHelpers.createSuper(BaseController); + function BaseController() { babelHelpers.classCallCheck(this, BaseController); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(BaseController).apply(this, arguments)); + return _super.apply(this, arguments); } return BaseController; @@ -16,9 +18,11 @@ var BaseController2 = /*#__PURE__*/function (_Chaplin$Controller$A) { babelHelpers.inherits(BaseController2, _Chaplin$Controller$A); + var _super2 = babelHelpers.createSuper(BaseController2); + function BaseController2() { babelHelpers.classCallCheck(this, BaseController2); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(BaseController2).apply(this, arguments)); + return _super2.apply(this, arguments); } return BaseController2; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js index d3613c70b763..be0405d4817c 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-class/output.js @@ -3,9 +3,11 @@ var Test = /*#__PURE__*/function (_Foo) { babelHelpers.inherits(Test, _Foo); + var _super = babelHelpers.createSuper(Test); + function Test() { babelHelpers.classCallCheck(this, Test); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Test).apply(this, arguments)); + return _super.apply(this, arguments); } return Test; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-correct-new-target/exec.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-correct-new-target/exec.js new file mode 100644 index 000000000000..c99db1bcaea6 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-correct-new-target/exec.js @@ -0,0 +1,14 @@ +"use strict"; + +let NewTarget; + +class A { + constructor() { NewTarget = new.target; } +} +class B extends A {} + +new A(); +expect(NewTarget).toBe(A); + +new B(); +expect(NewTarget).toBe(B); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-proto-modifications/exec.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-proto-modifications/exec.js new file mode 100644 index 000000000000..a2fbf656ed3c --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-proto-modifications/exec.js @@ -0,0 +1,15 @@ +var A_called = false; +var X_called = false; + +class A { constructor() { A_called = true } } +class X { constructor() { X_called = true } } +class B extends A {} + +B.prototype.__proto__ = X.prototype; +B.__proto__ = X; + +expect(new B() instanceof B).toBe(true); +expect(new B() instanceof A).toBe(false); +expect(new B() instanceof X).toBe(true); +expect(A_called).toBe(false); +expect(X_called).toBe(true); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js index 214084c8eabf..eef08d113aba 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super-inline/output.js @@ -1,9 +1,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } @@ -19,12 +23,14 @@ var Foo = /*#__PURE__*/function (_Bar) { _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { var _this; _classCallCheck(this, Foo); - _get(_getPrototypeOf(Foo.prototype), "foo", _assertThisInitialized(_this)).call(_assertThisInitialized(_this), _this = _possibleConstructorReturn(this, _getPrototypeOf(Foo).call(this))); + _get(_getPrototypeOf(Foo.prototype), "foo", _assertThisInitialized(_this)).call(_assertThisInitialized(_this), _this = _super.call(this)); return _this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js index 91b677b7edc0..da8c2202111a 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-bare-super/output.js @@ -1,9 +1,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } @@ -19,6 +23,8 @@ var Foo = /*#__PURE__*/function (_Bar) { _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { var _this; @@ -26,7 +32,7 @@ var Foo = /*#__PURE__*/function (_Bar) { _get(_getPrototypeOf(Foo.prototype), "foo", _assertThisInitialized(_this)).call(_assertThisInitialized(_this)); - return _this = _possibleConstructorReturn(this, _getPrototypeOf(Foo).call(this)); + return _this = _super.call(this); } return Foo; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/options.json index 93725c3c0e72..4b2ee4905cff 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "transform-classes", "transform-block-scoping" ] diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js index d4c13b559cf8..5fb333bee95e 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-2/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; @@ -11,7 +13,7 @@ var Foo = /*#__PURE__*/function (_Bar) { var t = () => babelHelpers.get(babelHelpers.getPrototypeOf(Foo.prototype), "test", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); babelHelpers.get(babelHelpers.getPrototypeOf(Foo.prototype), "foo", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); - return _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + return _this = _super.call(this); } return Foo; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/options.json index 93725c3c0e72..4b2ee4905cff 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "transform-classes", "transform-block-scoping" ] diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js index d09876061457..70a06b606639 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda-3/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; @@ -10,7 +12,7 @@ var Foo = /*#__PURE__*/function (_Bar) { var t = () => babelHelpers.get(babelHelpers.getPrototypeOf(Foo.prototype), "test", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); t(); return _this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/options.json index 93725c3c0e72..4b2ee4905cff 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/options.json @@ -1,6 +1,6 @@ { "plugins": [ - "external-helpers", + ["external-helpers", { "helperVersion": "7.100.0" }], "transform-classes", "transform-block-scoping" ] diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js index 7fd95af6a8c3..6acbc24c9019 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-before-in-lambda/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; @@ -10,7 +12,7 @@ var Foo = /*#__PURE__*/function (_Bar) { var t = () => babelHelpers.get(babelHelpers.getPrototypeOf(Foo.prototype), "test", babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); - return _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + return _this = _super.call(this); } return Foo; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js index ae0f86694377..d04c0a38bf8f 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/super-reference-in-prop-exression/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - babelHelpers.get(babelHelpers.getPrototypeOf(Foo.prototype), (_this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this))).method, babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); + babelHelpers.get(babelHelpers.getPrototypeOf(Foo.prototype), (_this = _super.call(this)).method, babelHelpers.assertThisInitialized(_this)).call(babelHelpers.assertThisInitialized(_this)); return _this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js index 53e198d8f0d5..1e69b5b44494 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-2/output.js @@ -3,11 +3,13 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); - return _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this, babelHelpers.assertThisInitialized(_this))); + return _this = _super.call(this, babelHelpers.assertThisInitialized(_this)); } return Foo; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js index 147cb41dd226..04debc242ceb 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-3/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; @@ -11,7 +13,7 @@ var Foo = /*#__PURE__*/function (_Bar) { var fn = () => babelHelpers.assertThisInitialized(_this); fn(); - return _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + return _this = _super.call(this); } return Foo; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js index 5b26e3545405..78625ee2d406 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-4/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; @@ -10,7 +12,7 @@ var Foo = /*#__PURE__*/function (_Bar) { var fn = () => babelHelpers.assertThisInitialized(_this); - _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + _this = _super.call(this); fn(); return _this; } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js index c2c73f7ccdff..02d2986d7f81 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes-5/output.js @@ -3,6 +3,8 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js index 153f8e2d2d37..ddac8f31f485 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/this-not-allowed-before-super-in-derived-classes/output.js @@ -3,12 +3,14 @@ var Foo = /*#__PURE__*/function (_Bar) { babelHelpers.inherits(Foo, _Bar); + var _super = babelHelpers.createSuper(Foo); + function Foo() { var _this; babelHelpers.classCallCheck(this, Foo); _this.foo = "bar"; - return _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).call(this)); + return _this = _super.call(this); } return Foo; diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/modules-3/output.js b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/modules-3/output.js index 525345cbf873..c999f5e34f52 100644 --- a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/modules-3/output.js +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/modules-3/output.js @@ -7,12 +7,18 @@ exports.default = void 0; var _store = require("./store"); +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Login = /*#__PURE__*/function (_React$Component) { babelHelpers.inherits(Login, _React$Component); + var _super = _createSuper(Login); + function Login() { babelHelpers.classCallCheck(this, Login); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Login).apply(this, arguments)); + return _super.apply(this, arguments); } babelHelpers.createClass(Login, [{ diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js index af6f1a3a92eb..a6a5a35134fb 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-nested-iife/output.js @@ -1,3 +1,7 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function broken(x) { if (true) { var Foo = /*#__PURE__*/function (_Bar) { @@ -5,9 +9,11 @@ function broken(x) { babelHelpers.inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { babelHelpers.classCallCheck(this, Foo); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Foo).apply(this, arguments)); + return _super.apply(this, arguments); } return Foo; diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js index e1da6551c0e6..5c295546cdbc 100644 --- a/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js +++ b/packages/babel-plugin-transform-parameters/test/fixtures/regression/6057-expanded/output.js @@ -17,12 +17,16 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } @@ -32,9 +36,9 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope var App = /*#__PURE__*/function (_Component) { _inherits(App, _Component); - function App() { - var _getPrototypeOf2; + var _super = _createSuper(App); + function App() { var _this; _classCallCheck(this, App); @@ -43,7 +47,7 @@ var App = /*#__PURE__*/function (_Component) { args[_key] = arguments[_key]; } - _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(App)).call.apply(_getPrototypeOf2, [this].concat(args))); + _this = _super.call.apply(_super, [this].concat(args)); _defineProperty(_assertThisInitialized(_this), "exportType", ''); diff --git a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js index dc16c97e6980..fd4f9ceeb968 100644 --- a/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js +++ b/packages/babel-plugin-transform-react-jsx/test/fixtures/react/optimisation.react.constant-elements/output.js @@ -1,3 +1,7 @@ +function _createSuper(Derived) { return function () { var Super = babelHelpers.getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = babelHelpers.getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return babelHelpers.possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + var _ref = /*#__PURE__*/
@@ -9,9 +13,11 @@ let App = /*#__PURE__*/function (_React$Component) { babelHelpers.inherits(App, _React$Component); + var _super = _createSuper(App); + function App() { babelHelpers.classCallCheck(this, App); - return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(App).apply(this, arguments)); + return _super.apply(this, arguments); } babelHelpers.createClass(App, [{ diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs-useES6Modules/output.mjs b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs-useES6Modules/output.mjs index 858fcc839af3..d78a80b02170 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs-useES6Modules/output.mjs +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs-useES6Modules/output.mjs @@ -1,15 +1,22 @@ +import _Reflect$construct from "@babel/runtime-corejs2/core-js/reflect/construct"; import _classCallCheck from "@babel/runtime-corejs2/helpers/esm/classCallCheck"; import _possibleConstructorReturn from "@babel/runtime-corejs2/helpers/esm/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime-corejs2/helpers/esm/getPrototypeOf"; import _inherits from "@babel/runtime-corejs2/helpers/esm/inherits"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(_Reflect$construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Foo = /*#__PURE__*/function (_Bar) { _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { _classCallCheck(this, Foo); - return _possibleConstructorReturn(this, _getPrototypeOf(Foo).apply(this, arguments)); + return _super.apply(this, arguments); } return Foo; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs/output.mjs b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs/output.mjs index 7f703cd8fb61..f0016f000bd1 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs/output.mjs +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/corejs/output.mjs @@ -1,15 +1,22 @@ +import _Reflect$construct from "@babel/runtime-corejs2/core-js/reflect/construct"; import _classCallCheck from "@babel/runtime-corejs2/helpers/classCallCheck"; import _possibleConstructorReturn from "@babel/runtime-corejs2/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime-corejs2/helpers/getPrototypeOf"; import _inherits from "@babel/runtime-corejs2/helpers/inherits"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(_Reflect$construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Foo = /*#__PURE__*/function (_Bar) { _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { _classCallCheck(this, Foo); - return _possibleConstructorReturn(this, _getPrototypeOf(Foo).apply(this, arguments)); + return _super.apply(this, arguments); } return Foo; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs-auto/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs-auto/output.js index 1fe45a6f6759..431da1fa3339 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs-auto/output.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs-auto/output.js @@ -6,15 +6,21 @@ var _getPrototypeOf = require("@babel/runtime/helpers/getPrototypeOf"); var _inherits = require("@babel/runtime/helpers/inherits"); +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Foo = /*#__PURE__*/function (_Bar) { "use strict"; _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { _classCallCheck(this, Foo); - return _possibleConstructorReturn(this, _getPrototypeOf(Foo).apply(this, arguments)); + return _super.apply(this, arguments); } return Foo; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs/output.js index 1fe45a6f6759..431da1fa3339 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs/output.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-cjs/output.js @@ -6,15 +6,21 @@ var _getPrototypeOf = require("@babel/runtime/helpers/getPrototypeOf"); var _inherits = require("@babel/runtime/helpers/inherits"); +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Foo = /*#__PURE__*/function (_Bar) { "use strict"; _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { _classCallCheck(this, Foo); - return _possibleConstructorReturn(this, _getPrototypeOf(Foo).apply(this, arguments)); + return _super.apply(this, arguments); } return Foo; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs-auto/output.mjs b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs-auto/output.mjs index 9c8d778efd78..8d5823aee6c8 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs-auto/output.mjs +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs-auto/output.mjs @@ -3,13 +3,19 @@ import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConst import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf"; import _inherits from "@babel/runtime/helpers/esm/inherits"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Foo = /*#__PURE__*/function (_Bar) { _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { _classCallCheck(this, Foo); - return _possibleConstructorReturn(this, _getPrototypeOf(Foo).apply(this, arguments)); + return _super.apply(this, arguments); } return Foo; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs/output.mjs b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs/output.mjs index 9c8d778efd78..8d5823aee6c8 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs/output.mjs +++ b/packages/babel-plugin-transform-runtime/test/fixtures/use-options/useESModules-mjs/output.mjs @@ -3,13 +3,19 @@ import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConst import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf"; import _inherits from "@babel/runtime/helpers/esm/inherits"; +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + let Foo = /*#__PURE__*/function (_Bar) { _inherits(Foo, _Bar); + var _super = _createSuper(Foo); + function Foo() { _classCallCheck(this, Foo); - return _possibleConstructorReturn(this, _getPrototypeOf(Foo).apply(this, arguments)); + return _super.apply(this, arguments); } return Foo; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/class/parameter-properties-with-class-and-super/output.js b/packages/babel-plugin-transform-typescript/test/fixtures/class/parameter-properties-with-class-and-super/output.js index 34461a3c982f..d38769a178c5 100644 --- a/packages/babel-plugin-transform-typescript/test/fixtures/class/parameter-properties-with-class-and-super/output.js +++ b/packages/babel-plugin-transform-typescript/test/fixtures/class/parameter-properties-with-class-and-super/output.js @@ -1,9 +1,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } @@ -15,12 +19,14 @@ let Employee = /*#__PURE__*/function (_Person) { _inherits(Employee, _Person); + var _super = _createSuper(Employee); + function Employee(name) { var _this; _classCallCheck(this, Employee); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Employee).call(this)); + _this = _super.call(this); _this.name = name; return _this; } diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-7527/output.js b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-7527/output.js index febcf6c43811..54bb409c7727 100644 --- a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-7527/output.js +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-7527/output.js @@ -4,6 +4,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } @@ -12,9 +14,9 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } -function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } -function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } @@ -25,10 +27,12 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g var MyDate = /*#__PURE__*/function (_Date) { _inherits(MyDate, _Date); + var _super = _createSuper(MyDate); + function MyDate(time) { _classCallCheck(this, MyDate); - return _possibleConstructorReturn(this, _getPrototypeOf(MyDate).call(this, time)); + return _super.call(this, time); } return MyDate;