mirror of
https://github.com/supabase/supabase.git
synced 2026-05-08 01:40:13 -04:00
0d761b0434
<img width="2892" height="2342" alt="image" src="https://github.com/user-attachments/assets/7e08929d-abc3-4397-b89d-99cc52d8190e" /> This is the third and final PR to complete the new connect sheet. First: https://github.com/supabase/supabase/pull/42367 Second: https://github.com/supabase/supabase/pull/42373 This re-adds the Direct, ORM, MCP tabs and their content, including via connect.schema. To test: - Flag will be enabled on all staging projects - Click connect and notice new Sheet - Click all tabs and ensure content is correct <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Multi-mode connection flow with mode selector and icons (framework, direct DB, ORM, MCP) * New framework/variant/library selector, richer connection guides and install steps (Prisma, Drizzle, direct) * MCP onboarding flows (Cursor, Codex, Claude Code) with server/auth commands and configuration UIs * **Refactor** * Connect schema and state rebuilt to be mode-driven with improved step resolution and cascading state updates * **Tests** * Expanded unit tests covering framework resolution, connect flows, and mode behaviors * **Chores** * ESLint ignores updated for content files <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
136 lines
4.2 KiB
TypeScript
136 lines
4.2 KiB
TypeScript
type ConnectionStrings = {
|
|
psql: string
|
|
uri: string
|
|
golang: string
|
|
jdbc: string
|
|
dotnet: string
|
|
nodejs: string
|
|
php: string
|
|
python: string
|
|
sqlalchemy: string
|
|
}
|
|
|
|
export const getConnectionStrings = ({
|
|
connectionInfo,
|
|
poolingInfo,
|
|
metadata,
|
|
}: {
|
|
connectionInfo: {
|
|
db_user: string
|
|
db_port: number
|
|
db_host: string
|
|
db_name: string
|
|
}
|
|
poolingInfo?: {
|
|
connectionString: string
|
|
db_user: string
|
|
db_port: number
|
|
db_host: string
|
|
db_name: string
|
|
}
|
|
metadata: {
|
|
projectRef?: string
|
|
pgVersion?: string
|
|
}
|
|
}): {
|
|
direct: ConnectionStrings
|
|
pooler: ConnectionStrings
|
|
} => {
|
|
const isMd5 = poolingInfo?.connectionString.includes('options=reference')
|
|
const { projectRef } = metadata
|
|
const password = '[YOUR-PASSWORD]'
|
|
|
|
// Direct connection variables
|
|
const directUser = connectionInfo.db_user
|
|
const directPort = connectionInfo.db_port
|
|
const directHost = connectionInfo.db_host
|
|
const directName = connectionInfo.db_name
|
|
|
|
// Pooler connection variables
|
|
const poolerUser = poolingInfo?.db_user
|
|
const poolerPort = poolingInfo?.db_port
|
|
const poolerHost = poolingInfo?.db_host
|
|
const poolerName = poolingInfo?.db_name
|
|
|
|
// Direct connection strings
|
|
const directPsqlString = isMd5
|
|
? `psql "postgresql://${directUser}:${password}@${directHost}:${directPort}/${directName}"`
|
|
: `psql -h ${directHost} -p ${directPort} -d ${directName} -U ${directUser}`
|
|
|
|
const directUriString = `postgresql://${directUser}:${password}@${directHost}:${directPort}/${directName}`
|
|
|
|
const directGolangString = `DATABASE_URL=${directUriString}`
|
|
|
|
const directJdbcString = `jdbc:postgresql://${directHost}:${directPort}/${directName}?user=${directUser}&password=${password}`
|
|
|
|
// User Id=${directUser};Password=${password};Server=${directHost};Port=${directPort};Database=${directName}`
|
|
const directDotNetString = `{
|
|
"ConnectionStrings": {
|
|
"DefaultConnection": "Host=${directHost};Database=${directName};Username=${directUser};Password=${password};SSL Mode=Require;Trust Server Certificate=true"
|
|
}
|
|
}`
|
|
|
|
// `User Id=${poolerUser};Password=${password};Server=${poolerHost};Port=${poolerPort};Database=${poolerName}${isMd5 ? `;Options='reference=${projectRef}'` : ''}`
|
|
const poolerDotNetString = `{
|
|
"ConnectionStrings": {
|
|
"DefaultConnection": "User Id=${poolerUser};Password=${password};Server=${poolerHost};Port=${poolerPort};Database=${poolerName}${isMd5 ? `;Options='reference=${projectRef}'` : ''}"
|
|
}
|
|
}`
|
|
|
|
const directNodejsString = `DATABASE_URL=${directUriString}`
|
|
|
|
// Pooler connection strings
|
|
const poolerPsqlString = isMd5
|
|
? `psql "postgresql://${poolerUser}:${password}@${poolerHost}:${poolerPort}/${poolerName}?options=reference%3D${projectRef}"`
|
|
: `psql -h ${poolerHost} -p ${poolerPort} -d ${poolerName} -U ${poolerUser}`
|
|
|
|
const poolerUriString = poolingInfo?.connectionString ?? ''
|
|
|
|
const nodejsPoolerUriString = `DATABASE_URL=${poolingInfo?.connectionString ?? ''}`
|
|
|
|
const poolerGolangString = `user=${poolerUser}
|
|
password=${password}
|
|
host=${poolerHost}
|
|
port=${poolerPort}
|
|
dbname=${poolerName}${isMd5 ? `options=reference=${projectRef}` : ''}`
|
|
|
|
const poolerJdbcString = `jdbc:postgresql://${poolerHost}:${poolerPort}/${poolerName}?user=${poolerUser}${isMd5 ? `&options=reference%3D${projectRef}` : ''}&password=${password}`
|
|
|
|
const sqlalchemyString = `user=${directUser}
|
|
password=${password}
|
|
host=${directHost}
|
|
port=${directPort}
|
|
dbname=${directName}`
|
|
|
|
const poolerSqlalchemyString = `user=${poolerUser}
|
|
password=${password}
|
|
host=${poolerHost}
|
|
port=${poolerPort}
|
|
dbname=${poolerName}`
|
|
|
|
return {
|
|
direct: {
|
|
psql: directPsqlString,
|
|
uri: directUriString,
|
|
golang: directGolangString,
|
|
jdbc: directJdbcString,
|
|
dotnet: directDotNetString,
|
|
nodejs: directNodejsString,
|
|
php: directGolangString,
|
|
python: directGolangString,
|
|
sqlalchemy: sqlalchemyString,
|
|
},
|
|
pooler: {
|
|
psql: poolerPsqlString,
|
|
uri: poolerUriString,
|
|
golang: poolerGolangString,
|
|
jdbc: poolerJdbcString,
|
|
dotnet: poolerDotNetString,
|
|
nodejs: nodejsPoolerUriString,
|
|
php: poolerGolangString,
|
|
python: poolerGolangString,
|
|
sqlalchemy: poolerSqlalchemyString,
|
|
},
|
|
}
|
|
}
|