import type Ajv from 'ajv';
export type JSONSchemaType = 'null' | 'boolean' | 'object' | 'array' | 'number' | 'string' | 'integer';
export type JSONSchemaDefinition = JSONSchema | boolean;
export interface JSONSchema {
    $id?: string;
    $schema?: string;
    $ref?: string;
    $comment?: string;
    title?: string;
    description?: string;
    default?: unknown;
    examples?: unknown[];
    readOnly?: boolean;
    writeOnly?: boolean;
    deprecated?: boolean;
    type?: JSONSchemaType | JSONSchemaType[];
    enum?: unknown[];
    const?: unknown;
    multipleOf?: number;
    maximum?: number;
    exclusiveMaximum?: number;
    minimum?: number;
    exclusiveMinimum?: number;
    maxLength?: number;
    minLength?: number;
    pattern?: string;
    format?: string;
    items?: JSONSchemaDefinition | JSONSchemaDefinition[];
    additionalItems?: JSONSchemaDefinition;
    maxItems?: number;
    minItems?: number;
    uniqueItems?: boolean;
    contains?: JSONSchemaDefinition;
    minContains?: number;
    maxContains?: number;
    maxProperties?: number;
    minProperties?: number;
    required?: string[];
    properties?: Record<string, JSONSchemaDefinition>;
    patternProperties?: Record<string, JSONSchemaDefinition>;
    additionalProperties?: JSONSchemaDefinition;
    dependencies?: Record<string, JSONSchemaDefinition | string[]>;
    propertyNames?: JSONSchemaDefinition;
    if?: JSONSchemaDefinition;
    then?: JSONSchemaDefinition;
    else?: JSONSchemaDefinition;
    allOf?: JSONSchemaDefinition[];
    anyOf?: JSONSchemaDefinition[];
    oneOf?: JSONSchemaDefinition[];
    not?: JSONSchemaDefinition;
    dependentRequired?: Record<string, string[]>;
    dependentSchemas?: Record<string, JSONSchemaDefinition>;
    unevaluatedItems?: JSONSchemaDefinition;
    unevaluatedProperties?: JSONSchemaDefinition;
    prefixItems?: JSONSchemaDefinition[];
    contentEncoding?: string;
    contentMediaType?: string;
    contentSchema?: JSONSchemaDefinition;
    definitions?: Record<string, JSONSchemaDefinition>;
    $defs?: Record<string, JSONSchemaDefinition>;
    [key: string]: unknown;
}
export type SchemaConflict = {
    readonly path: ReadonlyArray<PropertyKey>;
    readonly message: string;
    readonly conflictingValues: readonly unknown[];
};
export type AllOfMergeResult = {
    readonly mergedSchema: JSONSchema;
    readonly conflicts: readonly SchemaConflict[];
};
export type NotViolation = {
    readonly path: ReadonlyArray<PropertyKey>;
    readonly message: string;
    readonly notSchema: JSONSchema;
};
export type SchemaContextOptions = {
    schema: JSONSchemaDefinition;
    definition: JSONSchemaDefinition;
    path: ReadonlyArray<PropertyKey>;
    parentPath: ReadonlyArray<PropertyKey>;
    propertyName: PropertyKey | undefined;
    required: boolean;
    ajv: Ajv | undefined;
};
