/
lostSun
/
project-client-server-apps
Обзор
Документация
Войти
/
lostSun
/
project-client-server-apps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
node_modules/es-abstract/2020/GetIterator.js
66 строк
2 KB
1lostsun
initial commit
05 май 2025, 11:35
05 май 2025, 11:35
fe8f535
Код
Авторство
О чём код?
'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); var inspect = require('object-inspect'); var hasSymbols = require('has-symbols')(); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsArray = require('./IsArray'); var isObject = require('../helpers/isObject'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod, IsArray: IsArray }; // https://262.ecma-international.org/11.0/#sec-getiterator module.exports = function GetIterator(obj, hint, method) { var actualHint = hint; if (arguments.length < 2) { actualHint = 'sync'; } if (actualHint !== 'sync' && actualHint !== 'async') { throw new $TypeError("Assertion failed: `hint` must be one of 'sync' or 'async', got " + inspect(hint)); } var actualMethod = method; if (arguments.length < 3) { if (actualHint === 'async') { if (hasSymbols && $asyncIterator) { actualMethod = GetMethod(obj, $asyncIterator); } if (actualMethod === undefined) { throw new $SyntaxError("async from sync iterators aren't currently supported"); } } else { actualMethod = getIteratorMethod(ES, obj); } } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; // TODO: This should return an IteratorRecord /* var nextMethod = GetV(iterator, 'next'); return { '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; */ };