watermark-js-plus
Version:
watermark for the browser
90 lines (78 loc) • 3.4 kB
JavaScript
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 };