const schemaKeywordTypes = { multipleOf: 'number', maximum: 'number', exclusiveMaximum: 'number', minimum: 'number', exclusiveMinimum: 'number', maxLength: 'string', minLength: 'string', pattern: 'string', items: 'array', maxItems: 'array', minItems: 'array', uniqueItems: 'array', additionalItems: 'array', maxProperties: 'object', minProperties: 'object', required: 'object', additionalProperties: 'object', properties: 'object', patternProperties: 'object', dependencies: 'object' }; export function inferType(schema) { if (schema.type !== undefined) { return Array.isArray(schema.type) ? schema.type.length === 0 ? null : schema.type[0] : schema.type; } const keywords = Object.keys(schemaKeywordTypes); for (var i = 0; i < keywords.length; i++) { let keyword = keywords[i]; let type = schemaKeywordTypes[keyword]; if (schema[keyword] !== undefined) { return type; } } return null; }