angular2-indexeddb
Version:
angular2-indexeddb is a library that wraps indexeddb database in an Angular 2 service
239 lines • 9.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var AngularIndexedDB = /** @class */ (function () {
function AngularIndexedDB(dbName, version) {
this.utils = new Utils();
this.dbWrapper = new DbWrapper(dbName, version);
}
AngularIndexedDB.prototype.openDatabase = function (version, upgradeCallback) {
var _this = this;
var self = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.dbVersion = version;
var request = _this.utils.indexedDB.open(_this.dbWrapper.dbName, version);
request.onsuccess = function (e) {
self.dbWrapper.db = request.result;
resolve();
};
request.onerror = function (e) {
reject('IndexedDB error: ' + e.target.errorCode ?
e.target.errorCode + ' (' + e.target.error + ')' :
e.target.errorCode);
};
if (typeof upgradeCallback === "function") {
request.onupgradeneeded = function (e) {
upgradeCallback(e, self.dbWrapper.db);
};
}
});
};
AngularIndexedDB.prototype.getByKey = function (storeName, key) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readonly",
error: function (e) {
reject(e);
},
complete: function (e) {
}
}), objectStore = transaction.objectStore(storeName), request;
request = objectStore.get(key);
request.onsuccess = function (event) {
resolve(event.target.result);
};
});
};
AngularIndexedDB.prototype.getAll = function (storeName, keyRange, indexDetails) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readonly",
error: function (e) {
reject(e);
},
complete: function (e) {
}
}), objectStore = transaction.objectStore(storeName), result = [], request;
if (indexDetails) {
var index = objectStore.index(indexDetails.indexName), order = (indexDetails.order === 'desc') ? 'prev' : 'next';
request = index.openCursor(keyRange, order);
}
else {
request = objectStore.openCursor(keyRange);
}
request.onerror = function (e) {
reject(e);
};
request.onsuccess = function (evt) {
var cursor = evt.target.result;
if (cursor) {
result.push(cursor["value"]);
cursor["continue"]();
}
else {
resolve(result);
}
};
});
};
AngularIndexedDB.prototype.add = function (storeName, value, key) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readwrite",
error: function (e) {
reject(e);
},
complete: function (e) {
resolve({ key: key, value: value });
}
}), objectStore = transaction.objectStore(storeName);
var request = objectStore.add(value, key);
request.onsuccess = function (evt) {
key = evt.target.result;
};
});
};
AngularIndexedDB.prototype.update = function (storeName, value, key) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readwrite",
error: function (e) {
reject(e);
},
complete: function (e) {
resolve(value);
},
abort: function (e) {
reject(e);
}
}), objectStore = transaction.objectStore(storeName);
objectStore.put(value, key);
});
};
AngularIndexedDB.prototype.delete = function (storeName, key) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readwrite",
error: function (e) {
reject(e);
},
complete: function (e) {
resolve();
},
abort: function (e) {
reject(e);
}
}), objectStore = transaction.objectStore(storeName);
objectStore["delete"](key);
});
};
AngularIndexedDB.prototype.openCursor = function (storeName, cursorCallback, keyRange) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readonly",
error: function (e) {
reject(e);
},
complete: function (e) {
resolve();
},
abort: function (e) {
reject(e);
}
}), objectStore = transaction.objectStore(storeName), request = objectStore.openCursor(keyRange);
request.onsuccess = function (evt) {
cursorCallback(evt);
resolve();
};
});
};
AngularIndexedDB.prototype.clear = function (storeName) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readwrite",
error: function (e) {
reject(e);
},
complete: function (e) {
resolve();
},
abort: function (e) {
reject(e);
}
}), objectStore = transaction.objectStore(storeName);
objectStore.clear();
resolve();
});
};
AngularIndexedDB.prototype.getByIndex = function (storeName, indexName, key) {
var self = this;
return new Promise(function (resolve, reject) {
self.dbWrapper.validateBeforeTransaction(storeName, reject);
var transaction = self.dbWrapper.createTransaction({ storeName: storeName,
dbMode: "readonly",
error: function (e) {
reject(e);
},
abort: function (e) {
reject(e);
},
complete: function (e) {
}
}), objectStore = transaction.objectStore(storeName), index = objectStore.index(indexName), request = index.get(key);
request.onsuccess = function (event) {
resolve(event.target.result);
};
});
};
return AngularIndexedDB;
}());
exports.AngularIndexedDB = AngularIndexedDB;
var Utils = /** @class */ (function () {
function Utils() {
this.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
}
return Utils;
}());
exports.Utils = Utils;
var DbWrapper = /** @class */ (function () {
function DbWrapper(dbName, version) {
this.dbName = dbName;
this.dbVersion = version || 1;
this.db = null;
}
DbWrapper.prototype.validateStoreName = function (storeName) {
return this.db.objectStoreNames.contains(storeName);
};
;
DbWrapper.prototype.validateBeforeTransaction = function (storeName, reject) {
if (!this.db) {
reject('You need to use the openDatabase function to create a database before you query it!');
}
if (!this.validateStoreName(storeName)) {
reject(('objectStore does not exists: ' + storeName));
}
};
DbWrapper.prototype.createTransaction = function (options) {
var trans = this.db.transaction(options.storeName, options.dbMode);
trans.onerror = options.error;
trans.oncomplete = options.complete;
trans.onabort = options.abort;
return trans;
};
return DbWrapper;
}());
exports.DbWrapper = DbWrapper;
//# sourceMappingURL=angular2-indexeddb.js.map