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);
							 | 
						||
| 
								 | 
							
								}
							 |