UNPKG

rejax

Version:

You don't need to create reducer and action creator to use redux.

202 lines (164 loc) 19.6 kB
"use strict"; var _storeConfig = _interopRequireWildcard(require("./storeConfig")); var _apiAction = _interopRequireDefault(require("./apiAction")); var _axios = _interopRequireDefault(require("axios")); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 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); }); }; } //create reducer function Rdx(instance) { var axiosInstance = instance; var allReducers = {}; var allReducersKeysMap = {}; var allReducersActionsMap = {}; var rejax = /*#__PURE__*/ function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee(_ref) { var reducerName, storeAs, type, _ref$action, action, _ref$fetch, fetch, actionName, payload, reducerkey, res, previousStoreKeyIndex, _res; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: reducerName = _ref.reducerName, storeAs = _ref.storeAs, type = _ref.type, _ref$action = _ref.action, action = _ref$action === void 0 ? {} : _ref$action, _ref$fetch = _ref.fetch, fetch = _ref$fetch === void 0 ? {} : _ref$fetch; actionName = type ? type : action.type; payload = action.payload; reducerkey = storeAs || (payload ? (0, _utils.toCamelCase)(action.type) : (0, _utils.toCamelCase)(type)); if (!(!allReducersActionsMap[reducerName] || !allReducersActionsMap[reducerName].some(function (_ref3) { var aName = _ref3.actionName; return aName === actionName; }))) { _context.next = 26; break; } allReducersActionsMap[reducerName] = allReducersActionsMap[reducerName] || []; allReducersKeysMap[reducerName] = allReducersKeysMap[reducerName] || []; if (!allReducersKeysMap[reducerName].includes(reducerkey)) { _context.next = 11; break; } throw new Error("This is key already there in reducer for some different action"); case 11: allReducersKeysMap[reducerName].push(reducerkey); case 12: allReducersActionsMap[reducerName].push({ actionName: actionName, actionReturn: function actionReturn(state, action) { return _objectSpread({}, state, _defineProperty({}, reducerkey, action.payload)); } }); allReducers[reducerName] = function () { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var runTimeAction = arguments.length > 1 ? arguments[1] : undefined; var allActionsForThisReducer = allReducersActionsMap[reducerName]; var actionState = allActionsForThisReducer.find(function (_ref4) { var aName = _ref4.actionName; return aName === runTimeAction.type; }); var returnState = actionState && actionState.actionReturn(state, runTimeAction); if (returnState) { return returnState; } else { return state; } }; (0, _storeConfig.injectReducer)(reducerName, allReducers[reducerName]); if (!payload) { _context.next = 19; break; } (0, _storeConfig.dispatch)({ action: action }); _context.next = 24; break; case 19: (0, _storeConfig.dispatch)({ type: actionName, payload: { isFetching: true } }); _context.next = 22; return (0, _apiAction["default"])({ axiosInstance: axiosInstance || _axios["default"], method: fetch.method && fetch.method.toLowerCase() || fetch.formData || fetch.data ? "post" : "get", url: fetch.url, data: fetch.data, formData: fetch.formData, type: actionName }); case 22: res = _context.sent; (0, _storeConfig.dispatch)(res); case 24: _context.next = 39; break; case 26: if (!(allReducersActionsMap[reducerName] || allReducersActionsMap[reducerName].some(function (_ref5) { var aName = _ref5.actionName; return aName === actionName; }))) { _context.next = 39; break; } previousStoreKeyIndex = allReducersActionsMap[reducerName].findIndex(function (_ref6) { var aName = _ref6.actionName; return aName === actionName; }); if (!(allReducersKeysMap[reducerName][previousStoreKeyIndex] !== reducerkey)) { _context.next = 30; break; } throw new Error("you are storing as different keys for same action"); case 30: if (!payload) { _context.next = 34; break; } (0, _storeConfig.dispatch)({ action: action }); _context.next = 39; break; case 34: (0, _storeConfig.dispatch)({ type: actionName, payload: { isFetching: true } }); _context.next = 37; return (0, _apiAction["default"])({ axiosInstance: axiosInstance || _axios["default"], method: fetch.method && fetch.method.toLowerCase() || fetch.formData || fetch.data ? "post" : "get", url: fetch.url, data: fetch.data, formData: fetch.formData, type: actionName }); case 37: _res = _context.sent; (0, _storeConfig.dispatch)(_res); case 39: case "end": return _context.stop(); } } }, _callee); })); return function rejax(_x) { return _ref2.apply(this, arguments); }; }(); return { rejax: rejax }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJSZHgiLCJpbnN0YW5jZSIsImF4aW9zSW5zdGFuY2UiLCJhbGxSZWR1Y2VycyIsImFsbFJlZHVjZXJzS2V5c01hcCIsImFsbFJlZHVjZXJzQWN0aW9uc01hcCIsInJlamF4IiwicmVkdWNlck5hbWUiLCJzdG9yZUFzIiwidHlwZSIsImFjdGlvbiIsImZldGNoIiwiYWN0aW9uTmFtZSIsInBheWxvYWQiLCJyZWR1Y2Vya2V5Iiwic29tZSIsImFOYW1lIiwiaW5jbHVkZXMiLCJFcnJvciIsInB1c2giLCJhY3Rpb25SZXR1cm4iLCJzdGF0ZSIsInJ1blRpbWVBY3Rpb24iLCJhbGxBY3Rpb25zRm9yVGhpc1JlZHVjZXIiLCJhY3Rpb25TdGF0ZSIsImZpbmQiLCJyZXR1cm5TdGF0ZSIsImlzRmV0Y2hpbmciLCJBeGlvcyIsIm1ldGhvZCIsInRvTG93ZXJDYXNlIiwiZm9ybURhdGEiLCJkYXRhIiwidXJsIiwicmVzIiwicHJldmlvdXNTdG9yZUtleUluZGV4IiwiZmluZEluZGV4Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0EsU0FBU0EsR0FBVCxDQUFhQyxRQUFiLEVBQXVCO0FBQ3JCLE1BQU1DLGFBQWEsR0FBR0QsUUFBdEI7QUFDQSxNQUFNRSxXQUFXLEdBQUcsRUFBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxFQUEzQjtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLEVBQTlCOztBQUVBLE1BQU1DLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDRCQUFHO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDWkMsY0FBQUEsV0FEWSxRQUNaQSxXQURZLEVBRVpDLE9BRlksUUFFWkEsT0FGWSxFQUdaQyxJQUhZLFFBR1pBLElBSFkscUJBSVpDLE1BSlksRUFJWkEsTUFKWSw0QkFJSCxFQUpHLGtDQUtaQyxLQUxZLEVBS1pBLEtBTFksMkJBS0os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QVM7QUFDUEQsZ0JBQUFBLElBQUksRUFBRUcsVUFEQztBQUVQQyxnQkFBQUEsT0FBTyxFQUFFO0FBQ1BjLGtCQUFBQSxVQUFVLEVBQUU7QUFETDtBQUZGLGVBQVQ7QUFqR007QUFBQSxxQkF1R1ksMkJBQVM7QUFDekJ6QixnQkFBQUEsYUFBYSxFQUFFQSxhQUFhLElBQUkwQixpQkFEUDtBQUV6QkMsZ0JBQUFBLE1BQU0sRUFDSGxCLEtBQUssQ0FBQ2tCLE1BQU4sSUFBZ0JsQixLQUFLLENBQUNrQixNQUFOLENBQWFDLFdBQWIsRUFBakIsSUFDQ25CLEtBQUssQ0FBQ29CLFFBQU4sSUFBa0JwQixLQUFLLENBQUNxQixJQUR6QixHQUVJLE1BRkosR0FHSSxLQU5tQjtBQU96QkMsZ0JBQUFBLEdBQUcsRUFBRXRCLEtBQUssQ0FBQ3NCLEdBUGM7QUFRekJELGdCQUFBQSxJQUFJLEVBQUVyQixLQUFLLENBQUNxQixJQVJhO0FBU3pCRCxnQkFBQUEsUUFBUSxFQUFFcEIsS0FBSyxDQUFDb0IsUUFUUztBQVV6QnRCLGdCQUFBQSxJQUFJLEVBQUVHO0FBVm1CLGVBQVQsQ0F2R1o7O0FBQUE7QUF1R0FzQixjQUFBQSxJQXZHQTtBQW1ITix5Q0FBU0EsSUFBVDs7QUFuSE07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBSDs7QUFBQSxvQkFBTDVCLEtBQUs7QUFBQTtBQUFBO0FBQUEsS0FBWDs7QUF3SEEsU0FBTztBQUNMQSxJQUFBQSxLQUFLLEVBQUxBO0FBREssR0FBUDtBQUdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0b3JlLCB7IGluamVjdFJlZHVjZXIsIGRpc3BhdGNoIH0gZnJvbSBcIi4vc3RvcmVDb25maWdcIjtcbmltcG9ydCByZHhGZXRjaCBmcm9tIFwiLi9hcGlBY3Rpb25cIjtcbmltcG9ydCBBeGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7IHRvQ2FtZWxDYXNlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuLy9jcmVhdGUgcmVkdWNlclxuZnVuY3Rpb24gUmR4KGluc3RhbmNlKSB7XG4gIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgY29uc3QgYWxsUmVkdWNlcnMgPSB7fTtcbiAgY29uc3QgYWxsUmVkdWNlcnNLZXlzTWFwID0ge307XG4gIGNvbnN0IGFsbFJlZHVjZXJzQWN0aW9uc01hcCA9IHt9O1xuXG4gIGNvbnN0IHJlamF4ID0gYXN5bmMgKHtcbiAgICByZWR1Y2VyTmFtZSxcbiAgICBzdG9yZUFzLFxuICAgIHR5cGUsXG4gICAgYWN0aW9uID0ge30sXG4gICAgZmV0Y2ggPSB7fVxuICB9KSA9PiB7XG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IHR5cGUgPyB0eXBlIDogYWN0aW9uLnR5cGU7XG4gICAgY29uc3QgcGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIGNvbnN0IHJlZHVjZXJrZXkgPVxuICAgICAgc3RvcmVBcyB8fCAocGF5bG9hZCA/IHRvQ2FtZWxDYXNlKGFjdGlvbi50eXBlKSA6IHRvQ2FtZWxDYXNlKHR5cGUpKTtcblxuICAgIGlmIChcbiAgICAgICFhbGxSZWR1Y2Vyc0FjdGlvbnNNYXBbcmVkdWNlck5hbWVdIHx8XG4gICAgICAhYWxsUmVkdWNlcnNBY3Rpb25zTWFwW3JlZHVjZXJOYW1lXS5zb21lKFxuICAgICAgICAoeyBhY3Rpb25OYW1lOiBhTmFtZSB9KSA9PiBhTmFtZSA9PT0gYWN0aW9uTmFtZVxuICAgICAgKVxuICAgICkge1xuICAgICAgYWxsUmVkdWNlcnNBY3Rpb25zTWFwW3JlZHVjZXJOYW1lXSA9XG4gICAgICAgIGFsbFJlZHVjZXJzQWN0aW9uc01hcFtyZWR1Y2VyTmFtZV0gfHwgW107XG4gICAgICBhbGxSZWR1Y2Vyc0tleXNNYXBbcmVkdWNlck5hbWVdID0gYWxsUmVkdWNlcnNLZXlzTWFwW3JlZHVjZXJOYW1lXSB8fCBbXTtcbiAgICAgIGlmIChhbGxSZWR1Y2Vyc0tleXNNYXBbcmVkdWNlck5hbWVdLmluY2x1ZGVzKHJlZHVjZXJrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoaXMgaXMga2V5IGFscmVhZHkgdGhlcmUgaW4gcmVkdWNlciBmb3Igc29tZSBkaWZmZXJlbnQgYWN0aW9uXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbFJlZHVjZXJzS2V5c01hcFtyZWR1Y2VyTmFtZV0ucHVzaChyZWR1Y2Vya2V5KTtcbiAgICAgIH1cblxuICAgICAgYWxsUmVkdWNlcnNBY3Rpb25zTWFwW3JlZHVjZXJOYW1lXS5wdXNoKHtcbiAgICAgICAgYWN0aW9uTmFtZSxcbiAgICAgICAgYWN0aW9uUmV0dXJuOiBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgW3JlZHVjZXJrZXldOiBhY3Rpb24ucGF5bG9hZFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYWxsUmVkdWNlcnNbcmVkdWNlck5hbWVdID0gKHN0YXRlID0ge30sIHJ1blRpbWVBY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgYWxsQWN0aW9uc0ZvclRoaXNSZWR1Y2VyID0gYWxsUmVkdWNlcnNBY3Rpb25zTWFwW3JlZHVjZXJOYW1lXTtcbiAgICAgICAgY29uc3QgYWN0aW9uU3RhdGUgPSBhbGxBY3Rpb25zRm9yVGhpc1JlZHVjZXIuZmluZChcbiAgICAgICAgICAoeyBhY3Rpb25OYW1lOiBhTmFtZSB9KSA9PiBhTmFtZSA9PT0gcnVuVGltZUFjdGlvbi50eXBlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJldHVyblN0YXRlID1cbiAgICAgICAgICBhY3Rpb25TdGF0ZSAmJiBhY3Rpb25TdGF0ZS5hY3Rpb25SZXR1cm4oc3RhdGUsIHJ1blRpbWVBY3Rpb24pO1xuICAgICAgICBpZiAocmV0dXJuU3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmV0dXJuU3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaW5qZWN0UmVkdWNlcihyZWR1Y2VyTmFtZSwgYWxsUmVkdWNlcnNbcmVkdWNlck5hbWVdKTtcbiAgICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICBhY3Rpb25cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogYWN0aW9uTmFtZSxcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmR4RmV0Y2goe1xuICAgICAgICAgIGF4aW9zSW5zdGFuY2U6IGF4aW9zSW5zdGFuY2UgfHwgQXhpb3MsXG4gICAgICAgICAgbWV0aG9kOlxuICAgICAgICAgICAgKGZldGNoLm1ldGhvZCAmJiBmZXRjaC5tZXRob2QudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgIChmZXRjaC5mb3JtRGF0YSB8fCBmZXRjaC5kYXRhKVxuICAgICAgICAgICAgICA/IFwicG9zdFwiXG4gICAgICAgICAgICAgIDogXCJnZXRcIixcbiAgICAgICAgICB1cmw6IGZldGNoLnVybCxcbiAgICAgICAgICBkYXRhOiBmZXRjaC5kYXRhLFxuICAgICAgICAgIGZvcm1EYXRhOiBmZXRjaC5mb3JtRGF0YSxcbiAgICAgICAgICB0eXBlOiBhY3Rpb25OYW1lXG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaChyZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIGFsbFJlZHVjZXJzQWN0aW9uc01hcFtyZWR1Y2VyTmFtZV0gfHxcbiAgICAgICAgYWxsUmVkdWNlcnNBY3Rpb25zTWFwW3JlZHVjZXJOYW1lXS5zb21lKFxuICAgICAgICAgICh7IGFjdGlvbk5hbWU6IGFOYW1lIH0pID0+IGFOYW1lID09PSBhY3Rpb25OYW1lXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1N0b3JlS2V5SW5kZXggPSBhbGxSZWR1Y2Vyc0FjdGlvbnNNYXBbXG4gICAgICAgICAgcmVkdWNlck5hbWVcbiAgICAgICAgXS5maW5kSW5kZXgoKHsgYWN0aW9uTmFtZTogYU5hbWUgfSkgPT4gYU5hbWUgPT09IGFjdGlvbk5hbWUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWxsUmVkdWNlcnNLZXlzTWFwW3JlZHVjZXJOYW1lXVtwcmV2aW91c1N0b3JlS2V5SW5kZXhdICE9PSByZWR1Y2Vya2V5XG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInlvdSBhcmUgc3RvcmluZyBhcyBkaWZmZXJlbnQga2V5cyBmb3Igc2FtZSBhY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheWxvYWQpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmR4RmV0Y2goe1xuICAgICAgICAgICAgYXhpb3NJbnN0YW5jZTogYXhpb3NJbnN0YW5jZSB8fCBBeGlvcyxcbiAgICAgICAgICAgIG1ldGhvZDpcbiAgICAgICAgICAgICAgKGZldGNoLm1ldGhvZCAmJiBmZXRjaC5tZXRob2QudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgKGZldGNoLmZvcm1EYXRhIHx8IGZldGNoLmRhdGEpXG4gICAgICAgICAgICAgICAgPyBcInBvc3RcIlxuICAgICAgICAgICAgICAgIDogXCJnZXRcIixcbiAgICAgICAgICAgIHVybDogZmV0Y2gudXJsLFxuICAgICAgICAgICAgZGF0YTogZmV0Y2guZGF0YSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBmZXRjaC5mb3JtRGF0YSxcbiAgICAgICAgICAgIHR5cGU6IGFjdGlvbk5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkaXNwYXRjaChyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIHJlamF4XG4gIH07XG59XG4iXX0=