diff --git a/.eslintrc b/.eslintrc
index 26b41068d5f717e22a3bc55c5ba8a1724dd8225d..e84964e0ca2f4eaf026d40562ffa8896fd589304 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -13,6 +13,7 @@
         "AbstractTransaction": true,
         "Transaction": true,
         "IndexedDB": true,
-        "IDBRequest": true
+        "IDBRequest": true,
+        "GeneratorFunction": true
     }
 }
diff --git a/gulpfile.js b/gulpfile.js
index 44cc463f09cdeb0ece2c4b89656c3cd95b3a1985..0e3e35cf826e63c5f4f32bbeb2d686d23def665c 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -119,10 +119,10 @@ gulp.task("build_jasmine_browser", function(){
 });
 
 
-gulp.task("develop", ["build_jasmine_browser", "build"], function(){
+gulp.task("develop", ["build_jasmine_browser", "test", "build"], function(){
 
   gulp.watch(files.test, ["build_jasmine_browser"]);
-  // gulp.watch(files.test, ["test"]);
+  gulp.watch(files.test, ["test"]);
   gulp.watch(files.test, ["build"]);
 
   return gulp.src("build/jasmine_browser.js")
diff --git a/src/OperationStore.js b/src/OperationStore.js
index 956734f9467485a0084d68cd2a8464598a896d04..7d77f1a3c0d9d5bac2ec176b32382f7758159eeb 100644
--- a/src/OperationStore.js
+++ b/src/OperationStore.js
@@ -22,8 +22,6 @@ type Listener = {
   missing : number // number of operations that are missing
 }
 
-type GeneratorFunction = Function;
-
 type Id = [string, number];
 
 class AbstractOperationStore { //eslint-disable-line no-unused-vars
@@ -105,7 +103,6 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars
         }
       }
     });
-
   }
   // called by a transaction when an operation is added
   operationAdded (op) {
diff --git a/src/OperationStores/IndexedDB.js b/src/OperationStores/IndexedDB.js
index 7b3a357bb70287584ff2990dd5775b10af321412..706dcced7d8f40bf82565b8fe09390758a543829 100644
--- a/src/OperationStores/IndexedDB.js
+++ b/src/OperationStores/IndexedDB.js
@@ -18,8 +18,6 @@ type IDBOpenDBRequest = Function;
 
 declare var indexedDB : Object;
 
-declare var setTimeout : Function;
-
 var IndexedDB = (function(){ //eslint-disable-line no-unused-vars
   class Transaction extends AbstractTransaction { //eslint-disable-line
     transaction: IDBTransaction;
@@ -36,7 +34,7 @@ var IndexedDB = (function(){ //eslint-disable-line no-unused-vars
     }
     *setOperation (op) {
       yield this.os.put(op);
-      this.buffer[JSON.stringify(op.uid)] = op;
+      this.buffer[JSON.stringify(op.id)] = op;
       return op;
     }
     *getOperation (id) {
@@ -112,59 +110,77 @@ var IndexedDB = (function(){ //eslint-disable-line no-unused-vars
     whenReadyListeners: Array<Function>;
     constructor (namespace : string) {
       super();
-      this.whenReadyListeners = [];
       this.namespace = namespace;
-      this.ready = false;
-
-      var req = indexedDB.open(namespace, 2); //eslint-disable-line no-undef
-      req.onerror = function(){
-        throw new Error("Couldn't open the IndexedDB database!");
-      };
-      req.onsuccess = (event)=>{
-        this.db = event.target.result;
-        this.whenReadyListeners.forEach(function(f){
-          setTimeout(f, 0);
-        });
-        this.whenReadyListeners = null;
-        this.ready = true;
+      this.transactionQueue = {
+        queue: [],
+        onRequest: null
       };
-      req.onupgradeneeded = function(event){
-        var db = event.target.result;
-        db.createObjectStore("OperationStore", {keyPath: "id"});
-        db.createObjectStore("StateVector", {keyPath: "user"});
-      };
-    }
-    whenReady (f : Function) {
-      if (this.ready){
-        setTimeout(f, 0);
-      } else {
-        this.whenReadyListeners.push(f);
-      }
-    }
-    requestTransaction (makeGen : Function) {
-      this.whenReady(()=>{
-        var transaction = new Transaction(this);
-        var gen = makeGen.apply(transaction);
-
-        function handle(res : any){
-          var request : any = res.value;
-          if (res.done){
-            return;
-          } else if (request.constructor === IDBRequest
-                     || request.constructor === IDBCursor
-                     || request.constructor === IDBOpenDBRequest) {
-            request.onsuccess = function(){
-              handle(gen.next(request.result));
-            };
-            request.onerror = function(err){
-              gen.throw(err);
-            };
+
+      var store = this;
+
+      var tGen = (function *transactionGen(){
+        store.db = yield indexedDB.open(namespace, 3);
+        var transactionQueue = store.transactionQueue;
+
+        var transaction = null;
+        var cont = true;
+        while (cont) {
+          var request = yield transactionQueue;
+          transaction = new Transaction(store);
+
+          yield* request.call(transaction);/*
+          while (transactionQueue.queue.length > 0) {
+            yield* transactionQueue.queue.shift().call(transaction);
+          }*/
+        }
+      })();
+
+      function handleTransactions(t){ //eslint-disable-line no-unused-vars
+        var request = t.value;
+        if (t.done){
+          return;
+        } else if (request.constructor === IDBRequest
+                   || request.constructor === IDBCursor ) {
+          request.onsuccess = function(){
+            handleTransactions(tGen.next(request.result));
+          };
+          request.onerror = function(err){
+            tGen.throw(err);
+          };
+        } else if (request === store.transactionQueue) {
+          if (request.queue.length > 0){
+            handleTransactions(tGen.next(request.queue.shift()));
           } else {
-            gen.throw("You can not yield this type!");
+            request.onRequest = function(){
+              request.onRequest = null;
+              handleTransactions(tGen.next(request.queue.shift()));
+            };
           }
+        } else if ( request.constructor === IDBOpenDBRequest ) {
+          request.onsuccess = function(event){
+            var db = event.target.result;
+            handleTransactions(tGen.next(db));
+          };
+          request.onerror = function(){
+            tGen.throw("Couldn't open IndexedDB database!");
+          };
+          request.onupgradeneeded = function(event){
+            var db = event.target.result;
+            db.createObjectStore("OperationStore", {keyPath: "id"});
+            db.createObjectStore("StateVector", {keyPath: "user"});
+          };
+        } else {
+          tGen.throw("You can not yield this type!");
         }
-        handle(gen.next());
-      });
+      }
+      handleTransactions(tGen.next());
+
+    }
+    requestTransaction (makeGen : Function) {
+      this.transactionQueue.queue.push(makeGen);
+      if (this.transactionQueue.onRequest != null) {
+        this.transactionQueue.onRequest();
+      }
     }
     *removeDatabase () {
       this.db.close();
diff --git a/src/OperationStores/IndexedDB.spec.js b/src/OperationStores/IndexedDB.spec.js
index 0f0513383875496dfc0a253349909f680b1d5ed3..b3f875f9febee94767f980a49669823a7f87a1d8 100644
--- a/src/OperationStores/IndexedDB.spec.js
+++ b/src/OperationStores/IndexedDB.spec.js
@@ -2,6 +2,7 @@
 /*eslint-env browser,jasmine */
 
 if(typeof window !== "undefined"){
+  jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
   describe("IndexedDB", function() {
     var ob = new IndexedDB("Test");
 
@@ -43,7 +44,7 @@ if(typeof window !== "undefined"){
     it("yield throws if request is unknown", function(done){
       ob.requestTransaction(function*(){
         try {
-          yield this.getOperations(["u1", 0]);
+          yield* this.setOperation();
         } catch (e) {
           expect(true).toEqual(true);
           done();
diff --git a/y.js b/y.js
index 182b5dbb397ae5ae018e0aed46991e7a890fcc08..a471e1adea6854e7b92dadf7e02d2fc8a2e223d5 100644
--- a/y.js
+++ b/y.js
@@ -1,2 +1,2 @@
-"use strict";function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}!function(e){function t(e,t,r,a){var i=Object.create((t||n).prototype);return i._invoke=c(e,r||null,new p(a||[])),i}function r(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(n){return{type:"throw",arg:n}}}function n(){}function a(){}function i(){}function o(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function s(e){this.arg=e}function u(e){function t(t,r){var n=e[t](r),o=n.value;return o instanceof s?Promise.resolve(o.arg).then(a,i):Promise.resolve(o).then(function(e){return n.value=e,n},i)}function r(e,r){var a=n?n.then(function(){return t(e,r)}):new Promise(function(n){n(t(e,r))});return n=a["catch"](o),a}"object"==typeof process&&process.domain&&(t=process.domain.bind(t));var n,a=t.bind(e,"next"),i=t.bind(e,"throw"),o=t.bind(e,"return");this._invoke=r}function c(e,t,n){var a=m;return function(i,o){if(a===k)throw new Error("Generator is already running");if(a===R)return d();for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===y){n.delegate=null;var u=s.iterator["return"];if(u){var c=r(u,s.iterator,o);if("throw"===c.type){i="throw",o=c.arg;continue}}if("return"===i)continue}var c=r(s.iterator[i],s.iterator,o);if("throw"===c.type){n.delegate=null,i="throw",o=c.arg;continue}i="next",o=y;var l=c.arg;if(!l.done)return a=w,l;n[s.resultName]=l.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)a===w?n.sent=o:delete n.sent;else if("throw"===i){if(a===m)throw a=R,o;n.dispatchException(o)&&(i="next",o=y)}else"return"===i&&n.abrupt("return",o);a=k;var c=r(e,t,n);if("normal"===c.type){a=n.done?R:w;var l={value:c.arg,done:n.done};if(c.arg!==S)return l;n.delegate&&"next"===i&&(o=y)}else"throw"===c.type&&(a=R,i="throw",o=c.arg)}}}function l(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function f(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function p(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(l,this),this.reset()}function h(e){if(e){var t=e[b];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function a(){for(;++r<e.length;)if(g.call(e,r))return a.value=e[r],a.done=!1,a;return a.value=y,a.done=!0,a};return n.next=n}}return{next:d}}function d(){return{value:y,done:!0}}var y,g=Object.prototype.hasOwnProperty,b="function"==typeof Symbol&&Symbol.iterator||"@@iterator",v="object"==typeof module,x=e.regeneratorRuntime;if(x)return void(v&&(module.exports=x));x=e.regeneratorRuntime=v?module.exports:{},x.wrap=t;var m="suspendedStart",w="suspendedYield",k="executing",R="completed",S={},O=i.prototype=n.prototype;a.prototype=O.constructor=i,i.constructor=a,a.displayName="GeneratorFunction",x.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return t?t===a||"GeneratorFunction"===(t.displayName||t.name):!1},x.mark=function(e){return e.__proto__=i,e.prototype=Object.create(O),e},x.awrap=function(e){return new s(e)},o(u.prototype),x.async=function(e,r,n,a){var i=new u(t(e,r,n,a));return x.isGeneratorFunction(r)?i:i.next().then(function(e){return e.done?e.value:i.next()})},o(O),O[b]=function(){return this},O.toString=function(){return"[object Generator]"},x.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},x.values=h,p.prototype={constructor:p,reset:function(){this.prev=0,this.next=0,this.sent=y,this.done=!1,this.delegate=null,this.tryEntries.forEach(f);for(var e,t=0;g.call(this,e="t"+t)||20>t;++t)this[e]=null},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){function t(t,n){return i.type="throw",i.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n],i=a.completion;if("root"===a.tryLoc)return t("end");if(a.tryLoc<=this.prev){var o=g.call(a,"catchLoc"),s=g.call(a,"finallyLoc");if(o&&s){if(this.prev<a.catchLoc)return t(a.catchLoc,!0);if(this.prev<a.finallyLoc)return t(a.finallyLoc)}else if(o){if(this.prev<a.catchLoc)return t(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return t(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&g.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var a=n;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?this.next=a.finallyLoc:this.complete(i),S},complete:function(e,t){if("throw"===e.type)throw e.arg;"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=e.arg,this.next="end"):"normal"===e.type&&t&&(this.next=t)},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),f(r),S}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;f(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:h(e),resultName:t,nextLoc:r},S}}}("object"==typeof global?global:"object"==typeof window?window:"object"==typeof self?self:void 0);var AbstractTransaction=function(){function e(t){_classCallCheck(this,e),this.store=t}return e.prototype.addOperation=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(r=this.getState(e.id[0]),e.id[1]!==r.clock){t.next=8;break}return r.clock++,t.delegateYield(this.setState(r),"t0",4);case 4:return this.store.operationAdded(e),t.abrupt("return",!0);case 8:return t.abrupt("return",!1);case 9:case"end":return t.stop()}},t,this)}),e}(),AbstractOperationStore=function(){function e(){_classCallCheck(this,e),this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1}return e.prototype.whenOperationsExist=function(e,t,r){if(e.length>0)for(var n={f:t,args:r||[],missing:e.length},a=e,i=Array.isArray(a),o=0,a=i?a:a[Symbol.iterator]();;){var s;if(i){if(o>=a.length)break;s=a[o++]}else{if(o=a.next(),o.done)break;s=o.value}var u=s,c=JSON.stringify(u),l=this.listenersById[c];null==l&&(l=[],this.listenersById[c]=l),l.push(n)}else this.listenersByIdExecuteNow.push({f:t,args:r||[]});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var f=this;this.requestTransaction(regeneratorRuntime.mark(function p(){var e,t,r,n,a,i,o,s,u,c,l,h,d,y;return regeneratorRuntime.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:e=f.listenersByIdExecuteNow,f.listenersByIdExecuteNow=[],t=f.listenersById,f.listenersById={},f.listenersByIdRequestPending=!1,r=e,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();case 6:if(!n){p.next=12;break}if(!(a>=r.length)){p.next=9;break}return p.abrupt("break",20);case 9:i=r[a++],p.next=16;break;case 12:if(a=r.next(),!a.done){p.next=15;break}return p.abrupt("break",20);case 15:i=a.value;case 16:return o=i,p.delegateYield(o.f.apply(this,o.args),"t0",18);case 18:p.next=6;break;case 20:p.t1=regeneratorRuntime.keys(t);case 21:if((p.t2=p.t1()).done){p.next=48;break}return s=p.t2.value,u=t[s],c=JSON.parse(s),p.delegateYield(this.getOperation(c),"t3",26);case 26:if(null!=p.t3){p.next=30;break}f.listenersById[s]=u,p.next=46;break;case 30:l=u,h=Array.isArray(l),d=0,l=h?l:l[Symbol.iterator]();case 31:if(!h){p.next=37;break}if(!(d>=l.length)){p.next=34;break}return p.abrupt("break",46);case 34:y=l[d++],p.next=41;break;case 37:if(d=l.next(),!d.done){p.next=40;break}return p.abrupt("break",46);case 40:y=d.value;case 41:if(o=y,0!==--o.missing){p.next=44;break}return p.delegateYield(o.f.apply(this,o.args),"t4",44);case 44:p.next=31;break;case 46:p.next=21;break;case 48:case"end":return p.stop()}},p,this)}))}},e.prototype.operationAdded=function(e){var t=this.listenersById[e.id];if(null!=t)for(var r=t,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();;){var i;if(n){if(a>=r.length)break;i=r[a++]}else{if(a=r.next(),a.done)break;i=a.value}var o=i;0===--o.missing&&this.whenOperationsExist([],o.f,o.args)}},e}(),Struct={Operation:{create:regeneratorRuntime.mark(function e(t,r){var n;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.getState(r),"t0",1);case 1:return n=e.t0,t.id=[r,n.clock],e.delegateYield(this.addOperation(t),"t1",4);case 4:return e.abrupt("return",e.t1);case 5:case"end":return e.stop()}},e,this)})},Insert:{create:regeneratorRuntime.mark(function t(e,r,n,a){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.left=n?n.id:null,e.origin=e.left,e.right=a?a.id:null,e.type="Insert",t.delegateYield(Struct.Operation.create(e,r),"t0",5);case 5:if(null==n){t.next=8;break}return n.right=e.id,t.delegateYield(this.setOperation(n),"t1",8);case 8:if(null==a){t.next=11;break}return a.left=e.id,t.delegateYield(this.setOperation(a),"t2",11);case 11:return t.abrupt("return",e);case 12:case"end":return t.stop()}},t,this)}),requiredOps:function(e,t){return t.push(e.left),t.push(e.right),t},execute:regeneratorRuntime.mark(function r(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",e);case 1:case"end":return t.stop()}},r,this)})}},IndexedDB=function(){var e=function(e){function t(r){_classCallCheck(this,t),e.call(this,r),this.transaction=r.db.transaction(["OperationStore","StateVector"],"readwrite"),this.sv=this.transaction.objectStore("StateVector"),this.os=this.transaction.objectStore("OperationStore"),this.buffer={}}return _inherits(t,e),t.prototype.setOperation=regeneratorRuntime.mark(function r(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.os.put(e);case 2:return this.buffer[JSON.stringify(e.uid)]=e,t.abrupt("return",e);case 4:case"end":return t.stop()}},r,this)}),t.prototype.getOperation=regeneratorRuntime.mark(function n(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(t=this.buffer[JSON.stringify(e)],null!=t){r.next=6;break}return r.next=4,this.os.get(e);case 4:t=r.sent,this.buffer[JSON.stringify(e)]=t;case 6:return r.abrupt("return",t);case 7:case"end":return r.stop()}},n,this)}),t.prototype.removeOperation=regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return this.buffer[JSON.stringify(e)]=null,t.next=3,this.os["delete"](e);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},a,this)}),t.prototype.setState=regeneratorRuntime.mark(function i(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.sv.put(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},i,this)}),t.prototype.getState=regeneratorRuntime.mark(function o(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.sv.get(e);case 2:if(r.t0=t=r.sent,null==r.t0){r.next=7;break}return r.abrupt("return",t);case 7:return r.abrupt("return",{user:e,clock:0});case 8:case"end":return r.stop()}},o,this)}),t.prototype.getStateVector=regeneratorRuntime.mark(function s(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:e=[],t=this.sv.openCursor();case 2:return n.next=4,t;case 4:if(n.t0=r=n.sent,null==n.t0){n.next=10;break}e.push(r.value),r["continue"](),n.next=2;break;case 10:return n.abrupt("return",e);case 11:case"end":return n.stop()}},s,this)}),t.prototype.getStateSet=regeneratorRuntime.mark(function u(){var e,t,r,n,a,i,o;return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:return s.delegateYield(this.getStateVector(),"t0",1);case 1:e=s.t0,t={},r=e,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();case 4:if(!n){s.next=10;break}if(!(a>=r.length)){s.next=7;break}return s.abrupt("break",18);case 7:i=r[a++],s.next=14;break;case 10:if(a=r.next(),!a.done){s.next=13;break}return s.abrupt("break",18);case 13:i=a.value;case 14:o=i,t[o.user]=o.clock;case 16:s.next=4;break;case 18:return s.abrupt("return",t);case 19:case"end":return s.stop()}},u,this)}),t.prototype.getOperations=regeneratorRuntime.mark(function c(e){var t,r,n,a,i,o,s,u,l,f,p,h,d;return regeneratorRuntime.wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return null==e&&(e={}),t=[],c.delegateYield(this.getStateVector(),"t0",3);case 3:r=c.t0,n=r,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();case 5:if(!a){c.next=11;break}if(!(i>=n.length)){c.next=8;break}return c.abrupt("break",31);case 8:o=n[i++],c.next=15;break;case 11:if(i=n.next(),!i.done){c.next=14;break}return c.abrupt("break",31);case 14:o=i.value;case 15:s=o,u=s.user,l=e[u]||0,f=s.clock,p=IDBKeyRange.bound([u,l],[u,f]),h=this.os.openCursor(p);case 21:return c.next=23,h;case 23:if(c.t1=d=c.sent,null==c.t1){c.next=29;break}t.push(d.value),d["continue"](),c.next=21;break;case 29:c.next=5;break;case 31:return c.abrupt("return",t);case 32:case"end":return c.stop()}},c,this)}),t}(AbstractTransaction),t=function(t){function r(e){var n=this;_classCallCheck(this,r),t.call(this),this.whenReadyListeners=[],this.namespace=e,this.ready=!1;var a=indexedDB.open(e,2);a.onerror=function(){throw new Error("Couldn't open the IndexedDB database!")},a.onsuccess=function(e){n.db=e.target.result,n.whenReadyListeners.forEach(function(e){setTimeout(e,0)}),n.whenReadyListeners=null,n.ready=!0},a.onupgradeneeded=function(e){var t=e.target.result;t.createObjectStore("OperationStore",{keyPath:"id"}),t.createObjectStore("StateVector",{keyPath:"user"})}}return _inherits(r,t),r.prototype.whenReady=function(e){this.ready?setTimeout(e,0):this.whenReadyListeners.push(e)},r.prototype.requestTransaction=function(t){var r=this;this.whenReady(function(){function n(e){var t=e.value;e.done||(t.constructor===IDBRequest||t.constructor===IDBCursor||t.constructor===IDBOpenDBRequest?(t.onsuccess=function(){n(i.next(t.result))},t.onerror=function(e){i["throw"](e)}):i["throw"]("You can not yield this type!"))}var a=new e(r),i=t.apply(a);n(i.next())})},r.prototype.removeDatabase=regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return this.db.close(),e.next=3,indexedDB.deleteDatabase(this.namespace);case 3:case"end":return e.stop()}},n,this)}),r}(AbstractOperationStore);return t}();
+"use strict";function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}!function(e){function t(e,t,r,a){var i=Object.create((t||n).prototype);return i._invoke=c(e,r||null,new p(a||[])),i}function r(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(n){return{type:"throw",arg:n}}}function n(){}function a(){}function i(){}function o(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function s(e){this.arg=e}function u(e){function t(t,r){var n=e[t](r),o=n.value;return o instanceof s?Promise.resolve(o.arg).then(a,i):Promise.resolve(o).then(function(e){return n.value=e,n},i)}function r(e,r){var a=n?n.then(function(){return t(e,r)}):new Promise(function(n){n(t(e,r))});return n=a["catch"](o),a}"object"==typeof process&&process.domain&&(t=process.domain.bind(t));var n,a=t.bind(e,"next"),i=t.bind(e,"throw"),o=t.bind(e,"return");this._invoke=r}function c(e,t,n){var a=m;return function(i,o){if(a===w)throw new Error("Generator is already running");if(a===R)return d();for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===y){n.delegate=null;var u=s.iterator["return"];if(u){var c=r(u,s.iterator,o);if("throw"===c.type){i="throw",o=c.arg;continue}}if("return"===i)continue}var c=r(s.iterator[i],s.iterator,o);if("throw"===c.type){n.delegate=null,i="throw",o=c.arg;continue}i="next",o=y;var l=c.arg;if(!l.done)return a=k,l;n[s.resultName]=l.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)a===k?n.sent=o:delete n.sent;else if("throw"===i){if(a===m)throw a=R,o;n.dispatchException(o)&&(i="next",o=y)}else"return"===i&&n.abrupt("return",o);a=w;var c=r(e,t,n);if("normal"===c.type){a=n.done?R:k;var l={value:c.arg,done:n.done};if(c.arg!==S)return l;n.delegate&&"next"===i&&(o=y)}else"throw"===c.type&&(a=R,i="throw",o=c.arg)}}}function l(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function f(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function p(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(l,this),this.reset()}function h(e){if(e){var t=e[b];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function a(){for(;++r<e.length;)if(g.call(e,r))return a.value=e[r],a.done=!1,a;return a.value=y,a.done=!0,a};return n.next=n}}return{next:d}}function d(){return{value:y,done:!0}}var y,g=Object.prototype.hasOwnProperty,b="function"==typeof Symbol&&Symbol.iterator||"@@iterator",v="object"==typeof module,x=e.regeneratorRuntime;if(x)return void(v&&(module.exports=x));x=e.regeneratorRuntime=v?module.exports:{},x.wrap=t;var m="suspendedStart",k="suspendedYield",w="executing",R="completed",S={},O=i.prototype=n.prototype;a.prototype=O.constructor=i,i.constructor=a,a.displayName="GeneratorFunction",x.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return t?t===a||"GeneratorFunction"===(t.displayName||t.name):!1},x.mark=function(e){return e.__proto__=i,e.prototype=Object.create(O),e},x.awrap=function(e){return new s(e)},o(u.prototype),x.async=function(e,r,n,a){var i=new u(t(e,r,n,a));return x.isGeneratorFunction(r)?i:i.next().then(function(e){return e.done?e.value:i.next()})},o(O),O[b]=function(){return this},O.toString=function(){return"[object Generator]"},x.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},x.values=h,p.prototype={constructor:p,reset:function(){this.prev=0,this.next=0,this.sent=y,this.done=!1,this.delegate=null,this.tryEntries.forEach(f);for(var e,t=0;g.call(this,e="t"+t)||20>t;++t)this[e]=null},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){function t(t,n){return i.type="throw",i.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n],i=a.completion;if("root"===a.tryLoc)return t("end");if(a.tryLoc<=this.prev){var o=g.call(a,"catchLoc"),s=g.call(a,"finallyLoc");if(o&&s){if(this.prev<a.catchLoc)return t(a.catchLoc,!0);if(this.prev<a.finallyLoc)return t(a.finallyLoc)}else if(o){if(this.prev<a.catchLoc)return t(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return t(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&g.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var a=n;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?this.next=a.finallyLoc:this.complete(i),S},complete:function(e,t){if("throw"===e.type)throw e.arg;"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=e.arg,this.next="end"):"normal"===e.type&&t&&(this.next=t)},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),f(r),S}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;f(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:h(e),resultName:t,nextLoc:r},S}}}("object"==typeof global?global:"object"==typeof window?window:"object"==typeof self?self:void 0);var AbstractTransaction=function(){function e(t){_classCallCheck(this,e),this.store=t}return e.prototype.addOperation=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(r=this.getState(e.id[0]),e.id[1]!==r.clock){t.next=8;break}return r.clock++,t.delegateYield(this.setState(r),"t0",4);case 4:return this.store.operationAdded(e),t.abrupt("return",!0);case 8:return t.abrupt("return",!1);case 9:case"end":return t.stop()}},t,this)}),e}(),AbstractOperationStore=function(){function e(){_classCallCheck(this,e),this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1}return e.prototype.whenOperationsExist=function(e,t,r){if(e.length>0)for(var n={f:t,args:r||[],missing:e.length},a=e,i=Array.isArray(a),o=0,a=i?a:a[Symbol.iterator]();;){var s;if(i){if(o>=a.length)break;s=a[o++]}else{if(o=a.next(),o.done)break;s=o.value}var u=s,c=JSON.stringify(u),l=this.listenersById[c];null==l&&(l=[],this.listenersById[c]=l),l.push(n)}else this.listenersByIdExecuteNow.push({f:t,args:r||[]});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var f=this;this.requestTransaction(regeneratorRuntime.mark(function p(){var e,t,r,n,a,i,o,s,u,c,l,h,d,y;return regeneratorRuntime.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:e=f.listenersByIdExecuteNow,f.listenersByIdExecuteNow=[],t=f.listenersById,f.listenersById={},f.listenersByIdRequestPending=!1,r=e,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();case 6:if(!n){p.next=12;break}if(!(a>=r.length)){p.next=9;break}return p.abrupt("break",20);case 9:i=r[a++],p.next=16;break;case 12:if(a=r.next(),!a.done){p.next=15;break}return p.abrupt("break",20);case 15:i=a.value;case 16:return o=i,p.delegateYield(o.f.apply(this,o.args),"t0",18);case 18:p.next=6;break;case 20:p.t1=regeneratorRuntime.keys(t);case 21:if((p.t2=p.t1()).done){p.next=48;break}return s=p.t2.value,u=t[s],c=JSON.parse(s),p.delegateYield(this.getOperation(c),"t3",26);case 26:if(null!=p.t3){p.next=30;break}f.listenersById[s]=u,p.next=46;break;case 30:l=u,h=Array.isArray(l),d=0,l=h?l:l[Symbol.iterator]();case 31:if(!h){p.next=37;break}if(!(d>=l.length)){p.next=34;break}return p.abrupt("break",46);case 34:y=l[d++],p.next=41;break;case 37:if(d=l.next(),!d.done){p.next=40;break}return p.abrupt("break",46);case 40:y=d.value;case 41:if(o=y,0!==--o.missing){p.next=44;break}return p.delegateYield(o.f.apply(this,o.args),"t4",44);case 44:p.next=31;break;case 46:p.next=21;break;case 48:case"end":return p.stop()}},p,this)}))}},e.prototype.operationAdded=function(e){var t=this.listenersById[e.id];if(null!=t)for(var r=t,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();;){var i;if(n){if(a>=r.length)break;i=r[a++]}else{if(a=r.next(),a.done)break;i=a.value}var o=i;0===--o.missing&&this.whenOperationsExist([],o.f,o.args)}},e}(),Struct={Operation:{create:regeneratorRuntime.mark(function e(t,r){var n;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.getState(r),"t0",1);case 1:return n=e.t0,t.id=[r,n.clock],e.delegateYield(this.addOperation(t),"t1",4);case 4:return e.abrupt("return",e.t1);case 5:case"end":return e.stop()}},e,this)})},Insert:{create:regeneratorRuntime.mark(function t(e,r,n,a){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.left=n?n.id:null,e.origin=e.left,e.right=a?a.id:null,e.type="Insert",t.delegateYield(Struct.Operation.create(e,r),"t0",5);case 5:if(null==n){t.next=8;break}return n.right=e.id,t.delegateYield(this.setOperation(n),"t1",8);case 8:if(null==a){t.next=11;break}return a.left=e.id,t.delegateYield(this.setOperation(a),"t2",11);case 11:return t.abrupt("return",e);case 12:case"end":return t.stop()}},t,this)}),requiredOps:function(e,t){return t.push(e.left),t.push(e.right),t},execute:regeneratorRuntime.mark(function r(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",e);case 1:case"end":return t.stop()}},r,this)})}},GeneratorFunction=regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},n,this)}).constructor,IndexedDB=function(){var e=function(e){function t(r){_classCallCheck(this,t),e.call(this,r),this.transaction=r.db.transaction(["OperationStore","StateVector"],"readwrite"),this.sv=this.transaction.objectStore("StateVector"),this.os=this.transaction.objectStore("OperationStore"),this.buffer={}}return _inherits(t,e),t.prototype.setOperation=regeneratorRuntime.mark(function r(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.os.put(e);case 2:return this.buffer[JSON.stringify(e.id)]=e,t.abrupt("return",e);case 4:case"end":return t.stop()}},r,this)}),t.prototype.getOperation=regeneratorRuntime.mark(function n(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(t=this.buffer[JSON.stringify(e)],null!=t){r.next=6;break}return r.next=4,this.os.get(e);case 4:t=r.sent,this.buffer[JSON.stringify(e)]=t;case 6:return r.abrupt("return",t);case 7:case"end":return r.stop()}},n,this)}),t.prototype.removeOperation=regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return this.buffer[JSON.stringify(e)]=null,t.next=3,this.os["delete"](e);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},a,this)}),t.prototype.setState=regeneratorRuntime.mark(function i(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.sv.put(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},i,this)}),t.prototype.getState=regeneratorRuntime.mark(function o(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.sv.get(e);case 2:if(r.t0=t=r.sent,null==r.t0){r.next=7;break}return r.abrupt("return",t);case 7:return r.abrupt("return",{user:e,clock:0});case 8:case"end":return r.stop()}},o,this)}),t.prototype.getStateVector=regeneratorRuntime.mark(function s(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:e=[],t=this.sv.openCursor();case 2:return n.next=4,t;case 4:if(n.t0=r=n.sent,null==n.t0){n.next=10;break}e.push(r.value),r["continue"](),n.next=2;break;case 10:return n.abrupt("return",e);case 11:case"end":return n.stop()}},s,this)}),t.prototype.getStateSet=regeneratorRuntime.mark(function u(){var e,t,r,n,a,i,o;return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:return s.delegateYield(this.getStateVector(),"t0",1);case 1:e=s.t0,t={},r=e,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();case 4:if(!n){s.next=10;break}if(!(a>=r.length)){s.next=7;break}return s.abrupt("break",18);case 7:i=r[a++],s.next=14;break;case 10:if(a=r.next(),!a.done){s.next=13;break}return s.abrupt("break",18);case 13:i=a.value;case 14:o=i,t[o.user]=o.clock;case 16:s.next=4;break;case 18:return s.abrupt("return",t);case 19:case"end":return s.stop()}},u,this)}),t.prototype.getOperations=regeneratorRuntime.mark(function c(e){var t,r,n,a,i,o,s,u,l,f,p,h,d;return regeneratorRuntime.wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return null==e&&(e={}),t=[],c.delegateYield(this.getStateVector(),"t0",3);case 3:r=c.t0,n=r,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();case 5:if(!a){c.next=11;break}if(!(i>=n.length)){c.next=8;break}return c.abrupt("break",31);case 8:o=n[i++],c.next=15;break;case 11:if(i=n.next(),!i.done){c.next=14;break}return c.abrupt("break",31);case 14:o=i.value;case 15:s=o,u=s.user,l=e[u]||0,f=s.clock,p=IDBKeyRange.bound([u,l],[u,f]),h=this.os.openCursor(p);case 21:return c.next=23,h;case 23:if(c.t1=d=c.sent,null==c.t1){c.next=29;break}t.push(d.value),d["continue"](),c.next=21;break;case 29:c.next=5;break;case 31:return c.abrupt("return",t);case 32:case"end":return c.stop()}},c,this)}),t}(AbstractTransaction),t=function(t){function r(n){function a(e){var t=e.value;e.done||(t.constructor===IDBRequest||t.constructor===IDBCursor?(t.onsuccess=function(){a(o.next(t.result))},t.onerror=function(e){o["throw"](e)}):t===i.transactionQueue?t.queue.length>0?a(o.next(t.queue.shift())):t.onRequest=function(){t.onRequest=null,a(o.next(t.queue.shift()))}:t.constructor===IDBOpenDBRequest?(t.onsuccess=function(e){var t=e.target.result;a(o.next(t))},t.onerror=function(){o["throw"]("Couldn't open IndexedDB database!")},t.onupgradeneeded=function(e){var t=e.target.result;t.createObjectStore("OperationStore",{keyPath:"id"}),t.createObjectStore("StateVector",{keyPath:"user"})}):o["throw"]("You can not yield this type!"))}_classCallCheck(this,r),t.call(this),this.namespace=n,this.transactionQueue={queue:[],onRequest:null};var i=this,o=regeneratorRuntime.mark(function s(){var t,r,a,o;return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:return s.next=2,indexedDB.open(n,3);case 2:i.db=s.sent,t=i.transactionQueue,r=null,a=!0;case 6:if(!a){s.next=14;break}return s.next=9,t;case 9:return o=s.sent,r=new e(i),s.delegateYield(o.call(r),"t0",12);case 12:s.next=6;break;case 14:case"end":return s.stop()}},s,this)})();a(o.next())}return _inherits(r,t),r.prototype.requestTransaction=function(e){this.transactionQueue.queue.push(e),null!=this.transactionQueue.onRequest&&this.transactionQueue.onRequest()},r.prototype.removeDatabase=regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return this.db.close(),e.next=3,indexedDB.deleteDatabase(this.namespace);case 3:case"end":return e.stop()}},n,this)}),r}(AbstractOperationStore);return t}();
 //# sourceMappingURL=y.js.map
