42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | var getPrototypeOf = require("./getPrototypeOf.js"); | ||
|  | 
 | ||
|  | var setPrototypeOf = require("./setPrototypeOf.js"); | ||
|  | 
 | ||
|  | var isNativeFunction = require("./isNativeFunction.js"); | ||
|  | 
 | ||
|  | var construct = require("./construct.js"); | ||
|  | 
 | ||
|  | function _wrapNativeSuper(Class) { | ||
|  |   var _cache = typeof Map === "function" ? new Map() : undefined; | ||
|  | 
 | ||
|  |   module.exports = _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); | ||
|  |   }, module.exports.__esModule = true, module.exports["default"] = module.exports; | ||
|  |   return _wrapNativeSuper(Class); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports["default"] = module.exports; |