import { Settings } from '@material-ui/icons'; import { randomBytes } from 'crypto'; import { existsSync, readFileSync, writeFileSync } from 'fs'; export type Setting = { path: string[], localmode: boolean, guest: boolean, jwt_secretkey: string, port:number, mode:"development"|"production", cli:boolean, } const default_setting:Setting = { path:[], localmode: true, guest:false, jwt_secretkey:"itsRandom", port:8080, mode:"production", cli:false } let setting: null|Setting = null; const setEmptyToDefault = (target:any,default_table:Setting)=>{ let diff_occur = false; for(const key in default_table){ if(key === undefined || key in target){ continue; } target[key] = default_table[key as keyof Setting]; diff_occur = true; } return diff_occur; } export const read_setting_from_file = ()=>{ let ret = existsSync("settings.json") ? JSON.parse(readFileSync("settings.json",{encoding:"utf8"})) : {}; const partial_occur = setEmptyToDefault(ret,default_setting); if(partial_occur){ writeFileSync("settings.json",JSON.stringify(ret)); } return ret as Setting; } export function get_setting():Setting{ if(setting === null){ setting = read_setting_from_file(); const env = process.env.NODE_ENV || 'development'; if(env != "production" && env != "development"){ throw new Error("process unknown value in NODE_ENV: must be either \"development\" or \"production\""); } setting.mode = env || setting.mode; } return setting; }