required-value-validator.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import {DataType} from '../data-type.js';
  2. import {ServiceContainer} from '@e22m4u/js-service';
  3. import {DataValidationError} from '../errors/index.js';
  4. import {EmptyValuesService} from '@e22m4u/js-empty-values';
  5. /**
  6. * Required value validator.
  7. *
  8. * @param {*} value
  9. * @param {object} schema
  10. * @param {object|undefined} options
  11. * @param {ServiceContainer} container
  12. */
  13. export function requiredValueValidator(value, schema, options, container) {
  14. // если значение не является обязательным,
  15. // то проверка пропускается
  16. if (schema.required !== true) {
  17. return;
  18. }
  19. // если значение не является пустым,
  20. // то проверка успешно завершается
  21. const emptyValues = container.get(EmptyValuesService);
  22. const dataType = schema.type || DataType.ANY;
  23. if (!emptyValues.isEmptyOf(dataType, value)) {
  24. return;
  25. }
  26. // если значение является пустым,
  27. // то выбрасывается ошибка
  28. const sourcePath = options && options.sourcePath;
  29. if (sourcePath) {
  30. throw new DataValidationError(
  31. 'Value of %v is required, but %v was given.',
  32. sourcePath,
  33. value,
  34. );
  35. } else {
  36. throw new DataValidationError(
  37. 'Value is required, but %v was given.',
  38. value,
  39. );
  40. }
  41. }