| 1234567891011121314151617181920212223242526272829303132333435363738 |
- 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])
- }
|