Skip to content

Commit 3204fbe

Browse files
fix: use localLink to invoke procedures directly during SSR (#1480)
1 parent 268959d commit 3204fbe

File tree

5 files changed

+618
-705
lines changed

5 files changed

+618
-705
lines changed

apps/tanstack-start/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@
2222
"@t3-oss/env-core": "^0.13.8",
2323
"@tanstack/react-form": "catalog:",
2424
"@tanstack/react-query": "catalog:",
25-
"@tanstack/react-router": "^1.133.28",
26-
"@tanstack/react-router-devtools": "^1.133.28",
27-
"@tanstack/react-router-ssr-query": "^1.133.28",
28-
"@tanstack/react-start": "^1.133.29",
25+
"@tanstack/react-router": "^1.135.2",
26+
"@tanstack/react-router-devtools": "^1.135.2",
27+
"@tanstack/react-router-ssr-query": "^1.135.2",
28+
"@tanstack/react-start": "^1.135.2",
2929
"@trpc/client": "catalog:",
3030
"@trpc/server": "catalog:",
3131
"@trpc/tanstack-react-query": "catalog:",
3232
"better-auth": "catalog:",
33-
"nitro": "npm:nitro-nightly@latest",
33+
"nitro": "3.0.1-alpha.1",
3434
"react": "catalog:react19",
3535
"react-dom": "catalog:react19",
3636
"superjson": "2.2.3",
Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,55 @@
1+
import { createIsomorphicFn } from "@tanstack/react-start";
2+
import { getRequestHeaders } from "@tanstack/react-start/server";
13
import {
24
createTRPCClient,
35
httpBatchStreamLink,
46
loggerLink,
7+
unstable_localLink,
58
} from "@trpc/client";
69
import { createTRPCContext } from "@trpc/tanstack-react-query";
710
import SuperJSON from "superjson";
811

9-
import type { AppRouter } from "@acme/api";
12+
import * as Api from "@acme/api";
1013

14+
import { auth } from "~/auth/server";
1115
import { env } from "~/env";
1216
import { getBaseUrl } from "~/lib/url";
1317

14-
export const trpcClient = createTRPCClient<AppRouter>({
15-
links: [
16-
loggerLink({
17-
enabled: (op) =>
18-
env.NODE_ENV === "development" ||
19-
(op.direction === "down" && op.result instanceof Error),
20-
}),
21-
httpBatchStreamLink({
22-
transformer: SuperJSON,
23-
url: getBaseUrl() + "/api/trpc",
24-
headers() {
25-
const headers = new Headers();
26-
headers.set("x-trpc-source", "nextjs-react");
27-
return headers;
28-
},
29-
}),
30-
],
31-
});
18+
export const makeTRPCClient = createIsomorphicFn()
19+
.server(() => {
20+
return createTRPCClient<Api.AppRouter>({
21+
links: [
22+
unstable_localLink({
23+
router: Api.appRouter,
24+
transformer: SuperJSON,
25+
createContext: () => {
26+
const headers = new Headers(getRequestHeaders());
27+
headers.set("x-trpc-source", "tanstack-start-server");
28+
return Api.createTRPCContext({ auth, headers });
29+
},
30+
}),
31+
],
32+
});
33+
})
34+
.client(() => {
35+
return createTRPCClient<Api.AppRouter>({
36+
links: [
37+
loggerLink({
38+
enabled: (op) =>
39+
env.NODE_ENV === "development" ||
40+
(op.direction === "down" && op.result instanceof Error),
41+
}),
42+
httpBatchStreamLink({
43+
transformer: SuperJSON,
44+
url: getBaseUrl() + "/api/trpc",
45+
headers() {
46+
const headers = new Headers();
47+
headers.set("x-trpc-source", "tanstack-start-client");
48+
return headers;
49+
},
50+
}),
51+
],
52+
});
53+
});
3254

33-
export const { useTRPC, TRPCProvider } = createTRPCContext<AppRouter>();
55+
export const { useTRPC, TRPCProvider } = createTRPCContext<Api.AppRouter>();

apps/tanstack-start/src/router.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { setupRouterSsrQueryIntegration } from "@tanstack/react-router-ssr-query
44
import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query";
55
import SuperJSON from "superjson";
66

7-
import { trpcClient, TRPCProvider } from "~/lib/trpc";
7+
import { makeTRPCClient, TRPCProvider } from "~/lib/trpc";
88
import { routeTree } from "./routeTree.gen";
99

1010
export function getRouter() {
@@ -14,6 +14,7 @@ export function getRouter() {
1414
hydrate: { deserializeData: SuperJSON.deserialize },
1515
},
1616
});
17+
const trpcClient = makeTRPCClient();
1718
const trpc = createTRPCOptionsProxy({
1819
client: trpcClient,
1920
queryClient,
@@ -38,9 +39,3 @@ export function getRouter() {
3839

3940
return router;
4041
}
41-
42-
declare module "@tanstack/react-router" {
43-
interface Register {
44-
router: ReturnType<typeof getRouter>;
45-
}
46-
}

0 commit comments

Comments
 (0)