gcl
Version:
码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现
224 lines (200 loc) • 7.52 kB
JavaScript
;
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