{"version":3,"sources":["jsdelivr-header.js","/npm/nuva@0.1.7/server.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,IAAI,GAAK,QAAQ,MACb,IAAM,QAAQ,mBACd,KAAO,QAAQ,iBACf,KAAO,QAAQ,QACf,KAAO,QAAQ,QACf,IAAM,QAAQ,OAEd,KAAO,CACV,QAAU,YACV,MAAQ,kBACR,OAAS,YACT,OAAS,WACT,OAAS,eACT,OAAS,YACT,OAAU,cAKP,GAAK,CACR,SAAW,oBACX,KAAO,UACP,UAAW,gBAwCZ,SAAS,oBAAoB,GAC5B,IAAI,EAAO,cAAc,GACrB,EAAO,GAAG,aAAa,EAAK,SAAS,aAAa,WAEtD,OADa,IAAI,OAAO,EAAK,EAE9B,CAEA,SAAS,cAAc,GACtB,IAAI,EAAS,CACZ,QAAU,GACV,KAAO,GAAG,KACV,KAAO,GAAG,UACV,SAAU,GAAG,SACb,QAAU,SAKX,OAHG,IACF,EAAO,QAAU,EAAK,SAAW,EAAO,SAElC,CACR,CAEA,SAAS,QAAQ,EAAI,GACpB,IAAI,EAAS,EAAI,OACb,EAAW,EAAI,IACf,EAAU,EAAS,MAAM,KAC7B,OAAO,GACN,IAAK,OACL,IAAK,MAaJ,YAZA,EAAI,GAAG,QAAO,SAAS,GACtB,IAAI,EAAO,KAAK,MAAM,EAAK,IACvB,EAAM,KAAK,UAAU,GACrB,EAAW,KAAK,CAAC,OAAO,EAAQ,GAAG,EAAQ,IAAI,KAAK,KAAK,KAAK,OAClE,QAAQ,IAAI,GACZ,QAAQ,IAAI,GACZ,GAAG,UAAU,EAAS,GAAI,SAAS,GAClC,GAAG,KAAO,UACV,QAAQ,IAAI,GAAG,KAAK,MACpB,EAAI,IAAI,QACT,GACD,IAIF,QAAQ,IAAI,EAAO,GACnB,EAAI,IAAI,OACT,CAEA,SAAS,UACR,MAAO,CACN,IAAM,YAAY,OAClB,KAAO,YAAY,QACnB,GAAK,YAAY,MACjB,QAAS,YAAY,WAEvB,CAEA,SAAS,YAAY,GACpB,IAAI,EAAW,QAAQ,EAAK,IACxB,EAAU,GAAG,YAAY,GACzB,EAAS,CAAC,EAKd,OAJA,EAAQ,SAAQ,SAAS,GACxB,IAAI,EAAU,KAAK,MAAO,GAAG,aAAa,EAAS,GAAM,YACzD,EAAQ,KAAK,SAAS,EAAK,SAAY,CACxC,IACO,CACR,CAEA,SAAS,QAAQ,EAAK,GACrB,IAAI,EAAQ,GAAG,aAAa,GAAG,SAAS,GAAM,WAE9C,OADa,IAAI,OAAO,EAAM,cAAc,GAE7C,CAEA,SAAS,aAAa,GAkBrB,MAhBa,CACZ,KAAO,KACP,QAAS,KACT,OAAQ,KACR,KAAO,KACP,GAAK,OACL,KAAO,KACP,KAAO,KACP,UAAY,OACZ,UAAY,OACZ,KAAO,MACP,KAAO,OACP,UAAW,SACX,QAAS,OACT,cAAe,SAGjB,CA/HA,KAAK,cAAa,SAAS,EAAI,GAC9B,IAAI,EAAW,IAAI,MAAM,EAAI,KAAK,SAC9B,EAAU,EAAS,MAAM,KAC7B,EAAQ,QACR,IAAI,EAAU,KAAK,QAAQ,GAK3B,GAJkB,KAAf,EAAQ,KACV,EAAI,UAAU,IAAI,CAAC,SAAW,gBAC9B,EAAI,OAEa,SAAf,EAAQ,GAIN,QAA4B,IAAlB,KAAK,GACnB,GAAG,SAAS,IAAI,GAAS,SAAS,EAAI,GAClC,EACF,EAAI,IAAI,kBAGR,EAAI,UAAU,IAAI,CACjB,eAAe,KAAK,KAIrB,EAAI,IAAI,GAEV,QAEG,CACH,EAAI,UAAU,IAAI,CAAC,eAAe,cAClC,IAAI,EAAS,oBAAoB,CAAC,QAAQ,IAC1C,EAAI,IAAI,EACT,MAtBC,QAAQ,EAAI,EAuBd,IAAG,OAAO","file":"/npm/nuva@0.1.7/server.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/nuva@0.1.7/server.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var fs = require('fs');\r\nvar tpl = require('./lib/fitemp.js');\r\nvar yaml = require('./lib/yaml.js');\r\nvar http = require('http');\r\nvar path = require('path');\r\nvar url = require('url');\r\n\r\nvar mime = {\r\n\t'.html'\t:\t'text/html',\r\n\t'.js'\t:\t'text/javascript',\r\n\t'.png'\t:\t'image/png',\r\n\t'.css'\t:\t'text/css',\r\n\t'.ico'\t:\t'image/x-icon',\r\n\t'.jpg'\t:\t'image/jpg',\r\n\t'.ttf'\t: \t'x-font-ttf'\r\n};\r\n\r\n\r\n\r\nvar CF = {\r\n\ttemplate : 'template/topcoat/',\r\n\tconf : getConf(),\r\n\ttranslate: getTranslate()\r\n};\r\n\r\n//console.log(CF.conf);\r\n\r\nhttp.createServer(function(req,res){\r\n\tvar pathname = url.parse(req.url).pathname;\r\n\tvar patharr = pathname.split('/');\r\n\tpatharr.shift();\r\n\tvar extname = path.extname(pathname);\r\n\tif(patharr[0] === ''){\r\n\t\tres.writeHead(302,{'Location':'/home/state'});\r\n\t\tres.end();\r\n\t}\r\n\tif(patharr[0] === 'rest'){\r\n\t\trestApi(req,res);\r\n\t\treturn;\r\n\t}\r\n\telse if(typeof mime[extname] !== 'undefined'){\r\n\t\tfs.readFile('.'+pathname,function(err,data){\r\n\t\t\tif(err){\r\n\t\t\t\tres.end(\"404 not found\");\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tres.writeHead(200,{\r\n\t\t\t\t\t'Content-Type':mime[extname]\r\n\t\t\t\t\t//'Cache-Control': 'max-age=315360000',\r\n\t\t\t\t\t//'Expires' : 'Thu, 31 Dec 2037 23:55:55 GMT'\r\n\t\t\t\t});\r\n\t\t\t\tres.end(data);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\telse{\r\n\t\tres.writeHead(200,{'Content-Type':'text/html'});\t\t\r\n\t\tvar output = genPageFromBaseSync({patharr:patharr});\t\t\r\n\t\tres.end(output);\r\n\t}\r\n}).listen(80);\r\n\r\nfunction genPageFromBaseSync(_opts){\r\n\tvar opts = getRenderOpts(_opts);\r\n\tvar base = fs.readFileSync(opts.template+'base.html').toString();\r\n\tvar output = tpl.render(base,opts);\r\n\treturn output;\r\n}\r\n\r\nfunction getRenderOpts(opts){\r\n\tvar result = {\r\n\t\tpatharr : [],\r\n\t\tconf : CF.conf,\r\n\t\tname : CF.translate,\r\n\t\ttemplate: CF.template,\r\n\t\tinclude : include\r\n\t};\r\n\tif(opts){\r\n\t\tresult.patharr = opts.patharr || result.patharr;\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction restApi(req,res){\r\n\tvar method = req.method;\r\n\tvar pathname = req.url;\r\n\tvar patharr = pathname.split('/');\r\n\tswitch(method){\r\n\t\tcase 'POST': \r\n\t\tcase 'PUT':\r\n\t\t\treq.on('data',function(data){\r\n\t\t\t\tvar json = JSON.parse(data+\"\");\t\t\r\n\t\t\t\tvar str = yaml.stringify(json);\r\n\t\t\t\tvar filepath = './'+['conf',patharr[2],patharr[3]].join(path.sep)+'.yml';\r\n\t\t\t\tconsole.log(filepath);\r\n\t\t\t\tconsole.log(str);\r\n\t\t\t\tfs.writeFile(filepath,str,function(err){\r\n\t\t\t\t\tCF.conf = getConf();\r\n\t\t\t\t\tconsole.log(CF.conf.pool);\r\n\t\t\t\t\tres.end('saved');\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t}\r\n\t\r\n\tconsole.log(method,pathname);\r\n\tres.end('rest');\r\n}\r\n\r\nfunction getConf(){\r\n\treturn {\r\n\t\tadc : getConfSync('adc'),\r\n\t\tpool : getConfSync('pool'),\r\n\t\tvs : getConfSync('vs'),\r\n\t\tipgroup: getConfSync('ipgroup')\r\n\t};\r\n}\r\n\r\nfunction getConfSync(kind){\r\n\tvar confpath = \"conf/\"+kind+'/';\r\n\tvar fileArr = fs.readdirSync(confpath);\r\n\tvar result = {};\r\n\tfileArr.forEach(function(file){\r\n\t\tvar content = yaml.parse( fs.readFileSync(confpath+file).toString() );\r\n\t\tresult[ path.basename(file,'.yml') ] = content;\r\n\t});\r\n\treturn result;\r\n}\r\n\r\nfunction include(file,opts){\t\r\n\tvar _temp = fs.readFileSync(CF.template+file).toString();\t\r\n\tvar output = tpl.render(_temp,getRenderOpts(opts));\r\n\treturn output;\r\n}\r\n\r\nfunction getTranslate(_lang){\r\n\tvar lang = _lang || 'zh';\r\n\tvar result = {\r\n\t\tname : '名称',\r\n\t\toperate: '操作',\r\n\t\tmanage: '管理',\r\n\t\ttype : '类型',\r\n\t\tip : 'ip地址',\r\n\t\ttime : '时间',\r\n\t\tport : '端口',\r\n\t\tisrunning : '运行状态',\r\n\t\tstarttime : '启动时间',\r\n\t\tpool : '服务池',\r\n\t\tnode : '服务节点',\r\n\t\tbalancing: '负载均衡算法',\r\n\t\tmonitor: '健康检查',\r\n\t\tiptransparent: 'ip地址透传'\r\n\t};\r\n\treturn result;\r\n}"]}