import express, { Router } from "express"; import AppMaster from "../master"; import AppMasterMiddleware,{AppMasterMiddlewareConfig} from "../middleware"; import * as ob from "@onebro/ob-common"; export type AppMasterRouterConstructor = (m:AppMaster) => Promise; export const AppMasterRouter = async (config:AppMasterMiddlewareConfig,main:AppMasterRouterConstructor,m:AppMaster) => { const {db,events} = m; const app = express(); app.disable("x-powered-by"); const middleware = await AppMasterMiddleware.init(); if(config){ const custom = config.custom; const customNames = Object.keys(custom); const setCustomBefore = (k:string) => { customNames.forEach(s => { const handler = custom[s]; handler.before == k?app.use(handler.func(m)):null;});}; const setCustomAfter = (k:string) => { customNames.forEach(s => { const handler = custom[s]; handler.after == k?app.use(handler.func(m)):null;});}; for(const k in config){ if(k !== "custom"){ if(k == "main"){app.use(m.vars.entry,main?await main(m):Router());} else{ const opts:any = config[k as keyof AppMasterMiddlewareConfig]; const setter = middleware[k as keyof AppMasterMiddleware]; setCustomBefore(k); await setter?setter(app,opts,m):null; setCustomAfter(k);}}}} await middleware.pageNotFound(app,null,m); await middleware.finalHandler(app,null,m); //ob.ok("AppMasterRouter:",true); return app;}; export default AppMasterRouter;