UNPKG

one-schema

Version:
131 lines (130 loc) 4.75 kB
"use strict"; 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;