import { type AnySchema } from 'joi';
import type { AbstractMixable, Rules } from '../Contracts';
import type AvonRequest from '../Http/Requests/AvonRequest';
import type Resource from '../Resource';
declare const _default: <T extends AbstractMixable = AbstractMixable>(Parent: T) => (abstract new (...args: import("../Contracts").Args) => {
    /**
     * Validate a resource creation request.
     *
     * @throws ValidationException
     */
    validateForCreation(request: AvonRequest): Promise<void>;
    /**
     * Create a validator instance for a resource creation request.
     */
    validatorForCreation(request: AvonRequest): AnySchema;
    /**
     * Get the validation rules for a resource creation request.
     */
    rulesForCreation(request: AvonRequest): AnySchema[];
    /**
     * Validate a resource update request.
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    validateForUpdate(request: AvonRequest, resource?: Resource): Promise<void>;
    /**
     * Create a validator instance for a resource update request.
     */
    validatorForUpdate(request: AvonRequest, resource?: Resource): AnySchema;
    /**
     * Get the validation rules for a resource update request.
     */
    rulesForUpdate(request: AvonRequest, resource?: Resource): AnySchema[];
    /**
     * Prepare given rules for validator.
     */
    prepareRulesForValidator(rules: Rules[]): AnySchema[];
    /**
     * Perform any final formatting of the given validation rules.
     */
    formatRules(request: AvonRequest, rules: AnySchema[]): AnySchema[];
    /**
     * Prepare given rules for validator.
     */
    dataForValidation(request: AvonRequest): import("../Contracts").AnyRecord;
    /**
     * Handle any post-validation processing.
     */
    afterValidation(request: AvonRequest, validator: unknown): void;
    /**
     * Handle any post-creation validation processing.
     */
    afterCreationValidation(request: AvonRequest, validator: unknown): void;
    /**
     * Handle any post-update validation processing.
     */
    afterUpdateValidation(request: AvonRequest, validator: unknown): void;
}) & T;
export default _default;
