1.0.0 • Published 5 years ago

berish-validation v1.0.0

Weekly downloads
3
License
Apache License 2....
Repository
gitlab
Last release
5 years ago

berish-validation· Apache license Coverage Status

Сложная динамическая валидация любых типов объектов (поддержка классов и полей). Полная поддержка typescript.

Установка

yarn add berish-validation или npm install berish-validation --save

API

FilterModel

Первичная форма создания фильтра для валидации

import * as validation from 'berish-validation';

new validation.FilterModel(
	condition: validation.ConditionType<validation.IConditionObject>,
	errorCode?: number): validation.FilterModel<validation.IConditionObject>

Пример создания для фильтра валидации isRequired

const isRequiredFunc = async ({ value, obj, key, ...args }) => !!value;
const isRequiredCode = 1;
const isRequiredFilter = new FilterModel(isRequiredFunc, isRequiredCode);

// isRequiredFilter.condition !== isRequiredFilter.condition (ре-генерация условия каждый раз)

Возможное взаимодействие

  • clone - Клонирование фильтра, для последующего использования
(method) FilterModel<T>.clone<CConditionObject>(
	newCondition?:  ConditionType<CConditionObject>,
	newErrorCode?:  number): FilterModel<CConditionObject>

const clone = isRequiredFilter.clone();
// clone.id !== isRequiredFilter.id;
  • reverse - Полностью противоположный фильтр по проходящему условию
(property) FilterModel<T>.reverse: FilterModel<T>

const reverse1 = isRequiredFilter.reverse;
const reverse2 = isRequiredFilter.reverse;
// reverse1 === reverse2;
// reverse1 !== isRequiredFilter.reverse.reverse;
// reverse1.id !== isRequiredFilter.id

const result1 = await isRequiredFilter.condition({value: '123'});
console.log(result1); //true
const result2 = await isRequiredFilter.reverse.condition({value: '123'});
console.log(result2); // false
  • register и unregister - методы принудительной регистрации фильтра в контроллере валидатора (по-умолчанию при инициализации происходит register())
isRequiredFilter.register();
isRequiredFilter.unregister();
  • id - уникальный идентификатор каждого фильтра, Благодаря id контроллер валидатора понимает, какой конкретно фильтр нужно проверить для нужного объекта или поля объекта
  • conditionObject - Специальный объект, через который передаются все аргументы внутрь фильтра через применение данного фильтра при фактическом выполнении
console.log(isRequiredFilter.conditionObject); // {}
console.log(isRequiredFilter.use('username', 'admin').conditionObject); // { username: 'admin' }
  • use - Заполняет, описанный выше объект. Метод нужно вызывать, когда Вы хотите передавать аргументы внутрь фильтра. Аргументы передаются внутрь условия condition
const accessForUserErrorCode = 2;
const accessForUser = async ({ value, obj, key, username }) => {
  const currentUser = await getCurrentUser();
  return username === currentUser.name;
};

const accessForUserFilter = new FilterModel(accessForUser, accessForUserErrorCode);

// Пример 1

@(accessForUserFilter.use('username', 'admin').decoratorClass)
class Controller {}

// Пример 2

const accessForUserClass = (username: string) => accessForUserFilter.use('username', username).decoratorClass;

@accessForUserClass('admin')
class Controller {}

// Пример 3

const accessForUserProperty = username => accessForUserFilter.use('username', username).decoratorProperty;

class Profile {
  @accessForUserProperty('admin')
  get firstname() {
    return this._firstname;
  }
}