Skip to content
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.

gromver/rx-form

Repository files navigation

rx-form

Библиотека для создания валидируемых моделей и форм на базе json схем.

Установка

npm install rx-form --save

Обзор

Rx-form позоляет описывать модели данных любой сложности и вложенности. Используя модель можно фильтровать и валидировать данные, приходящие в бэкенд, а также создавать формы и с их помощью строить пользовательские интерфейсы на стороне клиента.

Применение

Обработка и проверка данных при регистрации пользователя

import { Model, types, validators } from 'rx-form';

const model = Model.object({
  username: types.string({
    filter: (value) => value.trim(),
    validator: [
      validators.presence(),
      validators.string({
        minLength: 3,
      }),
    ],
  }),
  email: types.string({
    filter: [
      (value) => value.trim(),
      (value) => value.toLowerCase(),
    ],
    validator: [
      validators.presence(),
      validators.email(),
    ],
  }),
  password: types.string({
    validator: [
      validators.presence(),
      validators.string({
        pattern: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$/,
      }),
    ],
  }),
});

// valid case
model.set({
  username: ' John  ',
  email: 'JOHN@SomeMail.com',
  password: '11aaAA',
  unknownProperty: 'abc',
});
model.validate().then(() => {
  console.log('OK!');
  console.log(model.get());
});
// OK!
// { 
//   username: 'John',
//   email: 'john@somemail.com',
//   password: '11aaAA'
// }


// invalid case
model.set({
  username: ' John  ',
  email: 'invalid email',
  password: '11aaAA',
});
model.validate().catch(() => {
  console.log('ERROR!');
  console.log(model.getFirstError().toString());
})
// ERROR!
// email - is not a valid email

License

rx-form is released under the MIT license. See the LICENSE file for license text and copyright information.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages