json-schema-to-joi
Version:
Converts JSON schema to Joi typescript code
59 lines • 2 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveType = void 0;
const types_1 = require("./types");
const array_1 = require("./array");
const _ = require("lodash");
const number_1 = require("./number");
const object_1 = require("./object");
const string_1 = require("./string");
const boolean_1 = require("./boolean");
function resolveType(schema, options) {
const getJoiType = (type) => {
switch (type) {
case 'array':
return array_1.resolveJoiArraySchema(schema, options);
break;
case 'boolean':
return boolean_1.resolveJoiBooleanSchema(schema);
break;
case 'integer':
case 'number':
return number_1.resolveJoiNumberSchema(schema);
break;
case 'object':
return object_1.resolveJoiObjectSchema(schema, options);
break;
case 'string':
return string_1.resolveJoiStringSchema(schema);
break;
case 'null':
return {
type: 'any',
valid: [null],
};
break;
}
return {
type: 'any',
};
};
let joiSchema = types_1.createJoiItem('any');
if (_.isArray(schema.type)) {
const schemas = schema.type.map(getJoiType);
joiSchema.type = 'alternatives';
joiSchema.alternatives = schemas;
}
else if (schema.type) {
joiSchema = getJoiType(schema.type);
}
(!_.isUndefined(schema.default)) && (joiSchema.default = schema.default);
(!!schema.description) && (joiSchema.description = schema.description);
(!!schema.title) && (joiSchema.label = _.camelCase(schema.title));
if (schema.enum) {
joiSchema.valid = schema.enum;
}
return joiSchema;
}
exports.resolveType = resolveType;
//# sourceMappingURL=resolveType.js.map
;