UNPKG

vesh

Version:

码农nodejs版本VESH框架,使用函数责任链模式 实现了 默认文件跳转,自定义错误页,空文件处理,URL解析,Querystring与Form参数解析,PostFiles解析,MVC自动映射,SQL自动服务化,可继承页面,静态文件,json,tjson,jsonp,tjsonp,string,void,xjson,xjosnp等等6种JSON格式,http与https等等操作

1,420 lines (1,151 loc) 79.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MSocketControler = exports.SinglePControler = exports.SingleControler = exports.JsonPageControler = exports.FormatPageAContentPage = exports.FormatPageAPage = exports.FormatPageAScriptPage = exports.FormatPageControler = exports.StringControler = exports.XControler = exports.VoidControler = exports.XJsonPControler = exports.XJsonControler = exports.TJsonPControler = exports.JsonPControler = exports.XExcelControler = exports.TJsonControler = exports.JsonControler = exports.StaticControler = exports.ViewModuler = exports.AViewControler = undefined; var _get2 = require("babel-runtime/helpers/get"); var _get3 = _interopRequireDefault(_get2); var _promise = require("babel-runtime/core-js/promise"); var _promise2 = _interopRequireDefault(_promise); var _typeof2 = require("babel-runtime/helpers/typeof"); var _typeof3 = _interopRequireDefault(_typeof2); var _regenerator = require("babel-runtime/regenerator"); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator"); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require("babel-runtime/helpers/inherits"); var _inherits3 = _interopRequireDefault(_inherits2); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _tool = require("gcl/com/coooders/common/tool"); var _tool2 = _interopRequireDefault(_tool); var _ni = require("gcl/com/coooders/db/ni"); var _ni2 = _interopRequireDefault(_ni); var _app = require("./app"); var _querystring = require("querystring"); var _querystring2 = _interopRequireDefault(_querystring); var _httpErrors = require("http-errors"); var _httpErrors2 = _interopRequireDefault(_httpErrors); var _arraystream = require("gcl/com/coooders/collection/arraystream"); var _iconvLite = require("iconv-lite"); var _iconvLite2 = _interopRequireDefault(_iconvLite); var _url = require("url"); var _url2 = _interopRequireDefault(_url); var _zlib = require("zlib"); var _zlib2 = _interopRequireDefault(_zlib); var _cookie = require("gcl/com/coooders/net/cookie"); var _cookie2 = _interopRequireDefault(_cookie); var _mime = require("gcl/com/coooders/net/mime"); var _tool3 = require("gcl/com/coooders/io/tool"); var _tool4 = _interopRequireDefault(_tool3); var _fs = require("fs"); var _fs2 = _interopRequireDefault(_fs); var _path = require("path"); var _path2 = _interopRequireDefault(_path); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * ViewModuler调用的Controler基类,用于处理View文件解析 需要实现output(req,rep,session)方法 */ var AViewControler = exports.AViewControler = function () { function AViewControler() { (0, _classCallCheck3.default)(this, AViewControler); } (0, _createClass3.default)(AViewControler, [{ key: "output", value: function output(req, rep, session) { return false; } }]); return AViewControler; }(); /** * ViewModuler(basename,controler):主要用于根据session数据调用不同的Controller处理数据 */ var ViewModuler = exports.ViewModuler = function (_AModuler) { (0, _inherits3.default)(ViewModuler, _AModuler); function ViewModuler(src, controler) { (0, _classCallCheck3.default)(this, ViewModuler); var _this = (0, _possibleConstructorReturn3.default)(this, (ViewModuler.__proto__ || (0, _getPrototypeOf2.default)(ViewModuler)).call(this, "ViewModuler")); var _pri = pri(_this, { src: src ? src.trim(_tool2.default.environment.splitChar) : "", controler: controler, controlers: {}, basedir: _path2.default.parse(_path2.default.resolve(_path2.default.normalize(process.mainModule.filename))).dir, inputControlers: {}, hasInput: false, regex: /\.[^/\\\.]+$/g, pathregex: /([/\\][^/\\]+)+[/\\]/g }), _ = _pri._, __ = _pri.__; return _this; } (0, _createClass3.default)(ViewModuler, [{ key: "setControler", value: function setControler(name, controler) { var _pri2 = pri(this), __ = _pri2.__; __.controlers[name.toLowerCase()] = controler; if (typeof controler.input == "function") { __.hasInput = true; __.inputControlers[name.toLowerCase()] = controler; } } /** * 核心思想 session 提前返回,其它的内容 继续执行但是插入redis * @param {*} req * @param {*} rep * @param {*} session */ }, { key: "onrequest", value: function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(req, rep, session) { var _pri3, __, controler; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; _pri3 = pri(this), __ = _pri3.__; //需要兼容 无后缀名和多点的情况 session.extend = session.url.pathname.match(__.regex); session.extend = session.extend && session.extend[0].substr(1); if (__.hasInput) { _context.next = 6; break; } return _context.abrupt("return", false); case 6: controler = __.inputControlers[session.extend]; _context.t0 = controler; if (!_context.t0) { _context.next = 11; break; } _context.next = 11; return _tool2.default.callback2(function (call) { return controler.input(req, rep, session, call); }); case 11: _context.next = 17; break; case 13: _context.prev = 13; _context.t1 = _context["catch"](0); console.log(_context.t1.stack); throw _context.t1; case 17: return _context.abrupt("return", false); case 18: case "end": return _context.stop(); } } }, _callee, this, [[0, 13]]); })); function onrequest(_x, _x2, _x3) { return _ref.apply(this, arguments); } return onrequest; }() }, { key: "onresponse", value: function () { var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(req, rep, session) { var _pri4, __, query, controler; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.prev = 0; _pri4 = pri(this), __ = _pri4.__; if ("200".eq(session.Response.statusCode)) { _context2.next = 4; break; } return _context2.abrupt("return", false); case 4: query = (session.url.pathname.match(__.pathregex) || "/")[0]; // console.log(84, session.extend, session.filename); // session.filename && session.filename.eq(session.status) //需要兼容 无后缀名和多点的情况 if (!session.extend && "undefined".eq((0, _typeof3.default)(rep.getHeader("content-type")))) { session.extend = "string"; } controler = __.controlers[session.extend] || __.controler; session.pathname = (__.basedir + "/" + __.src + query + session.status + "." + session.extend).toLowerCase(); _context2.next = 10; return _tool2.default.callback2(function (call) { return controler.output(req, rep, session, call); }); case 10: _context2.next = 16; break; case 12: _context2.prev = 12; _context2.t0 = _context2["catch"](0); console.log(_context2.t0.stack); throw _context2.t0; case 16: return _context2.abrupt("return", false); case 17: case "end": return _context2.stop(); } } }, _callee2, this, [[0, 12]]); })); function onresponse(_x4, _x5, _x6) { return _ref2.apply(this, arguments); } return onresponse; }() }, { key: "onresponse1", value: function onresponse1(req, rep, session) { delete session.extend; delete session.basedir; delete session.formatPath; delete session.pathname; return false; } }]); return ViewModuler; }(_app.AModuler); /** * StaticControler:静态文件控制器,允许用户下载具体文件,但是文件类型受限制于;号隔开的文件类型 */ var StaticControler = exports.StaticControler = function (_AViewControler) { (0, _inherits3.default)(StaticControler, _AViewControler); function StaticControler() { var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "htm;css;js;jpg;jpeg;png;gif;xml;ico;swf;eot;svg;ttf;woff"; var regex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "(^\\S+\\/action\\.js$)|(^\\/logic\\/\\S+$)"; (0, _classCallCheck3.default)(this, StaticControler); var _this2 = (0, _possibleConstructorReturn3.default)(this, (StaticControler.__proto__ || (0, _getPrototypeOf2.default)(StaticControler)).call(this)); var _pri5 = pri(_this2, { list: {}, regex: new RegExp(regex) }), __ = _pri5.__; list.split(";").filter(function (v) { return _tool2.default.isValid(v); }).forEach(function (k) { return __.list[k.toLowerCase()] = true; }); return _this2; } (0, _createClass3.default)(StaticControler, [{ key: "output", value: function () { var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(req, rep, session) { var _pri6, __, ist, stat, contenttype; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _pri6 = pri(this), __ = _pri6.__; _context3.next = 3; return _tool2.default.callback(function (call) { return _fs2.default.exists(session.pathname, function (ist) { return call(null, ist); }); }); case 3: ist = _context3.sent; if (!(ist && __.list[session.extend.toLowerCase()] && !(session.url.pathname || "").toLowerCase().match(__.regex))) { _context3.next = 24; break; } _context3.prev = 5; _context3.next = 8; return _tool2.default.callback(_fs2.default.stat, _fs2.default, session.pathname); case 8: stat = _context3.sent; contenttype = (0, _mime.get)(session.extend); rep.setHeader("Content-Type", contenttype + ("text/html,application/javascript,application/json,text/css,text/plain,application/xml,text/xml".indexOf(contenttype) >= 0 ? ";charset=utf-8" : "")); rep.setHeader("Date", stat.ctime.toUTCString()); rep.setHeader("Last-Modified", stat.mtime.toDateString()); session.isStatic = true; session.writeStream(_fs2.default.createReadStream(session.pathname)); _context3.next = 22; break; case 17: _context3.prev = 17; _context3.t0 = _context3["catch"](5); console.log(_context3.t0.stack); session.write("[False]"); session.Log.error("VESH:" + _context3.t0.stack); case 22: _context3.next = 25; break; case 24: session.end(404, "no1 such file:" + session.url.pathname); case 25: return _context3.abrupt("return", true); case 26: case "end": return _context3.stop(); } } }, _callee3, this, [[5, 17]]); })); function output(_x9, _x10, _x11) { return _ref3.apply(this, arguments); } return output; }() }]); return StaticControler; }(AViewControler); /** * 使用querystring和raw-body完成SessionDataManager.QueryString,Form的管理和设置 */ var JsonControler = exports.JsonControler = function (_AViewControler2) { (0, _inherits3.default)(JsonControler, _AViewControler2); function JsonControler() { var isOri = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; (0, _classCallCheck3.default)(this, JsonControler); var _this3 = (0, _possibleConstructorReturn3.default)(this, (JsonControler.__proto__ || (0, _getPrototypeOf2.default)(JsonControler)).call(this)); pri(_this3, { isOri: isOri }); return _this3; } (0, _createClass3.default)(JsonControler, [{ key: "stringfy", value: function stringfy(array) { if (pri(this).__.isOri) return _tool2.default.toJsonString(array); if (_tool2.default.isArray(array)) { if (array.length == 0) return "[]"; var sb = _tool2.default.sb(); sb.append("["); for (var i = 0; i < array.length; i++) { sb.append(this.stringfy(array[i])); if (i != array.length - 1) sb.append(","); } sb.append("]"); return sb.clear(); } else { for (var k in array) { array[k] = typeof array[k] == "number" || array[k] ? "" + array[k] : array[k] || ""; }return _tool2.default.toJsonString(array); } } }, { key: "output", value: function output(req, rep, session) { //处理JSON数组的stringfy rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8"); rep.setHeader("Expires", new Date().toUTCString()); try { if (session.dbresult.length > 0 && session.dbresult[0].length > 0) { session.dbresult[0].forEach(function (v, i) { session.dbresult[0][i] = v && v.length && (v[0].length == 0 || v[0]._nodata) ? [] : v; }); //(session.dbresult[0][0][0].length == 0 || session.dbresult[0][0][0]._nodata)) session.dbresult[0][0] = []; } session.write(session.dbresult.length > 0 ? this.stringfy(session.dbresult[0]) : "[]"); } catch (e) { console.log(e.stack); session.write("[False]"); session.Log.error("VESH:" + e.stack); } return true; } }]); return JsonControler; }(AViewControler); /** * TJsonControler:TJson格式控制器 将session.dbresult中的第一个数据 */ var TJsonControler = exports.TJsonControler = function (_JsonControler) { (0, _inherits3.default)(TJsonControler, _JsonControler); function TJsonControler() { (0, _classCallCheck3.default)(this, TJsonControler); var _this4 = (0, _possibleConstructorReturn3.default)(this, (TJsonControler.__proto__ || (0, _getPrototypeOf2.default)(TJsonControler)).call(this)); var _pri7 = pri(_this4, { stringfy: function stringfy(array) { if (_tool2.default.isArray(array)) { if (array.length == 0) return ""; var sb = _tool2.default.sb(); sb.append("["); for (var i = 0; i < array.length; i++) { sb.append(__.stringfy(array[i])); if (i != array.length - 1) sb.append(","); } sb.append("]"); return sb.clear(); } else return array == null ? "" : array; } }), __ = _pri7.__; return _this4; } (0, _createClass3.default)(TJsonControler, [{ key: "stringfy", value: function stringfy(array) { var _pri8 = pri(this), __ = _pri8.__; array = _tool2.default.toTJson(array); return "[" + __.stringfy(array) + "]"; } }]); return TJsonControler; }(JsonControler); var XExcelControler = exports.XExcelControler = function (_AViewControler3) { (0, _inherits3.default)(XExcelControler, _AViewControler3); function XExcelControler() { var paramsname = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_name"; (0, _classCallCheck3.default)(this, XExcelControler); var _this5 = (0, _possibleConstructorReturn3.default)(this, (XExcelControler.__proto__ || (0, _getPrototypeOf2.default)(XExcelControler)).call(this)); pri(_this5, { paramsname: paramsname }); return _this5; } (0, _createClass3.default)(XExcelControler, [{ key: "output", value: function () { var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(req, rep, session) { var _pri9, _, __, array; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: //处理JSON数组的stringfy _pri9 = pri(this), _ = _pri9._, __ = _pri9.__; _context4.prev = 1; array = session.dbresult && session.dbresult.length > 0 ? _tool2.default.toTJson(session.dbresult[0])[0] : []; // console.log(226,"("+V.toJsonString(array).replace(/(\\")/g,'')+")"); !!array.length && (array = eval("(" + _tool2.default.toJsonString(array).replace(/(\\")/g, "") + ")")); //去除"号 _context4.next = 6; return session.exportExcel(array, session.param(__.paramsname) || session.status + ".xlsx"); case 6: _context4.next = 13; break; case 8: _context4.prev = 8; _context4.t0 = _context4["catch"](1); console.log(_context4.t0.stack); session.write("[False]"); session.Log.error("VESH:" + _context4.t0.stack); case 13: return _context4.abrupt("return", true); case 14: case "end": return _context4.stop(); } } }, _callee4, this, [[1, 8]]); })); function output(_x14, _x15, _x16) { return _ref4.apply(this, arguments); } return output; }() }]); return XExcelControler; }(AViewControler); /** * JsonPControler(bk:"_bk"):JsonP格式控制器允许 */ var JsonPControler = exports.JsonPControler = function (_JsonControler2) { (0, _inherits3.default)(JsonPControler, _JsonControler2); function JsonPControler() { var bk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_bk"; (0, _classCallCheck3.default)(this, JsonPControler); var _this6 = (0, _possibleConstructorReturn3.default)(this, (JsonPControler.__proto__ || (0, _getPrototypeOf2.default)(JsonPControler)).call(this)); pri(_this6, { bk: bk }); return _this6; } (0, _createClass3.default)(JsonPControler, [{ key: "output", value: function output(req, rep, session) { var _pri10 = pri(this), __ = _pri10.__; //处理JSON数组的stringfy var bk = session.param(__.bk); if (bk) { rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8"); rep.setHeader("Expires", new Date().toUTCString()); try { var json = session.dbresult.length > 0 ? this.stringfy(session.dbresult[0]) : "[]"; session.write(bk + "(" + json + ");"); } catch (e) { console.log(e.stack); session.write(bk + "([False]);"); session.Log.error("VESH:" + e.stack); } } else session.end(500, "JsonP need " + __.bk + " as callback-function name."); return true; } }]); return JsonPControler; }(JsonControler); /** * TJsonPControler:TJsonP格式控制器 将session.dbresult中的第一个数据 */ var TJsonPControler = exports.TJsonPControler = function (_TJsonControler) { (0, _inherits3.default)(TJsonPControler, _TJsonControler); function TJsonPControler() { var bk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_bk"; (0, _classCallCheck3.default)(this, TJsonPControler); var _this7 = (0, _possibleConstructorReturn3.default)(this, (TJsonPControler.__proto__ || (0, _getPrototypeOf2.default)(TJsonPControler)).call(this)); pri(_this7, { bk: bk }); return _this7; } (0, _createClass3.default)(TJsonPControler, [{ key: "output", value: function output(req, rep, session) { var _pri11 = pri(this), __ = _pri11.__; //处理JSON数组的stringfy var bk = session.param(__.bk); if (bk) { rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8"); rep.setHeader("Expires", new Date().toUTCString()); try { var json = session.dbresult.length > 0 ? this.stringfy(session.dbresult[0]) : "[]"; session.write(bk + "(" + json + ");"); } catch (e) { console.log(e.stack); session.write(bk + "([False]);"); session.Log.error("VESH:" + e.stack); } } else session.end(500, "TJsonP need " + __.bk + " as callback-function name."); return true; } }]); return TJsonPControler; }(TJsonControler); /** * XJsonControler:XJson格式控制器 将session.dbresult中的第一个数据 */ var XJsonControler = exports.XJsonControler = function (_JsonControler3) { (0, _inherits3.default)(XJsonControler, _JsonControler3); function XJsonControler() { (0, _classCallCheck3.default)(this, XJsonControler); var _this8 = (0, _possibleConstructorReturn3.default)(this, (XJsonControler.__proto__ || (0, _getPrototypeOf2.default)(XJsonControler)).call(this)); var _pri12 = pri(_this8), __ = _pri12.__; return _this8; } (0, _createClass3.default)(XJsonControler, [{ key: "output", value: function output(req, rep, session) { //处理JSON数组的stringfy rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8"); rep.setHeader("Expires", new Date().toUTCString()); try { if (session.dbresult) { var data = session.dbresult; while (data.length) { data = data[0]; }session.write(_tool2.default.toJsonString({ success: true, Msg: "", data: data, code: 0 })); } else session.write(_tool2.default.toJsonString({ success: true, Msg: "", data: {}, code: 0 })); } catch (e) { console.log(e.stack); session.write(_tool2.default.toJsonString({ success: false, Msg: e.message, data: "", code: e.code || 500 })); session.Log.error("VESH:" + e.stack); } return true; } }]); return XJsonControler; }(JsonControler); /** * XJsonPControler:XJson格式控制器 将session.dbresult中的第一个数据 */ var XJsonPControler = exports.XJsonPControler = function (_XJsonControler) { (0, _inherits3.default)(XJsonPControler, _XJsonControler); function XJsonPControler() { var bk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "_bk"; (0, _classCallCheck3.default)(this, XJsonPControler); var _this9 = (0, _possibleConstructorReturn3.default)(this, (XJsonPControler.__proto__ || (0, _getPrototypeOf2.default)(XJsonPControler)).call(this)); pri(_this9, { bk: bk }); return _this9; } (0, _createClass3.default)(XJsonPControler, [{ key: "output", value: function output(req, rep, session) { var _pri13 = pri(this), __ = _pri13.__; //处理JSON数组的stringfy var bk = session.param(__.bk); if (bk) { rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8"); rep.setHeader("Expires", new Date().toUTCString()); try { var json = _tool2.default.toJsonString({ success: true, Msg: "", data: {}, code: 0 }); if (session.dbresult) { var data = session.dbresult; while (data.length) { data = data[0]; }json = _tool2.default.toJsonString({ success: true, Msg: "", data: data, code: 0 }); } session.write(bk + "(" + json + ");"); } catch (e) { console.log(e.stack); session.write(bk + "(" + _tool2.default.toJsonString({ success: false, Msg: e.message, data: "", code: e.code || 500 }) + ");"); session.Log.error("VESH:" + e.stack); } } else session.end(500, "TJsonP need " + __.bk + " as callback-function name."); return true; } }]); return XJsonPControler; }(XJsonControler); /** * VoidControler:无值返回值 */ var VoidControler = exports.VoidControler = function (_AViewControler4) { (0, _inherits3.default)(VoidControler, _AViewControler4); function VoidControler() { (0, _classCallCheck3.default)(this, VoidControler); var _this10 = (0, _possibleConstructorReturn3.default)(this, (VoidControler.__proto__ || (0, _getPrototypeOf2.default)(VoidControler)).call(this)); pri(_this10); return _this10; } (0, _createClass3.default)(VoidControler, [{ key: "output", value: function output(req, rep, session) { //处理JSON数组的stringfy rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8"); rep.setHeader("Expires", new Date().toUTCString()); session.write("[[1]]"); return true; } }]); return VoidControler; }(AViewControler); /** * XControler:完全由Action处理的返回值 */ var XControler = exports.XControler = function (_AViewControler5) { (0, _inherits3.default)(XControler, _AViewControler5); function XControler() { (0, _classCallCheck3.default)(this, XControler); var _this11 = (0, _possibleConstructorReturn3.default)(this, (XControler.__proto__ || (0, _getPrototypeOf2.default)(XControler)).call(this)); pri(_this11); return _this11; } (0, _createClass3.default)(XControler, [{ key: "output", value: function output() { return true; } }]); return XControler; }(AViewControler); /** * StringControler:status作为返回值返回值 */ var StringControler = exports.StringControler = function (_AViewControler6) { (0, _inherits3.default)(StringControler, _AViewControler6); function StringControler() { (0, _classCallCheck3.default)(this, StringControler); var _this12 = (0, _possibleConstructorReturn3.default)(this, (StringControler.__proto__ || (0, _getPrototypeOf2.default)(StringControler)).call(this)); pri(_this12); return _this12; } (0, _createClass3.default)(StringControler, [{ key: "output", value: function output(req, rep, session) { //处理JSON数组的stringfy rep.setHeader("Content-Type", _mime.MIME.js + ";charset=utf-8"); rep.setHeader("Expires", new Date().toUTCString()); session.write(session.returnValue || session.status); return true; } }]); return StringControler; }(AViewControler); /** * FormatPageControler:格式化页面 */ var FormatPageControler = exports.FormatPageControler = function (_AViewControler7) { (0, _inherits3.default)(FormatPageControler, _AViewControler7); function FormatPageControler() { var extend = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "html"; (0, _classCallCheck3.default)(this, FormatPageControler); var _this13 = (0, _possibleConstructorReturn3.default)(this, (FormatPageControler.__proto__ || (0, _getPrototypeOf2.default)(FormatPageControler)).call(this)); pri(_this13, { extend: extend }); return _this13; } (0, _createClass3.default)(FormatPageControler, [{ key: "output", value: function () { var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(req, rep, session) { var _this14 = this; var _pri14, _, __; return _regenerator2.default.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: _pri14 = pri(this), _ = _pri14._, __ = _pri14.__; _context8.next = 3; return _tool2.default.next(function () { var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(data) { var pathname, ist, text; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: pathname = session.pathname.substr(0, session.pathname.length - session.extend.length) + __.extend; _context5.next = 3; return _tool2.default.callback(function (call) { return _fs2.default.exists(pathname, function (ist) { return call(null, ist); }); }); case 3: ist = _context5.sent; if (!ist) { _context5.next = 12; break; } _context5.next = 7; return _tool2.default.callback(_fs2.default.readFile, _fs2.default, pathname); case 7: text = _context5.sent; data.text = Buffer.from(text).toString("utf-8") + ""; return _context5.abrupt("return", false); case 12: session.end(404, "no such file:" + session.url.pathname); return _context5.abrupt("return", true); case 14: case "end": return _context5.stop(); } } }, _callee5, _this14); })); return function (_x24) { return _ref6.apply(this, arguments); }; }(), function () { var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(data) { return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return _.format(data.text, req, rep, session); case 2: data.text = _context6.sent; return _context6.abrupt("return", false); case 4: case "end": return _context6.stop(); } } }, _callee6, _this14); })); return function (_x25) { return _ref7.apply(this, arguments); }; }(), function () { var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(data) { var matchs, parent; return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: data.parent = {}; //不支持方法执行 只能实现数据<%=%>填充 循环一般不执行 继承需要实现 而且应该定义在<html inherit="具体的父类文件" >元素中 说明其继承的json文件并且直接进入 会话信息 matchs = data.text.match(/<[hH][tT][mM][lL][^>]+inherit=[^>]+>/); if (!matchs) { _context7.next = 18; break; } parent = matchs[0].match(/inherit=[\"'][^\"']+[\"']/)[0].split(/['"]/)[1]; _context7.prev = 4; _context7.next = 7; return _tool2.default.include(parent).output(req, rep, session); case 7: data.parent = _context7.sent; data.text = data.text.replace(/<\/[hH][eE][aA][dD]>/, function (word) { return (data.parent["HeaderScript"] || "") + word; }).replace(/<[bB][oO][dD][yY][^>]*>/, function (word) { return word + (data.parent["Header"] || "") + (data.parent["Menu"] || ""); }).replace(/<\/[bB][oO][dD][yY]>/, function (word) { return (data.parent["Footer"] || "") + (data.parent["FooterScript"] || "") + word; }); return _context7.abrupt("return", false); case 12: _context7.prev = 12; _context7.t0 = _context7["catch"](4); session.end(500, "VESH:" + _context7.t0.stack); return _context7.abrupt("return", true); case 16: _context7.next = 19; break; case 18: return _context7.abrupt("return", false); case 19: case "end": return _context7.stop(); } } }, _callee7, _this14, [[4, 12]]); })); return function (_x26) { return _ref8.apply(this, arguments); }; }(), function (data) { rep.setHeader("Content-Type", _mime.MIME.html + ";charset=utf-8"); //替换可能的引用页面里面的设置 session.write(data.text); return false; }); case 3: return _context8.abrupt("return", true); case 4: case "end": return _context8.stop(); } } }, _callee8, this); })); function output(_x21, _x22, _x23) { return _ref5.apply(this, arguments); } return output; }() }, { key: "funrep", value: function () { var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(s, o) { var reg, pros; return _regenerator2.default.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: reg = /<%=(.+?)%>/gi; pros = []; s = s.replace(reg, function () { var word = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; var prop = word.replace(/<%=/g, "").replace(/%>/g, ""); var ret = o(prop); if (ret.then && ret.catch) { pros.push(ret); return word; } return ret; }); if (!(pros.length > 0)) { _context9.next = 8; break; } _context9.next = 6; return _promise2.default.all(pros); case 6: pros = _context9.sent; s = s.replace(reg, function () { var word = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; return pros.shift(); }); case 8: return _context9.abrupt("return", s); case 9: case "end": return _context9.stop(); } } }, _callee9, this); })); function funrep(_x27, _x28) { return _ref9.apply(this, arguments); } return funrep; }() }, { key: "getvalue", value: function getvalue(obj, name) { var matchs = name.match(/\([^\)]+\)/g); var params = []; if (matchs && matchs.length > 0) { name = name.substr(0, name.indexOf("(")); params = matchs[0].replace(/[\(\)\'\"]/g, "").split(","); } if (typeof obj[name] == "function") return obj[name].apply(obj, params);else if (obj.__proto__ && obj.__proto__[name]) return obj.__proto__[name].apply(obj, params);else return obj[name]; } }, { key: "format", value: function () { var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(text, req, rep, session) { var _this15 = this; var _pri15, _, __; return _regenerator2.default.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: _pri15 = pri(this), _ = _pri15._, __ = _pri15.__; return _context11.abrupt("return", _.funrep(text, function () { var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(data) { var map, obj, i, v; return _regenerator2.default.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: map = data.split(/(?:[\.\[\]])/); obj = null; i = 0; case 3: if (!(i < map.length)) { _context10.next = 14; break; } if (!map[i]) { _context10.next = 11; break; } v = map[i]; if (i == 0) obj = _.getvalue(session, v) || session.dbresult && _.getvalue(session.dbresult, v) || session.param(v);else if (obj) obj = _.getvalue(obj, v); if (!(obj && obj.then && obj.catch)) { _context10.next = 11; break; } _context10.next = 10; return obj; case 10: obj = _context10.sent; case 11: i++; _context10.next = 3; break; case 14: obj = typeof (obj || "") == "string" ? obj : obj.toString ? obj.toString() : _tool2.default.toJsonString(obj); return _context10.abrupt("return", obj || ""); case 16: case "end": return _context10.stop(); } } }, _callee10, _this15); })); return function (_x35) { return _ref11.apply(this, arguments); }; }())); case 2: case "end": return _context11.stop(); } } }, _callee11, this); })); function format(_x31, _x32, _x33, _x34) { return _ref10.apply(this, arguments); } return format; }() }]); return FormatPageControler; }(AViewControler); var FormatPageAScriptPage = exports.FormatPageAScriptPage = function () { function FormatPageAScriptPage(dirs) { var HeaderScriptPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "HeaderScript.htm"; var FooterScriptPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "FooterScript.htm"; (0, _classCallCheck3.default)(this, FormatPageAScriptPage); this.formater = new FormatPageControler(); this.dirs = dirs; pri(this, { HeaderScriptPath: _tool4.default.formatPath(this.dirs + _tool2.default.environment.splitChar + HeaderScriptPath), FooterScriptPath: _tool4.default.formatPath(this.dirs + _tool2.default.environment.splitChar + FooterScriptPath) }); } (0, _createClass3.default)(FormatPageAScriptPage, [{ key: "output", value: function () { var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(req, rep, session) { var _pri16, _, __; return _regenerator2.default.wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: _pri16 = pri(this), _ = _pri16._, __ = _pri16.__; _context12.t0 = _.formater; _context12.t1 = Buffer; _context12.next = 5; return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.HeaderScriptPath); case 5: _context12.t2 = _context12.sent; _context12.t3 = _context12.t1.from.call(_context12.t1, _context12.t2).toString("utf-8"); _context12.t4 = req; _context12.t5 = rep; _context12.t6 = session; _context12.next = 12; return _context12.t0.format.call(_context12.t0, _context12.t3, _context12.t4, _context12.t5, _context12.t6); case 12: _context12.t7 = _context12.sent; _context12.t8 = _.formater; _context12.t9 = Buffer; _context12.next = 17; return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.FooterScriptPath); case 17: _context12.t10 = _context12.sent; _context12.t11 = _context12.t9.from.call(_context12.t9, _context12.t10).toString("utf-8"); _context12.t12 = req; _context12.t13 = rep; _context12.t14 = session; _context12.next = 24; return _context12.t8.format.call(_context12.t8, _context12.t11, _context12.t12, _context12.t13, _context12.t14); case 24: _context12.t15 = _context12.sent; return _context12.abrupt("return", { HeaderScript: _context12.t7, FooterScript: _context12.t15 }); case 26: case "end": return _context12.stop(); } } }, _callee12, this); })); function output(_x38, _x39, _x40) { return _ref12.apply(this, arguments); } return output; }() }]); return FormatPageAScriptPage; }(); var FormatPageAPage = exports.FormatPageAPage = function (_FormatPageAScriptPag) { (0, _inherits3.default)(FormatPageAPage, _FormatPageAScriptPag); function FormatPageAPage(dirs, HeaderScriptPath, FooterScriptPath) { var HeaderPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "Header.htm"; var FooterPath = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "Footer.htm"; (0, _classCallCheck3.default)(this, FormatPageAPage); var _this16 = (0, _possibleConstructorReturn3.default)(this, (FormatPageAPage.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAPage)).call(this, dirs, HeaderScriptPath, FooterScriptPath)); pri(_this16, { HeaderPath: _tool4.default.formatPath(_this16.dirs + _tool2.default.environment.splitChar + HeaderPath), FooterPath: _tool4.default.formatPath(_this16.dirs + _tool2.default.environment.splitChar + FooterPath) }); return _this16; } (0, _createClass3.default)(FormatPageAPage, [{ key: "output", value: function () { var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(req, rep, session) { var _pri17, _, __; return _regenerator2.default.wrap(function _callee13$(_context13) { while (1) { switch (_context13.prev = _context13.next) { case 0: _pri17 = pri(this), _ = _pri17._, __ = _pri17.__; _context13.t0 = _tool2.default; _context13.next = 4; return (0, _get3.default)(FormatPageAPage.prototype.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAPage.prototype), "output", this).call(this, req, rep, session); case 4: _context13.t1 = _context13.sent; _context13.t2 = _.formater; _context13.t3 = Buffer; _context13.next = 9; return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.HeaderPath); case 9: _context13.t4 = _context13.sent; _context13.t5 = _context13.t3.from.call(_context13.t3, _context13.t4).toString("utf-8"); _context13.t6 = req; _context13.t7 = rep; _context13.t8 = session; _context13.next = 16; return _context13.t2.format.call(_context13.t2, _context13.t5, _context13.t6, _context13.t7, _context13.t8); case 16: _context13.t9 = _context13.sent; _context13.t10 = _.formater; _context13.t11 = Buffer; _context13.next = 21; return _tool2.default.callback(_fs2.default.readFile, _fs2.default, __.FooterPath); case 21: _context13.t12 = _context13.sent; _context13.t13 = _context13.t11.from.call(_context13.t11, _context13.t12).toString("utf-8"); _context13.t14 = req; _context13.t15 = rep; _context13.t16 = session; _context13.next = 28; return _context13.t10.format.call(_context13.t10, _context13.t13, _context13.t14, _context13.t15, _context13.t16); case 28: _context13.t17 = _context13.sent; _context13.t18 = { Header: _context13.t9, Footer: _context13.t17 }; return _context13.abrupt("return", _context13.t0.merge.call(_context13.t0, _context13.t1, _context13.t18)); case 31: case "end": return _context13.stop(); } } }, _callee13, this); })); function output(_x43, _x44, _x45) { return _ref13.apply(this, arguments); } return output; }() }]); return FormatPageAPage; }(FormatPageAScriptPage); var FormatPageAContentPage = exports.FormatPageAContentPage = function (_FormatPageAPage) { (0, _inherits3.default)(FormatPageAContentPage, _FormatPageAPage); function FormatPageAContentPage(dirs, HeaderScriptPath, FooterScriptPath, HeaderPath, FooterPath) { var MenuPath = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "Menu.htm"; (0, _classCallCheck3.default)(this, FormatPageAContentPage); var _this17 = (0, _possibleConstructorReturn3.default)(this, (FormatPageAContentPage.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAContentPage)).call(this, dirs, HeaderScriptPath, FooterScriptPath, HeaderPath, FooterPath)); pri(_this17, { MenuPath: _tool4.default.formatPath(_this17.dirs + _tool2.default.environment.splitChar + MenuPath) }); return _this17; } (0, _createClass3.default)(FormatPageAContentPage, [{ key: "output", value: function () { var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(req, rep, session) { var _pri18, _, __; return _regenerator2.default.wrap(function _callee14$(_context14) { while (1) { switch (_context14.prev = _context14.next) { case 0: _pri18 = pri(this), _ = _pri18._, __ = _pri18.__; _context14.t0 = _tool2.default; _context14.next = 4; return (0, _get3.default)(FormatPageAContentPage.prototype.__proto__ || (0, _getPrototypeOf2.default)(FormatPageAContentPage.prototype), "output", this).call(this, req, rep, session); case 4: _context14.t1 = _context14.sent; _context14.t2 = _.formater;