import { AppRoute, AppRouter, AppRouteResponse } from './dsl';
import { ResolveResponseType, ServerInferResponses } from './infer-types';
import { HTTPStatusCode } from './status-codes';
import { CommonAndEqual, ZodInputOrType } from './type-utils';
export declare class TsRestResponseError<T extends AppRoute | AppRouter> extends Error {
    statusCode: HTTPStatusCode;
    body: any;
    constructor(route: T, response: T extends AppRouter ? ServerCommonResponses<T> : ServerInferResponses<T>);
}
type FlattenAppRouter<T extends AppRouter | AppRoute> = T extends AppRoute ? T : {
    [TKey in keyof T]: T[TKey] extends AppRoute ? T[TKey] : T[TKey] extends AppRouter ? FlattenAppRouter<T[TKey]> : never;
}[keyof T];
type AppRouterCommonResponses<T extends AppRouter> = CommonAndEqual<FlattenAppRouter<T>['responses']>;
type ServerCommonResponses<T extends AppRouter, TResponses = AppRouterCommonResponses<T>> = {
    [K in keyof TResponses]: {
        status: K;
        body: TResponses[K] extends AppRouteResponse ? ZodInputOrType<ResolveResponseType<TResponses[K]>> : never;
    };
}[keyof TResponses];
export {};
