You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

27 lines
701 B

import {Predicate, validatorSymbol} from '../predicates/predicate';
/**
* Operator which inverts the following validation.
*
* @hidden
* @param predictate Predicate to wrap inside the operator.
*/
export const not = <T, P extends Predicate<T>>(predicate: P) => {
const originalAddValidator = predicate.addValidator;
predicate.addValidator = validator => {
const fn = validator.validator;
const message = validator.message;
validator.message = (x: T, label: string) => `[NOT] ${message(x, label)}`;
validator.validator = (x: T) => !fn(x);
predicate[validatorSymbol].push(validator);
predicate.addValidator = originalAddValidator;
return predicate;
};
return predicate;
};