From efa30f6d842831cf52fbfa088ef46fef1740c598 Mon Sep 17 00:00:00 2001 From: Avad3 <65318266+Avad3@users.noreply.github.com> Date: Thu, 11 Jul 2024 23:32:48 -0400 Subject: [PATCH] re-implement idbmap for storage proxy --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- src/client/storage.ts | 26 +++++++++++--------------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index ef6f7a8..b15e62f 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "type": "module", "dependencies": { "@mercuryworkshop/bare-mux": "^2.0.1", - "@webreflection/idb-map": "^0.1.3", + "@webreflection/idb-map": "^0.3.1", "astravel": "^0.6.1", "astring": "^1.8.6", "meriyah": "^4.4.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45b2cd0..d83d785 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^2.0.1 version: 2.0.1 '@webreflection/idb-map': - specifier: ^0.1.3 - version: 0.1.3 + specifier: ^0.3.1 + version: 0.3.1 astravel: specifier: ^0.6.1 version: 0.6.1 @@ -477,8 +477,8 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@webreflection/idb-map@0.1.3': - resolution: {integrity: sha512-7lTEpXDgpy9xueW4NSNkBHgqedz/dlGgtwTZa4fRMKWJKcnC9cORVlXwV7qNyYYKarT8gpB1+wv5UNBYhjgc8w==} + '@webreflection/idb-map@0.3.1': + resolution: {integrity: sha512-lRCanqwR7tHHFohJHAMSMEZnoNPvgjcKr0f5e4y+lTJA+fctT61EZ+f5pT5/+8+wlSsMAvXjzfKRLT6o9aqxbA==} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -1764,7 +1764,7 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@webreflection/idb-map@0.1.3': {} + '@webreflection/idb-map@0.3.1': {} abort-controller@3.0.0: dependencies: diff --git a/src/client/storage.ts b/src/client/storage.ts index 5953cea..9d6511f 100644 --- a/src/client/storage.ts +++ b/src/client/storage.ts @@ -1,44 +1,40 @@ -// import IDBMap from "@webreflection/idb-map"; - -// this will be converted to use IDB later but i can't figure out how to make it work synchronously - -function filterStorage(scope: Storage) { - return Object.keys(scope).filter((key) => key.startsWith(window.__location.host)); -} +import IDBMapSync from "@webreflection/idb-map/sync"; function storageProxy(scope: Storage): Storage { - // const store = new IDBMap(window.__location.host); + const store = new IDBMapSync(window.__location.host); return new Proxy(scope, { - get(target, prop) { + async get(target, prop) { + await store.sync(); + switch (prop) { case "getItem": return (key: string) => { - return target.getItem(window.__location.host + "@" + key); + return store.get(key); } case "setItem": return (key: string, value: string) => { - target.setItem(window.__location.host + "@" + key, value); + store.set(key, value); } case "removeItem": return (key: string) => { - target.removeItem(window.__location.host + "@" + key); + store.delete(key); } case "clear": return () => { - filterStorage(target).forEach((key) => target.removeItem(key)); + store.clear(); } case "key": return (index: number) => { - return target[filterStorage(target)[index]]; + store.keys()[index]; } case "length": - return filterStorage(target).length; + return store.size; } },