UNPKG

@edonec/indexed-db-class

Version:

An easy to use IndexedDb class, (post,put,delete and get) data easily from your indexedDb storage

166 lines (165 loc) 7.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDb = void 0; class IndexedDb { constructor(dbName, tablesList, dbVersion = 1) { this.createTable = (tableName, keyPath) => { const promise = new Promise((resolve, reject) => { const localStorageDbVersion = window.localStorage.getItem('dbVersion'); const dbv = parseInt(localStorageDbVersion, 10); if (dbv) { this.dbVersion = dbv; } this.dbVersion += 1; localStorage.setItem('dbVersion', this.dbVersion.toString()); const request = window.indexedDB.open(this.dbName, this.dbVersion); request.onupgradeneeded = () => { const db = request.result; try { if (request.transaction) { request.transaction.objectStore(tableName); } } catch (e) { db.createObjectStore(tableName, { keyPath }); } db.close(); }; request.onsuccess = () => { this.tableList = [...this.tableList, { tableName, key: keyPath }]; resolve(); }; request.onerror = (error) => { reject(error); }; }); return promise; }; this.postData = (tableName, objectToAdd, mode = 'readwrite') => { const promise = new Promise((resolve, reject) => { const request = window.indexedDB.open(this.dbName, this.dbVersion); request.onsuccess = () => { const db = request.result; const transaction = db.transaction(tableName, mode); const store = transaction.objectStore(tableName); const addDateObject = store.add(objectToAdd); addDateObject.onerror = function () { reject(this.error); }; addDateObject.onsuccess = function () { if (!this.result) { reject('Not found'); } resolve(); }; db.close(); }; }); return promise; }; this.deleteData = (tableName, id) => { const request = window.indexedDB.open(this.dbName, this.dbVersion); request.onsuccess = () => { const db = request.result; const transaction = db.transaction(tableName, 'readwrite'); const store = transaction.objectStore(tableName); store.delete(id); }; }; this.getData = (storeName, id) => { const promise = new Promise((resolve, reject) => { const request = window.indexedDB.open(this.dbName, this.dbVersion); request.onsuccess = () => { const db = request.result; const transaction = db.transaction(storeName); const store = transaction.objectStore(storeName); const foundedData = store.get(id); foundedData.onerror = function () { reject(this.error); }; foundedData.onsuccess = function () { if (!this.result) { reject('Not found'); } resolve(this.result); }; db.close(); }; }); return promise; }; this.updateData = (tableName, newData, mode = 'readwrite') => { const promise = new Promise(async (resolve, reject) => { const foundStore = this.tableList.find((e) => e.tableName === tableName); if (!foundStore) { reject('table not found'); return; } if (!newData[foundStore === null || foundStore === void 0 ? void 0 : foundStore.key]) { reject('key not found'); return; } try { await this.getData(tableName, newData[foundStore === null || foundStore === void 0 ? void 0 : foundStore.key]); const request = window.indexedDB.open(this.dbName, this.dbVersion); request.onsuccess = () => { const db = request.result; const transaction = db.transaction(tableName, mode); const store = transaction.objectStore(tableName); const editDataObject = store.put(newData); editDataObject.onerror = function () { reject(this.error); }; editDataObject.onsuccess = function () { if (!this.result) { reject('Not found'); } resolve(); }; db.close(); }; } catch (error) { reject(error); } }); return promise; }; this.createOrUpdate = (tableName, objectToUpdate, mode = 'readwrite') => { const promise = new Promise((resolve, reject) => { const request = window.indexedDB.open(this.dbName, this.dbVersion); request.onsuccess = () => { const db = request.result; const transaction = db.transaction(tableName, mode); const store = transaction.objectStore(tableName); const addDateObject = store.put(objectToUpdate); addDateObject.onerror = function () { reject(this.error); }; addDateObject.onsuccess = function () { if (!this.result) { reject('Not found'); } resolve(); }; db.close(); }; }); return promise; }; this.dbName = dbName; this.dbVersion = dbVersion; this.tableList = tablesList; if (window.indexedDB) { const request = window.indexedDB.open(dbName, dbVersion); request.onupgradeneeded = () => { const db = request.result; tablesList.forEach((table) => { db.createObjectStore(table.tableName, { keyPath: table.key }); }); db.close(); }; } } } exports.IndexedDb = IndexedDb;