nextjs-cookie
Version:
Set & Remove cookies in nextjs
136 lines (135 loc) • 5.32 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkCookies = exports.hasCookie = exports.removeCookies = exports.deleteCookie = exports.setCookies = exports.setCookie = exports.getCookie = exports.getCookies = void 0;
const cookie_1 = require("cookie");
const isClientSide = () => typeof window !== 'undefined';
const processValue = (value) => {
if (value === 'true')
return true;
if (value === 'false')
return false;
if (value === 'undefined')
return undefined;
if (value === 'null')
return null;
return value;
};
const stringify = (value = '') => {
try {
const result = JSON.stringify(value);
return (/^[\{\[]/.test(result)) ? result : value;
}
catch (e) {
return value;
}
};
const decode = (str) => {
if (!str)
return str;
return str.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
};
const getCookies = (options) => {
let req;
if (options)
req = options.req;
if (!isClientSide()) {
// if cookie-parser is used in project get cookies from ctx.req.cookies
// if cookie-parser isn't used in project get cookies from ctx.req.headers.cookie
if (req && req.cookies)
return req.cookies;
if (req && req.headers && req.headers.cookie)
return (0, cookie_1.parse)(req.headers.cookie);
return {};
}
const _cookies = {};
const documentCookies = document.cookie ? document.cookie.split('; ') : [];
for (let i = 0, len = documentCookies.length; i < len; i++) {
const cookieParts = documentCookies[i].split('=');
const _cookie = cookieParts.slice(1).join('=');
const name = cookieParts[0];
_cookies[name] = _cookie;
}
return _cookies;
};
exports.getCookies = getCookies;
const getCookie = (key, options) => {
const _cookies = (0, exports.getCookies)(options);
const value = _cookies[key];
if (value === undefined)
return undefined;
return processValue(decode(value));
};
exports.getCookie = getCookie;
const setCookie = (key, data, options) => {
let _cookieOptions;
let _req;
let _res;
if (options) {
const { req, res } = options, _options = __rest(options, ["req", "res"]);
_req = req;
_res = res;
_cookieOptions = _options;
}
const cookieStr = (0, cookie_1.serialize)(key, stringify(data), Object.assign({ path: '/' }, _cookieOptions));
if (!isClientSide()) {
if (_res && _req) {
let currentCookies = _res.getHeader('Set-Cookie');
if (!Array.isArray(currentCookies)) {
currentCookies = !currentCookies ? [] : [String(currentCookies)];
}
_res.setHeader('Set-Cookie', currentCookies.concat(cookieStr));
if (_req && _req.cookies) {
const _cookies = _req.cookies;
data === '' ? delete _cookies[key] : _cookies[key] = stringify(data);
}
if (_req && _req.headers && _req.headers.cookie) {
const _cookies = (0, cookie_1.parse)(_req.headers.cookie);
data === '' ? delete _cookies[key] : _cookies[key] = stringify(data);
_req.headers.cookie = Object.entries(_cookies).reduce((accum, item) => {
return accum.concat(`${item[0]}=${item[1]};`);
}, '');
}
}
}
else {
document.cookie = cookieStr;
}
};
exports.setCookie = setCookie;
const setCookies = (key, data, options) => {
console.warn('[WARN]: setCookies was deprecated. It will be deleted in the new version. Use setCookie instead.');
return (0, exports.setCookie)(key, data, options);
};
exports.setCookies = setCookies;
const deleteCookie = (key, options) => {
return (0, exports.setCookie)(key, '', Object.assign(Object.assign({}, options), { maxAge: -1 }));
};
exports.deleteCookie = deleteCookie;
const removeCookies = (key, options) => {
console.warn('[WARN]: removeCookies was deprecated. It will be deleted in the new version. Use deleteCookie instead.');
return (0, exports.deleteCookie)(key, options);
};
exports.removeCookies = removeCookies;
const hasCookie = (key, options) => {
if (!key)
return false;
const cookie = (0, exports.getCookies)(options);
return cookie.hasOwnProperty(key);
};
exports.hasCookie = hasCookie;
const checkCookies = (key, options) => {
console.warn('[WARN]: checkCookies was deprecated. It will be deleted in the new version. Use hasCookie instead.');
return (0, exports.hasCookie)(key, options);
};
exports.checkCookies = checkCookies;