10export const resolvePublicDir = (importMetaUrl: string, publicDir?: string) => { 12 return publicDir?.startsWith('/') ? publicDir : pathJoin(epDir, publicDir || 'public') 15export const setupStaticSiteCtx = ({importMetaUrl, publicDir, svcPortNo, ...props}: {importMetaUrl: string, publicDir?: string, svcPortNo: number, [k: string]: any}) => { 16 const resolvedPublicDir = resolvePublicDir(importMetaUrl, publicDir) 17 const cfg = {...props, importMetaUrl, publicDir: resolvedPublicDir, svcPortNo} 18 appCfgCtx.enterWith(cfg as AppCfg & {publicDir: string}) 22export const shouldReturnConfig = (importMetaUrl: string) => importMetaUrl && !isDirectlyRun(importMetaUrl) 24export const staticSiteDevserver = async (serveDir?: string) => { 25 const appCfg = getAppCfg() as AppCfg & {publicDir?: string} 26 const {publicDir, svcPortNo = 3000} = appCfg 27 const dir = serveDir || publicDir 31 const cmd = `npx http-server ${dir} -p ${svcPortNo} -a 127.0.0.1 -c-1` 33 const ac = new AbortController() 34 const cleanup = () => { ac.abort(); process.exit(0) } 35 process.on('SIGINT', cleanup) 36 process.on('SIGTERM', cleanup) 38 const {isSuccess, stderr} = await liveSpawn({cmd, signal: ac.signal, noOutCmd: true}) 45staticSiteDevserver.cliDescript = 'start local http-server' 46staticSiteDevserver.cliSchema = killExistingCliSchema