77 lines
2.2 KiB
JavaScript
77 lines
2.2 KiB
JavaScript
|
|
var IndexedDB = (function(){ //eslint-disable-line no-unused-vars
|
|
class Transaction {
|
|
constructor (transaction) {
|
|
this.transaction = transaction;
|
|
}
|
|
setOperation (op) {
|
|
return new Promise((resolve, reject)=> {
|
|
var req = this.transaction.objectStore("OperationBuffer").put(op);
|
|
req.onsuccess = function () {
|
|
resolve(op);
|
|
};
|
|
req.onerror = function () {
|
|
reject("Could not set Operation!");
|
|
};
|
|
});
|
|
}
|
|
getOperation (uid) {
|
|
return new Promise((resolve, reject)=>{
|
|
var req = this.transaction.objectStore("OperationBuffer").get(uid);
|
|
req.onsuccess = function () {
|
|
resolve(req.result);
|
|
};
|
|
req.onerror = function () {
|
|
reject("Could not get Operation");
|
|
};
|
|
});
|
|
}
|
|
}
|
|
class DB {
|
|
constructor (namespace : string) {
|
|
this.namespace = namespace;
|
|
this.ready = new Promise(function(yay, nay){
|
|
var req = indexedDB.open(namespace); //eslint-disable-line no-undef
|
|
req.onerror = function(){
|
|
nay("Couldn't open the IndexedDB database!");
|
|
};
|
|
req.onsuccess = function(event){
|
|
yay(event.target.result);
|
|
};
|
|
req.onupgradeneeded = function(event){
|
|
var db = event.target.result;
|
|
db.createObjectStore("OperationBuffer", {keyPath: "uid"});
|
|
db.createObjectStore("StateVector", {keyPath: "user"});
|
|
};
|
|
}).catch(function(message){
|
|
throw new Error(message);
|
|
});
|
|
}
|
|
requestTransaction (generator : Function) {
|
|
this.ready.then(function(){
|
|
var gen = generator(3);//new Transaction(db.transaction(["OperationBuffer", "StateVector"], "readwrite"))
|
|
gen.next();
|
|
});
|
|
}
|
|
}
|
|
return {
|
|
"DB": DB,
|
|
"Transaction": Transaction
|
|
};
|
|
})();
|
|
|
|
function requestTransaction(makeGen : Function){ //eslint-disable-line no-unused-vars
|
|
var gen = makeGen([1, 2, 3]);
|
|
function handle(result : Object){
|
|
if (result.done) {
|
|
return result.value;
|
|
}
|
|
return result.value.then(function(res){
|
|
return handle(gen.next(res));
|
|
}, function(err){
|
|
return handle(gen.throw(err));
|
|
});
|
|
}
|
|
return handle(gen.next());
|
|
}
|