Ваша задача написать валидатор, в котором есть ряд методов и свойств и экспортировать его из файла src/index.js. Валидатор позволяет проверять аргументы на соответствие необходимым условиям, которые были заданы с помощью методов валидатора.
Пример использования:
// создаем экземпляр валидатора
const v = new Validator();
// определяем метод для валидации чисел и связываем его с валидатором, обращаясь к нему через переменную.
const schema = v.number();
// проверяем данные на соответствие числовому типу, с помощью метода isValid()
schema.isValid('Hexlet'); // false
schema.isValid(''); // false
schema.isValid(null); // false
schema.isValid(123); // true
Вы можете самостоятельно протестировать работу валидатора. В каталоге src разрешено использовать любые файлы и создавать новые, если это делает вашу разработку более удобной.
Для тестирования валидатора, достаточно создать экземпляр валидатора, настроить валидацию с помощью методов и вызвать метод validate()
с необходимым аргументом, после чего написать в терминале:
node src/index.js
Вам необходимо создать валидатор, который способен принимать аргумент и проводить его проверку на соответствие определенным условиям. В данной задаче мы ограничиваемся валидацией чисел. Для этого в вашем валидаторе должен быть метод number()
, который создает экземпляр валидатора чисел. Этот экземпляр обладает методом isValid()
, который принимает данные на вход и возвращает значение true или false в зависимости от того, являются ли входные данные числом.
const v = new Validator();
const schema = v.number();
schema.isValid(null); // false
schema.isValid(''); // false
schema.isValid(true); // false
schema.isValid(123); // true
schema.isValid(0); // true
schema.isValid(2); // true
schema.isValid(-3); // true
schema.isValid(4.1); // true
Вам необходимо создать валидатор массивов, который будет возвращаться при вызове метода array()
. Этот экземпляр обладает методом isValid()
, который принимает данные на вход и возвращает значение true или false, в том случае, если на вход нам пришел массив. Валидатор array()
также должен иметь метод allIntegers()
, который проверяет, что все элементы массива являются целыми числами.
const v = new Validator();
const schema1 = v.array();
schema1.isValid([]); // true;
schema1.isValid([1,2]); // true;
schema1.isValid(12); // false;
schema1.isValid({}); // false;
const schema2 = v.array().allIntegers();
schema1.isValid([]); // true;
schema1.isValid([1,2]); // true;
schema1.isValid([12, 'b']); // false;
schema1.isValid({}); // false;
schema1.isValid([1.2, 1, 2]); // false;
schema1.isValid([122n, 0]); // true;
Расширьте функционал валидатора массивов array()
, добавив в него кастомную валидацию элементов массива. Это означает, что в экземпляр валидатора массивов можно добавить свой валидатор для каждого элемента массива с помощью метода custom()
. Переданный валидатор должен проверять каждый элемент массива на соответствие определенному условию.
const v = new Validator();
const schema1 = v.array().custom((element) => (element % 2) === 0);
schema1.isValid([1, 2]); // false;
schema1.isValid([2, 4, 8, 12]); // true;
schema1.isValid([1.2]); // false;
Вам необходимо создать валидатор полей объекта, используя методы, представленные в предыдущих задачах. Для этого необходимо создать метод object()
, который проверяет не сам объект, а данные внутри него на соответствием заданным валидаторам. Метод Validator.object()
должен содержать метод shape()
, позволяющий задать поля, подлежащие валидации, для объекта. Метод shape()
принимает объект, в котором ключи представляют поля, которые требуется проверить, а значения - экземпляры валидаторов.
const v = new Validator();
// Позволяет описывать валидацию для свойств объекта
const schema = v.object().shape({
num: v.number(), // теперь, при валидации объекта с ключом lesson, значение этого ключа пройдет валидацию в соответствии с текущими методами
array: v.array().allIntegers(),
});
schema.isValid({ num: 54, array: [1, 2, 3, 5, 65, 2]}); // true
schema.isValid({ num: 2, array: [1, 2, '4']}); // false
Вам дополнить валидатор полей объекта, добавив в него возможность валидировать вложенные объекты на любом уровне глубины.
const v = new Validator();
const schema = v.object().shape({
num: v.number(),
obj: {
array: v.array().allIntegers(),
innerObj: {
num: v.number(),
deepestObj: {
num: v.number()
}
}
}
});
schema.isValid({ num: 54, obj: { array: [1, 2], innerObj: { num: 2, deepestObj: { num: 5 }}} }); // true