@sprucelabs/schema
Version:
Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓
69 lines (68 loc) • 2.58 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = mapFieldErrorsToParameterErrors;
const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
function mapFieldErrorsToParameterErrors(fieldErrors) {
const { missingParameters, invalidParameters, unexpectedParamaters } = pullParamaterIssues(fieldErrors);
const errors = [];
if (missingParameters.length > 0) {
errors.push(new SpruceError_1.default({
code: 'MISSING_PARAMETERS',
parameters: missingParameters.map((p) => p.name),
errors: missingParameters,
}));
}
if (invalidParameters.length > 0) {
errors.push(new SpruceError_1.default({
code: 'INVALID_PARAMETERS',
parameters: invalidParameters.map((p) => p.name),
errors: invalidParameters,
}));
}
if (unexpectedParamaters.length > 0) {
errors.push(new SpruceError_1.default({
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 };
}