import vinext from "vinext"; import { defineConfig } from "vite"; import hostingConfig from "./.openai/hosting.json"; import { sites } from "./build/sites-vite-plugin"; const SITE_CREATOR_PLACEHOLDER_DATABASE_ID = "00000000-0000-4000-8000-000000000000"; const { d1, r2 } = hostingConfig; // macOS Seatbelt blocks FSEvents, so Codex previews need polling for HMR. const isCodexSeatbeltSandbox = process.env.CODEX_SANDBOX === "seatbelt"; // Vite 8 blocks unknown Host headers by default. In dev (incl. Coolify // proxying a public domain to the dev server) the public hosts must be // allow-listed. Accepts a comma-separated list, or "*"/"true" for any host. function parseAllowedHosts(raw: string | undefined): boolean | string[] | undefined { if (!raw) return undefined; const value = raw.trim(); if (!value || value === "*" || value === "true") return true; return value .split(",") .map((host) => host.trim()) .filter(Boolean); } const localBindingConfig = { main: "./worker/index.ts", compatibility_flags: ["nodejs_compat"], d1_databases: d1 ? [ { binding: d1, database_name: "site-creator-d1", database_id: SITE_CREATOR_PLACEHOLDER_DATABASE_ID, }, ] : [], r2_buckets: r2 ? [ { binding: r2, bucket_name: "site-creator-r2", }, ] : [], }; export default defineConfig(async () => { // Keep Wrangler and Miniflare state project-local. These are non-secret tool // settings; application environment belongs in ignored `.env*` files. process.env.WRANGLER_WRITE_LOGS ??= "false"; process.env.WRANGLER_LOG_PATH ??= ".wrangler/logs"; process.env.MINIFLARE_REGISTRY_PATH ??= ".wrangler/registry"; // Wrangler snapshots its log path while the Cloudflare plugin is imported. const { cloudflare } = await import("@cloudflare/vite-plugin"); const allowedHosts = parseAllowedHosts(process.env.VITE_ALLOWED_HOSTS); return { server: isCodexSeatbeltSandbox || allowedHosts ? { ...(isCodexSeatbeltSandbox ? { watch: { useFsEvents: false, usePolling: true } } : {}), ...(allowedHosts ? { allowedHosts } : {}), } : undefined, plugins: [ vinext(), sites(), cloudflare({ viteEnvironment: { name: "rsc", childEnvironments: ["ssr"] }, config: localBindingConfig, }), ], }; });