New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

webox-node

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

webox-node - npm Package Compare versions

Comparing version
3.3.16
to
4.0.1
+2
main-264c9b15.js
"use strict";var e=require("fs"),t=require("https"),a=require("http"),i=require("path"),o=require("child_process");function p(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}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(e,...t){if("development"!==s.WEBOX_MODE&&e>0)return;let a="["+c("yyyy-MM-dd hh:mm:ss")+"]";console.log(a,"Webox -",...t)}function c(e,t){let a=t||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(e)&&(e=e.replace(RegExp.$1,(a.getFullYear()+"").substr(4-RegExp.$1.length)));for(let t in i)new RegExp("("+t+")").test(e)&&(e=e.replace(RegExp.$1,1===RegExp.$1.length?i[t]:("00"+i[t]).substr((""+i[t]).length)));return e}void 0===console.light&&(console.light=Function);var m={logger:l,parseJSON:function(e){if("string"==typeof e)try{return JSON.parse(e)}catch(e){}},dateFormat:c,httpRedirect:function(e,t){e.writableEnded&&l(1,"Response has already been sent, ignore redirect:",t),e.writeHead(302,{Location:t}),e.end()},httpMessage:function(e,t,a,i){a=a||200,i=i||"text/plain","object"==typeof t&&(t=JSON.stringify(t),i="application/json"),"text/plain"==i&&s.WEBOX_ERROR[a]&&(t=s.WEBOX_ERROR[a].replace("%s",t)),e.writableEnded&&l(1,"Response has already been sent, ignore it.",t),e.writeHead(a,{"Content-Length":Buffer.byteLength(t),"Content-Type":i}),e.end(t)}};let{logger:d}=m;process.title="Webox - HTTP Server",process.env.INIT_CWD=process.cwd(),process.once("exit",(e=>{d(0,"Service Stopped"),0===e&&process.env.WEBOX_EXIT_CODE&&process.exit(1)}));let x=t,g=r,{logger:f,parseJSON:u}=m,v=Buffer.from(g.WEBOX_CHECK_API,"base64").toString();x.get(v+"&version=dev",(e=>{if(200!=e.statusCode)return;let t="";e.on("data",(e=>{t+=e.toString()})),e.on("end",(()=>{let e=u(t);e&&e.message&&f(e.message)}))})).on("error",(e=>{f(1,"Checker Error:",e.message)}));let O=e,h=i,b=r;function E(e,t){return 0===t.indexOf(".")?e+t:h.join(e,t)}var R={handle:function(e,t){let a=new URL(e.url,`http://${e.headers.host}`),i=h.join(b.WEBOX_ROOT,a.pathname);e.filename="",e.requestURL=a;let o=O.existsSync(i)&&O.lstatSync(i);if(o&&o.isFile())e.filename=i;else for(let t of b.WEBOX_INDEX){let a=E(i,t);if(O.existsSync(a))return void(e.filename=a)}},route:"*"};let y=i,_={"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=e,j=function(e){let t=y.extname(e);return t=t?t.slice(1):"unknown",_[t]||"application/octet-stream"},{httpMessage:B,logger:W}=m;var X={handle:function(e,t){let{filename:a,requestURL:i}=e;return""===a?(B(t,i.pathname,404),!0):(t.writeHead(200,{"Content-Type":j(a)}),W(1,"Send Static File:",a),w.createReadStream(a).on("error",(e=>{B(t,i.pathname,503)})).on("data",(e=>{t.write(e)})).on("end",(()=>{t.end()})),!0)},route:"*"};let{exec:S}=o,{httpMessage:T}=m;var q={handle:function(e,t){let{filename:a,requestURL:i}=e,o="",p=i.search.replace(/^\?/,"").replace(/&/g," "),n=S(`${process.argv0} ${a} ${p}`,{windowsHide:!0,timeout:6e4});return n.stdout.on("data",(e=>{o+=e})),n.stderr.on("data",(e=>{o+=e})),n.on("exit",(e=>{T(t,o,e)})),!0},route:function(e,t){return t&&/\.cgi(\.js)?$/.test(t)}};let{httpMessage:H}=m;let M=R,L=X,N=[q,{handle:function(e,t){let{filename:a,requestURL:i,bodyObject:o}=e;return require(a)({requestURL:i,bodyObject:o},((e,a)=>{H(t,e,a)})),!0},route:function(e,t){return t&&/\.cjs(\.js)?$/.test(t)}}];var P={push:function(e){N.splice(-2,0,e)},call:function(e,t){M.handle(e,t);let a=e.filename,i=e.requestURL.pathname;for(let{route:o,handle:p}of N)if((o instanceof RegExp&&o.test(i)||o instanceof Function&&o(i,a)||"string"==typeof o&&("*"===o||o===i))&&p(e,t))return!0;L.handle(e,t)}};let C=a,F=i,D=r,{logger:I,parseJSON:$}=m,k=P.call,U=C.createServer(((e,t)=>{if(I(1,e.method,"-",e.url),"GET"==e.method)return void k(e,t);let a="";e.addListener("data",(e=>{a+=e})),e.addListener("end",(()=>{a&&(e.bodyObject=$(a),void 0===e.bodyObject&&I(0,"Error: Only JSON body is supported")),k(e,t)}))}));U.on("error",(e=>{"EADDRINUSE"===e.code&&(I(0,"IP-Port in use:",D.WEBOX_HOST,D.WEBOX_PORT),I(0,"Failover to:",D.WEBOX_HOST,++D.WEBOX_PORT,"\n"),U.listen(D.WEBOX_PORT,D.WEBOX_HOST,1024))})),U.on("listening",(()=>{let e="0.0.0.0"===D.WEBOX_HOST?"127.0.0.1":D.WEBOX_HOST,t=D.WEBOX_PORT-80==0?"":":"+D.WEBOX_PORT;I(0,"Server started:","http://"+e+t),I(0,"Root Directory:",D.WEBOX_ROOT,"\n")}));let z=m,J=function(e){e&&Object.assign(D,e),D.WEBOX_ROOT=F.resolve(D.WEBOX_ROOT),U.listen(D.WEBOX_PORT,D.WEBOX_HOST,1024)},{push:A}=P;var G={helper:z,init:J,use:A},K=p(G);exports.main=G,exports.main$1=K;
//# sourceMappingURL=main-264c9b15.js.map
{"version":3,"file":"main-264c9b15.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 * 页面重定向\n * @param {http.ServerResponse} response 响应对象\n * @param {string } url 重定向地址\n */\n\nfunction httpRedirect(response, url) {\n\n if (response.writableEnded) {\n logger(1, 'Response has already been sent, ignore redirect:', url);\n }\n\n response.writeHead(302, {\n 'Location': url\n });\n\n response.end();\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 if (response.writableEnded) {\n logger(1, 'Response has already been sent, ignore it.', output);\n }\n\n response.writeHead(code, {\n 'Content-Length': Buffer.byteLength(output),\n 'Content-Type': mime\n });\n\n response.end(output);\n\n}\n\n/**\n * 仅用于兼容老版调试工具\n */\n\nif (console.light === undefined) {\n console.light = Function;\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n logger: logger,\n parseJSON: parseJSON,\n dateFormat: dateFormat,\n httpRedirect: httpRedirect,\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\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');\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, bodyObject } = request;\n\n let child = require(filename);\n\n child({ requestURL, bodyObject }, (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');\nlet { logger, parseJSON } = 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 if (request.method == 'GET') {\n handleCaller(request, response);\n return;\n }\n\n let body = '';\n\n request.addListener('data', data => {\n body += data\n });\n\n request.addListener('end', () => {\n if (body) {\n request.bodyObject = parseJSON(body);\n if (request.bodyObject === undefined) {\n logger(0, 'Error: Only JSON body is supported');\n }\n }\n handleCaller(request, response);\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","logger","level","msg","time","dateFormat","console","log","fmt","date","d","Date","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","undefined","light","Function","utils","parseJSON","str","JSON","parse","e","httpRedirect","response","url","writableEnded","writeHead","Location","end","httpMessage","output","code","mime","stringify","Buffer","byteLength","title","INIT_CWD","cwd","once","WEBOX_EXIT_CODE","exit","https","require$$1","require$$2","CHECK_API","from","toString","get","res","statusCode","raw","on","data","message","fs","path","fixpath","file","suff","indexOf","join","prepare","handle","request","requestURL","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","write","exec","use_cgi","args","search","child","argv0","windowsHide","timeout","stdout","stderr","M_prepare","M_static","handlers","bodyObject","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":"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"}
+1
-1
#!/usr/bin/env node
"use strict";var e=require("./main-4ee74b63.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={};
"use strict";var e=require("./main-264c9b15.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,2 +0,2 @@

"use strict";var e=require("./main-4ee74b63.js");require("fs"),require("https"),require("http"),require("path"),require("child_process"),module.exports=e.main$1;
"use strict";var e=require("./main-264c9b15.js");require("fs"),require("https"),require("http"),require("path"),require("child_process"),module.exports=e.main$1;
//# sourceMappingURL=main.js.map

@@ -1,1 +0,1 @@

{"name":"webox-node","version":"3.3.16","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"}}
{"name":"webox-node","version":"4.0.1","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"}}
"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){if("development"!==s.WEBOX_MODE&&t>0)return;let a="["+c("yyyy-MM-dd hh:mm:ss")+"]";console.log(a,"Webox -",...e)}function c(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 m={logger:l,parseJSON:function(t){if("string"==typeof t)try{return JSON.parse(t)}catch(t){}},dateFormat:c,httpRedirect:function(t,e){t.writableEnded&&l(1,"Response has already been sent, ignore redirect:",e),t.writeHead(302,{Location:e}),t.end()},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.writableEnded&&l(1,"Response has already been sent, ignore it.",e),t.writeHead(a,{"Content-Length":Buffer.byteLength(e),"Content-Type":i}),t.end(e)}};let{logger:x}=m;process.title="Webox - HTTP Server",process.env.INIT_CWD=process.cwd(),process.once("exit",(t=>{x(0,"Service Stopped"),0===t&&process.env.WEBOX_EXIT_CODE&&process.exit(1)}));let d=e,g=r,{logger:f,parseJSON:u}=m,v=Buffer.from(g.WEBOX_CHECK_API,"base64").toString();d.get(v+"&version=dev",(t=>{if(200!=t.statusCode)return;let e="";t.on("data",(t=>{e+=t.toString()})),t.on("end",(()=>{let t=u(e);t&&t.message&&f(t.message)}))})).on("error",(t=>{f(1,"Checker Error:",t.message)}));let h=t,O=i,E=r;function b(t,e){return 0===e.indexOf(".")?t+e:O.join(t,e)}var R={handle:function(t,e){let a=new URL(t.url,`http://${t.headers.host}`),i=O.join(E.WEBOX_ROOT,a.pathname);t.filename="",t.requestURL=a;let o=h.existsSync(i)&&h.lstatSync(i);if(o&&o.isFile())t.filename=i;else for(let e of E.WEBOX_INDEX){let a=b(i,e);if(h.existsSync(a))return void(t.filename=a)}},route:"*"};let _=i,w={"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=t,B=function(t){let e=_.extname(t);return e=e?e.slice(1):"unknown",w[e]||"application/octet-stream"},{httpMessage:W,logger:X}=m;var S={handle:function(t,e){let{filename:a,requestURL:i}=t;return""===a?(W(e,i.pathname,404),!0):(e.writeHead(200,{"Content-Type":B(a)}),X(1,"Send Static File:",a),y.createReadStream(a).on("error",(t=>{W(e,i.pathname,503)})).on("data",(t=>{e.write(t)})).on("end",(()=>{e.end()})),!0)},route:"*"};let{exec:j}=o,{httpMessage:T}=m;var q={handle:function(t,e){let{filename:a,requestURL:i}=t,o="",p=i.search.replace(/^\?/,"").replace(/&/g," "),n=j(`${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=>{T(e,o,t)})),!0},route:function(t,e){return e&&/\.cgi(\.js)?$/.test(e)}};let{httpMessage:H}=m;let P=R,D=S,M=[q,{handle:function(t,e){let{filename:a,requestURL:i,postData:o}=t;return require(a)({requestURL:i,postData:o},((t,a)=>{H(e,t,a)})),!0},route:function(t,e){return e&&/\.cjs(\.js)?$/.test(e)}}];var L={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;D.handle(t,e)}};let N=a,C=i,F=r,{logger:I,parseJSON:$}=m,k=L.call,U=N.createServer(((t,e)=>{if(I(1,t.method,"-",t.url),"POST"===t.method){let a="";t.addListener("data",(t=>{a+=t})),t.addListener("end",(()=>{t.postData=$(a),void 0===t.postData&&I(0,"POST Error: Only JSON data is supported"),k(t,e)}))}else k(t,e)}));U.on("error",(t=>{"EADDRINUSE"===t.code&&(I(0,"IP-Port in use:",F.WEBOX_HOST,F.WEBOX_PORT),I(0,"Failover to:",F.WEBOX_HOST,++F.WEBOX_PORT,"\n"),U.listen(F.WEBOX_PORT,F.WEBOX_HOST,1024))})),U.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;I(0,"Server started:","http://"+t+e),I(0,"Root Directory:",F.WEBOX_ROOT,"\n")}));let z=m,J=function(t){t&&Object.assign(F,t),F.WEBOX_ROOT=C.resolve(F.WEBOX_ROOT),U.listen(F.WEBOX_PORT,F.WEBOX_HOST,1024)},{push:A}=L;var G={helper:z,init:J,use:A},K=p(G);exports.main=G,exports.main$1=K;
//# sourceMappingURL=main-4ee74b63.js.map
{"version":3,"file":"main-4ee74b63.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 * 页面重定向\n * @param {http.ServerResponse} response 响应对象\n * @param {string } url 重定向地址\n */\n\nfunction httpRedirect(response, url) {\n\n if (response.writableEnded) {\n logger(1, 'Response has already been sent, ignore redirect:', url);\n }\n\n response.writeHead(302, {\n 'Location': url\n });\n\n response.end();\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 if (response.writableEnded) {\n logger(1, 'Response has already been sent, ignore it.', output);\n }\n\n response.writeHead(code, {\n 'Content-Length': Buffer.byteLength(output),\n 'Content-Type': mime\n });\n\n response.end(output);\n\n}\n\n/**\n * 仅用于兼容老版调试工具\n */\n\nif (console.light === undefined) {\n console.light = Function;\n}\n\n/////////////////////////////////////////////////////////////\n\nmodule.exports = {\n logger: logger,\n parseJSON: parseJSON,\n dateFormat: dateFormat,\n httpRedirect: httpRedirect,\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\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');\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');\nlet { logger, parseJSON } = 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 request.postData = parseJSON(body);\n if (request.postData === undefined) {\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","logger","level","msg","time","dateFormat","console","log","fmt","date","d","Date","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","S","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","undefined","light","Function","utils","parseJSON","str","JSON","parse","e","httpRedirect","response","url","writableEnded","writeHead","Location","end","httpMessage","output","code","mime","stringify","Buffer","byteLength","title","INIT_CWD","cwd","once","WEBOX_EXIT_CODE","exit","https","require$$1","require$$2","CHECK_API","from","toString","get","res","statusCode","raw","on","data","message","fs","path","fixpath","file","suff","indexOf","join","prepare","handle","request","requestURL","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","write","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,EAQb,SAASC,EAAOC,KAAUC,GAEtB,GAA0B,gBAAtBnB,EAAOQ,YAAgCU,EAAQ,EAC/C,OAGJ,IAAIE,EAAO,IAAMC,EAAW,uBAAyB,IACrDC,QAAQC,IAAIH,EAAM,aAAcD,EAEpC,CASA,SAASE,EAAWG,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,MA8EsBsB,IAAlBxB,QAAQyB,QACRzB,QAAQyB,MAAQC,UAKpB,IAAAC,EAAiB,CACbhC,OAAQA,EACRiC,UA9EJ,SAAmBC,GAEf,GAAmB,iBAARA,EACP,IACI,OAAOC,KAAKC,MAAMF,EACrB,CAAC,MAAOG,GACR,CAGT,EAsEIjC,WAAYA,EACZkC,aA/DJ,SAAsBC,EAAUC,GAExBD,EAASE,eACTzC,EAAO,EAAG,mDAAoDwC,GAGlED,EAASG,UAAU,IAAK,CACpBC,SAAYH,IAGhBD,EAASK,KAEb,EAoDIC,YA1CJ,SAAqBN,EAAUO,EAAQC,EAAMC,GAEzCD,EAAOA,GAAQ,IACfC,EAAOA,GAAQ,aAEO,iBAAXF,IACPA,EAASX,KAAKc,UAAUH,GACxBE,EAAO,oBAGC,cAARA,GAAwBjE,EAAOc,YAAYkD,KAC3CD,EAAS/D,EAAOc,YAAYkD,GAAMzB,QAAQ,KAAMwB,IAGhDP,EAASE,eACTzC,EAAO,EAAG,6CAA8C8C,GAG5DP,EAASG,UAAUK,EAAM,CACrB,iBAAkBG,OAAOC,WAAWL,GACpC,eAAgBE,IAGpBT,EAASK,IAAIE,EAEjB,GCrHA,IAAM9C,OAAAA,GAAWD,EAKjBf,QAAQoE,MAAQ,sBAGhBpE,QAAQC,IAAIoE,SAAWrE,QAAQsE,MAG/BtE,QAAQuE,KAAK,QAAQR,IACjB/C,EAAO,EAAG,mBACG,IAAT+C,GAAc/D,QAAQC,IAAIuE,iBAC1BxE,QAAQyE,KAAK,EAChB,ICrBL,IAAIC,EAAQ3D,EAERhB,EAAS4E,UAEP3D,EAAMiC,UAAEA,GAAc2B,EAExBC,EAAYX,OAAOY,KAAK/E,EAAOe,gBAAiB,UAAUiE,WAGpDL,EAAMM,IAAIH,EAAY,gBAAgBI,IAE5C,GAAsB,KAAlBA,EAAIC,WACJ,OAGJ,IAAIC,EAAM,GAEVF,EAAIG,GAAG,QAAQ3D,IACX0D,GAAO1D,EAAEsD,UAAU,IAGvBE,EAAIG,GAAG,OAAO,KACV,IAAIC,EAAOpC,EAAUkC,GACjBE,GAAQA,EAAKC,SACbtE,EAAOqE,EAAKC,QACf,GACH,IAIFF,GAAG,SAAS/B,IAEZrC,EAAO,EAAG,iBAAkBqC,EAAEiC,QAAQ,IChC1C,IAAIC,EAAKxE,EACLyE,EAAOb,EAEP5E,EAAS6E,EAUb,SAASa,EAAQC,EAAMC,GACnB,OAA0B,IAAtBA,EAAKC,QAAQ,KACNF,EAAOC,EAEXH,EAAKK,KAAKH,EAAMC,EAC3B,CAqCA,IAAAG,EAAiB,CACbC,OA/BJ,SAAgBC,EAASzC,GAErB,IAAI0C,EAAa,IAAIC,IAAIF,EAAQxC,IAAK,UAAUwC,EAAQG,QAAQC,QAE5DC,EAAWb,EAAKK,KAAK9F,EAAOY,WAAYsF,EAAWK,UAGvDN,EAAQK,SAAW,GACnBL,EAAQC,WAAaA,EAGrB,IAAIM,EAAWhB,EAAGiB,WAAWH,IAAad,EAAGkB,UAAUJ,GACvD,GAAIE,GAAYA,EAASG,SACrBV,EAAQK,SAAWA,OAKvB,IAAK,IAAIM,KAAS5G,EAAOa,YAAa,CAClC,IAAI8E,EAAOD,EAAQY,EAAUM,GAC7B,GAAIpB,EAAGiB,WAAWd,GAEd,YADAM,EAAQK,SAAWX,EAG1B,CAEL,EAMIkB,MAAO,KCzDX,IAAIpB,EAAOzE,EAEPiD,EAAO,CACP,MAAO,aACP6C,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,mBACRxJ,IAAO,aACPyJ,IAAO,kBACPC,IAAO,YACPC,IAAO,aACPC,OAAU,yBACVC,KAAQ,mBACRC,KAAQ,aACRC,GAAM,aACNC,IAAO,aACPC,KAAQ,aACRvH,KAAQ,iBACRwH,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,IAAIxL,EAAKxE,EAELiQ,ED2Ka,SAAUtL,GACvB,IAAIuL,EAAMzL,EAAK0L,QAAQxL,GAEvB,OADAuL,EAAMA,EAAMA,EAAIE,MAAM,GAAK,UACpBnN,EAAKiN,IAAQ,0BACxB,eC9KMpN,EAAW7C,OAAEA,GAAW4D,EA4C9B,IAAAwM,EAAiB,CACbrL,OApCJ,SAAgBC,EAASzC,GAErB,IAAI8C,SAAEA,EAAQJ,WAAEA,GAAeD,EAG/B,MAAiB,KAAbK,GACAxC,EAAYN,EAAU0C,EAAWK,SAAU,MACpC,IAIX/C,EAASG,UAAU,IAAK,CACpB,eAAgBsN,EAAY3K,KAGhCrF,EAAO,EAAG,oBAAqBqF,GAG/Bd,EAAG8L,iBAAiBhL,GACfjB,GAAG,SAASkM,IACTzN,EAAYN,EAAU0C,EAAWK,SAAU,IAAI,IAElDlB,GAAG,QAAQmM,IACRhO,EAASiO,MAAMD,EAAM,IAExBnM,GAAG,OAAO,KACP7B,EAASK,KAAK,KAGf,EAEX,EAMIgD,MAAO,KCjDX,IAAI6K,KAAEA,GAAS1Q,GAET8C,YAAAA,GAAgBc,EAkDtB,IAAA+M,EAAiB,CACb3L,OAhCJ,SAAgBC,EAASzC,GAErB,IAAI8C,SAAEA,EAAQJ,WAAEA,GAAeD,EAE3BqJ,EAAO,GAEPsC,EAAO1L,EAAW2L,OAAOtP,QAAQ,MAAO,IAAIA,QAAQ,KAAM,KAE1DuP,EAAQJ,EAAK,GAAGzR,QAAQ8R,SAASzL,KAAYsL,IAAQ,CACrDI,aAAa,EACbC,QAAS,MAeb,OAZAH,EAAMI,OAAO7M,GAAG,QAAQC,IACpBgK,GAAQhK,CAAI,IAEhBwM,EAAMK,OAAO9M,GAAG,QAAQC,IACpBgK,GAAQhK,CAAI,IAGhBwM,EAAMzM,GAAG,QAAQrB,IAEbF,EAAYN,EAAU8L,EAAMtL,EAAK,KAG9B,CAEX,EAMI6C,MA1CJ,SAAe0F,EAAG/C,GACd,OAAOA,GAAK,gBAAgBlH,KAAKkH,EACrC,GCdA,IAAI1F,YAAEA,GAAgB9C,ECAtB,IAAIoR,EAAYpR,EACZqR,EAAWzN,EAOX0N,EAAW,CALHzN,EDgCK,CACbmB,OAjBJ,SAAgBC,EAASzC,GAErB,IAAI8C,SAAEA,EAAQJ,WAAEA,EAAUqM,SAAEA,GAAatM,EAQzC,OANY7F,QAAQkG,EAEpBwL,CAAM,CAAE5L,aAAYqM,aAAY,CAACjD,EAAMtL,KACnCF,EAAYN,EAAU8L,EAAMtL,EAAK,KAG9B,CAEX,EAMI6C,MA3BJ,SAAe0F,EAAG/C,GACd,OAAOA,GAAK,gBAAgBlH,KAAKkH,EACrC,IC+BA,IAAAxD,EAAiB,CACbwM,KAhCJ,SAAcC,GACVH,EAASI,QAAQ,EAAG,EAAGD,EAC3B,EA+BIE,KA7BJ,SAAc1M,EAASzC,GAEnB4O,EAAUpM,OAAOC,EAASzC,GAE1B,IAAI8C,EAAWL,EAAQK,SACnBC,EAAWN,EAAQC,WAAWK,SAElC,IAAK,IAAIM,MAAEA,EAAKb,OAAEA,KAAYsM,EAE1B,IACKzL,aAAiBrE,QAAUqE,EAAMvE,KAAKiE,IACtCM,aAAiB7D,UAAY6D,EAAMN,EAAUD,IAC5B,iBAAVO,IAAiC,MAAVA,GAAiBA,IAAUN,KAEtDP,EAAOC,EAASzC,GAChB,OAAO,EAMnB6O,EAASrM,OAAOC,EAASzC,EAE7B,GCvCA,IAAIoP,EAAO5R,EACPyE,EAAOb,EAEP5E,EAAS6E,GACT5D,OAAEA,EAAMiC,UAAEA,GAAc2P,EAExBC,EAAeC,EAAoBJ,KAKnCK,EAAaJ,EAAKK,cAAa,CAAChN,EAASzC,KAIzC,GAFAvC,EAAO,EAAGgF,EAAQiN,OAAQ,IAAKjN,EAAQxC,KAG9B,SADDwC,EAAQiN,OACZ,CACI,IAAIC,EAAO,GACXlN,EAAQmN,YAAY,QAAQ9N,IACxB6N,GAAQ7N,CAAI,IAEhBW,EAAQmN,YAAY,OAAO,KACvBnN,EAAQsM,SAAWrP,EAAUiQ,QACJrQ,IAArBmD,EAAQsM,UACRtR,EAAO,EAAG,2CAEd6R,EAAa7M,EAASzC,EAAS,GAE7B,MAENsP,EAAa7M,EAASzC,EAE7B,IAILwP,EAAW3N,GAAG,SAASkM,IAEF,eAAbA,EAAIvN,OACJ/C,EAAO,EAAG,kBAAmBjB,EAAOU,WAAYV,EAAOW,YACvDM,EAAO,EAAG,eAAgBjB,EAAOU,aAAcV,EAAOW,WAAY,MAClEqS,EAAWK,OAAOrT,EAAOW,WAAYX,EAAOU,WAAY,MAC3D,IAILsS,EAAW3N,GAAG,aAAa,KAEvB,IAAIgB,EAA6B,YAAtBrG,EAAOU,WAA2B,YAAcV,EAAOU,WAC9D4S,EAAOtT,EAAOW,WAAa,IAAO,EAAI,GAAK,IAAMX,EAAOW,WAE5DM,EAAO,EAAG,kBAAmB,UAAYoF,EAAOiN,GAChDrS,EAAO,EAAG,kBAAmBjB,EAAOY,WAAY,KAAK,ICpCzD,IAAIqC,EAAQ4B,EAER0O,EDyCa,SAAUC,GAEvBA,GAAWlT,OAAOC,OAAOP,EAAQwT,GAEjCxT,EAAOY,WAAa6E,EAAKgO,QAAQzT,EAAOY,YAExCoS,EAAWK,OAAOrT,EAAOW,WAAYX,EAAOU,WAAY,KAE5D,GC/CI8R,KAAEA,GAASO,EAEf,IAAAW,EAAiB,CACbC,OAAQ1Q,EACR2Q,KAAML,EACNM,IAAKrB"}