@analogjs/trpc
Version:
Angular/Nitro-based tRPC integration
18 lines (17 loc) • 1.69 kB
TypeScript
import type { AnyMutationProcedure, AnyProcedure, AnyQueryProcedure, AnyRouter, IntersectionError, ProcedureArgs, ProcedureRouterRecord } from '@trpc/server';
import { inferTransformedProcedureOutput } from '@trpc/server/shared';
import { Observable as RxJSObservable } from 'rxjs';
import { CreateTRPCClientOptions } from './shared-internal';
type Resolver<TProcedure extends AnyProcedure> = (...args: ProcedureArgs<TProcedure['_def']>) => RxJSObservable<inferTransformedProcedureOutput<TProcedure>>;
type DecorateProcedure<TProcedure extends AnyProcedure, TRouter extends AnyRouter> = TProcedure extends AnyQueryProcedure ? {
query: Resolver<TProcedure>;
} : TProcedure extends AnyMutationProcedure ? {
mutate: Resolver<TProcedure>;
} : never;
type DecoratedProcedureRecord<TProcedures extends ProcedureRouterRecord, TRouter extends AnyRouter> = {
[TKey in keyof TProcedures]: TProcedures[TKey] extends AnyRouter ? DecoratedProcedureRecord<TProcedures[TKey]['_def']['record'], TProcedures[TKey]> : TProcedures[TKey] extends AnyProcedure ? DecorateProcedure<TProcedures[TKey], TRouter> : never;
};
type UntypedClientProperties = 'links' | 'runtime' | 'requestId' | '$request' | 'query' | 'mutation';
export type CreateTrpcProxyClient<TRouter extends AnyRouter> = DecoratedProcedureRecord<TRouter['_def']['record'], TRouter> extends infer TProcedureRecord ? UntypedClientProperties & keyof TProcedureRecord extends never ? TProcedureRecord : IntersectionError<UntypedClientProperties & keyof TProcedureRecord> : never;
export declare function createTRPCRxJSProxyClient<TRouter extends AnyRouter>(opts: CreateTRPCClientOptions<TRouter>): CreateTrpcProxyClient<TRouter>;
export {};