sw-delta
Version:
A browser cache that only downloads the diff of modified files
92 lines (71 loc) • 2.89 kB
JavaScript
var IndexedDB = function(settings) {
'use strict';
var instance;
var objectStoreName = 'cache';
this.get = function(url) {
return getDBInstance()
.then(function(db) {
return new Promise(function(resolve, reject) {
var transaction = db.transaction([objectStoreName], 'readonly');
var objectStore = transaction.objectStore(objectStoreName);
var request = objectStore.get(url);
request.onsuccess = function(event) {
resolve(event.target.result);
};
request.onerror = function(event) {
reject('Error while retrieving an entry from database: ' + event.target.errorCode);
};
});
})
.catch(function(err) {
console.log(err);
return null;
});
};
this.set = function(obj) {
return getDBInstance()
.then(function(db) {
return new Promise(function(resolve, reject) {
var transaction = db.transaction([objectStoreName], 'readwrite');
var objectStore = transaction.objectStore(objectStoreName);
var request = objectStore.put(obj);
request.onsuccess = function() {
console.log('Entry correctly added or modified in database');
resolve();
};
request.onerror = function(event) {
reject('Error while adding or modifying an entry into database: ' + event.target.errorCode);
};
});
})
.catch(function(err) {
console.log(err);
});
};
function getDBInstance() {
if (instance) {
return Promise.resolve(instance);
}
return openDB();
}
function openDB() {
return new Promise(function(resolve, reject) {
var request = indexedDB.open(settings.indexedDB.name, settings.indexedDB.version);
request.onupgradeneeded = function(event) {
console.log('The database needs to be created...');
var db = event.target.result;
if (!db.objectStoreNames.contains(objectStoreName)) {
db.createObjectStore(objectStoreName, {keyPath: 'url'});
}
};
request.onerror = function(event) {
reject('Error while opening database: ' + event.target.errorCode);
};
request.onsuccess = function(event) {
instance = event.target.result;
resolve(instance);
};
});
}
};
module.exports = IndexedDB;