UNPKG

core-js

Version:
34 lines (29 loc) 1.35 kB
var anObject = require('../internals/an-object'); var isArrayIteratorMethod = require('../internals/is-array-iterator-method'); var toLength = require('../internals/to-length'); var bind = require('../internals/bind-context'); var getIteratorMethod = require('../internals/get-iterator-method'); var callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing'); var BREAK = {}; var exports = module.exports = function (iterable, fn, that, ENTRIES, ITERATOR) { var boundFunction = bind(fn, that, ENTRIES ? 2 : 1); var iterator, iterFn, index, length, result, step; if (ITERATOR) { iterator = iterable; } else { iterFn = getIteratorMethod(iterable); if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); // optimisation for array iterators if (isArrayIteratorMethod(iterFn)) { for (index = 0, length = toLength(iterable.length); length > index; index++) { result = ENTRIES ? boundFunction(anObject(step = iterable[index])[0], step[1]) : boundFunction(iterable[index]); if (result === BREAK) return BREAK; } return; } iterator = iterFn.call(iterable); } while (!(step = iterator.next()).done) { if (callWithSafeIterationClosing(iterator, boundFunction, step.value, ENTRIES) === BREAK) return BREAK; } }; exports.BREAK = BREAK;