@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
JavaScript
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 };
}