Ваша задача написать валидатор, в котором есть ряд методов и свойств и экспортировать его из файла src/index.js. Валидатор позволяет проверять аргументы на соответствие необходимым условиям, которые были заданы с помощью методов валидатора.
Пример использования:
// создаем экземпляр валидатора
const v = new Validator();
// определяем метод для валидации строк и связываем его с валидатором, обращаясь к нему через переменную.
const schema = v.string();
// проверяем данные на соответствие строковому типу, с помощью метода isValid()
schema.isValid('Hexlet'); // true
schema.isValid(''); // true
schema.isValid(null); // false
schema.isValid(123); // false
Вы можете самостоятельно протестировать работу валидатора. В каталоге src разрешено использовать любые файлы и создавать новые, если это делает вашу разработку более удобной.
Для тестирования валидатора, достаточно создать экземпляр валидатора, настроить валидацию с помощью методов и вызвать метод validate()
с необходимым аргументом, после чего написать в терминале:
node src/index.js
Вам необходимо создать валидатор, который способен принимать аргумент и проводить его проверку на соответствие определенным условиям. В данной задаче мы ограничиваемся валидацией строк. Для этого в вашем валидаторе должен быть метод string()
, который создает экземпляр валидатора чисел. Этот экземпляр обладает методом isValid()
, который принимает данные на вход и возвращает значение true или false в зависимости от того, являются ли входные данные строкой.
const v = new Validator();
const schema = v.string();
schema.isValid(null); // false
schema.isValid(''); // true
schema.isValid(true); // false
schema.isValid('123'); // true
schema.isValid(0); // false
Вам необходимо расширить функциональность валидатора строк, добавив метод hasSpaces()
. Этот метод возвращает значение true, в том случае, если на вход нам пришла строка, которая содержит хотя бы один пробел. Иначе возвращается false.
const v = new Validator();
const schema = v.string().hasSpaces();
schema1.isValid([]); // false;
schema1.isValid(' '); // true;
schema1.isValid('Hexlet'); // false;
Вам необходимо добавить валидатор функций, с помощью метода function()
. Этот валидатор с помощью метода isValid()
проверяет входящие данные на соответствие тому, что они являются функцией. Также в данный валидатор нужно добавить метод callWith()
, который позволит вызывать функцию в переданном контексте. И метод expect()
, который позволяет проверить, что наша функция вернула нам заданное значение.
const v = new Validator();
const schema1 = v.function();
schema1.isValid(()=>{}); // true;
schema1.isValid({}); // false;
schema1.isValid(console.log); // true;
const schema2 = v.function().expect('1');
schema1.isValid(()=>'1'); // true;
schema1.isValid(()=>1); // false;
schema1.isValid(1); // false;
const schema3 = v.function().callWith({prop: 1}).expect('1');
schema1.isValid(() => '1'); // true;
schema1.isValid(() => 1); // false;
schema1.isValid(function () { return this.prop }); // true;
Вам необходимо расширить экземпляр валидатора функций, с помощью метода arguments()
, который принимает неограниченное количество аргументов, с которыми вызывает функцию.
const v = new Validator();
const schema = v.function().arguments([1, 2, 3, 4, 5, 6, 7]).expect(1);
schema.isValid((args) => Math.min(...args)); // true;
schema.isValid(() => 1); // true;
schema.isValid(function () { return this.prop }); // false;
const v = new Validator();
const schema = v.function().arguments([1, 2, 3, 4, 5, 6, 7]).expect(true).callWith({prop: 2});
schema.isValid(function (args) { return args[1] === this.prop }); // true;
schema.isValid(function (args) { return args[2] === this.prop }); // false;
Вам необходимо создать валидатор полей объекта, используя методы, представленные в предыдущих задачах. Для этого необходимо создать метод object()
, который проверяет не сам объект, а данные внутри него на соответствием заданным валидаторам. Метод Validator.object()
должен содержать метод shape()
, позволяющий задать поля, подлежащие валидации, для объекта. Метод shape()
принимает объект, в котором ключи представляют поля, которые требуется проверить, а значения - экземпляры валидаторов. Валидация должна работать с объектами любой вложенности.
const v = new Validator();
const schema = v.object().shape({
string: v.string(),
obj: {
func: v.function(),
innerObj: {
string: v.string().hasSpaces(),
deepestObj: {
func: v.function().arguments('hello').expect('hell'),
}
}
}
});
schema.isValid({
string: '54',
obj: {
func: ()=>{},
innerObj: { string: 'he he he',
deepestObj: {
func: (arg) => arg.slice(0, arg.length-1).join('')
}
}
}
}); // true