| 'use strict'; | 
|   | 
| var GetIntrinsic = require('get-intrinsic'); | 
|   | 
| var callBound = require('call-bind/callBound'); | 
|   | 
| var $TypeError = GetIntrinsic('%TypeError%'); | 
| var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); | 
| var $push = callBound('Array.prototype.push'); | 
|   | 
| var Get = require('./Get'); | 
| var IsArray = require('./IsArray'); | 
| var ToLength = require('./ToLength'); | 
| var ToString = require('./ToString'); | 
| var Type = require('./Type'); | 
|   | 
| // https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike | 
| module.exports = function CreateListFromArrayLike(obj) { | 
|     var elementTypes = arguments.length > 1 | 
|         ? arguments[1] | 
|         : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; | 
|   | 
|     if (Type(obj) !== 'Object') { | 
|         throw new $TypeError('Assertion failed: `obj` must be an Object'); | 
|     } | 
|     if (!IsArray(elementTypes)) { | 
|         throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); | 
|     } | 
|     var len = ToLength(Get(obj, 'length')); | 
|     var list = []; | 
|     var index = 0; | 
|     while (index < len) { | 
|         var indexName = ToString(index); | 
|         var next = Get(obj, indexName); | 
|         var nextType = Type(next); | 
|         if ($indexOf(elementTypes, nextType) < 0) { | 
|             throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); | 
|         } | 
|         $push(list, next); | 
|         index += 1; | 
|     } | 
|     return list; | 
| }; |