@ts-rest/core
Version:
RPC-like experience over a regular REST API, with type safe server implementations 🪄
21 lines (20 loc) • 1.12 kB
TypeScript
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 {};