bdn-pocket
Version:
pocket tools for managing redux and redux-saga
105 lines (77 loc) • 3.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Types = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _reduce = require('ramda/src/reduce');
var _reduce2 = _interopRequireDefault(_reduce);
var _mapObjIndexed = require('ramda/src/mapObjIndexed');
var _mapObjIndexed2 = _interopRequireDefault(_mapObjIndexed);
var _it = require('@stamp/it');
var _it2 = _interopRequireDefault(_it);
var _is = require('@stamp/is');
var _is2 = _interopRequireDefault(_is);
var _types = require('./types');
var _types2 = _interopRequireDefault(_types);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.Types = _types2.default;
function argsToPropTypes(propTypes) {
var reducer = function reducer(acc, name) {
if (!_is2.default.isString(name)) {
throw new ReferenceError('expected args prop types to be only string - ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name)) + ' received');
}
acc[name] = (0, _types.mixed)({ name: name });
return acc;
};
return (0, _reduce2.default)(reducer, {}, propTypes);
}
function checkObjPropTypes() {
var propTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var mapper = function mapper(v, key) {
if (_is2.default.isFunction(v) || _is2.default.isFunction(v.isValid)) {
return _is2.default.isStamp(v) ? v() : v;
}
throw new ReferenceError('expected ' + key + ' prop type to be a function - ' + (typeof v === 'undefined' ? 'undefined' : _typeof(v)) + ' received');
};
return (0, _mapObjIndexed2.default)(mapper, propTypes);
}
var PropTypes = _it2.default.deepConf({
propTypeModel: {}
}).statics({
propTypes: function propTypes() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length === 0) return;
var firstArg = args[0];
var argsToProps = _is2.default.isObject(firstArg) ? checkObjPropTypes(firstArg) : argsToPropTypes(args);
// deep merge all the pairs to the modelProps object
return this.deepConf({
propTypeModel: argsToProps
});
},
hasPropTypes: function hasPropTypes() {
var propTypeModel = this.compose.deepConfiguration.propTypeModel;
return Object.keys(propTypeModel).length > 0;
}
}).init(function () {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _ref = arguments[1];
var stamp = _ref.stamp;
var propTypeModel = stamp.compose.deepConfiguration.propTypeModel;
Object.keys(propTypeModel).forEach(function (key) {
var propType = propTypeModel[key];
propType.isValid(props, key);
});
});
// const a = PropTypes.propTypes('a')({a: 'a'})
// const b = PropTypes.propTypes('b')({b: 'b'})
// import { number } from './types'
// // const c = PropTypes.propTypes({ a: number({ required: true }) })
// const c = PropTypes.propTypes({
// a: number,
// b: string,
// })
// c({a: 'a', b: 'b'})
exports.default = PropTypes;