trpc-remix-call
Version:
Trpc adapter for Remix with api handler and server side call.
32 lines (29 loc) • 1.71 kB
text/typescript
import { LoaderFunctionArgs, ActionFunctionArgs } from '@remix-run/node';
import { AnyRouter, TRPCError } from '@trpc/server';
type CreateRemixCallerParams<Ctx, CallerResponse> = {
caller: (ctx: Ctx) => CallerResponse;
adapter: (request: Request) => Promise<Ctx>;
onContextReady?: (ctx: Ctx) => Promise<void>;
};
declare const createRemixCaller: <Ctx, CallerResponse>({ caller, adapter, onContextReady, }: CreateRemixCallerParams<Ctx, CallerResponse>) => RemixCaller<CallerResponse>;
type RemixCaller<CallerResponse> = (request: Request) => Promise<CallerResponse>;
type CreateSafeRemixCallerParams<Ctx, CallerResponse, Err> = CreateRemixCallerParams<Ctx, CallerResponse> & {
formatError: (error: TRPCError) => Promise<Err>;
};
declare const createSafeRemixCaller: <Ctx, CallerResponse, Err>({ caller, adapter, onContextReady, formatError, }: CreateSafeRemixCallerParams<Ctx, CallerResponse, Err>) => <Res>(request: Request, callBack: (caller: CallerResponse) => Promise<Res>) => Promise<{
readonly success: true;
readonly data: Awaited<Res>;
readonly error: null;
} | {
readonly success: false;
readonly error: Awaited<Err>;
readonly data: null;
}>;
type CreateRemixHandlerParams<Router extends AnyRouter, Ctx> = {
router: Router;
adapter: (request: Request) => Promise<Ctx>;
onContextReady?: (ctx: Ctx) => Promise<void>;
endpoint: string;
};
declare const createTrpcRemixHandler: <Router extends AnyRouter, Ctx>({ router, adapter, onContextReady, endpoint, }: CreateRemixHandlerParams<Router, Ctx>) => (args: LoaderFunctionArgs | ActionFunctionArgs) => Promise<Response>;
export { createRemixCaller, createSafeRemixCaller, createTrpcRemixHandler };