{"version":3,"sources":["src/utils/local-storage-utils.tsx"],"names":["StorageItems","SafeStorage","[object Object]","this","tryAccessLocalStorageOrWarn","localStorage","clear","key","getItem","fallback","item","tryJSONOrWarn","JSON","parse","index","length","tryOrElse","removeItem","value","setItem","obj","stringified","stringify","tryTo","orElse","console","warn","e"],"mappings":"IAEYA,GAAZ,SAAYA,GACVA,EAAA,kBAAA,uBACAA,EAAA,8BAAA,oCAFF,CAAYA,IAAAA,EAAY,WAWXC,EACXC,eACOA,QACL,OAAOC,KAAKC,6BACV,IAAMC,aAAaC,UACnB,SAIGJ,QAAQK,GACb,OAAOJ,KAAKC,6BACV,IAAMC,aAAaG,QAAQD,KAC3B,IAAM,OAIHL,cAAiBK,EAAmBE,GACzC,MAAMC,EAAOP,KAAKK,QAAQD,GAC1B,IAAKG,EAAM,CACT,OAAOD,EAET,OAAON,KAAKQ,cACVJ,GACA,IAAMK,KAAKC,MAAMH,KACjB,IAAMD,IAIHP,IAAIY,GACT,OAAOX,KAAKC,6BACV,IAAMC,aAAaE,IAAIO,KACvB,IAAM,OAIVC,aACE,OAAOZ,KAAKa,WACV,IAAMX,aAAaU,SACnB,IAAM,IAIHb,WAAWK,GAChB,OAAOJ,KAAKC,6BACV,IAAMC,aAAaY,WAAWV,KAC9B,SAIGL,QAAQK,EAAmBW,GAChC,OAAOf,KAAKC,6BACV,IAAMC,aAAac,QAAQZ,EAAKW,KAChC,SAIGhB,QAAQK,EAAmBa,GAChC,MAAMC,EAAclB,KAAKQ,cACvBJ,GACA,IAAMK,KAAKU,UAAUF,KACrB,IAAMR,KAAKU,UAAU,MAEvB,OAAOnB,KAAKgB,QAAQZ,EAAKc,GAGnBnB,4BACNqB,EACAC,GAEA,OAAOrB,KAAKa,UAAUO,GAAO,KAC3BE,QAAQC,KACN,wGAEF,OAAOF,OAIHtB,cACNK,EACAgB,EACAC,GAEA,OAAOrB,KAAKa,UAAUO,GAAO,KAC3BE,QAAQC,KACN,wEAAwEnB,KAE1E,OAAOiB,OAIHtB,UACNqB,EACAC,GAEA,IACE,OAAOD,IACP,MAAOI,GACPF,QAAQC,KAAKC,GACb,OAAOH","sourcesContent":["import {StandaloneSearchBoxAnalytics} from '@coveo/headless';\n\nexport enum StorageItems {\n RECENT_QUERIES = 'coveo-recent-queries',\n STANDALONE_SEARCH_BOX_DATA = 'coveo-standalone-search-box-data',\n}\n\nexport interface StandaloneSearchBoxData {\n value: string;\n enableQuerySyntax?: boolean;\n analytics: StandaloneSearchBoxAnalytics;\n}\n\nexport class SafeStorage implements Storage {\n constructor() {}\n public clear() {\n return this.tryAccessLocalStorageOrWarn(\n () => localStorage.clear(),\n () => {}\n );\n }\n\n public getItem(key: StorageItems) {\n return this.tryAccessLocalStorageOrWarn(\n () => localStorage.getItem(key),\n () => null\n );\n }\n\n public getParsedJSON(key: StorageItems, fallback: T) {\n const item = this.getItem(key);\n if (!item) {\n return fallback;\n }\n return this.tryJSONOrWarn(\n key,\n () => JSON.parse(item) as T,\n () => fallback\n );\n }\n\n public key(index: number) {\n return this.tryAccessLocalStorageOrWarn(\n () => localStorage.key(index),\n () => null\n );\n }\n\n public get length() {\n return this.tryOrElse(\n () => localStorage.length,\n () => 0\n );\n }\n\n public removeItem(key: StorageItems) {\n return this.tryAccessLocalStorageOrWarn(\n () => localStorage.removeItem(key),\n () => {}\n );\n }\n\n public setItem(key: StorageItems, value: string) {\n return this.tryAccessLocalStorageOrWarn(\n () => localStorage.setItem(key, value),\n () => {}\n );\n }\n\n public setJSON(key: StorageItems, obj: unknown) {\n const stringified = this.tryJSONOrWarn(\n key,\n () => JSON.stringify(obj),\n () => JSON.stringify({})\n );\n return this.setItem(key, stringified);\n }\n\n private tryAccessLocalStorageOrWarn(\n tryTo: () => OnSuccess,\n orElse: () => OnFailure\n ) {\n return this.tryOrElse(tryTo, () => {\n console.warn(\n 'Error while trying to read or modify local storage. This can be caused by browser specific settings.'\n );\n return orElse();\n });\n }\n\n private tryJSONOrWarn(\n key: StorageItems,\n tryTo: () => OnSuccess,\n orElse: () => OnFailure\n ) {\n return this.tryOrElse(tryTo, () => {\n console.warn(\n `Error while trying to do JSON manipulation with local storage entry. ${key}`\n );\n return orElse();\n });\n }\n\n private tryOrElse(\n tryTo: () => OnSuccess,\n orElse: () => OnFailure\n ) {\n try {\n return tryTo();\n } catch (e) {\n console.warn(e as Error);\n return orElse();\n }\n }\n}\n"]}