import { fileURLToPath } from "node:url"; import { tanstackStart } from "@tanstack/react-start/plugin/vite"; import { defineConfig, loadEnv } from "vite"; import tsConfigPaths from "vite-tsconfig-paths"; import viteReact from "@vitejs/plugin-react"; import tailwindcss from "@tailwindcss/vite"; import { cloudflare } from "@cloudflare/vite-plugin"; import { devtools } from "@tanstack/devtools-vite"; export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ""); const port = process.env.PORT ? Number(process.env.PORT) : env.PORT ? Number(env.PORT) : 3001; const showDevtools = env.VITE_SHOW_DEVTOOLS !== "false"; const allowedHosts = [ env.ALLOWED_HOST, env.BETTER_AUTH_URL ? new URL(env.BETTER_AUTH_URL).hostname : undefined, ].filter((host): host is string => Boolean(host)); const emitSourcemaps = env.POSTHOG_SOURCEMAPS === "true"; return { resolve: { alias: { // TODO: Remove this workaround once @cloudflare/think stops eagerly // importing just-bash at module init // (https://github.com/cloudflare/agents/issues/1673). // // just-bash (plus its turndown → @mixmark-io/domino chain, ~30 MB of // source) is only used by Think's workspace bash tool, which SAM // disables — but the eager import drags it into the main worker's // startup module graph, inflating every isolate's baseline heap // toward the 128 MB limit (production OOM bursts on unrelated // routes). Alias it to a throwing stub so it never ships. "just-bash": fileURLToPath( new URL("./src/server/lib/just-bash-stub.ts", import.meta.url), ), }, }, envPrefix: [ "VITE_", "AUTH_MODE", "BYPASS_EMAIL_VERIFICATION", "POSTHOG_PUBLIC_KEY", "POSTHOG_HOST", "TURNSTILE_SITE_KEY", ], server: { allowedHosts, port, }, preview: { allowedHosts, port, }, build: { sourcemap: emitSourcemaps, outDir: emitSourcemaps ? "dist-sourcemaps" : "dist", }, plugins: [ showDevtools ? devtools({ consolePiping: { enabled: true, levels: ["log", "warn", "error", "info", "debug"], }, }) : null, cloudflare({ inspectorPort: false, viteEnvironment: { name: "ssr" } }), tsConfigPaths(), tanstackStart(), viteReact(), tailwindcss(), ], }; });