UNPKG

iter-tools-es

Version:
42 lines (35 loc) 927 B
const { asyncIterableCurry } = require('../../internal/async-iterable.js'); const { __asyncPeekerate } = require('../$peekerate/async-peekerate.js'); async function __asyncReduce(iterable, reducer, initial = undefined) { let c = 0; let result = initial; const peekr = await __asyncPeekerate(iterable); try { if (initial === undefined) { if (peekr.done) { throw new Error('Cannot reduce: no initial value specified and iterable was empty'); } result = peekr.value; await peekr.advance(); c = 1; } while (!peekr.done) { result = await reducer(result, peekr.value, c++); await peekr.advance(); } return result; } finally { peekr.return(); } } exports.__asyncReduce = __asyncReduce; const asyncReduce = /*#__PURE__*/asyncIterableCurry(__asyncReduce, { reduces: true, minArgs: 1, maxArgs: 2 }); exports.asyncReduce = asyncReduce;