dva-core
Advanced tools
Comparing version 1.1.0 to 1.2.0
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,21 +6,12 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
var _keys = require('babel-runtime/core-js/object/keys'); | ||
var _keys2 = _interopRequireDefault(_keys); | ||
var _typeof2 = require('babel-runtime/helpers/typeof'); | ||
var _typeof3 = _interopRequireDefault(_typeof2); | ||
exports.default = checkModel; | ||
var _invariant = require('invariant'); | ||
var _invariant = _interopRequireDefault(require("invariant")); | ||
var _invariant2 = _interopRequireDefault(_invariant); | ||
var _utils = require("./utils"); | ||
var _utils = require('./utils'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } | ||
function checkModel(model, existModels) { | ||
@@ -30,26 +21,22 @@ var namespace = model.namespace, | ||
effects = model.effects, | ||
subscriptions = model.subscriptions; | ||
subscriptions = model.subscriptions; // namespace 必须被定义 | ||
// namespace 必须被定义 | ||
(0, _invariant.default)(namespace, "[app.model] namespace should be defined"); // 并且是字符串 | ||
(0, _invariant2.default)(namespace, '[app.model] namespace should be defined'); | ||
// 并且是字符串 | ||
(0, _invariant2.default)(typeof namespace === 'string', '[app.model] namespace should be string, but got ' + (typeof namespace === 'undefined' ? 'undefined' : (0, _typeof3.default)(namespace))); | ||
// 并且唯一 | ||
(0, _invariant2.default)(!existModels.some(function (model) { | ||
(0, _invariant.default)(typeof namespace === 'string', "[app.model] namespace should be string, but got ".concat(_typeof(namespace))); // 并且唯一 | ||
(0, _invariant.default)(!existModels.some(function (model) { | ||
return model.namespace === namespace; | ||
}), '[app.model] namespace should be unique'); | ||
}), "[app.model] namespace should be unique"); // state 可以为任意值 | ||
// reducers 可以为空,PlainObject 或者数组 | ||
// state 可以为任意值 | ||
// reducers 可以为空,PlainObject 或者数组 | ||
if (reducers) { | ||
(0, _invariant2.default)((0, _utils.isPlainObject)(reducers) || (0, _utils.isArray)(reducers), '[app.model] reducers should be plain object or array, but got ' + (typeof reducers === 'undefined' ? 'undefined' : (0, _typeof3.default)(reducers))); | ||
// 数组的 reducers 必须是 [Object, Function] 的格式 | ||
(0, _invariant2.default)(!(0, _utils.isArray)(reducers) || (0, _utils.isPlainObject)(reducers[0]) && (0, _utils.isFunction)(reducers[1]), '[app.model] reducers with array should be [Object, Function]'); | ||
} | ||
(0, _invariant.default)((0, _utils.isPlainObject)(reducers) || (0, _utils.isArray)(reducers), "[app.model] reducers should be plain object or array, but got ".concat(_typeof(reducers))); // 数组的 reducers 必须是 [Object, Function] 的格式 | ||
// effects 可以为空,PlainObject | ||
(0, _invariant.default)(!(0, _utils.isArray)(reducers) || (0, _utils.isPlainObject)(reducers[0]) && (0, _utils.isFunction)(reducers[1]), "[app.model] reducers with array should be [Object, Function]"); | ||
} // effects 可以为空,PlainObject | ||
if (effects) { | ||
(0, _invariant2.default)((0, _utils.isPlainObject)(effects), '[app.model] effects should be plain object, but got ' + (typeof effects === 'undefined' ? 'undefined' : (0, _typeof3.default)(effects))); | ||
(0, _invariant.default)((0, _utils.isPlainObject)(effects), "[app.model] effects should be plain object, but got ".concat(_typeof(effects))); | ||
} | ||
@@ -59,6 +46,5 @@ | ||
// subscriptions 可以为空,PlainObject | ||
(0, _invariant2.default)((0, _utils.isPlainObject)(subscriptions), '[app.model] subscriptions should be plain object, but got ' + (typeof subscriptions === 'undefined' ? 'undefined' : (0, _typeof3.default)(subscriptions))); | ||
(0, _invariant.default)((0, _utils.isPlainObject)(subscriptions), "[app.model] subscriptions should be plain object, but got ".concat(_typeof(subscriptions))); // subscription 必须为函数 | ||
// subscription 必须为函数 | ||
(0, _invariant2.default)(isAllFunction(subscriptions), '[app.model] subscription should be function'); | ||
(0, _invariant.default)(isAllFunction(subscriptions), "[app.model] subscription should be function"); | ||
} | ||
@@ -68,6 +54,5 @@ } | ||
function isAllFunction(obj) { | ||
return (0, _keys2.default)(obj).every(function (key) { | ||
return Object.keys(obj).every(function (key) { | ||
return (0, _utils.isFunction)(obj[key]); | ||
}); | ||
} | ||
module.exports = exports['default']; | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,2 +6,4 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
var NAMESPACE_SEP = exports.NAMESPACE_SEP = '/'; | ||
exports.NAMESPACE_SEP = void 0; | ||
var NAMESPACE_SEP = '/'; | ||
exports.NAMESPACE_SEP = NAMESPACE_SEP; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,21 +6,20 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = createPromiseMiddleware; | ||
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); | ||
var _constants = require("./constants"); | ||
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); | ||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } | ||
var _promise = require('babel-runtime/core-js/promise'); | ||
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } | ||
var _promise2 = _interopRequireDefault(_promise); | ||
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } | ||
exports.default = createPromiseMiddleware; | ||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
var _constants = require('./constants'); | ||
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
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 createPromiseMiddleware(app) { | ||
var map = {}; | ||
var middleware = function middleware() { | ||
return function () { | ||
return function (next) { | ||
@@ -31,7 +30,7 @@ return function (action) { | ||
if (isEffect(type)) { | ||
return new _promise2.default(function (resolve, reject) { | ||
map[type] = { | ||
resolve: wrapped.bind(null, type, resolve), | ||
reject: wrapped.bind(null, type, reject) | ||
}; | ||
return new Promise(function (resolve, reject) { | ||
next(_objectSpread({ | ||
__dva_resolve: resolve, | ||
__dva_reject: reject | ||
}, action)); | ||
}); | ||
@@ -46,4 +45,6 @@ } else { | ||
function isEffect(type) { | ||
if (!type || typeof type !== 'string') return false; | ||
var _type$split = type.split(_constants.NAMESPACE_SEP), | ||
_type$split2 = (0, _slicedToArray3.default)(_type$split, 1), | ||
_type$split2 = _slicedToArray(_type$split, 1), | ||
namespace = _type$split2[0]; | ||
@@ -54,2 +55,3 @@ | ||
})[0]; | ||
if (model) { | ||
@@ -63,26 +65,2 @@ if (model.effects && model.effects[type]) { | ||
} | ||
function wrapped(type, fn, args) { | ||
if (map[type]) delete map[type]; | ||
fn(args); | ||
} | ||
function resolve(type, args) { | ||
if (map[type]) { | ||
map[type].resolve(args); | ||
} | ||
} | ||
function reject(type, args) { | ||
if (map[type]) { | ||
map[type].reject(args); | ||
} | ||
} | ||
return { | ||
middleware: middleware, | ||
resolve: resolve, | ||
reject: reject | ||
}; | ||
} | ||
module.exports = exports['default']; | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,12 +6,27 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = _default; | ||
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); | ||
var _redux = require("redux"); | ||
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); | ||
var _flatten = _interopRequireDefault(require("flatten")); | ||
var _typeof2 = require('babel-runtime/helpers/typeof'); | ||
var _invariant = _interopRequireDefault(require("invariant")); | ||
var _typeof3 = _interopRequireDefault(_typeof2); | ||
var _window = _interopRequireDefault(require("global/window")); | ||
exports.default = function (_ref) { | ||
var _utils = require("./utils"); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } | ||
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } | ||
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } | ||
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } | ||
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } | ||
function _default(_ref) { | ||
var reducers = _ref.reducers, | ||
@@ -23,10 +38,8 @@ initialState = _ref.initialState, | ||
_ref$createOpts$setup = _ref.createOpts.setupMiddlewares, | ||
setupMiddlewares = _ref$createOpts$setup === undefined ? _utils.returnSelf : _ref$createOpts$setup; | ||
setupMiddlewares = _ref$createOpts$setup === void 0 ? _utils.returnSelf : _ref$createOpts$setup; | ||
// extra enhancers | ||
var extraEnhancers = plugin.get('extraEnhancers'); | ||
(0, _invariant2.default)((0, _utils.isArray)(extraEnhancers), '[app.start] extraEnhancers should be array, but got ' + (typeof extraEnhancers === 'undefined' ? 'undefined' : (0, _typeof3.default)(extraEnhancers))); | ||
(0, _invariant.default)((0, _utils.isArray)(extraEnhancers), "[app.start] extraEnhancers should be array, but got ".concat(_typeof(extraEnhancers))); | ||
var extraMiddlewares = plugin.get('onAction'); | ||
var middlewares = setupMiddlewares([sagaMiddleware, promiseMiddleware].concat((0, _toConsumableArray3.default)((0, _flatten2.default)(extraMiddlewares)))); | ||
var middlewares = setupMiddlewares([promiseMiddleware, sagaMiddleware].concat(_toConsumableArray((0, _flatten.default)(extraMiddlewares)))); | ||
@@ -38,29 +51,9 @@ var devtools = function devtools() { | ||
}; | ||
if (process.env.NODE_ENV !== 'production' && _window2.default.__REDUX_DEVTOOLS_EXTENSION__) { | ||
devtools = _window2.default.__REDUX_DEVTOOLS_EXTENSION__; | ||
if (process.env.NODE_ENV !== 'production' && _window.default.__REDUX_DEVTOOLS_EXTENSION__) { | ||
devtools = _window.default.__REDUX_DEVTOOLS_EXTENSION__; | ||
} | ||
var enhancers = [_redux.applyMiddleware.apply(undefined, (0, _toConsumableArray3.default)(middlewares)), devtools(_window2.default.__REDUX_DEVTOOLS_EXTENSION__OPTIONS)].concat((0, _toConsumableArray3.default)(extraEnhancers)); | ||
return (0, _redux.createStore)(reducers, initialState, _redux.compose.apply(undefined, (0, _toConsumableArray3.default)(enhancers))); | ||
}; | ||
var _redux = require('redux'); | ||
var _flatten = require('flatten'); | ||
var _flatten2 = _interopRequireDefault(_flatten); | ||
var _invariant = require('invariant'); | ||
var _invariant2 = _interopRequireDefault(_invariant); | ||
var _window = require('global/window'); | ||
var _window2 = _interopRequireDefault(_window); | ||
var _utils = require('./utils'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
module.exports = exports['default']; | ||
var enhancers = [_redux.applyMiddleware.apply(void 0, _toConsumableArray(middlewares))].concat(_toConsumableArray(extraEnhancers), [devtools(_window.default.__REDUX_DEVTOOLS_EXTENSION__OPTIONS)]); | ||
return (0, _redux.createStore)(reducers, initialState, _redux.compose.apply(void 0, _toConsumableArray(enhancers))); | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -8,17 +8,14 @@ Object.defineProperty(exports, "__esModule", { | ||
var _handleActions = require('./handleActions'); | ||
var _handleActions = _interopRequireDefault(require("./handleActions")); | ||
var _handleActions2 = _interopRequireDefault(_handleActions); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function getReducer(reducers, state) { | ||
function getReducer(reducers, state, handleActions) { | ||
// Support reducer enhancer | ||
// e.g. reducers: [realReducers, enhancer] | ||
if (Array.isArray(reducers)) { | ||
return reducers[1]((0, _handleActions2.default)(reducers[0], state)); | ||
return reducers[1]((handleActions || _handleActions.default)(reducers[0], state)); | ||
} else { | ||
return (0, _handleActions2.default)(reducers || {}, state); | ||
return (handleActions || _handleActions.default)(reducers || {}, state); | ||
} | ||
} | ||
module.exports = exports['default']; | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,55 +6,42 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = getSaga; | ||
var _getIterator2 = require('babel-runtime/core-js/get-iterator'); | ||
var _invariant = _interopRequireDefault(require("invariant")); | ||
var _getIterator3 = _interopRequireDefault(_getIterator2); | ||
var sagaEffects = _interopRequireWildcard(require("redux-saga/lib/effects")); | ||
var _extends2 = require('babel-runtime/helpers/extends'); | ||
var _warning = _interopRequireDefault(require("warning")); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
var _sagaHelpers = require("redux-saga/lib/internal/sagaHelpers"); | ||
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); | ||
var _constants = require("./constants"); | ||
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); | ||
var _prefixType = _interopRequireDefault(require("./prefixType")); | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
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; } } | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.default = getSaga; | ||
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; } | ||
var _invariant = require('invariant'); | ||
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; } | ||
var _invariant2 = _interopRequireDefault(_invariant); | ||
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } | ||
var _effects = require('redux-saga/effects'); | ||
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } | ||
var sagaEffects = _interopRequireWildcard(_effects); | ||
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } | ||
var _warning = require('warning'); | ||
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } | ||
var _warning2 = _interopRequireDefault(_warning); | ||
var _sagaHelpers = require('redux-saga/lib/internal/sagaHelpers'); | ||
var _constants = require('./constants'); | ||
var _prefixType = require('./prefixType'); | ||
var _prefixType2 = _interopRequireDefault(_prefixType); | ||
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)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function getSaga(resolve, reject, effects, model, onError, onEffect) { | ||
return (/*#__PURE__*/_regenerator2.default.mark(function _callee3() { | ||
var _this = this; | ||
function getSaga(effects, model, onError, onEffect) { | ||
return ( | ||
/*#__PURE__*/ | ||
regeneratorRuntime.mark(function _callee3() { | ||
var key; | ||
return _regenerator2.default.wrap(function _callee3$(_context3) { | ||
return regeneratorRuntime.wrap(function _callee3$(_context3) { | ||
while (1) { | ||
switch (_context3.prev = _context3.next) { | ||
case 0: | ||
_context3.t0 = _regenerator2.default.keys(effects); | ||
_context3.t0 = regeneratorRuntime.keys(effects); | ||
@@ -74,9 +61,11 @@ case 1: | ||
return _context3.delegateYield( /*#__PURE__*/_regenerator2.default.mark(function _callee2() { | ||
return _context3.delegateYield( | ||
/*#__PURE__*/ | ||
regeneratorRuntime.mark(function _callee2() { | ||
var watcher, task; | ||
return _regenerator2.default.wrap(function _callee2$(_context2) { | ||
return regeneratorRuntime.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
watcher = getWatcher(resolve, reject, key, effects[key], model, onError, onEffect); | ||
watcher = getWatcher(key, effects[key], model, onError, onEffect); | ||
_context2.next = 3; | ||
@@ -88,4 +77,6 @@ return sagaEffects.fork(watcher); | ||
_context2.next = 6; | ||
return sagaEffects.fork( /*#__PURE__*/_regenerator2.default.mark(function _callee() { | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
return sagaEffects.fork( | ||
/*#__PURE__*/ | ||
regeneratorRuntime.mark(function _callee() { | ||
return regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
@@ -95,3 +86,3 @@ switch (_context.prev = _context.next) { | ||
_context.next = 2; | ||
return sagaEffects.take(model.namespace + '/@@CANCEL_EFFECTS'); | ||
return sagaEffects.take("".concat(model.namespace, "/@@CANCEL_EFFECTS")); | ||
@@ -103,3 +94,3 @@ case 2: | ||
case 4: | ||
case 'end': | ||
case "end": | ||
return _context.stop(); | ||
@@ -112,8 +103,8 @@ } | ||
case 6: | ||
case 'end': | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, _this); | ||
})(), 't2', 5); | ||
}, _callee2, this); | ||
})(), "t2", 5); | ||
@@ -125,3 +116,3 @@ case 5: | ||
case 7: | ||
case 'end': | ||
case "end": | ||
return _context3.stop(); | ||
@@ -135,8 +126,10 @@ } | ||
function getWatcher(resolve, reject, key, _effect, model, onError, onEffect) { | ||
var _marked = /*#__PURE__*/_regenerator2.default.mark(sagaWithCatch); | ||
function getWatcher(key, _effect, model, onError, onEffect) { | ||
var _marked = | ||
/*#__PURE__*/ | ||
regeneratorRuntime.mark(sagaWithCatch); | ||
var effect = _effect; | ||
var type = 'takeEvery'; | ||
var ms = void 0; | ||
var ms; | ||
@@ -146,12 +139,17 @@ if (Array.isArray(_effect)) { | ||
var opts = _effect[1]; | ||
if (opts && opts.type) { | ||
type = opts.type; | ||
if (type === 'throttle') { | ||
(0, _invariant2.default)(opts.ms, 'app.start: opts.ms should be defined if type is throttle'); | ||
(0, _invariant.default)(opts.ms, 'app.start: opts.ms should be defined if type is throttle'); | ||
ms = opts.ms; | ||
} | ||
} | ||
(0, _invariant2.default)(['watcher', 'takeEvery', 'takeLatest', 'throttle'].indexOf(type) > -1, 'app.start: effect type should be takeEvery, takeLatest, throttle or watcher'); | ||
(0, _invariant.default)(['watcher', 'takeEvery', 'takeLatest', 'throttle'].indexOf(type) > -1, 'app.start: effect type should be takeEvery, takeLatest, throttle or watcher'); | ||
} | ||
function noop() {} | ||
function sagaWithCatch() { | ||
@@ -161,46 +159,56 @@ var _len, | ||
_key, | ||
_ref, | ||
_ref$__dva_resolve, | ||
resolve, | ||
_ref$__dva_reject, | ||
reject, | ||
ret, | ||
_args4 = arguments; | ||
return _regenerator2.default.wrap(function sagaWithCatch$(_context4) { | ||
return regeneratorRuntime.wrap(function sagaWithCatch$(_context4) { | ||
while (1) { | ||
switch (_context4.prev = _context4.next) { | ||
case 0: | ||
_context4.prev = 0; | ||
_context4.next = 3; | ||
return sagaEffects.put({ type: '' + key + _constants.NAMESPACE_SEP + '@@start' }); | ||
case 3: | ||
for (_len = _args4.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
for (_len = _args4.length, args = new Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = _args4[_key]; | ||
} | ||
_context4.next = 6; | ||
return effect.apply(undefined, (0, _toConsumableArray3.default)(args.concat(createEffects(model)))); | ||
_ref = args.length > 0 ? args[0] : {}, _ref$__dva_resolve = _ref.__dva_resolve, resolve = _ref$__dva_resolve === void 0 ? noop : _ref$__dva_resolve, _ref$__dva_reject = _ref.__dva_reject, reject = _ref$__dva_reject === void 0 ? noop : _ref$__dva_reject; | ||
_context4.prev = 2; | ||
_context4.next = 5; | ||
return sagaEffects.put({ | ||
type: "".concat(key).concat(_constants.NAMESPACE_SEP, "@@start") | ||
}); | ||
case 6: | ||
case 5: | ||
_context4.next = 7; | ||
return effect.apply(void 0, _toConsumableArray(args.concat(createEffects(model)))); | ||
case 7: | ||
ret = _context4.sent; | ||
_context4.next = 9; | ||
return sagaEffects.put({ type: '' + key + _constants.NAMESPACE_SEP + '@@end' }); | ||
_context4.next = 10; | ||
return sagaEffects.put({ | ||
type: "".concat(key).concat(_constants.NAMESPACE_SEP, "@@end") | ||
}); | ||
case 9: | ||
resolve(key, ret); | ||
_context4.next = 16; | ||
case 10: | ||
resolve(ret); | ||
_context4.next = 17; | ||
break; | ||
case 12: | ||
_context4.prev = 12; | ||
_context4.t0 = _context4['catch'](0); | ||
case 13: | ||
_context4.prev = 13; | ||
_context4.t0 = _context4["catch"](2); | ||
onError(_context4.t0); | ||
onError(_context4.t0); | ||
if (!_context4.t0._dontReject) { | ||
reject(key, _context4.t0); | ||
reject(_context4.t0); | ||
} | ||
case 16: | ||
case 'end': | ||
case 17: | ||
case "end": | ||
return _context4.stop(); | ||
} | ||
} | ||
}, _marked, this, [[0, 12]]); | ||
}, _marked, this, [[2, 13]]); | ||
} | ||
@@ -213,5 +221,8 @@ | ||
return sagaWithCatch; | ||
case 'takeLatest': | ||
return (/*#__PURE__*/_regenerator2.default.mark(function _callee4() { | ||
return _regenerator2.default.wrap(function _callee4$(_context5) { | ||
return ( | ||
/*#__PURE__*/ | ||
regeneratorRuntime.mark(function _callee4() { | ||
return regeneratorRuntime.wrap(function _callee4$(_context5) { | ||
while (1) { | ||
@@ -224,3 +235,3 @@ switch (_context5.prev = _context5.next) { | ||
case 2: | ||
case 'end': | ||
case "end": | ||
return _context5.stop(); | ||
@@ -232,5 +243,8 @@ } | ||
); | ||
case 'throttle': | ||
return (/*#__PURE__*/_regenerator2.default.mark(function _callee5() { | ||
return _regenerator2.default.wrap(function _callee5$(_context6) { | ||
return ( | ||
/*#__PURE__*/ | ||
regeneratorRuntime.mark(function _callee5() { | ||
return regeneratorRuntime.wrap(function _callee5$(_context6) { | ||
while (1) { | ||
@@ -243,3 +257,3 @@ switch (_context6.prev = _context6.next) { | ||
case 2: | ||
case 'end': | ||
case "end": | ||
return _context6.stop(); | ||
@@ -251,5 +265,8 @@ } | ||
); | ||
default: | ||
return (/*#__PURE__*/_regenerator2.default.mark(function _callee6() { | ||
return _regenerator2.default.wrap(function _callee6$(_context7) { | ||
return ( | ||
/*#__PURE__*/ | ||
regeneratorRuntime.mark(function _callee6() { | ||
return regeneratorRuntime.wrap(function _callee6$(_context7) { | ||
while (1) { | ||
@@ -262,3 +279,3 @@ switch (_context7.prev = _context7.next) { | ||
case 2: | ||
case 'end': | ||
case "end": | ||
return _context7.stop(); | ||
@@ -275,15 +292,18 @@ } | ||
function assertAction(type, name) { | ||
(0, _invariant2.default)(type, 'dispatch: action should be a plain Object with type'); | ||
(0, _warning2.default)(type.indexOf('' + model.namespace + _constants.NAMESPACE_SEP) !== 0, '[' + name + '] ' + type + ' should not be prefixed with namespace ' + model.namespace); | ||
(0, _invariant.default)(type, 'dispatch: action should be a plain Object with type'); | ||
(0, _warning.default)(type.indexOf("".concat(model.namespace).concat(_constants.NAMESPACE_SEP)) !== 0, "[".concat(name, "] ").concat(type, " should not be prefixed with namespace ").concat(model.namespace)); | ||
} | ||
function put(action) { | ||
var type = action.type; | ||
assertAction(type, 'sagaEffects.put'); | ||
return sagaEffects.put((0, _extends3.default)({}, action, { type: (0, _prefixType2.default)(type, model) })); | ||
return sagaEffects.put(_objectSpread({}, action, { | ||
type: (0, _prefixType.default)(type, model) | ||
})); | ||
} | ||
function take(type) { | ||
if (typeof type === 'string') { | ||
assertAction(type, 'sagaEffects.take'); | ||
return sagaEffects.take((0, _prefixType2.default)(type, model)); | ||
return sagaEffects.take((0, _prefixType.default)(type, model)); | ||
} else { | ||
@@ -293,3 +313,7 @@ return sagaEffects.take(type); | ||
} | ||
return (0, _extends3.default)({}, sagaEffects, { put: put, take: take }); | ||
return _objectSpread({}, sagaEffects, { | ||
put: put, | ||
take: take | ||
}); | ||
} | ||
@@ -303,5 +327,4 @@ | ||
try { | ||
for (var _iterator = (0, _getIterator3.default)(fns), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
for (var _iterator = fns[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var fn = _step.value; | ||
effect = fn(effect, sagaEffects, model, key); | ||
@@ -314,3 +337,3 @@ } | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
if (!_iteratorNormalCompletion && _iterator.return != null) { | ||
_iterator.return(); | ||
@@ -326,3 +349,2 @@ } | ||
return effect; | ||
} | ||
module.exports = exports['default']; | ||
} |
@@ -6,13 +6,16 @@ "use strict"; | ||
}); | ||
exports.default = void 0; | ||
var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); | ||
var _invariant = _interopRequireDefault(require("invariant")); | ||
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _keys = require("babel-runtime/core-js/object/keys"); | ||
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } | ||
var _keys2 = _interopRequireDefault(_keys); | ||
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } | ||
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } | ||
function identify(value) { | ||
@@ -24,10 +27,11 @@ return value; | ||
var reducer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identify; | ||
return function (state, action) { | ||
var type = action.type; | ||
(0, _invariant.default)(type, 'dispatch: action should be a plain Object with type'); | ||
if (type && actionType !== type) { | ||
return state; | ||
if (actionType === type) { | ||
return reducer(state, action); | ||
} | ||
return reducer(state, action); | ||
return state; | ||
}; | ||
@@ -37,3 +41,3 @@ } | ||
function reduceReducers() { | ||
for (var _len = arguments.length, reducers = Array(_len), _key = 0; _key < _len; _key++) { | ||
for (var _len = arguments.length, reducers = new Array(_len), _key = 0; _key < _len; _key++) { | ||
reducers[_key] = arguments[_key]; | ||
@@ -50,9 +54,9 @@ } | ||
function handleActions(handlers, defaultState) { | ||
var reducers = (0, _keys2.default)(handlers).map(function (type) { | ||
var reducers = Object.keys(handlers).map(function (type) { | ||
return handleAction(type, handlers[type]); | ||
}); | ||
var reducer = reduceReducers.apply(undefined, (0, _toConsumableArray3.default)(reducers)); | ||
var reducer = reduceReducers.apply(void 0, _toConsumableArray(reducers)); | ||
return function () { | ||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; | ||
var action = arguments[1]; | ||
var action = arguments.length > 1 ? arguments[1] : undefined; | ||
return reducer(state, action); | ||
@@ -62,3 +66,3 @@ }; | ||
exports.default = handleActions; | ||
module.exports = exports["default"]; | ||
var _default = handleActions; | ||
exports.default = _default; |
179
lib/index.js
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,61 +6,36 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
var _getIterator2 = require('babel-runtime/core-js/get-iterator'); | ||
var _getIterator3 = _interopRequireDefault(_getIterator2); | ||
var _keys = require('babel-runtime/core-js/object/keys'); | ||
var _keys2 = _interopRequireDefault(_keys); | ||
var _extends2 = require('babel-runtime/helpers/extends'); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
exports.create = create; | ||
var _redux = require('redux'); | ||
var _redux = require("redux"); | ||
var _middleware = require('redux-saga/lib/internal/middleware'); | ||
var _middleware = _interopRequireDefault(require("redux-saga/lib/internal/middleware")); | ||
var _middleware2 = _interopRequireDefault(_middleware); | ||
var _invariant = _interopRequireDefault(require("invariant")); | ||
var _invariant = require('invariant'); | ||
var _checkModel = _interopRequireDefault(require("./checkModel")); | ||
var _invariant2 = _interopRequireDefault(_invariant); | ||
var _prefixNamespace = _interopRequireDefault(require("./prefixNamespace")); | ||
var _checkModel = require('./checkModel'); | ||
var _Plugin = _interopRequireWildcard(require("./Plugin")); | ||
var _checkModel2 = _interopRequireDefault(_checkModel); | ||
var _createStore = _interopRequireDefault(require("./createStore")); | ||
var _prefixNamespace = require('./prefixNamespace'); | ||
var _getSaga = _interopRequireDefault(require("./getSaga")); | ||
var _prefixNamespace2 = _interopRequireDefault(_prefixNamespace); | ||
var _getReducer = _interopRequireDefault(require("./getReducer")); | ||
var _Plugin = require('./Plugin'); | ||
var _createPromiseMiddleware = _interopRequireDefault(require("./createPromiseMiddleware")); | ||
var _Plugin2 = _interopRequireDefault(_Plugin); | ||
var _subscription = require("./subscription"); | ||
var _createStore = require('./createStore'); | ||
var _utils = require("./utils"); | ||
var _createStore2 = _interopRequireDefault(_createStore); | ||
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; } } | ||
var _getSaga = require('./getSaga'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _getSaga2 = _interopRequireDefault(_getSaga); | ||
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; } | ||
var _getReducer = require('./getReducer'); | ||
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; } | ||
var _getReducer2 = _interopRequireDefault(_getReducer); | ||
var _createPromiseMiddleware = require('./createPromiseMiddleware'); | ||
var _createPromiseMiddleware2 = _interopRequireDefault(_createPromiseMiddleware); | ||
var _subscription = require('./subscription'); | ||
var _utils = require('./utils'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
// Internal model to update global state when do unmodel | ||
@@ -76,3 +51,2 @@ var dvaModel = { | ||
}; | ||
/** | ||
@@ -84,2 +58,3 @@ * Create dva-core instance. | ||
*/ | ||
function create() { | ||
@@ -90,10 +65,7 @@ var hooksAndOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
_createOpts$setupApp = createOpts.setupApp, | ||
setupApp = _createOpts$setupApp === undefined ? _utils.noop : _createOpts$setupApp; | ||
var plugin = new _Plugin2.default(); | ||
setupApp = _createOpts$setupApp === void 0 ? _utils.noop : _createOpts$setupApp; | ||
var plugin = new _Plugin.default(); | ||
plugin.use((0, _Plugin.filterHooks)(hooksAndOpts)); | ||
var app = { | ||
_models: [(0, _prefixNamespace2.default)((0, _extends3.default)({}, dvaModel))], | ||
_models: [(0, _prefixNamespace.default)(_objectSpread({}, dvaModel))], | ||
_store: null, | ||
@@ -106,3 +78,2 @@ _plugin: plugin, | ||
return app; | ||
/** | ||
@@ -113,9 +84,14 @@ * Register model before app is started. | ||
*/ | ||
function model(m) { | ||
if (process.env.NODE_ENV !== 'production') { | ||
(0, _checkModel2.default)(m, app._models); | ||
(0, _checkModel.default)(m, app._models); | ||
} | ||
app._models.push((0, _prefixNamespace2.default)(m)); | ||
var prefixedModel = (0, _prefixNamespace.default)(_objectSpread({}, m)); | ||
app._models.push(prefixedModel); | ||
return prefixedModel; | ||
} | ||
/** | ||
@@ -129,13 +105,14 @@ * Inject model after app is started. | ||
*/ | ||
function injectModel(createReducer, onError, unlisteners, m) { | ||
model(m); | ||
m = model(m); | ||
var store = app._store; | ||
store.asyncReducers[m.namespace] = (0, _getReducer.default)(m.reducers, m.state, plugin._handleActions); | ||
store.replaceReducer(createReducer(store.asyncReducers)); | ||
var store = app._store; | ||
if (m.reducers) { | ||
store.asyncReducers[m.namespace] = (0, _getReducer2.default)(m.reducers, m.state); | ||
store.replaceReducer(createReducer(store.asyncReducers)); | ||
} | ||
if (m.effects) { | ||
store.runSaga(app._getSaga(m.effects, m, onError, plugin.get('onEffect'))); | ||
} | ||
if (m.subscriptions) { | ||
@@ -145,3 +122,2 @@ unlisteners[m.namespace] = (0, _subscription.run)(m.subscriptions, m, app, onError); | ||
} | ||
/** | ||
@@ -158,18 +134,20 @@ * Unregister model. | ||
*/ | ||
function unmodel(createReducer, reducers, unlisteners, namespace) { | ||
var store = app._store; | ||
var store = app._store; // Delete reducers | ||
// Delete reducers | ||
delete store.asyncReducers[namespace]; | ||
delete reducers[namespace]; | ||
store.replaceReducer(createReducer()); | ||
store.dispatch({ type: '@@dva/UPDATE' }); | ||
store.dispatch({ | ||
type: '@@dva/UPDATE' | ||
}); // Cancel effects | ||
// Cancel effects | ||
store.dispatch({ type: namespace + '/@@CANCEL_EFFECTS' }); | ||
store.dispatch({ | ||
type: "".concat(namespace, "/@@CANCEL_EFFECTS") | ||
}); // Unlisten subscrioptions | ||
// Unlisten subscrioptions | ||
(0, _subscription.unlisten)(unlisteners, namespace); | ||
(0, _subscription.unlisten)(unlisteners, namespace); // Delete model from app._models | ||
// Delete model from app._models | ||
app._models = app._models.filter(function (model) { | ||
@@ -179,3 +157,2 @@ return model.namespace !== namespace; | ||
} | ||
/** | ||
@@ -186,2 +163,4 @@ * Start the app. | ||
*/ | ||
function start() { | ||
@@ -192,5 +171,7 @@ // Global error handler | ||
if (typeof err === 'string') err = new Error(err); | ||
err.preventDefault = function () { | ||
err._dontReject = true; | ||
}; | ||
plugin.apply('onError', function (err) { | ||
@@ -202,13 +183,9 @@ throw new Error(err.stack || err); | ||
var sagaMiddleware = (0, _middleware2.default)(); | ||
var sagaMiddleware = (0, _middleware.default)(); | ||
var promiseMiddleware = (0, _createPromiseMiddleware.default)(app); | ||
app._getSaga = _getSaga.default.bind(null); | ||
var sagas = []; | ||
var _createPromiseMiddlew = (0, _createPromiseMiddleware2.default)(app), | ||
promiseMiddleware = _createPromiseMiddlew.middleware, | ||
resolve = _createPromiseMiddlew.resolve, | ||
reject = _createPromiseMiddlew.reject; | ||
var reducers = _objectSpread({}, initialReducer); | ||
app._getSaga = _getSaga2.default.bind(null, resolve, reject); | ||
var sagas = []; | ||
var reducers = (0, _extends3.default)({}, initialReducer); | ||
var _iteratorNormalCompletion = true; | ||
@@ -219,6 +196,5 @@ var _didIteratorError = false; | ||
try { | ||
for (var _iterator = (0, _getIterator3.default)(app._models), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
for (var _iterator = app._models[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var m = _step.value; | ||
reducers[m.namespace] = (0, _getReducer2.default)(m.reducers, m.state); | ||
reducers[m.namespace] = (0, _getReducer.default)(m.reducers, m.state, plugin._handleActions); | ||
if (m.effects) sagas.push(app._getSaga(m.effects, m, onError, plugin.get('onEffect'))); | ||
@@ -231,3 +207,3 @@ } | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
if (!_iteratorNormalCompletion && _iterator.return != null) { | ||
_iterator.return(); | ||
@@ -244,8 +220,8 @@ } | ||
var extraReducers = plugin.get('extraReducers'); | ||
(0, _invariant2.default)((0, _keys2.default)(extraReducers).every(function (key) { | ||
(0, _invariant.default)(Object.keys(extraReducers).every(function (key) { | ||
return !(key in reducers); | ||
}), '[app.start] extitraReducers is conflict with other reducers, reducers list: ' + (0, _keys2.default)(reducers).join(', ')); | ||
}), "[app.start] extraReducers is conflict with other reducers, reducers list: ".concat(Object.keys(reducers).join(', '))); // Create store | ||
// Create store | ||
var store = app._store = (0, _createStore2.default)({ // eslint-disable-line | ||
var store = app._store = (0, _createStore.default)({ | ||
// eslint-disable-line | ||
reducers: createReducer(), | ||
@@ -257,9 +233,7 @@ initialState: hooksAndOpts.initialState || {}, | ||
promiseMiddleware: promiseMiddleware | ||
}); | ||
}); // Extend store | ||
// Extend store | ||
store.runSaga = sagaMiddleware.run; | ||
store.asyncReducers = {}; | ||
store.asyncReducers = {}; // Execute listeners when state is changed | ||
// Execute listeners when state is changed | ||
var listeners = plugin.get('onStateChange'); | ||
@@ -273,3 +247,2 @@ var _iteratorNormalCompletion2 = true; | ||
var listener = _step2.value; | ||
store.subscribe(function () { | ||
@@ -280,7 +253,6 @@ listener(store.getState()); | ||
for (var _iterator2 = (0, _getIterator3.default)(listeners), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
for (var _iterator2 = listeners[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
_loop(); | ||
} | ||
} // Run sagas | ||
// Run sagas | ||
} catch (err) { | ||
@@ -291,3 +263,3 @@ _didIteratorError2 = true; | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return != null) { | ||
_iterator2.return(); | ||
@@ -302,8 +274,6 @@ } | ||
sagas.forEach(sagaMiddleware.run); | ||
sagas.forEach(sagaMiddleware.run); // Setup app | ||
// Setup app | ||
setupApp(app); | ||
setupApp(app); // Run subscriptions | ||
// Run subscriptions | ||
var unlisteners = {}; | ||
@@ -315,3 +285,3 @@ var _iteratorNormalCompletion3 = true; | ||
try { | ||
for (var _iterator3 = (0, _getIterator3.default)(this._models), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { | ||
for (var _iterator3 = this._models[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { | ||
var _model = _step3.value; | ||
@@ -322,5 +292,4 @@ | ||
} | ||
} | ||
} // Setup app.model and app.unmodel | ||
// Setup app.model and app.unmodel | ||
} catch (err) { | ||
@@ -331,3 +300,3 @@ _didIteratorError3 = true; | ||
try { | ||
if (!_iteratorNormalCompletion3 && _iterator3.return) { | ||
if (!_iteratorNormalCompletion3 && _iterator3.return != null) { | ||
_iterator3.return(); | ||
@@ -344,3 +313,2 @@ } | ||
app.unmodel = unmodel.bind(app, createReducer, reducers, unlisteners); | ||
/** | ||
@@ -351,6 +319,7 @@ * Create global reducer for redux. | ||
*/ | ||
function createReducer() { | ||
return reducerEnhancer((0, _redux.combineReducers)((0, _extends3.default)({}, reducers, extraReducers, app._store ? app._store.asyncReducers : {}))); | ||
return reducerEnhancer((0, _redux.combineReducers)(_objectSpread({}, reducers, extraReducers, app._store ? app._store.asyncReducers : {}))); | ||
} | ||
} | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,40 +6,29 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.filterHooks = filterHooks; | ||
exports.default = void 0; | ||
var _extends2 = require('babel-runtime/helpers/extends'); | ||
var _invariant = _interopRequireDefault(require("invariant")); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
var _utils = require("./utils"); | ||
var _getIterator2 = require('babel-runtime/core-js/get-iterator'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _getIterator3 = _interopRequireDefault(_getIterator2); | ||
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; } | ||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); | ||
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; } | ||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
var _createClass2 = require('babel-runtime/helpers/createClass'); | ||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } | ||
var _createClass3 = _interopRequireDefault(_createClass2); | ||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } | ||
var _keys = require('babel-runtime/core-js/object/keys'); | ||
var hooks = ['onError', 'onStateChange', 'onAction', 'onHmr', 'onReducer', 'onEffect', 'extraReducers', 'extraEnhancers', '_handleActions']; | ||
var _keys2 = _interopRequireDefault(_keys); | ||
exports.filterHooks = filterHooks; | ||
var _invariant = require('invariant'); | ||
var _invariant2 = _interopRequireDefault(_invariant); | ||
var _utils = require('./utils'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var hooks = ['onError', 'onStateChange', 'onAction', 'onHmr', 'onReducer', 'onEffect', 'extraReducers', 'extraEnhancers']; | ||
function filterHooks(obj) { | ||
return (0, _keys2.default)(obj).reduce(function (memo, key) { | ||
return Object.keys(obj).reduce(function (memo, key) { | ||
if (hooks.indexOf(key) > -1) { | ||
memo[key] = obj[key]; | ||
} | ||
return memo; | ||
@@ -49,6 +38,9 @@ }, {}); | ||
var Plugin = function () { | ||
var Plugin = | ||
/*#__PURE__*/ | ||
function () { | ||
function Plugin() { | ||
(0, _classCallCheck3.default)(this, Plugin); | ||
_classCallCheck(this, Plugin); | ||
this._handleActions = null; | ||
this.hooks = hooks.reduce(function (memo, key) { | ||
@@ -60,11 +52,15 @@ memo[key] = []; | ||
(0, _createClass3.default)(Plugin, [{ | ||
key: 'use', | ||
_createClass(Plugin, [{ | ||
key: "use", | ||
value: function use(plugin) { | ||
(0, _invariant2.default)((0, _utils.isPlainObject)(plugin), 'plugin.use: plugin should be plain object'); | ||
(0, _invariant.default)((0, _utils.isPlainObject)(plugin), 'plugin.use: plugin should be plain object'); | ||
var hooks = this.hooks; | ||
for (var key in plugin) { | ||
if (Object.prototype.hasOwnProperty.call(plugin, key)) { | ||
(0, _invariant2.default)(hooks[key], 'plugin.use: unknown plugin property: ' + key); | ||
if (key === 'extraEnhancers') { | ||
(0, _invariant.default)(hooks[key], "plugin.use: unknown plugin property: ".concat(key)); | ||
if (key === '_handleActions') { | ||
this._handleActions = plugin[key]; | ||
} else if (key === 'extraEnhancers') { | ||
hooks[key] = plugin[key]; | ||
@@ -78,9 +74,8 @@ } else { | ||
}, { | ||
key: 'apply', | ||
key: "apply", | ||
value: function apply(key, defaultHandler) { | ||
var hooks = this.hooks; | ||
var validApplyHooks = ['onError', 'onHmr']; | ||
(0, _invariant2.default)(validApplyHooks.indexOf(key) > -1, 'plugin.apply: hook ' + key + ' cannot be applied'); | ||
(0, _invariant.default)(validApplyHooks.indexOf(key) > -1, "plugin.apply: hook ".concat(key, " cannot be applied")); | ||
var fns = hooks[key]; | ||
return function () { | ||
@@ -93,6 +88,5 @@ if (fns.length) { | ||
try { | ||
for (var _iterator = (0, _getIterator3.default)(fns), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
for (var _iterator = fns[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var fn = _step.value; | ||
fn.apply(undefined, arguments); | ||
fn.apply(void 0, arguments); | ||
} | ||
@@ -104,3 +98,3 @@ } catch (err) { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
if (!_iteratorNormalCompletion && _iterator.return != null) { | ||
_iterator.return(); | ||
@@ -115,3 +109,3 @@ } | ||
} else if (defaultHandler) { | ||
defaultHandler.apply(undefined, arguments); | ||
defaultHandler.apply(void 0, arguments); | ||
} | ||
@@ -121,6 +115,7 @@ }; | ||
}, { | ||
key: 'get', | ||
key: "get", | ||
value: function get(key) { | ||
var hooks = this.hooks; | ||
(0, _invariant2.default)(key in hooks, 'plugin.get: hook ' + key + ' cannot be got'); | ||
(0, _invariant.default)(key in hooks, "plugin.get: hook ".concat(key, " cannot be got")); | ||
if (key === 'extraReducers') { | ||
@@ -135,2 +130,3 @@ return getExtraReducers(hooks[key]); | ||
}]); | ||
return Plugin; | ||
@@ -141,3 +137,2 @@ }(); | ||
function getExtraReducers(hook) { | ||
@@ -150,6 +145,5 @@ var ret = {}; | ||
try { | ||
for (var _iterator2 = (0, _getIterator3.default)(hook), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
for (var _iterator2 = hook[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var reducerObj = _step2.value; | ||
ret = (0, _extends3.default)({}, ret, reducerObj); | ||
ret = _objectSpread({}, ret, reducerObj); | ||
} | ||
@@ -161,3 +155,3 @@ } catch (err) { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return != null) { | ||
_iterator2.return(); | ||
@@ -182,5 +176,4 @@ } | ||
try { | ||
for (var _iterator3 = (0, _getIterator3.default)(hook), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { | ||
for (var _iterator3 = hook[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { | ||
var reducerEnhancer = _step3.value; | ||
reducer = reducerEnhancer(reducer); | ||
@@ -193,3 +186,3 @@ } | ||
try { | ||
if (!_iteratorNormalCompletion3 && _iterator3.return) { | ||
if (!_iteratorNormalCompletion3 && _iterator3.return != null) { | ||
_iterator3.return(); | ||
@@ -196,0 +189,0 @@ } |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,34 +6,27 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
var _extends2 = require('babel-runtime/helpers/extends'); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
exports.default = prefixedDispatch; | ||
var _invariant = require('invariant'); | ||
var _invariant = _interopRequireDefault(require("invariant")); | ||
var _invariant2 = _interopRequireDefault(_invariant); | ||
var _warning = _interopRequireDefault(require("warning")); | ||
var _warning = require('warning'); | ||
var _constants = require("./constants"); | ||
var _warning2 = _interopRequireDefault(_warning); | ||
var _prefixType = _interopRequireDefault(require("./prefixType")); | ||
var _constants = require('./constants'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _prefixType = require('./prefixType'); | ||
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; } | ||
var _prefixType2 = _interopRequireDefault(_prefixType); | ||
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function prefixedDispatch(dispatch, model) { | ||
return function (action) { | ||
var type = action.type; | ||
(0, _invariant2.default)(type, 'dispatch: action should be a plain Object with type'); | ||
(0, _warning2.default)(type.indexOf('' + model.namespace + _constants.NAMESPACE_SEP) !== 0, 'dispatch: ' + type + ' should not be prefixed with namespace ' + model.namespace); | ||
return dispatch((0, _extends3.default)({}, action, { type: (0, _prefixType2.default)(type, model) })); | ||
(0, _invariant.default)(type, 'dispatch: action should be a plain Object with type'); | ||
(0, _warning.default)(type.indexOf("".concat(model.namespace).concat(_constants.NAMESPACE_SEP)) !== 0, "dispatch: ".concat(type, " should not be prefixed with namespace ").concat(model.namespace)); | ||
return dispatch(_objectSpread({}, action, { | ||
type: (0, _prefixType.default)(type, model) | ||
})); | ||
}; | ||
} | ||
module.exports = exports['default']; | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,23 +6,16 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
var _keys = require('babel-runtime/core-js/object/keys'); | ||
var _keys2 = _interopRequireDefault(_keys); | ||
exports.default = prefixNamespace; | ||
var _warning = require('warning'); | ||
var _warning = _interopRequireDefault(require("warning")); | ||
var _warning2 = _interopRequireDefault(_warning); | ||
var _utils = require("./utils"); | ||
var _utils = require('./utils'); | ||
var _constants = require("./constants"); | ||
var _constants = require('./constants'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function prefix(obj, namespace, type) { | ||
return (0, _keys2.default)(obj).reduce(function (memo, key) { | ||
(0, _warning2.default)(key.indexOf('' + namespace + _constants.NAMESPACE_SEP) !== 0, '[prefixNamespace]: ' + type + ' ' + key + ' should not be prefixed with namespace ' + namespace); | ||
var newKey = '' + namespace + _constants.NAMESPACE_SEP + key; | ||
return Object.keys(obj).reduce(function (memo, key) { | ||
(0, _warning.default)(key.indexOf("".concat(namespace).concat(_constants.NAMESPACE_SEP)) !== 0, "[prefixNamespace]: ".concat(type, " ").concat(key, " should not be prefixed with namespace ").concat(namespace)); | ||
var newKey = "".concat(namespace).concat(_constants.NAMESPACE_SEP).concat(key); | ||
memo[newKey] = obj[key]; | ||
@@ -38,3 +31,2 @@ return memo; | ||
if (reducers) { | ||
@@ -47,7 +39,8 @@ if ((0, _utils.isArray)(reducers)) { | ||
} | ||
if (effects) { | ||
model.effects = prefix(effects, namespace, 'effect'); | ||
} | ||
return model; | ||
} | ||
module.exports = exports['default']; | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -8,12 +8,13 @@ Object.defineProperty(exports, "__esModule", { | ||
var _constants = require('./constants'); | ||
var _constants = require("./constants"); | ||
function prefixType(type, model) { | ||
var prefixedType = '' + model.namespace + _constants.NAMESPACE_SEP + type; | ||
var prefixedType = "".concat(model.namespace).concat(_constants.NAMESPACE_SEP).concat(type); | ||
var typeWithoutAffix = prefixedType.replace(/\/@@[^/]+?$/, ''); | ||
if (model.reducers && model.reducers[typeWithoutAffix] || model.effects && model.effects[typeWithoutAffix]) { | ||
return prefixedType; | ||
} | ||
return type; | ||
} | ||
module.exports = exports['default']; | ||
} |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,20 +6,11 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
var _getIterator2 = require('babel-runtime/core-js/get-iterator'); | ||
var _getIterator3 = _interopRequireDefault(_getIterator2); | ||
exports.run = run; | ||
exports.unlisten = unlisten; | ||
var _warning = require('warning'); | ||
var _warning = _interopRequireDefault(require("warning")); | ||
var _warning2 = _interopRequireDefault(_warning); | ||
var _utils = require("./utils"); | ||
var _utils = require('./utils'); | ||
var _prefixedDispatch = _interopRequireDefault(require("./prefixedDispatch")); | ||
var _prefixedDispatch = require('./prefixedDispatch'); | ||
var _prefixedDispatch2 = _interopRequireDefault(_prefixedDispatch); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -30,2 +21,3 @@ | ||
var nonFuncs = []; | ||
for (var key in subs) { | ||
@@ -35,5 +27,6 @@ if (Object.prototype.hasOwnProperty.call(subs, key)) { | ||
var unlistener = sub({ | ||
dispatch: (0, _prefixedDispatch2.default)(app._store.dispatch, model), | ||
dispatch: (0, _prefixedDispatch.default)(app._store.dispatch, model), | ||
history: app._history | ||
}, onError); | ||
if ((0, _utils.isFunction)(unlistener)) { | ||
@@ -46,3 +39,7 @@ funcs.push(unlistener); | ||
} | ||
return { funcs: funcs, nonFuncs: nonFuncs }; | ||
return { | ||
funcs: funcs, | ||
nonFuncs: nonFuncs | ||
}; | ||
} | ||
@@ -52,8 +49,6 @@ | ||
if (!unlisteners[namespace]) return; | ||
var _unlisteners$namespac = unlisteners[namespace], | ||
funcs = _unlisteners$namespac.funcs, | ||
nonFuncs = _unlisteners$namespac.nonFuncs; | ||
(0, _warning2.default)(nonFuncs.length === 0, '[app.unmodel] subscription should return unlistener function, check these subscriptions ' + nonFuncs.join(', ')); | ||
(0, _warning.default)(nonFuncs.length === 0, "[app.unmodel] subscription should return unlistener function, check these subscriptions ".concat(nonFuncs.join(', '))); | ||
var _iteratorNormalCompletion = true; | ||
@@ -64,5 +59,4 @@ var _didIteratorError = false; | ||
try { | ||
for (var _iterator = (0, _getIterator3.default)(funcs), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
for (var _iterator = funcs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var unlistener = _step.value; | ||
unlistener(); | ||
@@ -75,3 +69,3 @@ } | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
if (!_iteratorNormalCompletion && _iterator.return != null) { | ||
_iterator.return(); | ||
@@ -78,0 +72,0 @@ } |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,18 +6,31 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.noop = exports.returnSelf = exports.isFunction = exports.isArray = exports.isPlainObject = undefined; | ||
Object.defineProperty(exports, "isPlainObject", { | ||
enumerable: true, | ||
get: function get() { | ||
return _isPlainObject2.default; | ||
} | ||
}); | ||
exports.noop = exports.returnSelf = exports.isFunction = exports.isArray = void 0; | ||
var _isPlainObject2 = require('is-plain-object'); | ||
var _isPlainObject2 = _interopRequireDefault(require("is-plain-object")); | ||
var _isPlainObject3 = _interopRequireDefault(_isPlainObject2); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.isPlainObject = _isPlainObject3.default; | ||
var isArray = exports.isArray = Array.isArray.bind(Array); | ||
var isFunction = exports.isFunction = function isFunction(o) { | ||
var isArray = Array.isArray.bind(Array); | ||
exports.isArray = isArray; | ||
var isFunction = function isFunction(o) { | ||
return typeof o === 'function'; | ||
}; | ||
var returnSelf = exports.returnSelf = function returnSelf(m) { | ||
exports.isFunction = isFunction; | ||
var returnSelf = function returnSelf(m) { | ||
return m; | ||
}; | ||
var noop = exports.noop = function noop() {}; | ||
exports.returnSelf = returnSelf; | ||
var noop = function noop() {}; | ||
exports.noop = noop; |
{ | ||
"name": "dva-core", | ||
"version": "1.1.0", | ||
"version": "1.2.0", | ||
"description": "The core lightweight library for dva, based on redux and redux-saga.", | ||
@@ -26,10 +26,4 @@ "repository": { | ||
}, | ||
"scripts": { | ||
"build": "ruban build", | ||
"test": "ruban test", | ||
"debug": "ruban debug", | ||
"coveralls": "ruban coveralls" | ||
}, | ||
"dependencies": { | ||
"babel-runtime": "^6.26.0", | ||
"@babel/runtime": "^7.0.0-beta.34", | ||
"flatten": "^1.0.2", | ||
@@ -40,3 +34,3 @@ "global": "^4.3.2", | ||
"redux": "^3.7.1", | ||
"redux-saga": "^0.15.4", | ||
"redux-saga": "^0.16.0", | ||
"warning": "^3.0.0" | ||
@@ -43,0 +37,0 @@ }, |
@@ -1,1 +0,1 @@ | ||
module.exports = require('redux-saga'); | ||
module.exports = require('redux-saga/lib'); |
import { NAMESPACE_SEP } from './constants'; | ||
export default function createPromiseMiddleware(app) { | ||
const map = {}; | ||
const middleware = () => next => (action) => { | ||
return () => next => action => { | ||
const { type } = action; | ||
if (isEffect(type)) { | ||
return new Promise((resolve, reject) => { | ||
map[type] = { | ||
resolve: wrapped.bind(null, type, resolve), | ||
reject: wrapped.bind(null, type, reject), | ||
}; | ||
next({ | ||
__dva_resolve: resolve, | ||
__dva_reject: reject, | ||
...action, | ||
}); | ||
}); | ||
@@ -21,2 +20,3 @@ } else { | ||
function isEffect(type) { | ||
if (!type || typeof type !== 'string') return false; | ||
const [namespace] = type.split(NAMESPACE_SEP); | ||
@@ -32,25 +32,2 @@ const model = app._models.filter(m => m.namespace === namespace)[0]; | ||
} | ||
function wrapped(type, fn, args) { | ||
if (map[type]) delete map[type]; | ||
fn(args); | ||
} | ||
function resolve(type, args) { | ||
if (map[type]) { | ||
map[type].resolve(args); | ||
} | ||
} | ||
function reject(type, args) { | ||
if (map[type]) { | ||
map[type].reject(args); | ||
} | ||
} | ||
return { | ||
middleware, | ||
resolve, | ||
reject, | ||
}; | ||
} |
@@ -7,3 +7,3 @@ import { createStore, applyMiddleware, compose } from 'redux'; | ||
export default function ({ | ||
export default function({ | ||
reducers, | ||
@@ -14,5 +14,3 @@ initialState, | ||
promiseMiddleware, | ||
createOpts: { | ||
setupMiddlewares = returnSelf, | ||
}, | ||
createOpts: { setupMiddlewares = returnSelf }, | ||
}) { | ||
@@ -23,3 +21,3 @@ // extra enhancers | ||
isArray(extraEnhancers), | ||
`[app.start] extraEnhancers should be array, but got ${typeof extraEnhancers}`, | ||
`[app.start] extraEnhancers should be array, but got ${typeof extraEnhancers}` | ||
); | ||
@@ -29,4 +27,4 @@ | ||
const middlewares = setupMiddlewares([ | ||
promiseMiddleware, | ||
sagaMiddleware, | ||
promiseMiddleware, | ||
...flatten(extraMiddlewares), | ||
@@ -36,3 +34,6 @@ ]); | ||
let devtools = () => noop => noop; | ||
if (process.env.NODE_ENV !== 'production' && window.__REDUX_DEVTOOLS_EXTENSION__) { | ||
if ( | ||
process.env.NODE_ENV !== 'production' && | ||
window.__REDUX_DEVTOOLS_EXTENSION__ | ||
) { | ||
devtools = window.__REDUX_DEVTOOLS_EXTENSION__; | ||
@@ -43,4 +44,4 @@ } | ||
applyMiddleware(...middlewares), | ||
...extraEnhancers, | ||
devtools(window.__REDUX_DEVTOOLS_EXTENSION__OPTIONS), | ||
...extraEnhancers, | ||
]; | ||
@@ -47,0 +48,0 @@ |
@@ -1,11 +0,13 @@ | ||
import handleActions from './handleActions'; | ||
import defaultHandleActions from './handleActions'; | ||
export default function getReducer(reducers, state) { | ||
export default function getReducer(reducers, state, handleActions) { | ||
// Support reducer enhancer | ||
// e.g. reducers: [realReducers, enhancer] | ||
if (Array.isArray(reducers)) { | ||
return reducers[1](handleActions(reducers[0], state)); | ||
return reducers[1]( | ||
(handleActions || defaultHandleActions)(reducers[0], state) | ||
); | ||
} else { | ||
return handleActions(reducers || {}, state); | ||
return (handleActions || defaultHandleActions)(reducers || {}, state); | ||
} | ||
} |
import invariant from 'invariant'; | ||
import * as sagaEffects from 'redux-saga/effects'; | ||
import * as sagaEffects from 'redux-saga/lib/effects'; | ||
import warning from 'warning'; | ||
@@ -12,9 +12,9 @@ import { | ||
export default function getSaga(resolve, reject, effects, model, onError, onEffect) { | ||
return function *() { | ||
export default function getSaga(effects, model, onError, onEffect) { | ||
return function*() { | ||
for (const key in effects) { | ||
if (Object.prototype.hasOwnProperty.call(effects, key)) { | ||
const watcher = getWatcher(resolve, reject, key, effects[key], model, onError, onEffect); | ||
const watcher = getWatcher(key, effects[key], model, onError, onEffect); | ||
const task = yield sagaEffects.fork(watcher); | ||
yield sagaEffects.fork(function *() { | ||
yield sagaEffects.fork(function*() { | ||
yield sagaEffects.take(`${model.namespace}/@@CANCEL_EFFECTS`); | ||
@@ -28,3 +28,3 @@ yield sagaEffects.cancel(task); | ||
function getWatcher(resolve, reject, key, _effect, model, onError, onEffect) { | ||
function getWatcher(key, _effect, model, onError, onEffect) { | ||
let effect = _effect; | ||
@@ -42,3 +42,3 @@ let type = 'takeEvery'; | ||
opts.ms, | ||
'app.start: opts.ms should be defined if type is throttle', | ||
'app.start: opts.ms should be defined if type is throttle' | ||
); | ||
@@ -50,7 +50,11 @@ ms = opts.ms; | ||
['watcher', 'takeEvery', 'takeLatest', 'throttle'].indexOf(type) > -1, | ||
'app.start: effect type should be takeEvery, takeLatest, throttle or watcher', | ||
'app.start: effect type should be takeEvery, takeLatest, throttle or watcher' | ||
); | ||
} | ||
function *sagaWithCatch(...args) { | ||
function noop() {} | ||
function* sagaWithCatch(...args) { | ||
const { __dva_resolve: resolve = noop, __dva_reject: reject = noop } = | ||
args.length > 0 ? args[0] : {}; | ||
try { | ||
@@ -60,7 +64,7 @@ yield sagaEffects.put({ type: `${key}${NAMESPACE_SEP}@@start` }); | ||
yield sagaEffects.put({ type: `${key}${NAMESPACE_SEP}@@end` }); | ||
resolve(key, ret); | ||
resolve(ret); | ||
} catch (e) { | ||
onError(e); | ||
if (!e._dontReject) { | ||
reject(key, e); | ||
reject(e); | ||
} | ||
@@ -95,3 +99,5 @@ } | ||
type.indexOf(`${model.namespace}${NAMESPACE_SEP}`) !== 0, | ||
`[${name}] ${type} should not be prefixed with namespace ${model.namespace}`, | ||
`[${name}] ${type} should not be prefixed with namespace ${ | ||
model.namespace | ||
}` | ||
); | ||
@@ -98,0 +104,0 @@ } |
@@ -0,1 +1,2 @@ | ||
import invariant from 'invariant'; | ||
@@ -9,6 +10,7 @@ function identify(value) { | ||
const { type } = action; | ||
if (type && actionType !== type) { | ||
return state; | ||
invariant(type, 'dispatch: action should be a plain Object with type'); | ||
if (actionType === type) { | ||
return reducer(state, action); | ||
} | ||
return reducer(state, action); | ||
return state; | ||
}; | ||
@@ -19,10 +21,9 @@ } | ||
return (previous, current) => | ||
reducers.reduce( | ||
(p, r) => r(p, current), | ||
previous, | ||
); | ||
reducers.reduce((p, r) => r(p, current), previous); | ||
} | ||
function handleActions(handlers, defaultState) { | ||
const reducers = Object.keys(handlers).map(type => handleAction(type, handlers[type])); | ||
const reducers = Object.keys(handlers).map(type => | ||
handleAction(type, handlers[type]) | ||
); | ||
const reducer = reduceReducers(...reducers); | ||
@@ -29,0 +30,0 @@ return (state = defaultState, action) => reducer(state, action); |
@@ -22,3 +22,5 @@ import { combineReducers } from 'redux'; | ||
reducers: { | ||
UPDATE(state) { return state + 1; }, | ||
UPDATE(state) { | ||
return state + 1; | ||
}, | ||
}, | ||
@@ -34,6 +36,3 @@ }; | ||
export function create(hooksAndOpts = {}, createOpts = {}) { | ||
const { | ||
initialReducer, | ||
setupApp = noop, | ||
} = createOpts; | ||
const { initialReducer, setupApp = noop } = createOpts; | ||
@@ -44,5 +43,3 @@ const plugin = new Plugin(); | ||
const app = { | ||
_models: [ | ||
prefixNamespace({ ...dvaModel }), | ||
], | ||
_models: [prefixNamespace({ ...dvaModel })], | ||
_store: null, | ||
@@ -65,3 +62,5 @@ _plugin: plugin, | ||
} | ||
app._models.push(prefixNamespace(m)); | ||
const prefixedModel = prefixNamespace({ ...m }); | ||
app._models.push(prefixedModel); | ||
return prefixedModel; | ||
} | ||
@@ -78,14 +77,23 @@ | ||
function injectModel(createReducer, onError, unlisteners, m) { | ||
model(m); | ||
m = model(m); | ||
const store = app._store; | ||
if (m.reducers) { | ||
store.asyncReducers[m.namespace] = getReducer(m.reducers, m.state); | ||
store.replaceReducer(createReducer(store.asyncReducers)); | ||
} | ||
store.asyncReducers[m.namespace] = getReducer( | ||
m.reducers, | ||
m.state, | ||
plugin._handleActions | ||
); | ||
store.replaceReducer(createReducer(store.asyncReducers)); | ||
if (m.effects) { | ||
store.runSaga(app._getSaga(m.effects, m, onError, plugin.get('onEffect'))); | ||
store.runSaga( | ||
app._getSaga(m.effects, m, onError, plugin.get('onEffect')) | ||
); | ||
} | ||
if (m.subscriptions) { | ||
unlisteners[m.namespace] = runSubscription(m.subscriptions, m, app, onError); | ||
unlisteners[m.namespace] = runSubscription( | ||
m.subscriptions, | ||
m, | ||
app, | ||
onError | ||
); | ||
} | ||
@@ -131,3 +139,3 @@ } | ||
// Global error handler | ||
const onError = (err) => { | ||
const onError = err => { | ||
if (err) { | ||
@@ -138,3 +146,3 @@ if (typeof err === 'string') err = new Error(err); | ||
}; | ||
plugin.apply('onError', (err) => { | ||
plugin.apply('onError', err => { | ||
throw new Error(err.stack || err); | ||
@@ -146,8 +154,4 @@ })(err, app._store.dispatch); | ||
const sagaMiddleware = createSagaMiddleware(); | ||
const { | ||
middleware: promiseMiddleware, | ||
resolve, | ||
reject, | ||
} = createPromiseMiddleware(app); | ||
app._getSaga = getSaga.bind(null, resolve, reject); | ||
const promiseMiddleware = createPromiseMiddleware(app); | ||
app._getSaga = getSaga.bind(null); | ||
@@ -157,4 +161,9 @@ const sagas = []; | ||
for (const m of app._models) { | ||
reducers[m.namespace] = getReducer(m.reducers, m.state); | ||
if (m.effects) sagas.push(app._getSaga(m.effects, m, onError, plugin.get('onEffect'))); | ||
reducers[m.namespace] = getReducer( | ||
m.reducers, | ||
m.state, | ||
plugin._handleActions | ||
); | ||
if (m.effects) | ||
sagas.push(app._getSaga(m.effects, m, onError, plugin.get('onEffect'))); | ||
} | ||
@@ -165,7 +174,10 @@ const reducerEnhancer = plugin.get('onReducer'); | ||
Object.keys(extraReducers).every(key => !(key in reducers)), | ||
`[app.start] extitraReducers is conflict with other reducers, reducers list: ${Object.keys(reducers).join(', ')}`, | ||
`[app.start] extraReducers is conflict with other reducers, reducers list: ${Object.keys( | ||
reducers | ||
).join(', ')}` | ||
); | ||
// Create store | ||
const store = app._store = createStore({ // eslint-disable-line | ||
const store = (app._store = createStore({ | ||
// eslint-disable-line | ||
reducers: createReducer(), | ||
@@ -177,3 +189,3 @@ initialState: hooksAndOpts.initialState || {}, | ||
promiseMiddleware, | ||
}); | ||
})); | ||
@@ -202,3 +214,8 @@ // Extend store | ||
if (model.subscriptions) { | ||
unlisteners[model.namespace] = runSubscription(model.subscriptions, model, app, onError); | ||
unlisteners[model.namespace] = runSubscription( | ||
model.subscriptions, | ||
model, | ||
app, | ||
onError | ||
); | ||
} | ||
@@ -217,9 +234,11 @@ } | ||
function createReducer() { | ||
return reducerEnhancer(combineReducers({ | ||
...reducers, | ||
...extraReducers, | ||
...(app._store ? app._store.asyncReducers : {}), | ||
})); | ||
return reducerEnhancer( | ||
combineReducers({ | ||
...reducers, | ||
...extraReducers, | ||
...(app._store ? app._store.asyncReducers : {}), | ||
}) | ||
); | ||
} | ||
} | ||
} |
@@ -13,2 +13,3 @@ import invariant from 'invariant'; | ||
'extraEnhancers', | ||
'_handleActions', | ||
]; | ||
@@ -27,2 +28,3 @@ | ||
constructor() { | ||
this._handleActions = null; | ||
this.hooks = hooks.reduce((memo, key) => { | ||
@@ -35,3 +37,6 @@ memo[key] = []; | ||
use(plugin) { | ||
invariant(isPlainObject(plugin), 'plugin.use: plugin should be plain object'); | ||
invariant( | ||
isPlainObject(plugin), | ||
'plugin.use: plugin should be plain object' | ||
); | ||
const hooks = this.hooks; | ||
@@ -41,3 +46,5 @@ for (const key in plugin) { | ||
invariant(hooks[key], `plugin.use: unknown plugin property: ${key}`); | ||
if (key === 'extraEnhancers') { | ||
if (key === '_handleActions') { | ||
this._handleActions = plugin[key]; | ||
} else if (key === 'extraEnhancers') { | ||
hooks[key] = plugin[key]; | ||
@@ -54,3 +61,6 @@ } else { | ||
const validApplyHooks = ['onError', 'onHmr']; | ||
invariant(validApplyHooks.indexOf(key) > -1, `plugin.apply: hook ${key} cannot be applied`); | ||
invariant( | ||
validApplyHooks.indexOf(key) > -1, | ||
`plugin.apply: hook ${key} cannot be applied` | ||
); | ||
const fns = hooks[key]; | ||
@@ -91,3 +101,3 @@ | ||
function getOnReducer(hook) { | ||
return function (reducer) { | ||
return function(reducer) { | ||
for (const reducerEnhancer of hook) { | ||
@@ -94,0 +104,0 @@ reducer = reducerEnhancer(reducer); |
65478
1697
+ Added@babel/runtime@7.24.7(transitive)
+ Addedredux-saga@0.16.2(transitive)
+ Addedregenerator-runtime@0.14.1(transitive)
- Removedbabel-runtime@^6.26.0
- Removedbabel-runtime@6.26.0(transitive)
- Removedcore-js@2.6.12(transitive)
- Removedredux-saga@0.15.6(transitive)
- Removedregenerator-runtime@0.11.1(transitive)
Updatedredux-saga@^0.16.0