/**
 * Validation schemas for OpenAPI documents and overlays
 * Using Zod for runtime validation with actionable error messages
 */
import { z } from "zod";
/**
 * Schema for remove condition - used for conditional removal of elements
 */
declare const RemoveConditionSchema: z.ZodEffects<z.ZodObject<{
    empty: z.ZodOptional<z.ZodBoolean>;
    missing: z.ZodOptional<z.ZodString>;
}, "strict", z.ZodTypeAny, {
    empty?: boolean | undefined;
    missing?: string | undefined;
}, {
    empty?: boolean | undefined;
    missing?: string | undefined;
}>, {
    empty?: boolean | undefined;
    missing?: string | undefined;
}, {
    empty?: boolean | undefined;
    missing?: string | undefined;
}>;
/**
 * Schema for overlay action - defines a single modification to apply
 */
declare const OverlayActionSchema: z.ZodEffects<z.ZodObject<{
    target: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    update: z.ZodOptional<z.ZodUnknown>;
    remove: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodEffects<z.ZodObject<{
        empty: z.ZodOptional<z.ZodBoolean>;
        missing: z.ZodOptional<z.ZodString>;
    }, "strict", z.ZodTypeAny, {
        empty?: boolean | undefined;
        missing?: string | undefined;
    }, {
        empty?: boolean | undefined;
        missing?: string | undefined;
    }>, {
        empty?: boolean | undefined;
        missing?: string | undefined;
    }, {
        empty?: boolean | undefined;
        missing?: string | undefined;
    }>]>>;
}, "strict", z.ZodTypeAny, {
    target: string;
    description?: string | undefined;
    update?: unknown;
    remove?: boolean | {
        empty?: boolean | undefined;
        missing?: string | undefined;
    } | undefined;
}, {
    target: string;
    description?: string | undefined;
    update?: unknown;
    remove?: boolean | {
        empty?: boolean | undefined;
        missing?: string | undefined;
    } | undefined;
}>, {
    target: string;
    description?: string | undefined;
    update?: unknown;
    remove?: boolean | {
        empty?: boolean | undefined;
        missing?: string | undefined;
    } | undefined;
}, {
    target: string;
    description?: string | undefined;
    update?: unknown;
    remove?: boolean | {
        empty?: boolean | undefined;
        missing?: string | undefined;
    } | undefined;
}>;
/**
 * Schema for OpenAPI Overlay document
 * Based on: https://github.com/OAI/Overlay-Specification v1.0.0
 */
export declare const OverlayDocumentSchema: z.ZodObject<{
    overlay: z.ZodEffects<z.ZodString, string, string>;
    info: z.ZodObject<{
        title: z.ZodString;
        version: z.ZodString;
    }, "strict", z.ZodTypeAny, {
        title: string;
        version: string;
    }, {
        title: string;
        version: string;
    }>;
    actions: z.ZodArray<z.ZodEffects<z.ZodObject<{
        target: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        update: z.ZodOptional<z.ZodUnknown>;
        remove: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodEffects<z.ZodObject<{
            empty: z.ZodOptional<z.ZodBoolean>;
            missing: z.ZodOptional<z.ZodString>;
        }, "strict", z.ZodTypeAny, {
            empty?: boolean | undefined;
            missing?: string | undefined;
        }, {
            empty?: boolean | undefined;
            missing?: string | undefined;
        }>, {
            empty?: boolean | undefined;
            missing?: string | undefined;
        }, {
            empty?: boolean | undefined;
            missing?: string | undefined;
        }>]>>;
    }, "strict", z.ZodTypeAny, {
        target: string;
        description?: string | undefined;
        update?: unknown;
        remove?: boolean | {
            empty?: boolean | undefined;
            missing?: string | undefined;
        } | undefined;
    }, {
        target: string;
        description?: string | undefined;
        update?: unknown;
        remove?: boolean | {
            empty?: boolean | undefined;
            missing?: string | undefined;
        } | undefined;
    }>, {
        target: string;
        description?: string | undefined;
        update?: unknown;
        remove?: boolean | {
            empty?: boolean | undefined;
            missing?: string | undefined;
        } | undefined;
    }, {
        target: string;
        description?: string | undefined;
        update?: unknown;
        remove?: boolean | {
            empty?: boolean | undefined;
            missing?: string | undefined;
        } | undefined;
    }>, "many">;
    extends: z.ZodOptional<z.ZodString>;
}, "strict", z.ZodTypeAny, {
    info: {
        title: string;
        version: string;
    };
    overlay: string;
    actions: {
        target: string;
        description?: string | undefined;
        update?: unknown;
        remove?: boolean | {
            empty?: boolean | undefined;
            missing?: string | undefined;
        } | undefined;
    }[];
    extends?: string | undefined;
}, {
    info: {
        title: string;
        version: string;
    };
    overlay: string;
    actions: {
        target: string;
        description?: string | undefined;
        update?: unknown;
        remove?: boolean | {
            empty?: boolean | undefined;
            missing?: string | undefined;
        } | undefined;
    }[];
    extends?: string | undefined;
}>;
/**
 * Schema for OpenAPI document structure
 * This is intentionally lenient to work with imperfect/incomplete OpenAPI files.
 * The overlay tool is often used to fix incomplete specs, so we shouldn't be too strict.
 */
export declare const OpenApiDocumentSchema: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>;
/**
 * Type exports matching Zod schemas
 */
export type OverlayDocument = z.infer<typeof OverlayDocumentSchema>;
export type OverlayAction = z.infer<typeof OverlayActionSchema>;
export type RemoveCondition = z.infer<typeof RemoveConditionSchema>;
export type OpenApiDocument = z.infer<typeof OpenApiDocumentSchema>;
/**
 * Validate an OpenAPI Overlay document
 * @throws {Error} with actionable error message if validation fails
 */
export declare function validateOverlayDocument(value: unknown): OverlayDocument;
/**
 * Validate an OpenAPI document
 * This validation is intentionally lenient - we only check that it's a valid object.
 * The overlay tool should work with imperfect OpenAPI files.
 * @throws {Error} if the document is not a valid object
 */
export declare function validateOpenApiDocument(value: unknown): OpenApiDocument;
export {};
//# sourceMappingURL=validation.d.ts.map