var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // node_modules/set-cookie-parser/lib/set-cookie.js var require_set_cookie = __commonJS({ "node_modules/set-cookie-parser/lib/set-cookie.js"(exports, module) { "use strict"; var defaultParseOptions = { decodeValues: true, map: false, silent: false }; function isNonEmptyString(str) { return typeof str === "string" && !!str.trim(); } function parseString(setCookieValue, options) { var parts = setCookieValue.split(";").filter(isNonEmptyString); var nameValuePairStr = parts.shift(); var parsed = parseNameValuePair(nameValuePairStr); var name = parsed.name; var value = parsed.value; options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions; try { value = options.decodeValues ? decodeURIComponent(value) : value; } catch (e) { console.error( "set-cookie-parser encountered an error while decoding a cookie with value '" + value + "'. Set options.decodeValues to false to disable this feature.", e ); } var cookie = { name, value }; parts.forEach(function(part) { var sides = part.split("="); var key = sides.shift().trimLeft().toLowerCase(); var value2 = sides.join("="); if (key === "expires") { cookie.expires = new Date(value2); } else if (key === "max-age") { cookie.maxAge = parseInt(value2, 10); } else if (key === "secure") { cookie.secure = true; } else if (key === "httponly") { cookie.httpOnly = true; } else if (key === "samesite") { cookie.sameSite = value2; } else { cookie[key] = value2; } }); return cookie; } function parseNameValuePair(nameValuePairStr) { var name = ""; var value = ""; var nameValueArr = nameValuePairStr.split("="); if (nameValueArr.length > 1) { name = nameValueArr.shift(); value = nameValueArr.join("="); } else { value = nameValuePairStr; } return { name, value }; } function parse(input, options) { options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions; if (!input) { if (!options.map) { return []; } else { return {}; } } if (input.headers) { if (typeof input.headers.getSetCookie === "function") { input = input.headers.getSetCookie(); } else if (input.headers["set-cookie"]) { input = input.headers["set-cookie"]; } else { var sch = input.headers[Object.keys(input.headers).find(function(key) { return key.toLowerCase() === "set-cookie"; })]; if (!sch && input.headers.cookie && !options.silent) { console.warn( "Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning." ); } input = sch; } } if (!Array.isArray(input)) { input = [input]; } options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions; if (!options.map) { return input.filter(isNonEmptyString).map(function(str) { return parseString(str, options); }); } else { var cookies = {}; return input.filter(isNonEmptyString).reduce(function(cookies2, str) { var cookie = parseString(str, options); cookies2[cookie.name] = cookie; return cookies2; }, cookies); } } function splitCookiesString(cookiesString) { if (Array.isArray(cookiesString)) { return cookiesString; } if (typeof cookiesString !== "string") { return []; } var cookiesStrings = []; var pos = 0; var start; var ch; var lastComma; var nextStart; var cookiesSeparatorFound; function skipWhitespace() { while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) { pos += 1; } return pos < cookiesString.length; } function notSpecialChar() { ch = cookiesString.charAt(pos); return ch !== "=" && ch !== ";" && ch !== ","; } while (pos < cookiesString.length) { start = pos; cookiesSeparatorFound = false; while (skipWhitespace()) { ch = cookiesString.charAt(pos); if (ch === ",") { lastComma = pos; pos += 1; skipWhitespace(); nextStart = pos; while (pos < cookiesString.length && notSpecialChar()) { pos += 1; } if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") { cookiesSeparatorFound = true; pos = nextStart; cookiesStrings.push(cookiesString.substring(start, lastComma)); start = pos; } else { pos = lastComma + 1; } } else { pos += 1; } } if (!cookiesSeparatorFound || pos >= cookiesString.length) { cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); } } return cookiesStrings; } module.exports = parse; module.exports.parse = parse; module.exports.parseString = parseString; module.exports.splitCookiesString = splitCookiesString; } }); // src/store.ts var import_set_cookie_parser = __toESM(require_set_cookie()); var PERSISTENCY_KEY = "MSW_COOKIE_STORE"; function supportsLocalStorage() { try { if (localStorage == null) { return false; } const testKey = PERSISTENCY_KEY + "_test"; localStorage.setItem(testKey, "test"); localStorage.getItem(testKey); localStorage.removeItem(testKey); return true; } catch (error) { return false; } } var hasLocalStorageSupport = supportsLocalStorage(); function isPropertyAccessible(object, method) { try { object[method]; return true; } catch { return false; } } var CookieStore = class { constructor() { this.store = /* @__PURE__ */ new Map(); } add(request, response) { if (isPropertyAccessible(request, "credentials") && request.credentials === "omit") { return; } const requestUrl = new URL(request.url); const responseCookies = response.headers.get("set-cookie"); if (!responseCookies) { return; } const now = Date.now(); const parsedResponseCookies = (0, import_set_cookie_parser.parse)(responseCookies).map( ({ maxAge, ...cookie }) => ({ ...cookie, expires: maxAge === void 0 ? cookie.expires : new Date(now + maxAge * 1e3), maxAge }) ); const prevCookies = this.store.get(requestUrl.origin) || /* @__PURE__ */ new Map(); parsedResponseCookies.forEach((cookie) => { this.store.set(requestUrl.origin, prevCookies.set(cookie.name, cookie)); }); } get(request) { this.deleteExpiredCookies(); const requestUrl = new URL(request.url); const originCookies = this.store.get(requestUrl.origin) || /* @__PURE__ */ new Map(); if (!isPropertyAccessible(request, "credentials")) { return originCookies; } switch (request.credentials) { case "include": { if (typeof document === "undefined") { return originCookies; } const documentCookies = (0, import_set_cookie_parser.parse)(document.cookie); documentCookies.forEach((cookie) => { originCookies.set(cookie.name, cookie); }); return originCookies; } case "same-origin": { return originCookies; } default: return /* @__PURE__ */ new Map(); } } getAll() { this.deleteExpiredCookies(); return this.store; } deleteAll(request) { const requestUrl = new URL(request.url); this.store.delete(requestUrl.origin); } clear() { this.store.clear(); } hydrate() { if (!hasLocalStorageSupport) { return; } const persistedCookies = localStorage.getItem(PERSISTENCY_KEY); if (!persistedCookies) { return; } try { const parsedCookies = JSON.parse(persistedCookies); parsedCookies.forEach(([origin, cookies]) => { this.store.set( origin, new Map( cookies.map(([token, { expires, ...cookie }]) => [ token, expires === void 0 ? cookie : { ...cookie, expires: new Date(expires) } ]) ) ); }); } catch (error) { console.warn(` [virtual-cookie] Failed to parse a stored cookie from the localStorage (key "${PERSISTENCY_KEY}"). Stored value: ${localStorage.getItem(PERSISTENCY_KEY)} Thrown exception: ${error} Invalid value has been removed from localStorage to prevent subsequent failed parsing attempts.`); localStorage.removeItem(PERSISTENCY_KEY); } } persist() { if (!hasLocalStorageSupport) { return; } const serializedCookies = Array.from(this.store.entries()).map( ([origin, cookies]) => { return [origin, Array.from(cookies.entries())]; } ); localStorage.setItem(PERSISTENCY_KEY, JSON.stringify(serializedCookies)); } deleteExpiredCookies() { const now = Date.now(); this.store.forEach((originCookies, origin) => { originCookies.forEach(({ expires, name }) => { if (expires !== void 0 && expires.getTime() <= now) { originCookies.delete(name); } }); if (originCookies.size === 0) { this.store.delete(origin); } }); } }; var store = new CookieStore(); export { PERSISTENCY_KEY, store }; //# sourceMappingURL=index.mjs.map