import { validateChain, validateInteger, validateNonEmptyTrimmedString, validateStringToNumber, validateTest, } from "@biryani/core" export function validateDb(data: any): [any, any] { if (data === null || data === undefined) { return [data, "Missing value"] } if (typeof data !== "object") { return [data, `Expected an object got "${typeof data}"`] } data = { ...data } const errors: { [key: string]: any } = {} const remainingKeys = new Set(Object.keys(data)) for (let key of ["database", "host", "password", "user"]) { remainingKeys.delete(key) const [value, error] = validateNonEmptyTrimmedString(data[key]) data[key] = value if (error !== null) { errors[key] = error } } { const key = "port" remainingKeys.delete(key) const [value, error] = validateChain( validateStringToNumber, validateInteger, validateTest( value => 0 <= value && value <= 65536, "Must be an integer between 0 and 65536", ), )(data[key]) data[key] = value if (error !== null) { errors[key] = error } } for (let key of remainingKeys) { errors[key] = "Unexpected item" } return [data, Object.keys(errors).length === 0 ? null : errors] }