one-schema
Version:
one-schema object validator
131 lines (130 loc) • 4.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.onsFieldToSwagger = void 0;
function primitiveField(field, swaggerType, swaggerFormat) {
if (field.settings.type !== "bool" && field.settings.type !== "int32" && field.settings.type !== "string" && field.settings.type !== "float64") {
throw new Error("primitiveField called on non primitive field!");
}
var swaggerField = { type: swaggerType };
if (typeof swaggerFormat === 'string') {
swaggerField.format = swaggerFormat;
}
if (typeof field.settings.example !== 'undefined') {
swaggerField.example = field.settings.example;
}
if (typeof field.settings.description === 'string') {
swaggerField.description = field.settings.description;
}
if (typeof field.settings.defaultValue !== 'undefined') {
swaggerField.default = field.settings.defaultValue;
}
if (Array.isArray(field.settings.oneOf)) {
var oneOfArr = field.settings.oneOf;
swaggerField.enum = oneOfArr.concat([]);
}
return swaggerField;
}
function int32ToSwagger(field) {
var swaggerField = primitiveField(field, 'integer', 'int32');
if (typeof field.settings.min !== 'undefined') {
swaggerField.minimum = field.settings.min;
}
if (typeof field.settings.max !== 'undefined') {
swaggerField.maximum = field.settings.max;
}
return swaggerField;
}
function float64ToSwagger(field) {
var swaggerField = primitiveField(field, 'number', 'double');
if (typeof field.settings.min !== 'undefined') {
swaggerField.minimum = field.settings.min;
}
if (typeof field.settings.max !== 'undefined') {
swaggerField.maximum = field.settings.max;
}
return swaggerField;
}
function boolToSwagger(field) {
var swaggerField = primitiveField(field, 'boolean');
return swaggerField;
}
function stringToSwagger(field) {
var swaggerField = primitiveField(field, 'string');
if (typeof field.settings.min !== 'undefined') {
swaggerField.minLength = field.settings.min;
}
if (typeof field.settings.max !== 'undefined') {
swaggerField.maxLength = field.settings.max;
}
if (field.settings.validator &&
typeof field.settings.validator === 'object') {
if (field.settings.validator.id === 'datetime') {
swaggerField.format = 'date-time';
}
}
return swaggerField;
}
function arrayToSwagger(field) {
var swaggerField = { type: 'array' };
if (typeof field.settings.description === 'string') {
swaggerField.description = field.settings.description;
}
if (typeof field.settings.min !== 'undefined') {
swaggerField.minItems = field.settings.min;
}
if (typeof field.settings.max !== 'undefined') {
swaggerField.maxItems = field.settings.max;
}
if (field.settings.arrayOf) {
swaggerField.items = onsFieldToSwagger(field.settings.arrayOf);
}
else {
throw new Error("Error in arrayToSwagger: Field Validator missing arrayOf property!");
}
return swaggerField;
}
function objectToSwagger(field) {
var swaggerField = {
type: 'object'
};
var outProperties = {};
if (typeof field.settings.description === 'string') {
swaggerField.description = field.settings.description;
}
var fvSchema = field.settings.schema;
if (!fvSchema) {
throw new Error("Error in objectToSwagger: Field Validator missing schema property!");
}
var required = [];
Object.keys(fvSchema).forEach(function (k) {
if (fvSchema[k].settings.required) {
required.push(k);
}
outProperties[k] = onsFieldToSwagger(fvSchema[k]);
});
swaggerField.properties = outProperties;
if (required.length) {
swaggerField.required = required;
}
return swaggerField;
}
var FIELD_TO_SWAGGER_CONVERT = {
int32: int32ToSwagger,
string: stringToSwagger,
bool: boolToSwagger,
float64: float64ToSwagger,
object: objectToSwagger,
array: arrayToSwagger,
};
function onsFieldToSwagger(field) {
if (typeof field !== 'object' || !field || !field.settings || typeof field.settings.type !== 'string') {
throw new Error("Error: onsFieldToSwagger called on invalid field or field with an unset/undefined type!");
}
var typeConvertor = FIELD_TO_SWAGGER_CONVERT[field.settings.type];
if (!FIELD_TO_SWAGGER_CONVERT.hasOwnProperty(field.settings.type) ||
typeof typeConvertor !== 'function') {
throw new Error("Unsupported type '" + field.settings.type + "' for swagger!");
}
return typeConvertor(field);
}
exports.onsFieldToSwagger = onsFieldToSwagger;