# Write a validator
You need to implement ValidatableConfiguration<TConfiguration>
to create a new validator.
import {ConfigurationValidationError, ValidatableConfiguration} from '@configuration-parsing/core'
import Joi from 'joi'
class JoiConfigurationValidation<TConfiguration> implements ValidatableConfiguration<TConfiguration> {
constructor(private readonly joiObjectSchema: Joi.ObjectSchema) {}
validate(unvalidatedConfiguration: unknown): Promise<TConfiguration> {
// Validate the configuration and return it.
return this.joiObjectSchema.validateAsync(unvalidatedConfiguration)
// Wrap the validation error in a ConfigurationValidationError.
.catch(joiError => Promise.reject(new ConfigurationValidationError(
`Something went wrong while validating a configuration.`,
JoiConfigurationValidation.name,
joiError
)))
}
}
export const joiConfigurationValidator = <TConfiguration> (joiObjectSchema: Joi.ObjectSchema): ValidatableConfiguration<TConfiguration> =>
new JoiConfigurationValidation<TConfiguration>(joiObjectSchema)