| var _isArrayLike = |
| /*#__PURE__*/ |
| require("./_isArrayLike"); |
| |
| var _xwrap = |
| /*#__PURE__*/ |
| require("./_xwrap"); |
| |
| var bind = |
| /*#__PURE__*/ |
| require("../bind"); |
| |
| function _arrayReduce(xf, acc, list) { |
| var idx = 0; |
| var len = list.length; |
| |
| while (idx < len) { |
| acc = xf['@@transducer/step'](acc, list[idx]); |
| |
| if (acc && acc['@@transducer/reduced']) { |
| acc = acc['@@transducer/value']; |
| break; |
| } |
| |
| idx += 1; |
| } |
| |
| return xf['@@transducer/result'](acc); |
| } |
| |
| function _iterableReduce(xf, acc, iter) { |
| var step = iter.next(); |
| |
| while (!step.done) { |
| acc = xf['@@transducer/step'](acc, step.value); |
| |
| if (acc && acc['@@transducer/reduced']) { |
| acc = acc['@@transducer/value']; |
| break; |
| } |
| |
| step = iter.next(); |
| } |
| |
| return xf['@@transducer/result'](acc); |
| } |
| |
| function _methodReduce(xf, acc, obj, methodName) { |
| return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc)); |
| } |
| |
| var symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator'; |
| |
| function _reduce(fn, acc, list) { |
| if (typeof fn === 'function') { |
| fn = _xwrap(fn); |
| } |
| |
| if (_isArrayLike(list)) { |
| return _arrayReduce(fn, acc, list); |
| } |
| |
| if (typeof list['fantasy-land/reduce'] === 'function') { |
| return _methodReduce(fn, acc, list, 'fantasy-land/reduce'); |
| } |
| |
| if (list[symIterator] != null) { |
| return _iterableReduce(fn, acc, list[symIterator]()); |
| } |
| |
| if (typeof list.next === 'function') { |
| return _iterableReduce(fn, acc, list); |
| } |
| |
| if (typeof list.reduce === 'function') { |
| return _methodReduce(fn, acc, list, 'reduce'); |
| } |
| |
| throw new TypeError('reduce: list must be array or iterable'); |
| } |
| |
| module.exports = _reduce; |