apr-reduce
Version:
Reduces coll into a single value using an async iteratee to return each successive step.
50 lines (45 loc) • 3.8 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('lodash.defaults'), require('apr-engine-each')) :
typeof define === 'function' && define.amd ? define('apr-reduce', ['lodash.defaults', 'apr-engine-each'], factory) :
(global['apr-reduce'] = factory(global.lodash,global.aprEngineEach));
}(this, (function (lodash,aprEngineEach) { 'use strict';
lodash = lodash && lodash.hasOwnProperty('default') ? lodash['default'] : lodash;
aprEngineEach = aprEngineEach && aprEngineEach.hasOwnProperty('default') ? aprEngineEach['default'] : aprEngineEach;
/**
* <a id="reduce"></a>
* Reduces `coll` into a single value using an async `iteratee` to return each successive step.
*
* [](https://www.npmjs.com/package/apr-reduce) [](https://www.npmjs.com/package/apr-reduce)
*
* @kind function
* @name reduce
* @param {Array|Object|Iterable} input
* @param {Function} iteratee
* @returns {Promise}
*
* @example
* import reduce from 'apr-reduce';
*
* const sum = await reduce([1, 2, 3], async (sum, item) =>
* new Promise((resolve) => resolve(sum + item))
* );
*/
var reduce = function (input, fn, sum, opts) {
return aprEngineEach({
input: input,
opts: lodash(opts, {
limit: 1
}),
after: function after(value, item) {
sum = value;
},
call: function call(item) {
return fn(sum, item.value, item.key, input);
}
}).then(function () {
return sum;
});
};
return reduce;
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9Vc2Vycy9yYW1pdG9zL2Rldi9hcHIvcGFja2FnZXMvcmVkdWNlL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoLmRlZmF1bHRzJyk7XG5jb25zdCBlYWNoID0gcmVxdWlyZSgnYXByLWVuZ2luZS1lYWNoJyk7XG5cbi8qKlxuICogPGEgaWQ9XCJyZWR1Y2VcIj48L2E+XG4gKiBSZWR1Y2VzIGBjb2xsYCBpbnRvIGEgc2luZ2xlIHZhbHVlIHVzaW5nIGFuIGFzeW5jIGBpdGVyYXRlZWAgdG8gcmV0dXJuIGVhY2ggc3VjY2Vzc2l2ZSBzdGVwLlxuICpcbiAqIFshW10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vdi9hcHItcmVkdWNlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2Fwci1yZWR1Y2UpIFshW10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vbC9hcHItcmVkdWNlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2Fwci1yZWR1Y2UpXG4gKlxuICogQGtpbmQgZnVuY3Rpb25cbiAqIEBuYW1lIHJlZHVjZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8SXRlcmFibGV9IGlucHV0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZVxuICogQHJldHVybnMge1Byb21pc2V9XG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCByZWR1Y2UgZnJvbSAnYXByLXJlZHVjZSc7XG4gKlxuICogY29uc3Qgc3VtID0gYXdhaXQgcmVkdWNlKFsxLCAyLCAzXSwgYXN5bmMgKHN1bSwgaXRlbSkgPT5cbiAqICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUoc3VtICsgaXRlbSkpXG4gKiApO1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IChpbnB1dCwgZm4sIHN1bSwgb3B0cykgPT5cbiAgZWFjaCh7XG4gICAgaW5wdXQsXG4gICAgb3B0czogZGVmYXVsdHMob3B0cywge1xuICAgICAgbGltaXQ6IDFcbiAgICB9KSxcbiAgICBhZnRlcjogKHZhbHVlLCBpdGVtKSA9PiB7XG4gICAgICBzdW0gPSB2YWx1ZTtcbiAgICB9LFxuICAgIGNhbGw6IGl0ZW0gPT4gZm4oc3VtLCBpdGVtLnZhbHVlLCBpdGVtLmtleSwgaW5wdXQpXG4gIH0pLnRoZW4oKCkgPT4gc3VtKTtcbiJdLCJuYW1lcyI6WyJtb2R1bGUiLCJpbnB1dCIsImZuIiwic3VtIiwib3B0cyIsImVhY2giLCJkZWZhdWx0cyIsInZhbHVlIiwiaXRlbSIsImtleSIsInRoZW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBQSxVQUFBLEdBQWlCLFVBQUNDLEtBQUQsRUFBUUMsRUFBUixFQUFZQyxHQUFaLEVBQWlCQyxJQUFqQjtTQUNmQyxjQUFLO2dCQUFBO1VBRUdDLE9BQVNGLElBQVQsRUFBZTthQUNaO0tBREgsQ0FGSDtXQUtJLGVBQUNHLEtBQUQsRUFBUUMsSUFBUixFQUFpQjtZQUNoQkQsS0FBTjtLQU5DO1VBUUc7YUFBUUwsR0FBR0MsR0FBSCxFQUFRSyxLQUFLRCxLQUFiLEVBQW9CQyxLQUFLQyxHQUF6QixFQUE4QlIsS0FBOUIsQ0FBUjs7R0FSUixFQVNHUyxJQVRILENBU1E7V0FBTVAsR0FBTjtHQVRSLENBRGU7Q0FBakI7Ozs7Ozs7OyJ9