12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = addCallSuperHelper;
- var _core = require("@babel/core");
- const helper = _core.template.statement`
- function CALL_SUPER(
- _this,
- derived,
- args,
- ) {
- 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 Boolean object.
- return !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}),);
- } catch (e) {
- return false;
- }
- }
- // Super
- derived = GET_PROTOTYPE_OF(derived);
- return POSSIBLE_CONSTRUCTOR_RETURN(
- _this,
- isNativeReflectConstruct()
- ? // NOTE: This doesn't work if this.__proto__.constructor has been modified.
- Reflect.construct(
- derived,
- args || [],
- GET_PROTOTYPE_OF(_this).constructor,
- )
- : derived.apply(_this, args),
- );
- }
- `;
- const helperIDs = new WeakMap();
- function addCallSuperHelper(file) {
- if (helperIDs.has(file)) {
- return (_core.types.cloneNode || _core.types.clone)(helperIDs.get(file));
- }
- try {
- return file.addHelper("callSuper");
- } catch (_unused) {}
- const id = file.scope.generateUidIdentifier("callSuper");
- helperIDs.set(file, id);
- const fn = helper({
- CALL_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);
- }
- //# sourceMappingURL=inline-callSuper-helpers.js.map
|