| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- /*
- * Cookies.js - 1.2.3 (patched for SameSite=Strict and secure=true)
- * https://github.com/ScottHamper/Cookies
- *
- * This is free and unencumbered software released into the public domain.
- */
- (function (global, undefined) {
- "use strict";
- var factory = function (window) {
- if (typeof window.document !== "object") {
- throw new Error(
- "Cookies.js requires a `window` with a `document` object",
- );
- }
- var Cookies = function (key, value, options) {
- return arguments.length === 1
- ? Cookies.get(key)
- : Cookies.set(key, value, options);
- };
- // Allows for setter injection in unit tests
- Cookies._document = window.document;
- // Used to ensure cookie keys do not collide with
- // built-in `Object` properties
- Cookies._cacheKeyPrefix = "cookey."; // Hurr hurr, :)
- Cookies._maxExpireDate = new Date("Fri, 31 Dec 9999 23:59:59 UTC");
- Cookies.defaults = {
- path: "/",
- SameSite: "Strict",
- secure: true,
- };
- Cookies.get = function (key) {
- if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) {
- Cookies._renewCache();
- }
- var value = Cookies._cache[Cookies._cacheKeyPrefix + key];
- return value === undefined ? undefined : decodeURIComponent(value);
- };
- Cookies.set = function (key, value, options) {
- options = Cookies._getExtendedOptions(options);
- options.expires = Cookies._getExpiresDate(
- value === undefined ? -1 : options.expires,
- );
- Cookies._document.cookie = Cookies._generateCookieString(
- key,
- value,
- options,
- );
- return Cookies;
- };
- Cookies.expire = function (key, options) {
- return Cookies.set(key, undefined, options);
- };
- Cookies._getExtendedOptions = function (options) {
- return {
- path: (options && options.path) || Cookies.defaults.path,
- domain: (options && options.domain) || Cookies.defaults.domain,
- SameSite: (options && options.SameSite) || Cookies.defaults.SameSite,
- expires: (options && options.expires) || Cookies.defaults.expires,
- secure:
- options && options.secure !== undefined
- ? options.secure
- : Cookies.defaults.secure,
- };
- };
- Cookies._isValidDate = function (date) {
- return (
- Object.prototype.toString.call(date) === "[object Date]" &&
- !isNaN(date.getTime())
- );
- };
- Cookies._getExpiresDate = function (expires, now) {
- now = now || new Date();
- if (typeof expires === "number") {
- expires =
- expires === Infinity
- ? Cookies._maxExpireDate
- : new Date(now.getTime() + expires * 1000);
- } else if (typeof expires === "string") {
- expires = new Date(expires);
- }
- if (expires && !Cookies._isValidDate(expires)) {
- throw new Error(
- "`expires` parameter cannot be converted to a valid Date instance",
- );
- }
- return expires;
- };
- Cookies._generateCookieString = function (key, value, options) {
- key = key.replace(/[^#$&+\^`|]/g, encodeURIComponent);
- key = key.replace(/\(/g, "%28").replace(/\)/g, "%29");
- value = (value + "").replace(
- /[^!#$&-+\--:<-\[\]-~]/g,
- encodeURIComponent,
- );
- options = options || {};
- var cookieString = key + "=" + value;
- cookieString += options.path ? ";path=" + options.path : "";
- cookieString += options.domain ? ";domain=" + options.domain : "";
- cookieString += options.SameSite ? ";SameSite=" + options.SameSite : "";
- cookieString += options.expires
- ? ";expires=" + options.expires.toUTCString()
- : "";
- cookieString += options.secure ? ";secure" : "";
- return cookieString;
- };
- Cookies._getCacheFromString = function (documentCookie) {
- var cookieCache = {};
- var cookiesArray = documentCookie ? documentCookie.split("; ") : [];
- for (var i = 0; i < cookiesArray.length; i++) {
- var cookieKvp = Cookies._getKeyValuePairFromCookieString(
- cookiesArray[i],
- );
- if (
- cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined
- ) {
- cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] =
- cookieKvp.value;
- }
- }
- return cookieCache;
- };
- Cookies._getKeyValuePairFromCookieString = function (cookieString) {
- // "=" is a valid character in a cookie value according to RFC6265, so cannot `split('=')`
- var separatorIndex = cookieString.indexOf("=");
- // IE omits the "=" when the cookie value is an empty string
- separatorIndex =
- separatorIndex < 0 ? cookieString.length : separatorIndex;
- var key = cookieString.substr(0, separatorIndex);
- var decodedKey;
- try {
- decodedKey = decodeURIComponent(key);
- } catch (e) {
- if (console && typeof console.error === "function") {
- console.error('Could not decode cookie with key "' + key + '"', e);
- }
- }
- return {
- key: decodedKey,
- value: cookieString.substr(separatorIndex + 1), // Defer decoding value until accessed
- };
- };
- Cookies._renewCache = function () {
- Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie);
- Cookies._cachedDocumentCookie = Cookies._document.cookie;
- };
- Cookies._areEnabled = function () {
- var testKey = "cookies.js";
- var areEnabled = Cookies.set(testKey, 1).get(testKey) === "1";
- Cookies.expire(testKey);
- return areEnabled;
- };
- Cookies.enabled = Cookies._areEnabled();
- return Cookies;
- };
- var cookiesExport =
- global && typeof global.document === "object" ? factory(global) : factory;
- // AMD support
- if (typeof define === "function" && define.amd) {
- define(function () {
- return cookiesExport;
- });
- // CommonJS/Node.js support
- } else if (typeof exports === "object") {
- // Support Node.js specific `module.exports` (which can be a function)
- if (typeof module === "object" && typeof module.exports === "object") {
- exports = module.exports = cookiesExport;
- }
- // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function)
- exports.Cookies = cookiesExport;
- } else {
- global.Cookies = cookiesExport;
- }
- })(typeof window === "undefined" ? this : window);
|