genji-core
Version:
The core lightweight library for genji, based on redux and redux-saga.
55 lines (39 loc) • 2.15 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = checkModel;
var _keys = _interopRequireDefault(require("@babel/runtime/core-js/object/keys"));
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,
mutations = model.mutations,
actions = model.actions,
subscriptions = model.subscriptions,
state = model.state; // 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 任意
// mutations 可以为空,PlainObject 或者数组
if (mutations) {
(0, _invariant.default)((0, _utils.isPlainObject)(mutations), "[app.model] mutations should be plain object, but got ".concat((0, _typeof2.default)(mutations)));
} // actions 可以为空,PlainObject
if (actions) {
(0, _invariant.default)((0, _utils.isPlainObject)(actions), "[app.model] actions should be plain object, but got ".concat((0, _typeof2.default)(actions)));
}
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 (0, _keys.default)(obj).every(function (key) {
return (0, _utils.isFunction)(obj[key]);
});
}