This commit is contained in:
64
node_modules/search-insights/lib/utils/localStorage.ts
generated
vendored
Normal file
64
node_modules/search-insights/lib/utils/localStorage.ts
generated
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* A utility class for safely interacting with localStorage.
|
||||
*/
|
||||
export class LocalStorage {
|
||||
static store: Storage | undefined = ensureLocalStorage();
|
||||
|
||||
/**
|
||||
* Safely get a value from localStorage.
|
||||
* If the value is not able to be parsed as JSON, this method will return null.
|
||||
*
|
||||
* @param key - String value of the key.
|
||||
* @returns Null if the key is not found or unable to be parsed, the value otherwise.
|
||||
*/
|
||||
static get<T>(key: string): T | null {
|
||||
const val = this.store?.getItem(key);
|
||||
if (!val) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.parse(val) as T;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Safely set a value in localStorage.
|
||||
* If the storage is full, this method will catch the error and log a warning.
|
||||
*
|
||||
* @param key - String value of the key.
|
||||
* @param value - Any value to store.
|
||||
*/
|
||||
static set(key: string, value: any): void {
|
||||
try {
|
||||
this.store?.setItem(key, JSON.stringify(value));
|
||||
} catch {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(
|
||||
`Unable to set ${key} in localStorage, storage may be full.`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a value from localStorage.
|
||||
*
|
||||
* @param key - String value of the key.
|
||||
*/
|
||||
static remove(key: string): void {
|
||||
this.store?.removeItem(key);
|
||||
}
|
||||
}
|
||||
|
||||
function ensureLocalStorage(): Storage | undefined {
|
||||
try {
|
||||
const testKey = "__test_localStorage__";
|
||||
globalThis.localStorage.setItem(testKey, testKey);
|
||||
globalThis.localStorage.removeItem(testKey);
|
||||
return globalThis.localStorage;
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user