UNPKG

@mic-rexjs/usecases

Version:
90 lines (89 loc) 3.44 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.generateEntity = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _EntityStore = require("../../classes/EntityStore"); var _isGenerator = require("../isGenerator"); var generateEntity = exports.generateEntity = function generateEntity(generator) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var results = []; var isAsync = (0, _isGenerator.isGenerator)(generator, Symbol.asyncIterator); var _options$store = options.store, store = _options$store === void 0 ? new _EntityStore.EntityStore(void 0) : _options$store, _options$onYield = options.onYield, onYield = _options$onYield === void 0 ? function (entity) { return entity; } : _options$onYield, _options$onReturn = options.onReturn, onReturn = _options$onReturn === void 0 ? function (result) { return result; } : _options$onReturn, _options$onGenerate = options.onGenerate, onGenerate = _options$onGenerate === void 0 ? function (entity, result) { return [entity, result]; } : _options$onGenerate; var generate = /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var ret, syncRet, asyncRet, _ref2, value, done, currentEntity, result, newEntity; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: ret = generator.next(store.value); syncRet = ret; asyncRet = ret; if (!isAsync) { _context.next = 9; break; } _context.next = 6; return asyncRet; case 6: _context.t0 = _context.sent; _context.next = 10; break; case 9: _context.t0 = syncRet; case 10: _ref2 = _context.t0; value = _ref2.value; done = _ref2.done; currentEntity = store.value; if (!done) { _context.next = 18; break; } result = onReturn(value, currentEntity); results[0] = result; return _context.abrupt("return", [currentEntity, result]); case 18: newEntity = onYield(typeof value === 'function' ? value(currentEntity) : value, currentEntity); store.setValue(newEntity); case 20: _context.next = 0; break; case 22: case "end": return _context.stop(); } }, _callee); })); return function generate() { return _ref.apply(this, arguments); }; }(); var promise = generate(); if (results.length > 0) { return onGenerate(store.value, results[0]); } return promise.then(function (_ref3) { var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2), entity = _ref4[0], result = _ref4[1]; return onGenerate(entity, result); }); };