mirror of
https://github.com/supabase/supabase.git
synced 2026-06-03 03:11:35 +08:00
39 lines
1.7 KiB
TypeScript
39 lines
1.7 KiB
TypeScript
import { useMemo } from 'react'
|
|
|
|
import { useDeploymentModeQuery } from '@/data/config/deployment-mode-query'
|
|
import { IS_PLATFORM } from '@/lib/constants'
|
|
|
|
export type DeploymentMode = {
|
|
isPlatform: boolean
|
|
isCli: boolean
|
|
isSelfHosted: boolean
|
|
}
|
|
|
|
/**
|
|
* Resolves the current Studio deployment mode (platform / CLI / self-hosted).
|
|
*
|
|
* `isPlatform` is the build-time `IS_PLATFORM` constant — prefer that constant
|
|
* directly when you only need the platform-vs-not split (build-time, server-
|
|
* side, or module-scope). Reach for this hook when you need to distinguish
|
|
* CLI from self-hosted at runtime, which is something `IS_PLATFORM` can't
|
|
* express on its own.
|
|
*
|
|
* CLI vs self-hosted is resolved server-side by /platform/deployment-mode
|
|
* (reading `CURRENT_CLI_VERSION`). The underlying query is disabled on
|
|
* platform builds, so the hook is a no-op there.
|
|
*
|
|
* The return is memoized on the primitive flags so consumers can safely list
|
|
* the whole `DeploymentMode` object in their `useMemo`/`useCallback` deps.
|
|
*/
|
|
export function useDeploymentMode(): DeploymentMode {
|
|
const { data } = useDeploymentModeQuery()
|
|
// Default to CLI (`?? true`) during the loading window. `'direct'` is the only
|
|
// method valid in every environment, so a self-hosted user briefly seeing CLI
|
|
// defaults lands on a valid (if not preferred) choice — whereas a CLI user
|
|
// briefly seeing self-hosted defaults gets `connectionMethod` pinned to
|
|
// `'session'`, which isn't a valid CLI method.
|
|
const isCli = !IS_PLATFORM && (data?.is_cli_mode ?? true)
|
|
const isSelfHosted = !IS_PLATFORM && !isCli
|
|
return useMemo(() => ({ isPlatform: IS_PLATFORM, isCli, isSelfHosted }), [isCli, isSelfHosted])
|
|
}
|