@jilib/ji
Version:
Ji Language — Symbols as Functions
133 lines (106 loc) • 3.94 kB
JavaScript
;
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;