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