diff --git a/packages/web/package.json b/packages/web/package.json index 2d53268ce..c506298b5 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -18,6 +18,7 @@ "eslint-plugin-react": "^7.17.0", "formik": "^2.1.0", "json-stable-stringify": "^1.0.1", + "localforage": "^1.9.0", "react": "^16.12.0", "react-ace": "^8.0.0", "react-dom": "^16.12.0", diff --git a/packages/web/src/utility/localStorageGarbageCollector.js b/packages/web/src/utility/localStorageGarbageCollector.js index cea94596b..e442bed26 100644 --- a/packages/web/src/utility/localStorageGarbageCollector.js +++ b/packages/web/src/utility/localStorageGarbageCollector.js @@ -1,8 +1,8 @@ import moment from 'moment'; +import localforage from 'localforage'; -export default function localStorageGarbageCollector() { +export default async function localStorageGarbageCollector() { const openedTabsJson = localStorage.getItem('openedTabs'); - const savedSqlFilesJson = localStorage.getItem('savedSqlFiles'); let openedTabs = openedTabsJson ? JSON.parse(openedTabsJson) : []; const closeLimit = moment().add(-7, 'day').valueOf(); @@ -10,11 +10,9 @@ export default function localStorageGarbageCollector() { openedTabs = openedTabs.filter((x) => !x.closedTime || x.closedTime > closeLimit); localStorage.setItem('openedTabs', JSON.stringify(openedTabs)); - const savedSqlFiles = savedSqlFilesJson ? JSON.parse(savedSqlFilesJson) : []; const toRemove = []; for (const key in localStorage) { if (!key.startsWith('tabdata_')) continue; - if (savedSqlFiles.find((x) => x.storageKey == key)) continue; if (openedTabs.find((x) => key.endsWith('_' + x.tabid))) continue; toRemove.push(key); } @@ -22,4 +20,16 @@ export default function localStorageGarbageCollector() { for (const key of toRemove) { localStorage.removeItem(key); } + + const keysForage = await localforage.keys(); + const toRemoveForage = []; + for (const key in keysForage) { + if (!key.startsWith('tabdata_')) continue; + if (openedTabs.find((x) => key.endsWith('_' + x.tabid))) continue; + toRemoveForage.push(key); + } + + for (const key of toRemoveForage) { + await localforage.removeItem(key); + } } diff --git a/yarn.lock b/yarn.lock index 7fffe40e6..53fd2c5c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7264,6 +7264,13 @@ localforage@^1.3.0: dependencies: lie "3.1.1" +localforage@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1" + integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g== + dependencies: + lie "3.1.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"