Spaces:
Running
Running
File size: 1,283 Bytes
b30b7c5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // IndexedDB mínima: stores clave→valor.
const NAME = 'elffuss-code', VERSION = 2;
const STORES = ['kv', 'apps', 'tasks', 'vault', 'fs', 'memory'];
let dbPromise = null;
function open() {
if (dbPromise) return dbPromise;
dbPromise = new Promise((resolve, reject) => {
const req = indexedDB.open(NAME, VERSION);
req.onupgradeneeded = () => {
for (const s of STORES)
if (!req.result.objectStoreNames.contains(s)) req.result.createObjectStore(s);
};
req.onsuccess = () => resolve(req.result);
req.onerror = () => reject(req.error);
});
return dbPromise;
}
function tx(store, mode, fn) {
return open().then(db => new Promise((resolve, reject) => {
const req = fn(db.transaction(store, mode).objectStore(store));
req.onsuccess = () => resolve(req.result);
req.onerror = () => reject(req.error);
}));
}
export const get = (store, key) => tx(store, 'readonly', s => s.get(key));
export const set = (store, key, val) => tx(store, 'readwrite', s => s.put(val, key));
export const del = (store, key) => tx(store, 'readwrite', s => s.delete(key));
export const keys = (store) => tx(store, 'readonly', s => s.getAllKeys());
export const all = (store) => tx(store, 'readonly', s => s.getAll());
|