From f0b3c4a30a6dbc637911dddffbc3c95db7a15feb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 14:36:43 +0530 Subject: [PATCH] idb-keyval --- web/apps/photos/package.json | 1 - web/docs/dependencies.md | 4 +++- web/docs/storage.md | 9 +++++++++ web/packages/new/package.json | 2 ++ web/yarn.lock | 5 +++++ 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/package.json b/web/apps/photos/package.json index 77a63ec007..2945bee60f 100644 --- a/web/apps/photos/package.json +++ b/web/apps/photos/package.json @@ -22,7 +22,6 @@ "fast-srp-hap": "^2.0.4", "ffmpeg-wasm": "file:./thirdparty/ffmpeg-wasm", "hdbscan": "0.0.1-alpha.5", - "idb": "^8", "leaflet": "^1.9.4", "leaflet-defaulticon-compatibility": "^0.1.1", "localforage": "^1.9.0", diff --git a/web/docs/dependencies.md b/web/docs/dependencies.md index 56b6712e00..c4d4e9479e 100644 --- a/web/docs/dependencies.md +++ b/web/docs/dependencies.md @@ -172,7 +172,9 @@ For more details, see [translations.md](translations.md). layer on top of Web Workers to make them more easier to use. - [idb](https://github.com/jakearchibald/idb) provides a promise API over the - browser-native IndexedDB APIs. + browser-native IndexedDB APIs, and is used as our primary tabular database. + [idb-keyval](https://github.com/jakearchibald/idb-keyval) is its sibling + library that we use for ad-hoc key value storage. > For more details about IDB and its role, see [storage.md](storage.md). diff --git a/web/docs/storage.md b/web/docs/storage.md index 0247415d98..8f1ca8bba8 100644 --- a/web/docs/storage.md +++ b/web/docs/storage.md @@ -28,6 +28,8 @@ IndexedDB is a transactional NoSQL store provided by browsers. It has quite large storage limits, and data is stored per origin (and remains persistent across tab restarts). +Unlike local storage, IndexedDB is also accessible from Web Workers. + Older code used the LocalForage library for storing things in Indexed DB. This library falls back to localStorage in case Indexed DB storage is not available. @@ -39,6 +41,13 @@ For more details, see: - https://web.dev/articles/indexeddb - https://github.com/jakearchibald/idb +## IndexedDB KV + +We earlier used local storage for ad-hoc key value storage, but local storage is +not accessible from web workers which we use quite a bit. So now we use _idb_'s +sibling libary, idb-keyval, for storing key value pairs that need to be accessed +from both the main thread and web workers. + ## OPFS OPFS is used for caching entire files when we're running under Electron (the Web diff --git a/web/packages/new/package.json b/web/packages/new/package.json index 8ce5399055..e1107100ff 100644 --- a/web/packages/new/package.json +++ b/web/packages/new/package.json @@ -7,6 +7,8 @@ "@/utils": "*", "@ente/shared": "*", "formik": "^2.4", + "idb": "^8", + "idb-keyval": "^6", "zod": "^3" }, "devDependencies": {} diff --git a/web/yarn.lock b/web/yarn.lock index be1c37c63d..1a89c87063 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2922,6 +2922,11 @@ i18next@^23.10: dependencies: "@babel/runtime" "^7.23.2" +idb-keyval@^6: + version "6.2.1" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" + integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== + idb@^8: version "8.0.0" resolved "https://registry.yarnpkg.com/idb/-/idb-8.0.0.tgz#33d7ed894ed36e23bcb542fb701ad579bfaad41f"