UNPKG

watermark-js-plus

Version:
90 lines (78 loc) 3.4 kB
import { __require as requireFunctionBindContext } from './function-bind-context.js'; import { __require as requireFunctionCall } from './function-call.js'; import { __require as requireAnObject } from './an-object.js'; import { __require as requireTryToString } from './try-to-string.js'; import { __require as requireIsArrayIteratorMethod } from './is-array-iterator-method.js'; import { __require as requireLengthOfArrayLike } from './length-of-array-like.js'; import { __require as requireObjectIsPrototypeOf } from './object-is-prototype-of.js'; import { __require as requireGetIterator } from './get-iterator.js'; import { __require as requireGetIteratorMethod } from './get-iterator-method.js'; import { __require as requireIteratorClose } from './iterator-close.js'; var iterate; var hasRequiredIterate; function requireIterate () { if (hasRequiredIterate) return iterate; hasRequiredIterate = 1; var bind = requireFunctionBindContext(); var call = requireFunctionCall(); var anObject = requireAnObject(); var tryToString = requireTryToString(); var isArrayIteratorMethod = requireIsArrayIteratorMethod(); var lengthOfArrayLike = requireLengthOfArrayLike(); var isPrototypeOf = requireObjectIsPrototypeOf(); var getIterator = requireGetIterator(); var getIteratorMethod = requireGetIteratorMethod(); var iteratorClose = requireIteratorClose(); var $TypeError = TypeError; var Result = function (stopped, result) { this.stopped = stopped; this.result = result; }; var ResultPrototype = Result.prototype; iterate = function (iterable, unboundFunction, options) { var that = options && options.that; var AS_ENTRIES = !!(options && options.AS_ENTRIES); var IS_RECORD = !!(options && options.IS_RECORD); var IS_ITERATOR = !!(options && options.IS_ITERATOR); var INTERRUPTED = !!(options && options.INTERRUPTED); var fn = bind(unboundFunction, that); var iterator, iterFn, index, length, result, next, step; var stop = function (condition) { if (iterator) iteratorClose(iterator, 'normal', condition); return new Result(true, condition); }; var callFn = function (value) { if (AS_ENTRIES) { anObject(value); return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); } return INTERRUPTED ? fn(value, stop) : fn(value); }; if (IS_RECORD) { iterator = iterable.iterator; } else if (IS_ITERATOR) { iterator = iterable; } else { iterFn = getIteratorMethod(iterable); if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable'); // optimisation for array iterators if (isArrayIteratorMethod(iterFn)) { for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { result = callFn(iterable[index]); if (result && isPrototypeOf(ResultPrototype, result)) return result; } return new Result(false); } iterator = getIterator(iterable, iterFn); } next = IS_RECORD ? iterable.next : iterator.next; while (!(step = call(next, iterator)).done) { try { result = callFn(step.value); } catch (error) { iteratorClose(iterator, 'throw', error); } if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; } return new Result(false); }; return iterate; } export { requireIterate as __require };