Skip to content

Commit 8ab34ab

Browse files
committed
feat: update to Start RC
1 parent e597d2b commit 8ab34ab

File tree

23 files changed

+182
-189
lines changed

23 files changed

+182
-189
lines changed

frameworks/react-cra/add-ons/db/assets/src/routes/demo.db-chat-api.ts

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createServerFileRoute } from '@tanstack/react-start/server'
1+
import { createFileRoute } from '@tanstack/react-router'
22

33
import { createCollection, localOnlyCollectionOptions } from '@tanstack/db'
44
import { z } from 'zod'
@@ -41,34 +41,38 @@ const sendMessage = (message: { user: string; text: string }) => {
4141
})
4242
}
4343

44-
export const ServerRoute = createServerFileRoute('/demo/db-chat-api').methods({
45-
GET: () => {
46-
const stream = new ReadableStream({
47-
start(controller) {
48-
for (const [_id, message] of serverMessagesCollection.state) {
49-
controller.enqueue(JSON.stringify(message) + '\n')
50-
}
51-
serverMessagesCollection.subscribeChanges((changes) => {
52-
for (const change of changes) {
53-
if (change.type === 'insert') {
54-
controller.enqueue(JSON.stringify(change.value) + '\n')
44+
export const Route = createFileRoute('/demo/db-chat-api')({
45+
server: {
46+
handlers: {
47+
GET: () => {
48+
const stream = new ReadableStream({
49+
start(controller) {
50+
for (const [_id, message] of serverMessagesCollection.state) {
51+
controller.enqueue(JSON.stringify(message) + '\n')
5552
}
56-
}
53+
serverMessagesCollection.subscribeChanges((changes) => {
54+
for (const change of changes) {
55+
if (change.type === 'insert') {
56+
controller.enqueue(JSON.stringify(change.value) + '\n')
57+
}
58+
}
59+
})
60+
},
5761
})
58-
},
59-
})
6062

61-
return new Response(stream, {
62-
headers: {
63-
'Content-Type': 'application/x-ndjson',
63+
return new Response(stream, {
64+
headers: {
65+
'Content-Type': 'application/x-ndjson',
66+
},
67+
})
6468
},
65-
})
66-
},
67-
POST: async ({ request }) => {
68-
const message = IncomingMessageSchema.safeParse(await request.json())
69-
if (!message.success) {
70-
return new Response(message.error.message, { status: 400 })
71-
}
72-
sendMessage(message.data)
69+
POST: async ({ request }) => {
70+
const message = IncomingMessageSchema.safeParse(await request.json())
71+
if (!message.success) {
72+
return new Response(message.error.message, { status: 400 })
73+
}
74+
sendMessage(message.data)
75+
},
76+
},
7377
},
7478
})
Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
1-
import { createServerFileRoute } from "@tanstack/react-start/server";
1+
import { createFileRoute } from '@tanstack/react-router'
22

3-
import { addTodo, getTodos, subscribeToTodos } from "@/mcp-todos";
3+
import { addTodo, getTodos, subscribeToTodos } from '@/mcp-todos'
44

5-
export const ServerRoute = createServerFileRoute("/api/mcp-todos").methods({
6-
GET: () => {
7-
const stream = new ReadableStream({
8-
start(controller) {
9-
setInterval(() => {
10-
controller.enqueue(`event: ping\n\n`);
11-
}, 1000);
12-
const unsubscribe = subscribeToTodos((todos) => {
13-
controller.enqueue(`data: ${JSON.stringify(todos)}\n\n`);
14-
});
15-
const todos = getTodos();
16-
controller.enqueue(`data: ${JSON.stringify(todos)}\n\n`);
17-
return () => unsubscribe();
5+
export const Route = createFileRoute('/api/mcp-todos')({
6+
server: {
7+
handlers: {
8+
GET: () => {
9+
const stream = new ReadableStream({
10+
start(controller) {
11+
setInterval(() => {
12+
controller.enqueue(`event: ping\n\n`)
13+
}, 1000)
14+
const unsubscribe = subscribeToTodos((todos) => {
15+
controller.enqueue(`data: ${JSON.stringify(todos)}\n\n`)
16+
})
17+
const todos = getTodos()
18+
controller.enqueue(`data: ${JSON.stringify(todos)}\n\n`)
19+
return () => unsubscribe()
20+
},
21+
})
22+
return new Response(stream, {
23+
headers: { 'Content-Type': 'text/event-stream' },
24+
})
1825
},
19-
});
20-
return new Response(stream, {
21-
headers: { "Content-Type": "text/event-stream" },
22-
});
23-
},
24-
POST: async ({ request }) => {
25-
const { title } = await request.json();
26-
addTodo(title);
27-
return Response.json(getTodos());
26+
POST: async ({ request }) => {
27+
const { title } = await request.json()
28+
addTodo(title)
29+
return Response.json(getTodos())
30+
},
31+
},
2832
},
29-
});
33+
})
Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2-
import { createServerFileRoute } from "@tanstack/react-start/server";
3-
import z from "zod";
1+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
2+
import { createFileRoute } from '@tanstack/react-router'
3+
import z from 'zod'
44

5-
import { handleMcpRequest } from "@/utils/mcp-handler";
5+
import { handleMcpRequest } from '@/utils/mcp-handler'
66

7-
import { addTodo } from "@/mcp-todos";
7+
import { addTodo } from '@/mcp-todos'
88

99
const server = new McpServer({
10-
name: "start-server",
11-
version: "1.0.0",
12-
});
10+
name: 'start-server',
11+
version: '1.0.0',
12+
})
1313

1414
server.registerTool(
15-
"addTodo",
15+
'addTodo',
1616
{
17-
title: "Tool to add a todo to a list of todos",
18-
description: "Add a todo to a list of todos",
17+
title: 'Tool to add a todo to a list of todos',
18+
description: 'Add a todo to a list of todos',
1919
inputSchema: {
20-
title: z.string().describe("The title of the todo"),
20+
title: z.string().describe('The title of the todo'),
2121
},
2222
},
2323
({ title }) => ({
24-
content: [{ type: "text", text: String(addTodo(title)) }],
25-
})
26-
);
24+
content: [{ type: 'text', text: String(addTodo(title)) }],
25+
}),
26+
)
2727

2828
// server.registerResource(
2929
// "counter-value",
@@ -44,6 +44,10 @@ server.registerTool(
4444
// }
4545
// );
4646

47-
export const ServerRoute = createServerFileRoute("/mcp").methods({
48-
POST: async ({ request }) => handleMcpRequest(request, server),
49-
});
47+
export const Route = createFileRoute('/mcp')({
48+
server: {
49+
handlers: {
50+
POST: async ({ request }) => handleMcpRequest(request, server),
51+
},
52+
},
53+
})

frameworks/react-cra/add-ons/neon/assets/src/routes/demo.neon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const getTodos = createServerFn({
1919
const insertTodo = createServerFn({
2020
method: 'POST',
2121
})
22-
.validator((d: { title: string }) => d)
22+
.inputValidator((d: { title: string }) => d)
2323
.handler(async ({ data }) => {
2424
const client = await getClient()
2525
if (!client) {

frameworks/react-cra/add-ons/oRPC/assets/src/routes/api.$.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import '@/polyfill'
33
import { OpenAPIHandler } from '@orpc/openapi/fetch'
44
import { ZodToJsonSchemaConverter } from '@orpc/zod/zod4'
55
import { experimental_SmartCoercionPlugin as SmartCoercionPlugin } from '@orpc/json-schema'
6-
import { createServerFileRoute } from '@tanstack/react-start/server'
6+
import { createFileRoute } from '@tanstack/react-router'
77
import { onError } from '@orpc/server'
88
import { OpenAPIReferencePlugin } from '@orpc/openapi/plugins'
99

@@ -63,11 +63,15 @@ async function handle({ request }: { request: Request }) {
6363
return response ?? new Response('Not Found', { status: 404 })
6464
}
6565

66-
export const ServerRoute = createServerFileRoute('/api/$').methods({
67-
HEAD: handle,
68-
GET: handle,
69-
POST: handle,
70-
PUT: handle,
71-
PATCH: handle,
72-
DELETE: handle,
66+
export const Route = createFileRoute('/api/$')({
67+
server: {
68+
handlers: {
69+
HEAD: handle,
70+
GET: handle,
71+
POST: handle,
72+
PUT: handle,
73+
PATCH: handle,
74+
DELETE: handle,
75+
},
76+
},
7377
})
Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import '@/polyfill'
22

33
import { RPCHandler } from '@orpc/server/fetch'
4-
import { createServerFileRoute } from '@tanstack/react-start/server'
4+
import { createFileRoute } from '@tanstack/react-router'
55
import router from '@/orpc/router'
66

77
const handler = new RPCHandler(router)
@@ -15,11 +15,15 @@ async function handle({ request }: { request: Request }) {
1515
return response ?? new Response('Not Found', { status: 404 })
1616
}
1717

18-
export const ServerRoute = createServerFileRoute('/api/rpc/$').methods({
19-
HEAD: handle,
20-
GET: handle,
21-
POST: handle,
22-
PUT: handle,
23-
PATCH: handle,
24-
DELETE: handle,
18+
export const Route = createFileRoute('/api/rpc/$')({
19+
server: {
20+
handlers: {
21+
HEAD: handle,
22+
GET: handle,
23+
POST: handle,
24+
PUT: handle,
25+
PATCH: handle,
26+
DELETE: handle,
27+
},
28+
},
2529
})
Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import { createRouter as createTanstackRouter } from '@tanstack/react-router'<% if (addOnEnabled['tanstack-query']) { %>
2-
import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query'
3-
import * as TanstackQuery from "./integrations/tanstack-query/root-provider";
4-
<% } %>
1+
import { createRouter } from '@tanstack/react-router'<% if (addOnEnabled['tanstack-query']) { %>
2+
import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query'
3+
import * as TanstackQuery from "./integrations/tanstack-query/root-provider";
4+
<% } %>
55

66
// Import the generated route tree
77
import { routeTree } from './routeTree.gen'
88

99
// Create a new router instance
10-
export const createRouter = () => {
10+
export const getRouter = () => {
1111
<% if (addOnEnabled['tanstack-query']) { %>
1212
const rqContext = TanstackQuery.getContext();
1313
14-
const router = createTanstackRouter({
14+
const router = createRouter({
1515
routeTree,
1616
context: { ...rqContext },
1717
defaultPreload: "intent",
@@ -29,17 +29,10 @@ export const createRouter = () => {
2929
return router;
3030
3131
<% } else { %>
32-
return createTanstackRouter({
32+
return createRouter({
3333
routeTree,
3434
scrollRestoration: true,
3535
defaultPreloadStaleTime: 0,
3636
})
3737
<% } %>
3838
}
39-
40-
// Register the router instance for type safety
41-
declare module '@tanstack/react-router' {
42-
interface Register {
43-
router: ReturnType<typeof createRouter>
44-
}
45-
}
Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
import { createServerFileRoute } from '@tanstack/react-start/server'
1+
import { createFileRoute } from '@tanstack/react-router'
22

3-
export const ServerRoute = createServerFileRoute().methods({
4-
GET: () => {
5-
return new Response(JSON.stringify(['Alice', 'Bob', 'Charlie']), {
6-
headers: {
7-
'Content-Type': 'application/json',
3+
export const Route = createFileRoute('/api/demo-names')({
4+
server: {
5+
handlers: {
6+
GET: () => {
7+
return new Response(JSON.stringify(['Alice', 'Bob', 'Charlie']), {
8+
headers: {
9+
'Content-Type': 'application/json',
10+
},
11+
})
812
},
9-
})
13+
},
1014
},
1115
})
Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<% if (!addOnEnabled['tanstack-query']) { ignoreFile() } %>import { createServerFileRoute } from '@tanstack/react-start/server'
1+
<% if (!addOnEnabled['tanstack-query']) { ignoreFile() } %>import { createFileRoute } from '@tanstack/react-router'
22

33
const todos = [
44
{
@@ -15,17 +15,21 @@ const todos = [
1515
},
1616
]
1717

18-
export const ServerRoute = createServerFileRoute('/api/demo-tq-todos').methods({
19-
GET: () => {
20-
return Response.json(todos)
21-
},
22-
POST: async ({ request }) => {
23-
const name = await request.json()
24-
const todo = {
25-
id: todos.length + 1,
26-
name,
27-
}
28-
todos.push(todo)
29-
return Response.json(todo)
18+
export const Route = createFileRoute('/api/demo-tq-todos')({
19+
server: {
20+
handlers: {
21+
GET: () => {
22+
return Response.json(todos)
23+
},
24+
POST: async ({ request }) => {
25+
const name = await request.json()
26+
const todo = {
27+
id: todos.length + 1,
28+
name,
29+
}
30+
todos.push(todo)
31+
return Response.json(todo)
32+
},
33+
},
3034
},
3135
})

frameworks/react-cra/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const getTodos = createServerFn({
2525
}).handler(async () => await readTodos())
2626

2727
const addTodo = createServerFn({ method: 'POST' })
28-
.validator((d: string) => d)
28+
.inputValidator((d: string) => d)
2929
.handler(async ({ data }) => {
3030
const todos = await readTodos()
3131
todos.push({ id: todos.length + 1, name: data })

0 commit comments

Comments
 (0)