{"version":3,"names":["StorageItems","SafeStorage","constructor","clear","this","tryAccessLocalStorageOrWarn","localStorage","getItem","key","getParsedJSON","fallback","item","tryJSONOrWarn","JSON","parse","index","length","tryOrElse","removeItem","setItem","value","setJSON","obj","stringified","stringify","tryTo","orElse","console","warn","e"],"sources":["src/utils/local-storage-utils.tsx"],"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<T>(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<OnSuccess, OnFailure>(\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<OnSuccess, OnFailure>(\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<OnSuccess, OnFailure>(\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"],"mappings":"IAEYA,GAAZ,SAAYA,GACVA,EAAA,yCACAA,EAAA,gEACD,EAHD,CAAYA,MAAY,K,MAWXC,EACX,WAAAC,GAAA,CACO,KAAAC,GACL,OAAOC,KAAKC,6BACV,IAAMC,aAAaH,UACnB,Q,CAIG,OAAAI,CAAQC,GACb,OAAOJ,KAAKC,6BACV,IAAMC,aAAaC,QAAQC,KAC3B,IAAM,M,CAIH,aAAAC,CAAiBD,EAAmBE,GACzC,MAAMC,EAAOP,KAAKG,QAAQC,GAC1B,IAAKG,EAAM,CACT,OAAOD,C,CAET,OAAON,KAAKQ,cACVJ,GACA,IAAMK,KAAKC,MAAMH,KACjB,IAAMD,G,CAIH,GAAAF,CAAIO,GACT,OAAOX,KAAKC,6BACV,IAAMC,aAAaE,IAAIO,KACvB,IAAM,M,CAIV,UAAWC,GACT,OAAOZ,KAAKa,WACV,IAAMX,aAAaU,SACnB,IAAM,G,CAIH,UAAAE,CAAWV,GAChB,OAAOJ,KAAKC,6BACV,IAAMC,aAAaY,WAAWV,KAC9B,Q,CAIG,OAAAW,CAAQX,EAAmBY,GAChC,OAAOhB,KAAKC,6BACV,IAAMC,aAAaa,QAAQX,EAAKY,KAChC,Q,CAIG,OAAAC,CAAQb,EAAmBc,GAChC,MAAMC,EAAcnB,KAAKQ,cACvBJ,GACA,IAAMK,KAAKW,UAAUF,KACrB,IAAMT,KAAKW,UAAU,MAEvB,OAAOpB,KAAKe,QAAQX,EAAKe,E,CAGnB,2BAAAlB,CACNoB,EACAC,GAEA,OAAOtB,KAAKa,UAAUQ,GAAO,KAC3BE,QAAQC,KACN,wGAEF,OAAOF,GAAQ,G,CAIX,aAAAd,CACNJ,EACAiB,EACAC,GAEA,OAAOtB,KAAKa,UAAUQ,GAAO,KAC3BE,QAAQC,KACN,wEAAwEpB,KAE1E,OAAOkB,GAAQ,G,CAIX,SAAAT,CACNQ,EACAC,GAEA,IACE,OAAOD,G,CACP,MAAOI,GACPF,QAAQC,KAAKC,GACb,OAAOH,G"}