Giter VIP home page Giter VIP logo

l6-validator-test-v1's Introduction

Правила и регламент

Задание

Ваша задача написать валидатор, в котором есть ряд методов и свойств и экспортировать его из файла 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

1 задача

Вам необходимо создать валидатор, который способен принимать аргумент и проводить его проверку на соответствие определенным условиям. В данной задаче мы ограничиваемся валидацией чисел. Для этого в вашем валидаторе должен быть метод 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

2 задача

Вам необходимо создать валидатор массивов, который будет возвращаться при вызове метода 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;

3 задача

Расширьте функционал валидатора массивов 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;

4 задача

Вам необходимо создать валидатор полей объекта, используя методы, представленные в предыдущих задачах. Для этого необходимо создать метод 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

5 задача

Вам дополнить валидатор полей объекта, добавив в него возможность валидировать вложенные объекты на любом уровне глубины.

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

l6-validator-test-v1's People

Contributors

sseezov avatar lorety-vl avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.