react-cookies
Version:
Load and save cookies with React
172 lines (136 loc) • 4.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
exports.load = load;
exports.loadAll = loadAll;
exports.select = select;
exports.save = save;
exports.remove = remove;
exports.setRawCookie = setRawCookie;
exports.plugToRequest = plugToRequest;
var _cookie = require('cookie');
var _cookie2 = _interopRequireDefault(_cookie);
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var IS_NODE = typeof document === 'undefined' || typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test';
var _rawCookie = {};
var _res = void 0;
function _isResWritable() {
return _res && !_res.headersSent;
}
function load(name, doNotParse) {
var cookies = IS_NODE ? _rawCookie : _cookie2.default.parse(document.cookie);
var cookieVal = cookies && cookies[name];
if (typeof doNotParse === 'undefined') {
doNotParse = !cookieVal || cookieVal[0] !== '{' && cookieVal[0] !== '[';
}
if (!doNotParse) {
try {
cookieVal = JSON.parse(cookieVal);
} catch (err) {
// Not serialized object
}
}
return cookieVal;
}
function loadAll(doNotParse) {
var cookies = IS_NODE ? _rawCookie : _cookie2.default.parse(document.cookie);
var cookieVal = cookies;
if (typeof doNotParse === 'undefined') {
doNotParse = !cookieVal || cookieVal[0] !== '{' && cookieVal[0] !== '[';
}
if (!doNotParse) {
try {
cookieVal = JSON.parse(cookieVal);
} catch (err) {
// Not serialized object
}
}
return cookieVal;
}
function select(regex) {
var cookies = IS_NODE ? _rawCookie : _cookie2.default.parse(document.cookie);
if (!cookies) {
return {};
}
if (!regex) {
return cookies;
}
return Object.keys(cookies).reduce(function (accumulator, name) {
if (!regex.test(name)) {
return accumulator;
}
var newCookie = {};
newCookie[name] = cookies[name];
return (0, _objectAssign2.default)({}, accumulator, newCookie);
}, {});
}
function save(name, val, opt) {
_rawCookie[name] = val;
// Allow you to work with cookies as objects.
if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') {
_rawCookie[name] = JSON.stringify(val);
}
// Cookies only work in the browser
if (!IS_NODE) {
document.cookie = _cookie2.default.serialize(name, _rawCookie[name], opt);
}
if (_isResWritable() && _res.cookie) {
_res.cookie(name, val, opt);
}
}
function remove(name, opt) {
delete _rawCookie[name];
if (typeof opt === 'undefined') {
opt = {};
} else if (typeof opt === 'string') {
// Will be deprecated in future versions
opt = { path: opt };
} else {
// Prevent mutation of opt below
opt = (0, _objectAssign2.default)({}, opt);
}
if (typeof document !== 'undefined') {
opt.expires = new Date(1970, 1, 1, 0, 0, 1);
opt.maxAge = 0;
document.cookie = _cookie2.default.serialize(name, '', opt);
}
if (_isResWritable() && _res.clearCookie) {
_res.clearCookie(name, opt);
}
}
function setRawCookie(rawCookie) {
if (rawCookie) {
_rawCookie = _cookie2.default.parse(rawCookie);
} else {
_rawCookie = {};
}
}
function plugToRequest(req, res) {
if (req.cookie) {
_rawCookie = req.cookie;
} else if (req.cookies) {
_rawCookie = req.cookies;
} else if (req.headers && req.headers.cookie) {
setRawCookie(req.headers.cookie);
} else {
_rawCookie = {};
}
_res = res;
return function unplug() {
_res = null;
_rawCookie = {};
};
}
exports.default = {
setRawCookie: setRawCookie,
load: load,
loadAll: loadAll,
select: select,
save: save,
remove: remove,
plugToRequest: plugToRequest
};