1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _keys = require('babel-runtime/core-js/object/keys');
|
8 |
|
9 | var _keys2 = _interopRequireDefault(_keys);
|
10 |
|
11 | var _regenerator = require('babel-runtime/regenerator');
|
12 |
|
13 | var _regenerator2 = _interopRequireDefault(_regenerator);
|
14 |
|
15 | var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
|
16 |
|
17 | var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
|
18 |
|
19 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
20 |
|
21 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
22 |
|
23 | var _createClass2 = require('babel-runtime/helpers/createClass');
|
24 |
|
25 | var _createClass3 = _interopRequireDefault(_createClass2);
|
26 |
|
27 | var _react = require('react');
|
28 |
|
29 | var _react2 = _interopRequireDefault(_react);
|
30 |
|
31 | var _reactDom = require('react-dom');
|
32 |
|
33 | var _reactDom2 = _interopRequireDefault(_reactDom);
|
34 |
|
35 | var _redux = require('redux');
|
36 |
|
37 | var _reactRedux = require('react-redux');
|
38 |
|
39 | var _reduxSaga = require('redux-saga');
|
40 |
|
41 | var _reduxSaga2 = _interopRequireDefault(_reduxSaga);
|
42 |
|
43 | var _effects = require('redux-saga/effects');
|
44 |
|
45 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
46 |
|
47 | var 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: _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: _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 |
|
208 | exports.default = new Rluy(); |
\ | No newline at end of file |