diff --git a/README.md b/README.md index c5ee5e6..0203e66 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,10 @@ Clerk is a developer-first authentication and user management solution. It provi After following the [Clerk TanStack Start quickstart](https://clerk.com/docs/quickstarts/tanstack-start?utm_source=DevRel&utm_medium=docs&utm_campaign=templates&utm_content=08-05-2023&utm_term=clerk-tanstack-start-quickstart), you will have learned how to: - Create a new TanStack Start application -- Install `@clerk/tanstack-start@beta` +- Install `@clerk/tanstack-react-start` - Set up your environment keys +- Add `clerkMiddleware()` to your app - Wrap your Root Component with `` -- Configure `clerkHandler()` in the server handler entrypoint - Use Clerk components to protect your content - Embed the `` and `` - Deploy your application diff --git a/package.json b/package.json index bfd57b0..018fd9f 100644 --- a/package.json +++ b/package.json @@ -11,26 +11,28 @@ "lint": "eslint . --report-unused-disable-directives --max-warnings 0" }, "dependencies": { - "@clerk/tanstack-react-start": "^0.23.0", - "@tanstack/react-router": "^1.131.28", - "@tanstack/react-router-devtools": "^1.131.28", - "@tanstack/react-start": "^1.131.28", + "@clerk/tanstack-react-start": "^0.26.0", + "@tanstack/react-router": "^1.132.47", + "@tanstack/react-router-devtools": "^1.133.1", + "@tanstack/react-start": "^1.132.56", "react": "^19.1.0", - "react-dom": "^19.1.0" + "react-dom": "^19.1.0", + "srvx": "0.8.15" }, "devDependencies": { "@eslint/compat": "^1.3.1", "@eslint/js": "^9.31.0", - "@typescript-eslint/parser": "^8.37.0", + "@types/node": "^24.0.14", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", "@typescript-eslint/eslint-plugin": "^8.37.0", + "@typescript-eslint/parser": "^8.37.0", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.21", "eslint": "^9.31.0", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", - "@types/node": "^24.0.14", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", - "autoprefixer": "^10.4.21", "prettier": "^3.6.2", "typescript": "^5.8.3", "typescript-eslint": "^8.37.0", diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index d204c26..20a48e5 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -57,3 +57,13 @@ const rootRouteChildren: RootRouteChildren = { export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() + +import type { getRouter } from './router.tsx' +import type { startInstance } from './start.ts' +declare module '@tanstack/react-start' { + interface Register { + ssr: true + router: Awaited> + config: Awaited> + } +} diff --git a/src/router.tsx b/src/router.tsx index e423256..a464233 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -1,8 +1,8 @@ -import { createRouter as createTanStackRouter } from '@tanstack/react-router' +import { createRouter } from '@tanstack/react-router' import { routeTree } from './routeTree.gen' -export function createRouter() { - const router = createTanStackRouter({ +export function getRouter() { + const router = createRouter({ routeTree, defaultPreload: 'intent', defaultErrorComponent: (err) =>

{err.error.stack}

, @@ -15,6 +15,6 @@ export function createRouter() { declare module '@tanstack/react-router' { interface Register { - router: ReturnType + router: ReturnType } } diff --git a/src/server.ts b/src/server.ts deleted file mode 100644 index 1f4daa6..0000000 --- a/src/server.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createStartHandler, defineHandlerCallback, defaultStreamHandler } from '@tanstack/react-start/server'; -import { createRouter } from './router'; -import { createClerkHandler } from '@clerk/tanstack-react-start/server'; - -const handlerFactory = createClerkHandler( - createStartHandler({ - createRouter, - }), -); - -export default defineHandlerCallback(async event => { - const startHandler = await handlerFactory(defaultStreamHandler); - return startHandler(event); -}); diff --git a/src/start.ts b/src/start.ts new file mode 100644 index 0000000..6f0d68a --- /dev/null +++ b/src/start.ts @@ -0,0 +1,8 @@ +import { clerkMiddleware } from '@clerk/tanstack-react-start/server'; +import { createStart } from '@tanstack/react-start'; + +export const startInstance = createStart(() => { + return { + requestMiddleware: [clerkMiddleware()], + }; +}); diff --git a/vite.config.ts b/vite.config.ts index 1f5fd19..f10c86e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,7 @@ import { tanstackStart } from '@tanstack/react-start/plugin/vite' import { defineConfig } from 'vite' import tsConfigPaths from 'vite-tsconfig-paths' +import viteReact from '@vitejs/plugin-react' export default defineConfig({ server: { @@ -11,5 +12,6 @@ export default defineConfig({ projects: ['./tsconfig.json'], }), tanstackStart(), + viteReact(), ], })