{"version":3,"sources":["../../../src/core/utils/cookieStore.ts"],"sourcesContent":["import { isNodeProcess } from 'is-node-process'\nimport { invariant } from 'outvariant'\nimport {\n  Cookie,\n  CookieJar,\n  MemoryCookieStore,\n  type MemoryCookieStoreIndex,\n} from 'tough-cookie'\nimport { jsonParse } from './internal/jsonParse'\n\nclass CookieStore {\n  #storageKey = '__msw-cookie-store__'\n  #jar: CookieJar\n  #memoryStore: MemoryCookieStore\n\n  constructor() {\n    if (!isNodeProcess()) {\n      invariant(\n        typeof localStorage !== 'undefined',\n        'Failed to create a CookieStore: `localStorage` is not available in this environment. This is likely an issue with your environment, which has been detected as browser (or browser-like) environment and must implement global browser APIs correctly.',\n      )\n    }\n\n    this.#memoryStore = new MemoryCookieStore()\n    this.#memoryStore.idx = this.getCookieStoreIndex()\n    this.#jar = new CookieJar(this.#memoryStore)\n  }\n\n  public getCookies(url: string): Array<Cookie> {\n    return this.#jar.getCookiesSync(url)\n  }\n\n  public async setCookie(cookieName: string, url: string): Promise<void> {\n    await this.#jar.setCookie(cookieName, url)\n    this.persist()\n  }\n\n  private getCookieStoreIndex(): MemoryCookieStoreIndex {\n    if (\n      typeof localStorage === 'undefined' ||\n      typeof localStorage.getItem !== 'function'\n    ) {\n      return {}\n    }\n\n    const cookiesString = localStorage.getItem(this.#storageKey)\n    if (cookiesString == null) {\n      return {}\n    }\n\n    const rawCookies = jsonParse<Array<Record<string, unknown>>>(cookiesString)\n    if (rawCookies == null) {\n      return {}\n    }\n\n    const cookies: MemoryCookieStoreIndex = {}\n\n    for (const rawCookie of rawCookies) {\n      const cookie = Cookie.fromJSON(rawCookie)\n\n      if (cookie != null && cookie.domain != null && cookie.path != null) {\n        cookies[cookie.domain] ||= {}\n        cookies[cookie.domain][cookie.path] ||= {}\n        cookies[cookie.domain][cookie.path][cookie.key] = cookie\n      }\n    }\n\n    return cookies\n  }\n\n  private persist(): void {\n    if (\n      typeof localStorage === 'undefined' ||\n      typeof localStorage.setItem !== 'function'\n    ) {\n      return\n    }\n\n    const data = []\n    const { idx } = this.#memoryStore\n\n    for (const domain in idx) {\n      for (const path in idx[domain]) {\n        for (const key in idx[domain][path]) {\n          data.push(idx[domain][path][key].toJSON())\n        }\n      }\n    }\n\n    localStorage.setItem(this.#storageKey, JSON.stringify(data))\n  }\n}\n\nexport const cookieStore = new CookieStore()\n"],"mappings":"AAAA,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,iBAAiB;AAE1B,MAAM,YAAY;AAAA,EAChB,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EAEA,cAAc;AACZ,QAAI,CAAC,cAAc,GAAG;AACpB;AAAA,QACE,OAAO,iBAAiB;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,eAAe,IAAI,kBAAkB;AAC1C,SAAK,aAAa,MAAM,KAAK,oBAAoB;AACjD,SAAK,OAAO,IAAI,UAAU,KAAK,YAAY;AAAA,EAC7C;AAAA,EAEO,WAAW,KAA4B;AAC5C,WAAO,KAAK,KAAK,eAAe,GAAG;AAAA,EACrC;AAAA,EAEA,MAAa,UAAU,YAAoB,KAA4B;AACrE,UAAM,KAAK,KAAK,UAAU,YAAY,GAAG;AACzC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,sBAA8C;AACpD,QACE,OAAO,iBAAiB,eACxB,OAAO,aAAa,YAAY,YAChC;AACA,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,gBAAgB,aAAa,QAAQ,KAAK,WAAW;AAC3D,QAAI,iBAAiB,MAAM;AACzB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,aAAa,UAA0C,aAAa;AAC1E,QAAI,cAAc,MAAM;AACtB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,UAAkC,CAAC;AAEzC,eAAW,aAAa,YAAY;AAClC,YAAM,SAAS,OAAO,SAAS,SAAS;AAExC,UAAI,UAAU,QAAQ,OAAO,UAAU,QAAQ,OAAO,QAAQ,MAAM;AAClE,gBAAQ,OAAO,MAAM,MAAM,CAAC;AAC5B,gBAAQ,OAAO,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC;AACzC,gBAAQ,OAAO,MAAM,EAAE,OAAO,IAAI,EAAE,OAAO,GAAG,IAAI;AAAA,MACpD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,UAAgB;AACtB,QACE,OAAO,iBAAiB,eACxB,OAAO,aAAa,YAAY,YAChC;AACA;AAAA,IACF;AAEA,UAAM,OAAO,CAAC;AACd,UAAM,EAAE,IAAI,IAAI,KAAK;AAErB,eAAW,UAAU,KAAK;AACxB,iBAAW,QAAQ,IAAI,MAAM,GAAG;AAC9B,mBAAW,OAAO,IAAI,MAAM,EAAE,IAAI,GAAG;AACnC,eAAK,KAAK,IAAI,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAEA,iBAAa,QAAQ,KAAK,aAAa,KAAK,UAAU,IAAI,CAAC;AAAA,EAC7D;AACF;AAEO,MAAM,cAAc,IAAI,YAAY;","names":[]}