import { validateChoice, validateMaybeTrimmedString, validateNonEmptyTrimmedString, } from "@biryani/core" import { RawMapNodeType } from "../raw_maps" export function validateRawMapNode(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 remainingKeys = new Set(Object.keys(data)) const errors: { [key: string]: any } = {} { const key = "description" remainingKeys.delete(key) const [value, error] = validateMaybeTrimmedString(data[key]) if (value === null) { delete data[key] } else { data[key] = value } if (error !== null) { errors[key] = error } } { const key = "name" remainingKeys.delete(key) const [value, error] = validateNonEmptyTrimmedString(data[key]) data[key] = value if (error !== null) { errors[key] = error } } { const key = "path" remainingKeys.delete(key) const [value, error] = validateNonEmptyTrimmedString(data[key]) data[key] = value if (error !== null) { errors[key] = error } } { const key = "type" remainingKeys.delete(key) const [value, error] = validateChoice([ RawMapNodeType.RawMap, RawMapNodeType.Group, ])(data[key]) data[key] = value if (error !== null) { errors[key] = error } } if (errors.type === undefined && data.type === RawMapNodeType.RawMap) { { const key = "topoJson" remainingKeys.delete(key) // const [value, error] = validateOption( // validateMissing, // validateRawMapTopoJson, // )(data[key]) // if (value === null) { // delete data[key] // } else { // data[key] = value // } // if (error !== null) { // errors[key] = error // } if (data[key] === null) { delete data[key] } } } for (const key of remainingKeys) { errors[key] = "Unexpected entry" } return [data, Object.keys(errors).length === 0 ? null : errors] }