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.
		
		
		
		
			
				
					32 lines
				
				817 B
			
		
		
			
		
	
	
					32 lines
				
				817 B
			| 
								 
											4 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var GetIntrinsic = require('get-intrinsic');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var hasSymbols = require('has-symbols')();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var $TypeError = GetIntrinsic('%TypeError%');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
							 | 
						||
| 
								 | 
							
								var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
							 | 
						||
| 
								 | 
							
								var keys = require('object-keys');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var esType = require('./Type');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = function GetOwnPropertyKeys(O, Type) {
							 | 
						||
| 
								 | 
							
									if (esType(O) !== 'Object') {
							 | 
						||
| 
								 | 
							
										throw new $TypeError('Assertion failed: Type(O) is not Object');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if (Type === 'Symbol') {
							 | 
						||
| 
								 | 
							
										return $gOPS ? $gOPS(O) : [];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if (Type === 'String') {
							 | 
						||
| 
								 | 
							
										if (!$gOPN) {
							 | 
						||
| 
								 | 
							
											return keys(O);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return $gOPN(O);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
							 | 
						||
| 
								 | 
							
								};
							 |