UNPKG

4.93 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.createDuraCore = createDuraCore;
7
8var _redux = require("redux");
9
10var _reduxSaga2 = _interopRequireDefault(require("redux-saga"));
11
12var _duraUtil = require("dura-util");
13
14var _PluginHandler = _interopRequireDefault(require("./PluginHandler"));
15
16var _ModelHandler = _interopRequireDefault(require("./ModelHandler"));
17
18var _invariant = _interopRequireDefault(require("invariant"));
19
20function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
22function _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; }
23
24function _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; }
25
26var defaultOptions = {
27 initialModel: []
28};
29
30function createDuraCore() {
31 var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultOptions;
32
33 var newOps = _objectSpread({}, defaultOptions, options);
34
35 var pluginHandler = new _PluginHandler.default();
36 var modelHandler = new _ModelHandler.default({
37 pluginHandler: pluginHandler
38 });
39 var duraCore = {
40 _initialModel: newOps.initialModel,
41 _reduxStore: undefined,
42 _reduxSaga: undefined,
43 _namespaces: {},
44 addModel: addModel,
45 delModel: delModel,
46 addPlugin: addPlugin,
47 start: start,
48 restart: restart
49 };
50 return duraCore;
51
52 function validate(target) {
53 var namespace = target.namespace; //必须有namespace
54
55 (0, _invariant.default)(namespace, "namespace should be defined"); //必须是string类型
56
57 (0, _invariant.default)(typeof namespace === 'string', "namespace should be string"); //必须唯一
58
59 (0, _invariant.default)(!duraCore._namespaces[namespace], "namespace should be unique , the repeated namespace is ".concat(namespace));
60 }
61
62 function addPlugin() {
63 for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
64 plugins[_key] = arguments[_key];
65 }
66
67 plugins.forEach(function (plugin) {
68 validate(plugin);
69 duraCore._namespaces[plugin.namespace] = plugin;
70 pluginHandler.addPlugin(plugin);
71 });
72 }
73
74 function addModel() {
75 for (var _len2 = arguments.length, models = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
76 models[_key2] = arguments[_key2];
77 }
78
79 models.forEach(function (model) {
80 validate(model);
81 duraCore._namespaces[model.namespace] = model;
82 modelHandler.addModel(model);
83 });
84 }
85
86 function delModel() {
87 for (var _len3 = arguments.length, namespaces = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
88 namespaces[_key3] = arguments[_key3];
89 }
90
91 namespaces.forEach(function (namespace) {
92 delete duraCore._namespaces[namespace];
93 modelHandler.delModel(namespace);
94 });
95 }
96
97 function start() {
98 duraCore._reduxSaga = (0, _reduxSaga2.default)();
99 duraCore._reduxStore = (0, _redux.createStore)(modelHandler.getCombineReducers(), (0, _redux.applyMiddleware)(duraCore._reduxSaga));
100 var onStateChangeEventFuns = pluginHandler.getOnStateChangeEventFun();
101 var _iteratorNormalCompletion = true;
102 var _didIteratorError = false;
103 var _iteratorError = undefined;
104
105 try {
106 var _loop = function _loop() {
107 var fun = _step.value;
108
109 duraCore._reduxStore.subscribe(function () {
110 fun(duraCore._reduxStore.getState());
111 });
112 };
113
114 for (var _iterator = onStateChangeEventFuns[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
115 _loop();
116 }
117 } catch (err) {
118 _didIteratorError = true;
119 _iteratorError = err;
120 } finally {
121 try {
122 if (!_iteratorNormalCompletion && _iterator.return != null) {
123 _iterator.return();
124 }
125 } finally {
126 if (_didIteratorError) {
127 throw _iteratorError;
128 }
129 }
130 }
131
132 duraCore._reduxSaga.run(modelHandler.getCombineEffects());
133 }
134
135 function restart() {
136 var _reduxStore = duraCore._reduxStore,
137 _reduxSaga = duraCore._reduxSaga;
138
139 _reduxStore.replaceReducer(modelHandler.getCombineReducers());
140
141 _reduxStore.dispatch({
142 type: '@@duraCore/reducers/onChangeState'
143 });
144
145 _reduxStore.dispatch({
146 type: '@@dura/cancel'
147 });
148
149 _reduxSaga.run(modelHandler.getCombineEffects());
150 }
151}
\No newline at end of file