UNPKG

@sprucelabs/schema

Version:

Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓

63 lines (62 loc) • 2.27 kB
import SpruceError from '../errors/SpruceError.js'; export default function mapFieldErrorsToParameterErrors(fieldErrors) { const { missingParameters, invalidParameters, unexpectedParamaters } = pullParamaterIssues(fieldErrors); const errors = []; if (missingParameters.length > 0) { errors.push(new SpruceError({ code: 'MISSING_PARAMETERS', parameters: missingParameters.map((p) => p.name), errors: missingParameters, })); } if (invalidParameters.length > 0) { errors.push(new SpruceError({ code: 'INVALID_PARAMETERS', parameters: invalidParameters.map((p) => p.name), errors: invalidParameters, })); } if (unexpectedParamaters.length > 0) { errors.push(new SpruceError({ code: 'UNEXPECTED_PARAMETERS', parameters: unexpectedParamaters.map((p) => p.name), errors: unexpectedParamaters, })); } return errors; } function pullParamaterIssues(errors, prefix = '') { const missingParameters = []; const invalidParameters = []; const unexpectedParamaters = []; errors.forEach((fieldError) => { const fieldName = prefix ? `${prefix}.${fieldError.name}` : fieldError.name; if (fieldError.errors) { const { missingParameters: m, invalidParameters: i, unexpectedParamaters: u, } = pullParamaterIssues(fieldError.errors, fieldName); missingParameters.push(...m); invalidParameters.push(...i); unexpectedParamaters.push(...u); } else if (fieldError.code === 'MISSING_PARAMETER') { missingParameters.push({ ...fieldError, name: fieldName, }); } else if (fieldError.code === 'INVALID_PARAMETER') { invalidParameters.push({ ...fieldError, name: fieldName, }); } else if (fieldError.code === 'UNEXPECTED_PARAMETER') { unexpectedParamaters.push({ ...fieldError, name: fieldName, }); } }); return { missingParameters, invalidParameters, unexpectedParamaters }; }