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.
		
		
		
		
			
				
					44 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					44 lines
				
				1.1 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var GetIntrinsic = require('get-intrinsic');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var $TypeError = GetIntrinsic('%TypeError%');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var objectKeys = require('object-keys');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var callBound = require('call-bind/callBound');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var callBind = require('call-bind');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
							 | 
						||
| 
								 | 
							
								var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var forEach = require('../helpers/forEach');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Type = require('./Type');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// https://262.ecma-international.org/8.0/#sec-enumerableownproperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = function EnumerableOwnProperties(O, kind) {
							 | 
						||
| 
								 | 
							
									if (Type(O) !== 'Object') {
							 | 
						||
| 
								 | 
							
										throw new $TypeError('Assertion failed: Type(O) is not Object');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var keys = objectKeys(O);
							 | 
						||
| 
								 | 
							
									if (kind === 'key') {
							 | 
						||
| 
								 | 
							
										return keys;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if (kind === 'value' || kind === 'key+value') {
							 | 
						||
| 
								 | 
							
										var results = [];
							 | 
						||
| 
								 | 
							
										forEach(keys, function (key) {
							 | 
						||
| 
								 | 
							
											if ($isEnumerable(O, key)) {
							 | 
						||
| 
								 | 
							
												$pushApply(results, [
							 | 
						||
| 
								 | 
							
													kind === 'value' ? O[key] : [key, O[key]]
							 | 
						||
| 
								 | 
							
												]);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
										return results;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind);
							 | 
						||
| 
								 | 
							
								};
							 |