webox-node
Advanced tools
| "use strict";var t=require("fs"),e=require("https"),a=require("http"),i=require("path"),o=require("child_process");function p(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}let n={};process.env.WEBOX_CONF_FILE&&(n=require(process.env.WEBOX_CONF_FILE));var r=Object.assign({WEBOX_MODE:process.env.NODE_ENV||"development",WEBOX_HOST:"127.0.0.1",WEBOX_PORT:80,WEBOX_ROOT:"webroot",WEBOX_INDEX:["index.html","index.htm"],WEBOX_ERROR:{200:"%s",400:"Bad Request: %s",403:"Forbidden : %s",404:"NO Found: %s",500:"Internal Server Error: %s",503:"Service Unavilable: %s"},WEBOX_CHECK_API:"aHR0cHM6Ly9hcGkudm1sdS5jb20vd2Vib3gvP3BsYXRmb3JtPW5vZGU="},n);let s=r;function l(t,e){let a=e||new Date,i={"M+":a.getMonth()+1,"d+":a.getDate(),"h+":a.getHours(),"m+":a.getMinutes(),"s+":a.getSeconds(),"q+":Math.floor((a.getMonth()+3)/3),S:a.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(a.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1===RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}void 0===console.light&&(console.light=Function);var c={logger:function(t,...e){if("development"!==s.WEBOX_MODE&&t>0)return;let a="["+l("yyyy-MM-dd hh:mm:ss")+"]";console.log(a,"Webox -",...e)},parseJSON:function(t){if("string"==typeof t)try{return JSON.parse(t)}catch(t){}},dateFormat:l,httpMessage:function(t,e,a,i){a=a||200,i=i||"text/plain","object"==typeof e&&(e=JSON.stringify(e),i="application/json"),"text/plain"==i&&s.WEBOX_ERROR[a]&&(e=s.WEBOX_ERROR[a].replace("%s",e)),t.writeHead(a,{"Content-Length":e.length,"Content-Type":i}),t.write(e),t.end()}};let{logger:m}=c;process.title="Webox - HTTP Server",process.env.INIT_CWD=process.cwd(),process.once("exit",(t=>{m(0,"Service Stopped"),0===t&&process.env.WEBOX_EXIT_CODE&&process.exit(1)}));let x=e,d=r,{logger:g,parseJSON:f}=c,u=Buffer.from(d.WEBOX_CHECK_API,"base64").toString();x.get(u+"&version=dev",(t=>{if(200!=t.statusCode)return;let e="";t.on("data",(t=>{e+=t.toString()})),t.on("end",(()=>{let t=f(e);t&&t.message&&g(t.message)}))})).on("error",(t=>{g(1,"Checker Error:",t.message)}));let v=t,O=i,h=r;function E(t,e){return 0===e.indexOf(".")?t+e:O.join(t,e)}var b={handle:function(t,e){let a=new URL(t.url,`http://${t.headers.host}`),i=O.join(h.WEBOX_ROOT,a.pathname);t.filename="",t.requestURL=a;let o=v.existsSync(i)&&v.lstatSync(i);if(o&&o.isFile())t.filename=i;else for(let e of h.WEBOX_INDEX){let a=E(i,e);if(v.existsSync(a))return void(t.filename=a)}},route:"*"};let _=i,R={"3gp":"video/3gpp",a:"application/octet-stream",ai:"application/postscript",aif:"audio/x-aiff",aiff:"audio/x-aiff",asc:"application/pgp-signature",asf:"video/x-ms-asf",asm:"text/x-asm",asx:"video/x-ms-asf",atom:"application/atom+xml",au:"audio/basic",avi:"video/x-msvideo",bat:"application/x-msdownload",bin:"application/octet-stream",bmp:"image/bmp",bz2:"application/x-bzip2",c:"text/x-c",cab:"application/vnd.ms-cab-compressed",cc:"text/x-c",chm:"application/vnd.ms-htmlhelp",class:"application/octet-stream",com:"application/x-msdownload",conf:"text/plain",cpp:"text/x-c",crt:"application/x-x509-ca-cert",css:"text/css",csv:"text/csv",cxx:"text/x-c",deb:"application/x-debian-package",der:"application/x-x509-ca-cert",diff:"text/x-diff",djv:"image/vnd.djvu",djvu:"image/vnd.djvu",dll:"application/x-msdownload",dmg:"application/octet-stream",doc:"application/msword",dot:"application/msword",dtd:"application/xml-dtd",dvi:"application/x-dvi",ear:"application/java-archive",eml:"message/rfc822",eps:"application/postscript",exe:"application/x-msdownload",f:"text/x-fortran",f77:"text/x-fortran",f90:"text/x-fortran",flv:"video/x-flv",for:"text/x-fortran",gem:"application/octet-stream",gemspec:"text/x-script.ruby",gif:"image/gif",gz:"application/x-gzip",h:"text/x-c",hh:"text/x-c",htm:"text/html",html:"text/html",ico:"image/vnd.microsoft.icon",ics:"text/calendar",ifb:"text/calendar",iso:"application/octet-stream",jar:"application/java-archive",java:"text/x-java-source",jnlp:"application/x-java-jnlp-file",jpeg:"image/jpeg",jpg:"image/jpeg",js:"application/javascript",json:"application/json",log:"text/plain",m3u:"audio/x-mpegurl",m4v:"video/mp4",man:"text/troff",mathml:"application/mathml+xml",mbox:"application/mbox",mdoc:"text/troff",me:"text/troff",mid:"audio/midi",midi:"audio/midi",mime:"message/rfc822",mml:"application/mathml+xml",mng:"video/x-mng",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",mp4v:"video/mp4",mpeg:"video/mpeg",mpg:"video/mpeg",ms:"text/troff",msi:"application/x-msdownload",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"application/ogg",p:"text/x-pascal",pas:"text/x-pascal",pbm:"image/x-portable-bitmap",pdf:"application/pdf",pem:"application/x-x509-ca-cert",pgm:"image/x-portable-graymap",pgp:"application/pgp-encrypted",pkg:"application/octet-stream",pl:"text/x-script.perl",pm:"text/x-script.perl-module",png:"image/png",pnm:"image/x-portable-anymap",ppm:"image/x-portable-pixmap",pps:"application/vnd.ms-powerpoint",ppt:"application/vnd.ms-powerpoint",ps:"application/postscript",psd:"image/vnd.adobe.photoshop",py:"text/x-script.python",qt:"video/quicktime",ra:"audio/x-pn-realaudio",rake:"text/x-script.ruby",ram:"audio/x-pn-realaudio",rar:"application/x-rar-compressed",rb:"text/x-script.ruby",rdf:"application/rdf+xml",roff:"text/troff",rpm:"application/x-redhat-package-manager",rss:"application/rss+xml",rtf:"application/rtf",ru:"text/x-script.ruby",s:"text/x-asm",sgm:"text/sgml",sgml:"text/sgml",sh:"application/x-sh",sig:"application/pgp-signature",snd:"audio/basic",so:"application/octet-stream",svg:"image/svg+xml",svgz:"image/svg+xml",swf:"application/x-shockwave-flash",t:"text/troff",tar:"application/x-tar",tbz:"application/x-bzip-compressed-tar",tcl:"application/x-tcl",tex:"application/x-tex",texi:"application/x-texinfo",texinfo:"application/x-texinfo",text:"text/plain",tif:"image/tiff",tiff:"image/tiff",torrent:"application/x-bittorrent",tr:"text/troff",txt:"text/plain",vcf:"text/x-vcard",vcs:"text/x-vcalendar",vrml:"model/vrml",war:"application/java-archive",wav:"audio/x-wav",wma:"audio/x-ms-wma",wmv:"video/x-ms-wmv",wmx:"video/x-ms-wmx",wrl:"model/vrml",wsdl:"application/wsdl+xml",xbm:"image/x-xbitmap",xhtml:"application/xhtml+xml",xls:"application/vnd.ms-excel",xml:"application/xml",xpm:"image/x-xpixmap",xsl:"application/xml",xslt:"application/xslt+xml",yaml:"text/yaml",yml:"text/yaml",zip:"application/zip",mf:"text/cache-manifest"};let w=t,W=function(t){let e=_.extname(t);return e=e?e.slice(1):"unknown",R[e]||"application/octet-stream"},{httpMessage:X,logger:y}=c;var B={handle:function(t,e){let{filename:a,requestURL:i}=t;return""===a?(X(e,i.pathname,404),!0):(e.writeHead(200,{"Content-Type":W(a)}),y(1,"Send Static File:",a),w.createReadStream(a).on("error",(t=>{X(e,i.pathname,503)})).on("data",(t=>{e.write(t)})).on("end",(()=>{e.end()})),!0)},route:"*"};let{exec:S}=o,{httpMessage:j}=c;var T={handle:function(t,e){let{filename:a,requestURL:i}=t,o="",p=i.search.replace(/^\?/,"").replace(/&/g," "),n=S(`${process.argv0} ${a} ${p}`,{windowsHide:!0,timeout:6e4});return n.stdout.on("data",(t=>{o+=t})),n.stderr.on("data",(t=>{o+=t})),n.on("exit",(t=>{j(e,o,t)})),!0},route:function(t,e){return e&&/\.cgi(\.js)?$/.test(e)}};let{httpMessage:q}=c;let P=b,H=B,M=[T,{handle:function(t,e){let{filename:a,requestURL:i,postData:o}=t;return require(a)({requestURL:i,postData:o},((t,a)=>{q(e,t,a)})),!0},route:function(t,e){return e&&/\.cjs(\.js)?$/.test(e)}}];var D={push:function(t){M.splice(-2,0,t)},call:function(t,e){P.handle(t,e);let a=t.filename,i=t.requestURL.pathname;for(let{route:o,handle:p}of M)if((o instanceof RegExp&&o.test(i)||o instanceof Function&&o(i,a)||"string"==typeof o&&("*"===o||o===i))&&p(t,e))return!0;H.handle(t,e)}};let N=a,C=i,F=r,{logger:L}=c,I=D.call,$=N.createServer(((t,e)=>{if(L(1,t.method,"-",t.url),"POST"===t.method){let a="";t.addListener("data",(t=>{a+=t})),t.addListener("end",(()=>{try{t.postData=JSON.parse(a)}catch(t){L(0,"POST Error: Only JSON data is supported")}I(t,e)}))}else I(t,e)}));$.on("error",(t=>{"EADDRINUSE"===t.code&&(L(0,"IP-Port in use:",F.WEBOX_HOST,F.WEBOX_PORT),L(0,"Failover to:",F.WEBOX_HOST,++F.WEBOX_PORT,"\n"),$.listen(F.WEBOX_PORT,F.WEBOX_HOST,1024))})),$.on("listening",(()=>{let t="0.0.0.0"===F.WEBOX_HOST?"127.0.0.1":F.WEBOX_HOST,e=F.WEBOX_PORT-80==0?"":":"+F.WEBOX_PORT;L(0,"Server started:","http://"+t+e),L(0,"Root Directory:",F.WEBOX_ROOT,"\n")}));let k=c,U=function(t){t&&Object.assign(F,t),F.WEBOX_ROOT=C.resolve(F.WEBOX_ROOT),$.listen(F.WEBOX_PORT,F.WEBOX_HOST,1024)},{push:z}=D;var J={helper:k,init:U,use:z},A=p(J);exports.main=J,exports.main$1=A; | ||
| //# sourceMappingURL=main-6099c937.js.map |
| {"version":3,"file":"main-6099c937.js","sources":["../src/helper/config.js","../src/helper/utils.js","../src/env.js","../src/helper/check.js","../src/middleware/prepare.js","../src/helper/mime.js","../src/middleware/static.js","../src/middleware/use.cgi.js","../src/middleware/use.cjs.js","../src/core/handle.js","../src/core/server.js","../src/main.js"],"sourcesContent":["let fs = require('fs');\n\n// 加载用户配置\n\nlet config = {};\n\nif (process.env.WEBOX_CONF_FILE) {\n config = require(process.env.WEBOX_CONF_FILE);\n}\n\n// 合并配置参数\n\nmodule.exports = Object.assign({\n\n // production or development\n WEBOX_MODE: process.env.NODE_ENV || 'development',\n\n WEBOX_HOST: '127.0.0.1',\n\n WEBOX_PORT: 80,\n\n WEBOX_ROOT: 'webroot',\n\n WEBOX_INDEX: [\n 'index.html',\n 'index.htm'\n ],\n\n WEBOX_ERROR: {\n 200: '%s',\n 400: 'Bad Request: %s',\n 403: 'Forbidden : %s',\n 404: 'NO Found: %s',\n 500: 'Internal Server Error: %s',\n 503: 'Service Unavilable: %s'\n },\n\n WEBOX_CHECK_API: 'aHR0cHM6Ly9hcGkudm1sdS5jb20vd2Vib3gvP3BsYXRmb3JtPW5vZGU='\n\n}, config);\n","let config = require('./config');\n\n/**\n * 控制台日志\n * @param {number} level 日志级别\n * @param {...any} msg 日志内容\n */\n\nfunction logger(level, ...msg) {\n\n if (config.WEBOX_MODE !== 'development' && level > 0) {\n return;\n }\n\n let time = '[' + dateFormat('yyyy-MM-dd hh:mm:ss') + ']';\n console.log(time, 'Webox -', ...msg);\n\n}\n\n/**\n * 时间格式化\n * @param {string} fmt 格式化选项\n * @param {Date} date 日期对象,默认为当前时间\n * @returns 格式化后的字符串\n */\n\nfunction dateFormat(fmt, date) {\n\n let d = date || new Date();\n let o = {\n 'M+': d.getMonth() + 1, //月\n 'd+': d.getDate(), //日\n 'h+': d.getHours(), //时\n 'm+': d.getMinutes(), //分\n 's+': d.getSeconds(), //秒\n 'q+': Math.floor((d.getMonth() + 3) / 3), //季度\n 'S': d.getMilliseconds() //毫秒\n };\n\n if (/(y+)/.test(fmt)) { //年\n fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));\n }\n\n for (let k in o) {\n if (new RegExp('(' + k + ')').test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));\n }\n }\n\n return fmt;\n\n}\n\n/**\n * 尝试解析JSON\n * @param {string} str JSON字符串\n * @returns 成功返回结果,失败返回`undefined`\n */\n\nfunction parseJSON(str) {\n\n if (typeof str === 'string') {\n try {\n return JSON.parse(str);\n } catch (e) {\n }\n }\n\n}\n\n/**\n * 输出HTTP消息\n * @param {http.ServerResponse} response 响应对象\n * @param {string | object} output 输出内容\n * @param {number} code 状态码\n * @param {string} mime 内容类型\n */\n\nfunction httpMessage(response, output, code, mime) {\n\n code = code || 200;\n mime = mime || 'text/plain';\n\n if (typeof output === 'object') {\n output = JSON.stringify(output);\n mime = 'application/json';\n }\n\n if (mime == 'text/plain' && config.WEBOX_ERROR[code]) {\n output = config.WEBOX_ERROR[code].replace('%s', output);\n }\n\n response.writeHead(code, {\n 'Content-Length': output.length,\n 'Content-Type': mime\n });\n\n response.write(output);\n response.end();\n\n}\n\n/**\n * 仅用于兼容老版调试工具\n */\n\nif (console.light === undefined) {\n console.light = Function;\n}\n\nmodule.exports = {\n logger: logger,\n parseJSON: parseJSON,\n dateFormat: dateFormat,\n httpMessage: httpMessage\n};\n","/**\n * Webox - HTTP Server\n * @author rehiy <wang@rehiy.com>\n * @Website http://www.rehiy.com/webox\n */\n\nlet { logger } = require('./helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n// set title\nprocess.title = 'Webox - HTTP Server';\n\n// set env var for ORIGINAL cwd\nprocess.env.INIT_CWD = process.cwd();\n\n// normal exit with 0 or 1\nprocess.once('exit', code => {\n logger(0, 'Service Stopped');\n if (code === 0 && process.env.WEBOX_EXIT_CODE) {\n process.exit(1);\n }\n});\n","let https = require('https');\n\nlet config = require('./config');\n\nlet { logger, parseJSON } = require('./utils');\n\nlet CHECK_API = Buffer.from(config.WEBOX_CHECK_API, 'base64').toString();\n\n\nlet req = https.get(CHECK_API + '&version=dev', res => {\n\n if (res.statusCode != 200) {\n return;\n }\n\n let raw = '';\n\n res.on('data', d => {\n raw += d.toString();\n });\n\n res.on('end', () => {\n let data = parseJSON(raw);\n if (data && data.message) {\n logger(data.message);\n }\n });\n\n});\n\nreq.on('error', e => {\n\n logger(1, 'Checker Error:', e.message);\n\n});\n","let fs = require('fs');\nlet path = require('path');\n\nlet config = require('../helper/config');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 补全文件路径\n * @param {string} file 路径\n * @param {string} suff 后缀\n * @returns \n */\nfunction fixpath(file, suff) {\n if (suff.indexOf('.') === 0) {\n return file + suff;\n }\n return path.join(file, suff);\n}\n\n/**\n * 解析HTTP请求\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let requestURL = new URL(request.url, `http://${request.headers.host}`);\n\n let filename = path.join(config.WEBOX_ROOT, requestURL.pathname);\n\n //添加基础属性\n request.filename = '';\n request.requestURL = requestURL;\n\n //文件存在直接返回\n let filestat = fs.existsSync(filename) && fs.lstatSync(filename);\n if (filestat && filestat.isFile()) {\n request.filename = filename;\n return;\n }\n\n //尝试返回默认首页\n for (let index of config.WEBOX_INDEX) {\n let file = fixpath(filename, index);\n if (fs.existsSync(file)) {\n request.filename = file;\n return;\n }\n }\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n handle: handle,\n route: '*'\n};\n","let path = require('path');\n\nlet mime = {\n '3gp': 'video/3gpp',\n 'a': 'application/octet-stream',\n 'ai': 'application/postscript',\n 'aif': 'audio/x-aiff',\n 'aiff': 'audio/x-aiff',\n 'asc': 'application/pgp-signature',\n 'asf': 'video/x-ms-asf',\n 'asm': 'text/x-asm',\n 'asx': 'video/x-ms-asf',\n 'atom': 'application/atom+xml',\n 'au': 'audio/basic',\n 'avi': 'video/x-msvideo',\n 'bat': 'application/x-msdownload',\n 'bin': 'application/octet-stream',\n 'bmp': 'image/bmp',\n 'bz2': 'application/x-bzip2',\n 'c': 'text/x-c',\n 'cab': 'application/vnd.ms-cab-compressed',\n 'cc': 'text/x-c',\n 'chm': 'application/vnd.ms-htmlhelp',\n 'class': 'application/octet-stream',\n 'com': 'application/x-msdownload',\n 'conf': 'text/plain',\n 'cpp': 'text/x-c',\n 'crt': 'application/x-x509-ca-cert',\n 'css': 'text/css',\n 'csv': 'text/csv',\n 'cxx': 'text/x-c',\n 'deb': 'application/x-debian-package',\n 'der': 'application/x-x509-ca-cert',\n 'diff': 'text/x-diff',\n 'djv': 'image/vnd.djvu',\n 'djvu': 'image/vnd.djvu',\n 'dll': 'application/x-msdownload',\n 'dmg': 'application/octet-stream',\n 'doc': 'application/msword',\n 'dot': 'application/msword',\n 'dtd': 'application/xml-dtd',\n 'dvi': 'application/x-dvi',\n 'ear': 'application/java-archive',\n 'eml': 'message/rfc822',\n 'eps': 'application/postscript',\n 'exe': 'application/x-msdownload',\n 'f': 'text/x-fortran',\n 'f77': 'text/x-fortran',\n 'f90': 'text/x-fortran',\n 'flv': 'video/x-flv',\n 'for': 'text/x-fortran',\n 'gem': 'application/octet-stream',\n 'gemspec': 'text/x-script.ruby',\n 'gif': 'image/gif',\n 'gz': 'application/x-gzip',\n 'h': 'text/x-c',\n 'hh': 'text/x-c',\n 'htm': 'text/html',\n 'html': 'text/html',\n 'ico': 'image/vnd.microsoft.icon',\n 'ics': 'text/calendar',\n 'ifb': 'text/calendar',\n 'iso': 'application/octet-stream',\n 'jar': 'application/java-archive',\n 'java': 'text/x-java-source',\n 'jnlp': 'application/x-java-jnlp-file',\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'js': 'application/javascript',\n 'json': 'application/json',\n 'log': 'text/plain',\n 'm3u': 'audio/x-mpegurl',\n 'm4v': 'video/mp4',\n 'man': 'text/troff',\n 'mathml': 'application/mathml+xml',\n 'mbox': 'application/mbox',\n 'mdoc': 'text/troff',\n 'me': 'text/troff',\n 'mid': 'audio/midi',\n 'midi': 'audio/midi',\n 'mime': 'message/rfc822',\n 'mml': 'application/mathml+xml',\n 'mng': 'video/x-mng',\n 'mov': 'video/quicktime',\n 'mp3': 'audio/mpeg',\n 'mp4': 'video/mp4',\n 'mp4v': 'video/mp4',\n 'mpeg': 'video/mpeg',\n 'mpg': 'video/mpeg',\n 'ms': 'text/troff',\n 'msi': 'application/x-msdownload',\n 'odp': 'application/vnd.oasis.opendocument.presentation',\n 'ods': 'application/vnd.oasis.opendocument.spreadsheet',\n 'odt': 'application/vnd.oasis.opendocument.text',\n 'ogg': 'application/ogg',\n 'p': 'text/x-pascal',\n 'pas': 'text/x-pascal',\n 'pbm': 'image/x-portable-bitmap',\n 'pdf': 'application/pdf',\n 'pem': 'application/x-x509-ca-cert',\n 'pgm': 'image/x-portable-graymap',\n 'pgp': 'application/pgp-encrypted',\n 'pkg': 'application/octet-stream',\n 'pl': 'text/x-script.perl',\n 'pm': 'text/x-script.perl-module',\n 'png': 'image/png',\n 'pnm': 'image/x-portable-anymap',\n 'ppm': 'image/x-portable-pixmap',\n 'pps': 'application/vnd.ms-powerpoint',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'ps': 'application/postscript',\n 'psd': 'image/vnd.adobe.photoshop',\n 'py': 'text/x-script.python',\n 'qt': 'video/quicktime',\n 'ra': 'audio/x-pn-realaudio',\n 'rake': 'text/x-script.ruby',\n 'ram': 'audio/x-pn-realaudio',\n 'rar': 'application/x-rar-compressed',\n 'rb': 'text/x-script.ruby',\n 'rdf': 'application/rdf+xml',\n 'roff': 'text/troff',\n 'rpm': 'application/x-redhat-package-manager',\n 'rss': 'application/rss+xml',\n 'rtf': 'application/rtf',\n 'ru': 'text/x-script.ruby',\n 's': 'text/x-asm',\n 'sgm': 'text/sgml',\n 'sgml': 'text/sgml',\n 'sh': 'application/x-sh',\n 'sig': 'application/pgp-signature',\n 'snd': 'audio/basic',\n 'so': 'application/octet-stream',\n 'svg': 'image/svg+xml',\n 'svgz': 'image/svg+xml',\n 'swf': 'application/x-shockwave-flash',\n 't': 'text/troff',\n 'tar': 'application/x-tar',\n 'tbz': 'application/x-bzip-compressed-tar',\n 'tcl': 'application/x-tcl',\n 'tex': 'application/x-tex',\n 'texi': 'application/x-texinfo',\n 'texinfo': 'application/x-texinfo',\n 'text': 'text/plain',\n 'tif': 'image/tiff',\n 'tiff': 'image/tiff',\n 'torrent': 'application/x-bittorrent',\n 'tr': 'text/troff',\n 'txt': 'text/plain',\n 'vcf': 'text/x-vcard',\n 'vcs': 'text/x-vcalendar',\n 'vrml': 'model/vrml',\n 'war': 'application/java-archive',\n 'wav': 'audio/x-wav',\n 'wma': 'audio/x-ms-wma',\n 'wmv': 'video/x-ms-wmv',\n 'wmx': 'video/x-ms-wmx',\n 'wrl': 'model/vrml',\n 'wsdl': 'application/wsdl+xml',\n 'xbm': 'image/x-xbitmap',\n 'xhtml': 'application/xhtml+xml',\n 'xls': 'application/vnd.ms-excel',\n 'xml': 'application/xml',\n 'xpm': 'image/x-xpixmap',\n 'xsl': 'application/xml',\n 'xslt': 'application/xslt+xml',\n 'yaml': 'text/yaml',\n 'yml': 'text/yaml',\n 'zip': 'application/zip',\n 'mf': 'text/cache-manifest'\n};\n\nmodule.exports = function (file) {\n let ext = path.extname(file);\n ext = ext ? ext.slice(1) : 'unknown';\n return mime[ext] || 'application/octet-stream';\n}\n","let fs = require('fs');\n\nlet getMimeType = require('../helper/mime');\n\nlet { httpMessage, logger } = require('../helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 处理静态文件\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let { filename, requestURL } = request;\n\n //找不到文件\n if (filename === '') {\n httpMessage(response, requestURL.pathname, 404);\n return true;\n }\n\n //输出文件头\n response.writeHead(200, {\n 'Content-Type': getMimeType(filename)\n });\n\n logger(1, 'Send Static File:', filename);\n\n //流式发送文件\n fs.createReadStream(filename)\n .on('error', err => {\n httpMessage(response, requestURL.pathname, 503);\n })\n .on('data', chunk => {\n response.write(chunk);\n })\n .on('end', () => {\n response.end();\n });\n\n return true;\n\n};\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n handle: handle,\n route: '*'\n};\n","let { exec } = require('child_process');\n\nlet { httpMessage } = require('../helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 路由检查\n * @param {string} p pathname\n * @param {string} f filename\n * @returns 是否调用处理函数\n */\nfunction route(p, f) {\n return f && /\\.cgi(\\.js)?$/.test(f);\n}\n\n/**\n * 处理HTTP请求\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let { filename, requestURL } = request;\n\n let text = '';\n\n let args = requestURL.search.replace(/^\\?/, '').replace(/&/g, ' ');\n\n let child = exec(`${process.argv0} ${filename} ${args}`, {\n windowsHide: true,\n timeout: 60000\n });\n\n child.stdout.on('data', data => {\n text += data;\n });\n child.stderr.on('data', data => {\n text += data;\n });\n\n child.on('exit', code => {\n code === 0 ? 200 : 503;\n httpMessage(response, text, code);\n });\n\n return true;\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n handle: handle,\n route: route\n};\n\n","let { httpMessage } = require('../helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 路由检查\n * @param {string} p pathname\n * @param {string} f filename\n * @returns 是否调用处理函数\n */\nfunction route(p, f) {\n return f && /\\.cjs(\\.js)?$/.test(f);\n}\n\n/**\n * 处理HTTP请求\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let { filename, requestURL, postData } = request;\n\n let child = require(filename);\n\n child({ requestURL, postData }, (text, code) => {\n httpMessage(response, text, code);\n });\n\n return true;\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n handle: handle,\n route: route\n};\n","let M_prepare = require('../middleware/prepare');\nlet M_static = require('../middleware/static');\n\nlet M_cgi = require('../middleware/use.cgi');\nlet M_cjs = require('../middleware/use.cjs');\n\n/////////////////////////////////////////////////////////////\n\nlet handlers = [\n M_cgi, M_cjs\n];\n\nfunction push(handler) {\n handlers.splice(-2, 0, handler);\n}\n\nfunction call(request, response) {\n\n M_prepare.handle(request, response);\n\n let filename = request.filename;\n let pathname = request.requestURL.pathname;\n\n for (let { route, handle } of handlers) {\n\n if (\n (route instanceof RegExp && route.test(pathname)) ||\n (route instanceof Function && route(pathname, filename)) ||\n (typeof route === 'string' && (route === '*' || route === pathname))\n ) {\n if (handle(request, response)) {\n return true;\n }\n }\n\n }\n\n M_static.handle(request, response);\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n push: push,\n call: call\n};\n","let http = require('http');\nlet path = require('path');\n\nlet config = require('../helper/config');\n\nlet { logger } = require('../helper/utils');\n\nlet handleCaller = require('./handle').call;\n\n/////////////////////////////////////////////////////////////\n// create server\n\nlet httpServer = http.createServer((request, response) => {\n\n logger(1, request.method, '-', request.url);\n\n switch (request.method) {\n case 'POST':\n let body = '';\n request.addListener('data', data => {\n body += data\n });\n request.addListener('end', () => {\n try {\n request.postData = JSON.parse(body);\n } catch (e) {\n logger(0, 'POST Error: Only JSON data is supported');\n }\n handleCaller(request, response);\n });\n break;\n default:\n handleCaller(request, response);\n break;\n }\n\n});\n\nhttpServer.on('error', err => {\n\n if (err.code === 'EADDRINUSE') {\n logger(0, 'IP-Port in use:', config.WEBOX_HOST, config.WEBOX_PORT);\n logger(0, 'Failover to:', config.WEBOX_HOST, ++config.WEBOX_PORT, '\\n');\n httpServer.listen(config.WEBOX_PORT, config.WEBOX_HOST, 1024);\n }\n\n});\n\nhttpServer.on('listening', () => {\n\n let host = config.WEBOX_HOST === '0.0.0.0' ? '127.0.0.1' : config.WEBOX_HOST;\n let port = config.WEBOX_PORT - 80 === 0 ? '' : ':' + config.WEBOX_PORT;\n\n logger(0, 'Server started:', 'http://' + host + port);\n logger(0, 'Root Directory:', config.WEBOX_ROOT, '\\n');\n\n});\n\n/////////////////////////////////////////////////////////////\n// start server\n\nmodule.exports = function (options) {\n\n options && Object.assign(config, options);\n\n config.WEBOX_ROOT = path.resolve(config.WEBOX_ROOT);\n\n httpServer.listen(config.WEBOX_PORT, config.WEBOX_HOST, 1024);\n\n};\n","/**\n * Webox - HTTP Server\n * @author rehiy <wang@rehiy.com>\n * @Website http://www.rehiy.com/webox\n */\n\n'use strict';\n\n// load env\nrequire('./env');\n\n// security check\nrequire('./helper/check');\n\n/////////////////////////////////////////////////////////////\n\nlet utils = require('./helper/utils');\n\nlet server = require('./core/server');\n\nlet { push } = require('./core/handle');\n\nmodule.exports = {\n helper: utils,\n init: server,\n use: push\n};\n"],"names":["config","process","env","WEBOX_CONF_FILE","require","config_1","Object","assign","WEBOX_MODE","NODE_ENV","WEBOX_HOST","WEBOX_PORT","WEBOX_ROOT","WEBOX_INDEX","WEBOX_ERROR","WEBOX_CHECK_API","require$$0","dateFormat","fmt","date","d","Date","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","undefined","console","light","Function","utils","logger","level","msg","time","log","parseJSON","str","JSON","parse","e","httpMessage","response","output","code","mime","stringify","writeHead","write","end","title","INIT_CWD","cwd","once","WEBOX_EXIT_CODE","exit","https","require$$1","require$$2","CHECK_API","Buffer","from","toString","get","res","statusCode","raw","on","data","message","fs","path","fixpath","file","suff","indexOf","join","prepare","handle","request","requestURL","URL","url","headers","host","filename","pathname","filestat","existsSync","lstatSync","isFile","index","route","a","ai","aif","aiff","asc","asf","asm","asx","atom","au","avi","bat","bin","bmp","bz2","c","cab","cc","chm","class","com","conf","cpp","crt","css","csv","cxx","deb","der","diff","djv","djvu","dll","dmg","doc","dot","dtd","dvi","ear","eml","eps","exe","f","f77","f90","flv","for","gem","gemspec","gif","gz","h","hh","htm","html","ico","ics","ifb","iso","jar","java","jnlp","jpeg","jpg","js","json","m3u","m4v","man","mathml","mbox","mdoc","me","mid","midi","mml","mng","mov","mp3","mp4","mp4v","mpeg","mpg","ms","msi","odp","ods","odt","ogg","p","pas","pbm","pdf","pem","pgm","pgp","pkg","pl","pm","png","pnm","ppm","pps","ppt","ps","psd","py","qt","ra","rake","ram","rar","rb","rdf","roff","rpm","rss","rtf","ru","s","sgm","sgml","sh","sig","snd","so","svg","svgz","swf","t","tar","tbz","tcl","tex","texi","texinfo","text","tif","tiff","torrent","tr","txt","vcf","vcs","vrml","war","wav","wma","wmv","wmx","wrl","wsdl","xbm","xhtml","xls","xml","xpm","xsl","xslt","yaml","yml","zip","mf","getMimeType","ext","extname","slice","_static","createReadStream","err","chunk","exec","use_cgi","args","search","child","argv0","windowsHide","timeout","stdout","stderr","M_prepare","M_static","handlers","postData","push","handler","splice","call","http","require$$3","handleCaller","require$$4","httpServer","createServer","method","body","addListener","listen","port","server","options","resolve","main","helper","init","use"],"mappings":"uNAIA,IAAIA,EAAS,CAAA,EAETC,QAAQC,IAAIC,kBACZH,EAASI,QAAQH,QAAQC,IAAIC,kBAKjC,IAAAE,EAAiBC,OAAOC,OAAO,CAG3BC,WAAYP,QAAQC,IAAIO,UAAY,cAEpCC,WAAY,YAEZC,WAAY,GAEZC,WAAY,UAEZC,YAAa,CACT,aACA,aAGJC,YAAa,CACT,IAAK,KACL,IAAK,kBACL,IAAK,iBACL,IAAK,eACL,IAAK,4BACL,IAAK,0BAGTC,gBAAiB,4DAElBf,GCvCH,IAAIA,EAASgB,EA0Bb,SAASC,EAAWC,EAAKC,GAErB,IAAIC,EAAID,GAAQ,IAAIE,KAChBC,EAAI,CACJ,KAAMF,EAAEG,WAAa,EACrB,KAAMH,EAAEI,UACR,KAAMJ,EAAEK,WACR,KAAML,EAAEM,aACR,KAAMN,EAAEO,aACR,KAAMC,KAAKC,OAAOT,EAAEG,WAAa,GAAK,GACtCO,EAAKV,EAAEW,mBAGP,OAAOC,KAAKd,KACZA,EAAMA,EAAIe,QAAQC,OAAOC,IAAKf,EAAEgB,cAAgB,IAAIC,OAAO,EAAIH,OAAOC,GAAGG,UAG7E,IAAK,IAAIC,KAAKjB,EACN,IAAIY,OAAO,IAAMK,EAAI,KAAKP,KAAKd,KAC/BA,EAAMA,EAAIe,QAAQC,OAAOC,GAA0B,IAArBD,OAAOC,GAAGG,OAAiBhB,EAAEiB,IAAQ,KAAOjB,EAAEiB,IAAIF,QAAQ,GAAKf,EAAEiB,IAAID,UAI3G,OAAOpB,CAEX,MAuDsBsB,IAAlBC,QAAQC,QACRD,QAAQC,MAAQC,UAGpB,IAAAC,EAAiB,CACbC,OAvGJ,SAAgBC,KAAUC,GAEtB,GAA0B,gBAAtB/C,EAAOQ,YAAgCsC,EAAQ,EAC/C,OAGJ,IAAIE,EAAO,IAAM/B,EAAW,uBAAyB,IACrDwB,QAAQQ,IAAID,EAAM,aAAcD,EAEpC,EA+FIG,UArDJ,SAAmBC,GAEf,GAAmB,iBAARA,EACP,IACI,OAAOC,KAAKC,MAAMF,EACrB,CAAC,MAAOG,GACR,CAGT,EA6CIrC,WAAYA,EACZsC,YApCJ,SAAqBC,EAAUC,EAAQC,EAAMC,GAEzCD,EAAOA,GAAQ,IACfC,EAAOA,GAAQ,aAEO,iBAAXF,IACPA,EAASL,KAAKQ,UAAUH,GACxBE,EAAO,oBAGC,cAARA,GAAwB3D,EAAOc,YAAY4C,KAC3CD,EAASzD,EAAOc,YAAY4C,GAAMzB,QAAQ,KAAMwB,IAGpDD,EAASK,UAAUH,EAAM,CACrB,iBAAkBD,EAAOnB,OACzB,eAAgBqB,IAGpBH,EAASM,MAAML,GACfD,EAASO,KAEb,GC9FA,IAAMlB,OAAAA,GAAW7B,EAKjBf,QAAQ+D,MAAQ,sBAGhB/D,QAAQC,IAAI+D,SAAWhE,QAAQiE,MAG/BjE,QAAQkE,KAAK,QAAQT,IACjBb,EAAO,EAAG,mBACG,IAATa,GAAczD,QAAQC,IAAIkE,iBAC1BnE,QAAQoE,KAAK,EAChB,ICrBL,IAAIC,EAAQtD,EAERhB,EAASuE,UAEP1B,EAAMK,UAAEA,GAAcsB,EAExBC,EAAYC,OAAOC,KAAK3E,EAAOe,gBAAiB,UAAU6D,WAGpDN,EAAMO,IAAIJ,EAAY,gBAAgBK,IAE5C,GAAsB,KAAlBA,EAAIC,WACJ,OAGJ,IAAIC,EAAM,GAEVF,EAAIG,GAAG,QAAQ7D,IACX4D,GAAO5D,EAAEwD,UAAU,IAGvBE,EAAIG,GAAG,OAAO,KACV,IAAIC,EAAOhC,EAAU8B,GACjBE,GAAQA,EAAKC,SACbtC,EAAOqC,EAAKC,QACf,GACH,IAIFF,GAAG,SAAS3B,IAEZT,EAAO,EAAG,iBAAkBS,EAAE6B,QAAQ,IChC1C,IAAIC,EAAKpE,EACLqE,EAAOd,EAEPvE,EAASwE,EAUb,SAASc,EAAQC,EAAMC,GACnB,OAA0B,IAAtBA,EAAKC,QAAQ,KACNF,EAAOC,EAEXH,EAAKK,KAAKH,EAAMC,EAC3B,CAqCA,IAAAG,EAAiB,CACbC,OA/BJ,SAAgBC,EAASrC,GAErB,IAAIsC,EAAa,IAAIC,IAAIF,EAAQG,IAAK,UAAUH,EAAQI,QAAQC,QAE5DC,EAAWd,EAAKK,KAAK1F,EAAOY,WAAYkF,EAAWM,UAGvDP,EAAQM,SAAW,GACnBN,EAAQC,WAAaA,EAGrB,IAAIO,EAAWjB,EAAGkB,WAAWH,IAAaf,EAAGmB,UAAUJ,GACvD,GAAIE,GAAYA,EAASG,SACrBX,EAAQM,SAAWA,OAKvB,IAAK,IAAIM,KAASzG,EAAOa,YAAa,CAClC,IAAI0E,EAAOD,EAAQa,EAAUM,GAC7B,GAAIrB,EAAGkB,WAAWf,GAEd,YADAM,EAAQM,SAAWZ,EAG1B,CAEL,EAMImB,MAAO,KCzDX,IAAIrB,EAAOrE,EAEP2C,EAAO,CACP,MAAO,aACPgD,EAAK,2BACLC,GAAM,yBACNC,IAAO,eACPC,KAAQ,eACRC,IAAO,4BACPC,IAAO,iBACPC,IAAO,aACPC,IAAO,iBACPC,KAAQ,uBACRC,GAAM,cACNC,IAAO,kBACPC,IAAO,2BACPC,IAAO,2BACPC,IAAO,YACPC,IAAO,sBACPC,EAAK,WACLC,IAAO,oCACPC,GAAM,WACNC,IAAO,8BACPC,MAAS,2BACTC,IAAO,2BACPC,KAAQ,aACRC,IAAO,WACPC,IAAO,6BACPC,IAAO,WACPC,IAAO,WACPC,IAAO,WACPC,IAAO,+BACPC,IAAO,6BACPC,KAAQ,cACRC,IAAO,iBACPC,KAAQ,iBACRC,IAAO,2BACPC,IAAO,2BACPC,IAAO,qBACPC,IAAO,qBACPC,IAAO,sBACPC,IAAO,oBACPC,IAAO,2BACPC,IAAO,iBACPC,IAAO,yBACPC,IAAO,2BACPC,EAAK,iBACLC,IAAO,iBACPC,IAAO,iBACPC,IAAO,cACPC,IAAO,iBACPC,IAAO,2BACPC,QAAW,qBACXC,IAAO,YACPC,GAAM,qBACNC,EAAK,WACLC,GAAM,WACNC,IAAO,YACPC,KAAQ,YACRC,IAAO,2BACPC,IAAO,gBACPC,IAAO,gBACPC,IAAO,2BACPC,IAAO,2BACPC,KAAQ,qBACRC,KAAQ,+BACRC,KAAQ,aACRC,IAAO,aACPC,GAAM,yBACNC,KAAQ,mBACR3H,IAAO,aACP4H,IAAO,kBACPC,IAAO,YACPC,IAAO,aACPC,OAAU,yBACVC,KAAQ,mBACRC,KAAQ,aACRC,GAAM,aACNC,IAAO,aACPC,KAAQ,aACR1H,KAAQ,iBACR2H,IAAO,yBACPC,IAAO,cACPC,IAAO,kBACPC,IAAO,aACPC,IAAO,YACPC,KAAQ,YACRC,KAAQ,aACRC,IAAO,aACPC,GAAM,aACNC,IAAO,2BACPC,IAAO,kDACPC,IAAO,iDACPC,IAAO,0CACPC,IAAO,kBACPC,EAAK,gBACLC,IAAO,gBACPC,IAAO,0BACPC,IAAO,kBACPC,IAAO,6BACPC,IAAO,2BACPC,IAAO,4BACPC,IAAO,2BACPC,GAAM,qBACNC,GAAM,4BACNC,IAAO,YACPC,IAAO,0BACPC,IAAO,0BACPC,IAAO,gCACPC,IAAO,gCACPC,GAAM,yBACNC,IAAO,4BACPC,GAAM,uBACNC,GAAM,kBACNC,GAAM,uBACNC,KAAQ,qBACRC,IAAO,uBACPC,IAAO,+BACPC,GAAM,qBACNC,IAAO,sBACPC,KAAQ,aACRC,IAAO,uCACPC,IAAO,sBACPC,IAAO,kBACPC,GAAM,qBACNC,EAAK,aACLC,IAAO,YACPC,KAAQ,YACRC,GAAM,mBACNC,IAAO,4BACPC,IAAO,cACPC,GAAM,2BACNC,IAAO,gBACPC,KAAQ,gBACRC,IAAO,gCACPC,EAAK,aACLC,IAAO,oBACPC,IAAO,oCACPC,IAAO,oBACPC,IAAO,oBACPC,KAAQ,wBACRC,QAAW,wBACXC,KAAQ,aACRC,IAAO,aACPC,KAAQ,aACRC,QAAW,2BACXC,GAAM,aACNC,IAAO,aACPC,IAAO,eACPC,IAAO,mBACPC,KAAQ,aACRC,IAAO,2BACPC,IAAO,cACPC,IAAO,iBACPC,IAAO,iBACPC,IAAO,iBACPC,IAAO,aACPC,KAAQ,uBACRC,IAAO,kBACPC,MAAS,wBACTC,IAAO,2BACPC,IAAO,kBACPC,IAAO,kBACPC,IAAO,kBACPC,KAAQ,uBACRC,KAAQ,YACRC,IAAO,YACPC,IAAO,kBACPC,GAAM,uBCxKV,IAAIzL,EAAKpE,EAEL8P,EDyKa,SAAUvL,GACvB,IAAIwL,EAAM1L,EAAK2L,QAAQzL,GAEvB,OADAwL,EAAMA,EAAMA,EAAIE,MAAM,GAAK,UACpBtN,EAAKoN,IAAQ,0BACxB,eC3KMxN,EAAWV,OAAEA,GAAW2B,EA4C9B,IAAA0M,EAAiB,CACbtL,OApCJ,SAAgBC,EAASrC,GAErB,IAAI2C,SAAEA,EAAQL,WAAEA,GAAeD,EAG/B,MAAiB,KAAbM,GACA5C,EAAYC,EAAUsC,EAAWM,SAAU,MACpC,IAIX5C,EAASK,UAAU,IAAK,CACpB,eAAgBiN,EAAY3K,KAGhCtD,EAAO,EAAG,oBAAqBsD,GAG/Bf,EAAG+L,iBAAiBhL,GACflB,GAAG,SAASmM,IACT7N,EAAYC,EAAUsC,EAAWM,SAAU,IAAI,IAElDnB,GAAG,QAAQoM,IACR7N,EAASM,MAAMuN,EAAM,IAExBpM,GAAG,OAAO,KACPzB,EAASO,KAAK,KAGf,EAEX,EAMI2C,MAAO,KClDX,IAAI4K,KAAEA,GAAStQ,GAETuC,YAAAA,GAAgBgB,EAkDtB,IAAAgN,EAAiB,CACb3L,OAhCJ,SAAgBC,EAASrC,GAErB,IAAI2C,SAAEA,EAAQL,WAAEA,GAAeD,EAE3BsJ,EAAO,GAEPqC,EAAO1L,EAAW2L,OAAOxP,QAAQ,MAAO,IAAIA,QAAQ,KAAM,KAE1DyP,EAAQJ,EAAK,GAAGrR,QAAQ0R,SAASxL,KAAYqL,IAAQ,CACrDI,aAAa,EACbC,QAAS,MAeb,OAZAH,EAAMI,OAAO7M,GAAG,QAAQC,IACpBiK,GAAQjK,CAAI,IAEhBwM,EAAMK,OAAO9M,GAAG,QAAQC,IACpBiK,GAAQjK,CAAI,IAGhBwM,EAAMzM,GAAG,QAAQvB,IAEbH,EAAYC,EAAU2L,EAAMzL,EAAK,KAG9B,CAEX,EAMIgD,MA1CJ,SAAe0F,EAAG/C,GACd,OAAOA,GAAK,gBAAgBrH,KAAKqH,EACrC,GCdA,IAAI9F,YAAEA,GAAgBvC,ECAtB,IAAIgR,EAAYhR,EACZiR,EAAW1N,EAOX2N,EAAW,CALH1N,EDgCK,CACboB,OAjBJ,SAAgBC,EAASrC,GAErB,IAAI2C,SAAEA,EAAQL,WAAEA,EAAUqM,SAAEA,GAAatM,EAQzC,OANYzF,QAAQ+F,EAEpBuL,CAAM,CAAE5L,aAAYqM,aAAY,CAAChD,EAAMzL,KACnCH,EAAYC,EAAU2L,EAAMzL,EAAK,KAG9B,CAEX,EAMIgD,MA3BJ,SAAe0F,EAAG/C,GACd,OAAOA,GAAK,gBAAgBrH,KAAKqH,EACrC,IC+BA,IAAAzD,EAAiB,CACbwM,KAhCJ,SAAcC,GACVH,EAASI,QAAQ,EAAG,EAAGD,EAC3B,EA+BIE,KA7BJ,SAAc1M,EAASrC,GAEnBwO,EAAUpM,OAAOC,EAASrC,GAE1B,IAAI2C,EAAWN,EAAQM,SACnBC,EAAWP,EAAQC,WAAWM,SAElC,IAAK,IAAIM,MAAEA,EAAKd,OAAEA,KAAYsM,EAE1B,IACKxL,aAAiBxE,QAAUwE,EAAM1E,KAAKoE,IACtCM,aAAiB/D,UAAY+D,EAAMN,EAAUD,IAC5B,iBAAVO,IAAiC,MAAVA,GAAiBA,IAAUN,KAEtDR,EAAOC,EAASrC,GAChB,OAAO,EAMnByO,EAASrM,OAAOC,EAASrC,EAE7B,GCvCA,IAAIgP,EAAOxR,EACPqE,EAAOd,EAEPvE,EAASwE,GAET3B,OAAEA,GAAW4P,EAEbC,EAAeC,EAAoBJ,KAKnCK,EAAaJ,EAAKK,cAAa,CAAChN,EAASrC,KAIzC,GAFAX,EAAO,EAAGgD,EAAQiN,OAAQ,IAAKjN,EAAQG,KAG9B,SADDH,EAAQiN,OACZ,CACI,IAAIC,EAAO,GACXlN,EAAQmN,YAAY,QAAQ9N,IACxB6N,GAAQ7N,CAAI,IAEhBW,EAAQmN,YAAY,OAAO,KACvB,IACInN,EAAQsM,SAAW/O,KAAKC,MAAM0P,EACjC,CAAC,MAAOzP,GACLT,EAAO,EAAG,0CACb,CACD6P,EAAa7M,EAASrC,EAAS,GAE7B,MAENkP,EAAa7M,EAASrC,EAE7B,IAILoP,EAAW3N,GAAG,SAASmM,IAEF,eAAbA,EAAI1N,OACJb,EAAO,EAAG,kBAAmB7C,EAAOU,WAAYV,EAAOW,YACvDkC,EAAO,EAAG,eAAgB7C,EAAOU,aAAcV,EAAOW,WAAY,MAClEiS,EAAWK,OAAOjT,EAAOW,WAAYX,EAAOU,WAAY,MAC3D,IAILkS,EAAW3N,GAAG,aAAa,KAEvB,IAAIiB,EAA6B,YAAtBlG,EAAOU,WAA2B,YAAcV,EAAOU,WAC9DwS,EAAOlT,EAAOW,WAAa,IAAO,EAAI,GAAK,IAAMX,EAAOW,WAE5DkC,EAAO,EAAG,kBAAmB,UAAYqD,EAAOgN,GAChDrQ,EAAO,EAAG,kBAAmB7C,EAAOY,WAAY,KAAK,ICtCzD,IAAIgC,EAAQ4B,EAER2O,ED2Ca,SAAUC,GAEvBA,GAAW9S,OAAOC,OAAOP,EAAQoT,GAEjCpT,EAAOY,WAAayE,EAAKgO,QAAQrT,EAAOY,YAExCgS,EAAWK,OAAOjT,EAAOW,WAAYX,EAAOU,WAAY,KAE5D,GCjDI0R,KAAEA,GAASO,EAEf,IAAAW,EAAiB,CACbC,OAAQ3Q,EACR4Q,KAAML,EACNM,IAAKrB"} |
+1
-1
| #!/usr/bin/env node | ||
| "use strict";var e=require("./main.js");require("fs"),require("https"),require("http"),require("path"),require("child_process");let r={},i=process.argv.slice(2),s=i[0]?i[0].split(":"):[];s[0]&&(r.WEBOX_HOST=s[0]),s[1]&&s[1]>0&&(r.WEBOX_PORT=s[1]),i[1]&&(r.WEBOX_ROOT=i[1]),e.init(r),module.exports={}; | ||
| "use strict";var e=require("./main-6099c937.js");require("fs"),require("https"),require("http"),require("path"),require("child_process");let r={},i=process.argv.slice(2),s=i[0]?i[0].split(":"):[];s[0]&&(r.WEBOX_HOST=s[0]),s[1]&&s[1]>0&&(r.WEBOX_PORT=s[1]),i[1]&&(r.WEBOX_ROOT=i[1]),e.main.init(r),module.exports={}; | ||
| //# sourceMappingURL=cli.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"cli.js","sources":["../src/cli.js"],"sourcesContent":["/**\n * Webox - HTTP Server\n * @author rehiy <wang@rehiy.com>\n * @Website http://www.rehiy.com/webox\n */\n\nlet config = {};\n\nlet params = process.argv.slice(2);\nlet listen = params[0] ? params[0].split(':') : [];\n\nif (listen[0]) {\n config.WEBOX_HOST = listen[0];\n}\n\nif (listen[1] && listen[1] > 0) {\n config.WEBOX_PORT = listen[1];\n}\n\nif (params[1]) {\n config.WEBOX_ROOT = params[1];\n}\n\n/////////////////////////////////////////////////////////////\n\nlet app = require('./main');\n\napp.init(config);\n"],"names":["config","params","process","argv","slice","listen","split","WEBOX_HOST","WEBOX_PORT","WEBOX_ROOT","require$$0","init"],"mappings":"gIAMA,IAAIA,EAAS,GAETC,EAASC,QAAQC,KAAKC,MAAM,GAC5BC,EAASJ,EAAO,GAAKA,EAAO,GAAGK,MAAM,KAAO,GAE5CD,EAAO,KACPL,EAAOO,WAAaF,EAAO,IAG3BA,EAAO,IAAMA,EAAO,GAAK,IACzBL,EAAOQ,WAAaH,EAAO,IAG3BJ,EAAO,KACPD,EAAOS,WAAaR,EAAO,IAKrBS,EAENC,KAAKX"} | ||
| {"version":3,"file":"cli.js","sources":["../src/cli.js"],"sourcesContent":["/**\n * Webox - HTTP Server\n * @author rehiy <wang@rehiy.com>\n * @Website http://www.rehiy.com/webox\n */\n\nlet config = {};\n\nlet params = process.argv.slice(2);\nlet listen = params[0] ? params[0].split(':') : [];\n\nif (listen[0]) {\n config.WEBOX_HOST = listen[0];\n}\n\nif (listen[1] && listen[1] > 0) {\n config.WEBOX_PORT = listen[1];\n}\n\nif (params[1]) {\n config.WEBOX_ROOT = params[1];\n}\n\n/////////////////////////////////////////////////////////////\n\nlet app = require('./main');\n\napp.init(config);\n"],"names":["config","params","process","argv","slice","listen","split","WEBOX_HOST","WEBOX_PORT","WEBOX_ROOT","require$$0","init"],"mappings":"yIAMA,IAAIA,EAAS,CAAA,EAETC,EAASC,QAAQC,KAAKC,MAAM,GAC5BC,EAASJ,EAAO,GAAKA,EAAO,GAAGK,MAAM,KAAO,GAE5CD,EAAO,KACPL,EAAOO,WAAaF,EAAO,IAG3BA,EAAO,IAAMA,EAAO,GAAK,IACzBL,EAAOQ,WAAaH,EAAO,IAG3BJ,EAAO,KACPD,EAAOS,WAAaR,EAAO,IAKrBS,EAAAA,KAENC,KAAKX"} |
+1
-1
@@ -1,2 +0,2 @@ | ||
| "use strict";var t=require("fs"),e=require("https"),a=require("http"),i=require("path"),o=require("child_process");function p(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var n=p(t),r=p(e),l=p(a),s=p(i),c=p(o);let m={};process.env.WEBOX_CONF_FILE&&(m=require(process.env.WEBOX_CONF_FILE));var x=Object.assign({WEBOX_MODE:process.env.NODE_ENV||"development",WEBOX_HOST:"127.0.0.1",WEBOX_PORT:80,WEBOX_ROOT:"webroot",WEBOX_INDEX:["index.html","index.htm"],WEBOX_ERROR:{200:"%s",400:"Bad Request: %s",403:"Forbidden : %s",404:"NO Found: %s",500:"Internal Server Error: %s",503:"Service Unavilable: %s"},WEBOX_CHECK_API:"aHR0cHM6Ly9hcGkudm1sdS5jb20vd2Vib3gvP3BsYXRmb3JtPW5vZGU="},m);let d=x;function f(t,e){let a=e||new Date,i={"M+":a.getMonth()+1,"d+":a.getDate(),"h+":a.getHours(),"m+":a.getMinutes(),"s+":a.getSeconds(),"q+":Math.floor((a.getMonth()+3)/3),S:a.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(a.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1===RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}void 0===console.light&&(console.light=Function);var g={logger:function(t,...e){if("development"!==d.WEBOX_MODE&&t>0)return;let a="["+f("yyyy-MM-dd hh:mm:ss")+"]";console.log(a,"Webox -",...e)},parseJSON:function(t){if("string"==typeof t)try{return JSON.parse(t)}catch(t){}},dateFormat:f,httpMessage:function(t,e,a,i){a=a||200,i=i||"text/plain","object"==typeof e&&(e=JSON.stringify(e),i="application/json"),"text/plain"==i&&d.WEBOX_ERROR[a]&&(e=d.WEBOX_ERROR[a].replace("%s",e)),t.writeHead(a,{"Content-Length":e.length,"Content-Type":i}),t.write(e),t.end()}};let{logger:u}=g;process.title="Webox - HTTP Server",process.env.INIT_CWD=process.cwd(),process.once("exit",(t=>{u(0,"Service Stopped"),0===t&&process.env.WEBOX_EXIT_CODE&&process.exit(1)}));let v=r.default,h=x,{logger:O,parseJSON:E}=g,b=Buffer.from(h.WEBOX_CHECK_API,"base64").toString();v.get(b+"&version=3.3.12",(t=>{if(200!=t.statusCode)return;let e="";t.on("data",(t=>{e+=t.toString()})),t.on("end",(()=>{let t=E(e);t&&t.message&&O(t.message)}))})).on("error",(t=>{O(1,"Checker Error:",t.message)}));let R=n.default,_=s.default,w=x;function W(t,e){return 0===e.indexOf(".")?t+e:_.join(t,e)}var X={route:"*",handle:function(t,e){let a=new URL(t.url,`http://${t.headers.host}`),i=_.join(w.WEBOX_ROOT,a.pathname);t.filename="",t.requestURL=a;let o=R.existsSync(i)&&R.lstatSync(i);if(o&&o.isFile())t.filename=i;else for(let e of w.WEBOX_INDEX){let a=W(i,e);if(R.existsSync(a))return void(t.filename=a)}}};let B=s.default,S={"3gp":"video/3gpp",a:"application/octet-stream",ai:"application/postscript",aif:"audio/x-aiff",aiff:"audio/x-aiff",asc:"application/pgp-signature",asf:"video/x-ms-asf",asm:"text/x-asm",asx:"video/x-ms-asf",atom:"application/atom+xml",au:"audio/basic",avi:"video/x-msvideo",bat:"application/x-msdownload",bin:"application/octet-stream",bmp:"image/bmp",bz2:"application/x-bzip2",c:"text/x-c",cab:"application/vnd.ms-cab-compressed",cc:"text/x-c",chm:"application/vnd.ms-htmlhelp",class:"application/octet-stream",com:"application/x-msdownload",conf:"text/plain",cpp:"text/x-c",crt:"application/x-x509-ca-cert",css:"text/css",csv:"text/csv",cxx:"text/x-c",deb:"application/x-debian-package",der:"application/x-x509-ca-cert",diff:"text/x-diff",djv:"image/vnd.djvu",djvu:"image/vnd.djvu",dll:"application/x-msdownload",dmg:"application/octet-stream",doc:"application/msword",dot:"application/msword",dtd:"application/xml-dtd",dvi:"application/x-dvi",ear:"application/java-archive",eml:"message/rfc822",eps:"application/postscript",exe:"application/x-msdownload",f:"text/x-fortran",f77:"text/x-fortran",f90:"text/x-fortran",flv:"video/x-flv",for:"text/x-fortran",gem:"application/octet-stream",gemspec:"text/x-script.ruby",gif:"image/gif",gz:"application/x-gzip",h:"text/x-c",hh:"text/x-c",htm:"text/html",html:"text/html",ico:"image/vnd.microsoft.icon",ics:"text/calendar",ifb:"text/calendar",iso:"application/octet-stream",jar:"application/java-archive",java:"text/x-java-source",jnlp:"application/x-java-jnlp-file",jpeg:"image/jpeg",jpg:"image/jpeg",js:"application/javascript",json:"application/json",log:"text/plain",m3u:"audio/x-mpegurl",m4v:"video/mp4",man:"text/troff",mathml:"application/mathml+xml",mbox:"application/mbox",mdoc:"text/troff",me:"text/troff",mid:"audio/midi",midi:"audio/midi",mime:"message/rfc822",mml:"application/mathml+xml",mng:"video/x-mng",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",mp4v:"video/mp4",mpeg:"video/mpeg",mpg:"video/mpeg",ms:"text/troff",msi:"application/x-msdownload",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"application/ogg",p:"text/x-pascal",pas:"text/x-pascal",pbm:"image/x-portable-bitmap",pdf:"application/pdf",pem:"application/x-x509-ca-cert",pgm:"image/x-portable-graymap",pgp:"application/pgp-encrypted",pkg:"application/octet-stream",pl:"text/x-script.perl",pm:"text/x-script.perl-module",png:"image/png",pnm:"image/x-portable-anymap",ppm:"image/x-portable-pixmap",pps:"application/vnd.ms-powerpoint",ppt:"application/vnd.ms-powerpoint",ps:"application/postscript",psd:"image/vnd.adobe.photoshop",py:"text/x-script.python",qt:"video/quicktime",ra:"audio/x-pn-realaudio",rake:"text/x-script.ruby",ram:"audio/x-pn-realaudio",rar:"application/x-rar-compressed",rb:"text/x-script.ruby",rdf:"application/rdf+xml",roff:"text/troff",rpm:"application/x-redhat-package-manager",rss:"application/rss+xml",rtf:"application/rtf",ru:"text/x-script.ruby",s:"text/x-asm",sgm:"text/sgml",sgml:"text/sgml",sh:"application/x-sh",sig:"application/pgp-signature",snd:"audio/basic",so:"application/octet-stream",svg:"image/svg+xml",svgz:"image/svg+xml",swf:"application/x-shockwave-flash",t:"text/troff",tar:"application/x-tar",tbz:"application/x-bzip-compressed-tar",tcl:"application/x-tcl",tex:"application/x-tex",texi:"application/x-texinfo",texinfo:"application/x-texinfo",text:"text/plain",tif:"image/tiff",tiff:"image/tiff",torrent:"application/x-bittorrent",tr:"text/troff",txt:"text/plain",vcf:"text/x-vcard",vcs:"text/x-vcalendar",vrml:"model/vrml",war:"application/java-archive",wav:"audio/x-wav",wma:"audio/x-ms-wma",wmv:"video/x-ms-wmv",wmx:"video/x-ms-wmx",wrl:"model/vrml",wsdl:"application/wsdl+xml",xbm:"image/x-xbitmap",xhtml:"application/xhtml+xml",xls:"application/vnd.ms-excel",xml:"application/xml",xpm:"image/x-xpixmap",xsl:"application/xml",xslt:"application/xslt+xml",yaml:"text/yaml",yml:"text/yaml",zip:"application/zip",mf:"text/cache-manifest"};let y=n.default,j=function(t){let e=B.extname(t);return e=e?e.slice(1):"unknown",S[e]||"application/octet-stream"},{httpMessage:T,logger:q}=g;var H={route:"*",handle:function(t,e){let{filename:a,requestURL:i}=t;return""===a?(T(e,i.pathname,404),!0):(e.writeHead(200,{"Content-Type":j(a)}),q(1,"Send Static File:",a),y.createReadStream(a).on("error",(t=>{T(e,i.pathname,503)})).on("data",(t=>{e.write(t)})).on("end",(()=>{e.end()})),!0)}};let{exec:P}=c.default,{httpMessage:D}=g;var M={route:function(t,e){return e&&/\.cgi(\.js)?$/.test(e)},handle:function(t,e){let{filename:a,requestURL:i}=t,o="",p=i.search.replace(/^\?/,"").replace(/&/g," "),n=P(`${process.argv0} ${a} ${p}`,{windowsHide:!0,timeout:6e4});return n.stdout.on("data",(t=>{o+=t})),n.stderr.on("data",(t=>{o+=t})),n.on("exit",(t=>{D(e,o,t)})),!0}};let{httpMessage:N}=g;let C=X,F=H,L=[M,{route:function(t,e){return e&&/\.cjs(\.js)?$/.test(e)},handle:function(t,e){let{filename:a,requestURL:i,postData:o}=t;return require(a)({requestURL:i,postData:o},((t,a)=>{N(e,t,a)})),!0}}];var I={push:function(t){L.splice(-2,0,t)},call:function(t,e){C.handle(t,e);let a=t.filename,i=t.requestURL.pathname;for(let{route:o,handle:p}of L)if((o instanceof RegExp&&o.test(i)||o instanceof Function&&o(i,a)||"string"==typeof o&&("*"===o||o===i))&&p(t,e))return!0;F.handle(t,e)}};let k=l.default,U=s.default,$=x,{logger:z}=g,J=I.call,A=k.createServer(((t,e)=>{switch(z(1,t.method,"-",t.url),t.method){case"POST":let a="";t.addListener("data",(t=>{a+=t})),t.addListener("end",(()=>{try{t.postData=JSON.parse(a)}catch(t){z(0,"POST Error: Only JSON data is supported")}J(t,e)}));break;default:J(t,e)}}));A.on("error",(t=>{"EADDRINUSE"===t.code&&(z(0,"IP-Port in use:",$.WEBOX_HOST,$.WEBOX_PORT),z(0,"Failover to:",$.WEBOX_HOST,++$.WEBOX_PORT,"\n"),A.listen($.WEBOX_PORT,$.WEBOX_HOST,1024))})),A.on("listening",(()=>{let t="0.0.0.0"===$.WEBOX_HOST?"127.0.0.1":$.WEBOX_HOST,e=$.WEBOX_PORT-80==0?"":":"+$.WEBOX_PORT;z(0,"Server started:","http://"+t+e),z(0,"Root Directory:",$.WEBOX_ROOT,"\n")}));let G=g,K=function(t){t&&Object.assign($,t),$.WEBOX_ROOT=U.resolve($.WEBOX_ROOT),A.listen($.WEBOX_PORT,$.WEBOX_HOST,1024)},{push:V}=I;var Y={helper:G,init:K,use:V};module.exports=Y; | ||
| "use strict";var e=require("./main-6099c937.js");require("fs"),require("https"),require("http"),require("path"),require("child_process"),module.exports=e.main$1; | ||
| //# sourceMappingURL=main.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"main.js","sources":["../src/helper/config.js","../src/helper/utils.js","../src/env.js","../src/helper/check.js","../src/middleware/prepare.js","../src/helper/mime.js","../src/middleware/static.js","../src/middleware/use.cgi.js","../src/middleware/use.cjs.js","../src/core/handle.js","../src/core/server.js","../src/main.js"],"sourcesContent":["let fs = require('fs');\n\n// 加载用户配置\n\nlet config = {};\n\nif (process.env.WEBOX_CONF_FILE) {\n config = require(process.env.WEBOX_CONF_FILE);\n}\n\n// 合并配置参数\n\nmodule.exports = Object.assign({\n\n // production or development\n WEBOX_MODE: process.env.NODE_ENV || 'development',\n\n WEBOX_HOST: '127.0.0.1',\n\n WEBOX_PORT: 80,\n\n WEBOX_ROOT: 'webroot',\n\n WEBOX_INDEX: [\n 'index.html',\n 'index.htm'\n ],\n\n WEBOX_ERROR: {\n 200: '%s',\n 400: 'Bad Request: %s',\n 403: 'Forbidden : %s',\n 404: 'NO Found: %s',\n 500: 'Internal Server Error: %s',\n 503: 'Service Unavilable: %s'\n },\n\n WEBOX_CHECK_API: 'aHR0cHM6Ly9hcGkudm1sdS5jb20vd2Vib3gvP3BsYXRmb3JtPW5vZGU='\n\n}, config);\n","let config = require('./config');\n\n/**\n * 控制台日志\n * @param {number} level 日志级别\n * @param {...any} msg 日志内容\n */\n\nfunction logger(level, ...msg) {\n\n if (config.WEBOX_MODE !== 'development' && level > 0) {\n return;\n }\n\n let time = '[' + dateFormat('yyyy-MM-dd hh:mm:ss') + ']';\n console.log(time, 'Webox -', ...msg);\n\n}\n\n/**\n * 时间格式化\n * @param {string} fmt 格式化选项\n * @param {Date} date 日期对象,默认为当前时间\n * @returns 格式化后的字符串\n */\n\nfunction dateFormat(fmt, date) {\n\n let d = date || new Date();\n let o = {\n 'M+': d.getMonth() + 1, //月\n 'd+': d.getDate(), //日\n 'h+': d.getHours(), //时\n 'm+': d.getMinutes(), //分\n 's+': d.getSeconds(), //秒\n 'q+': Math.floor((d.getMonth() + 3) / 3), //季度\n 'S': d.getMilliseconds() //毫秒\n };\n\n if (/(y+)/.test(fmt)) { //年\n fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));\n }\n\n for (let k in o) {\n if (new RegExp('(' + k + ')').test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));\n }\n }\n\n return fmt;\n\n}\n\n/**\n * 尝试解析JSON\n * @param {string} str JSON字符串\n * @returns 成功返回结果,失败返回`undefined`\n */\n\nfunction parseJSON(str) {\n\n if (typeof str === 'string') {\n try {\n return JSON.parse(str);\n } catch (e) {\n }\n }\n\n}\n\n/**\n * 输出HTTP消息\n * @param {http.ServerResponse} response 响应对象\n * @param {string | object} output 输出内容\n * @param {number} code 状态码\n * @param {string} mime 内容类型\n */\n\nfunction httpMessage(response, output, code, mime) {\n\n code = code || 200;\n mime = mime || 'text/plain';\n\n if (typeof output === 'object') {\n output = JSON.stringify(output);\n mime = 'application/json';\n }\n\n if (mime == 'text/plain' && config.WEBOX_ERROR[code]) {\n output = config.WEBOX_ERROR[code].replace('%s', output);\n }\n\n response.writeHead(code, {\n 'Content-Length': output.length,\n 'Content-Type': mime\n });\n\n response.write(output);\n response.end();\n\n}\n\n/**\n * 仅用于兼容老版调试工具\n */\n\nif (console.light === undefined) {\n console.light = Function;\n}\n\nmodule.exports = {\n logger: logger,\n parseJSON: parseJSON,\n dateFormat: dateFormat,\n httpMessage: httpMessage\n};\n","/**\n * Webox - HTTP Server\n * @author rehiy <wang@rehiy.com>\n * @Website http://www.rehiy.com/webox\n */\n\nlet { logger } = require('./helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n// set title\nprocess.title = 'Webox - HTTP Server';\n\n// set env var for ORIGINAL cwd\nprocess.env.INIT_CWD = process.cwd();\n\n// normal exit with 0 or 1\nprocess.once('exit', code => {\n logger(0, 'Service Stopped');\n if (code === 0 && process.env.WEBOX_EXIT_CODE) {\n process.exit(1);\n }\n});\n","let https = require('https');\n\nlet config = require('./config');\n\nlet { logger, parseJSON } = require('./utils');\n\nlet CHECK_API = Buffer.from(config.WEBOX_CHECK_API, 'base64').toString();\n\n\nlet req = https.get(CHECK_API + '&version=dev', res => {\n\n if (res.statusCode != 200) {\n return;\n }\n\n let raw = '';\n\n res.on('data', d => {\n raw += d.toString();\n });\n\n res.on('end', () => {\n let data = parseJSON(raw);\n if (data && data.message) {\n logger(data.message);\n }\n });\n\n});\n\nreq.on('error', e => {\n\n logger(1, 'Checker Error:', e.message);\n\n});\n","let fs = require('fs');\nlet path = require('path');\n\nlet config = require('../helper/config');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 补全文件路径\n * @param {string} file 路径\n * @param {string} suff 后缀\n * @returns \n */\nfunction fixpath(file, suff) {\n if (suff.indexOf('.') === 0) {\n return file + suff;\n }\n return path.join(file, suff);\n}\n\n/**\n * 解析HTTP请求\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let requestURL = new URL(request.url, `http://${request.headers.host}`);\n\n let filename = path.join(config.WEBOX_ROOT, requestURL.pathname);\n\n //添加基础属性\n request.filename = '';\n request.requestURL = requestURL;\n\n //文件存在直接返回\n let filestat = fs.existsSync(filename) && fs.lstatSync(filename);\n if (filestat && filestat.isFile()) {\n request.filename = filename;\n return;\n }\n\n //尝试返回默认首页\n for (let index of config.WEBOX_INDEX) {\n let file = fixpath(filename, index);\n if (fs.existsSync(file)) {\n request.filename = file;\n return;\n }\n }\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n route: '*',\n handle: handle\n};\n","let path = require('path');\n\nlet mime = {\n '3gp': 'video/3gpp',\n 'a': 'application/octet-stream',\n 'ai': 'application/postscript',\n 'aif': 'audio/x-aiff',\n 'aiff': 'audio/x-aiff',\n 'asc': 'application/pgp-signature',\n 'asf': 'video/x-ms-asf',\n 'asm': 'text/x-asm',\n 'asx': 'video/x-ms-asf',\n 'atom': 'application/atom+xml',\n 'au': 'audio/basic',\n 'avi': 'video/x-msvideo',\n 'bat': 'application/x-msdownload',\n 'bin': 'application/octet-stream',\n 'bmp': 'image/bmp',\n 'bz2': 'application/x-bzip2',\n 'c': 'text/x-c',\n 'cab': 'application/vnd.ms-cab-compressed',\n 'cc': 'text/x-c',\n 'chm': 'application/vnd.ms-htmlhelp',\n 'class': 'application/octet-stream',\n 'com': 'application/x-msdownload',\n 'conf': 'text/plain',\n 'cpp': 'text/x-c',\n 'crt': 'application/x-x509-ca-cert',\n 'css': 'text/css',\n 'csv': 'text/csv',\n 'cxx': 'text/x-c',\n 'deb': 'application/x-debian-package',\n 'der': 'application/x-x509-ca-cert',\n 'diff': 'text/x-diff',\n 'djv': 'image/vnd.djvu',\n 'djvu': 'image/vnd.djvu',\n 'dll': 'application/x-msdownload',\n 'dmg': 'application/octet-stream',\n 'doc': 'application/msword',\n 'dot': 'application/msword',\n 'dtd': 'application/xml-dtd',\n 'dvi': 'application/x-dvi',\n 'ear': 'application/java-archive',\n 'eml': 'message/rfc822',\n 'eps': 'application/postscript',\n 'exe': 'application/x-msdownload',\n 'f': 'text/x-fortran',\n 'f77': 'text/x-fortran',\n 'f90': 'text/x-fortran',\n 'flv': 'video/x-flv',\n 'for': 'text/x-fortran',\n 'gem': 'application/octet-stream',\n 'gemspec': 'text/x-script.ruby',\n 'gif': 'image/gif',\n 'gz': 'application/x-gzip',\n 'h': 'text/x-c',\n 'hh': 'text/x-c',\n 'htm': 'text/html',\n 'html': 'text/html',\n 'ico': 'image/vnd.microsoft.icon',\n 'ics': 'text/calendar',\n 'ifb': 'text/calendar',\n 'iso': 'application/octet-stream',\n 'jar': 'application/java-archive',\n 'java': 'text/x-java-source',\n 'jnlp': 'application/x-java-jnlp-file',\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'js': 'application/javascript',\n 'json': 'application/json',\n 'log': 'text/plain',\n 'm3u': 'audio/x-mpegurl',\n 'm4v': 'video/mp4',\n 'man': 'text/troff',\n 'mathml': 'application/mathml+xml',\n 'mbox': 'application/mbox',\n 'mdoc': 'text/troff',\n 'me': 'text/troff',\n 'mid': 'audio/midi',\n 'midi': 'audio/midi',\n 'mime': 'message/rfc822',\n 'mml': 'application/mathml+xml',\n 'mng': 'video/x-mng',\n 'mov': 'video/quicktime',\n 'mp3': 'audio/mpeg',\n 'mp4': 'video/mp4',\n 'mp4v': 'video/mp4',\n 'mpeg': 'video/mpeg',\n 'mpg': 'video/mpeg',\n 'ms': 'text/troff',\n 'msi': 'application/x-msdownload',\n 'odp': 'application/vnd.oasis.opendocument.presentation',\n 'ods': 'application/vnd.oasis.opendocument.spreadsheet',\n 'odt': 'application/vnd.oasis.opendocument.text',\n 'ogg': 'application/ogg',\n 'p': 'text/x-pascal',\n 'pas': 'text/x-pascal',\n 'pbm': 'image/x-portable-bitmap',\n 'pdf': 'application/pdf',\n 'pem': 'application/x-x509-ca-cert',\n 'pgm': 'image/x-portable-graymap',\n 'pgp': 'application/pgp-encrypted',\n 'pkg': 'application/octet-stream',\n 'pl': 'text/x-script.perl',\n 'pm': 'text/x-script.perl-module',\n 'png': 'image/png',\n 'pnm': 'image/x-portable-anymap',\n 'ppm': 'image/x-portable-pixmap',\n 'pps': 'application/vnd.ms-powerpoint',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'ps': 'application/postscript',\n 'psd': 'image/vnd.adobe.photoshop',\n 'py': 'text/x-script.python',\n 'qt': 'video/quicktime',\n 'ra': 'audio/x-pn-realaudio',\n 'rake': 'text/x-script.ruby',\n 'ram': 'audio/x-pn-realaudio',\n 'rar': 'application/x-rar-compressed',\n 'rb': 'text/x-script.ruby',\n 'rdf': 'application/rdf+xml',\n 'roff': 'text/troff',\n 'rpm': 'application/x-redhat-package-manager',\n 'rss': 'application/rss+xml',\n 'rtf': 'application/rtf',\n 'ru': 'text/x-script.ruby',\n 's': 'text/x-asm',\n 'sgm': 'text/sgml',\n 'sgml': 'text/sgml',\n 'sh': 'application/x-sh',\n 'sig': 'application/pgp-signature',\n 'snd': 'audio/basic',\n 'so': 'application/octet-stream',\n 'svg': 'image/svg+xml',\n 'svgz': 'image/svg+xml',\n 'swf': 'application/x-shockwave-flash',\n 't': 'text/troff',\n 'tar': 'application/x-tar',\n 'tbz': 'application/x-bzip-compressed-tar',\n 'tcl': 'application/x-tcl',\n 'tex': 'application/x-tex',\n 'texi': 'application/x-texinfo',\n 'texinfo': 'application/x-texinfo',\n 'text': 'text/plain',\n 'tif': 'image/tiff',\n 'tiff': 'image/tiff',\n 'torrent': 'application/x-bittorrent',\n 'tr': 'text/troff',\n 'txt': 'text/plain',\n 'vcf': 'text/x-vcard',\n 'vcs': 'text/x-vcalendar',\n 'vrml': 'model/vrml',\n 'war': 'application/java-archive',\n 'wav': 'audio/x-wav',\n 'wma': 'audio/x-ms-wma',\n 'wmv': 'video/x-ms-wmv',\n 'wmx': 'video/x-ms-wmx',\n 'wrl': 'model/vrml',\n 'wsdl': 'application/wsdl+xml',\n 'xbm': 'image/x-xbitmap',\n 'xhtml': 'application/xhtml+xml',\n 'xls': 'application/vnd.ms-excel',\n 'xml': 'application/xml',\n 'xpm': 'image/x-xpixmap',\n 'xsl': 'application/xml',\n 'xslt': 'application/xslt+xml',\n 'yaml': 'text/yaml',\n 'yml': 'text/yaml',\n 'zip': 'application/zip',\n 'mf': 'text/cache-manifest'\n};\n\nmodule.exports = function (file) {\n let ext = path.extname(file);\n ext = ext ? ext.slice(1) : 'unknown';\n return mime[ext] || 'application/octet-stream';\n}\n","let fs = require('fs');\n\nlet getMimeType = require('../helper/mime');\n\nlet { httpMessage, logger } = require('../helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 处理静态文件\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let { filename, requestURL } = request;\n\n //找不到文件\n if (filename === '') {\n httpMessage(response, requestURL.pathname, 404);\n return true;\n }\n\n //输出文件头\n response.writeHead(200, {\n 'Content-Type': getMimeType(filename)\n });\n\n logger(1, 'Send Static File:', filename);\n\n //流式发送文件\n fs.createReadStream(filename)\n .on('error', err => {\n httpMessage(response, requestURL.pathname, 503);\n })\n .on('data', chunk => {\n response.write(chunk);\n })\n .on('end', () => {\n response.end();\n });\n\n return true;\n\n};\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n route: '*',\n handle: handle\n};\n","let { exec } = require('child_process');\n\nlet { httpMessage } = require('../helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 路由检查\n * @param {string} p pathname\n * @param {string} f filename\n * @returns 是否调用处理函数\n */\nfunction route(p, f) {\n return f && /\\.cgi(\\.js)?$/.test(f);\n}\n\n/**\n * 处理HTTP请求\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let { filename, requestURL } = request;\n\n let text = '';\n\n let args = requestURL.search.replace(/^\\?/, '').replace(/&/g, ' ');\n\n let child = exec(`${process.argv0} ${filename} ${args}`, {\n windowsHide: true,\n timeout: 60000\n });\n\n child.stdout.on('data', data => {\n text += data;\n });\n child.stderr.on('data', data => {\n text += data;\n });\n\n child.on('exit', code => {\n code === 0 ? 200 : 503;\n httpMessage(response, text, code);\n });\n\n return true;\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n route: route,\n handle: handle\n};\n\n","let { httpMessage } = require('../helper/utils');\n\n/////////////////////////////////////////////////////////////\n\n/**\n * 路由检查\n * @param {string} p pathname\n * @param {string} f filename\n * @returns 是否调用处理函数\n */\nfunction route(p, f) {\n return f && /\\.cjs(\\.js)?$/.test(f);\n}\n\n/**\n * 处理HTTP请求\n * @param {http.IncomingMessage} request HTTP请求\n * @param {http.ServerResponse} response HTTP响应\n */\nfunction handle(request, response) {\n\n let { filename, requestURL, postData } = request;\n\n let child = require(filename);\n\n child({ requestURL, postData }, (text, code) => {\n httpMessage(response, text, code);\n });\n\n return true;\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n route: route,\n handle: handle\n};\n","let M_prepare = require('../middleware/prepare');\nlet M_static = require('../middleware/static');\n\nlet M_cgi = require('../middleware/use.cgi');\nlet M_cjs = require('../middleware/use.cjs');\n\n/////////////////////////////////////////////////////////////\n\nlet handlers = [\n M_cgi, M_cjs\n];\n\nfunction push(handler) {\n handlers.splice(-2, 0, handler);\n}\n\nfunction call(request, response) {\n\n M_prepare.handle(request, response);\n\n let filename = request.filename;\n let pathname = request.requestURL.pathname;\n\n for (let { route, handle } of handlers) {\n\n if (\n (route instanceof RegExp && route.test(pathname)) ||\n (route instanceof Function && route(pathname, filename)) ||\n (typeof route === 'string' && (route === '*' || route === pathname))\n ) {\n if (handle(request, response)) {\n return true;\n }\n }\n\n }\n\n M_static.handle(request, response);\n\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n push: push,\n call: call\n};\n","let http = require('http');\nlet path = require('path');\n\nlet config = require('../helper/config');\n\nlet { logger } = require('../helper/utils');\n\nlet handleCaller = require('./handle').call;\n\n/////////////////////////////////////////////////////////////\n// create server\n\nlet httpServer = http.createServer((request, response) => {\n\n logger(1, request.method, '-', request.url);\n\n switch (request.method) {\n case 'POST':\n let body = '';\n request.addListener('data', data => {\n body += data\n });\n request.addListener('end', () => {\n try {\n request.postData = JSON.parse(body);\n } catch (e) {\n logger(0, 'POST Error: Only JSON data is supported');\n }\n handleCaller(request, response);\n });\n break;\n default:\n handleCaller(request, response);\n break;\n }\n\n});\n\nhttpServer.on('error', err => {\n\n if (err.code === 'EADDRINUSE') {\n logger(0, 'IP-Port in use:', config.WEBOX_HOST, config.WEBOX_PORT);\n logger(0, 'Failover to:', config.WEBOX_HOST, ++config.WEBOX_PORT, '\\n');\n httpServer.listen(config.WEBOX_PORT, config.WEBOX_HOST, 1024);\n }\n\n});\n\nhttpServer.on('listening', () => {\n\n let host = config.WEBOX_HOST === '0.0.0.0' ? '127.0.0.1' : config.WEBOX_HOST;\n let port = config.WEBOX_PORT - 80 === 0 ? '' : ':' + config.WEBOX_PORT;\n\n logger(0, 'Server started:', 'http://' + host + port);\n logger(0, 'Root Directory:', config.WEBOX_ROOT, '\\n');\n\n});\n\n/////////////////////////////////////////////////////////////\n// start server\n\nmodule.exports = function (options) {\n\n options && Object.assign(config, options);\n\n config.WEBOX_ROOT = path.resolve(config.WEBOX_ROOT);\n\n httpServer.listen(config.WEBOX_PORT, config.WEBOX_HOST, 1024);\n\n};\n","/**\n * Webox - HTTP Server\n * @author rehiy <wang@rehiy.com>\n * @Website http://www.rehiy.com/webox\n */\n\n'use strict';\n\n// load env\nrequire('./env');\n\n// security check\nrequire('./helper/check');\n\n/////////////////////////////////////////////////////////////\n\nlet utils = require('./helper/utils');\n\nlet server = require('./core/server');\n\nlet { push } = require('./core/handle');\n\nmodule.exports = {\n helper: utils,\n init: server,\n use: push\n};\n"],"names":["config","process","env","WEBOX_CONF_FILE","require","config_1","Object","assign","WEBOX_MODE","NODE_ENV","WEBOX_HOST","WEBOX_PORT","WEBOX_ROOT","WEBOX_INDEX","WEBOX_ERROR","WEBOX_CHECK_API","require$$0","dateFormat","fmt","date","d","Date","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","undefined","console","light","Function","utils","logger","level","msg","time","log","parseJSON","str","JSON","parse","e","httpMessage","response","output","code","mime","stringify","writeHead","write","end","title","INIT_CWD","cwd","once","WEBOX_EXIT_CODE","exit","https","require$$1","require$$2","CHECK_API","Buffer","from","toString","get","res","statusCode","raw","on","data","message","fs","path","fixpath","file","suff","indexOf","join","prepare","route","handle","request","requestURL","URL","url","headers","host","filename","pathname","filestat","existsSync","lstatSync","isFile","index","a","ai","aif","aiff","asc","asf","asm","asx","atom","au","avi","bat","bin","bmp","bz2","c","cab","cc","chm","class","com","conf","cpp","crt","css","csv","cxx","deb","der","diff","djv","djvu","dll","dmg","doc","dot","dtd","dvi","ear","eml","eps","exe","f","f77","f90","flv","for","gem","gemspec","gif","gz","h","hh","htm","html","ico","ics","ifb","iso","jar","java","jnlp","jpeg","jpg","js","json","m3u","m4v","man","mathml","mbox","mdoc","me","mid","midi","mml","mng","mov","mp3","mp4","mp4v","mpeg","mpg","ms","msi","odp","ods","odt","ogg","p","pas","pbm","pdf","pem","pgm","pgp","pkg","pl","pm","png","pnm","ppm","pps","ppt","ps","psd","py","qt","ra","rake","ram","rar","rb","rdf","roff","rpm","rss","rtf","ru","s","sgm","sgml","sh","sig","snd","so","svg","svgz","swf","t","tar","tbz","tcl","tex","texi","texinfo","text","tif","tiff","torrent","tr","txt","vcf","vcs","vrml","war","wav","wma","wmv","wmx","wrl","wsdl","xbm","xhtml","xls","xml","xpm","xsl","xslt","yaml","yml","zip","mf","getMimeType","ext","extname","slice","_static","createReadStream","err","chunk","exec","use_cgi","args","search","child","argv0","windowsHide","timeout","stdout","stderr","M_prepare","M_static","handlers","postData","handle_1","push","handler","splice","call","http","require$$3","handleCaller","require$$4","httpServer","createServer","method","body","addListener","listen","port","server","options","resolve","main","helper","init","use"],"mappings":"kOAIA,IAAIA,EAAS,GAETC,QAAQC,IAAIC,kBACZH,EAASI,QAAQH,QAAQC,IAAIC,sBAKjCE,EAAiBC,OAAOC,OAAO,CAG3BC,WAAYP,QAAQC,IAAIO,UAAY,cAEpCC,WAAY,YAEZC,WAAY,GAEZC,WAAY,UAEZC,YAAa,CACT,aACA,aAGJC,YAAa,CACT,IAAK,KACL,IAAK,kBACL,IAAK,iBACL,IAAK,eACL,IAAK,4BACL,IAAK,0BAGTC,gBAAiB,4DAElBf,GCvCH,IAAIA,EAASgB,EA0Bb,SAASC,EAAWC,EAAKC,GAErB,IAAIC,EAAID,GAAQ,IAAIE,KAChBC,EAAI,CACJ,KAAMF,EAAEG,WAAa,EACrB,KAAMH,EAAEI,UACR,KAAMJ,EAAEK,WACR,KAAML,EAAEM,aACR,KAAMN,EAAEO,aACR,KAAMC,KAAKC,OAAOT,EAAEG,WAAa,GAAK,GACtCO,EAAKV,EAAEW,mBAGP,OAAOC,KAAKd,KACZA,EAAMA,EAAIe,QAAQC,OAAOC,IAAKf,EAAEgB,cAAgB,IAAIC,OAAO,EAAIH,OAAOC,GAAGG,UAG7E,IAAK,IAAIC,KAAKjB,EACN,IAAIY,OAAO,IAAMK,EAAI,KAAKP,KAAKd,KAC/BA,EAAMA,EAAIe,QAAQC,OAAOC,GAA0B,IAArBD,OAAOC,GAAGG,OAAiBhB,EAAEiB,IAAQ,KAAOjB,EAAEiB,IAAIF,QAAQ,GAAKf,EAAEiB,IAAID,UAI3G,OAAOpB,OAyDWsB,IAAlBC,QAAQC,QACRD,QAAQC,MAAQC,cAGpBC,EAAiB,CACbC,OAvGJ,SAAgBC,KAAUC,GAEtB,GAA0B,gBAAtB/C,EAAOQ,YAAgCsC,EAAQ,EAC/C,OAGJ,IAAIE,EAAO,IAAM/B,EAAW,uBAAyB,IACrDwB,QAAQQ,IAAID,EAAM,aAAcD,IAiGhCG,UArDJ,SAAmBC,GAEf,GAAmB,iBAARA,EACP,IACI,OAAOC,KAAKC,MAAMF,GACpB,MAAOG,MAiDbrC,WAAYA,EACZsC,YApCJ,SAAqBC,EAAUC,EAAQC,EAAMC,GAEzCD,EAAOA,GAAQ,IACfC,EAAOA,GAAQ,aAEO,iBAAXF,IACPA,EAASL,KAAKQ,UAAUH,GACxBE,EAAO,oBAGC,cAARA,GAAwB3D,EAAOc,YAAY4C,KAC3CD,EAASzD,EAAOc,YAAY4C,GAAMzB,QAAQ,KAAMwB,IAGpDD,EAASK,UAAUH,EAAM,CACrB,iBAAkBD,EAAOnB,OACzB,eAAgBqB,IAGpBH,EAASM,MAAML,GACfD,EAASO,QC5Fb,WAAMlB,GAAW7B,EAKjBf,QAAQ+D,MAAQ,sBAGhB/D,QAAQC,IAAI+D,SAAWhE,QAAQiE,MAG/BjE,QAAQkE,KAAK,QAAQT,IACjBb,EAAO,EAAG,mBACG,IAATa,GAAczD,QAAQC,IAAIkE,iBAC1BnE,QAAQoE,KAAK,MCpBrB,IAAIC,EAAQtD,UAERhB,EAASuE,UAEP1B,EAAMK,UAAEA,GAAcsB,EAExBC,EAAYC,OAAOC,KAAK3E,EAAOe,gBAAiB,UAAU6D,WAGpDN,EAAMO,IAAIJ,EAAY,gBAAgBK,IAE5C,GAAsB,KAAlBA,EAAIC,WACJ,OAGJ,IAAIC,EAAM,GAEVF,EAAIG,GAAG,QAAQ7D,IACX4D,GAAO5D,EAAEwD,cAGbE,EAAIG,GAAG,OAAO,KACV,IAAIC,EAAOhC,EAAU8B,GACjBE,GAAQA,EAAKC,SACbtC,EAAOqC,EAAKC,eAMpBF,GAAG,SAAS3B,IAEZT,EAAO,EAAG,iBAAkBS,EAAE6B,YChClC,IAAIC,EAAKpE,UACLqE,EAAOd,UAEPvE,EAASwE,EAUb,SAASc,EAAQC,EAAMC,GACnB,OAA0B,IAAtBA,EAAKC,QAAQ,KACNF,EAAOC,EAEXH,EAAKK,KAAKH,EAAMC,OAsC3BG,EAAiB,CACbC,MAAO,IACPC,OAhCJ,SAAgBC,EAAStC,GAErB,IAAIuC,EAAa,IAAIC,IAAIF,EAAQG,IAAK,UAAUH,EAAQI,QAAQC,QAE5DC,EAAWf,EAAKK,KAAK1F,EAAOY,WAAYmF,EAAWM,UAGvDP,EAAQM,SAAW,GACnBN,EAAQC,WAAaA,EAGrB,IAAIO,EAAWlB,EAAGmB,WAAWH,IAAahB,EAAGoB,UAAUJ,GACvD,GAAIE,GAAYA,EAASG,SACrBX,EAAQM,SAAWA,OAKvB,IAAK,IAAIM,KAAS1G,EAAOa,YAAa,CAClC,IAAI0E,EAAOD,EAAQc,EAAUM,GAC7B,GAAItB,EAAGmB,WAAWhB,GAEd,YADAO,EAAQM,SAAWb,MC9C/B,IAAIF,EAAOrE,UAEP2C,EAAO,CACP,MAAO,aACPgD,EAAK,2BACLC,GAAM,yBACNC,IAAO,eACPC,KAAQ,eACRC,IAAO,4BACPC,IAAO,iBACPC,IAAO,aACPC,IAAO,iBACPC,KAAQ,uBACRC,GAAM,cACNC,IAAO,kBACPC,IAAO,2BACPC,IAAO,2BACPC,IAAO,YACPC,IAAO,sBACPC,EAAK,WACLC,IAAO,oCACPC,GAAM,WACNC,IAAO,8BACPC,MAAS,2BACTC,IAAO,2BACPC,KAAQ,aACRC,IAAO,WACPC,IAAO,6BACPC,IAAO,WACPC,IAAO,WACPC,IAAO,WACPC,IAAO,+BACPC,IAAO,6BACPC,KAAQ,cACRC,IAAO,iBACPC,KAAQ,iBACRC,IAAO,2BACPC,IAAO,2BACPC,IAAO,qBACPC,IAAO,qBACPC,IAAO,sBACPC,IAAO,oBACPC,IAAO,2BACPC,IAAO,iBACPC,IAAO,yBACPC,IAAO,2BACPC,EAAK,iBACLC,IAAO,iBACPC,IAAO,iBACPC,IAAO,cACPC,IAAO,iBACPC,IAAO,2BACPC,QAAW,qBACXC,IAAO,YACPC,GAAM,qBACNC,EAAK,WACLC,GAAM,WACNC,IAAO,YACPC,KAAQ,YACRC,IAAO,2BACPC,IAAO,gBACPC,IAAO,gBACPC,IAAO,2BACPC,IAAO,2BACPC,KAAQ,qBACRC,KAAQ,+BACRC,KAAQ,aACRC,IAAO,aACPC,GAAM,yBACNC,KAAQ,mBACR3H,IAAO,aACP4H,IAAO,kBACPC,IAAO,YACPC,IAAO,aACPC,OAAU,yBACVC,KAAQ,mBACRC,KAAQ,aACRC,GAAM,aACNC,IAAO,aACPC,KAAQ,aACR1H,KAAQ,iBACR2H,IAAO,yBACPC,IAAO,cACPC,IAAO,kBACPC,IAAO,aACPC,IAAO,YACPC,KAAQ,YACRC,KAAQ,aACRC,IAAO,aACPC,GAAM,aACNC,IAAO,2BACPC,IAAO,kDACPC,IAAO,iDACPC,IAAO,0CACPC,IAAO,kBACPC,EAAK,gBACLC,IAAO,gBACPC,IAAO,0BACPC,IAAO,kBACPC,IAAO,6BACPC,IAAO,2BACPC,IAAO,4BACPC,IAAO,2BACPC,GAAM,qBACNC,GAAM,4BACNC,IAAO,YACPC,IAAO,0BACPC,IAAO,0BACPC,IAAO,gCACPC,IAAO,gCACPC,GAAM,yBACNC,IAAO,4BACPC,GAAM,uBACNC,GAAM,kBACNC,GAAM,uBACNC,KAAQ,qBACRC,IAAO,uBACPC,IAAO,+BACPC,GAAM,qBACNC,IAAO,sBACPC,KAAQ,aACRC,IAAO,uCACPC,IAAO,sBACPC,IAAO,kBACPC,GAAM,qBACNC,EAAK,aACLC,IAAO,YACPC,KAAQ,YACRC,GAAM,mBACNC,IAAO,4BACPC,IAAO,cACPC,GAAM,2BACNC,IAAO,gBACPC,KAAQ,gBACRC,IAAO,gCACPC,EAAK,aACLC,IAAO,oBACPC,IAAO,oCACPC,IAAO,oBACPC,IAAO,oBACPC,KAAQ,wBACRC,QAAW,wBACXC,KAAQ,aACRC,IAAO,aACPC,KAAQ,aACRC,QAAW,2BACXC,GAAM,aACNC,IAAO,aACPC,IAAO,eACPC,IAAO,mBACPC,KAAQ,aACRC,IAAO,2BACPC,IAAO,cACPC,IAAO,iBACPC,IAAO,iBACPC,IAAO,iBACPC,IAAO,aACPC,KAAQ,uBACRC,IAAO,kBACPC,MAAS,wBACTC,IAAO,2BACPC,IAAO,kBACPC,IAAO,kBACPC,IAAO,kBACPC,KAAQ,uBACRC,KAAQ,YACRC,IAAO,YACPC,IAAO,kBACPC,GAAM,uBCxKV,IAAIzL,EAAKpE,UAEL8P,EDyKa,SAAUvL,GACvB,IAAIwL,EAAM1L,EAAK2L,QAAQzL,GAEvB,OADAwL,EAAMA,EAAMA,EAAIE,MAAM,GAAK,UACpBtN,EAAKoN,IAAQ,yCC1KlBxN,SAAaV,GAAW2B,MA4C9B0M,EAAiB,CACbtL,MAAO,IACPC,OArCJ,SAAgBC,EAAStC,GAErB,IAAI4C,SAAEA,EAAQL,WAAEA,GAAeD,EAG/B,MAAiB,KAAbM,GACA7C,EAAYC,EAAUuC,EAAWM,SAAU,MACpC,IAIX7C,EAASK,UAAU,IAAK,CACpB,eAAgBiN,EAAY1K,KAGhCvD,EAAO,EAAG,oBAAqBuD,GAG/BhB,EAAG+L,iBAAiB/K,GACfnB,GAAG,SAASmM,IACT7N,EAAYC,EAAUuC,EAAWM,SAAU,QAE9CpB,GAAG,QAAQoM,IACR7N,EAASM,MAAMuN,MAElBpM,GAAG,OAAO,KACPzB,EAASO,UAGV,KC1CX,IAAIuN,KAAEA,GAAStQ,uBAETuC,GAAgBgB,MAkDtBgN,EAAiB,CACb3L,MAzCJ,SAAewG,EAAG/C,GACd,OAAOA,GAAK,gBAAgBrH,KAAKqH,IAyCjCxD,OAjCJ,SAAgBC,EAAStC,GAErB,IAAI4C,SAAEA,EAAQL,WAAEA,GAAeD,EAE3BqJ,EAAO,GAEPqC,EAAOzL,EAAW0L,OAAOxP,QAAQ,MAAO,IAAIA,QAAQ,KAAM,KAE1DyP,EAAQJ,EAAK,GAAGrR,QAAQ0R,SAASvL,KAAYoL,IAAQ,CACrDI,aAAa,EACbC,QAAS,MAeb,OAZAH,EAAMI,OAAO7M,GAAG,QAAQC,IACpBiK,GAAQjK,KAEZwM,EAAMK,OAAO9M,GAAG,QAAQC,IACpBiK,GAAQjK,KAGZwM,EAAMzM,GAAG,QAAQvB,IAEbH,EAAYC,EAAU2L,EAAMzL,OAGzB,IC9CX,IAAIH,YAAEA,GAAgBvC,ECAtB,IAAIgR,EAAYhR,EACZiR,EAAW1N,EAOX2N,EAAW,CALH1N,EDgCK,CACboB,MA1BJ,SAAewG,EAAG/C,GACd,OAAOA,GAAK,gBAAgBrH,KAAKqH,IA0BjCxD,OAlBJ,SAAgBC,EAAStC,GAErB,IAAI4C,SAAEA,EAAQL,WAAEA,EAAUoM,SAAEA,GAAarM,EAQzC,OANY1F,QAAQgG,EAEpBsL,CAAM,CAAE3L,WAAAA,EAAYoM,SAAAA,IAAY,CAAChD,EAAMzL,KACnCH,EAAYC,EAAU2L,EAAMzL,OAGzB,SCcX0O,EAAiB,CACbC,KAhCJ,SAAcC,GACVJ,EAASK,QAAQ,EAAG,EAAGD,IAgCvBE,KA7BJ,SAAc1M,EAAStC,GAEnBwO,EAAUnM,OAAOC,EAAStC,GAE1B,IAAI4C,EAAWN,EAAQM,SACnBC,EAAWP,EAAQC,WAAWM,SAElC,IAAK,IAAIT,MAAEA,EAAKC,OAAEA,KAAYqM,EAE1B,IACKtM,aAAiB1D,QAAU0D,EAAM5D,KAAKqE,IACtCT,aAAiBjD,UAAYiD,EAAMS,EAAUD,IAC5B,iBAAVR,IAAiC,MAAVA,GAAiBA,IAAUS,KAEtDR,EAAOC,EAAStC,GAChB,OAAO,EAMnByO,EAASpM,OAAOC,EAAStC,KCrC7B,IAAIiP,EAAOzR,UACPqE,EAAOd,UAEPvE,EAASwE,GAET3B,OAAEA,GAAW6P,EAEbC,EAAeC,EAAoBJ,KAKnCK,EAAaJ,EAAKK,cAAa,CAAChN,EAAStC,KAIzC,OAFAX,EAAO,EAAGiD,EAAQiN,OAAQ,IAAKjN,EAAQG,KAE/BH,EAAQiN,QACZ,IAAK,OACD,IAAIC,EAAO,GACXlN,EAAQmN,YAAY,QAAQ/N,IACxB8N,GAAQ9N,KAEZY,EAAQmN,YAAY,OAAO,KACvB,IACInN,EAAQqM,SAAW/O,KAAKC,MAAM2P,GAChC,MAAO1P,GACLT,EAAO,EAAG,2CAEd8P,EAAa7M,EAAStC,MAE1B,MACJ,QACImP,EAAa7M,EAAStC,OAMlCqP,EAAW5N,GAAG,SAASmM,IAEF,eAAbA,EAAI1N,OACJb,EAAO,EAAG,kBAAmB7C,EAAOU,WAAYV,EAAOW,YACvDkC,EAAO,EAAG,eAAgB7C,EAAOU,aAAcV,EAAOW,WAAY,MAClEkS,EAAWK,OAAOlT,EAAOW,WAAYX,EAAOU,WAAY,UAKhEmS,EAAW5N,GAAG,aAAa,KAEvB,IAAIkB,EAA6B,YAAtBnG,EAAOU,WAA2B,YAAcV,EAAOU,WAC9DyS,EAAOnT,EAAOW,WAAa,IAAO,EAAI,GAAK,IAAMX,EAAOW,WAE5DkC,EAAO,EAAG,kBAAmB,UAAYsD,EAAOgN,GAChDtQ,EAAO,EAAG,kBAAmB7C,EAAOY,WAAY,SCtCpD,IAAIgC,EAAQ5B,EAERoS,ED2Ca,SAAUC,GAEvBA,GAAW/S,OAAOC,OAAOP,EAAQqT,GAEjCrT,EAAOY,WAAayE,EAAKiO,QAAQtT,EAAOY,YAExCiS,EAAWK,OAAOlT,EAAOW,WAAYX,EAAOU,WAAY,QC/CxD2R,KAAEA,GAAS7N,MAEf+O,EAAiB,CACbC,OAAQ5Q,EACR6Q,KAAML,EACNM,IAAKrB"} | ||
| {"version":3,"file":"main.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"name":"webox-node","description":"Webox-node is a simple HTTP server. Webox-node can execute js file through node-cli, just like CGI. It can also load js file as commonjs module, just like PHP and ASP.","homepage":"https://github.com/rehiy/webox-node","version":"3.3.12","license":"MIT License","author":{"name":"Rehiy Wang","email":"wang@rehiy.com","url":"http://www.rehiy.com/"},"keywords":["mini","simple","http","web","server","webox"],"repository":{"type":"git","url":"git://github.com/rehiy/webox-node.git"},"dependencies":{},"main":"./main.js","bin":{"webox":"./cli.js"}} | ||
| {"name":"webox-node","version":"3.3.13","author":{"name":"Rehiy Wang","email":"wang@rehiy.com","url":"http://www.rehiy.com"},"homepage":"https://github.com/rehiy/webox-node","description":"Webox-node is a simple HTTP server. Webox-node can execute js file through node-cli, just like CGI. It can also load js file as commonjs module, just like PHP and ASP.","license":"MIT License","keywords":["mini","simple","http","web","server","webox"],"repository":{"type":"git","url":"git://github.com/rehiy/webox-node.git"},"main":"./main.js","bin":{"webox":"./cli.js"}} |
+5
-6
@@ -7,3 +7,3 @@ # Webox-node is a Dynamic JS HTTP server | ||
| ```js | ||
| ```shell | ||
| npm i webox-node | ||
@@ -14,3 +14,3 @@ ``` | ||
| ```js | ||
| ```shell | ||
| npx webox | ||
@@ -23,3 +23,3 @@ ``` | ||
| ```js | ||
| ```shell | ||
| npx webox 0.0.0.0:80 public | ||
@@ -48,3 +48,3 @@ ``` | ||
| ``` | ||
| ```js | ||
| module.exports = { | ||
@@ -75,3 +75,2 @@ | ||
| }; | ||
| ``` | ||
| ``` |
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 4 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 4 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
41354
1.12%8
33.33%41
2.5%71
-2.74%11
10%9
50%