type CSchema = (yup: typeof import("yup")) => import("yup").AnyObjectSchema;

declare module "frexp/lib/Validation" {
  /**
   * Validates a given request body using the provided Yup schema.
   *
   * @param payload - The request body data to be validated.
   * @param schema - A function that defines the Yup schema.
   * @returns A function that accepts a schema and optional validation options, returning a Promise of validated data.
   *
   * @example
   * ```typescript
   * import Validation from "frexp/lib/Validation";
   *
   * const validator = new Validation((yup) => yup.object({
   *   name: yup.string().required(),
   *   age: yup.number().min(18).required(),
   * }), req.body)
   *
   * if (await validator.fails()){
   *  return res.status(400).json(validator.errors())
   * }
   *
   * console.log(validator.validated, 'validated data')
   * ```
   */
  export default class Validation<T extends import("yup").AnyObjectSchema> {
    /**
     * Holds the validated data after a successful validation.
     */
    public validated: import("yup").InferType<T>;
    constructor(
      schema?: (y: typeof import("yup")) => T,
      payload?: Record<string, any>
    );
    public fails(opt?: import("yup").ValidateOptions): Promise<boolean>;
    public throwError(opt?: import("yup").ValidateOptions): Promise<boolean>;

    public errors(): Array<{
      path?: string;
      type?: string;
      label?: string;
    }> | null;

    public static body(
      payload: Record<string, any>
    ): <T extends import("yup").AnyObjectSchema>(
      schema: (y: typeof import("yup")) => T,
      opt?: import("yup").ValidateOptions
    ) => Promise<import("yup").InferType<T>>;
  }
}
