sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
80 lines (68 loc) • 2.4 kB
text/typescript
import {
type CliCommandArguments,
type CliCommandContext,
type CliConfig,
type CliOutputter,
} from '@sanity/cli'
import path from 'path'
import {type DevServerOptions, startDevServer} from '../../server/devServer'
import {checkRequiredDependencies} from '../../util/checkRequiredDependencies'
import {checkStudioDependencyVersions} from '../../util/checkStudioDependencyVersions'
import {getSharedServerConfig, gracefulServerDeath} from '../../util/servers'
import {getTimer} from '../../util/timing'
export interface StartDevServerCommandFlags {
host?: string
port?: string
}
export default async function startSanityDevServer(
args: CliCommandArguments<StartDevServerCommandFlags>,
context: CliCommandContext,
): Promise<void> {
const timers = getTimer()
const flags = args.extOptions
const {output, workDir, cliConfig} = context
timers.start('checkStudioDependencyVersions')
checkStudioDependencyVersions(workDir)
timers.end('checkStudioDependencyVersions')
// If the check resulted in a dependency install, the CLI command will be re-run,
// thus we want to exit early
if ((await checkRequiredDependencies(context)).didInstall) {
return
}
// Try to load CLI configuration from sanity.cli.(js|ts)
const config = getDevServerConfig({flags, workDir, cliConfig, output})
try {
await startDevServer(config)
} catch (err) {
gracefulServerDeath('dev', config.httpHost, config.httpPort, err)
}
}
function getDevServerConfig({
flags,
workDir,
cliConfig,
output,
}: {
flags: StartDevServerCommandFlags
workDir: string
cliConfig?: CliConfig
output: CliOutputter
}): DevServerOptions {
const configSpinner = output.spinner('Checking configuration files...')
const baseConfig = getSharedServerConfig({flags, workDir, cliConfig})
configSpinner.succeed()
const env = process.env // eslint-disable-line no-process-env
const reactStrictMode = env.SANITY_STUDIO_REACT_STRICT_MODE
? env.SANITY_STUDIO_REACT_STRICT_MODE === 'true'
: Boolean(cliConfig?.reactStrictMode)
if (env.SANITY_STUDIO_BASEPATH && cliConfig?.project?.basePath) {
output.warn(
`Overriding configured base path (${cliConfig.project.basePath}) with value from environment variable (${env.SANITY_STUDIO_BASEPATH})`,
)
}
return {
...baseConfig,
staticPath: path.join(workDir, 'static'),
reactStrictMode,
}
}