import {DataType} from '../data-type.js'; import {ServiceContainer} from '@e22m4u/js-service'; import {DataValidationError} from '../errors/index.js'; import {EmptyValuesService} from '@e22m4u/js-empty-values'; /** * Required value validator. * * @param {*} value * @param {object} schema * @param {object|undefined} options * @param {ServiceContainer} container */ export function requiredValueValidator(value, schema, options, container) { // если значение не является обязательным, // то проверка пропускается if (schema.required !== true) { return; } // если значение не является пустым, // то проверка успешно завершается const emptyValues = container.get(EmptyValuesService); const dataType = schema.type || DataType.ANY; if (!emptyValues.isEmptyOf(dataType, value)) { return; } // если значение является пустым, // то выбрасывается ошибка const sourcePath = options && options.sourcePath; if (sourcePath) { throw new DataValidationError( 'Value of %v is required, but %v was given.', sourcePath, value, ); } else { throw new DataValidationError( 'Value is required, but %v was given.', value, ); } }