| 'use strict'; | 
|   | 
| var bind = require('function-bind'); | 
|   | 
| var ES2016 = require('./es2016'); | 
| var assign = require('./helpers/assign'); | 
| var forEach = require('./helpers/forEach'); | 
|   | 
| var GetIntrinsic = require('./GetIntrinsic'); | 
|   | 
| var $TypeError = GetIntrinsic('%TypeError%'); | 
| var $isEnumerable = bind.call(Function.call, GetIntrinsic('%ObjectPrototype%').propertyIsEnumerable); | 
| var $pushApply = bind.call(Function.apply, GetIntrinsic('%ArrayPrototype%').push); | 
|   | 
| var ES2017 = assign(assign({}, ES2016), { | 
|     ToIndex: function ToIndex(value) { | 
|         if (typeof value === 'undefined') { | 
|             return 0; | 
|         } | 
|         var integerIndex = this.ToInteger(value); | 
|         if (integerIndex < 0) { | 
|             throw new RangeError('index must be >= 0'); | 
|         } | 
|         var index = this.ToLength(integerIndex); | 
|         if (!this.SameValueZero(integerIndex, index)) { | 
|             throw new RangeError('index must be >= 0 and < 2 ** 53 - 1'); | 
|         } | 
|         return index; | 
|     }, | 
|   | 
|     // https://www.ecma-international.org/ecma-262/8.0/#sec-enumerableownproperties | 
|     EnumerableOwnProperties: function EnumerableOwnProperties(O, kind) { | 
|         var keys = ES2016.EnumerableOwnNames(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); | 
|     } | 
| }); | 
|   | 
| delete ES2017.EnumerableOwnNames; // replaced with EnumerableOwnProperties | 
|   | 
| module.exports = ES2017; |