This commit is contained in:
velzie 2024-07-19 13:53:01 -04:00
commit f70e2a6ff4
No known key found for this signature in database
GPG key ID: 048413F95F0DDE1F

View file

@ -8,64 +8,112 @@ const store = new IDBMapSync(locationProxy.host, {
await store.sync(); await store.sync();
function storageProxy(scope: Storage): Storage { const localStorageProxy = new Proxy(window.localStorage, {
return new Proxy(scope, { get(target, prop) {
get(target, prop) { switch (prop) {
switch (prop) { case "getItem":
case "getItem": return (key: string) => {
return (key: string) => { return store.get(key);
return store.get(key); };
};
case "setItem": case "setItem":
return (key: string, value: string) => { return (key: string, value: string) => {
store.set(key, value); store.set(key, value);
store.sync(); store.sync();
}; };
case "removeItem": case "removeItem":
return (key: string) => { return (key: string) => {
store.delete(key); store.delete(key);
store.sync(); store.sync();
}; };
case "clear": case "clear":
return () => { return () => {
store.clear(); store.clear();
store.sync(); store.sync();
}; };
case "key": case "key":
return (index: number) => { return (index: number) => {
return [...store.keys()][index]; return [...store.keys()][index];
}; };
case "length": case "length":
return store.size; return store.size;
default: default:
if (prop in Object.prototype) { if (prop in Object.prototype) {
return Reflect.get(target, prop); return Reflect.get(target, prop);
}
return store.get(prop);
}
},
//@ts-ignore
set(target, prop, value) {
store.set(prop, value);
store.sync();
},
defineProperty(target, property, attributes) {
store.set(property as string, attributes.value);
return true;
},
});
const sessionStorageProxy = new Proxy(window.sessionStorage, {
get(target, prop) {
switch (prop) {
case "getItem":
return (key: string) => {
return target.getItem(locationProxy.host + "@" + key);
}
case "setItem":
return (key: string, value: string) => {
target.setItem(locationProxy.host + "@" + key, value);
}
case "removeItem":
return (key: string) => {
target.removeItem(locationProxy.host + "@" + key);
}
case "clear":
return () => {
for (const key in Object.keys(target)) {
if (key.startsWith(locationProxy.host)) {
target.removeItem(key);
}
} }
}
return store.get(prop); case "key":
} return (index: number) => {
}, const keys = Object.keys(target).filter((key) => key.startsWith(locationProxy.host));
//@ts-ignore return target.getItem(keys[index]);
set(target, prop, value) { }
store.set(prop, value);
store.sync();
},
defineProperty(target, property, attributes) { case "length":
store.set(property as string, attributes.value); return target.length;
return true; default:
}, if (prop in Object.prototype) {
}); return Reflect.get(target, prop);
} }
const localStorageProxy = storageProxy(window.localStorage); return target.getItem(locationProxy.host + "@" + (prop as string));
const sessionStorageProxy = storageProxy(window.sessionStorage); }
},
defineProperty(target, property, attributes) {
target.setItem(locationProxy.host + "@" + (property as string), attributes.value);
return true;
},
});
delete window.localStorage; delete window.localStorage;
delete window.sessionStorage; delete window.sessionStorage;