28 lines
		
	
	
		
			821 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			28 lines
		
	
	
		
			821 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var reflectGetProto = require('./Reflect.getPrototypeOf'); | ||
|  | var originalGetProto = require('./Object.getPrototypeOf'); | ||
|  | 
 | ||
|  | var getDunderProto = require('dunder-proto/get'); | ||
|  | 
 | ||
|  | /** @type {import('.')} */ | ||
|  | module.exports = reflectGetProto | ||
|  | 	? function getProto(O) { | ||
|  | 		// @ts-expect-error TS can't narrow inside a closure, for some reason
 | ||
|  | 		return reflectGetProto(O); | ||
|  | 	} | ||
|  | 	: originalGetProto | ||
|  | 		? function getProto(O) { | ||
|  | 			if (!O || (typeof O !== 'object' && typeof O !== 'function')) { | ||
|  | 				throw new TypeError('getProto: not an object'); | ||
|  | 			} | ||
|  | 			// @ts-expect-error TS can't narrow inside a closure, for some reason
 | ||
|  | 			return originalGetProto(O); | ||
|  | 		} | ||
|  | 		: getDunderProto | ||
|  | 			? function getProto(O) { | ||
|  | 				// @ts-expect-error TS can't narrow inside a closure, for some reason
 | ||
|  | 				return getDunderProto(O); | ||
|  | 			} | ||
|  | 			: null; |