Ports the type-safety/ergonomics half of the upstream cycle-break: core-trpc no longer imports AppRouter from @repo/core-api (an illegal core -> core-composition boundary edge). The runtime context and both providers are now AnyTRPCRouter-generic; consumers inject their router type via useTRPC<TRouter>(). The clean-slate tree is already cycle-free (no kept feature consumes core-trpc), so this is purely the architecture/boundary improvement. The per-feature app-slice types the upstream commit added for the demo features are intentionally skipped: no kept feature consumes useTRPC yet. Also covers the router-agnostic useTRPC delegation: the refactor turned useTRPC into a wrapper function whose body was unexercised, dropping client.ts below the coverage floor — client.test.ts stubs the context factory and asserts the delegation, restoring client.ts to 100%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
33 lines
1019 B
TypeScript
33 lines
1019 B
TypeScript
"use client";
|
|
|
|
import { useState } from "react";
|
|
import { QueryClientProvider } from "@tanstack/react-query";
|
|
import { createTRPCClient, httpBatchLink } from "@trpc/client";
|
|
import superjson from "superjson";
|
|
import type { AnyTRPCRouter } from "@trpc/server";
|
|
import { TRPCProvider } from "../client";
|
|
import { getQueryClient } from "../query-client";
|
|
|
|
export function TanstackTrpcProvider({
|
|
children,
|
|
trpcUrl,
|
|
}: {
|
|
children: React.ReactNode;
|
|
trpcUrl: string;
|
|
}) {
|
|
const [queryClient] = useState(() => getQueryClient());
|
|
const [trpcClient] = useState(() =>
|
|
// Router-agnostic on purpose: procedure typing comes from useTRPC<TRouter>
|
|
// at the call sites, not from the wire-level client.
|
|
createTRPCClient<AnyTRPCRouter>({
|
|
links: [httpBatchLink({ url: trpcUrl, transformer: superjson })],
|
|
}),
|
|
);
|
|
|
|
return (
|
|
<TRPCProvider trpcClient={trpcClient} queryClient={queryClient}>
|
|
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
|
|
</TRPCProvider>
|
|
);
|
|
}
|