UNPKG

@ts-rest/core

Version:

RPC-like experience over a regular REST API, with type safe server implementations 🪄

21 lines (20 loc) • 1.12 kB
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 {};