react-schema
Version:
Use react like PropTypes for generic object validation.
60 lines (46 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.format = exports.defineFormatter = 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; }; /* eslint no-useless-escape:0 */
var _getTypeName = require('./utils/getTypeName');
var _getTypeName2 = _interopRequireDefault(_getTypeName);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var formatters = {};
var defineFormatter = exports.defineFormatter = function defineFormatter(typeName, formatter) {
return formatters[typeName] = formatter;
};
var format = exports.format = function format(checker) {
var typeName = (0, _getTypeName2.default)(checker);
var formatter = formatters[typeName];
if (formatter && checker && checker.$meta) {
return formatter(checker.$meta.args);
}
return typeName;
};
var shapeToObject = function shapeToObject(obj) {
var result = {};
Object.keys(obj).forEach(function (key) {
var value = obj[key];
if (typeof value === 'function') {
result[key] = '<' + ((0, _getTypeName2.default)(value) || 'unknown') + '>';
} else if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
result[key] = shapeToObject(value); // <== RECURSION.
}
});
return result;
};
defineFormatter('shape', function (shape) {
var output = shapeToObject(shape);
output = JSON.stringify(output).replace(/\"/g, '');
return 'shape(' + output + ')';
});
defineFormatter('oneOfType', function (types) {
var typeNames = types.map(format).join(', ');
return 'oneOfType(' + typeNames + ')';
});
defineFormatter('oneOf', function (enumValues) {
return 'oneOf(' + enumValues.join(', ') + ')';
});
//# sourceMappingURL=PropTypeFormatter.js.map