123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 'use strict';
- var $TypeError = require('es-errors/type');
- var isObject = require('es-object-atoms/isObject');
- var AdvanceStringIndex = require('./AdvanceStringIndex');
- var Call = require('./Call');
- var GetIteratorDirect = require('./GetIteratorDirect');
- var GetMethod = require('./GetMethod');
- var IsArray = require('./IsArray');
- var getIteratorMethod = require('../helpers/getIteratorMethod');
- // https://262.ecma-international.org/16.0/#sec-getiteratorflattenable
- module.exports = function GetIteratorFlattenable(obj, primitiveHandling) {
- if (primitiveHandling !== 'REJECT-PRIMITIVES' && primitiveHandling !== 'ITERATE-STRING-PRIMITIVES') {
- throw new $TypeError('Assertion failed: `stringHandling` must be "REJECT-PRIMITIVES" or "ITERATE-STRING-PRIMITIVES"');
- }
- if (!isObject(obj)) {
- if (primitiveHandling === 'REJECT-PRIMITIVES' || typeof obj !== 'string') {
- throw new $TypeError('obj must be an Object'); // step 1.a
- }
- }
- // var method = GetMethod(obj, Symbol.iterator); // step 2
- var method = getIteratorMethod(
- {
- AdvanceStringIndex: AdvanceStringIndex,
- GetMethod: GetMethod,
- IsArray: IsArray
- },
- obj
- );
- var iterator;
- if (typeof method === 'undefined') { // step 3
- iterator = obj; // step 3.a
- } else { // step 4
- iterator = Call(method, obj); // step 4.a
- }
- if (!isObject(iterator)) {
- throw new $TypeError('iterator must be an Object'); // step 5
- }
- return GetIteratorDirect(iterator); // step 6
- };
|