Files
supabase/apps/studio/api/server.js
T
Alaister Young b204e56fc7 feat(studio): gate TanStack Vercel config behind STUDIO_FRAMEWORK env var
vercel.ts and api/server.js are read by Vercel for every deploy in this
repo regardless of which framework preset is selected, which means the
TanStack-flavoured rewrites, `framework: null`, and `dist/server` import
would clobber the Next.js prod build. Default both to a no-op shape and
opt in to the TanStack behaviour with STUDIO_FRAMEWORK=tanstack — set in
the branch's dev/build/start/preview scripts and on the TanStack Vercel
project's dashboard env vars.
2026-05-20 10:54:33 +08:00

26 lines
1.3 KiB
JavaScript

// STUDIO_FRAMEWORK gates whether this function actually serves the TanStack
// SSR handler. Vercel auto-detects every file under /api as a Function
// regardless of the framework preset (vercel.com/docs/functions), so we
// can't keep this file from being deployed in the Next.js prod build — we
// just make it inert when the env var is unset.
const isTanstack = process.env.STUDIO_FRAMEWORK === 'tanstack'
// Computed path keeps `dist/server/server.js` out of Vercel's function
// bundler's static analysis. In the Next.js prod deploy the `dist/` tree
// doesn't exist, but Vercel still bundles this file because it lives under
// `api/`. With the .join() the bundler treats the import as runtime-only
// and the missing dist/ isn't a build error. In TanStack mode the SSR
// bundle is shipped into the function via the `functions['api/server.js']
// .includeFiles` config in vercel.ts.
const tanstackEntry = ['..', 'dist', 'server', 'server.js'].join('/')
const handler = isTanstack
? (await import(tanstackEntry)).default
: { fetch: () => new Response('Not Found', { status: 404 }) }
// Vercel's Web API handler convention: export an object with `fetch(request)`.
// TanStack's server build is already shaped that way — default-export it
// verbatim and Vercel hands us a real Web Request.
// eslint-disable-next-line no-restricted-exports
export default handler