import { ParameterObject, SchemaObject } from 'openapi3-ts/oas30';
import type { z, ZodObject, ZodRawShape, ZodTypeAny } from 'zod';
declare type ExampleValue<T> = T extends Date ? string : T;
export interface ZodOpenAPIMetadata<T = any, E = ExampleValue<T>> extends SchemaObject {
    param?: Partial<ParameterObject> & {
        example?: E;
    };
    example?: E;
    examples?: E[];
    default?: T;
}
export interface ZodOpenAPIInternalMetadata {
    refId?: string;
    extendedFrom?: {
        refId: string;
        schema: ZodObject<ZodRawShape>;
    };
}
export interface ZodOpenApiFullMetadata<T = any> {
    _internal?: ZodOpenAPIInternalMetadata;
    metadata?: ZodOpenAPIMetadata<T>;
}
declare module 'zod' {
    interface ZodTypeDef {
        openapi?: ZodOpenApiFullMetadata;
    }
    interface ZodType<Output = any, Def extends ZodTypeDef = ZodTypeDef, Input = Output> {
        openapi<T extends ZodTypeAny>(this: T, metadata: Partial<ZodOpenAPIMetadata<z.infer<T>>>): T;
        /**
         * This method should NOT be used outside of @astesolution/zod-to-openapi code!
         * Any usage of it can lead to unexpected consequences when generating the
         * OpenApi schemas!
         *
         * @deprecated
         */
        internal_openapi<T extends ZodTypeAny>(this: T, metadata: Partial<ZodOpenAPIInternalMetadata>): T;
    }
}
export declare function extendZodWithOpenApi(zod: typeof z): void;
export {};
