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.
		
		
		
		
		
			
		
			
				
					30 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					30 lines
				
				1.1 KiB
			| 
											3 years ago
										 | import getPrototypeOf from "./getPrototypeOf.js"; | ||
|  | import setPrototypeOf from "./setPrototypeOf.js"; | ||
|  | import isNativeFunction from "./isNativeFunction.js"; | ||
|  | import construct from "./construct.js"; | ||
|  | export default 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); | ||
|  | } |