store.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. type StoreValue = string | number | boolean | null;
  2. export class Store {
  3. get(key: string) {
  4. return window.localStorage[key];
  5. }
  6. set(key: string, value: StoreValue) {
  7. window.localStorage[key] = value;
  8. }
  9. getBool(key: string, def: any) {
  10. if (def !== void 0 && !this.exists(key)) {
  11. return def;
  12. }
  13. return window.localStorage[key] === 'true';
  14. }
  15. getObject(key: string, def?: any) {
  16. let ret = def;
  17. if (this.exists(key)) {
  18. const json = window.localStorage[key];
  19. try {
  20. ret = JSON.parse(json);
  21. } catch (error) {
  22. console.error(`Error parsing store object: ${key}. Returning default: ${def}. [${error}]`);
  23. }
  24. }
  25. return ret;
  26. }
  27. // Returns true when successfully stored
  28. setObject(key: string, value: any): boolean {
  29. let json;
  30. try {
  31. json = JSON.stringify(value);
  32. } catch (error) {
  33. console.error(`Could not stringify object: ${key}. [${error}]`);
  34. return false;
  35. }
  36. try {
  37. this.set(key, json);
  38. } catch (error) {
  39. // Likely hitting storage quota
  40. console.error(`Could not save item in localStorage: ${key}. [${error}]`);
  41. return false;
  42. }
  43. return true;
  44. }
  45. exists(key: string) {
  46. return window.localStorage[key] !== void 0;
  47. }
  48. delete(key: string) {
  49. window.localStorage.removeItem(key);
  50. }
  51. }
  52. const store = new Store();
  53. export default store;