123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- 'use strict';
- exports.isIterable = isIterable;
- exports.isArrayLike = isArrayLike;
- exports.isCollection = isCollection;
- exports.getIterator = getIterator;
- exports.getIteratorMethod = getIteratorMethod;
- exports.createIterator = createIterator;
- exports.forEach = forEach;
- exports.isAsyncIterable = isAsyncIterable;
- exports.getAsyncIterator = getAsyncIterator;
- exports.getAsyncIteratorMethod = getAsyncIteratorMethod;
- exports.createAsyncIterator = createAsyncIterator;
- exports.forAwaitEach = forAwaitEach;
- var SYMBOL = typeof Symbol === 'function' ? Symbol : void 0;
- var SYMBOL_ITERATOR = SYMBOL && SYMBOL.iterator;
- var $$iterator = exports.$$iterator = SYMBOL_ITERATOR || '@@iterator';
- function isIterable(obj) {
- return !!getIteratorMethod(obj);
- }
- function isArrayLike(obj) {
- var length = obj != null && obj.length;
- return typeof length === 'number' && length >= 0 && length % 1 === 0;
- }
- function isCollection(obj) {
- return Object(obj) === obj && (isArrayLike(obj) || isIterable(obj));
- }
- function getIterator(iterable) {
- var method = getIteratorMethod(iterable);
- if (method) {
- return method.call(iterable);
- }
- }
- function getIteratorMethod(iterable) {
- if (iterable != null) {
- var method = SYMBOL_ITERATOR && iterable[SYMBOL_ITERATOR] || iterable['@@iterator'];
- if (typeof method === 'function') {
- return method;
- }
- }
- }
- function createIterator(collection) {
- if (collection != null) {
- var iterator = getIterator(collection);
- if (iterator) {
- return iterator;
- }
- if (isArrayLike(collection)) {
- return new ArrayLikeIterator(collection);
- }
- }
- }
- function ArrayLikeIterator(obj) {
- this._o = obj;
- this._i = 0;
- }
- ArrayLikeIterator.prototype[$$iterator] = function () {
- return this;
- };
- ArrayLikeIterator.prototype.next = function () {
- if (this._o === void 0 || this._i >= this._o.length) {
- this._o = void 0;
- return { value: void 0, done: true };
- }
- return { value: this._o[this._i++], done: false };
- };
- function forEach(collection, callback, thisArg) {
- if (collection != null) {
- if (typeof collection.forEach === 'function') {
- return collection.forEach(callback, thisArg);
- }
- var i = 0;
- var iterator = getIterator(collection);
- if (iterator) {
- var step;
- while (!(step = iterator.next()).done) {
- callback.call(thisArg, step.value, i++, collection);
- if (i > 9999999) {
- throw new TypeError('Near-infinite iteration.');
- }
- }
- } else if (isArrayLike(collection)) {
- for (; i < collection.length; i++) {
- if (collection.hasOwnProperty(i)) {
- callback.call(thisArg, collection[i], i, collection);
- }
- }
- }
- }
- }
- var SYMBOL_ASYNC_ITERATOR = SYMBOL && SYMBOL.asyncIterator;
- var $$asyncIterator = exports.$$asyncIterator = SYMBOL_ASYNC_ITERATOR || '@@asyncIterator';
- function isAsyncIterable(obj) {
- return !!getAsyncIteratorMethod(obj);
- }
- function getAsyncIterator(asyncIterable) {
- var method = getAsyncIteratorMethod(asyncIterable);
- if (method) {
- return method.call(asyncIterable);
- }
- }
- function getAsyncIteratorMethod(asyncIterable) {
- if (asyncIterable != null) {
- var method = SYMBOL_ASYNC_ITERATOR && asyncIterable[SYMBOL_ASYNC_ITERATOR] || asyncIterable['@@asyncIterator'];
- if (typeof method === 'function') {
- return method;
- }
- }
- }
- function createAsyncIterator(source) {
- if (source != null) {
- var asyncIterator = getAsyncIterator(source);
- if (asyncIterator) {
- return asyncIterator;
- }
- var iterator = createIterator(source);
- if (iterator) {
- return new AsyncFromSyncIterator(iterator);
- }
- }
- }
- function AsyncFromSyncIterator(iterator) {
- this._i = iterator;
- }
- AsyncFromSyncIterator.prototype[$$asyncIterator] = function () {
- return this;
- };
- AsyncFromSyncIterator.prototype.next = function (value) {
- return unwrapAsyncFromSync(this._i, 'next', value);
- };
- AsyncFromSyncIterator.prototype.return = function (value) {
- return this._i.return ? unwrapAsyncFromSync(this._i, 'return', value) : Promise.resolve({ value: value, done: true });
- };
- AsyncFromSyncIterator.prototype.throw = function (value) {
- return this._i.throw ? unwrapAsyncFromSync(this._i, 'throw', value) : Promise.reject(value);
- };
- function unwrapAsyncFromSync(iterator, fn, value) {
- var step;
- return new Promise(function (resolve) {
- step = iterator[fn](value);
- resolve(step.value);
- }).then(function (value) {
- return { value: value, done: step.done };
- });
- }
- function forAwaitEach(source, callback, thisArg) {
- var asyncIterator = createAsyncIterator(source);
- if (asyncIterator) {
- var i = 0;
- return new Promise(function (resolve, reject) {
- function next() {
- asyncIterator.next().then(function (step) {
- if (!step.done) {
- Promise.resolve(callback.call(thisArg, step.value, i++, source)).then(next).catch(reject);
- } else {
- resolve();
- }
- return null;
- }).catch(reject);
- return null;
- }
- next();
- });
- }
- }
|