import type { ZodSchema, z } from 'zod';
import type { HttpStatusCode } from './HttpStatusCodes.js';
export type InferSchemaInput<T extends ZodSchema | undefined> = T extends ZodSchema ? z.input<T> : T extends undefined ? undefined : never;
export type InferSchemaOutput<T extends ZodSchema | undefined> = T extends ZodSchema ? z.infer<T> : T extends undefined ? undefined : never;
export type RoutePathResolver<PathParams> = (pathParams: PathParams) => string;
export interface CommonRouteDefinitionMetadata extends Record<string, unknown> {
}
export type CommonRouteDefinition<PathParams, ResponseBodySchema extends z.Schema | undefined = undefined, PathParamsSchema extends z.Schema<PathParams> | undefined = undefined, RequestQuerySchema extends z.Schema | undefined = undefined, RequestHeaderSchema extends z.Schema | undefined = undefined, IsNonJSONResponseExpected extends boolean = false, IsEmptyResponseExpected extends boolean = false> = {
    isNonJSONResponseExpected?: IsNonJSONResponseExpected;
    isEmptyResponseExpected?: IsEmptyResponseExpected;
    successResponseBodySchema: ResponseBodySchema;
    requestPathParamsSchema?: PathParamsSchema;
    requestQuerySchema?: RequestQuerySchema;
    requestHeaderSchema?: RequestHeaderSchema;
    pathResolver: RoutePathResolver<InferSchemaOutput<PathParamsSchema>>;
    responseSchemasByStatusCode?: Partial<Record<HttpStatusCode, z.Schema>>;
    metadata?: CommonRouteDefinitionMetadata;
    description?: string;
    summary?: string;
    tags?: readonly string[];
};
export type PayloadRouteDefinition<PathParams, RequestBodySchema extends z.Schema | undefined = undefined, SuccessResponseBodySchema extends z.Schema | undefined = undefined, PathParamsSchema extends z.Schema<PathParams> | undefined = undefined, RequestQuerySchema extends z.Schema | undefined = undefined, RequestHeaderSchema extends z.Schema | undefined = undefined, IsNonJSONResponseExpected extends boolean = false, IsEmptyResponseExpected extends boolean = false> = CommonRouteDefinition<PathParams, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected> & {
    method: 'post' | 'put' | 'patch';
    requestBodySchema: RequestBodySchema;
};
export type GetRouteDefinition<PathParams, SuccessResponseBodySchema extends z.Schema | undefined = undefined, PathParamsSchema extends z.Schema<PathParams> | undefined = undefined, RequestQuerySchema extends z.Schema | undefined = undefined, RequestHeaderSchema extends z.Schema | undefined = undefined, IsNonJSONResponseExpected extends boolean = false, IsEmptyResponseExpected extends boolean = false> = CommonRouteDefinition<PathParams, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected> & {
    method: 'get';
};
export type DeleteRouteDefinition<PathParams, SuccessResponseBodySchema extends z.Schema | undefined = undefined, PathParamsSchema extends z.Schema<PathParams> | undefined = undefined, RequestQuerySchema extends z.Schema | undefined = undefined, RequestHeaderSchema extends z.Schema | undefined = undefined, IsNonJSONResponseExpected extends boolean = false, IsEmptyResponseExpected extends boolean = true> = CommonRouteDefinition<PathParams, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected> & {
    method: 'delete';
};
export declare function buildPayloadRoute<RequestBodySchema extends z.Schema | undefined = undefined, SuccessResponseBodySchema extends z.Schema | undefined = undefined, PathParamsSchema extends z.Schema | undefined = undefined, RequestQuerySchema extends z.Schema | undefined = undefined, RequestHeaderSchema extends z.Schema | undefined = undefined, IsNonJSONResponseExpected extends boolean = false, IsEmptyResponseExpected extends boolean = false, PathParams = PathParamsSchema extends z.Schema<infer T> ? T : never>(params: PayloadRouteDefinition<PathParams, RequestBodySchema, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected>): PayloadRouteDefinition<PathParams, RequestBodySchema, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected>;
export declare function buildGetRoute<SuccessResponseBodySchema extends z.Schema | undefined = undefined, PathParamsSchema extends z.Schema | undefined = undefined, RequestQuerySchema extends z.Schema | undefined = undefined, RequestHeaderSchema extends z.Schema | undefined = undefined, IsNonJSONResponseExpected extends boolean = false, IsEmptyResponseExpected extends boolean = false, PathParams = PathParamsSchema extends z.Schema<infer T> ? T : never>(params: Omit<GetRouteDefinition<PathParams, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected>, 'method'>): GetRouteDefinition<PathParams, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected>;
export declare function buildDeleteRoute<SuccessResponseBodySchema extends z.Schema | undefined = undefined, PathParamsSchema extends z.Schema | undefined = undefined, RequestQuerySchema extends z.Schema | undefined = undefined, RequestHeaderSchema extends z.Schema | undefined = undefined, IsNonJSONResponseExpected extends boolean = false, IsEmptyResponseExpected extends boolean = true, PathParams = PathParamsSchema extends z.Schema<infer T> ? T : never>(params: Omit<DeleteRouteDefinition<PathParams, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected>, 'method'>): DeleteRouteDefinition<PathParams, SuccessResponseBodySchema, PathParamsSchema, RequestQuerySchema, RequestHeaderSchema, IsNonJSONResponseExpected, IsEmptyResponseExpected>;
/**
 * This method maps given route definition to a string of the format '/static-path-part/:path-param-value'
 */
export declare function mapRouteToPath(routeDefinition: CommonRouteDefinition<any, any, any, any, any, any, any>): string;
