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