UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

55 lines (54 loc) 2 kB
import { validateChain, validateInteger, validateNonEmptyTrimmedString, validateNumber, validateOption, validateString, validateStringToNumber, validateTest, } from "@biryani/core"; function validateDb(data) { 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 = {}; const remainingKeys = new Set(Object.keys(data)); for (const key of ["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(validateOption([validateString, validateStringToNumber], validateNumber), validateInteger, validateTest((value) => 0 <= value && value <= 65535, "Must be an integer between 0 and 65535"))(data[key]); data[key] = value; if (error !== null) { errors[key] = error; } } for (const key of remainingKeys) { errors[key] = "Unexpected item"; } return [data, Object.keys(errors).length === 0 ? null : errors]; } export function validateConfig(data) { 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 = {}; const remainingKeys = new Set(Object.keys(data)); { const key = "db"; remainingKeys.delete(key); const [value, error] = validateDb(data[key]); data[key] = value; if (error !== null) { errors[key] = error; } } return [data, Object.keys(errors).length === 0 ? null : errors]; }