UNPKG

nextjs-cookie

Version:
136 lines (135 loc) 5.32 kB
"use strict"; 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;