import type Ajv from 'ajv';
import type { JSONSchema, SchemaConflict, NotViolation } from './schema-types';
/**
 * Check if a JSON schema uses any conditional features that require
 * re-evaluating the effective schema when the value changes.
 *
 * These features include:
 * - `if`/`then`/`else` (conditional subschemas)
 * - `dependentRequired` (2020-12)
 * - `dependentSchemas` (2019-09/2020-12)
 * - `dependencies` (draft-07)
 */
export declare function hasConditionalFeatures(schema: JSONSchema | null | undefined): boolean;
/**
 * Evaluate `not` subschema against the current value using AJV.
 * Returns a NotViolation if the value matches the disallowed schema.
 */
export declare function evaluateNotViolation(notSchema: JSONSchema, value: unknown, ajv: Ajv | undefined, basePath?: ReadonlyArray<PropertyKey>): NotViolation | null;
/**
 * Evaluate if/then/else and dependencies overlays for an object schema without
 * mutating the base definition. Returns a new effective schema plus any merge
 * conflicts discovered while composing overlays.
 */
export declare function composeEffectiveObjectSchema(baseDef: JSONSchema, value: unknown, ajv: Ajv | undefined, basePath?: ReadonlyArray<PropertyKey>): {
    effective: JSONSchema;
    conflicts: readonly SchemaConflict[];
};
/**
 * Returns the overlay schema coming from if/then/else for the given value or
 * null if no overlay applies or no AJV instance is available.
 */
export declare function evaluateIfThenElseOverlay(def: JSONSchema, value: unknown, ajv: Ajv | undefined): JSONSchema | null;
/**
 * Tracks which properties have been evaluated by various JSON Schema keywords.
 * This is used to implement unevaluatedProperties semantics for 2019-09/2020-12.
 */
export declare function getEvaluatedProperties(schema: JSONSchema, value: Record<string, unknown> | undefined, ajv: Ajv | undefined): Set<string>;
