dydx-v4-web/src/lib/localStorage.ts
James Jia - Test 4b86068d8f
Initial commit
2023-09-08 13:52:13 -07:00

42 lines
1.1 KiB
TypeScript

import { LocalStorageKey } from '@/constants/localStorage';
import { log } from './telemetry';
export const setLocalStorage = <Value>({ key, value }: { key: LocalStorageKey; value: Value }) => {
if (value === undefined) return removeLocalStorage({ key });
const serializedValue = JSON.stringify(value);
globalThis.localStorage?.setItem(key, serializedValue);
};
export const getLocalStorage = <Value>({
key,
defaultValue,
validateFn,
}: {
key: LocalStorageKey;
defaultValue?: Value;
validateFn?: (value: any) => boolean;
}) => {
try {
const unserializedValue = globalThis.localStorage?.getItem(key);
if (unserializedValue !== null) {
const value = JSON.parse(unserializedValue) as Value;
if (validateFn && !validateFn(value)) throw new Error('Unsupported value');
return value;
}
} catch (error) {
log('getLocalStorage', error);
removeLocalStorage({ key });
}
return defaultValue!;
};
export const removeLocalStorage = ({ key }: { key: LocalStorageKey }) => {
globalThis.localStorage?.removeItem(key);
};