From eb852b8045e0e97bb980e15c07929e20d882da51 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sat, 26 Oct 2024 09:50:07 +1300 Subject: [PATCH] Add IDB Proxy --- .../homebrew/utils/customIDBStoreWrapper.js | 35 +++++++++++++++++++ client/homebrew/utils/versionHistory.js | 4 +-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/client/homebrew/utils/customIDBStoreWrapper.js b/client/homebrew/utils/customIDBStoreWrapper.js index c82ff858a..aa18beda1 100644 --- a/client/homebrew/utils/customIDBStoreWrapper.js +++ b/client/homebrew/utils/customIDBStoreWrapper.js @@ -1,5 +1,40 @@ import * as IDB from 'idb-keyval/dist/index.js'; +// The Proxy and the Wrapper _should_ be equivalent + +// IndexedDB Proxy + +export function initIDBProxy(db, store) { + + const PROP_LIST = [ + 'entries', + 'keys', + 'values', + 'clear', + 'get', + 'getMany', + 'set', + 'setMany', + 'update', + 'del', + 'delMany' + ]; + + const IDBHandler = { + get : (target, prop)=>{ + if(!PROP_LIST.includes(prop)){ return target[prop]; } + return function (...args) { + return target[prop].apply(target, [...args, target.createStore(db, store)]); + }; + } + }; + + return new Proxy(IDB, IDBHandler); +} + + +// IndexedDB Wrapper + export function initCustomStore(db, store){ const createCustomStore = async ()=>{ return await IDB.createStore(db, store); diff --git a/client/homebrew/utils/versionHistory.js b/client/homebrew/utils/versionHistory.js index 2468a48dc..4da4b29f1 100644 --- a/client/homebrew/utils/versionHistory.js +++ b/client/homebrew/utils/versionHistory.js @@ -1,4 +1,4 @@ -import { initCustomStore } from './customIDBStoreWrapper'; +import { initIDBProxy } from './customIDBStoreWrapper'; export const HISTORY_PREFIX = 'HOMEBREWERY-HISTORY'; export const HISTORY_SLOTS = 5; @@ -28,7 +28,7 @@ const GARBAGE_COLLECT_DELAY = 28 * 24 * 60; const HB_DB = 'HOMEBREWERY-DB'; const HB_STORE = 'HISTORY'; -const IDB = initCustomStore(HB_DB, HB_STORE); +const IDB = initIDBProxy(HB_DB, HB_STORE); function getKeyBySlot(brew, slot){ // Return a string representing the key for this brew and history slot