import { FormatName } from 'ajv-formats' import { ModelProperty, Property } from '../types/model.types' import { getResultAtom } from './get-string-result' export const getAtomProperties = ( propertyName: string, property: ModelProperty, output: Property ): Property => { const { type, isArray } = property const getResult = (parentPropertyName?: string) => getResultAtom( propertyName, parentPropertyName?.length ? `${parentPropertyName}.${propertyName}` : propertyName, property.default, isArray ) switch (type) { case 'string': { const { type, format, maxLength, minLength, pattern } = property output.schema = { type, } if (property.default !== undefined) { output.schema.default = property.default } if (format !== undefined) { output.schema.format = format } if (maxLength !== undefined) { output.schema.maxLength = maxLength } if (minLength !== undefined) { output.schema.minLength = minLength } if (pattern !== undefined) { output.schema.pattern = pattern } output.getString = getResult break } case 'date': case 'time': case 'datetime': { let format: FormatName switch (type) { case 'date': format = 'date' break case 'time': format = 'time' break case 'datetime': format = 'date-time' break } output.schema = { type: 'string', format, } if (property.default !== undefined) { output.schema.default = property.default } output.getString = getResult break } case 'number': { const { type, maximum, minimum } = property output.schema = { type, } if (property.default !== undefined) { output.schema.default = property.default } if (maximum !== undefined) { output.schema.maximum = maximum } if (minimum !== undefined) { output.schema.minimum = minimum } output.getString = getResult break } case 'boolean': { const { type } = property output.schema = { type, } if (property.default !== undefined) { output.schema.default = property.default } output.getString = getResult break } } return output }