All files / validator/src valueValidator.ts

100% Statements 7/7
100% Branches 1/1
100% Functions 3/3
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36  6x                               20x 6x       20x 29x 8x     21x                
import { Predicate } from "@benneq/predicate";
import { ValueOrProvider, valueOrProviderResult } from "@benneq/object";
import { ValidationContext, Validator } from "./_types";
 
/**
 *
 * @example
 * ```ts
 * const isStringValidator = validate(valueValidator(isString, "err"));
 * const result = isStringValidator(42);
 * console.log(result); // [{ path: "$", message: "err", value: 42 }]
 * ```
 *
 * @param isValid
 * @param message
 * @returns
 */
export const valueValidator =
  <T, R = T, P = unknown>(
    isValid: Predicate<[T, ValidationContext<R, P>]>,
    message: ValueOrProvider<string, [T, ValidationContext<R, P>]>
  ): Validator<T, R, P> =>
  (value, context) => {
    if (isValid(value, context)) {
      return [];
    }
 
    return [
      {
        path: context.path,
        value,
        message: valueOrProviderResult(message, value, context),
      },
    ];
  };