diff --git a/src/routes/_libraries/query.$version.index.tsx b/src/routes/_libraries/query.$version.index.tsx
index cfe970e40..99d031a9b 100644
--- a/src/routes/_libraries/query.$version.index.tsx
+++ b/src/routes/_libraries/query.$version.index.tsx
@@ -16,12 +16,12 @@ import LandingPageGad from '~/components/LandingPageGad'
import OpenSourceStats, { ossStatsQuery } from '~/components/OpenSourceStats'
import { CodeBlock } from '~/components/Markdown'
import { FrameworkIconTabs } from '~/components/FrameworkIconTabs'
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import { twMerge } from 'tailwind-merge'
const library = getLibrary('query')
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/query/$version/')({
component: VersionIndex,
head: () => ({
meta: seo({
@@ -34,7 +34,7 @@ export const Route = createFileRoute({
},
})
-export default function VersionIndex() {
+function VersionIndex() {
// sponsorsPromise no longer needed - using lazy loading
const { version } = Route.useParams()
const branch = getBranch(queryProject, version)
diff --git a/src/routes/_libraries/ranger.$version.index.tsx b/src/routes/_libraries/ranger.$version.index.tsx
index 88d56bf2e..0ff7c4a1b 100644
--- a/src/routes/_libraries/ranger.$version.index.tsx
+++ b/src/routes/_libraries/ranger.$version.index.tsx
@@ -1,3 +1,4 @@
+import { createFileRoute } from '@tanstack/react-router'
import * as React from 'react'
import { rangerProject } from '~/libraries/ranger'
import { Footer } from '~/components/Footer'
@@ -15,7 +16,7 @@ import OpenSourceStats, { ossStatsQuery } from '~/components/OpenSourceStats'
const library = getLibrary('ranger')
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/ranger/$version/')({
component: VersionIndex,
head: () => ({
meta: seo({
@@ -28,7 +29,7 @@ export const Route = createFileRoute({
},
})
-export default function VersionIndex() {
+function VersionIndex() {
// sponsorsPromise no longer needed - using lazy loading
const { version } = Route.useParams()
const branch = getBranch(rangerProject, version)
diff --git a/src/routes/_libraries/route.tsx b/src/routes/_libraries/route.tsx
index 6d69e5bb0..28d3ff5a8 100644
--- a/src/routes/_libraries/route.tsx
+++ b/src/routes/_libraries/route.tsx
@@ -1,5 +1,10 @@
import * as React from 'react'
-import { Link, Outlet, useLocation } from '@tanstack/react-router'
+import {
+ Link,
+ Outlet,
+ useLocation,
+ createFileRoute,
+} from '@tanstack/react-router'
import { CgClose, CgMenuLeft, CgMusicSpeaker } from 'react-icons/cg'
import { MdLibraryBooks, MdLineAxis, MdSupport } from 'react-icons/md'
import { twMerge } from 'tailwind-merge'
@@ -34,7 +39,7 @@ import { api } from 'convex/_generated/api'
import { PiHammerFill } from 'react-icons/pi'
import { BrandContextMenu } from '~/components/BrandContextMenu'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries')({
staleTime: Infinity,
loader: async (ctx) => {
return {}
diff --git a/src/routes/_libraries/router.$version.index.tsx b/src/routes/_libraries/router.$version.index.tsx
index 0ee0bbbcd..4a4b14d91 100644
--- a/src/routes/_libraries/router.$version.index.tsx
+++ b/src/routes/_libraries/router.$version.index.tsx
@@ -8,7 +8,7 @@ import { LazySponsorSection } from '~/components/LazySponsorSection'
import { StackBlitzEmbed } from '~/components/StackBlitzEmbed'
import { FrameworkIconTabs } from '~/components/FrameworkIconTabs'
import { CodeBlock } from '~/components/Markdown'
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import { BottomCTA } from '~/components/BottomCTA'
import { Framework, getBranch, getLibrary } from '~/libraries'
import { seo } from '~/utils/seo'
@@ -18,7 +18,7 @@ import OpenSourceStats, { ossStatsQuery } from '~/components/OpenSourceStats'
const library = getLibrary('router')
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/router/$version/')({
component: RouterVersionIndex,
head: () => ({
meta: seo({
diff --git a/src/routes/_libraries/start.$version.index.tsx b/src/routes/_libraries/start.$version.index.tsx
index 2bd735316..07b45d7d5 100644
--- a/src/routes/_libraries/start.$version.index.tsx
+++ b/src/routes/_libraries/start.$version.index.tsx
@@ -2,7 +2,7 @@ import * as React from 'react'
import { FaBook, FaGithub } from 'react-icons/fa'
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import { Footer } from '~/components/Footer'
import { LazySponsorSection } from '~/components/LazySponsorSection'
import { BottomCTA } from '~/components/BottomCTA'
@@ -19,7 +19,7 @@ import { TbBrandX } from 'react-icons/tb'
const library = getLibrary('start')
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/start/$version/')({
component: VersionIndex,
head: () => ({
meta: seo({
@@ -32,7 +32,7 @@ export const Route = createFileRoute({
},
})
-export default function VersionIndex() {
+function VersionIndex() {
// sponsorsPromise no longer needed - using lazy loading
const [isDark, setIsDark] = React.useState(true)
diff --git a/src/routes/_libraries/store.$version.index.tsx b/src/routes/_libraries/store.$version.index.tsx
index ff3928977..067189784 100644
--- a/src/routes/_libraries/store.$version.index.tsx
+++ b/src/routes/_libraries/store.$version.index.tsx
@@ -1,3 +1,4 @@
+import { createFileRoute } from '@tanstack/react-router'
import { Footer } from '~/components/Footer'
import { LazySponsorSection } from '~/components/LazySponsorSection'
import { BottomCTA } from '~/components/BottomCTA'
@@ -12,7 +13,7 @@ import OpenSourceStats, { ossStatsQuery } from '~/components/OpenSourceStats'
const library = getLibrary('store')
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/store/$version/')({
component: StoreVersionIndex,
head: () => ({
meta: seo({
@@ -25,7 +26,7 @@ export const Route = createFileRoute({
},
})
-export default function StoreVersionIndex() {
+function StoreVersionIndex() {
// sponsorsPromise no longer needed - using lazy loading
return (
diff --git a/src/routes/_libraries/support.tsx b/src/routes/_libraries/support.tsx
index 616e6231a..92e1f08ea 100644
--- a/src/routes/_libraries/support.tsx
+++ b/src/routes/_libraries/support.tsx
@@ -1,7 +1,7 @@
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import { seo } from '~/utils/seo'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/support')({
component: SupportComp,
head: () => ({
meta: seo({
diff --git a/src/routes/_libraries/table.$version.index.tsx b/src/routes/_libraries/table.$version.index.tsx
index 17749c321..42993975d 100644
--- a/src/routes/_libraries/table.$version.index.tsx
+++ b/src/routes/_libraries/table.$version.index.tsx
@@ -9,7 +9,7 @@ import { LazySponsorSection } from '~/components/LazySponsorSection'
import { StackBlitzEmbed } from '~/components/StackBlitzEmbed'
import { FrameworkIconTabs } from '~/components/FrameworkIconTabs'
import { CodeBlock } from '~/components/Markdown'
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import { BottomCTA } from '~/components/BottomCTA'
import { Framework, getBranch, getLibrary } from '~/libraries'
import { seo } from '~/utils/seo'
@@ -20,7 +20,7 @@ import OpenSourceStats, { ossStatsQuery } from '~/components/OpenSourceStats'
const library = getLibrary('table')
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/table/$version/')({
component: TableVersionIndex,
head: () => ({
meta: seo({
@@ -33,7 +33,7 @@ export const Route = createFileRoute({
},
})
-export default function TableVersionIndex() {
+function TableVersionIndex() {
// sponsorsPromise no longer needed - using lazy loading
const { version } = Route.useParams()
const branch = getBranch(tableProject, version)
diff --git a/src/routes/_libraries/terms.tsx b/src/routes/_libraries/terms.tsx
index aabfd0dc9..6a1778cb4 100644
--- a/src/routes/_libraries/terms.tsx
+++ b/src/routes/_libraries/terms.tsx
@@ -1,7 +1,8 @@
+import { createFileRoute } from '@tanstack/react-router'
import { Footer } from '~/components/Footer'
import { seo } from '~/utils/seo'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/terms')({
component: RouteComp,
head: () => ({
meta: seo({
@@ -11,7 +12,7 @@ export const Route = createFileRoute({
}),
})
-export default function RouteComp() {
+function RouteComp() {
return (
diff --git a/src/routes/_libraries/virtual.$version.index.tsx b/src/routes/_libraries/virtual.$version.index.tsx
index a22a7d91a..342f1094b 100644
--- a/src/routes/_libraries/virtual.$version.index.tsx
+++ b/src/routes/_libraries/virtual.$version.index.tsx
@@ -16,11 +16,11 @@ import LandingPageGad from '~/components/LandingPageGad'
import { PartnersSection } from '~/components/PartnersSection'
import OpenSourceStats, { ossStatsQuery } from '~/components/OpenSourceStats'
import { CodeBlock } from '~/components/Markdown'
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
const library = getLibrary('virtual')
-export const Route = createFileRoute({
+export const Route = createFileRoute('/_libraries/virtual/$version/')({
component: RouteComp,
head: () => ({
meta: seo({
@@ -33,7 +33,7 @@ export const Route = createFileRoute({
},
})
-export default function RouteComp() {
+function RouteComp() {
// sponsorsPromise no longer needed - using lazy loading
const { version } = Route.useParams()
const [framework, setFramework] = React.useState('react')
diff --git a/src/routes/admin/index.tsx b/src/routes/admin/index.tsx
index 33fb3bec8..9e816c5cc 100644
--- a/src/routes/admin/index.tsx
+++ b/src/routes/admin/index.tsx
@@ -1,9 +1,9 @@
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import { FaLock, FaUsers, FaChartBar } from 'react-icons/fa'
import { useQuery } from 'convex/react'
import { api } from 'convex/_generated/api'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/admin/')({
component: AdminPage,
})
diff --git a/src/routes/admin/route.tsx b/src/routes/admin/route.tsx
index 0c0dd191c..2a99064f5 100644
--- a/src/routes/admin/route.tsx
+++ b/src/routes/admin/route.tsx
@@ -1,12 +1,17 @@
import * as React from 'react'
-import { Link, LinkOptions, Outlet } from '@tanstack/react-router'
+import {
+ Link,
+ LinkOptions,
+ Outlet,
+ createFileRoute,
+} from '@tanstack/react-router'
import { CgClose, CgMenuLeft } from 'react-icons/cg'
import { FaHome, FaUser, FaUsers } from 'react-icons/fa'
import { twMerge } from 'tailwind-merge'
// Using public asset URL
import { ClientAdminAuth } from '~/components/ClientAuth'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/admin')({
component: () => {
return (
diff --git a/src/routes/admin/users.tsx b/src/routes/admin/users.tsx
index bef6457d0..d7794ce74 100644
--- a/src/routes/admin/users.tsx
+++ b/src/routes/admin/users.tsx
@@ -1,4 +1,4 @@
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import {
useQuery as useConvexQuery,
useMutation as useConvexMutation,
@@ -34,7 +34,7 @@ type User = {
adsDisabled?: boolean
}
-export const Route = createFileRoute({
+export const Route = createFileRoute('/admin/users')({
component: UsersPage,
validateSearch: z.object({
email: z.string().optional(),
diff --git a/src/routes/api/auth/$.ts b/src/routes/api/auth/$.ts
index 4f8fa0854..51c6ea367 100644
--- a/src/routes/api/auth/$.ts
+++ b/src/routes/api/auth/$.ts
@@ -1,10 +1,15 @@
+import { createFileRoute } from '@tanstack/react-router'
import { reactStartHandler } from "~/server/auth.server"
-export const ServerRoute = createServerFileRoute().methods({
- GET: ({ request }) => {
- return reactStartHandler(request)
- },
- POST: ({ request }) => {
- return reactStartHandler(request)
+export const Route = createFileRoute('/api/auth/$')({
+ server: {
+ handlers: {
+ GET: ({ request }) => {
+ return reactStartHandler(request)
+ },
+ POST: ({ request }) => {
+ return reactStartHandler(request)
+ },
+ },
},
})
\ No newline at end of file
diff --git a/src/routes/builder.tsx b/src/routes/builder.tsx
index 64f2ee979..90f50242a 100644
--- a/src/routes/builder.tsx
+++ b/src/routes/builder.tsx
@@ -1,9 +1,9 @@
import { convexQuery } from '@convex-dev/react-query'
import { useSuspenseQuery } from '@tanstack/react-query'
-import { redirect } from '@tanstack/react-router'
+import { redirect, createFileRoute } from '@tanstack/react-router'
import { api } from 'convex/_generated/api'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/builder')({
component: RouteComponent,
loader: async (opts) => {
const user = await opts.context.ensureUser()
diff --git a/src/routes/merch.tsx b/src/routes/merch.tsx
index 4a8a51ace..788c90cc7 100644
--- a/src/routes/merch.tsx
+++ b/src/routes/merch.tsx
@@ -1,6 +1,6 @@
-import { redirect } from '@tanstack/react-router'
+import { redirect, createFileRoute } from '@tanstack/react-router'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/merch')({
beforeLoad: () => {
throw redirect({
href: `https://cottonbureau.com/people/tanstack`,
diff --git a/src/routes/partners-embed.tsx b/src/routes/partners-embed.tsx
index 7cbf175dd..c6db14278 100644
--- a/src/routes/partners-embed.tsx
+++ b/src/routes/partners-embed.tsx
@@ -1,3 +1,4 @@
+import { createFileRoute } from '@tanstack/react-router'
import { partners } from '~/utils/partners'
import { PartnersGrid } from '~/components/PartnersGrid'
@@ -5,7 +6,7 @@ const cacheHeaders = {
'Cache-Control': 'max-age=300, s-maxage=3600, stale-while-revalidate',
}
-export const Route = createFileRoute({
+export const Route = createFileRoute('/partners-embed')({
staleTime: Infinity,
headers: () => {
// Cache the entire HTML response for 5 minutes
diff --git a/src/routes/sponsors-embed.tsx b/src/routes/sponsors-embed.tsx
index 3938a4d8e..d7954a01d 100644
--- a/src/routes/sponsors-embed.tsx
+++ b/src/routes/sponsors-embed.tsx
@@ -1,3 +1,4 @@
+import { createFileRoute } from '@tanstack/react-router'
import SponsorPack from '~/components/SponsorPack'
import { getSponsorsForSponsorPack } from '~/server/sponsors'
@@ -5,7 +6,7 @@ const cacheHeaders = {
'Cache-Control': 'max-age=300, s-maxage=3600, stale-while-revalidate',
}
-export const Route = createFileRoute({
+export const Route = createFileRoute('/sponsors-embed')({
staleTime: Infinity,
loader: () => getSponsorsForSponsorPack(),
headers: () => {
diff --git a/src/routes/stats/index.tsx b/src/routes/stats/index.tsx
index 9663c99c3..d08c83d57 100644
--- a/src/routes/stats/index.tsx
+++ b/src/routes/stats/index.tsx
@@ -1,6 +1,6 @@
-import { redirect } from '@tanstack/react-router'
+import { redirect, createFileRoute } from '@tanstack/react-router'
-export const Route = createFileRoute({
+export const Route = createFileRoute('/stats/')({
beforeLoad: () => {
throw redirect({ to: '/stats/npm' })
},
diff --git a/src/routes/stats/npm/index.tsx b/src/routes/stats/npm/index.tsx
index 67c608b3c..fd37907cc 100644
--- a/src/routes/stats/npm/index.tsx
+++ b/src/routes/stats/npm/index.tsx
@@ -1,5 +1,5 @@
import * as React from 'react'
-import { Link } from '@tanstack/react-router'
+import { Link, createFileRoute } from '@tanstack/react-router'
import { z } from 'zod'
import { useDebouncedValue, useThrottledCallback } from '@tanstack/react-pacer'
import {
@@ -56,7 +56,7 @@ export const packageComparisonSchema = z.object({
const transformModeSchema = z.enum(['none', 'normalize-y'])
const binTypeSchema = z.enum(['yearly', 'monthly', 'weekly', 'daily'])
const showDataModeSchema = z.enum(['all', 'complete'])
-export const Route = createFileRoute({
+export const Route = createFileRoute('/stats/npm/')({
validateSearch: z.object({
packageGroups: z
.array(packageGroupSchema)
diff --git a/src/server/auth.server.ts b/src/server/auth.server.ts
index 1d526e149..54f9bc91d 100644
--- a/src/server/auth.server.ts
+++ b/src/server/auth.server.ts
@@ -8,9 +8,7 @@ import { betterAuthComponent } from '../../convex/auth'
// You'll want to replace this with an environment variable
const siteUrl = process.env.URL
const convexSiteUrl =
- process.env.NODE_ENV === 'production'
- ? process.env.VITE_CONVEX_SITE_URL!
- : 'http://upbeat-greyhound-631.convex.site'
+ process.env.VITE_CONVEX_SITE_URL || 'http://upbeat-greyhound-631.convex.site'
export const createAuth = (ctx: GenericCtx) =>
betterAuth({
diff --git a/src/server/sponsors.ts b/src/server/sponsors.ts
index ebb9b6b87..f41174392 100644
--- a/src/server/sponsors.ts
+++ b/src/server/sponsors.ts
@@ -1,7 +1,7 @@
import { fetchCached } from '~/utils/cache.server'
import { graphqlWithAuth } from '~/server/github'
import { createServerFn } from '@tanstack/react-start'
-import { getEvent, setHeaders } from '@tanstack/react-start/server'
+import { setResponseHeaders } from '@tanstack/react-start/server'
import sponsorMetaData from '~/utils/gh-sponsor-meta.json'
import { extent, scaleLinear } from 'd3'
@@ -34,12 +34,12 @@ export const getSponsorsForSponsorPack = createServerFn({
fn: getSponsors,
})
- if (!getEvent().handled) {
- setHeaders({
- 'cache-control': 'public, max-age=0, must-revalidate',
- 'cdn-cache-control': 'max-age=300, stale-while-revalidate=300, durable',
- })
- }
+ // In recent @tanstack/react-start versions, getEvent is no longer exported.
+ // Headers can be set unconditionally here; framework will merge appropriately.
+ setResponseHeaders({
+ 'cache-control': 'public, max-age=0, must-revalidate',
+ 'cdn-cache-control': 'max-age=300, stale-while-revalidate=300, durable',
+ })
const amountExtent = extent(sponsors, (d) => d.amount).map((d) => d!)
const scale = scaleLinear().domain(amountExtent).range([0, 1])
diff --git a/src/utils/config.ts b/src/utils/config.ts
index a47768cc1..a4d0672ec 100644
--- a/src/utils/config.ts
+++ b/src/utils/config.ts
@@ -1,7 +1,7 @@
import { z } from 'zod'
import { fetchRepoFile } from './documents.server'
import { createServerFn } from '@tanstack/react-start'
-import { setHeaders } from '@tanstack/react-start/server'
+import { setResponseHeaders } from '@tanstack/react-start/server'
export type MenuItem = {
label: string | React.ReactNode
@@ -52,7 +52,7 @@ export type ConfigSchema = z.infer
Fetch the config file for the project and validate it.
*/
export const getTanstackDocsConfig = createServerFn({ method: 'GET' })
- .validator(
+ .inputValidator(
z.object({ repo: z.string(), branch: z.string(), docsRoot: z.string() })
)
.handler(async ({ data: { repo, branch, docsRoot } }) => {
@@ -74,7 +74,7 @@ export const getTanstackDocsConfig = createServerFn({ method: 'GET' })
throw new Error('Zod validation failed')
}
- setHeaders({
+ setResponseHeaders({
'cache-control': 'public, max-age=0, must-revalidate',
'cdn-cache-control': 'max-age=300, stale-while-revalidate=300, durable',
'Netlify-Vary': 'query=payload',
@@ -82,6 +82,7 @@ export const getTanstackDocsConfig = createServerFn({ method: 'GET' })
return validationResult.data
} catch (e) {
- throw new Error('Invalid docs/config.json file')
+ console.error(e)
+ throw new Error('Invalid docs/config.json file', { cause: e })
}
})
diff --git a/src/utils/docs.ts b/src/utils/docs.ts
index 4af832d8e..31ce0d272 100644
--- a/src/utils/docs.ts
+++ b/src/utils/docs.ts
@@ -7,7 +7,7 @@ import removeMarkdown from 'remove-markdown'
import { notFound } from '@tanstack/react-router'
import { createServerFn } from '@tanstack/react-start'
import { z } from 'zod'
-import { setHeader } from '@tanstack/react-start/server'
+import { setResponseHeader } from '@tanstack/react-start/server'
// import {
// getContributorStats,
// getContributorStatsForLibrary,
@@ -50,7 +50,7 @@ export const loadDocs = async ({
}
export const fetchDocs = createServerFn({ method: 'GET' })
- .validator(
+ .inputValidator(
z.object({ repo: z.string(), branch: z.string(), filePath: z.string() })
)
.handler(async ({ data: { repo, branch, filePath } }) => {
@@ -74,8 +74,8 @@ export const fetchDocs = createServerFn({ method: 'GET' })
// Cache for 5 minutes on shared cache
// Revalidate in the background
- setHeader('Cache-Control', 'public, max-age=0, must-revalidate')
- setHeader(
+ setResponseHeader('Cache-Control', 'public, max-age=0, must-revalidate')
+ setResponseHeader(
'CDN-Cache-Control',
'max-age=300, stale-while-revalidate=300, durable'
)
@@ -89,7 +89,7 @@ export const fetchDocs = createServerFn({ method: 'GET' })
})
export const fetchFile = createServerFn({ method: 'GET' })
- .validator(
+ .inputValidator(
z.object({ repo: z.string(), branch: z.string(), filePath: z.string() })
)
.handler(async ({ data: { repo, branch, filePath } }) => {
@@ -101,8 +101,8 @@ export const fetchFile = createServerFn({ method: 'GET' })
// Cache for 60 minutes on shared cache
// Revalidate in the background
- setHeader('Cache-Control', 'public, max-age=0, must-revalidate')
- setHeader(
+ setResponseHeader('Cache-Control', 'public, max-age=0, must-revalidate')
+ setResponseHeader(
'CDN-Cache-Control',
'max-age=3600, stale-while-revalidate=3600, durable'
)
@@ -113,7 +113,7 @@ export const fetchFile = createServerFn({ method: 'GET' })
export const fetchRepoDirectoryContents = createServerFn({
method: 'GET',
})
- .validator(
+ .inputValidator(
z.object({
repo: z.string(),
branch: z.string(),
@@ -125,8 +125,8 @@ export const fetchRepoDirectoryContents = createServerFn({
// Cache for 60 minutes on shared cache
// Revalidate in the background
- setHeader('Cache-Control', 'public, max-age=0, must-revalidate')
- setHeader(
+ setResponseHeader('Cache-Control', 'public, max-age=0, must-revalidate')
+ setResponseHeader(
'CDN-Cache-Control',
'max-age=3600, stale-while-revalidate=3600, durable'
)
@@ -137,14 +137,14 @@ export const fetchRepoDirectoryContents = createServerFn({
// GitHub contribution stats server functions - commented out due to performance/accuracy concerns
/*
export const fetchContributorStats = createServerFn({ method: 'GET' })
- .validator(z.object({ username: z.string() }))
+ .inputValidator(z.object({ username: z.string() }))
.handler(async ({ data: { username } }) => {
const stats = await getContributorStats(username)
// Cache for 30 minutes on shared cache
// Revalidate in the background
- setHeader('Cache-Control', 'public, max-age=0, must-revalidate')
- setHeader(
+ setResponseHeader('Cache-Control', 'public, max-age=0, must-revalidate')
+ setResponseHeader(
'CDN-Cache-Control',
'max-age=1800, stale-while-revalidate=1800, durable'
)
@@ -153,7 +153,7 @@ export const fetchContributorStats = createServerFn({ method: 'GET' })
})
export const fetchContributorStatsForLibrary = createServerFn({ method: 'GET' })
- .validator(
+ .inputValidator(
z.object({
username: z.string(),
libraryRepo: z.string(),
@@ -164,8 +164,8 @@ export const fetchContributorStatsForLibrary = createServerFn({ method: 'GET' })
// Cache for 30 minutes on shared cache
// Revalidate in the background
- setHeader('Cache-Control', 'public, max-age=0, must-revalidate')
- setHeader(
+ setResponseHeader('Cache-Control', 'public, max-age=0, must-revalidate')
+ setResponseHeader(
'CDN-Cache-Control',
'max-age=1800, stale-while-revalidate=1800, durable'
)
@@ -174,14 +174,14 @@ export const fetchContributorStatsForLibrary = createServerFn({ method: 'GET' })
})
export const fetchBatchContributorStats = createServerFn({ method: 'GET' })
- .validator(z.object({ usernames: z.array(z.string()) }))
+ .inputValidator(z.object({ usernames: z.array(z.string()) }))
.handler(async ({ data: { usernames } }) => {
const stats = await getBatchContributorStats(usernames)
// Cache for 30 minutes on shared cache
// Revalidate in the background
- setHeader('Cache-Control', 'public, max-age=0, must-revalidate')
- setHeader(
+ setResponseHeader('Cache-Control', 'public, max-age=0, must-revalidate')
+ setResponseHeader(
'CDN-Cache-Control',
'max-age=1800, stale-while-revalidate=1800, durable'
)
@@ -202,8 +202,8 @@ export const fetchAllMaintainerStats = createServerFn({
// Cache for 30 minutes on shared cache
// Revalidate in the background
- setHeader('Cache-Control', 'public, max-age=0, must-revalidate')
- setHeader(
+ setResponseHeader('Cache-Control', 'public, max-age=0, must-revalidate')
+ setResponseHeader(
'CDN-Cache-Control',
'max-age=1800, stale-while-revalidate=1800, durable'
)
diff --git a/src/utils/env.ts b/src/utils/env.ts
index 7da4c8491..c7c358457 100644
--- a/src/utils/env.ts
+++ b/src/utils/env.ts
@@ -11,8 +11,14 @@ const serverEnvSchema = z.object({
})
const clientEnvSchema = z.object({
- VITE_CONVEX_SITE_URL: z.string().optional(),
- VITE_CONVEX_URL: z.string().optional(),
+ VITE_CONVEX_SITE_URL: z
+ .string()
+ .optional()
+ .default('http://upbeat-greyhound-631.convex.site'),
+ VITE_CONVEX_URL: z
+ .string()
+ .optional()
+ .default('http://upbeat-greyhound-631.convex.cloud'),
URL: z.string().optional(),
})
diff --git a/vite.config.ts b/vite.config.ts
index be8059e1d..e72bb7c99 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -5,6 +5,8 @@ import tsConfigPaths from 'vite-tsconfig-paths'
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
import tailwindcss from '@tailwindcss/vite'
import { analyzer } from 'vite-bundle-analyzer'
+import viteReact from '@vitejs/plugin-react'
+import netlify from '@netlify/vite-plugin-tanstack-start'
export default defineConfig({
server: {
@@ -15,11 +17,9 @@ export default defineConfig({
projects: ['./tsconfig.json'],
}),
- tanstackStart({
- tsr: {
- verboseFileRoutes: false,
- },
- }),
+ tanstackStart(),
+ netlify(),
+ viteReact(),
sentryVitePlugin({
authToken: process.env.SENTRY_AUTH_TOKEN,