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
 |