From f923c1be0e5811e4b4fecfcbb1aeb7db857fae02 Mon Sep 17 00:00:00 2001 From: mzxyz <8177474+mzxyz@users.noreply.github.com> Date: Mon, 27 May 2024 10:31:58 +1200 Subject: [PATCH] Support clean localStorage when got excess error --- packages/network-support/src/utils/store.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/network-support/src/utils/store.ts b/packages/network-support/src/utils/store.ts index 0801d14b..195bc816 100644 --- a/packages/network-support/src/utils/store.ts +++ b/packages/network-support/src/utils/store.ts @@ -38,16 +38,23 @@ export class LocalStorageCache implements IStore { } async set(key: string, value: T): Promise { - const data = { - value, - expiry: this.ttl ? Date.now() + this.ttl : undefined, - }; - localStorage.setItem(key, JSON.stringify(data)); + const expiry = this.ttl ? Date.now() + this.ttl : undefined; + const data = { value, expiry }; + + try { + localStorage.setItem(key, JSON.stringify(data)); + } catch { + await this.cleanExpiredLocalStorage(); + } } async remove(key: string): Promise { localStorage.removeItem(key); } + + async cleanExpiredLocalStorage(): Promise { + await Promise.all(Object.entries(localStorage).map(async ([key]) => this.get(key))); + } } export class LRUCache implements IStore {