UNPKG

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

69 lines (55 loc) 1.87 kB
import {type UserViteConfig} from '@sanity/cli' import chalk from 'chalk' import {createServer} from 'vite' import {debug} from './debug' import {extendViteConfigWithUserConfig, getViteConfig} from './getViteConfig' import {writeSanityRuntime} from './runtime' export interface DevServerOptions { cwd: string basePath: string staticPath: string httpPort: number httpHost?: string projectName?: string reactStrictMode: boolean vite?: UserViteConfig } export interface DevServer { close(): Promise<void> } export async function startDevServer(options: DevServerOptions): Promise<DevServer> { const {cwd, httpPort, httpHost, basePath, reactStrictMode, vite: extendViteConfig} = options const startTime = Date.now() debug('Writing Sanity runtime files') await writeSanityRuntime({cwd, reactStrictMode, watch: true, basePath}) debug('Resolving vite config') const mode = 'development' let viteConfig = await getViteConfig({ basePath, mode: 'development', server: {port: httpPort, host: httpHost}, cwd, }) // Extend Vite configuration with user-provided config if (extendViteConfig) { viteConfig = await extendViteConfigWithUserConfig( {command: 'serve', mode}, viteConfig, extendViteConfig, ) } debug('Creating vite server') const server = await createServer(viteConfig) const info = server.config.logger.info debug('Listening on specified port') await server.listen() const startupDuration = Date.now() - startTime const url = `http://${httpHost || 'localhost'}:${httpPort || '3333'}${basePath}` info( `Sanity Studio ` + `using ${chalk.cyan(`vite@${require('vite/package.json').version}`)} ` + `ready in ${chalk.cyan(`${Math.ceil(startupDuration)}ms`)} ` + `and running at ${chalk.cyan(url)}`, ) return {close: () => server.close()} }