dareway-rui
Version:
74 lines (58 loc) • 2.65 kB
JavaScript
;
var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault');
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.default = checkModel;
var _typeof2 = _interopRequireDefault(require('@babel/runtime/helpers/typeof'));
var _invariant = _interopRequireDefault(require('invariant'));
var _utils = require('./utils');
function checkModel(model, existModels) {
var namespace = model.namespace,
reducers = model.reducers,
effects = model.effects,
subscriptions = model.subscriptions; // namespace 必须被定义
(0, _invariant.default)(namespace, '[app.model] namespace should be defined'); // 并且是字符串
(0, _invariant.default)(
typeof namespace === 'string',
'[app.model] namespace should be string, but got '.concat((0, _typeof2.default)(namespace))
); // 并且唯一
(0, _invariant.default)(
!existModels.some(function(model) {
return model.namespace === namespace;
}),
'[app.model] namespace should be unique'
); // state 可以为任意值
// reducers 可以为空,PlainObject 或者数组
if (reducers) {
(0, _invariant.default)(
(0, _utils.isPlainObject)(reducers) || (0, _utils.isArray)(reducers),
'[app.model] reducers should be plain object or array, but got '.concat((0, _typeof2.default)(reducers))
); // 数组的 reducers 必须是 [Object, Function] 的格式
(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, _invariant.default)(
(0, _utils.isPlainObject)(effects),
'[app.model] effects should be plain object, but got '.concat((0, _typeof2.default)(effects))
);
}
if (subscriptions) {
// subscriptions 可以为空,PlainObject
(0, _invariant.default)(
(0, _utils.isPlainObject)(subscriptions),
'[app.model] subscriptions should be plain object, but got '.concat((0, _typeof2.default)(subscriptions))
); // subscription 必须为函数
(0, _invariant.default)(isAllFunction(subscriptions), '[app.model] subscription should be function');
}
}
function isAllFunction(obj) {
return Object.keys(obj).every(function(key) {
return (0, _utils.isFunction)(obj[key]);
});
}
//@ sourceMappingURL=checkModel.js.map