UNPKG

7.07 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _keys = require('babel-runtime/core-js/object/keys');
8
9var _keys2 = _interopRequireDefault(_keys);
10
11var _regenerator = require('babel-runtime/regenerator');
12
13var _regenerator2 = _interopRequireDefault(_regenerator);
14
15var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
16
17var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
18
19var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
20
21var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
22
23var _createClass2 = require('babel-runtime/helpers/createClass');
24
25var _createClass3 = _interopRequireDefault(_createClass2);
26
27var _react = require('react');
28
29var _react2 = _interopRequireDefault(_react);
30
31var _reactDom = require('react-dom');
32
33var _reactDom2 = _interopRequireDefault(_reactDom);
34
35var _redux = require('redux');
36
37var _reactRedux = require('react-redux');
38
39var _reduxSaga = require('redux-saga');
40
41var _reduxSaga2 = _interopRequireDefault(_reduxSaga);
42
43var _effects = require('redux-saga/effects');
44
45function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
47var Rluy = function () {
48 function Rluy() {
49 (0, _classCallCheck3.default)(this, Rluy);
50
51 this.routingComponent = {};
52 this.sagaMiddleware = {};
53 this.appReducers = {};
54 this.actionStategy = [];
55 this.effects = {};
56 this.JsxElement = {};
57 this.errorFn = void 666;
58 }
59
60 (0, _createClass3.default)(Rluy, [{
61 key: 'onError',
62 value: function onError(fn) {
63 this.errorFn = fn;
64 }
65 }, {
66 key: 'rootWatcher',
67 value: /*#__PURE__*/_regenerator2.default.mark(function rootWatcher() {
68 var _ref, type, others, fn;
69
70 return _regenerator2.default.wrap(function rootWatcher$(_context) {
71 while (1) {
72 switch (_context.prev = _context.next) {
73 case 0:
74 if (!1) {
75 _context.next = 18;
76 break;
77 }
78
79 _context.next = 3;
80 return (0, _effects.take)(this.actionStategy);
81
82 case 3:
83 _ref = _context.sent;
84 type = _ref.type;
85 others = (0, _objectWithoutProperties3.default)(_ref, ['type']);
86 fn = this.effects[type];
87
88 if (!(fn !== void 666)) {
89 _context.next = 16;
90 break;
91 }
92
93 _context.prev = 8;
94 _context.next = 11;
95 return (0, _effects.call)(fn, { fork: _effects.fork, take: _effects.take, select: _effects.select, call: _effects.call, put: _effects.put }, others);
96
97 case 11:
98 _context.next = 16;
99 break;
100
101 case 13:
102 _context.prev = 13;
103 _context.t0 = _context['catch'](8);
104
105 this.errorFn(_context.t0);
106
107 case 16:
108 _context.next = 0;
109 break;
110
111 case 18:
112 case 'end':
113 return _context.stop();
114 }
115 }
116 }, rootWatcher, this, [[8, 13]]);
117 })
118 }, {
119 key: 'rootSaga',
120 value: /*#__PURE__*/_regenerator2.default.mark(function rootSaga() {
121 return _regenerator2.default.wrap(function rootSaga$(_context2) {
122 while (1) {
123 switch (_context2.prev = _context2.next) {
124 case 0:
125 _context2.next = 2;
126 return (0, _effects.all)([(0, _effects.fork)(this.rootWatcher.bind(this))]);
127
128 case 2:
129 case 'end':
130 return _context2.stop();
131 }
132 }
133 }, rootSaga, this);
134 })
135 }, {
136 key: 'init',
137 value: function init() {
138 this.sagaMiddleware = (0, _reduxSaga2.default)(this.rootSaga);
139 }
140 }, {
141 key: 'model',
142 value: function model(Module) {
143 var _this = this;
144
145 var model = Module.default;
146 var namespace = model.namespace;
147 if (namespace === void 666) {
148 throw new SyntaxError('module needs a namespace');
149 }
150 if (this.appReducers[namespace]) {
151 throw new SyntaxError('module for name \'' + namespace + '\' exist');
152 }
153
154 (0, _keys2.default)(model.effects).forEach(function (key) {
155 _this.actionStategy.push(key);
156 _this.effects[key] = model.effects[key];
157 });
158
159 var modelState = model.state || {};
160 var reducer = function reducer() {
161 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : modelState;
162 var _ref2 = arguments[1];
163 var type = _ref2.type,
164 payload = _ref2.payload;
165
166 var func = model.reducer[type];
167 if (func) {
168 return func(state, { type: type, payload: payload });
169 }
170 return state;
171 };
172 this.appReducers[namespace] = reducer;
173 }
174 }, {
175 key: 'injectRun',
176 value: function injectRun(JsxElement) {
177 var store = (0, _redux.createStore)((0, _redux.combineReducers)(this.appReducers), (0, _redux.applyMiddleware)(this.sagaMiddleware));
178 this.sagaMiddleware.run(this.rootSaga.bind(this));
179
180 return _react2.default.createElement(
181 _reactRedux.Provider,
182 { store: store },
183 JsxElement
184 );
185 }
186 }, {
187 key: 'router',
188 value: function router(RouterModel) {
189 var _RouterModel = RouterModel.default;
190 this.JsxElement = typeof _RouterModel === 'function' ? _RouterModel(this.routingComponent) : _RouterModel;
191 }
192 }, {
193 key: 'run',
194 value: function run(DOMNode) {
195 var store = (0, _redux.createStore)((0, _redux.combineReducers)(this.appReducers), (0, _redux.applyMiddleware)(this.sagaMiddleware));
196 this.sagaMiddleware.run(this.rootSaga.bind(this));
197
198 _reactDom2.default.render(_react2.default.createElement(
199 _reactRedux.Provider,
200 { store: store },
201 this.JsxElement
202 ), DOMNode);
203 }
204 }]);
205 return Rluy;
206}();
207
208exports.default = new Rluy();
\No newline at end of file