import * as proxyServer from "http-proxy" ; import * as Koa from "koa" ; import * as yaml from "js-yaml" ; import * as fs from "fs-extra" ; import * as path from "path" ; import { paths } from "./path" ; export interface ProxyConfig$ extends proxyServer . ServerOptions { rewrite ? ( path ) : string ; cookieDomainRewrite ? : boolean ; logs ? : boolean ; } export interface BodyParserConfig$ { enableTypes ? : string [ ] ; encode ? : string ; formLimit ? : string ; jsonLimit ? : string ; strict ? : boolean ; detectJSON ? : ( ctx : Koa . Context ) => boolean ; extendTypes ? : { json ? : string [ ] ; form ? : string [ ] ; text ? : string [ ] ; } ; onerror ? : ( err : Error , ctx : Koa . Context ) => void ; } export interface ViewConfig$ { extension ? : string ; options ? : any ; map ? : any ; engineSource ? : any ; } export type originHandler = ( ctx : Koa . Request ) => string ; export interface CorsConfig$ { origin ? : string | boolean | originHandler ; expose ? : string [ ] ; maxAge ? : number ; credentials ? : boolean ; methods ? : string [ ] ; headers ? : string [ ] ; } export interface StaticFileServerConfig$ { mount : string ; maxage ? : number ; hidden ? : boolean ; index ? : string ; defer ? : boolean ; gzip ? : boolean ; br ? : boolean ; setHeaders ? ( res , path , stats ) : any ; extensions ? : boolean ; } export interface Config$ { enabled ? : { static ? : boolean | StaticFileServerConfig$ ; proxy ? : { mount : string ; options : ProxyConfig$ ; } ; cors ? : boolean | CorsConfig$ ; bodyParser ? : boolean | BodyParserConfig$ ; view ? : boolean | ViewConfig$ ; } ; } /**
 * load config
 */ export async function loadConfig ( ) { const defaultConfigPath = path . join ( paths . config , "default.config.yaml" ) ; const envConfigPath = path . join ( paths . config , process . env . NODE_ENV + ".config.yaml" ) ; const defaultConfig = ( await fs . pathExists ( defaultConfigPath ) ) ? yaml . safeLoad ( await fs . readFile ( defaultConfigPath , "utf8" ) ) : { } ; const envConfig = ( await fs . pathExists ( envConfigPath ) ) ? yaml . safeLoad ( fs . readFileSync ( envConfigPath , "utf8" ) ) : { } ; const config = Object . assign ( { } , defaultConfig , envConfig ) ; return config ; }