jss-react-material
Version:
Google Material Components for React
69 lines (56 loc) • 2.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
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 _validUrl = require('valid-url');
var _validUrl2 = _interopRequireDefault(_validUrl);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ANONYMOUS = '<<anonymous>>';
// Equivalent of `typeof` but with special handling for array and regexp.
function getPropType(propValue) {
var propType = typeof propValue === 'undefined' ? 'undefined' : _typeof(propValue);
if (Array.isArray(propValue)) {
return 'array';
}
if (propValue instanceof RegExp) {
return 'object';
}
return propType;
}
function createChainableTypeChecker(validate) {
function checkType(isRequired, props, propName, componentName, location, propFullName) {
componentName = componentName || ANONYMOUS;
propFullName = propFullName || propName;
if (props[propName] === null) {
if (isRequired) {
return new Error('Required ' + location + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
}
return null;
} else {
return validate(props, propName, componentName, location, propFullName);
}
}
var chainedCheckType = checkType.bind(null, false);
chainedCheckType.isRequired = checkType.bind(null, true);
return chainedCheckType;
}
function createUrlTypeChecker() {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
var propType = getPropType(propValue);
var uri = propValue.substr(0, 2) === '//' ? 'http:' + propValue : propValue;
if (propType !== 'string') {
return new Error('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `uri_string`.'));
}
if (!_validUrl2.default.isUri(uri)) {
return new Error('Invalid ' + location + ' `' + propFullName + '` `' + propValue + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `valid url`.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
var PropTypes = {
url: createUrlTypeChecker()
};
exports.default = PropTypes;