universal-cookie
Version:
Universal cookies for JavaScript
2 lines (1 loc) • 5.42 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).UniversalCookie=t()}(this,(function(){"use strict";var e,t={};var i=function(){if(e)return t;e=1,Object.defineProperty(t,"__esModule",{value:!0}),t.parse=function(e,t){const i=new a,n=e.length;if(n<2)return i;const o=t?.decode||u;let s=0;do{const t=e.indexOf("=",s);if(-1===t)break;const r=e.indexOf(";",s),a=-1===r?n:r;if(t>a){s=e.lastIndexOf(";",t-1)+1;continue}const u=c(e,s,t),l=h(e,t,u),d=e.slice(u,l);if(void 0===i[d]){let n=c(e,t+1,a),s=h(e,a,n);const r=o(e.slice(n,s));i[d]=r}s=a+1}while(s<n);return i},t.serialize=function(e,t,a){const c=a?.encode||encodeURIComponent;if(!i.test(e))throw new TypeError(`argument name is invalid: ${e}`);const h=c(t);if(!n.test(h))throw new TypeError(`argument val is invalid: ${t}`);let u=e+"="+h;if(!a)return u;if(void 0!==a.maxAge){if(!Number.isInteger(a.maxAge))throw new TypeError(`option maxAge is invalid: ${a.maxAge}`);u+="; Max-Age="+a.maxAge}if(a.domain){if(!o.test(a.domain))throw new TypeError(`option domain is invalid: ${a.domain}`);u+="; Domain="+a.domain}if(a.path){if(!s.test(a.path))throw new TypeError(`option path is invalid: ${a.path}`);u+="; Path="+a.path}if(a.expires){if(!function(e){return"[object Date]"===r.call(e)}(a.expires)||!Number.isFinite(a.expires.valueOf()))throw new TypeError(`option expires is invalid: ${a.expires}`);u+="; Expires="+a.expires.toUTCString()}a.httpOnly&&(u+="; HttpOnly");a.secure&&(u+="; Secure");a.partitioned&&(u+="; Partitioned");if(a.priority){switch("string"==typeof a.priority?a.priority.toLowerCase():void 0){case"low":u+="; Priority=Low";break;case"medium":u+="; Priority=Medium";break;case"high":u+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${a.priority}`)}}if(a.sameSite){switch("string"==typeof a.sameSite?a.sameSite.toLowerCase():a.sameSite){case!0:case"strict":u+="; SameSite=Strict";break;case"lax":u+="; SameSite=Lax";break;case"none":u+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${a.sameSite}`)}}return u};const i=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,n=/^[\u0021-\u003A\u003C-\u007E]*$/,o=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,s=/^[\u0020-\u003A\u003D-\u007E]*$/,r=Object.prototype.toString,a=(()=>{const e=function(){};return e.prototype=Object.create(null),e})();function c(e,t,i){do{const i=e.charCodeAt(t);if(32!==i&&9!==i)return t}while(++t<i);return i}function h(e,t,i){for(;t>i;){const i=e.charCodeAt(--t);if(32!==i&&9!==i)return t+1}return i}function u(e){if(-1===e.indexOf("%"))return e;try{return decodeURIComponent(e)}catch(t){return e}}return t}();function n(e,t={}){const i=function(e){if(e&&"j"===e[0]&&":"===e[1])return e.substr(2);return e}(e);if(!t.doNotParse)try{return JSON.parse(i)}catch(e){}return e}return class{constructor(e,t={}){this.changeListeners=[],this.HAS_DOCUMENT_COOKIE=!1,this.update=()=>{if(!this.HAS_DOCUMENT_COOKIE)return;const e=this.cookies;this.cookies=i.parse(document.cookie),this._checkChanges(e)};const n="undefined"==typeof document?"":document.cookie;this.cookies=function(e){return"string"==typeof e?i.parse(e):"object"==typeof e&&null!==e?e:{}}(e||n),this.defaultSetOptions=t,this.HAS_DOCUMENT_COOKIE=function(){const e="undefined"==typeof global?void 0:global.TEST_HAS_DOCUMENT_COOKIE;return"boolean"==typeof e?e:"object"==typeof document&&"string"==typeof document.cookie}()}_emitChange(e){for(let t=0;t<this.changeListeners.length;++t)this.changeListeners[t](e)}_checkChanges(e){new Set(Object.keys(e).concat(Object.keys(this.cookies))).forEach((t=>{e[t]!==this.cookies[t]&&this._emitChange({name:t,value:n(this.cookies[t])})}))}_startPolling(){this.pollingInterval=setInterval(this.update,300)}_stopPolling(){this.pollingInterval&&clearInterval(this.pollingInterval)}get(e,t={}){return t.doNotUpdate||this.update(),n(this.cookies[e],t)}getAll(e={}){e.doNotUpdate||this.update();const t={};for(let i in this.cookies)t[i]=n(this.cookies[i],e);return t}set(e,t,n){n=n?Object.assign(Object.assign({},this.defaultSetOptions),n):this.defaultSetOptions;const o="string"==typeof t?t:JSON.stringify(t);this.cookies=Object.assign(Object.assign({},this.cookies),{[e]:o}),this.HAS_DOCUMENT_COOKIE&&(document.cookie=i.serialize(e,o,n)),this._emitChange({name:e,value:t,options:n})}remove(e,t){const n=t=Object.assign(Object.assign(Object.assign({},this.defaultSetOptions),t),{expires:new Date(1970,1,1,0,0,1),maxAge:0});this.cookies=Object.assign({},this.cookies),delete this.cookies[e],this.HAS_DOCUMENT_COOKIE&&(document.cookie=i.serialize(e,"",n)),this._emitChange({name:e,value:void 0,options:t})}addChangeListener(e){this.changeListeners.push(e),this.HAS_DOCUMENT_COOKIE&&1===this.changeListeners.length&&("object"==typeof window&&"cookieStore"in window?window.cookieStore.addEventListener("change",this.update):this._startPolling())}removeChangeListener(e){const t=this.changeListeners.indexOf(e);t>=0&&this.changeListeners.splice(t,1),this.HAS_DOCUMENT_COOKIE&&0===this.changeListeners.length&&("object"==typeof window&&"cookieStore"in window?window.cookieStore.removeEventListener("change",this.update):this._stopPolling())}removeAllChangeListeners(){for(;this.changeListeners.length>0;)this.removeChangeListener(this.changeListeners[0])}}}));