f2e-server3
Version:
f2e-server 3.0
74 lines (66 loc) • 2.88 kB
text/typescript
import engine from "./server-engine"
import { F2EConfig } from "./interface"
import { getConfigEvents, getConfigResult } from "./utils/config"
import logger from "./utils/logger"
import createMemoryTree from "./memory-tree"
import { exit } from "node:process"
import * as _ from './utils/misc'
import { server_all } from "./server"
import { ServerIP } from "./utils/misc"
export * from "./interface"
export * from "./utils"
export * from './routes'
export * from './memory-tree/interface'
export * from './middlewares/interface'
export * from './middlewares/auth'
export * from './middlewares/routes'
const { App, SSLApp } = engine
export const createBuilder = async (options: F2EConfig) => {
const beginTime = Date.now()
const conf = getConfigResult(options)
const { root, watch, namehash, dest } = conf
const events = await getConfigEvents(options)
const { onMemoryInit, onMemoryLoad, buildFilter, watchFilter, outputFilter, onGet, onSet, buildWatcher } = events
const memoryTree = createMemoryTree({
root, dest: dest, watch, namehash,
buildFilter, watchFilter, outputFilter, onGet, onSet, buildWatcher
})
try {
await onMemoryInit(memoryTree.store)
await memoryTree.input("")
await onMemoryLoad(memoryTree.store)
await memoryTree.output("")
logger.info(`Build success in ${Date.now() - beginTime}ms`)
} catch (e) {
logger.error(e)
exit(1)
}
return { conf, events, memoryTree }
}
export const createServer = async (options: F2EConfig) => {
const startTime = Date.now()
const conf = getConfigResult(options)
const { root, watch, dest, mode, namehash, port, host, ssl, onServerCreate } = conf
if (mode === 'build') {
return createBuilder(options)
}
const events = await getConfigEvents(options)
const { onMemoryLoad, onMemoryInit, buildFilter, watchFilter, outputFilter, onGet, onSet, buildWatcher } = events
const memoryTree = createMemoryTree(mode === 'dev' ? {
root, watch, namehash, dest,
buildFilter, watchFilter, outputFilter, onGet, onSet, buildWatcher
} : { root, buildFilter }); // prod模式下,仅加载 buildFilter
await onMemoryInit(memoryTree.store)
await memoryTree.input("")
await onMemoryLoad(memoryTree.store)
logger.debug('server init: ' + (Date.now() - startTime) + 'ms')
watch && memoryTree.watch()
const app = ssl ? SSLApp(ssl) : App()
app.listen(host, port, function () {
logger.debug(`Server start on ${conf.ssl ? 'https' : 'http'}://${host === '0.0.0.0' ? ServerIP : host}:${conf.port}`)
onServerCreate(app, conf)
})
.any('/*', server_all(conf, events, memoryTree))
return { app, conf, events, memoryTree }
}
export default createServer