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.
		
		
		
		
		
			
		
			
				
					71 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					71 lines
				
				2.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = addCreateSuperHelper;
							 | 
						||
| 
								 | 
							
								var _core = require("@babel/core");
							 | 
						||
| 
								 | 
							
								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);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								`;
							 | 
						||
| 
								 | 
							
								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);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=inline-createSuper-helpers.js.map
							 |