\ No newline at end of file
diff --git a/y.js.map b/y.js.map
index 543762cef0b810e2ae9968b8bffa43a2bc0d9ac6..f2616e790e15fdbfd6676a3d7b701450fb3bcffe 100644
--- a/y.js.map
+++ b/y.js.map
@@ -1 +1 @@
-{"version":3,"sources":["y.js","runtime.js","OperationStore.js","Operations.js","OperationStores/IndexedDB.js"],"names":["_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","__proto__","_classCallCheck","instance","Constructor","global","wrap","innerFn","outerFn","self","tryLocsList","generator","Generator","_invoke","makeInvokeMethod","Context","tryCatch","fn","obj","arg","type","call","err","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","forEach","method","this","AwaitArgument","AsyncIterator","invoke","result","Promise","resolve","then","invokeNext","invokeThrow","unwrapped","enqueue","enqueueResult","previousPromise","invokeReturn","process","domain","bind","context","state","GenStateSuspendedStart","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","iterator","undefined","returnMethod","record","info","done","GenStateSuspendedYield","resultName","next","nextLoc","sent","dispatchException","abrupt","ContinueSentinel","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","values","iterable","iteratorMethod","iteratorSymbol","isNaN","length","i","hasOwn","hasOwnProperty","Symbol","inModule","module","runtime","regeneratorRuntime","exports","Gp","displayName","isGeneratorFunction","genFun","ctor","name","mark","awrap","async","iter","toString","keys","object","key","reverse","pop","prev","tempName","tempIndex","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","window","AbstractTransaction","store","addOperation","op","context$2$0","getState","id","clock","setState","operationAdded","AbstractOperationStore","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","whenOperationsExist","ids","f","args","listener","missing","_iterator","_isArray","Array","isArray","_i","_ref","sid","JSON","stringify","l","requestTransaction","callee$2$0","exeNow","ls","_iterator2","_isArray2","_i2","_ref2","_iterator3","_isArray3","_i3","_ref3","context$3$0","apply","t1","t2","parse","getOperation","t3","_iterator4","_isArray4","_i4","_ref4","Struct","Operation","user","context$1$0","t0","Insert","left","right","origin","setOperation","requiredOps","execute","IndexedDB","Transaction","_AbstractTransaction","transaction","db","sv","objectStore","os","buffer","put","uid","get","removeOperation","getStateVector","stateVector","cursorResult","cursor","openCursor","getStateSet","ss","_iterator5","_isArray5","_i5","_ref5","getOperations","startSS","ops","endSV","_iterator6","_isArray6","_i6","_ref6","endState","startPos","endPos","range","IDBKeyRange","bound","OperationStore","_AbstractOperationStore","namespace","_this","whenReadyListeners","ready","req","indexedDB","open","onerror","onsuccess","event","target","setTimeout","onupgradeneeded","createObjectStore","keyPath","whenReady","makeGen","_this2","res","request","IDBRequest","IDBCursor","IDBOpenDBRequest","gen","removeDatabase","close","deleteDatabase"],"mappings":"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","file":"y.js","sourcesContent":[null,"/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var hasOwn = Object.prototype.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var iteratorSymbol =\n    typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided, then outerFn.prototype instanceof Generator.\n    var generator = Object.create((outerFn || Generator).prototype);\n\n    generator._invoke = makeInvokeMethod(\n      innerFn, self || null,\n      new Context(tryLocsList || [])\n    );\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    genFun.__proto__ = GeneratorFunctionPrototype;\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `value instanceof AwaitArgument` to determine if the yielded value is\n  // meant to be awaited. Some may consider the name of this method too\n  // cutesy, but they are curmudgeons.\n  runtime.awrap = function(arg) {\n    return new AwaitArgument(arg);\n  };\n\n  function AwaitArgument(arg) {\n    this.arg = arg;\n  }\n\n  function AsyncIterator(generator) {\n    // This invoke function is written in a style that assumes some\n    // calling function (or Promise) will handle exceptions.\n    function invoke(method, arg) {\n      var result = generator[method](arg);\n      var value = result.value;\n      return value instanceof AwaitArgument\n        ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n        : Promise.resolve(value).then(function(unwrapped) {\n            result.value = unwrapped;\n            return result;\n          }, invokeThrow);\n    }\n\n    if (typeof process === \"object\" && process.domain) {\n      invoke = process.domain.bind(invoke);\n    }\n\n    var invokeNext = invoke.bind(generator, \"next\");\n    var invokeThrow = invoke.bind(generator, \"throw\");\n    var invokeReturn = invoke.bind(generator, \"return\");\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      var enqueueResult =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(function() {\n          return invoke(method, arg);\n        }) : new Promise(function(resolve) {\n          resolve(invoke(method, arg));\n        });\n\n      // Avoid propagating enqueueResult failures to Promises returned by\n      // later invocations of the iterator, and call generator.return() to\n      // allow the generator a chance to clean up.\n      previousPromise = enqueueResult[\"catch\"](invokeReturn);\n\n      return enqueueResult;\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          if (method === \"return\" ||\n              (method === \"throw\" && delegate.iterator[method] === undefined)) {\n            // A return or throw (when the delegate iterator has no throw\n            // method) always terminates the yield* loop.\n            context.delegate = null;\n\n            // If the delegate iterator has a return method, give it a\n            // chance to clean up.\n            var returnMethod = delegate.iterator[\"return\"];\n            if (returnMethod) {\n              var record = tryCatch(returnMethod, delegate.iterator, arg);\n              if (record.type === \"throw\") {\n                // If the return method threw an exception, let that\n                // exception prevail over the original return or throw.\n                method = \"throw\";\n                arg = record.arg;\n                continue;\n              }\n            }\n\n            if (method === \"return\") {\n              // Continue with the outer return, now that the delegate\n              // iterator has been terminated.\n              continue;\n            }\n          }\n\n          var record = tryCatch(\n            delegate.iterator[method],\n            delegate.iterator,\n            arg\n          );\n\n          if (record.type === \"throw\") {\n            context.delegate = null;\n\n            // Like returning generator.throw(uncaught), but without the\n            // overhead of an extra function call.\n            method = \"throw\";\n            arg = record.arg;\n            continue;\n          }\n\n          // Delegate generator ran and handled its own exceptions so\n          // regardless of what the method was, we continue as if it is\n          // \"next\" with an undefined arg.\n          method = \"next\";\n          arg = undefined;\n\n          var info = record.arg;\n          if (info.done) {\n            context[delegate.resultName] = info.value;\n            context.next = delegate.nextLoc;\n          } else {\n            state = GenStateSuspendedYield;\n            return info;\n          }\n\n          context.delegate = null;\n        }\n\n        if (method === \"next\") {\n          if (state === GenStateSuspendedYield) {\n            context.sent = arg;\n          } else {\n            delete context.sent;\n          }\n\n        } else if (method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw arg;\n          }\n\n          if (context.dispatchException(arg)) {\n            // If the dispatched exception was caught by a catch block,\n            // then let that catch block handle the exception normally.\n            method = \"next\";\n            arg = undefined;\n          }\n\n        } else if (method === \"return\") {\n          context.abrupt(\"return\", arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          var info = {\n            value: record.arg,\n            done: context.done\n          };\n\n          if (record.arg === ContinueSentinel) {\n            if (context.delegate && method === \"next\") {\n              // Deliberately forget the last sent value so that we don't\n              // accidentally pass it on to the delegate.\n              arg = undefined;\n            }\n          } else {\n            return info;\n          }\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(arg) call above.\n          method = \"throw\";\n          arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset();\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function() {\n      this.prev = 0;\n      this.next = 0;\n      this.sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      // Pre-initialize at least 20 temporary variables to enable hidden\n      // class optimizations for simple generators.\n      for (var tempIndex = 0, tempName;\n           hasOwn.call(this, tempName = \"t\" + tempIndex) || tempIndex < 20;\n           ++tempIndex) {\n        this[tempName] = null;\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n        return !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.next = finallyEntry.finallyLoc;\n      } else {\n        this.complete(record);\n      }\n\n      return ContinueSentinel;\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = record.arg;\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","/* @flow */\nclass AbstractTransaction { //eslint-disable-line no-unused-vars\n  constructor (store : OperationStore) {\n    this.store = store;\n  }\n  // Throws if operation is not expected.\n  *addOperation (op) {\n    var state = this.getState(op.id[0]);\n    if (op.id[1] === state.clock){\n      state.clock++;\n      yield* this.setState(state);\n      this.store.operationAdded(op);\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\ntype Listener = {\n  f : GeneratorFunction, // is called when all operations are available\n  missing : number // number of operations that are missing\n}\n\ntype GeneratorFunction = Function;\n\ntype Id = [string, number];\n\nclass AbstractOperationStore { //eslint-disable-line no-unused-vars\n  constructor () {\n    // E.g. this.listenersById[id] : Array<Listener>\n    this.listenersById = {};\n    // Execute the next time a transaction is requested\n    this.listenersByIdExecuteNow = [];\n    // A transaction is requested\n    this.listenersByIdRequestPending = false;\n    /* To make things more clear, the following naming conventions:\n       * ls : we put this.listenersById on ls\n       * l : Array<Listener>\n       * id : Id (can't use as property name)\n       * sid : String (converted from id via JSON.stringify\n                       so we can use it as a property name)\n\n      Always remember to first overwrite over\n      a property before you iterate over it!\n    */\n  }\n  // f is called as soon as every operation requested is available.\n  // Note that Transaction can (and should) buffer requests.\n  whenOperationsExist (ids : Array<Id>, f : GeneratorFunction, args : Array<any>) {\n    if (ids.length > 0) {\n      let listener : Listener = {\n        f: f,\n        args: args || [],\n        missing: ids.length\n      };\n\n      for (let id of ids) {\n        let sid = JSON.stringify(id);\n        let l = this.listenersById[sid];\n        if (l == null){\n          l = [];\n          this.listenersById[sid] = l;\n        }\n        l.push(listener);\n      }\n    } else {\n      this.listenersByIdExecuteNow.push({\n        f: f,\n        args: args || []\n      });\n    }\n\n    if (this.listenersByIdRequestPending){\n      return;\n    }\n\n    this.listenersByIdRequestPending = true;\n    var store = this;\n\n    this.requestTransaction(function*(){\n      var exeNow = store.listenersByIdExecuteNow;\n      store.listenersByIdExecuteNow = [];\n\n      var ls = store.listenersById;\n      store.listenersById = {};\n\n      store.listenersByIdRequestPending = false;  \n\n      for (let listener of exeNow) {\n        yield* listener.f.apply(this, listener.args);\n      }\n\n      for (var sid in ls){\n        var l = ls[sid];\n        var id = JSON.parse(sid);\n        if ((yield* this.getOperation(id)) == null){\n          store.listenersById[sid] = l;\n        } else {\n          for (let listener of l) {\n            if (--listener.missing === 0){\n              yield* listener.f.apply(this, listener.args);\n            }\n          }\n        }\n      }\n    });\n\n  }\n  // called by a transaction when an operation is added\n  operationAdded (op) {\n    var l = this.listenersById[op.id];\n    if (l != null) {\n      for (var listener of l){\n        if (--listener.missing === 0){\n          this.whenOperationsExist([], listener.f, listener.args);\n        }\n      }    }\n\n  }\n}\n","/* @flow */\n\n// Op is anything that we could get from the OperationStore.\ntype Op = Object;\n\nvar Struct = {\n  Operation: {  //eslint-disable-line no-unused-vars\n    create: function*(op : Op, user : string) : Struct.Operation {\n      var state = yield* this.getState(user);\n      op.id = [user, state.clock];\n      return yield* this.addOperation(op);\n    }\n  },\n  Insert: {\n    create: function*( op : Op,\n                      user : string,\n                      left : Struct.Insert,\n                      right : Struct.Insert) : Struct.Insert {\n      op.left = left ? left.id : null;\n      op.origin = op.left;\n      op.right = right ? right.id : null;\n      op.type = \"Insert\";\n      yield* Struct.Operation.create(op, user);\n\n      if (left != null) {\n        left.right = op.id;\n        yield* this.setOperation(left);\n      }\n      if (right != null) {\n        right.left = op.id;\n        yield* this.setOperation(right);\n      }\n      return op;\n    },\n    requiredOps: function(op, ids){\n      ids.push(op.left);\n      ids.push(op.right);\n      return ids;\n    },\n    execute: function*(op){\n      return op;\n    }\n  }\n};\n","\ntype State = {\n  user: string,\n  clock: number\n};\n\ntype StateVector = Array<State>;\n\ntype StateSet = Object;\n\ntype IDBTransaction = Function;\ntype IDBObjectStore = Function;\ntype IDBRequest = Function;\ntype IDBCursor = Function;\ntype IDBKeyRange = Function;\n\ntype IDBOpenDBRequest = Function;\n\ndeclare var indexedDB : Object;\n\ndeclare var setTimeout : Function;\n\nvar IndexedDB = (function(){ //eslint-disable-line no-unused-vars\n  class Transaction extends AbstractTransaction { //eslint-disable-line\n    transaction: IDBTransaction;\n    sv: IDBObjectStore;\n    os: IDBObjectStore;\n    store: OperationStore;\n\n    constructor (store : OperationStore) {\n      super(store);\n      this.transaction = store.db.transaction([\"OperationStore\", \"StateVector\"], \"readwrite\");\n      this.sv = this.transaction.objectStore(\"StateVector\");\n      this.os = this.transaction.objectStore(\"OperationStore\");\n      this.buffer = {};\n    }\n    *setOperation (op) {\n      yield this.os.put(op);\n      this.buffer[JSON.stringify(op.uid)] = op;\n      return op;\n    }\n    *getOperation (id) {\n      var op = this.buffer[JSON.stringify(id)];\n      if (op == null) {\n        op = yield this.os.get(id);\n        this.buffer[JSON.stringify(id)] = op;\n      }\n      return op;\n    }\n    *removeOperation (id) {\n      this.buffer[JSON.stringify(id)] = null;\n      return yield this.os.delete(id);\n    }\n    *setState (state : State) : State {\n      return yield this.sv.put(state);\n    }\n    *getState (user : string) : State {\n      var state;\n      if ((state = yield this.sv.get(user)) != null){\n        return state;\n      } else {\n        return {\n          user: user,\n          clock: 0\n        };\n      }\n    }\n    *getStateVector () : StateVector {\n      var stateVector = [];\n      var cursorResult = this.sv.openCursor();\n      var cursor;\n      while ((cursor = yield cursorResult) != null) {\n        stateVector.push(cursor.value);\n        cursor.continue();\n      }\n      return stateVector;\n    }\n    *getStateSet () : StateSet {\n      var sv : StateVector = yield* this.getStateVector();\n      var ss : StateSet = {};\n      for (var state of sv){\n        ss[state.user] = state.clock;\n      }\n      return ss;\n    }\n\n    *getOperations (startSS : StateSet) {\n      if (startSS == null){\n        startSS = {};\n      }\n      var ops = [];\n\n      var endSV : StateVector = yield* this.getStateVector();\n      for (var endState of endSV) {\n        var user = endState.user;\n        var startPos = startSS[user] || 0;\n        var endPos = endState.clock;\n        var range = IDBKeyRange.bound([user, startPos], [user, endPos]);\n        var cursorResult = this.os.openCursor(range);\n        var cursor;\n        while ((cursor = yield cursorResult) != null) {\n          ops.push(cursor.value);\n          cursor.continue();\n        }\n      }\n      return ops;\n    }\n  }\n  class OperationStore extends AbstractOperationStore { //eslint-disable-line no-undef\n    namespace: string;\n    ready: Promise;\n    whenReadyListeners: Array<Function>;\n    constructor (namespace : string) {\n      super();\n      this.whenReadyListeners = [];\n      this.namespace = namespace;\n      this.ready = false;\n\n      var req = indexedDB.open(namespace, 2); //eslint-disable-line no-undef\n      req.onerror = function(){\n        throw new Error(\"Couldn't open the IndexedDB database!\");\n      };\n      req.onsuccess = (event)=>{\n        this.db = event.target.result;\n        this.whenReadyListeners.forEach(function(f){\n          setTimeout(f, 0);\n        });\n        this.whenReadyListeners = null;\n        this.ready = true;\n      };\n      req.onupgradeneeded = function(event){\n        var db = event.target.result;\n        db.createObjectStore(\"OperationStore\", {keyPath: \"id\"});\n        db.createObjectStore(\"StateVector\", {keyPath: \"user\"});\n      };\n    }\n    whenReady (f : Function) {\n      if (this.ready){\n        setTimeout(f, 0);\n      } else {\n        this.whenReadyListeners.push(f);\n      }\n    }\n    requestTransaction (makeGen : Function) {\n      this.whenReady(()=>{\n        var transaction = new Transaction(this);\n        var gen = makeGen.apply(transaction);\n\n        function handle(res : any){\n          var request : any = res.value;\n          if (res.done){\n            return;\n          } else if (request.constructor === IDBRequest\n                     || request.constructor === IDBCursor\n                     || request.constructor === IDBOpenDBRequest) {\n            request.onsuccess = function(){\n              handle(gen.next(request.result));\n            };\n            request.onerror = function(err){\n              gen.throw(err);\n            };\n          } else {\n            gen.throw(\"You can not yield this type!\");\n          }\n        }\n        handle(gen.next());\n      });\n    }\n    *removeDatabase () {\n      this.db.close();\n      yield indexedDB.deleteDatabase(this.namespace);\n    }\n  }\n  return OperationStore;\n})();\n"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["y.js","runtime.js","OperationStore.js","Operations.js","OperationStores/IndexedDB.js"],"names":["_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","__proto__","_classCallCheck","instance","Constructor","global","wrap","innerFn","outerFn","self","tryLocsList","generator","Generator","_invoke","makeInvokeMethod","Context","tryCatch","fn","obj","arg","type","call","err","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","forEach","method","this","AwaitArgument","AsyncIterator","invoke","result","Promise","resolve","then","invokeNext","invokeThrow","unwrapped","enqueue","enqueueResult","previousPromise","invokeReturn","process","domain","bind","context","state","GenStateSuspendedStart","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","iterator","undefined","returnMethod","record","info","done","GenStateSuspendedYield","resultName","next","nextLoc","sent","dispatchException","abrupt","ContinueSentinel","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","values","iterable","iteratorMethod","iteratorSymbol","isNaN","length","i","hasOwn","hasOwnProperty","Symbol","inModule","module","runtime","regeneratorRuntime","exports","Gp","displayName","isGeneratorFunction","genFun","ctor","name","mark","awrap","async","iter","toString","keys","object","key","reverse","pop","prev","tempName","tempIndex","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","window","AbstractTransaction","store","addOperation","op","context$2$0","getState","id","clock","setState","operationAdded","AbstractOperationStore","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","whenOperationsExist","ids","f","args","listener","missing","_iterator","_isArray","Array","isArray","_i","_ref","sid","JSON","stringify","l","requestTransaction","callee$2$0","exeNow","ls","_iterator2","_isArray2","_i2","_ref2","_iterator3","_isArray3","_i3","_ref3","context$3$0","apply","t1","t2","parse","getOperation","t3","_iterator4","_isArray4","_i4","_ref4","Struct","Operation","user","context$1$0","t0","Insert","left","right","origin","setOperation","requiredOps","execute","callee$0$0","IndexedDB","Transaction","_AbstractTransaction","transaction","db","sv","objectStore","os","buffer","put","get","removeOperation","getStateVector","stateVector","cursorResult","cursor","openCursor","getStateSet","ss","_iterator5","_isArray5","_i5","_ref5","getOperations","startSS","ops","endSV","_iterator6","_isArray6","_i6","_ref6","endState","startPos","endPos","range","IDBKeyRange","bound","OperationStore","_AbstractOperationStore","namespace","handleTransactions","t","request","IDBRequest","IDBCursor","onsuccess","tGen","onerror","transactionQueue","queue","shift","onRequest","IDBOpenDBRequest","event","target","onupgradeneeded","createObjectStore","keyPath","transactionGen","cont","context$4$0","indexedDB","open","makeGen","removeDatabase","close","deleteDatabase"],"mappings":"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","file":"y.js","sourcesContent":[null,"/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var hasOwn = Object.prototype.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var iteratorSymbol =\n    typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided, then outerFn.prototype instanceof Generator.\n    var generator = Object.create((outerFn || Generator).prototype);\n\n    generator._invoke = makeInvokeMethod(\n      innerFn, self || null,\n      new Context(tryLocsList || [])\n    );\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    genFun.__proto__ = GeneratorFunctionPrototype;\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `value instanceof AwaitArgument` to determine if the yielded value is\n  // meant to be awaited. Some may consider the name of this method too\n  // cutesy, but they are curmudgeons.\n  runtime.awrap = function(arg) {\n    return new AwaitArgument(arg);\n  };\n\n  function AwaitArgument(arg) {\n    this.arg = arg;\n  }\n\n  function AsyncIterator(generator) {\n    // This invoke function is written in a style that assumes some\n    // calling function (or Promise) will handle exceptions.\n    function invoke(method, arg) {\n      var result = generator[method](arg);\n      var value = result.value;\n      return value instanceof AwaitArgument\n        ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n        : Promise.resolve(value).then(function(unwrapped) {\n            result.value = unwrapped;\n            return result;\n          }, invokeThrow);\n    }\n\n    if (typeof process === \"object\" && process.domain) {\n      invoke = process.domain.bind(invoke);\n    }\n\n    var invokeNext = invoke.bind(generator, \"next\");\n    var invokeThrow = invoke.bind(generator, \"throw\");\n    var invokeReturn = invoke.bind(generator, \"return\");\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      var enqueueResult =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(function() {\n          return invoke(method, arg);\n        }) : new Promise(function(resolve) {\n          resolve(invoke(method, arg));\n        });\n\n      // Avoid propagating enqueueResult failures to Promises returned by\n      // later invocations of the iterator, and call generator.return() to\n      // allow the generator a chance to clean up.\n      previousPromise = enqueueResult[\"catch\"](invokeReturn);\n\n      return enqueueResult;\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          if (method === \"return\" ||\n              (method === \"throw\" && delegate.iterator[method] === undefined)) {\n            // A return or throw (when the delegate iterator has no throw\n            // method) always terminates the yield* loop.\n            context.delegate = null;\n\n            // If the delegate iterator has a return method, give it a\n            // chance to clean up.\n            var returnMethod = delegate.iterator[\"return\"];\n            if (returnMethod) {\n              var record = tryCatch(returnMethod, delegate.iterator, arg);\n              if (record.type === \"throw\") {\n                // If the return method threw an exception, let that\n                // exception prevail over the original return or throw.\n                method = \"throw\";\n                arg = record.arg;\n                continue;\n              }\n            }\n\n            if (method === \"return\") {\n              // Continue with the outer return, now that the delegate\n              // iterator has been terminated.\n              continue;\n            }\n          }\n\n          var record = tryCatch(\n            delegate.iterator[method],\n            delegate.iterator,\n            arg\n          );\n\n          if (record.type === \"throw\") {\n            context.delegate = null;\n\n            // Like returning generator.throw(uncaught), but without the\n            // overhead of an extra function call.\n            method = \"throw\";\n            arg = record.arg;\n            continue;\n          }\n\n          // Delegate generator ran and handled its own exceptions so\n          // regardless of what the method was, we continue as if it is\n          // \"next\" with an undefined arg.\n          method = \"next\";\n          arg = undefined;\n\n          var info = record.arg;\n          if (info.done) {\n            context[delegate.resultName] = info.value;\n            context.next = delegate.nextLoc;\n          } else {\n            state = GenStateSuspendedYield;\n            return info;\n          }\n\n          context.delegate = null;\n        }\n\n        if (method === \"next\") {\n          if (state === GenStateSuspendedYield) {\n            context.sent = arg;\n          } else {\n            delete context.sent;\n          }\n\n        } else if (method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw arg;\n          }\n\n          if (context.dispatchException(arg)) {\n            // If the dispatched exception was caught by a catch block,\n            // then let that catch block handle the exception normally.\n            method = \"next\";\n            arg = undefined;\n          }\n\n        } else if (method === \"return\") {\n          context.abrupt(\"return\", arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          var info = {\n            value: record.arg,\n            done: context.done\n          };\n\n          if (record.arg === ContinueSentinel) {\n            if (context.delegate && method === \"next\") {\n              // Deliberately forget the last sent value so that we don't\n              // accidentally pass it on to the delegate.\n              arg = undefined;\n            }\n          } else {\n            return info;\n          }\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(arg) call above.\n          method = \"throw\";\n          arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset();\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function() {\n      this.prev = 0;\n      this.next = 0;\n      this.sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      // Pre-initialize at least 20 temporary variables to enable hidden\n      // class optimizations for simple generators.\n      for (var tempIndex = 0, tempName;\n           hasOwn.call(this, tempName = \"t\" + tempIndex) || tempIndex < 20;\n           ++tempIndex) {\n        this[tempName] = null;\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n        return !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.next = finallyEntry.finallyLoc;\n      } else {\n        this.complete(record);\n      }\n\n      return ContinueSentinel;\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = record.arg;\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","/* @flow */\nclass AbstractTransaction { //eslint-disable-line no-unused-vars\n  constructor (store : OperationStore) {\n    this.store = store;\n  }\n  // Throws if operation is not expected.\n  *addOperation (op) {\n    var state = this.getState(op.id[0]);\n    if (op.id[1] === state.clock){\n      state.clock++;\n      yield* this.setState(state);\n      this.store.operationAdded(op);\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\ntype Listener = {\n  f : GeneratorFunction, // is called when all operations are available\n  missing : number // number of operations that are missing\n}\n\ntype Id = [string, number];\n\nclass AbstractOperationStore { //eslint-disable-line no-unused-vars\n  constructor () {\n    // E.g. this.listenersById[id] : Array<Listener>\n    this.listenersById = {};\n    // Execute the next time a transaction is requested\n    this.listenersByIdExecuteNow = [];\n    // A transaction is requested\n    this.listenersByIdRequestPending = false;\n    /* To make things more clear, the following naming conventions:\n       * ls : we put this.listenersById on ls\n       * l : Array<Listener>\n       * id : Id (can't use as property name)\n       * sid : String (converted from id via JSON.stringify\n                       so we can use it as a property name)\n\n      Always remember to first overwrite over\n      a property before you iterate over it!\n    */\n  }\n  // f is called as soon as every operation requested is available.\n  // Note that Transaction can (and should) buffer requests.\n  whenOperationsExist (ids : Array<Id>, f : GeneratorFunction, args : Array<any>) {\n    if (ids.length > 0) {\n      let listener : Listener = {\n        f: f,\n        args: args || [],\n        missing: ids.length\n      };\n\n      for (let id of ids) {\n        let sid = JSON.stringify(id);\n        let l = this.listenersById[sid];\n        if (l == null){\n          l = [];\n          this.listenersById[sid] = l;\n        }\n        l.push(listener);\n      }\n    } else {\n      this.listenersByIdExecuteNow.push({\n        f: f,\n        args: args || []\n      });\n    }\n\n    if (this.listenersByIdRequestPending){\n      return;\n    }\n\n    this.listenersByIdRequestPending = true;\n    var store = this;\n\n    this.requestTransaction(function*(){\n      var exeNow = store.listenersByIdExecuteNow;\n      store.listenersByIdExecuteNow = [];\n\n      var ls = store.listenersById;\n      store.listenersById = {};\n\n      store.listenersByIdRequestPending = false;\n\n      for (let listener of exeNow) {\n        yield* listener.f.apply(this, listener.args);\n      }\n\n      for (var sid in ls){\n        var l = ls[sid];\n        var id = JSON.parse(sid);\n        if ((yield* this.getOperation(id)) == null){\n          store.listenersById[sid] = l;\n        } else {\n          for (let listener of l) {\n            if (--listener.missing === 0){\n              yield* listener.f.apply(this, listener.args);\n            }\n          }\n        }\n      }\n    });\n  }\n  // called by a transaction when an operation is added\n  operationAdded (op) {\n    var l = this.listenersById[op.id];\n    if (l != null) {\n      for (var listener of l){\n        if (--listener.missing === 0){\n          this.whenOperationsExist([], listener.f, listener.args);\n        }\n      }\n    }\n  }\n}\n","/* @flow */\n\n// Op is anything that we could get from the OperationStore.\ntype Op = Object;\n\nvar Struct = {\n  Operation: {  //eslint-disable-line no-unused-vars\n    create: function*(op : Op, user : string) : Struct.Operation {\n      var state = yield* this.getState(user);\n      op.id = [user, state.clock];\n      return yield* this.addOperation(op);\n    }\n  },\n  Insert: {\n    create: function*( op : Op,\n                      user : string,\n                      left : Struct.Insert,\n                      right : Struct.Insert) : Struct.Insert {\n      op.left = left ? left.id : null;\n      op.origin = op.left;\n      op.right = right ? right.id : null;\n      op.type = \"Insert\";\n      yield* Struct.Operation.create(op, user);\n\n      if (left != null) {\n        left.right = op.id;\n        yield* this.setOperation(left);\n      }\n      if (right != null) {\n        right.left = op.id;\n        yield* this.setOperation(right);\n      }\n      return op;\n    },\n    requiredOps: function(op, ids){\n      ids.push(op.left);\n      ids.push(op.right);\n      return ids;\n    },\n    execute: function*(op){\n      return op;\n    }\n  }\n};\n","\ntype State = {\n  user: string,\n  clock: number\n};\n\ntype StateVector = Array<State>;\n\ntype StateSet = Object;\n\ntype IDBTransaction = Function;\ntype IDBObjectStore = Function;\ntype IDBRequest = Function;\ntype IDBCursor = Function;\ntype IDBKeyRange = Function;\n\ntype IDBOpenDBRequest = Function;\n\ndeclare var indexedDB : Object;\n\ndeclare var setTimeout : Function;\n\nvar GeneratorFunction = (function*(){}).constructor;\n\nvar IndexedDB = (function(){ //eslint-disable-line no-unused-vars\n  class Transaction extends AbstractTransaction { //eslint-disable-line\n    transaction: IDBTransaction;\n    sv: IDBObjectStore;\n    os: IDBObjectStore;\n    store: OperationStore;\n\n    constructor (store : OperationStore) {\n      super(store);\n      this.transaction = store.db.transaction([\"OperationStore\", \"StateVector\"], \"readwrite\");\n      this.sv = this.transaction.objectStore(\"StateVector\");\n      this.os = this.transaction.objectStore(\"OperationStore\");\n      this.buffer = {};\n    }\n    *setOperation (op) {\n      yield this.os.put(op);\n      this.buffer[JSON.stringify(op.id)] = op;\n      return op;\n    }\n    *getOperation (id) {\n      var op = this.buffer[JSON.stringify(id)];\n      if (op == null) {\n        op = yield this.os.get(id);\n        this.buffer[JSON.stringify(id)] = op;\n      }\n      return op;\n    }\n    *removeOperation (id) {\n      this.buffer[JSON.stringify(id)] = null;\n      return yield this.os.delete(id);\n    }\n    *setState (state : State) : State {\n      return yield this.sv.put(state);\n    }\n    *getState (user : string) : State {\n      var state;\n      if ((state = yield this.sv.get(user)) != null){\n        return state;\n      } else {\n        return {\n          user: user,\n          clock: 0\n        };\n      }\n    }\n    *getStateVector () : StateVector {\n      var stateVector = [];\n      var cursorResult = this.sv.openCursor();\n      var cursor;\n      while ((cursor = yield cursorResult) != null) {\n        stateVector.push(cursor.value);\n        cursor.continue();\n      }\n      return stateVector;\n    }\n    *getStateSet () : StateSet {\n      var sv : StateVector = yield* this.getStateVector();\n      var ss : StateSet = {};\n      for (var state of sv){\n        ss[state.user] = state.clock;\n      }\n      return ss;\n    }\n\n    *getOperations (startSS : StateSet) {\n      if (startSS == null){\n        startSS = {};\n      }\n      var ops = [];\n\n      var endSV : StateVector = yield* this.getStateVector();\n      for (var endState of endSV) {\n        var user = endState.user;\n        var startPos = startSS[user] || 0;\n        var endPos = endState.clock;\n        var range = IDBKeyRange.bound([user, startPos], [user, endPos]);\n        var cursorResult = this.os.openCursor(range);\n        var cursor;\n        while ((cursor = yield cursorResult) != null) {\n          ops.push(cursor.value);\n          cursor.continue();\n        }\n      }\n      return ops;\n    }\n  }\n  class OperationStore extends AbstractOperationStore { //eslint-disable-line no-undef\n    namespace: string;\n    ready: Promise;\n    whenReadyListeners: Array<Function>;\n    constructor (namespace : string) {\n      super();\n      this.namespace = namespace;\n      this.transactionQueue = {\n        queue: [],\n        onRequest: null\n      };\n\n      var store = this;\n\n      var tGen = (function *transactionGen(){\n        store.db = yield indexedDB.open(namespace, 3);\n        var transactionQueue = store.transactionQueue;\n\n        var transaction = null;\n        var cont = true;\n        while (cont) {\n          var request = yield transactionQueue;\n          transaction = new Transaction(store);\n\n          yield* request.call(transaction);/*\n          while (transactionQueue.queue.length > 0) {\n            yield* transactionQueue.queue.shift().call(transaction);\n          }*/\n        }\n      })();\n\n      function handleTransactions(t){ //eslint-disable-line no-unused-vars\n        var request = t.value;\n        if (t.done){\n        } else if (request.constructor === IDBRequest\n                   || request.constructor === IDBCursor ) {\n          request.onsuccess = function(){\n            handleTransactions(tGen.next(request.result));\n          };\n          request.onerror = function(err){\n            tGen.throw(err);\n          };\n        } else if (request === store.transactionQueue) {\n          if (request.queue.length > 0){\n            handleTransactions(tGen.next(request.queue.shift()));\n          } else {\n            request.onRequest = function(){\n              request.onRequest = null;\n              handleTransactions(tGen.next(request.queue.shift()));\n            };\n          }\n        } else if ( request.constructor === IDBOpenDBRequest ) {\n          request.onsuccess = function(event){\n            var db = event.target.result;\n            handleTransactions(tGen.next(db));\n          };\n          request.onerror = function(){\n            tGen.throw(\"Couldn't open IndexedDB database!\");\n          };\n          request.onupgradeneeded = function(event){\n            var db = event.target.result;\n            db.createObjectStore(\"OperationStore\", {keyPath: \"id\"});\n            db.createObjectStore(\"StateVector\", {keyPath: \"user\"});\n          };\n        } else {\n          tGen.throw(\"You can not yield this type!\");\n        }\n      }\n      handleTransactions(tGen.next());\n\n    }\n    requestTransaction (makeGen : Function) {\n      this.transactionQueue.queue.push(makeGen);\n      if (this.transactionQueue.onRequest != null) {\n        this.transactionQueue.onRequest();\n      }\n    }\n    *removeDatabase () {\n      this.db.close();\n      yield indexedDB.deleteDatabase(this.namespace);\n    }\n  }\n  return OperationStore;\n})();\n"],"sourceRoot":"/source/"}
\ No newline at end of file