UNPKG

simple2k13

Version:
93 lines 3.44 kB
/** @format */ class IndexedDB { db; dbName; storeName; version; constructor(dbName, storeName, version = 1) { this.db = undefined; this.dbName = dbName; this.storeName = storeName; this.version = version; } open() { return new Promise((resolve, reject) => { const myIndexedDB = // @ts-ignore indexedDB || webkitIndexedDB || mozIndexedDB || msIndexedDB; if (!myIndexedDB) { const error = new Error("IndexedDB is not supported"); console.warn(error); return reject(error); } const res = myIndexedDB.open(this.dbName, this.version); res.onsuccess = (event) => { // @ts-ignore this.db = event.target?.result; // 数据库对象 resolve(event); }; res.onerror = function (event) { reject(event); console.log("数据库打开失败..."); }; res.onupgradeneeded = (event) => { // 数据库创建或升级的时候会触发 const storeName = this.storeName; // @ts-ignore const db = event.target?.result; if (!db.objectStoreNames.contains(storeName)) { db.createObjectStore(storeName); // 创建表 } }; }); } dispatch(func, options = {}, ...args) { const { mode = "readwrite", more = false } = options; return new Promise((resolve, reject) => { try { const objectStore = this.getObjectStore(mode); const storePrototype = objectStore[func]; if (!(func in objectStore)) { return reject(`${func} is undefined, reference resources:https://developer.mozilla.org/zh-CN/docs/Web/API/IDBObjectStore`); } if (typeof storePrototype === "function") { // @ts-ignore const res = objectStore[func](...args); res.onsuccess = (event) => { // @ts-ignore const result = event.target?.result; resolve(more ? { res, event, result, objectStore, bd: this.db, } : result); }; res.onerror = reject; } else { resolve(storePrototype); } } catch (error) { reject({ message: error, arguments: { func, options, args }, }); } }); } getObjectStore(mode = "readwrite") { if (!this.db) { throw new Error("No database connection available , please use IndexedDB=>open to connect"); } const transaction = this.db.transaction([this.storeName], mode); // 事务 const objectStore = transaction.objectStore(this.storeName); // 仓库对象 return objectStore; } } export default IndexedDB; //# sourceMappingURL=index.js.map