source: frontend/node_modules/es-abstract/2025/GetSetRecord.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 13 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 1.7 KB
Line 
1'use strict';
2
3var $RangeError = require('es-errors/range');
4var $TypeError = require('es-errors/type');
5
6var Get = require('./Get');
7var IsCallable = require('./IsCallable');
8var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
9var ToNumber = require('./ToNumber');
10
11var isNaN = require('..//helpers/isNaN');
12var isObject = require('es-object-atoms/isObject');
13
14var callBind = require('call-bind');
15var isSet = require('is-set');
16var stopIterationIterator = require('stop-iteration-iterator');
17
18// https://262.ecma-international.org/16.0/#sec-getsetrecord
19
20module.exports = function GetSetRecord(obj) {
21 if (!isObject(obj)) {
22 throw new $TypeError('obj is not an Object'); // step 1
23 }
24
25 var rawSize = Get(obj, 'size'); // step 2
26
27 var numSize = ToNumber(rawSize); // step 3
28
29 // 4. NOTE: If rawSize is undefined, then numSize will be NaN.
30 if (isNaN(numSize)) {
31 throw new $TypeError('`size` is not a non-NaN Number'); // step 5
32 }
33
34 var intSize = ToIntegerOrInfinity(numSize); // step 6
35
36 if (intSize < 0) {
37 throw new $RangeError('set size must be non-negative'); // step 7
38 }
39
40 var has = Get(obj, 'has'); // step 8
41
42 if (!IsCallable(has)) {
43 throw new $TypeError('has is not a function'); // step 9
44 }
45
46 var keys = Get(obj, 'keys'); // step 10
47 if (!IsCallable(keys)) {
48 throw new $TypeError('keys is not a function'); // step 11
49 }
50 /* globals StopIteration: false */
51 if (isSet(obj) && typeof StopIteration === 'object') {
52 var boundKeys = callBind(keys);
53 keys = function keys() { // eslint-disable-line no-shadow
54 return stopIterationIterator(boundKeys(this));
55 };
56 }
57
58 return {
59 '[[SetObject]]': obj,
60 '[[Size]]': intSize,
61 '[[Has]]': has,
62 '[[Keys]]': keys
63 }; // step 12
64};
Note: See TracBrowser for help on using the repository browser.