🌳
pt0/deployF/staticSiteF/staticSiteBaseAI.mts
4import { appCfgCtx, getAppCfg, type AppCfg } from '../k8sF/ctxF/appCfgCtxF.mts'
10export const resolvePublicDir = (importMetaUrl: string, publicDir?: string) => {
11 const epDir = getParentDir(getImportMetaUrlPath(importMetaUrl))
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})
19 return cfg
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
29 await maybeKillExisting(svcPortNo)
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})
40 if (!isSuccess) {
42 process.exit(1)
43 }
45staticSiteDevserver.cliDescript = 'start local http-server'
46staticSiteDevserver.cliSchema = killExistingCliSchema
48export { getAction }