UNPKG

@jilib/ji

Version:

Ji Language — Symbols as Functions

133 lines (106 loc) 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.waitfold = exports.fold = void 0; function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } // Array folding // https://dev.to/mebble/learn-to-fold-your-js-arrays-2o8p var fold = function fold(reducer, init, xs) { var acc = init; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = xs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var x = _step.value; acc = reducer(acc, x); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator["return"] != null) { _iterator["return"](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return acc; }; // Like the normal `fold` function but with added async/await functionality to play nice with Observable's environment exports.fold = fold; var waitfold = /*#__PURE__*/ function () { var _ref = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee(reducer, init, xs) { var acc, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, x; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: acc = init; _iteratorNormalCompletion2 = true; _didIteratorError2 = false; _iteratorError2 = undefined; _context.prev = 4; _iterator2 = xs[Symbol.iterator](); case 6: if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) { _context.next = 14; break; } x = _step2.value; _context.next = 10; return reducer(acc, x); case 10: acc = _context.sent; case 11: _iteratorNormalCompletion2 = true; _context.next = 6; break; case 14: _context.next = 20; break; case 16: _context.prev = 16; _context.t0 = _context["catch"](4); _didIteratorError2 = true; _iteratorError2 = _context.t0; case 20: _context.prev = 20; _context.prev = 21; if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) { _iterator2["return"](); } case 23: _context.prev = 23; if (!_didIteratorError2) { _context.next = 26; break; } throw _iteratorError2; case 26: return _context.finish(23); case 27: return _context.finish(20); case 28: return _context.abrupt("return", acc); case 29: case "end": return _context.stop(); } } }, _callee, null, [[4, 16, 20, 28], [21,, 23, 27]]); })); return function waitfold(_x, _x2, _x3) { return _ref.apply(this, arguments); }; }(); exports.waitfold = waitfold;