You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true }); exports.default = addCreateSuperHelper;
var _core = require("@babel/core");
const helperIDs = new WeakMap();
function addCreateSuperHelper(file) { if (helperIDs.has(file)) { return (_core.types.cloneNode || _core.types.clone)(helperIDs.get(file)); }
try { return file.addHelper("createSuper"); } catch (_unused) {}
const id = file.scope.generateUidIdentifier("createSuper"); helperIDs.set(file, id); const fn = helper({ CREATE_SUPER: id, GET_PROTOTYPE_OF: file.addHelper("getPrototypeOf"), POSSIBLE_CONSTRUCTOR_RETURN: file.addHelper("possibleConstructorReturn") }); file.path.unshiftContainer("body", [fn]); file.scope.registerDeclaration(file.path.get("body.0")); return _core.types.cloneNode(id); }
const helper = _core.template.statement`
function CREATE_SUPER(Derived) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false;
// core-js@3
if (Reflect.construct.sham) return false;
// Proxy can't be polyfilled. Every browser implemented
// proxies before or at the same time as Reflect.construct,
// so if they support Proxy they also support Reflect.construct.
if (typeof Proxy === "function") return true;
// Since Reflect.construct can't be properly polyfilled, some
// implementations (e.g. core-js@2) don't set the correct internal slots.
// Those polyfills don't allow us to subclass built-ins, so we need to
// use our fallback implementation.
try { // If the internal slots aren't set, this throws an error similar to
// TypeError: this is not a Date object.
Date.prototype.toString.call(Reflect.construct(Date, [], function() {})); return true; } catch (e) { return false; } }
return function () { var Super = GET_PROTOTYPE_OF(Derived), result; if (isNativeReflectConstruct()) { // NOTE: This doesn't work if this.__proto__.constructor has been modified.
var NewTarget = GET_PROTOTYPE_OF(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return POSSIBLE_CONSTRUCTOR_RETURN(this, result); } } `;
|