UNPKG

bdn-pocket

Version:

pocket tools for managing redux and redux-saga

105 lines (77 loc) 3.3 kB
'use strict'; 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;