import Ajv, { Options, ValidateFunction, ErrorObject } from "ajv";
import { DataValidationCxt } from "ajv/dist/types";
import { JSONSchema7 } from "./JSONSchema";
export declare type Violation = {
    path: string;
    message: string;
    context: {
        params: Record<string, unknown>;
        propertyName?: string;
        schema?: unknown;
        parentSchema?: unknown;
        data?: unknown;
    };
};
export interface CompiledValidateFunction<T = unknown> {
    (this: Ajv | unknown, data: unknown, dataCxt?: DataValidationCxt): data is T;
    errors?: null | ErrorObject[];
}
export declare const getAjv: (options?: Options) => Ajv;
export declare const getValidator: <T = unknown>(schema: JSONSchema7, ajv?: Ajv) => Promise<ValidateFunction<T>>;
export declare const getCompiledValidator: (schema: JSONSchema7, options?: Options) => Promise<string>;
/**
 * @param schema a valid JSON Schema. is ignored if validate function is passed
 * @param data
 * @param validate
 */
export declare const validate: <T = unknown>(schema: JSONSchema7 | CompiledValidateFunction<T>, data: T, validate?: ValidateFunction<T>) => Promise<Violation[]>;
