UNPKG

moltres-utils

Version:
95 lines (76 loc) 2.72 kB
"use strict"; require("core-js/modules/es6.object.define-property"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("core-js/modules/web.dom.iterable"); require("core-js/modules/es6.array.iterator"); require("core-js/modules/es6.string.iterator"); require("core-js/modules/es6.set"); var _concat = _interopRequireDefault(require("./concat")); var _curry = _interopRequireDefault(require("../common/curry")); var _isObjectLike = _interopRequireDefault(require("../lang/isObjectLike")); var _pipe = _interopRequireDefault(require("../common/pipe")); var _reduce = _interopRequireDefault(require("./reduce")); var _resolve = _interopRequireDefault(require("../common/resolve")); var _walk = _interopRequireDefault(require("./walk")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var reduceWalkee = function reduceWalkee() { var visited = new Set(); return function (accum, value, keys, iteratee, recur) { return (0, _pipe.default)(function (result) { return iteratee(result, value, keys); }, function (result) { var resolvedValue = (0, _resolve.default)(value); if ((0, _isObjectLike.default)(resolvedValue) && !visited.has(resolvedValue)) { visited.add(resolvedValue); return (0, _reduce.default)(function (accumResult, child, childKdx) { var newKeys = (0, _concat.default)(keys, [childKdx]); return recur(accumResult, child, newKeys, iteratee); }, result, resolvedValue); } return result; })(accum); }; }; /** * Walk reduce using the given reducer function * * NOTE: This method will resolve values during the walk before iterating and walking them. * * @function * @since v0.0.4 * @category data * @param {Function} fn The iterator function. Receives three values, the accumulator and the current element from the walk and the current set of keys from the entire depth of the walk. * @param {*} accum The accumulator value. * @param {*} collection The collection to walk. * @returns {*} The final, accumulated value. * @example * * walkReduce( * (accum, value, keys) => { * if (!isObject(value)) { * return accum + toString(value) * } * return accum * }, * '', * { * a: { * b: 'b', * c: { * d: 'd' * } * }, * e: [ 'e', 'f' ] * } * ) * //=> 'bdef' */ var walkReduce = (0, _curry.default)(function (iteratee, accum, collection) { return (0, _walk.default)(reduceWalkee(), iteratee, accum, collection, []); }); var _default = walkReduce; exports.default = _default; //# sourceMappingURL=walkReduce.js.map