UNPKG

bdn-pocket

Version:

pocket tools for managing redux and redux-saga

124 lines (100 loc) 3.69 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.mixed = exports.array = exports.object = exports.string = exports.bool = exports.func = exports.number = exports.Type = 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 _it = require('@stamp/it'); var _it2 = _interopRequireDefault(_it); var _argOverProp = require('@stamp/arg-over-prop'); var _isNil = require('ramda/src/isNil'); var _isNil2 = _interopRequireDefault(_isNil); var _prop = require('ramda/src/prop'); var _prop2 = _interopRequireDefault(_prop); var _has = require('ramda/src/has'); var _has2 = _interopRequireDefault(_has); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Type = exports.Type = (0, _it2.default)((0, _argOverProp.argOverProp)('required', 'name', 'allowNull')).props({ required: true, // key required type: null, name: null, allowNull: false // null value allowed }).methods({ isValid: function isValid() { var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var name = arguments[1]; var propName = name || this.name; var hasProp = (0, _has2.default)(propName, o); var v = (0, _prop2.default)(propName, o); var isEmpty = (0, _isNil2.default)(v); if (this.required) { if (hasProp === false) { throw new Error('prop \'' + propName + '\' is required but missing'); } } if (isEmpty === true && this.allowNull === false && hasProp === true) { throw new Error('prop \'' + propName + '\' does not allow null value'); } if (isEmpty === false && this.isTypeOk(v) === false) { var typeOfV = this.getType(v); throw new Error('prop \'' + propName + '\' expect type ' + this.type + ' but received ' + typeOfV); } return true; }, /** * override using Stamp functionality * * const newType = Type * .props({ type: 'newType' }) * .methods({ * isTypeOk(v) { * return // make your test here * } * }) * @param {*} v */ isTypeOk: function isTypeOk(v) { if ((0, _isNil2.default)(this.type) === true) return true; return (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === this.type; }, getType: function getType(v) { var type = typeof v === 'undefined' ? 'undefined' : _typeof(v); if (type === 'object') { return Array.isArray(v) ? 'array' : 'object'; } else { return type; } } }); var number = exports.number = Type.props({ type: 'number' }); var func = exports.func = Type.props({ type: 'function' }); var bool = exports.bool = Type.props({ type: 'boolean' }); var string = exports.string = Type.props({ type: 'string' }); var object = exports.object = Type.props({ type: 'object' }).methods({ isTypeOk: function isTypeOk(v) { return this.getType(v) === 'object'; // return (typeof v === 'object') && !Array.isArray(v) } }); var array = exports.array = Type.props({ type: 'array' }).methods({ isTypeOk: function isTypeOk(v) { return this.getType(v) === 'array'; // return Array.isArray(v) } }); var mixed = exports.mixed = Type.props({ type: 'mixed' }).methods({ isTypeOk: function isTypeOk() { return true; } }); var Types = { number: number, func: func, object: object, // shape: () => null, bool: bool, string: string, array: array, mixed: mixed }; exports.default = Types;