@benpsnyder/analogjs-esm-trpc
Version:
Angular/Nitro-based tRPC integration
73 lines (67 loc) • 4.33 kB
TypeScript
import * as _angular_core from '@angular/core';
import { InjectionToken, Provider } from '@angular/core';
import * as _benpsnyder_analogjs_esm_trpc from '@benpsnyder/analogjs-esm-trpc';
import { TRPCLink, CreateTRPCClientOptions as CreateTRPCClientOptions$1, HttpBatchLinkOptions, HTTPHeaders } from '@trpc/client';
import { AnyRouter, DefaultDataTransformer, DataTransformerOptions, CombinedDataTransformer, ClientDataTransformerOptions, ProcedureRouterRecord, AnyProcedure, AnyQueryProcedure, ProcedureArgs, AnyMutationProcedure, IntersectionError } from '@trpc/server';
import { inferTransformedProcedureOutput } from '@trpc/server/shared';
import { Observable } from 'rxjs';
type CreateTRPCClientOptions<TRouter extends AnyRouter> = CreateTRPCClientBaseOptions<TRouter> & {
links: TRPCLink<TRouter>[];
};
type CreateTRPCClientBaseOptions<TRouter extends AnyRouter> = TRouter['_def']['_config']['transformer'] extends DefaultDataTransformer ? {
/**
* Data transformer
*
* You must use the same transformer on the backend and frontend
* @link https://trpc.io/docs/data-transformers
**/
transformer?: 'You must set a transformer on the backend router';
} : TRouter['_def']['_config']['transformer'] extends DataTransformerOptions ? {
/**
* Data transformer
*
* You must use the same transformer on the backend and frontend
* @link https://trpc.io/docs/data-transformers
**/
transformer: TRouter['_def']['_config']['transformer'] extends CombinedDataTransformer ? DataTransformerOptions : TRouter['_def']['_config']['transformer'];
} : {
/**
* Data transformer
*
* You must use the same transformer on the backend and frontend
* @link https://trpc.io/docs/data-transformers
**/
transformer?: /** @deprecated **/ ClientDataTransformerOptions | CombinedDataTransformer;
};
type Resolver<TProcedure extends AnyProcedure> = (...args: ProcedureArgs<TProcedure['_def']>) => Observable<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';
type CreateTrpcProxyClient<TRouter extends AnyRouter> = DecoratedProcedureRecord<TRouter['_def']['record'], TRouter> extends infer TProcedureRecord ? UntypedClientProperties & keyof TProcedureRecord extends never ? TProcedureRecord : IntersectionError<UntypedClientProperties & keyof TProcedureRecord> : never;
declare function createTRPCRxJSProxyClient<TRouter extends AnyRouter>(opts: CreateTRPCClientOptions<TRouter>): CreateTrpcProxyClient<TRouter>;
type TrpcOptions<T extends AnyRouter> = {
url: string;
options?: Partial<CreateTRPCClientOptions$1<T>>;
batchLinkOptions?: Omit<HttpBatchLinkOptions, 'url' | 'headers'>;
};
type TrpcClient<AppRouter extends AnyRouter> = ReturnType<typeof createTRPCRxJSProxyClient<AppRouter>>;
declare const createTrpcClient: <AppRouter extends AnyRouter>({ url, options, batchLinkOptions, }: TrpcOptions<AppRouter>) => {
TrpcClient: InjectionToken<_benpsnyder_analogjs_esm_trpc.CreateTrpcProxyClient<AppRouter>>;
provideTrpcClient: () => Provider[];
TrpcHeaders: _angular_core.WritableSignal<HTTPHeaders>;
/** @deprecated use TrpcClient instead */
tRPCClient: InjectionToken<_benpsnyder_analogjs_esm_trpc.CreateTrpcProxyClient<AppRouter>>;
/** @deprecated use provideTrpcClient instead */
provideTRPCClient: () => Provider[];
/** @deprecated use TrpcHeaders instead */
tRPCHeaders: _angular_core.WritableSignal<HTTPHeaders>;
};
declare function waitFor<T>(prom: Promise<T> | Observable<T>): Promise<T>;
export { createTrpcClient, waitFor };
export type { CreateTrpcProxyClient, TrpcClient, TrpcOptions };