UNPKG

wasmboy

Version:

Gameboy / Gameboy Color Emulator written for Web Assembly using AssemblyScript. Shell/Debugger in Preact

81 lines (73 loc) 2.15 kB
// Get our idb instance, and initialize to asn idb-keyval // This is so we don't get the default keyval DB name. And will allow // Parent projects to use the slimmer idb keyval // https://www.npmjs.com/package/idb // Need to wrap in rollup replace to stop // node commonjs from breaking /*ROLLUP_REPLACE_BROWSER import idb from 'idb'; ROLLUP_REPLACE_BROWSER*/ let keyval = false; // Get our idb dPromise if (typeof window !== 'undefined') { const dbPromise = idb.open('wasmboy', 1, upgradeDB => { upgradeDB.createObjectStore('keyval'); }); // Get our idb-keyval instance keyval = { get(key) { return dbPromise.then(db => { return db .transaction('keyval') .objectStore('keyval') .get(key); }); }, set(key, val) { return dbPromise.then(db => { const tx = db.transaction('keyval', 'readwrite'); tx.objectStore('keyval').put(val, key); return tx.complete; }); }, delete(key) { return dbPromise.then(db => { const tx = db.transaction('keyval', 'readwrite'); tx.objectStore('keyval').delete(key); return tx.complete; }); }, clear() { return dbPromise.then(db => { const tx = db.transaction('keyval', 'readwrite'); tx.objectStore('keyval').clear(); return tx.complete; }); }, keys() { return dbPromise.then(db => { const tx = db.transaction('keyval'); const keys = []; const store = tx.objectStore('keyval'); // This would be store.getAllKeys(), but it isn't supported by Edge or Safari. // openKeyCursor isn't supported by Safari, so we fall back (store.iterateKeyCursor || store.iterateCursor).call(store, cursor => { if (!cursor) return; keys.push(cursor.key); cursor.continue(); }); return tx.complete.then(() => keys); }); } }; } else { // Create a mock keyval for node keyval = { get: () => {}, set: () => {}, delete: () => {}, clear: () => {}, keys: () => {} }; } export const idbKeyval = keyval;