UNPKG

@mic-rexjs/usecases

Version:
71 lines (70 loc) 3.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createEntityReducers = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _generateEntity3 = require("../generateEntity"); var _EntityStore = require("../../classes/EntityStore"); var _isGenerator = require("../isGenerator"); var _entityUseCase = require("../../usecases/entityUseCase"); var _excluded = ["onYield", "onReturn", "onGenerate"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var createEntityReducers = exports.createEntityReducers = function createEntityReducers(arg1, arg2, arg3) { var hasEntity = typeof arg2 === 'function'; var initialEntity = hasEntity ? arg1 : null; var store = initialEntity instanceof _EntityStore.EntityStore ? initialEntity : new _EntityStore.EntityStore(initialEntity); var usecase = hasEntity ? arg2 : arg1; var options = hasEntity ? arg3 : arg2; var _ref = options || {}, _ref$onYield = _ref.onYield, _onYield = _ref$onYield === void 0 ? function (entity) { return entity; } : _ref$onYield, onReturn = _ref.onReturn, onGenerate = _ref.onGenerate, usecaseOptions = (0, _objectWithoutProperties2["default"])(_ref, _excluded); var smoothedReducers = {}; var entityReducers = (0, _entityUseCase.entityUseCase)(); var usecaseReducers = usecase(usecaseOptions); var sourceReducers = _objectSpread(_objectSpread({}, entityReducers), usecaseReducers); var keys = Object.keys(sourceReducers); var setEntity = sourceReducers.setEntity; keys.forEach(function (key) { var reducer = sourceReducers[key]; smoothedReducers[key] = function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var reducerArgs = hasEntity ? [store.value].concat(args) : args; var ret = reducer.apply(void 0, (0, _toConsumableArray2["default"])(reducerArgs)); if (!hasEntity) { store.value = args[0]; } if (!(0, _isGenerator.isGenerator)(ret)) { return ret; } return (0, _generateEntity3.generateEntity)(ret, { store: store, onYield: function onYield(newEntity, oldEntity) { var entity = newEntity; if (reducer !== setEntity) { // 不能使用第 `0` 项,不一定会有 `yeild`,但一定会有 `return` var _generateEntity = (0, _generateEntity3.generateEntity)(setEntity(oldEntity, newEntity)); var _generateEntity2 = (0, _slicedToArray2["default"])(_generateEntity, 2); entity = _generateEntity2[1]; } return _onYield(entity); }, onReturn: onReturn, onGenerate: onGenerate }); }; }); return smoothedReducers; };