fhirbuilder
Version:
Another FHIR Tool to build FHIR Resources
38 lines (37 loc) • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModelValidator = void 0;
const BaseValidator_1 = require("./BaseValidator");
const remove_undefined_attributes_util_1 = require("../../utils/remove-undefined-attributes.util");
const operation_outcome_exception_1 = require("../../../commons/exceptions/operation-outcome.exception");
/**
* @description Validates a model based on the model definition
* @param options - the options to validate the model
* @param options.dataToValidate - the model to validate
* @param options.path - the path to the model
* @param options.modelDefinition - the model definition
* @param options.errors - the errors array
* @param options.additionalValidation - additional validation functions
* @returns {void}
*/
const ModelValidator = (options) => {
const { dataToValidate, path, modelDefinition, additionalValidation } = options;
if (typeof dataToValidate !== 'object') {
options.errors.push(new operation_outcome_exception_1.OperationOutcomeIssueException({
severity: 'error',
code: 'invalid',
diagnostics: `Expected data to be of type object, received ${typeof dataToValidate}`,
details: {
text: `Path: ${path}`,
},
}));
}
const cleanData = (0, remove_undefined_attributes_util_1.RemoveUndefinedAttributes)(dataToValidate);
if (!options.errors)
options.errors = [];
(0, BaseValidator_1.BaseValidator)(cleanData, modelDefinition, path, options.errors);
if (additionalValidation?.length) {
additionalValidation.forEach((validation) => validation(cleanData, path, options.errors));
}
};
exports.ModelValidator = ModelValidator;