UNPKG

gcl

Version:

码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现

224 lines (200 loc) 7.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.serverParse = exports.toHeaderArray = exports.parse = exports.toString = exports.merge = exports.Cookie = undefined; 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('../common/tool'); var _tool2 = _interopRequireDefault(_tool); var _querystring = require('querystring'); var _querystring2 = _interopRequireDefault(_querystring); var _url = require('url'); var _url2 = _interopRequireDefault(_url); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * cookie 包含属性,toString与解析方法 cookiecollection 特别注意Cookie中保持的时间戳会在返回时编程字符串,不会自动转换 * @property(name,value,expires,path,domain,max_age,httpOnly,secure) */ var Cookie = exports.Cookie = function () { function Cookie() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; (0, _classCallCheck3.default)(this, Cookie); var _pri = pri(this), _ = _pri._, __ = _pri.__; opts = _tool2.default.merge({ name: '', value: '', expires: null, path: '/', domain: null, max_age: null, httpOnly: false, comment: null, secure: false, frameoptions: false }, opts); _.name = opts.name; _.value = opts.value.indexOf('=') >= 0 ? _querystring2.default.parse(opts.value) : opts.value; _.expires = opts.expires ? new Date(opts.expires) : null; _.path = opts.path || ''; _.domain = opts.domain || ''; _.max_age = opts.max_age ? new Date(opts.max_age) : null; _.httpOnly = !!opts.httpOnly; _.comment = opts.comment || ''; _.secure = !!opts.secure; _.frameoptions = opts['X-Frame-Options'] || ''; delete opts.name; delete opts.value; delete opts.expires; delete opts.path; delete opts.domain; delete opts.max_age; delete opts.secure; delete opts.comment; delete opts.httpOnly; delete opts['X-Frame-Options']; delete opts.frameoptions; _.options = opts; } /** * 判断Cookie是否过期 */ (0, _createClass3.default)(Cookie, [{ key: 'toServerString', /** * 用于服务端使用产生Set-Cookie返回字段 */ value: function toServerString() { var _pri2 = pri(this), _ = _pri2._, __ = _pri2.__; var sb = _tool2.default.sb(); sb.append(_.toString().trim(';')); if (_.path) sb.append(";Path=" + _.path); if (_.expires) sb.append("; expires=" + _.expires.toUTCString()); if (_.max_age) sb.append("; Max-Age=" + _.max_age.toUTCString()); if (_.domain) sb.append("; Domain=" + _.domain); if (_.frameoptions) sb.append('; X-Frame-Options=').append(_.frameoptions); if (_.options) for (var k in _.options) { sb.append('; ').append(k).append('=').append(_.options[k]); }if (_.secure) sb.append("; Secure"); if (_.httpOnly) sb.append("; HTTPOnly"); var ret = sb.clear(); sb = null; return ret; } /** * 用于客户端使用产生Cookie上传字段内容 */ }, { key: 'toString', value: function toString() { var _pri3 = pri(this), _ = _pri3._, __ = _pri3.__; return _tool2.default.format('{name}={value};', { name: _.name, value: function () { if (typeof _.value == 'string') return _.value;else { for (var i in _.value) { if (_.value[i] && _tool2.default.getType(_.value[i]) != 'string') _.value[i] = _tool2.default.toJsonString(_.value[i]); } return _querystring2.default.stringify(_.value); } }() }); } }, { key: 'IsExpire', get: function get() { var _pri4 = pri(this), _ = _pri4._, __ = _pri4.__; var now = new Date(); return (_.expires ? now.diff('ms', _.expires) > 0 : false) || (_.max_age ? now.diff('ms', _.max_age) > 0 : false); } }]); return Cookie; }(); /** * 广度优先的字典合并 */ var merge = exports.merge = function merge(ret, ret2) { for (var k in ret2) { var v = ret2[k]; if (v.toString && v.name) { ret[k] = v; } } }; /** * 用于生成request({"Cookie",toString(url)})的参数') */ var toString = exports.toString = function toString(ret, url) { var opts = url ? _url2.default.parse(url) : {}; var sb = _tool2.default.sb(); for (var k in ret) { var v = ret[k]; if (v.toString && v.name) { if (!v.IsExpire && (!_tool2.default.isValid(v.domain) || !_tool2.default.isValid(opts.host) || v.domain && opts.host.toLowerCase().indexOf(v.domain.toLowerCase()) >= 0)) sb.append(v.toString()); } } var val = sb.clear(); sb = null; return val; }; /** * parse:用于客户端使用获取resp.headers[\'set-cookie\']信息 */ var parse = exports.parse = function parse() { var cookies = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var ret = {}; if (cookies) { cookies.forEach(function (v) { var val = {}; v.split(';').filter(function (v) { return _tool2.default.isValid(v); }).forEach(function (v2) { var kv = v2.split('='); if (_tool2.default.toJsonString(val).length == 2) { val.name = kv[0].trim(); val.value = v2.substr(kv[0].length + 1); } else val[kv[0].trim()] = v2.substr(kv[0].length).trim('='); }); ret[val.name] = new Cookie(val); }); } return ret; }; /** * toHeaderArray:用于生成response.setHeader("Set-Cookie",toHeaderArray);的参数' * */ var toHeaderArray = exports.toHeaderArray = function toHeaderArray(ret) { var vals = []; for (var k in ret) { var v = ret[k]; if (v && v.toServerString) vals.push(v.toServerString()); } return vals; }; /** serverParse:用于服务端使用获取Cookie信息'*/ var serverParse = exports.serverParse = function serverParse(str) { var ret = {}; if (str) str.split(';').filter(function (v) { return _tool2.default.isValid(v); }).forEach(function (v) { var vals = v.split('='); if (vals.length >= 2) { ret[vals[0].trim()] = new Cookie({ name: vals[0], value: v.substr(vals[0].length + 1) }); } }); return ret; }; exports.default = { Cookie: Cookie, merge: merge, toString: toString, toHeaderArray: toHeaderArray, serverParse: serverParse, parse: parse }; var pri = _tool2.default.pris(); //# sourceMappingURL=cookie.js.map