UNPKG

react-schema

Version:

Use react like PropTypes for generic object validation.

72 lines (55 loc) 1.89 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.analyze = exports.defineAnalyzer = undefined; var _getTypeName = require('./utils/getTypeName'); var _getTypeName2 = _interopRequireDefault(_getTypeName); var _clone = require('./utils/clone'); var _clone2 = _interopRequireDefault(_clone); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var analyzers = {}; var defineAnalyzer = exports.defineAnalyzer = function defineAnalyzer(type, analyzer) { analyzers[type] = analyzer; }; var analyze = exports.analyze = function analyze(checker) { var nodeInfo = void 0; if (checker && checker.$meta) { var analyzer = analyzers[checker.$meta.type]; if (analyzer) { nodeInfo = (0, _clone2.default)(analyzer(checker.$meta.args)); } } if (!nodeInfo) { nodeInfo = { type: 'literal', value: (0, _getTypeName2.default)(checker) || null }; } // We can infer whether `isRequired` was used by checking if the generated // checker still has this property or not. if (typeof checker === 'function' && !checker.hasOwnProperty('isRequired')) { nodeInfo.isRequired = true; } return nodeInfo; }; defineAnalyzer('shape', function (properties) { var nodeInfo = {}; nodeInfo.type = 'shape'; nodeInfo.properties = Object.keys(properties).map(function (key) { var childAST = (0, _clone2.default)(analyze(properties[key])); childAST.name = key; return childAST; }); return nodeInfo; }); defineAnalyzer('arrayOf', function (element) { var nodeInfo = {}; nodeInfo.type = 'arrayOf'; nodeInfo.element = analyze(element); return nodeInfo; }); defineAnalyzer('oneOfType', function (types) { var nodeInfo = {}; nodeInfo.type = 'oneOfType'; nodeInfo.types = types.map(analyze); return nodeInfo; }); //# sourceMappingURL=PropTypeAnalyzer.js.map