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.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							40 lines
						
					
					
						
							1.3 KiB
						
					
					
				| 'use strict'; | |
| var aCallable = require('../internals/a-callable'); | |
| var anObject = require('../internals/an-object'); | |
| var call = require('../internals/function-call'); | |
| var toIntegerOrInfinity = require('../internals/to-integer-or-infinity'); | |
| var getIteratorDirect = require('../internals/get-iterator-direct'); | |
| 
 | |
| var INVALID_SIZE = 'Invalid size'; | |
| var $RangeError = RangeError; | |
| var $TypeError = TypeError; | |
| var max = Math.max; | |
| 
 | |
| var SetRecord = function (set, intSize) { | |
|   this.set = set; | |
|   this.size = max(intSize, 0); | |
|   this.has = aCallable(set.has); | |
|   this.keys = aCallable(set.keys); | |
| }; | |
| 
 | |
| SetRecord.prototype = { | |
|   getIterator: function () { | |
|     return getIteratorDirect(anObject(call(this.keys, this.set))); | |
|   }, | |
|   includes: function (it) { | |
|     return call(this.has, this.set, it); | |
|   } | |
| }; | |
| 
 | |
| // `GetSetRecord` abstract operation | |
| // https://tc39.es/proposal-set-methods/#sec-getsetrecord | |
| module.exports = function (obj) { | |
|   anObject(obj); | |
|   var numSize = +obj.size; | |
|   // NOTE: If size is undefined, then numSize will be NaN | |
|   // eslint-disable-next-line no-self-compare -- NaN check | |
|   if (numSize !== numSize) throw new $TypeError(INVALID_SIZE); | |
|   var intSize = toIntegerOrInfinity(numSize); | |
|   if (intSize < 0) throw new $RangeError(INVALID_SIZE); | |
|   return new SetRecord(obj, intSize); | |
| };
 |