Home Reference Source Test

src/Predicate-Combinator/index.js

/**
 * @desc Takes list of predicates and returns a one predicate, current
 * predicate will return true if at least one of passed predicates
 * returns true.
 * @param {...Function} predicates List of predicates.
 * @return {Function} Predicate function.
 */
export function or(...predicates) {
  return value => predicates.some(predicate => predicate(value));
};

/**
 * @desc Takes list of predicates and returns a one predicate, current
 * predicate will return true only in case if all passed predicates
 * return true.
 * @param {...Function} predicates List of predicates.
 * @return {Function} Predicate function.
 */
export function and(...predicates) {
  return value => predicates.every(predicate => predicate(value))
};

/**
 * @desc Takes list of predicates and returns a one predicate, current
 * predicate will return true only in case if all passed predicates
 * return false.
 * @param {...Function} predicates List of predicates.
 * @return {Function} Predicate function.
 */
export function not(...predicates) {
  return value => predicates.every(predicate => !predicate(value))
}

/**
 * @desc Takes list of predicates and returns a one predicate, current
 * predicate will return true only in the case if none of passed prdicates
 * returns true.
 * @param {...Function} predicates List of predicates.
 * @return {Function} Predicate function.
 */
export function notOr(...predicates) {
  return value => not(or(...predicates))(value);
}