UNPKG

moltres-utils

Version:
84 lines (64 loc) 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _isResolvable = _interopRequireDefault(require("../saga/isResolvable")); var _resolveWith = _interopRequireDefault(require("../saga/resolveWith")); var _getProp = _interopRequireDefault(require("./getProp")); var _iterator = _interopRequireDefault(require("./iterator")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const getDone = (0, _getProp.default)('done'); const getValue = (0, _getProp.default)('value'); const resolveNext = (next, fn, iter, recur) => (0, _resolveWith.default)(resolvedNext => { if (getDone(resolvedNext)) { return getValue(resolvedNext); } return recur(fn, iter); }, next); const doSeriesIteration = (fn, iter) => { while (true) { let next = iter.next(); if ((0, _isResolvable.default)(next)) { return (0, _resolveWith.default)(resolvedNext => { next = fn(resolvedNext); if ((0, _isResolvable.default)(next)) { return resolveNext(next, fn, iter, doSeriesIteration); } if (getDone(next)) { return getValue(next); } return doSeriesIteration(fn, iter); }, next); } next = fn(next); if ((0, _isResolvable.default)(next)) { return resolveNext(next, fn, iter, doSeriesIteration); } if (getDone(next)) { return getValue(next); } } }; /** * This method iterates over the given collection or iterator in series. If the iterate method Returns * done: true then the iteration will complete * * @func * @param {Function} fn The iteratee Function * @param {*} collection The collection or iterator to iterate over * @returns {*} the final value returned when the iteratee returns done or undefined * @example * * iterate((value, kdx) => { * if (value === 'b') { * return { done: true, value: kdx } * } * return { done: false } * }, ['a', 'b', 'c']) * //=> 1 */ const iterate = (fn, collection) => doSeriesIteration(fn, (0, _iterator.default)(collection)); var _default = iterate; exports.default = _default; //# sourceMappingURL=iterate.js.map