@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
JavaScript
;
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;