import { type CodeBlockLang } from 'ui-patterns/CodeBlock' import { DOCS_URL } from '@/lib/constants' export type DatabaseConnectionType = | 'uri' | 'psql' | 'golang' | 'jdbc' | 'dotnet' | 'nodejs' | 'php' | 'python' | 'sqlalchemy' export const DATABASE_CONNECTION_TYPES: { id: DatabaseConnectionType label: string contentType: 'input' | 'code' lang: CodeBlockLang fileTitle: string | undefined }[] = [ { id: 'uri', label: 'URI', contentType: 'input', lang: 'bash', fileTitle: undefined }, { id: 'psql', label: 'PSQL', contentType: 'code', lang: 'bash', fileTitle: undefined }, { id: 'golang', label: 'Golang', contentType: 'code', lang: 'go', fileTitle: '.env' }, { id: 'jdbc', label: 'JDBC', contentType: 'input', lang: 'bash', fileTitle: undefined }, { id: 'dotnet', label: '.NET', contentType: 'code', lang: 'csharp', fileTitle: 'appsettings.json', }, { id: 'nodejs', label: 'Node.js', contentType: 'code', lang: 'js', fileTitle: '.env' }, { id: 'php', label: 'PHP', contentType: 'code', lang: 'php', fileTitle: '.env' }, { id: 'python', label: 'Python', contentType: 'code', lang: 'python', fileTitle: '.env' }, { id: 'sqlalchemy', label: 'SQLAlchemy', contentType: 'code', lang: 'python', fileTitle: '.env' }, ] export const CONNECTION_PARAMETERS = { host: { key: 'host', description: 'The hostname of your database', }, port: { key: 'port', description: 'Port number for the connection', }, database: { key: 'database', description: 'Default database name', }, user: { key: 'user', description: 'Database user', }, pool_mode: { key: 'pool_mode', description: 'Connection pooling behavior', }, } as const export type ConnectionType = { key: string icon: string label: string guideLink?: string children: ConnectionType[] files?: { name: string content: string }[] } export const FRAMEWORKS: ConnectionType[] = [ { key: 'nextjs', label: 'Next.js', icon: 'nextjs', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/nextjs`, children: [ { key: 'app', label: 'App Router', icon: '', children: [ { key: 'brivenjs', label: 'briven-js', icon: 'briven', children: [], }, ], }, { key: 'pages', label: 'Pages Router', icon: '', children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, ], }, { key: 'remix', label: 'Remix', icon: 'remix', guideLink: `${DOCS_URL}/guides/auth/server-side/creating-a-client?framework=remix&environment=remix-loader`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'react', label: 'React', icon: 'react', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/reactjs`, children: [ { key: 'vite', label: 'Vite', icon: 'vite', children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'create-react-app', label: 'Create React App', icon: 'react', children: [ { key: 'brivenjs', label: 'briven-js', icon: 'briven', children: [], }, ], }, ], }, { key: 'nuxt', label: 'Nuxt', icon: 'nuxt', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/nuxtjs`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'vuejs', label: 'Vue.JS', icon: 'vuejs', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/vue`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'sveltekit', label: 'SvelteKit', icon: 'sveltekit', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/sveltekit`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'solidjs', label: 'Solid.js', icon: 'solidjs', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/solidjs`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'astro', label: 'Astro', icon: 'astro', guideLink: 'https://docs.astro.build/en/guides/backend/briven/', children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'refine', label: 'Refine', icon: 'refine', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/refine`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'tanstack', label: 'TanStack Start', icon: 'tanstack', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/tanstack`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'flask', label: 'Flask (Python)', icon: 'python', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/flask`, children: [ { key: 'brivenpy', label: 'briven-py', children: [], icon: 'briven', }, ], }, ] export const MOBILES: ConnectionType[] = [ { key: 'exporeactnative', label: 'Expo React Native', icon: 'expo', guideLink: `${DOCS_URL}/guides/getting-started/quickstarts/expo-react-native`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'flutter', label: 'Flutter', icon: 'flutter', guideLink: `${DOCS_URL}/guides/getting-started/tutorials/with-flutter`, children: [ { key: 'brivenflutter', label: 'briven-flutter', children: [], icon: 'briven', }, ], }, { key: 'ionicreact', label: 'Ionic React', icon: 'react', guideLink: `${DOCS_URL}/guides/getting-started/tutorials/with-ionic-react`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, { key: 'swift', label: 'Swift', icon: 'swift', guideLink: `${DOCS_URL}/guides/getting-started/tutorials/with-swift`, children: [ { key: 'brivenswift', label: 'briven-swift', children: [], icon: 'briven', }, ], }, { key: 'androidkotlin', label: 'Android Kotlin', icon: 'kotlin', guideLink: `${DOCS_URL}/guides/getting-started/tutorials/with-kotlin`, children: [ { key: 'brivenkt', label: 'briven-kt', children: [], icon: 'briven', }, ], }, { key: 'ionicangular', label: 'Ionic Angular', icon: 'ionic-angular', guideLink: `${DOCS_URL}/guides/getting-started/tutorials/with-ionic-angular`, children: [ { key: 'brivenjs', label: 'Briven-js', children: [], icon: 'briven', }, ], }, ] export const ORMS: ConnectionType[] = [ { key: 'prisma', label: 'Prisma', icon: 'prisma', guideLink: 'https://supabase.com/partners/integrations/prisma', children: [], }, { key: 'drizzle', label: 'Drizzle', icon: 'drizzle', guideLink: `${DOCS_URL}/guides/database/connecting-to-postgres#connecting-with-drizzle`, children: [], }, ] export const CONNECTION_TYPES = [ { key: 'direct', label: 'Connection String', obj: [] }, { key: 'frameworks', label: 'App Frameworks', obj: FRAMEWORKS }, { key: 'mobiles', label: 'Mobile Frameworks', obj: MOBILES }, { key: 'orms', label: 'ORMs', obj: ORMS }, { key: 'api-keys', label: 'API Keys', obj: [] }, { key: 'mcp', label: 'MCP', obj: [] }, ] export const PGBOUNCER_ENABLED_BUT_NO_IPV4_ADDON_TEXT = 'Purchase IPv4 add-on or use Shared Pooler if on a IPv4 network' export const IPV4_ADDON_TEXT = 'Connections are IPv4 proxied with IPv4 add-on' export type ConnectionStringMethod = 'direct' | 'transaction' | 'session' export const connectionStringMethodOptions: Record< ConnectionStringMethod, { value: string; label: string; description: string } > = { direct: { value: 'direct', label: 'Direct connection', description: 'Ideal for applications with persistent and long-lived connections, such as those running on virtual machines or long-standing containers.', }, transaction: { value: 'transaction', label: 'Transaction pooler', description: 'Ideal for stateless applications like serverless functions where each interaction with Postgres is brief and isolated.', }, session: { value: 'session', label: 'Session pooler', description: 'Only recommended as an alternative to Direct Connection, when connecting via an IPv4 network.', }, }