From a1026bc3659aa87352b37e0504a076be7a328bbc Mon Sep 17 00:00:00 2001
From: Kevin Jahns <kevin.jahns@rwth-aachen.de>
Date: Wed, 8 Jul 2015 21:25:36 +0200
Subject: [PATCH] use RBTree for in-memory storage

---
 src/OperationStore.js                    |  4 +--
 src/OperationStores/Memory.js            | 31 +++++++++++------------
 src/OperationStores/RedBlackTree.js      |  2 --
 src/OperationStores/RedBlackTree.spec.js |  9 +++----
 src/Struct.js                            |  2 --
 src/y.js                                 |  4 +++
 src/y.spec.js                            | 32 +++++++++++++++---------
 y.js                                     |  5 ++--
 y.js.map                                 |  2 +-
 9 files changed, 48 insertions(+), 43 deletions(-)

diff --git a/src/OperationStore.js b/src/OperationStore.js
index 0dc4afdb..f6de0858 100644
--- a/src/OperationStore.js
+++ b/src/OperationStore.js
@@ -13,7 +13,7 @@ class AbstractTransaction { //eslint-disable-line no-unused-vars
     if (op.id[1] === state.clock){
       state.clock++;
       yield* this.setState(state);
-      yield* this.setOperation(op);
+      this.os.add(op);
       this.store.operationAdded(op);
       return true;
     } else if (op.id[1] < state.clock) {
@@ -23,7 +23,6 @@ class AbstractTransaction { //eslint-disable-line no-unused-vars
     }
   }
 }
-Y.AbstractTransaction = AbstractTransaction;
 
 type Listener = {
   f : GeneratorFunction, // is called when all operations are available
@@ -187,4 +186,3 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars
     ls.push(f);
   }
 }
-Y.AbstractOperationStore = AbstractOperationStore;
diff --git a/src/OperationStores/Memory.js b/src/OperationStores/Memory.js
index 71d1665e..2e5a11e1 100644
--- a/src/OperationStores/Memory.js
+++ b/src/OperationStores/Memory.js
@@ -29,14 +29,13 @@ Y.Memory = (function(){ //eslint-disable-line no-unused-vars
       this.os = store.os;
     }
     *setOperation (op) {
-      if (op.struct === "Insert" && op.right === undefined) {
-        throw new Error("here!");
-      }
-      this.os[JSON.stringify(op.id)] = op;
+      // TODO: you can remove this step! probs..
+      var n = this.os.findNode(op.id);
+      n.val = op;
       return op;
     }
     *getOperation (id) {
-      var op = this.os[JSON.stringify(id)];
+      var op = this.os.find(id);
       if (op == null) {
         throw new Error("Op does not exist..");
       } else {
@@ -44,7 +43,7 @@ Y.Memory = (function(){ //eslint-disable-line no-unused-vars
       }
     }
     *removeOperation (id) {
-      delete this.os[JSON.stringify(id)];
+      this.os.delete(id);
     }
     *setState (state : State) : State {
       this.ss[state.user] = state.clock;
@@ -61,7 +60,6 @@ Y.Memory = (function(){ //eslint-disable-line no-unused-vars
     }
     *getStateVector () : StateVector {
       var stateVector = [];
-
       for (var user in this.ss) {
         var clock = this.ss[user];
         stateVector.push({
@@ -75,6 +73,7 @@ Y.Memory = (function(){ //eslint-disable-line no-unused-vars
       return this.ss;
     }
     *getOperations (startSS : StateSet) {
+      // TODO: use bounds here!
       if (startSS == null){
         startSS = {};
       }
@@ -89,15 +88,15 @@ Y.Memory = (function(){ //eslint-disable-line no-unused-vars
         var startPos = startSS[user] || 0;
         var endPos = endState.clock;
 
-        for (var clock = startPos; clock <= endPos; clock++) {
-          var op = this.os[JSON.stringify([user, clock])];
-          if (op != null) {
-            op = Struct[op.struct].encode(op);
-            ops.push(yield* this.makeOperationReady.call(this, startSS, op));
-          }
-        }
+        this.os.iterate([user, startPos], [user, endPos], function(op){//eslint-disable-line
+          ops.push(Struct[op.struct].encode(op));
+        });
+      }
+      var res = [];
+      for (var op of ops) {
+        res.push(yield* this.makeOperationReady.call(this, startSS, op));
       }
-      return ops;
+      return res;
     }
     *makeOperationReady (ss, op) {
       // instead of ss, you could use currSS (a ss that increments when you add an operation)
@@ -119,7 +118,7 @@ Y.Memory = (function(){ //eslint-disable-line no-unused-vars
   class OperationStore extends AbstractOperationStore { //eslint-disable-line no-undef
     constructor (y) {
       super(y);
-      this.os = {};
+      this.os = new RBTree();
       this.ss = {};
     }
     requestTransaction (makeGen : Function) {
diff --git a/src/OperationStores/RedBlackTree.js b/src/OperationStores/RedBlackTree.js
index 25ecaeba..593b6b28 100644
--- a/src/OperationStores/RedBlackTree.js
+++ b/src/OperationStores/RedBlackTree.js
@@ -1,6 +1,4 @@
 
-
-
 class N {
   // A created node is always red!
   constructor (val) {
diff --git a/src/OperationStores/RedBlackTree.spec.js b/src/OperationStores/RedBlackTree.spec.js
index 5db96e46..750d1ed6 100644
--- a/src/OperationStores/RedBlackTree.spec.js
+++ b/src/OperationStores/RedBlackTree.spec.js
@@ -1,7 +1,7 @@
 /* @flow */
 /*eslint-env browser,jasmine,console */
 
-var numberOfTests = 10009;
+var numberOfRBTreeTests = 1000;
 
 function itRedNodesDoNotHaveBlackChildren (tree) {
   it("Red nodes do not have black children", function(){
@@ -107,16 +107,15 @@ describe("RedBlack Tree", function(){
 
     itRootNodeIsBlack(tree, []);
     itBlackHeightOfSubTreesAreEqual(tree, []);
-    itRedNodesDoNotHaveBlackChildren(tree, []);
   });
 
-  describe(`After adding&deleting (0.8/0.2) ${numberOfTests} times`, function () {
+  describe(`After adding&deleting (0.8/0.2) ${numberOfRBTreeTests} times`, function () {
     var elements = [];
     var tree = new RBTree();
-    for(var i = 0; i < numberOfTests; i++) {
+    for(var i = 0; i < numberOfRBTreeTests; i++) {
       var r = Math.random();
       if (r < 0.8) {
-        var obj = Math.floor(Math.random() * numberOfTests * 10000);
+        var obj = Math.floor(Math.random() * numberOfRBTreeTests * 10000);
         elements.push(obj);
         tree.add({id: obj});
       } else if (elements.length > 0) {
diff --git a/src/Struct.js b/src/Struct.js
index c879d4fa..c11f8134 100644
--- a/src/Struct.js
+++ b/src/Struct.js
@@ -382,5 +382,3 @@ var Struct = {
     }
   }
 };
-
-Y.Struct = Struct;
diff --git a/src/y.js b/src/y.js
index 26c780b1..07ddd473 100644
--- a/src/y.js
+++ b/src/y.js
@@ -31,3 +31,7 @@ class Y { //eslint-disable-line no-unused-vars
     };
   }
 }
+
+Y.AbstractTransaction = AbstractTransaction;
+Y.AbstractOperationStore = AbstractOperationStore;
+Y.Struct = Struct;
diff --git a/src/y.spec.js b/src/y.spec.js
index 49a79000..3e48643e 100644
--- a/src/y.spec.js
+++ b/src/y.spec.js
@@ -21,16 +21,17 @@ function getRandomNumber(n) {
   return Math.floor(Math.random() * n);
 }
 var keys = ["a", "b", "c", "d", "e", "f", 1, 2, 3, 4, 5, 6];
-var numberOfTests = 500;
+var numberOfYMapTests = 20;
 
-function applyRandomTransactions (users, transactions) {
+function applyRandomTransactions (users, transactions, numberOfTransactions) {
   function* randomTransaction (root) {
     var f = getRandom(transactions);
     yield* f(root);
   }
-  for(var i = 0; i < numberOfTests; i++) {
-    var r = getRandomNumber(100);
-    if (r >= 50) {
+  for(var i = 0; i < numberOfTransactions; i++) {
+    var r = Math.random();
+    if (r >= 0.9) {
+      // 10% chance to flush
       users[0].connector.flushOne();
     } else {
       getRandom(users).transact(randomTransaction);
@@ -53,8 +54,15 @@ function compareAllUsers(users){
     u1.transact(t1);
     u2.transact(t2);
     expect(s1).toEqual(s2);
-    var db1 = u1.db.os;
-    var db2 = u2.db.os;
+    var db1 = [];
+    var db2 = [];
+    u1.db.os.iterate(null, null, function(o){//eslint-disable-line
+      db1.push(o);
+    });
+    u2.db.os.iterate(null, null, function(o){//eslint-disable-line
+      db2.push(o);
+    });
+
     for (var key in db1) {
       expect(db1[key]).toEqual(db2[key]);
     }
@@ -195,13 +203,13 @@ describe("Yjs", function(){
         yield* map.val("getRandom(keys)", getRandomNumber());
       }
     ];
-    it(`succeed after ${numberOfTests} actions with flush before transactions`, function(){
-      this.users[0].connector.flushAll(); // TODO: Remove!!
-      applyRandomTransactions(this.users, randomMapTransactions);
+    it(`succeed after ${numberOfYMapTests} actions with flush before transactions`, function(){
+      this.users[0].connector.flushAll();
+      applyRandomTransactions(this.users, randomMapTransactions, numberOfYMapTests);
       compareAllUsers(this.users);
     });
-    it(`succeed after ${numberOfTests} actions without flush before transactions`, function(){
-      applyRandomTransactions(this.users, randomMapTransactions);
+    it(`succeed after ${numberOfYMapTests} actions without flush before transactions`, function(){
+      applyRandomTransactions(this.users, randomMapTransactions, numberOfYMapTests);
       compareAllUsers(this.users);
     });
   });
diff --git a/y.js b/y.js
index 24cabee5..f019474a 100644
--- a/y.js
+++ b/y.js
@@ -1,3 +1,4 @@
-"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 compareIds(e,t){return null==e||null==t?null==e&&null==t?!0:!1:e[0]===t[0]&&e[1]===t[1]?!0:!1}function _flushOne(){var e=[];for(var t in globalRoom.buffers)globalRoom.buffers[t].length>0&&e.push(t);if(e.length>0){var r=getRandom(e),n=globalRoom.buffers[r].shift(),i=globalRoom.users[r];return i.receiveMessage(n[0],n[1]),!0}return!1}function copyObject(e){var t={};for(var r in e)t[r]=e[r];return t}var _createClass=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();!function(e){function t(e,t,r,i){var a=Object.create((t||n).prototype);return a._invoke=c(e,r||null,new p(i||[])),a}function r(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(n){return{type:"throw",arg:n}}}function n(){}function i(){}function a(){}function s(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function o(e){this.arg=e}function u(e){function t(t,r){var n=e[t](r),s=n.value;return s instanceof o?Promise.resolve(s.arg).then(i,a):Promise.resolve(s).then(function(e){return n.value=e,n},a)}function r(e,r){var i=n?n.then(function(){return t(e,r)}):new Promise(function(n){n(t(e,r))});return n=i["catch"](s),i}"object"==typeof process&&process.domain&&(t=process.domain.bind(t));var n,i=t.bind(e,"next"),a=t.bind(e,"throw"),s=t.bind(e,"return");this._invoke=r}function c(e,t,n){var i=k;return function(a,s){if(i===w)throw new Error("Generator is already running");if(i===R)return d();for(;;){var o=n.delegate;if(o){if("return"===a||"throw"===a&&o.iterator[a]===g){n.delegate=null;var u=o.iterator["return"];if(u){var c=r(u,o.iterator,s);if("throw"===c.type){a="throw",s=c.arg;continue}}if("return"===a)continue}var c=r(o.iterator[a],o.iterator,s);if("throw"===c.type){n.delegate=null,a="throw",s=c.arg;continue}a="next",s=g;var l=c.arg;if(!l.done)return i=x,l;n[o.resultName]=l.value,n.next=o.nextLoc,n.delegate=null}if("next"===a)i===x?n.sent=s:delete n.sent;else if("throw"===a){if(i===k)throw i=R,s;n.dispatchException(s)&&(a="next",s=g)}else"return"===a&&n.abrupt("return",s);i=w;var c=r(e,t,n);if("normal"===c.type){i=n.done?R:x;var l={value:c.arg,done:n.done};if(c.arg!==S)return l;n.delegate&&"next"===a&&(s=g)}else"throw"===c.type&&(i=R,a="throw",s=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[y];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function i(){for(;++r<e.length;)if(b.call(e,r))return i.value=e[r],i.done=!1,i;return i.value=g,i.done=!0,i};return n.next=n}}return{next:d}}function d(){return{value:g,done:!0}}var g,b=Object.prototype.hasOwnProperty,y="function"==typeof Symbol&&Symbol.iterator||"@@iterator",v="object"==typeof module,m=e.regeneratorRuntime;if(m)return void(v&&(module.exports=m));m=e.regeneratorRuntime=v?module.exports:{},m.wrap=t;var k="suspendedStart",x="suspendedYield",w="executing",R="completed",S={},O=a.prototype=n.prototype;i.prototype=O.constructor=a,a.constructor=i,i.displayName="GeneratorFunction",m.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return t?t===i||"GeneratorFunction"===(t.displayName||t.name):!1},m.mark=function(e){return e.__proto__=a,e.prototype=Object.create(O),e},m.awrap=function(e){return new o(e)},s(u.prototype),m.async=function(e,r,n,i){var a=new u(t(e,r,n,i));return m.isGeneratorFunction(r)?a:a.next().then(function(e){return e.done?e.value:a.next()})},s(O),O[y]=function(){return this},O.toString=function(){return"[object Generator]"},m.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}},m.values=h,p.prototype={constructor:p,reset:function(){this.prev=0,this.next=0,this.sent=g,this.done=!1,this.delegate=null,this.tryEntries.forEach(f);for(var e,t=0;b.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 a.type="throw",a.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n],a=i.completion;if("root"===i.tryLoc)return t("end");if(i.tryLoc<=this.prev){var s=b.call(i,"catchLoc"),o=b.call(i,"finallyLoc");if(s&&o){if(this.prev<i.catchLoc)return t(i.catchLoc,!0);if(this.prev<i.finallyLoc)return t(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return t(i.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return t(i.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&&b.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var i=n;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?this.next=i.finallyLoc:this.complete(a),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 i=n.arg;f(r)}return i}}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 GeneratorFunction=regeneratorRuntime.mark(function e(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},e,this)}).constructor,Y=function(){function e(t){_classCallCheck(this,e),this.db=new e[t.db.name](this,t.db),this.connector=new e[t.connector.name](this,t.connector),this.db.requestTransaction(regeneratorRuntime.mark(function r(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.addOperation({id:["_",0],struct:"Map",map:{}}),"t0",1);case 1:case"end":return e.stop()}},r,this)}))}return e.prototype.transact=function(e){if(e.constructor!==GeneratorFunction)throw new Error("y.transact requires a Generator function! E.g. function*(){/*..*/}");this.db.requestTransaction(e)},e.prototype.destroy=function(){this.connector.disconnect(),this.db.removeDatabase(),this.connector=null,this.db=null,this.transact=function(){throw new Error("Remember?, you destroyed this type ;)")}},e}(),AbstractConnector=function(){function e(t,r){if(_classCallCheck(this,e),this.y=t,null==r&&(r={}),null==r.role||"master"===r.role)this.role="master";else{if("slave"!==r.role)throw new Error("Role must be either 'master' or 'slave'!");this.role="slave"}this.role=r.role,this.connections={},this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null,this.syncingClients=[],this.forwardToSyncingClients=r.forwardToSyncingClients===!1?!1:!0,this.debug=r.debug?!0:!1}return e.prototype.setUserId=function(e){this.userId=e,this.y.db.setUserId(e)},e.prototype.onUserEvent=function(e){this.userEventListeners.push(e)},e.prototype.userLeft=function(e){delete this.connections[e],e===this.currentSyncTarget&&(this.currentSyncTarget=null,this.findNextSyncTarget());for(var t=this.userEventListeners,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var a=i;a({action:"userLeft",user:e})}},e.prototype.userJoined=function(e,t){if(null==t)throw new Error("You must specify the role of the joined user!");if(null!=this.connections[e])throw new Error("This user already joined!");this.connections[e]={isSynced:!1,role:t};for(var r=this.userEventListeners,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var a;if(n){if(i>=r.length)break;a=r[i++]}else{if(i=r.next(),i.done)break;a=i.value}var s=a;s({action:"userJoined",user:e,role:t})}null==this.currentSyncTarget&&this.findNextSyncTarget()},e.prototype.whenSynced=function(e){this.isSynced===!0?e():this.whenSyncedListeners.push(e)},e.prototype.findNextSyncTarget=function(){if(null!=this.currentSyncTarget&&this.connections[this.currentSyncTarget].isSynced===!1)throw new Error("The current sync has not finished!");var e=null;for(var t in this.connections)if(e=this.connections[t],!e.isSynced)break;if(null!=e){var r=this;this.y.db.requestTransaction(regeneratorRuntime.mark(function u(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r.currentSyncTarget=t,e.t0=r,e.t1=t,e.delegateYield(this.getStateVector(),"t2",4);case 4:e.t3=e.t2,e.t4={type:"sync step 1",stateVector:e.t3},e.t0.send.call(e.t0,e.t1,e.t4);case 7:case"end":return e.stop()}},u,this)}))}if(!this.isSynced){this.isSynced=!0;for(var n=this.whenSyncedListeners,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();;){var s;if(i){if(a>=n.length)break;s=n[a++]}else{if(a=n.next(),a.done)break;s=a.value}var o=s;o()}this.whenSyncedListeners=null}return!1},e.prototype.receiveMessage=function(e,t){var r=this;if(this.debug&&console.log(e+" -> "+this.userId+": "+JSON.stringify(t)),"sync step 1"===t.type)!function(){var n=r;r.y.db.requestTransaction(regeneratorRuntime.mark(function i(){var r,a;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.delegateYield(this.getOperations(t.stateVector),"t0",1);case 1:return r=i.t0,i.delegateYield(this.getStateVector(),"t1",3);case 3:a=i.t1,n.send(e,{type:"sync step 2",os:r,stateVector:a}),this.forwardToSyncingClients&&(n.syncingClients.push(e),setTimeout(function(){n.syncingClients=n.syncingClients.filter(function(t){return t!==e}),n.send(e,{type:"sync done"})},n.syncingClientDuration));case 6:case"end":return i.stop()}},i,this)}))}();else if("sync step 2"===t.type)!function(){r.y.db.apply(t.os);var e=r;r.y.db.requestTransaction(regeneratorRuntime.mark(function n(){var r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(this.getOperations(t.stateVector),"t0",1);case 1:r=n.t0,r.length>0&&e.broadcast({type:"update",ops:r});case 3:case"end":return n.stop()}},n,this)}))}();else if("sync done"===t.type)this.connections[e].isSynced=!0,this.findNextSyncTarget();else if("update"===t.type){if(this.forwardToSyncingClients)for(var n=this.syncingClients,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();;){var s;if(i){if(a>=n.length)break;s=n[a++]}else{if(a=n.next(),a.done)break;s=a.value}var o=s;this.send(o,t)}this.y.db.apply(t.ops)}},e.prototype.parseMessageFromXml=function(e){function t(e){var t=!0;e:for(;t;){var n=e;i=a=s=i=o=u=void 0,t=!1;for(var i=n.children,a=Array.isArray(i),s=0,i=a?i:i[Symbol.iterator]();;){var o;if(a){if(s>=i.length)break;o=i[s++]}else{if(s=i.next(),s.done)break;o=s.value}var u=o;if("true"===u.getAttribute("isArray")){e=u,t=!0;continue e}return r(u)}}}function r(e){var n={};for(var i in e.attrs){var a=e.attrs[i],s=parseInt(a);n[i]=isNaN(s)||""+s!==a?a:s}for(var o in e.children){var u=o.name;n[u]="true"===o.getAttribute("isArray")?t(o):r(o)}return n}r(e)},e.prototype.encodeMessageToXml=function(e,t){function r(e,t){for(var i in t){var a=t[i];null==i||(a.constructor===Object?r(e.c(i),a):a.constructor===Array?n(e.c(i),a):e.setAttribute(i,a))}}function n(e,t){e.setAttribute("isArray","true");for(var i=t,a=Array.isArray(i),s=0,i=a?i:i[Symbol.iterator]();;){var o;if(a){if(s>=i.length)break;o=i[s++]}else{if(s=i.next(),s.done)break;o=s.value}var u=o;u.constructor===Object?r(e.c("array-element"),u):n(e.c("array-element"),u)}}if(t.constructor===Object)r(e.c("y",{xmlns:"http://y.ninja/connector-stanza"}),t);else{if(t.constructor!==Array)throw new Error("I can't encode this json!");n(e.c("y",{xmlns:"http://y.ninja/connector-stanza"}),t)}},e}(),AbstractTransaction=function(){function e(t){_classCallCheck(this,e),this.store=t}return e.prototype.getType=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.getOperation(e),"t0",1);case 1:return r=t.t0,t.abrupt("return",new Y[r.type].Create(r));case 3:case"end":return t.stop()}},t,this)}),e.prototype.addOperation=regeneratorRuntime.mark(function r(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.getState(e.id[0]),"t0",1);case 1:if(t=r.t0,e.id[1]!==t.clock){r.next=10;break}return t.clock++,r.delegateYield(this.setState(t),"t1",5);case 5:return r.delegateYield(this.setOperation(e),"t2",6);case 6:return this.store.operationAdded(e),r.abrupt("return",!0);case 10:if(!(e.id[1]<t.clock)){r.next=14;break}return r.abrupt("return",!1);case 14:throw new Error("Operations must arrive in order!");case 15:case"end":return r.stop()}},r,this)}),e}();Y.AbstractTransaction=AbstractTransaction;var AbstractOperationStore=function(){function e(t){_classCallCheck(this,e),this.y=t,this.parentListeners={},this.parentListenersRequestPending=!1,this.parentListenersActivated={},this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1}return e.prototype.setUserId=function(e){this.userId=e},e.prototype.apply=function(e){for(var t in e){var r=e[t],n=Y.Struct[r.struct].requiredOps(r);this.whenOperationsExist(n,r)}},e.prototype.whenOperationsExist=function(e,t){if(e.length>0){var r={op:t,missing:e.length};for(var n in e){var i=e[n],a=JSON.stringify(i),s=this.listenersById[a];null==s&&(s=[],this.listenersById[a]=s),s.push(r)}}else this.listenersByIdExecuteNow.push({op:t});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var o=this;this.requestTransaction(regeneratorRuntime.mark(function u(){var e,t,r,n,i,a,s,c;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:e=o.listenersByIdExecuteNow,o.listenersByIdExecuteNow=[],t=o.listenersById,o.listenersById={},o.listenersByIdRequestPending=!1,u.t0=regeneratorRuntime.keys(e);case 6:if((u.t1=u.t0()).done){u.next=12;break}return r=u.t1.value,n=e[r].op,u.delegateYield(Struct[n.struct].execute.call(this,n),"t2",10);case 10:u.next=6;break;case 12:u.t3=regeneratorRuntime.keys(t);case 13:if((u.t4=u.t3()).done){u.next=34;break}return i=u.t4.value,a=t[i],s=JSON.parse(i),u.delegateYield(this.getOperation(s),"t5",18);case 18:if(u.t6=u.t5,null!=u.t6){u.next=23;break}o.listenersById[i]=a,u.next=32;break;case 23:u.t7=regeneratorRuntime.keys(a);case 24:if((u.t8=u.t7()).done){u.next=32;break}if(r=u.t8.value,c=a[r],n=c.op,0!==--c.missing){u.next=30;break}return u.delegateYield(Struct[n.struct].execute.call(this,n),"t9",30);case 30:u.next=24;break;case 32:u.next=13;break;case 34:case"end":return u.stop()}},u,this)}))}},e.prototype.operationAdded=function(e){var t=JSON.stringify(e.id),r=this.listenersById[t];if(delete this.listenersById[t],null!=r)for(var n in r){var i=r[n];0===--i.missing&&this.whenOperationsExist([],i.op)}var a=this.parentListeners[e.parent];if(!this.parentListenersRequestPending&&null!=a&&0!==a.length){var s=this.parentListenersActivated[JSON.stringify(e.parent)];null==s&&(s=[],this.parentListenersActivated[JSON.stringify(e.parent)]=s),s.push(e),this.parentListenersRequestPending=!0;var o=this;this.requestTransaction(regeneratorRuntime.mark(function u(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:o.parentListenersRequestPending=!1,e=o.parentListenersActivated,o.parentListenersActivated={},n.t0=regeneratorRuntime.keys(e);case 4:if((n.t1=n.t0()).done){n.next=11;break}return t=n.t1.value,n.delegateYield(this.getOperation(t),"t2",7);case 7:r=n.t2,Struct[r.struct].notifyObservers(e[t]),n.next=4;break;case 11:case"end":return n.stop()}},u,this)}))}},e.prototype.removeParentListener=function(e,t){var r=this.parentListeners[e];null!=r&&(this.parentListeners[e]=r.filter(function(e){return t!==e}))},e.prototype.addParentListener=function(e,t){var r=this.parentListeners[JSON.stringify(e)];null==r&&(r=[],this.parentListeners[JSON.stringify(e)]=r),r.push(t)},e}();Y.AbstractOperationStore=AbstractOperationStore;var Struct={Operation:{create:regeneratorRuntime.mark(function t(e){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return r=this.store.y.connector.userId,t.delegateYield(this.getState(r),"t0",2);case 2:return n=t.t0,e.id=[r,n.clock],t.delegateYield(this.addOperation(e),"t1",5);case 5:if(t.t2=t.t1,t.t2!==!1){t.next=8;break}throw new Error("This is highly unexpected :(");case 8:return this.store.y.connector.broadcast({type:"update",ops:[Struct[e.struct].encode(e)]}),t.abrupt("return",e);case 10:case"end":return t.stop()}},t,this)})},Insert:{create:regeneratorRuntime.mark(function r(e){var t,n,i,a,s;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(void 0!==e.left&&void 0!==e.right&&void 0!==e.parent){r.next=2;break}throw new Error("You must define left, right, and parent!");case 2:return e.origin=e.left,e.struct="Insert",r.delegateYield(Struct.Operation.create.call(this,e),"t0",5);case 5:if(null==e.left){r.next=10;break}return r.delegateYield(this.getOperation(e.left),"t1",7);case 7:return t=r.t1,t.right=e.id,r.delegateYield(this.setOperation(t),"t2",10);case 10:if(null==e.right){r.next=15;break}return r.delegateYield(this.getOperation(e.right),"t3",12);case 12:return n=r.t3,n.left=e.id,r.delegateYield(this.setOperation(n),"t4",15);case 15:return r.delegateYield(this.getOperation(e.parent),"t5",16);case 16:if(i=r.t5,null==e.parentSub){r.next=23;break}if(!compareIds(i.map[e.parentSub],e.right)){r.next=21;break}return i.map[e.parentSub]=e.id,r.delegateYield(this.setOperation(i),"t6",21);case 21:r.next=29;break;case 23:if(a=compareIds(i.start,e.right),s=compareIds(i.end,e.left),!a&&!s){r.next=29;break}return a&&(i.start=e.id),s&&(i.end=e.id),r.delegateYield(this.setOperation(i),"t7",29);case 29:return r.abrupt("return",e);case 30:case"end":return r.stop()}},r,this)}),encode:function(e){return e},requiredOps:function(e){var t=[];return null!=e.left&&t.push(e.left),null!=e.right&&t.push(e.right),null==e.right&&null==e.left&&t.push(e.parent),null!=e.opContent&&t.push(e.opContent),t},getDistanceToOrigin:regeneratorRuntime.mark(function n(e){var t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=e.left){n.next=4;break}return n.abrupt("return",0);case 4:return t=0,n.delegateYield(this.getOperation(e.left),"t0",6);case 6:r=n.t0;case 7:if(compareIds(e.origin,r?r.id:null)){n.next=17;break}if(t++,null!=r.left){n.next=13;break}return n.abrupt("break",17);case 13:return n.delegateYield(this.getOperation(r.left),"t1",14);case 14:r=n.t1;case 15:n.next=7;break;case 17:return n.abrupt("return",t);case 18:case"end":return n.stop()}},n,this)}),execute:regeneratorRuntime.mark(function i(e){var t,r,n,a,s,o,u,c,l;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.delegateYield(Struct.Insert.getDistanceToOrigin.call(this,e),"t0",1);case 1:if(r=t=i.t0,null==e.left){i.next=14;break}return i.delegateYield(this.getOperation(e.left),"t1",4);case 4:if(n=i.t1,null!=n.right){i.next=9;break}i.t2=null,i.next=11;break;case 9:return i.delegateYield(this.getOperation(n.right),"t3",10);case 10:i.t2=i.t3;case 11:n=i.t2,i.next=25;break;case 14:return i.delegateYield(this.getOperation(e.parent),"t4",15);case 15:if(a=i.t4,o=e.parentSub?a.map[e.parentSub]:a.start,null!=o){i.next=21;break}i.t5=null,i.next=23;break;case 21:return i.delegateYield(this.getOperation(o),"t6",22);case 22:i.t5=i.t6;case 23:s=i.t5,n=s;case 25:if(null==n||compareIds(n.id,e.right)){i.next=48;break}return i.delegateYield(Struct.Insert.getDistanceToOrigin.call(this,n),"t7",28);case 28:if(u=i.t7,u!==t){i.next=33;break}n.id[0]<e.id[0]&&(e.left=n.id,r=t+1),i.next=38;break;case 33:if(!(t>u)){i.next=37;break}u>=t-r&&(e.left=n.id,r=t+1),i.next=38;break;case 37:return i.abrupt("break",51);case 38:if(t++,!n.right){i.next=44;break}return i.delegateYield(this.getOperation(n.right),"t9",41);case 41:i.t8=i.t9,i.next=45;break;case 44:i.t8=null;case 45:n=i.t8,i.next=49;break;case 48:return i.abrupt("break",51);case 49:i.next=25;break;case 51:if(c=null,l=null,i.t10=a,i.t10){i.next=57;break}return i.delegateYield(this.getOperation(e.parent),"t11",56);case 56:i.t10=i.t11;case 57:if(a=i.t10,null==e.left){i.next=70;break}return i.delegateYield(this.getOperation(e.left),"t12",60);case 60:return c=i.t12,e.right=c.right,i.delegateYield(this.addOperation(e),"t13",63);case 63:if(i.t14=i.t13,i.t14!==!1){i.next=66;break}return i.abrupt("return");case 66:return c.right=e.id,i.delegateYield(this.setOperation(c),"t15",68);case 68:i.next=75;break;case 70:return e.right=e.parentSub?a.map[e.parentSub]||null:a.start,i.delegateYield(this.addOperation(e),"t16",72);case 72:if(i.t17=i.t16,i.t17!==!1){i.next=75;break}return i.abrupt("return");case 75:if(null==e.right){i.next=80;break}return i.delegateYield(this.getOperation(e.right),"t18",77);case 77:return l=i.t18,l.left=e.id,i.delegateYield(this.setOperation(l),"t19",80);case 80:if(null==e.parentSub){i.next=86;break}if(null!=c){i.next=84;break}return a.map[e.parentSub]=e.id,i.delegateYield(this.setOperation(a),"t20",84);case 84:i.next=90;break;case 86:if(null!=l&&null!=c){i.next=90;break}return null==l&&(a.end=e.id),null==c&&(a.start=e.id),i.delegateYield(this.setOperation(a),"t21",90);case 90:case"end":return i.stop()}},i,this)})},List:{create:regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.start=null,e.end=null,e.struct="List",t.delegateYield(Struct.Operation.create.call(this,e),"t0",4);case 4:return t.abrupt("return",t.t0);case 5:case"end":return t.stop()}},a,this)}),encode:function(e){return{struct:"List",id:e.id,type:e.type}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function s(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.start=null,e.end=null,t.delegateYield(this.addOperation(e),"t0",3);case 3:if(t.t1=t.t0,t.t1!==!1){t.next=6;break}return t.abrupt("return");case 6:case"end":return t.stop()}},s,this)}),ref:regeneratorRuntime.mark(function o(e,t){var r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=e.start){n.next=2;break}return n.abrupt("return",null);case 2:return n.delegateYield(this.getOperation(e.start),"t0",3);case 3:r=n.t0;case 4:if(0===t||null==r.right){n.next=10;break}return n.delegateYield(this.getOperation(r.right),"t1",6);case 6:r=n.t1,t--,n.next=4;break;case 10:return n.abrupt("return",r);case 11:case"end":return n.stop()}},o,this)}),map:regeneratorRuntime.mark(function u(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:e=e.start,r=[];case 2:if(null==e){i.next=9;break}return i.delegateYield(this.getOperation(e),"t0",4);case 4:n=i.t0,r.push(t(n.content)),e=n.right,i.next=2;break;case 9:return i.abrupt("return",r);case 10:case"end":return i.stop()}},u,this)}),insert:regeneratorRuntime.mark(function c(e,t,r){var n,i,a,s,c;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.delegateYield(Struct.List.ref.call(this,e,t),"t0",1);case 1:n=o.t0,i=null!=n?n.id:null,a=null!=n?n.left:null,o.t1=regeneratorRuntime.keys(r);case 5:if((o.t2=o.t1()).done){o.next=12;break}return s=o.t2.value,c={left:a,right:i,content:r[s],parent:e.id},o.delegateYield(Struct.Insert.create.call(this,c),"t3",9);case 9:a=o.t3.id,o.next=5;break;case 12:case"end":return o.stop()}},c,this)})},Map:{create:regeneratorRuntime.mark(function l(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.map={},e.struct="Map",t.delegateYield(Struct.Operation.create.call(this,e),"t0",3);case 3:return t.abrupt("return",t.t0);case 4:case"end":return t.stop()}},l,this)}),encode:function(e){return{struct:"Map",type:e.type,id:e.id}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function f(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.addOperation(e),"t0",1);case 1:if(t.t1=t.t0,t.t1!==!1){t.next=4;break}return t.abrupt("return");case 4:case"end":return t.stop()}},f,this)}),get:regeneratorRuntime.mark(function p(e,t){var r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(this.getOperation(e.map[t]),"t0",1);case 1:if(r=n.t0,null!=r){n.next=6;break}n.t1=void 0,n.next=13;break;case 6:if(null!=r.opContent){n.next=10;break}n.t2=r.content,n.next=12;break;case 10:return n.delegateYield(this.getType(r.opContent),"t3",11);case 11:n.t2=n.t3;case 12:n.t1=n.t2;case 13:return n.abrupt("return",n.t1);case 14:case"end":return n.stop()}},p,this)}),set:regeneratorRuntime.mark(function h(e,t,r){var n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return n={left:null,right:e.map[t]||null,parent:e.id,parentSub:t},null!=r&&null!=r._model&&null!=(i=r._model.id)&&2===i.length?n.opContent=i:n.content=r,a.delegateYield(Struct.Insert.create.call(this,n),"t0",3);case 3:case"end":return a.stop()}},h,this)})}};Y.Struct=Struct;var globalRoom={users:{},buffers:{},removeUser:function(e){for(var t in this.users)this.users[t].userLeft(e);delete this.users[e],delete this.buffers[e]},addUser:function(e){this.users[e.userId]=e,this.buffers[e.userId]=[];for(var t in this.users)if(t!==e.userId){var r=this.users[t];r.userJoined(e.userId,"master"),e.userJoined(r.userId,"master")}}},userIdCounter=0,Test=function(e){function t(r,n){if(_classCallCheck(this,t),void 0===n)throw new Error("Options must not be undefined!");n.role="master",n.forwardToSyncingClients=!1,e.call(this,r,n),this.setUserId(userIdCounter++ +""),globalRoom.addUser(this),this.globalRoom=globalRoom}return _inherits(t,e),t.prototype.send=function(e,t){globalRoom.buffers[e].push(JSON.parse(JSON.stringify([this.userId,t])))},t.prototype.broadcast=function(e){for(var t in globalRoom.buffers)globalRoom.buffers[t].push(JSON.parse(JSON.stringify([this.userId,e])))},t.prototype.disconnect=function(){globalRoom.removeUser(this.userId)},t.prototype.flushAll=function(){for(var e=!0;e;)e=_flushOne()},t.prototype.flushOne=function(){_flushOne()},t}(AbstractConnector);Y.Test=Test;var WebRTC=function(e){function t(r){if(_classCallCheck(this,t),void 0===r)throw new Error("Options must not be undefined!");e.call(this,{role:"slave"});var n=r.room;null==r.url&&(r.url="https://yatta.ninja:8888");var i=new SimpleWebRTC(r);this.swr=i;var a=this;i.once("connectionReady",function(e){i.joinRoom(n),i.once("joinedRoom",function(){a.setUserId(e);var t;for(t in a.swr.webrtc.peers)a.userJoined(a.swr.webrtc.peers[t].id,"master");i.on("channelMessage",function(e,t,r){null!=r.type&&a.receiveMessage(e.id,r.payload)})}),i.on("createdPeer",function(e){a.userJoined(e.id,"master")}),i.on("peerStreamRemoved",function(e){a.userLeft(e.id)})})}return _inherits(t,e),t.prototype.send=function r(e,t){var n=this,r=function i(){var r,a=n.swr.webrtc.getPeers(e)[0];a&&(r=a.sendDirectly("simplewebrtc","yjs",t)),r||setTimeout(i,500)};r()},t.prototype.broadcast=function(e){this.swr.sendDirectlyToAll("simplewebrtc","yjs",e)},t}(AbstractConnector);Y.WebRTC=WebRTC,Y.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 i(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()}},i,this)}),t.prototype.setState=regeneratorRuntime.mark(function a(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()}},a,this)}),t.prototype.getState=regeneratorRuntime.mark(function s(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()}},s,this)}),t.prototype.getStateVector=regeneratorRuntime.mark(function o(){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()}},o,this)}),t.prototype.getStateSet=regeneratorRuntime.mark(function u(){var e,t,r,n,i,a,s;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.delegateYield(this.getStateVector(),"t0",1);case 1:e=o.t0,t={},r=e,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();case 4:if(!n){o.next=10;break}if(!(i>=r.length)){o.next=7;break}return o.abrupt("break",18);case 7:a=r[i++],o.next=14;break;case 10:if(i=r.next(),!i.done){o.next=13;break}return o.abrupt("break",18);case 13:a=i.value;case 14:s=a,t[s.user]=s.clock;case 16:o.next=4;break;case 18:return o.abrupt("return",t);case 19:case"end":return o.stop()}},u,this)}),t.prototype.getOperations=regeneratorRuntime.mark(function c(e){var t,r,n,i,a,s,o,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,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();case 5:if(!i){c.next=11;break}if(!(a>=n.length)){c.next=8;break}return c.abrupt("break",31);case 8:s=n[a++],c.next=15;break;case 11:if(a=n.next(),!a.done){c.next=14;break}return c.abrupt("break",31);case 14:s=a.value;case 15:o=s,u=o.user,l=e[u]||0,f=o.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,i){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===s.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;try{t.createObjectStore("OperationStore",{keyPath:"id"}),t.createObjectStore("StateVector",{keyPath:"user"})}catch(r){}}):o["throw"]("You can not yield this type!"))}if(_classCallCheck(this,r),t.call(this,n),null==i&&(i={}),null==i.namespace||"string"!=typeof i.namespace)throw new Error("IndexedDB: expect a string (opts.namespace)!");this.namespace=i.namespace,this.idbVersion=null!=i.idbVersion?i.idbVersion:5,this.transactionQueue={queue:[],onRequest:null};var s=this,o=regeneratorRuntime.mark(function u(){var t,r,n,a;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,indexedDB.open(i.namespace,s.idbVersion);case 2:s.db=o.sent,t=s.transactionQueue,r=null,n=!0;case 6:if(!n){o.next=14;break}return o.next=9,t;case 9:return a=o.sent,r=new e(s),o.delegateYield(a.call(r,a),"t0",12);case 12:o.next=6;break;case 14:case"end":return o.stop()}},u,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}(),Y.Memory=function(){var e=function(e){function t(r){_classCallCheck(this,t),e.call(this,r),this.ss=r.ss,this.os=r.os}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:if("Insert"!==e.struct||void 0!==e.right){t.next=2;break}throw new Error("here!");case 2:return this.os[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.os[JSON.stringify(e)],null!=t){r.next=5;break}throw new Error("Op does not exist..");case 5:return r.abrupt("return",t);case 6:case"end":return r.stop()}},n,this)}),t.prototype.removeOperation=regeneratorRuntime.mark(function i(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:delete this.os[JSON.stringify(e)];case 1:case"end":return t.stop()}},i,this)}),t.prototype.setState=regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:this.ss[e.user]=e.clock;case 1:case"end":return t.stop()}},a,this)}),t.prototype.getState=regeneratorRuntime.mark(function s(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t=this.ss[e],null==t&&(t=0),r.abrupt("return",{user:e,clock:t});case 3:case"end":return r.stop()}},s,this)}),t.prototype.getStateVector=regeneratorRuntime.mark(function o(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:e=[];for(t in this.ss)r=this.ss[t],e.push({user:t,clock:r});return n.abrupt("return",e);case 3:case"end":return n.stop()}},o,this)}),t.prototype.getStateSet=regeneratorRuntime.mark(function u(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.ss);case 1:case"end":return e.stop()}},u,this)}),t.prototype.getOperations=regeneratorRuntime.mark(function c(e){var t,r,n,i,a,s,o,u,l,f,p,h;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,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();case 5:if(!i){c.next=11;break}if(!(a>=n.length)){c.next=8;break}return c.abrupt("break",35);case 8:s=n[a++],c.next=15;break;case 11:if(a=n.next(),!a.done){c.next=14;break}return c.abrupt("break",35);case 14:s=a.value;case 15:if(o=s,u=o.user,"_"!==u){c.next=19;break}return c.abrupt("continue",33);case 19:l=e[u]||0,f=o.clock,p=l;case 22:if(!(f>=p)){c.next=33;break}if(h=this.os[JSON.stringify([u,p])],null==h){c.next=30;break}return h=Struct[h.struct].encode(h),c.t1=t,c.delegateYield(this.makeOperationReady.call(this,e,h),"t2",28);case 28:c.t3=c.t2,c.t1.push.call(c.t1,c.t3);case 30:p++,c.next=22;break;case 33:c.next=5;break;case 35:return c.abrupt("return",t);case 36:case"end":return c.stop()}},c,this)}),t.prototype.makeOperationReady=regeneratorRuntime.mark(function l(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:n=t;case 1:if(null==n.right){i.next=9;break}return i.delegateYield(this.getOperation(n.right),"t0",3);case 3:if(n=i.t0,r=e[n.id[0]],!(null!=r&&n.id[1]<r)){i.next=7;break}return i.abrupt("break",9);case 7:i.next=1;break;case 9:return t=copyObject(t),t.right=null==n?null:n.id,i.abrupt("return",t);case 12:case"end":return i.stop()}},l,this)}),t}(AbstractTransaction),t=function(t){function r(e){_classCallCheck(this,r),t.call(this,e),this.os={},this.ss={}}return _inherits(r,t),r.prototype.requestTransaction=function(t){for(var r=new e(this),n=t.call(r,new Y.Map.Create(["_",0])),i=n.next();!i.done;){if("transaction"!==i.value)throw new Error("You may not yield this type. (Maybe you meant to use 'yield*'?)");i=n.next(r)}},r.prototype.removeDatabase=regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:delete this.os;case 1:case"end":return e.stop()}},n,this)}),r}(AbstractOperationStore);return t}();var N=function(){function e(t){if(_classCallCheck(this,e),this.val=t,this.color=!0,this._left=null,this._right=null,this._parent=null,null===t.id)throw new Error("You must define id!")}return e.prototype.isRed=function(){return this.color},e.prototype.isBlack=function(){return!this.color},e.prototype.redden=function(){return this.color=!0,this},e.prototype.blacken=function(){return this.color=!1,this},e.prototype.rotateLeft=function(e){var t=this.parent,r=this.right,n=this.right.left;if(r.left=this,this.right=n,null===t)e.root=r,r._parent=null;else if(t.left===this)t.left=r;else{if(t.right!==this)throw new Error("The elements are wrongly connected!");t.right=r}},e.prototype.next=function(){if(null!==this.right){for(var e=this.right;null!==e.left;)e=e.left;return e}for(var t=this;null!==t.parent&&t!==t.parent.left;)t=t.parent;return t.parent},e.prototype.rotateRight=function(e){var t=this.parent,r=this.left,n=this.left.right;if(r.right=this,this.left=n,null===t)e.root=r,r._parent=null;else if(t.left===this)t.left=r;else{if(t.right!==this)throw new Error("The elements are wrongly connected!");t.right=r}},e.prototype.getUncle=function(){return this.parent===this.parent.parent.left?this.parent.parent.right:this.parent.parent.left},_createClass(e,[{key:"grandparent",get:function(){return this.parent.parent}},{key:"parent",get:function(){return this._parent}},{key:"sibling",get:function(){return this===this.parent.left?this.parent.right:this.parent.left}},{key:"left",get:function(){return this._left},set:function(e){null!==e&&(e._parent=this),this._left=e}},{key:"right",get:function(){return this._right},set:function(e){null!==e&&(e._parent=this),this._right=e}}]),e}(),RBTree=function(){function e(){_classCallCheck(this,e),this.root=null}return e.prototype.findNodeWithLowerBound=function(e){var t=this.root;if(null===t)return!1;for(;;)if((null===e||e<t.val.id)&&null!==t.left)t=t.left;else{if(!(t.val.id<e))return t;if(null===t.right)return t.next();t=t.right}},e.prototype.iterate=function(e,t,r){for(var n=this.findNodeWithLowerBound(e);null!==n&&(null===t||n.val.id<=t);)r(n.val),n=n.next();return!0},e.prototype.find=function(e){return this.findNode(e).val},e.prototype.findNode=function(e){var t=this.root;if(null===t)return!1;for(;;){if(null===t)return!1;if(e<t.val.id)t=t.left;else{if(!(t.val.id<e))return t;t=t.right}}},e.prototype["delete"]=function(e){var t=this.findNode(e);if(null!==t.left&&null!==t.right){for(var r=t.left;null!==r.right;)r=r.right;t.val=r.val,t=r}var n,i=t.left||t.right;if(null===i?(n=!0,i=new N({id:0}),i.blacken(),t.right=i):n=!1,null===t.parent)return void(n?this.root=null:(this.root=i,i.blacken(),i._parent=null));if(t.parent.left===t)t.parent.left=i;else{if(t.parent.right!==t)throw new Error("Impossible!");t.parent.right=i}if(t.isBlack()&&(i.isRed()?i.blacken():this._fixDelete(i)),this.root.blacken(),n)if(i.parent.left===i)i.parent.left=null;else{if(i.parent.right!==i)throw new Error("Impossible #3");i.parent.right=null}},e.prototype._fixDelete=function(e){function t(e){return null!==e?e.isBlack():!0}function r(e){return null!==e?e.isRed():!1}if(null!==e.parent){var n=e.sibling;if(r(n)){if(e.parent.redden(),n.blacken(),e===e.parent.left)e.parent.rotateLeft(this);else{if(e!==e.parent.right)throw new Error("Impossible #2");e.parent.rotateRight(this)}n=e.sibling}e.parent.isBlack()&&n.isBlack()&&t(n.left)&&t(n.right)?(n.redden(),this._fixDelete(e.parent)):e.parent.isRed()&&n.isBlack()&&t(n.left)&&t(n.right)?(n.redden(),e.parent.blacken()):(e===e.parent.left&&n.isBlack()&&r(n.left)&&t(n.right)?(n.redden(),n.left.blacken(),n.rotateRight(this),n=e.sibling):e===e.parent.right&&n.isBlack()&&r(n.right)&&t(n.left)&&(n.redden(),n.right.blacken(),n.rotateLeft(this),n=e.sibling),n.color=e.parent.color,e.parent.blacken(),e===e.parent.left?(n.right.blacken(),e.parent.rotateLeft(this)):(n.left.blacken(),e.parent.rotateRight(this)))}},e.prototype.add=function(e){var t=new N(e);if(null!==this.root){for(var r=this.root;;)if(t.val.id<r.val.id){if(null===r.left){r.left=t;break}r=r.left}else{if(!(r.val.id<t.val.id))return!1;if(null===r.right){r.right=t;break}r=r.right}this._fixInsert(t)}else this.root=t;this.root.blacken()},e.prototype._fixInsert=function(e){if(null===e.parent)return void e.blacken();if(!e.parent.isBlack()){var t=e.getUncle();null!==t&&t.isRed()?(e.parent.blacken(),t.blacken(),e.grandparent.redden(),this._fixInsert(e.grandparent)):(e===e.parent.right&&e.parent===e.grandparent.left?(e.parent.rotateLeft(this),e=e.left):e===e.parent.left&&e.parent===e.grandparent.right&&(e.parent.rotateRight(this),e=e.right),e.parent.blacken(),e.grandparent.redden(),e===e.parent.left?e.grandparent.rotateRight(this):e.grandparent.rotateLeft(this))}},e}();!function(){var e=function(){function e(t){_classCallCheck(this,e),this._model=t}return e.prototype.val=regeneratorRuntime.mark(function t(e){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:if(r=t.sent,null==e){t.next=9;break}return t.delegateYield(Y.Struct.List.ref.call(r,this._model,e),"t0",5);case 5:return n=t.t0,t.abrupt("return",n?n.content:null);case 9:return t.delegateYield(Y.Struct.List.map.call(r,this._model,function(e){return e}),"t1",10);case 10:return t.abrupt("return",t.t1);case 11:case"end":return t.stop()}},t,this)}),e.prototype.insert=regeneratorRuntime.mark(function r(e,t){var n;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,"transaction";case 2:return n=r.sent,r.delegateYield(Y.Struct.List.insert.call(n,this._model,e,t),"t0",4);case 4:case"end":return r.stop()}},r,this)}),e}();Y.List=regeneratorRuntime.mark(function t(){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:return r=t.sent,t.delegateYield(Y.Struct.List.create.call(r,{type:"List"}),"t0",4);case 4:return n=t.t0,t.abrupt("return",new e(n));case 6:case"end":return t.stop()}},t,this)}),Y.List.Create=e}(),function(){var e=function(){function e(t){_classCallCheck(this,e),this._model=t}return e.prototype.val=regeneratorRuntime.mark(function t(){var e,r,n=arguments;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:return e=t.sent,t.delegateYield(e.getOperation(this._model),"t0",4);case 4:if(r=t.t0,1!==n.length){t.next=10;break}return t.delegateYield(Y.Struct.Map.get.call(e,r,n[0]),"t1",7);case 7:return t.abrupt("return",t.t1);case 10:if(2!==n.length){t.next=15;break}return t.delegateYield(Y.Struct.Map.set.call(e,r,n[0],n[1]),"t2",12);case 12:return t.abrupt("return",t.t2);case 15:throw new Error("Implement this case!");case 16:case"end":return t.stop()}},t,this)}),e}();Y.Map=regeneratorRuntime.mark(function t(){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:if(r=t.sent,!(this instanceof Y.AbstractOperationStore)){t.next=9;break}return t.delegateYield(Y.Struct.map.create.call(r,{type:"Map"}),"t0",5);case 5:return n=t.t0,t.abrupt("return",new e(n));case 9:throw new Error("Don't use `new` to create this type!");case 10:case"end":return t.stop()}},t,this)}),Y.Map.Create=e}();
+"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 _flushOne(){var e=[];for(var t in globalRoom.buffers)globalRoom.buffers[t].length>0&&e.push(t);if(e.length>0){var r=getRandom(e),n=globalRoom.buffers[r].shift(),i=globalRoom.users[r];return i.receiveMessage(n[0],n[1]),!0}return!1}function copyObject(e){var t={};for(var r in e)t[r]=e[r];return t}function compareIds(e,t){return null==e||null==t?null==e&&null==t?!0:!1:e[0]===t[0]&&e[1]===t[1]?!0:!1}var _createClass=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();!function(e){function t(e,t,r,i){var a=Object.create((t||n).prototype);return a._invoke=c(e,r||null,new f(i||[])),a}function r(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(n){return{type:"throw",arg:n}}}function n(){}function i(){}function a(){}function s(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function o(e){this.arg=e}function u(e){function t(t,r){var n=e[t](r),s=n.value;return s instanceof o?Promise.resolve(s.arg).then(i,a):Promise.resolve(s).then(function(e){return n.value=e,n},a)}function r(e,r){var i=n?n.then(function(){return t(e,r)}):new Promise(function(n){n(t(e,r))});return n=i["catch"](s),i}"object"==typeof process&&process.domain&&(t=process.domain.bind(t));var n,i=t.bind(e,"next"),a=t.bind(e,"throw"),s=t.bind(e,"return");this._invoke=r}function c(e,t,n){var i=k;return function(a,s){if(i===w)throw new Error("Generator is already running");if(i===R)return d();for(;;){var o=n.delegate;if(o){if("return"===a||"throw"===a&&o.iterator[a]===g){n.delegate=null;var u=o.iterator["return"];if(u){var c=r(u,o.iterator,s);if("throw"===c.type){a="throw",s=c.arg;continue}}if("return"===a)continue}var c=r(o.iterator[a],o.iterator,s);if("throw"===c.type){n.delegate=null,a="throw",s=c.arg;continue}a="next",s=g;var l=c.arg;if(!l.done)return i=x,l;n[o.resultName]=l.value,n.next=o.nextLoc,n.delegate=null}if("next"===a)i===x?n.sent=s:delete n.sent;else if("throw"===a){if(i===k)throw i=R,s;n.dispatchException(s)&&(a="next",s=g)}else"return"===a&&n.abrupt("return",s);i=w;var c=r(e,t,n);if("normal"===c.type){i=n.done?R:x;var l={value:c.arg,done:n.done};if(c.arg!==S)return l;n.delegate&&"next"===a&&(s=g)}else"throw"===c.type&&(i=R,a="throw",s=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 p(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function f(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(l,this),this.reset()}function h(e){if(e){var t=e[y];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function i(){for(;++r<e.length;)if(b.call(e,r))return i.value=e[r],i.done=!1,i;return i.value=g,i.done=!0,i};return n.next=n}}return{next:d}}function d(){return{value:g,done:!0}}var g,b=Object.prototype.hasOwnProperty,y="function"==typeof Symbol&&Symbol.iterator||"@@iterator",v="object"==typeof module,m=e.regeneratorRuntime;if(m)return void(v&&(module.exports=m));m=e.regeneratorRuntime=v?module.exports:{},m.wrap=t;var k="suspendedStart",x="suspendedYield",w="executing",R="completed",S={},O=a.prototype=n.prototype;i.prototype=O.constructor=a,a.constructor=i,i.displayName="GeneratorFunction",m.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return t?t===i||"GeneratorFunction"===(t.displayName||t.name):!1},m.mark=function(e){return e.__proto__=a,e.prototype=Object.create(O),e},m.awrap=function(e){return new o(e)},s(u.prototype),m.async=function(e,r,n,i){var a=new u(t(e,r,n,i));return m.isGeneratorFunction(r)?a:a.next().then(function(e){return e.done?e.value:a.next()})},s(O),O[y]=function(){return this},O.toString=function(){return"[object Generator]"},m.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}},m.values=h,f.prototype={constructor:f,reset:function(){this.prev=0,this.next=0,this.sent=g,this.done=!1,this.delegate=null,this.tryEntries.forEach(p);for(var e,t=0;b.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 a.type="throw",a.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n],a=i.completion;if("root"===i.tryLoc)return t("end");if(i.tryLoc<=this.prev){var s=b.call(i,"catchLoc"),o=b.call(i,"finallyLoc");if(s&&o){if(this.prev<i.catchLoc)return t(i.catchLoc,!0);if(this.prev<i.finallyLoc)return t(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return t(i.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return t(i.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&&b.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var i=n;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?this.next=i.finallyLoc:this.complete(a),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),p(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 i=n.arg;p(r)}return i}}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 GeneratorFunction=regeneratorRuntime.mark(function e(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},e,this)}).constructor,Y=function(){function e(t){_classCallCheck(this,e),this.db=new e[t.db.name](this,t.db),this.connector=new e[t.connector.name](this,t.connector),this.db.requestTransaction(regeneratorRuntime.mark(function r(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.addOperation({id:["_",0],struct:"Map",map:{}}),"t0",1);case 1:case"end":return e.stop()}},r,this)}))}return e.prototype.transact=function(e){if(e.constructor!==GeneratorFunction)throw new Error("y.transact requires a Generator function! E.g. function*(){/*..*/}");this.db.requestTransaction(e)},e.prototype.destroy=function(){this.connector.disconnect(),this.db.removeDatabase(),this.connector=null,this.db=null,this.transact=function(){throw new Error("Remember?, you destroyed this type ;)")}},e}();Y.AbstractTransaction=AbstractTransaction,Y.AbstractOperationStore=AbstractOperationStore,Y.Struct=Struct;var globalRoom={users:{},buffers:{},removeUser:function(e){for(var t in this.users)this.users[t].userLeft(e);delete this.users[e],delete this.buffers[e]},addUser:function(e){this.users[e.userId]=e,this.buffers[e.userId]=[];for(var t in this.users)if(t!==e.userId){var r=this.users[t];r.userJoined(e.userId,"master"),e.userJoined(r.userId,"master")}}},userIdCounter=0,Test=function(e){function t(r,n){if(_classCallCheck(this,t),void 0===n)throw new Error("Options must not be undefined!");n.role="master",n.forwardToSyncingClients=!1,e.call(this,r,n),this.setUserId(userIdCounter++ +""),globalRoom.addUser(this),this.globalRoom=globalRoom}return _inherits(t,e),t.prototype.send=function(e,t){globalRoom.buffers[e].push(JSON.parse(JSON.stringify([this.userId,t])))},t.prototype.broadcast=function(e){for(var t in globalRoom.buffers)globalRoom.buffers[t].push(JSON.parse(JSON.stringify([this.userId,e])))},t.prototype.disconnect=function(){globalRoom.removeUser(this.userId)},t.prototype.flushAll=function(){for(var e=!0;e;)e=_flushOne()},t.prototype.flushOne=function(){_flushOne()},t}(AbstractConnector);Y.Test=Test;var WebRTC=function(e){function t(r){if(_classCallCheck(this,t),void 0===r)throw new Error("Options must not be undefined!");e.call(this,{role:"slave"});var n=r.room;null==r.url&&(r.url="https://yatta.ninja:8888");var i=new SimpleWebRTC(r);this.swr=i;var a=this;i.once("connectionReady",function(e){i.joinRoom(n),i.once("joinedRoom",function(){a.setUserId(e);var t;for(t in a.swr.webrtc.peers)a.userJoined(a.swr.webrtc.peers[t].id,"master");i.on("channelMessage",function(e,t,r){null!=r.type&&a.receiveMessage(e.id,r.payload)})}),i.on("createdPeer",function(e){a.userJoined(e.id,"master")}),i.on("peerStreamRemoved",function(e){a.userLeft(e.id)})})}return _inherits(t,e),t.prototype.send=function r(e,t){var n=this,r=function i(){var r,a=n.swr.webrtc.getPeers(e)[0];a&&(r=a.sendDirectly("simplewebrtc","yjs",t)),r||setTimeout(i,500)};r()},t.prototype.broadcast=function(e){this.swr.sendDirectlyToAll("simplewebrtc","yjs",e)},t}(AbstractConnector);Y.WebRTC=WebRTC,Y.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 i(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()}},i,this)}),t.prototype.setState=regeneratorRuntime.mark(function a(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()}},a,this)}),t.prototype.getState=regeneratorRuntime.mark(function s(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()}},s,this)}),t.prototype.getStateVector=regeneratorRuntime.mark(function o(){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()}},o,this)}),t.prototype.getStateSet=regeneratorRuntime.mark(function u(){var e,t,r,n,i,a,s;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.delegateYield(this.getStateVector(),"t0",1);case 1:e=o.t0,t={},r=e,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();case 4:if(!n){o.next=10;break}if(!(i>=r.length)){o.next=7;break}return o.abrupt("break",18);case 7:a=r[i++],o.next=14;break;case 10:if(i=r.next(),!i.done){o.next=13;break}return o.abrupt("break",18);case 13:a=i.value;case 14:s=a,t[s.user]=s.clock;case 16:o.next=4;break;case 18:return o.abrupt("return",t);case 19:case"end":return o.stop()}},u,this)}),t.prototype.getOperations=regeneratorRuntime.mark(function c(e){var t,r,n,i,a,s,o,u,l,p,f,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,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();case 5:if(!i){c.next=11;break}if(!(a>=n.length)){c.next=8;break}return c.abrupt("break",31);case 8:s=n[a++],c.next=15;break;case 11:if(a=n.next(),!a.done){c.next=14;break}return c.abrupt("break",31);case 14:s=a.value;case 15:o=s,u=o.user,l=e[u]||0,p=o.clock,f=IDBKeyRange.bound([u,l],[u,p]),h=this.os.openCursor(f);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,i){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===s.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;try{t.createObjectStore("OperationStore",{keyPath:"id"}),t.createObjectStore("StateVector",{keyPath:"user"})}catch(r){}}):o["throw"]("You can not yield this type!"))}if(_classCallCheck(this,r),t.call(this,n),null==i&&(i={}),null==i.namespace||"string"!=typeof i.namespace)throw new Error("IndexedDB: expect a string (opts.namespace)!");this.namespace=i.namespace,this.idbVersion=null!=i.idbVersion?i.idbVersion:5,this.transactionQueue={queue:[],onRequest:null};var s=this,o=regeneratorRuntime.mark(function u(){var t,r,n,a;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,indexedDB.open(i.namespace,s.idbVersion);case 2:s.db=o.sent,t=s.transactionQueue,r=null,n=!0;case 6:if(!n){o.next=14;break}return o.next=9,t;case 9:return a=o.sent,r=new e(s),o.delegateYield(a.call(r,a),"t0",12);case 12:o.next=6;break;case 14:case"end":return o.stop()}},u,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}(),Y.Memory=function(){var e=function(e){function t(r){_classCallCheck(this,t),e.call(this,r),this.ss=r.ss,this.os=r.os}return _inherits(t,e),t.prototype.setOperation=regeneratorRuntime.mark(function r(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t=this.os.findNode(e.id),t.val=e,r.abrupt("return",e);case 3:case"end":return r.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.os.find(e),null!=t){r.next=5;break}throw new Error("Op does not exist..");case 5:return r.abrupt("return",t);case 6:case"end":return r.stop()}},n,this)}),t.prototype.removeOperation=regeneratorRuntime.mark(function i(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:this.os["delete"](e);case 1:case"end":return t.stop()}},i,this)}),t.prototype.setState=regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:this.ss[e.user]=e.clock;case 1:case"end":return t.stop()}},a,this)}),t.prototype.getState=regeneratorRuntime.mark(function s(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t=this.ss[e],null==t&&(t=0),r.abrupt("return",{user:e,clock:t});case 3:case"end":return r.stop()}},s,this)}),t.prototype.getStateVector=regeneratorRuntime.mark(function o(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:e=[];for(t in this.ss)r=this.ss[t],e.push({user:t,clock:r});return n.abrupt("return",e);case 3:case"end":return n.stop()}},o,this)}),t.prototype.getStateSet=regeneratorRuntime.mark(function u(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.ss);case 1:case"end":return e.stop()}},u,this)}),t.prototype.getOperations=regeneratorRuntime.mark(function c(e){var t,r,n,i,a,s,o,u,l,p,f,h,d,g,b,y;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,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();case 5:if(!i){c.next=11;break}if(!(a>=n.length)){c.next=8;break}return c.abrupt("break",24);case 8:s=n[a++],c.next=15;break;case 11:if(a=n.next(),!a.done){c.next=14;break}return c.abrupt("break",24);case 14:s=a.value;case 15:if(o=s,u=o.user,"_"!==u){c.next=19;break}return c.abrupt("continue",22);case 19:l=e[u]||0,p=o.clock,this.os.iterate([u,l],[u,p],function(e){t.push(Struct[e.struct].encode(e))});case 22:c.next=5;break;case 24:f=[],h=t,d=Array.isArray(h),g=0,h=d?h:h[Symbol.iterator]();case 26:if(!d){c.next=32;break}if(!(g>=h.length)){c.next=29;break}return c.abrupt("break",43);case 29:b=h[g++],c.next=36;break;case 32:if(g=h.next(),!g.done){c.next=35;break}return c.abrupt("break",43);case 35:b=g.value;case 36:return y=b,c.t1=f,c.delegateYield(this.makeOperationReady.call(this,e,y),"t2",39);case 39:c.t3=c.t2,c.t1.push.call(c.t1,c.t3);case 41:c.next=26;break;case 43:return c.abrupt("return",f);case 44:case"end":return c.stop()}},c,this)}),t.prototype.makeOperationReady=regeneratorRuntime.mark(function l(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:n=t;case 1:if(null==n.right){i.next=9;break}return i.delegateYield(this.getOperation(n.right),"t0",3);case 3:if(n=i.t0,r=e[n.id[0]],!(null!=r&&n.id[1]<r)){i.next=7;break}return i.abrupt("break",9);case 7:i.next=1;break;case 9:return t=copyObject(t),t.right=null==n?null:n.id,i.abrupt("return",t);case 12:case"end":return i.stop()}},l,this)}),t}(AbstractTransaction),t=function(t){function r(e){_classCallCheck(this,r),t.call(this,e),this.os=new RBTree,this.ss={}}return _inherits(r,t),r.prototype.requestTransaction=function(t){for(var r=new e(this),n=t.call(r,new Y.Map.Create(["_",0])),i=n.next();!i.done;){if("transaction"!==i.value)throw new Error("You may not yield this type. (Maybe you meant to use 'yield*'?)");i=n.next(r)}},r.prototype.removeDatabase=regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:delete this.os;case 1:case"end":return e.stop()}},n,this)}),r}(AbstractOperationStore);return t}();var N=function(){function e(t){if(_classCallCheck(this,e),this.val=t,this.color=!0,this._left=null,this._right=null,this._parent=null,null===t.id)throw new Error("You must define id!")}return e.prototype.isRed=function(){return this.color},e.prototype.isBlack=function(){return!this.color},e.prototype.redden=function(){return this.color=!0,this},e.prototype.blacken=function(){return this.color=!1,this},e.prototype.rotateLeft=function(e){var t=this.parent,r=this.right,n=this.right.left;if(r.left=this,this.right=n,null===t)e.root=r,r._parent=null;else if(t.left===this)t.left=r;else{if(t.right!==this)throw new Error("The elements are wrongly connected!");t.right=r}},e.prototype.next=function(){if(null!==this.right){for(var e=this.right;null!==e.left;)e=e.left;return e}for(var t=this;null!==t.parent&&t!==t.parent.left;)t=t.parent;return t.parent},e.prototype.rotateRight=function(e){var t=this.parent,r=this.left,n=this.left.right;if(r.right=this,this.left=n,null===t)e.root=r,r._parent=null;else if(t.left===this)t.left=r;else{if(t.right!==this)throw new Error("The elements are wrongly connected!");t.right=r}},e.prototype.getUncle=function(){return this.parent===this.parent.parent.left?this.parent.parent.right:this.parent.parent.left},_createClass(e,[{key:"grandparent",get:function(){return this.parent.parent}},{key:"parent",get:function(){return this._parent}},{key:"sibling",get:function(){return this===this.parent.left?this.parent.right:this.parent.left}},{key:"left",get:function(){return this._left},set:function(e){null!==e&&(e._parent=this),this._left=e}},{key:"right",get:function(){return this._right},set:function(e){null!==e&&(e._parent=this),this._right=e}}]),e}(),RBTree=function(){function e(){_classCallCheck(this,e),this.root=null}return e.prototype.findNodeWithLowerBound=function(e){var t=this.root;if(null===t)return!1;for(;;)if((null===e||e<t.val.id)&&null!==t.left)t=t.left;else{if(!(t.val.id<e))return t;if(null===t.right)return t.next();t=t.right}},e.prototype.iterate=function(e,t,r){for(var n=this.findNodeWithLowerBound(e);null!==n&&(null===t||n.val.id<=t);)r(n.val),n=n.next();return!0},e.prototype.find=function(e){return this.findNode(e).val},e.prototype.findNode=function(e){var t=this.root;if(null===t)return!1;for(;;){if(null===t)return!1;if(e<t.val.id)t=t.left;else{if(!(t.val.id<e))return t;t=t.right}}},e.prototype["delete"]=function(e){var t=this.findNode(e);if(null!==t.left&&null!==t.right){for(var r=t.left;null!==r.right;)r=r.right;t.val=r.val,t=r}var n,i=t.left||t.right;if(null===i?(n=!0,i=new N({id:0}),i.blacken(),t.right=i):n=!1,null===t.parent)return void(n?this.root=null:(this.root=i,i.blacken(),i._parent=null));if(t.parent.left===t)t.parent.left=i;else{if(t.parent.right!==t)throw new Error("Impossible!");t.parent.right=i}if(t.isBlack()&&(i.isRed()?i.blacken():this._fixDelete(i)),this.root.blacken(),n)if(i.parent.left===i)i.parent.left=null;else{if(i.parent.right!==i)throw new Error("Impossible #3");i.parent.right=null}},e.prototype._fixDelete=function(e){function t(e){return null!==e?e.isBlack():!0}function r(e){return null!==e?e.isRed():!1}if(null!==e.parent){var n=e.sibling;if(r(n)){if(e.parent.redden(),n.blacken(),e===e.parent.left)e.parent.rotateLeft(this);else{if(e!==e.parent.right)throw new Error("Impossible #2");e.parent.rotateRight(this)}n=e.sibling}e.parent.isBlack()&&n.isBlack()&&t(n.left)&&t(n.right)?(n.redden(),this._fixDelete(e.parent)):e.parent.isRed()&&n.isBlack()&&t(n.left)&&t(n.right)?(n.redden(),e.parent.blacken()):(e===e.parent.left&&n.isBlack()&&r(n.left)&&t(n.right)?(n.redden(),n.left.blacken(),n.rotateRight(this),n=e.sibling):e===e.parent.right&&n.isBlack()&&r(n.right)&&t(n.left)&&(n.redden(),n.right.blacken(),n.rotateLeft(this),n=e.sibling),n.color=e.parent.color,e.parent.blacken(),e===e.parent.left?(n.right.blacken(),e.parent.rotateLeft(this)):(n.left.blacken(),e.parent.rotateRight(this)))}},e.prototype.add=function(e){var t=new N(e);if(null!==this.root){for(var r=this.root;;)if(t.val.id<r.val.id){if(null===r.left){r.left=t;break}r=r.left}else{if(!(r.val.id<t.val.id))return!1;if(null===r.right){r.right=t;break}r=r.right}this._fixInsert(t)}else this.root=t;this.root.blacken()},e.prototype._fixInsert=function(e){if(null===e.parent)return void e.blacken();if(!e.parent.isBlack()){var t=e.getUncle();null!==t&&t.isRed()?(e.parent.blacken(),t.blacken(),e.grandparent.redden(),this._fixInsert(e.grandparent)):(e===e.parent.right&&e.parent===e.grandparent.left?(e.parent.rotateLeft(this),e=e.left):e===e.parent.left&&e.parent===e.grandparent.right&&(e.parent.rotateRight(this),e=e.right),e.parent.blacken(),e.grandparent.redden(),e===e.parent.left?e.grandparent.rotateRight(this):e.grandparent.rotateLeft(this))}},e}();!function(){var e=function(){function e(t){_classCallCheck(this,e),this._model=t}return e.prototype.val=regeneratorRuntime.mark(function t(e){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:if(r=t.sent,null==e){t.next=9;break}return t.delegateYield(Y.Struct.List.ref.call(r,this._model,e),"t0",5);case 5:return n=t.t0,t.abrupt("return",n?n.content:null);case 9:return t.delegateYield(Y.Struct.List.map.call(r,this._model,function(e){return e}),"t1",10);case 10:return t.abrupt("return",t.t1);case 11:case"end":return t.stop()}},t,this)}),e.prototype.insert=regeneratorRuntime.mark(function r(e,t){var n;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,"transaction";case 2:return n=r.sent,r.delegateYield(Y.Struct.List.insert.call(n,this._model,e,t),"t0",4);case 4:case"end":return r.stop()}},r,this)}),e}();Y.List=regeneratorRuntime.mark(function t(){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:return r=t.sent,t.delegateYield(Y.Struct.List.create.call(r,{type:"List"}),"t0",4);case 4:return n=t.t0,t.abrupt("return",new e(n));case 6:case"end":return t.stop()}},t,this)}),Y.List.Create=e}(),function(){var e=function(){function e(t){_classCallCheck(this,e),this._model=t}return e.prototype.val=regeneratorRuntime.mark(function t(){var e,r,n=arguments;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:return e=t.sent,t.delegateYield(e.getOperation(this._model),"t0",4);case 4:if(r=t.t0,1!==n.length){t.next=10;break}return t.delegateYield(Y.Struct.Map.get.call(e,r,n[0]),"t1",7);case 7:return t.abrupt("return",t.t1);case 10:if(2!==n.length){t.next=15;break}return t.delegateYield(Y.Struct.Map.set.call(e,r,n[0],n[1]),"t2",12);case 12:return t.abrupt("return",t.t2);case 15:throw new Error("Implement this case!");case 16:case"end":return t.stop()}},t,this)}),e}();Y.Map=regeneratorRuntime.mark(function t(){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,"transaction";case 2:if(r=t.sent,!(this instanceof Y.AbstractOperationStore)){t.next=9;break}return t.delegateYield(Y.Struct.map.create.call(r,{type:"Map"}),"t0",5);case 5:return n=t.t0,t.abrupt("return",new e(n));case 9:throw new Error("Don't use `new` to create this type!");case 10:case"end":return t.stop()}},t,this)}),Y.Map.Create=e}();var AbstractConnector=function(){function e(t,r){if(_classCallCheck(this,e),this.y=t,null==r&&(r={}),null==r.role||"master"===r.role)this.role="master";else{if("slave"!==r.role)throw new Error("Role must be either 'master' or 'slave'!");this.role="slave"}this.role=r.role,this.connections={},this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null,this.syncingClients=[],this.forwardToSyncingClients=r.forwardToSyncingClients===!1?!1:!0,this.debug=r.debug?!0:!1}return e.prototype.setUserId=function(e){this.userId=e,this.y.db.setUserId(e)},e.prototype.onUserEvent=function(e){this.userEventListeners.push(e)},e.prototype.userLeft=function(e){delete this.connections[e],e===this.currentSyncTarget&&(this.currentSyncTarget=null,this.findNextSyncTarget());for(var t=this.userEventListeners,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var a=i;a({action:"userLeft",user:e})}},e.prototype.userJoined=function(e,t){if(null==t)throw new Error("You must specify the role of the joined user!");if(null!=this.connections[e])throw new Error("This user already joined!");this.connections[e]={isSynced:!1,role:t};for(var r=this.userEventListeners,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var a;if(n){if(i>=r.length)break;a=r[i++]}else{if(i=r.next(),i.done)break;a=i.value}var s=a;s({action:"userJoined",user:e,role:t})}null==this.currentSyncTarget&&this.findNextSyncTarget()},e.prototype.whenSynced=function(e){this.isSynced===!0?e():this.whenSyncedListeners.push(e)},e.prototype.findNextSyncTarget=function(){if(null!=this.currentSyncTarget&&this.connections[this.currentSyncTarget].isSynced===!1)throw new Error("The current sync has not finished!");var e=null;for(var t in this.connections)if(e=this.connections[t],!e.isSynced)break;if(null!=e){var r=this;this.y.db.requestTransaction(regeneratorRuntime.mark(function u(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r.currentSyncTarget=t,e.t0=r,e.t1=t,e.delegateYield(this.getStateVector(),"t2",4);case 4:e.t3=e.t2,e.t4={type:"sync step 1",stateVector:e.t3},e.t0.send.call(e.t0,e.t1,e.t4);case 7:case"end":return e.stop()}},u,this)}))}if(!this.isSynced){this.isSynced=!0;for(var n=this.whenSyncedListeners,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();;){var s;if(i){if(a>=n.length)break;s=n[a++]}else{if(a=n.next(),a.done)break;s=a.value}var o=s;o()}this.whenSyncedListeners=null}return!1},e.prototype.receiveMessage=function(e,t){var r=this;if(this.debug&&console.log(e+" -> "+this.userId+": "+JSON.stringify(t)),"sync step 1"===t.type)!function(){var n=r;r.y.db.requestTransaction(regeneratorRuntime.mark(function i(){var r,a;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.delegateYield(this.getOperations(t.stateVector),"t0",1);case 1:return r=i.t0,i.delegateYield(this.getStateVector(),"t1",3);case 3:a=i.t1,n.send(e,{type:"sync step 2",os:r,stateVector:a}),this.forwardToSyncingClients&&(n.syncingClients.push(e),setTimeout(function(){n.syncingClients=n.syncingClients.filter(function(t){return t!==e}),n.send(e,{type:"sync done"})},n.syncingClientDuration));case 6:case"end":return i.stop()}},i,this)}))}();else if("sync step 2"===t.type)!function(){r.y.db.apply(t.os);var e=r;r.y.db.requestTransaction(regeneratorRuntime.mark(function n(){var r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(this.getOperations(t.stateVector),"t0",1);case 1:r=n.t0,r.length>0&&e.broadcast({type:"update",ops:r});case 3:case"end":return n.stop()}},n,this)}))}();else if("sync done"===t.type)this.connections[e].isSynced=!0,this.findNextSyncTarget();else if("update"===t.type){if(this.forwardToSyncingClients)for(var n=this.syncingClients,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();;){var s;if(i){if(a>=n.length)break;s=n[a++]}else{if(a=n.next(),a.done)break;s=a.value}var o=s;this.send(o,t)}this.y.db.apply(t.ops)}},e.prototype.parseMessageFromXml=function(e){function t(e){var t=!0;e:for(;t;){var n=e;i=a=s=i=o=u=void 0,t=!1;for(var i=n.children,a=Array.isArray(i),s=0,i=a?i:i[Symbol.iterator]();;){var o;if(a){if(s>=i.length)break;o=i[s++]}else{if(s=i.next(),s.done)break;o=s.value}var u=o;if("true"===u.getAttribute("isArray")){e=u,t=!0;continue e}return r(u)}}}function r(e){var n={};for(var i in e.attrs){var a=e.attrs[i],s=parseInt(a);n[i]=isNaN(s)||""+s!==a?a:s}for(var o in e.children){var u=o.name;n[u]="true"===o.getAttribute("isArray")?t(o):r(o)}return n}r(e)},e.prototype.encodeMessageToXml=function(e,t){function r(e,t){for(var i in t){var a=t[i];null==i||(a.constructor===Object?r(e.c(i),a):a.constructor===Array?n(e.c(i),a):e.setAttribute(i,a))}}function n(e,t){e.setAttribute("isArray","true");for(var i=t,a=Array.isArray(i),s=0,i=a?i:i[Symbol.iterator]();;){var o;if(a){if(s>=i.length)break;o=i[s++]}else{if(s=i.next(),s.done)break;o=s.value}var u=o;u.constructor===Object?r(e.c("array-element"),u):n(e.c("array-element"),u);
+
+}}if(t.constructor===Object)r(e.c("y",{xmlns:"http://y.ninja/connector-stanza"}),t);else{if(t.constructor!==Array)throw new Error("I can't encode this json!");n(e.c("y",{xmlns:"http://y.ninja/connector-stanza"}),t)}},e}(),AbstractTransaction=function(){function e(t){_classCallCheck(this,e),this.store=t}return e.prototype.getType=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.getOperation(e),"t0",1);case 1:return r=t.t0,t.abrupt("return",new Y[r.type].Create(r));case 3:case"end":return t.stop()}},t,this)}),e.prototype.addOperation=regeneratorRuntime.mark(function r(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.getState(e.id[0]),"t0",1);case 1:if(t=r.t0,e.id[1]!==t.clock){r.next=10;break}return t.clock++,r.delegateYield(this.setState(t),"t1",5);case 5:return this.os.add(e),this.store.operationAdded(e),r.abrupt("return",!0);case 10:if(!(e.id[1]<t.clock)){r.next=14;break}return r.abrupt("return",!1);case 14:throw new Error("Operations must arrive in order!");case 15:case"end":return r.stop()}},r,this)}),e}(),AbstractOperationStore=function(){function e(t){_classCallCheck(this,e),this.y=t,this.parentListeners={},this.parentListenersRequestPending=!1,this.parentListenersActivated={},this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1}return e.prototype.setUserId=function(e){this.userId=e},e.prototype.apply=function(e){for(var t in e){var r=e[t],n=Y.Struct[r.struct].requiredOps(r);this.whenOperationsExist(n,r)}},e.prototype.whenOperationsExist=function(e,t){if(e.length>0){var r={op:t,missing:e.length};for(var n in e){var i=e[n],a=JSON.stringify(i),s=this.listenersById[a];null==s&&(s=[],this.listenersById[a]=s),s.push(r)}}else this.listenersByIdExecuteNow.push({op:t});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var o=this;this.requestTransaction(regeneratorRuntime.mark(function u(){var e,t,r,n,i,a,s,c;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:e=o.listenersByIdExecuteNow,o.listenersByIdExecuteNow=[],t=o.listenersById,o.listenersById={},o.listenersByIdRequestPending=!1,u.t0=regeneratorRuntime.keys(e);case 6:if((u.t1=u.t0()).done){u.next=12;break}return r=u.t1.value,n=e[r].op,u.delegateYield(Struct[n.struct].execute.call(this,n),"t2",10);case 10:u.next=6;break;case 12:u.t3=regeneratorRuntime.keys(t);case 13:if((u.t4=u.t3()).done){u.next=34;break}return i=u.t4.value,a=t[i],s=JSON.parse(i),u.delegateYield(this.getOperation(s),"t5",18);case 18:if(u.t6=u.t5,null!=u.t6){u.next=23;break}o.listenersById[i]=a,u.next=32;break;case 23:u.t7=regeneratorRuntime.keys(a);case 24:if((u.t8=u.t7()).done){u.next=32;break}if(r=u.t8.value,c=a[r],n=c.op,0!==--c.missing){u.next=30;break}return u.delegateYield(Struct[n.struct].execute.call(this,n),"t9",30);case 30:u.next=24;break;case 32:u.next=13;break;case 34:case"end":return u.stop()}},u,this)}))}},e.prototype.operationAdded=function(e){var t=JSON.stringify(e.id),r=this.listenersById[t];if(delete this.listenersById[t],null!=r)for(var n in r){var i=r[n];0===--i.missing&&this.whenOperationsExist([],i.op)}var a=this.parentListeners[e.parent];if(!this.parentListenersRequestPending&&null!=a&&0!==a.length){var s=this.parentListenersActivated[JSON.stringify(e.parent)];null==s&&(s=[],this.parentListenersActivated[JSON.stringify(e.parent)]=s),s.push(e),this.parentListenersRequestPending=!0;var o=this;this.requestTransaction(regeneratorRuntime.mark(function u(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:o.parentListenersRequestPending=!1,e=o.parentListenersActivated,o.parentListenersActivated={},n.t0=regeneratorRuntime.keys(e);case 4:if((n.t1=n.t0()).done){n.next=11;break}return t=n.t1.value,n.delegateYield(this.getOperation(t),"t2",7);case 7:r=n.t2,Struct[r.struct].notifyObservers(e[t]),n.next=4;break;case 11:case"end":return n.stop()}},u,this)}))}},e.prototype.removeParentListener=function(e,t){var r=this.parentListeners[e];null!=r&&(this.parentListeners[e]=r.filter(function(e){return t!==e}))},e.prototype.addParentListener=function(e,t){var r=this.parentListeners[JSON.stringify(e)];null==r&&(r=[],this.parentListeners[JSON.stringify(e)]=r),r.push(t)},e}(),Struct={Operation:{create:regeneratorRuntime.mark(function t(e){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return r=this.store.y.connector.userId,t.delegateYield(this.getState(r),"t0",2);case 2:return n=t.t0,e.id=[r,n.clock],t.delegateYield(this.addOperation(e),"t1",5);case 5:if(t.t2=t.t1,t.t2!==!1){t.next=8;break}throw new Error("This is highly unexpected :(");case 8:return this.store.y.connector.broadcast({type:"update",ops:[Struct[e.struct].encode(e)]}),t.abrupt("return",e);case 10:case"end":return t.stop()}},t,this)})},Insert:{create:regeneratorRuntime.mark(function r(e){var t,n,i,a,s;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(void 0!==e.left&&void 0!==e.right&&void 0!==e.parent){r.next=2;break}throw new Error("You must define left, right, and parent!");case 2:return e.origin=e.left,e.struct="Insert",r.delegateYield(Struct.Operation.create.call(this,e),"t0",5);case 5:if(null==e.left){r.next=10;break}return r.delegateYield(this.getOperation(e.left),"t1",7);case 7:return t=r.t1,t.right=e.id,r.delegateYield(this.setOperation(t),"t2",10);case 10:if(null==e.right){r.next=15;break}return r.delegateYield(this.getOperation(e.right),"t3",12);case 12:return n=r.t3,n.left=e.id,r.delegateYield(this.setOperation(n),"t4",15);case 15:return r.delegateYield(this.getOperation(e.parent),"t5",16);case 16:if(i=r.t5,null==e.parentSub){r.next=23;break}if(!compareIds(i.map[e.parentSub],e.right)){r.next=21;break}return i.map[e.parentSub]=e.id,r.delegateYield(this.setOperation(i),"t6",21);case 21:r.next=29;break;case 23:if(a=compareIds(i.start,e.right),s=compareIds(i.end,e.left),!a&&!s){r.next=29;break}return a&&(i.start=e.id),s&&(i.end=e.id),r.delegateYield(this.setOperation(i),"t7",29);case 29:return r.abrupt("return",e);case 30:case"end":return r.stop()}},r,this)}),encode:function(e){return e},requiredOps:function(e){var t=[];return null!=e.left&&t.push(e.left),null!=e.right&&t.push(e.right),null==e.right&&null==e.left&&t.push(e.parent),null!=e.opContent&&t.push(e.opContent),t},getDistanceToOrigin:regeneratorRuntime.mark(function n(e){var t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=e.left){n.next=4;break}return n.abrupt("return",0);case 4:return t=0,n.delegateYield(this.getOperation(e.left),"t0",6);case 6:r=n.t0;case 7:if(compareIds(e.origin,r?r.id:null)){n.next=17;break}if(t++,null!=r.left){n.next=13;break}return n.abrupt("break",17);case 13:return n.delegateYield(this.getOperation(r.left),"t1",14);case 14:r=n.t1;case 15:n.next=7;break;case 17:return n.abrupt("return",t);case 18:case"end":return n.stop()}},n,this)}),execute:regeneratorRuntime.mark(function i(e){var t,r,n,a,s,o,u,c,l;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.delegateYield(Struct.Insert.getDistanceToOrigin.call(this,e),"t0",1);case 1:if(r=t=i.t0,null==e.left){i.next=14;break}return i.delegateYield(this.getOperation(e.left),"t1",4);case 4:if(n=i.t1,null!=n.right){i.next=9;break}i.t2=null,i.next=11;break;case 9:return i.delegateYield(this.getOperation(n.right),"t3",10);case 10:i.t2=i.t3;case 11:n=i.t2,i.next=25;break;case 14:return i.delegateYield(this.getOperation(e.parent),"t4",15);case 15:if(a=i.t4,o=e.parentSub?a.map[e.parentSub]:a.start,null!=o){i.next=21;break}i.t5=null,i.next=23;break;case 21:return i.delegateYield(this.getOperation(o),"t6",22);case 22:i.t5=i.t6;case 23:s=i.t5,n=s;case 25:if(null==n||compareIds(n.id,e.right)){i.next=48;break}return i.delegateYield(Struct.Insert.getDistanceToOrigin.call(this,n),"t7",28);case 28:if(u=i.t7,u!==t){i.next=33;break}n.id[0]<e.id[0]&&(e.left=n.id,r=t+1),i.next=38;break;case 33:if(!(t>u)){i.next=37;break}u>=t-r&&(e.left=n.id,r=t+1),i.next=38;break;case 37:return i.abrupt("break",51);case 38:if(t++,!n.right){i.next=44;break}return i.delegateYield(this.getOperation(n.right),"t9",41);case 41:i.t8=i.t9,i.next=45;break;case 44:i.t8=null;case 45:n=i.t8,i.next=49;break;case 48:return i.abrupt("break",51);case 49:i.next=25;break;case 51:if(c=null,l=null,i.t10=a,i.t10){i.next=57;break}return i.delegateYield(this.getOperation(e.parent),"t11",56);case 56:i.t10=i.t11;case 57:if(a=i.t10,null==e.left){i.next=70;break}return i.delegateYield(this.getOperation(e.left),"t12",60);case 60:return c=i.t12,e.right=c.right,i.delegateYield(this.addOperation(e),"t13",63);case 63:if(i.t14=i.t13,i.t14!==!1){i.next=66;break}return i.abrupt("return");case 66:return c.right=e.id,i.delegateYield(this.setOperation(c),"t15",68);case 68:i.next=75;break;case 70:return e.right=e.parentSub?a.map[e.parentSub]||null:a.start,i.delegateYield(this.addOperation(e),"t16",72);case 72:if(i.t17=i.t16,i.t17!==!1){i.next=75;break}return i.abrupt("return");case 75:if(null==e.right){i.next=80;break}return i.delegateYield(this.getOperation(e.right),"t18",77);case 77:return l=i.t18,l.left=e.id,i.delegateYield(this.setOperation(l),"t19",80);case 80:if(null==e.parentSub){i.next=86;break}if(null!=c){i.next=84;break}return a.map[e.parentSub]=e.id,i.delegateYield(this.setOperation(a),"t20",84);case 84:i.next=90;break;case 86:if(null!=l&&null!=c){i.next=90;break}return null==l&&(a.end=e.id),null==c&&(a.start=e.id),i.delegateYield(this.setOperation(a),"t21",90);case 90:case"end":return i.stop()}},i,this)})},List:{create:regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.start=null,e.end=null,e.struct="List",t.delegateYield(Struct.Operation.create.call(this,e),"t0",4);case 4:return t.abrupt("return",t.t0);case 5:case"end":return t.stop()}},a,this)}),encode:function(e){return{struct:"List",id:e.id,type:e.type}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function s(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.start=null,e.end=null,t.delegateYield(this.addOperation(e),"t0",3);case 3:if(t.t1=t.t0,t.t1!==!1){t.next=6;break}return t.abrupt("return");case 6:case"end":return t.stop()}},s,this)}),ref:regeneratorRuntime.mark(function o(e,t){var r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=e.start){n.next=2;break}return n.abrupt("return",null);case 2:return n.delegateYield(this.getOperation(e.start),"t0",3);case 3:r=n.t0;case 4:if(0===t||null==r.right){n.next=10;break}return n.delegateYield(this.getOperation(r.right),"t1",6);case 6:r=n.t1,t--,n.next=4;break;case 10:return n.abrupt("return",r);case 11:case"end":return n.stop()}},o,this)}),map:regeneratorRuntime.mark(function u(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:e=e.start,r=[];case 2:if(null==e){i.next=9;break}return i.delegateYield(this.getOperation(e),"t0",4);case 4:n=i.t0,r.push(t(n.content)),e=n.right,i.next=2;break;case 9:return i.abrupt("return",r);case 10:case"end":return i.stop()}},u,this)}),insert:regeneratorRuntime.mark(function c(e,t,r){var n,i,a,s,c;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.delegateYield(Struct.List.ref.call(this,e,t),"t0",1);case 1:n=o.t0,i=null!=n?n.id:null,a=null!=n?n.left:null,o.t1=regeneratorRuntime.keys(r);case 5:if((o.t2=o.t1()).done){o.next=12;break}return s=o.t2.value,c={left:a,right:i,content:r[s],parent:e.id},o.delegateYield(Struct.Insert.create.call(this,c),"t3",9);case 9:a=o.t3.id,o.next=5;break;case 12:case"end":return o.stop()}},c,this)})},Map:{create:regeneratorRuntime.mark(function l(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.map={},e.struct="Map",t.delegateYield(Struct.Operation.create.call(this,e),"t0",3);case 3:return t.abrupt("return",t.t0);case 4:case"end":return t.stop()}},l,this)}),encode:function(e){return{struct:"Map",type:e.type,id:e.id}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function p(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.addOperation(e),"t0",1);case 1:if(t.t1=t.t0,t.t1!==!1){t.next=4;break}return t.abrupt("return");case 4:case"end":return t.stop()}},p,this)}),get:regeneratorRuntime.mark(function f(e,t){var r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(this.getOperation(e.map[t]),"t0",1);case 1:if(r=n.t0,null!=r){n.next=6;break}n.t1=void 0,n.next=13;break;case 6:if(null!=r.opContent){n.next=10;break}n.t2=r.content,n.next=12;break;case 10:return n.delegateYield(this.getType(r.opContent),"t3",11);case 11:n.t2=n.t3;case 12:n.t1=n.t2;case 13:return n.abrupt("return",n.t1);case 14:case"end":return n.stop()}},f,this)}),set:regeneratorRuntime.mark(function h(e,t,r){var n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return n={left:null,right:e.map[t]||null,parent:e.id,parentSub:t},null!=r&&null!=r._model&&null!=(i=r._model.id)&&2===i.length?n.opContent=i:n.content=r,a.delegateYield(Struct.Insert.create.call(this,n),"t0",3);case 3:case"end":return a.stop()}},h,this)})}};
 //# sourceMappingURL=y.js.map
\ No newline at end of file
diff --git a/y.js.map b/y.js.map
index 5ccc9ca3..ab591164 100644
--- a/y.js.map
+++ b/y.js.map
@@ -1 +1 @@
-{"version":3,"sources":["y.js","Struct.js","Connectors/Test.js","OperationStores/Memory.js","runtime.js","Connector.js","OperationStore.js","Connectors/WebRTC.js","OperationStores/IndexedDB.js","OperationStores/RedBlackTree.js","Types/List.js","Types/Map.js"],"names":["_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","__proto__","_classCallCheck","instance","Constructor","compareIds","id1","id2","_flushOne","bufs","i","globalRoom","buffers","length","push","userId","getRandom","m","shift","user","users","receiveMessage","copyObject","o","c","key","_createClass","defineProperties","target","props","descriptor","defineProperty","protoProps","staticProps","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","resetTryEntry","completion","reset","values","iterable","iteratorMethod","iteratorSymbol","isNaN","hasOwn","hasOwnProperty","Symbol","inModule","module","runtime","regeneratorRuntime","exports","Gp","displayName","isGeneratorFunction","genFun","ctor","name","mark","awrap","async","iter","toString","keys","object","reverse","pop","prev","tempName","tempIndex","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","window","callee$0$0","context$1$0","Y","opts","db","connector","requestTransaction","callee$2$0","context$3$0","addOperation","id","struct","map","transact","destroy","disconnect","removeDatabase","AbstractConnector","y","role","connections","userEventListeners","whenSyncedListeners","currentSyncTarget","syncingClients","forwardToSyncingClients","debug","setUserId","onUserEvent","f","userLeft","findNextSyncTarget","_iterator","_isArray","Array","isArray","_i","_ref","action","userJoined","isSynced","_iterator2","_isArray2","_i2","_ref2","whenSynced","syncUser","uid","conn","t0","t1","getStateVector","t3","t2","t4","stateVector","send","_iterator3","_isArray3","_i3","_ref3","sender","_this","console","log","JSON","stringify","callee$3$0","ops","sv","context$4$0","getOperations","os","setTimeout","filter","cli","syncingClientDuration","apply","broadcast","_iterator4","_isArray4","_i4","_ref4","client","parseMessageFromXml","parseArray","_x","_again","_function","node","_iterator5","_isArray5","_i5","_ref5","n","children","getAttribute","parseObject","json","attrName","attrs","int","parseInt","encodeMessageToXml","msg","encodeObject","encodeArray","setAttribute","array","_iterator6","_isArray6","_i6","_ref6","e","xmlns","AbstractTransaction","store","getType","op","context$2$0","getOperation","Create","getState","clock","setState","setOperation","operationAdded","AbstractOperationStore","parentListeners","parentListenersRequestPending","parentListenersActivated","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","required","Struct","requiredOps","whenOperationsExist","ids","listener","missing","_id","sid","l","exeNow","ls","execute","parse","t6","t5","t7","t8","listeners","parent","al","activatedOperations","parentId","notifyObservers","removeParentListener","g","addParentListener","Operation","encode","Insert","left","right","start","end","origin","parentSub","opContent","getDistanceToOrigin","d","distanceToOrigin","startId","oOriginDistance","t9","t10","t11","t12","t14","t13","t17","t16","t18","List","ref","pos","res","operation","content","insert","contents","Map","get","set","oid","_model","removeUser","addUser","uname","u","userIdCounter","Test","_AbstractConnector","options","message","flushAll","flushOne","WebRTC","_AbstractConnector2","room","url","swr","SimpleWebRTC","once","joinRoom","webrtc","peers","on","peer","room_","payload","success","getPeers","sendDirectly","sendDirectlyToAll","IndexedDB","Transaction","_AbstractTransaction","transaction","objectStore","buffer","put","removeOperation","cursorResult","cursor","openCursor","getStateSet","ss","_iterator7","_isArray7","_i7","_ref7","startSS","endSV","_iterator8","_isArray8","_i8","_ref8","endState","startPos","endPos","range","IDBKeyRange","bound","OperationStore","_AbstractOperationStore","handleTransactions","t","request","IDBRequest","IDBCursor","onsuccess","tGen","onerror","transactionQueue","queue","onRequest","IDBOpenDBRequest","event","onupgradeneeded","createObjectStore","keyPath","namespace","idbVersion","transactionGen","cont","indexedDB","open","makeGen","close","deleteDatabase","Memory","_AbstractTransaction2","_iterator9","_isArray9","_i9","_ref9","makeOperationReady","_AbstractOperationStore2","gen","N","val","color","_left","_right","_parent","isRed","isBlack","redden","blacken","rotateLeft","tree","newParent","newRight","root","p","rotateRight","newLeft","getUncle","RBTree","findNodeWithLowerBound","from","iterate","to","find","findNode","isFakeChild","child","_fixDelete","sibling","add","v","_fixInsert","uncle","grandparent","YList","model","args$3$0","arguments","YMap"],"mappings":"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","file":"y.js","sourcesContent":["/* @flow */\n\nconst GeneratorFunction = (function*(){}).constructor;\n\nclass Y { //eslint-disable-line no-unused-vars\n  constructor (opts) {\n    this.db = new Y[opts.db.name](this, opts.db);\n    this.connector = new Y[opts.connector.name](this, opts.connector);\n    this.db.requestTransaction(function*(){\n      // create initial Map type\n      yield* this.addOperation({\n        id: [\"_\", 0],\n        struct: \"Map\",\n        map: {}\n      });\n    });\n  }\n  transact (generator) {\n    if (generator.constructor !== GeneratorFunction) {\n      throw new Error(\"y.transact requires a Generator function! E.g. function*(){/*..*/}\");\n    }\n    this.db.requestTransaction(generator);\n  }\n  destroy () {\n    this.connector.disconnect();\n    this.db.removeDatabase();\n    this.connector = null;\n    this.db = null;\n    this.transact = function(){\n      throw new Error(\"Remember?, you destroyed this type ;)\");\n    };\n  }\n}\n","/* @flow */\n\n// Op is anything that we could get from the OperationStore.\ntype Op = Object;\ntype Id = [string, number];\n\ntype List = {\n  id: Id,\n  start: Insert,\n  end: Insert\n};\n\ntype Insert = {\n  id: Id,\n  left: Insert,\n  right: Insert,\n  origin: Insert,\n  parent: List,\n  content: any\n};\n\nfunction compareIds(id1, id2) {\n\n  if (id1 == null || id2 == null) {\n    if (id1 == null && id2 == null) {\n      return true;\n    }\n    return false;\n  }\n  if (id1[0] === id2[0] && id1[1] === id2[1]) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nvar Struct = {\n  Operation: {  //eslint-disable-line no-unused-vars\n    create: function*(op : Op) : Struct.Operation {\n      var user = this.store.y.connector.userId;\n      var state = yield* this.getState(user);\n      op.id = [user, state.clock];\n      if ((yield* this.addOperation(op)) === false) {\n        throw new Error(\"This is highly unexpected :(\");\n      }\n      this.store.y.connector.broadcast({\n        type: \"update\",\n        ops: [Struct[op.struct].encode(op)]\n      });\n      return op;\n    }\n  },\n  Insert: {\n    /*{\n        content: any,\n        left: Id,\n        right: Id,\n        parent: Id,\n        parentSub: string (optional)\n      }\n    */\n    create: function*( op: Op ) : Insert {\n      if ( op.left === undefined\n        || op.right === undefined\n        || op.parent === undefined ) {\n          throw new Error(\"You must define left, right, and parent!\");\n        }\n      op.origin = op.left;\n      op.struct = \"Insert\";\n      yield* Struct.Operation.create.call(this, op);\n\n      if (op.left != null) {\n        var left = yield* this.getOperation(op.left);\n        left.right = op.id;\n        yield* this.setOperation(left);\n      }\n      if (op.right != null) {\n        var right = yield* this.getOperation(op.right);\n        right.left = op.id;\n        yield* this.setOperation(right);\n      }\n      var parent = yield* this.getOperation(op.parent);\n      if (op.parentSub != null){\n        if (compareIds(parent.map[op.parentSub], op.right)) {\n          parent.map[op.parentSub] = op.id;\n          yield* this.setOperation(parent);\n        }\n      } else {\n        var start = compareIds(parent.start, op.right);\n        var end = compareIds(parent.end, op.left);\n        if (start || end) {\n          if (start) {\n            parent.start = op.id;\n          }\n          if (end) {\n            parent.end = op.id;\n          }\n          yield* this.setOperation(parent);\n        }\n      }\n      return op;\n    },\n    encode: function(op){\n      /*var e = {\n        id: op.id,\n        left: op.left,\n        right: op.right,\n        origin: op.origin,\n        parent: op.parent,\n        content: op.content,\n        struct: \"Insert\"\n      };\n      if (op.parentSub != null){\n        e.parentSub = op.parentSub;\n      }\n      return e;*/\n      return op;\n    },\n    requiredOps: function(op){\n      var ids = [];\n      if(op.left != null){\n        ids.push(op.left);\n      }\n      if(op.right != null){\n        ids.push(op.right);\n      }\n      if(op.right == null && op.left == null) {\n        ids.push(op.parent);\n      }\n      if (op.opContent != null) {\n        ids.push(op.opContent);\n      }\n      return ids;\n    },\n    getDistanceToOrigin: function *(op){\n      if (op.left == null) {\n        return 0;\n      } else {\n        var d = 0;\n        var o = yield* this.getOperation(op.left);\n        while (!compareIds(op.origin, (o ? o.id : null))) {\n          d++;\n          if (o.left == null) {\n            break;\n          } else {\n            o = yield* this.getOperation(o.left);\n          }\n        }\n        return d;\n      }\n    },\n    /*\n    # $this has to find a unique position between origin and the next known character\n    # case 1: $origin equals $o.origin: the $creator parameter decides if left or right\n    #         let $OL= [o1,o2,o3,o4], whereby $this is to be inserted between o1 and o4\n    #         o2,o3 and o4 origin is 1 (the position of o2)\n    #         there is the case that $this.creator < o2.creator, but o3.creator < $this.creator\n    #         then o2 knows o3. Since on another client $OL could be [o1,o3,o4] the problem is complex\n    #         therefore $this would be always to the right of o3\n    # case 2: $origin < $o.origin\n    #         if current $this insert_position > $o origin: $this ins\n    #         else $insert_position will not change\n    #         (maybe we encounter case 1 later, then this will be to the right of $o)\n    # case 3: $origin > $o.origin\n    #         $this insert_position is to the left of $o (forever!)\n    */\n    execute: function*(op){\n      var i; // loop counter\n      var distanceToOrigin = i = yield* Struct.Insert.getDistanceToOrigin.call(this, op); // most cases: 0 (starts from 0)\n      var o;\n      var parent;\n      var start;\n\n      // find o. o is the first conflicting operation\n      if (op.left != null) {\n        o = yield* this.getOperation(op.left);\n        o = (o.right == null) ? null : yield* this.getOperation(o.right);\n      } else { // left == null\n        parent = yield* this.getOperation(op.parent);\n        let startId = op.parentSub ? parent.map[op.parentSub] : parent.start;\n        start = startId == null ? null : yield* this.getOperation(startId);\n        o = start;\n      }\n\n      // handle conflicts\n      while (true) {\n        if (o != null && !compareIds(o.id, op.right)){\n          var oOriginDistance = yield* Struct.Insert.getDistanceToOrigin.call(this, o);\n          if (oOriginDistance === i) {\n            // case 1\n            if (o.id[0] < op.id[0]) {\n              op.left = o.id;\n              distanceToOrigin = i + 1;\n            }\n          } else if (oOriginDistance < i) {\n            // case 2\n            if (i - distanceToOrigin <= oOriginDistance) {\n              op.left = o.id;\n              distanceToOrigin = i + 1;\n            }\n          } else {\n            break;\n          }\n          i++;\n          o = o.right ? yield* this.getOperation(o.right) : null;\n        } else {\n          break;\n        }\n      }\n\n      // reconnect..\n      var left = null;\n      var right = null;\n      parent = parent || (yield* this.getOperation(op.parent));\n\n      // NOTE: You you have to call addOperation before you set any other operation!\n\n      // reconnect left and set right of op\n      if (op.left != null) {\n        left = yield* this.getOperation(op.left);\n        op.right = left.right;\n        if ((yield* this.addOperation(op)) === false) { // add here\n          return;\n        }\n        left.right = op.id;\n        yield* this.setOperation(left);\n      } else {\n        op.right = op.parentSub ? (parent.map[op.parentSub] || null) : parent.start;\n        if ((yield* this.addOperation(op)) === false) { // or here\n          return;\n        }\n      }\n      // reconnect right\n      if (op.right != null) {\n        right = yield* this.getOperation(op.right);\n        right.left = op.id;\n        yield* this.setOperation(right);\n      }\n\n      // notify parent\n      if (op.parentSub != null) {\n        if (left == null) {\n          parent.map[op.parentSub] = op.id;\n          yield* this.setOperation(parent);\n        }\n      } else {\n        if (right == null || left == null) {\n          if (right == null) {\n            parent.end = op.id;\n          }\n          if (left == null) {\n            parent.start = op.id;\n          }\n          yield* this.setOperation(parent);\n        }\n      }\n    }\n  },\n  List: {\n    create: function*( op : Op){\n      op.start = null;\n      op.end = null;\n      op.struct = \"List\";\n      return yield* Struct.Operation.create.call(this, op);\n    },\n    encode: function(op){\n      return {\n        struct: \"List\",\n        id: op.id,\n        type: op.type\n      };\n    },\n    requiredOps: function(){\n      /*\n      var ids = [];\n      if (op.start != null) {\n        ids.push(op.start);\n      }\n      if (op.end != null){\n        ids.push(op.end);\n      }\n      return ids;\n      */\n      return [];\n    },\n    execute: function* (op) {\n      op.start = null;\n      op.end = null;\n      if ((yield* this.addOperation(op)) === false) {\n        return;\n      }\n    },\n    ref: function* (op : Op, pos : number) : Insert {\n      if (op.start == null) {\n        return null;\n      }\n      var o = yield* this.getOperation(op.start);\n      while ( pos !== 0 && o.right != null) {\n        o = (yield* this.getOperation(o.right));\n        pos--;\n      }\n      return o;\n    },\n    map: function* (o : Op, f : Function) : Array<any> {\n      o = o.start;\n      var res = [];\n      while ( o != null) {\n        var operation = yield* this.getOperation(o);\n        res.push(f(operation.content));\n        o = operation.right;\n      }\n      return res;\n    },\n    insert: function* (op, pos : number, contents : Array<any>) {\n      var ref = yield* Struct.List.ref.call(this, op, pos);\n      var right = ref != null ? ref.id : null;\n      var left = ref != null ? ref.left : null;\n      for (var key in contents) {\n        var insert = {\n          left: left,\n          right: right,\n          content: contents[key],\n          parent: op.id\n        };\n        left = (yield* Struct.Insert.create.call(this, insert)).id;\n      }\n    }\n  },\n  Map: {\n    /*\n      {\n        // empty\n      }\n    */\n    create: function*( op : Op ){\n      op.map = {};\n      op.struct = \"Map\";\n      return yield* Struct.Operation.create.call(this, op);\n    },\n    encode: function(op){\n      return {\n        struct: \"Map\",\n        type: op.type,\n        id: op.id\n      };\n    },\n    requiredOps: function(){\n      /*\n      var ids = [];\n      for (var end in op.map) {\n        ids.push(op.map[end]);\n      }\n      return ids;\n      */\n      return [];\n    },\n    execute: function* (op) {\n      if ((yield* this.addOperation(op)) === false) {\n        return;\n      }\n    },\n    get: function* (op, name) {\n      var res = yield* this.getOperation(op.map[name]);\n      return (res == null) ? void 0 : (res.opContent == null\n                ? res.content : yield* this.getType(res.opContent));\n    },\n    set: function* (op, name, value) {\n      var insert = {\n        left: null,\n        right: op.map[name] || null,\n        parent: op.id,\n        parentSub: name\n      };\n      var oid;\n      if ( value != null && value._model != null\n           && (oid = value._model.id) != null && oid.length === 2) {\n        insert.opContent = oid;\n      } else {\n        insert.content = value;\n      }\n      yield* Struct.Insert.create.call(this, insert);\n    }\n  }\n};\n\nY.Struct = Struct;\n","var globalRoom = {\n  users: {},\n  buffers: {},\n  removeUser: function(user : AbstractConnector){\n\n    for (var i in this.users) {\n      this.users[i].userLeft(user);\n    }\n    delete this.users[user];\n    delete this.buffers[user];\n  },\n  addUser: function(connector){\n    this.users[connector.userId] = connector;\n    this.buffers[connector.userId] = [];\n    for (var uname in this.users) {\n      if (uname !== connector.userId) {\n        var u = this.users[uname];\n        u.userJoined(connector.userId, \"master\");\n        connector.userJoined(u.userId, \"master\");\n      }\n    }\n  }\n};\nfunction flushOne(){\n  var bufs = [];\n  for (var i in globalRoom.buffers) {\n    if (globalRoom.buffers[i].length > 0) {\n      bufs.push(i);\n    }\n  }\n  if (bufs.length > 0) {\n    var userId = getRandom(bufs);\n    var m = globalRoom.buffers[userId].shift();\n    var user = globalRoom.users[userId];\n    user.receiveMessage(m[0], m[1]);\n    return true;\n  } else {\n    return false;\n  }\n}\n// setInterval(flushOne, 10);\n\nvar userIdCounter = 0;\n\nclass Test extends AbstractConnector {\n  constructor (y, options) {\n    if(options === undefined){\n      throw new Error(\"Options must not be undefined!\");\n    }\n    options.role = \"master\";\n    options.forwardToSyncingClients = false;\n    super(y, options);\n    this.setUserId((userIdCounter++) + \"\");\n    globalRoom.addUser(this);\n    this.globalRoom = globalRoom;\n  }\n  send (userId, message) {\n    globalRoom.buffers[userId].push(JSON.parse(JSON.stringify([this.userId, message])));\n  }\n  broadcast (message) {\n    for (var key in globalRoom.buffers) {\n      globalRoom.buffers[key].push(JSON.parse(JSON.stringify([this.userId, message])));\n    }\n  }\n  disconnect () {\n    globalRoom.removeUser(this.userId);\n  }\n  flushAll () {\n    var c = true;\n    while (c) {\n      c = flushOne();\n    }\n  }\n  flushOne() {\n    flushOne();\n  }\n}\n\nY.Test = Test;\n","\ntype State = {\n  user: string,\n  clock: number\n};\n\n\nfunction copyObject (o) {\n  var c = {};\n  for (var key in o) {\n    c[key] = o[key];\n  }\n  return c;\n}\n\ntype StateVector = Array<State>;\ntype OperationSet = Object; // os[Id] = op\ntype StateSet = Object;\n\nY.Memory = (function(){ //eslint-disable-line no-unused-vars\n  class Transaction extends AbstractTransaction { //eslint-disable-line\n    ss: StateSet;\n    os: OperationSet;\n    store: OperationStore;\n\n    constructor (store : OperationStore) {\n      super(store);\n      this.ss = store.ss;\n      this.os = store.os;\n    }\n    *setOperation (op) {\n      if (op.struct === \"Insert\" && op.right === undefined) {\n        throw new Error(\"here!\");\n      }\n      this.os[JSON.stringify(op.id)] = op;\n      return op;\n    }\n    *getOperation (id) {\n      var op = this.os[JSON.stringify(id)];\n      if (op == null) {\n        throw new Error(\"Op does not exist..\");\n      } else {\n        return op;\n      }\n    }\n    *removeOperation (id) {\n      delete this.os[JSON.stringify(id)];\n    }\n    *setState (state : State) : State {\n      this.ss[state.user] = state.clock;\n    }\n    *getState (user : string) : State {\n      var clock = this.ss[user];\n      if (clock == null){\n        clock = 0;\n      }\n      return {\n        user: user,\n        clock: clock\n      };\n    }\n    *getStateVector () : StateVector {\n      var stateVector = [];\n\n      for (var user in this.ss) {\n        var clock = this.ss[user];\n        stateVector.push({\n          user: user,\n          clock: clock\n        });\n      }\n      return stateVector;\n    }\n    *getStateSet () : StateSet {\n      return this.ss;\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        if (user === \"_\") {\n          continue;\n        }\n        var startPos = startSS[user] || 0;\n        var endPos = endState.clock;\n\n        for (var clock = startPos; clock <= endPos; clock++) {\n          var op = this.os[JSON.stringify([user, clock])];\n          if (op != null) {\n            op = Struct[op.struct].encode(op);\n            ops.push(yield* this.makeOperationReady.call(this, startSS, op));\n          }\n        }\n      }\n      return ops;\n    }\n    *makeOperationReady (ss, op) {\n      // instead of ss, you could use currSS (a ss that increments when you add an operation)\n      var clock;\n      var o = op;\n      while (o.right != null){\n        // while unknown, go to the right\n        o = yield* this.getOperation(o.right);\n        clock = ss[o.id[0]];\n        if (clock != null && o.id[1] < clock) {\n          break;\n        }\n      }\n      op = copyObject(op);\n      op.right = (o == null) ? null : o.id;\n      return op;\n    }\n  }\n  class OperationStore extends AbstractOperationStore { //eslint-disable-line no-undef\n    constructor (y) {\n      super(y);\n      this.os = {};\n      this.ss = {};\n    }\n    requestTransaction (makeGen : Function) {\n      var t = new Transaction(this);\n      var gen = makeGen.call(t, new Y.Map.Create([\"_\", 0]));\n      var res = gen.next();\n      while(!res.done){\n        if (res.value === \"transaction\") {\n          res = gen.next(t);\n        } else {\n          throw new Error(\"You may not yield this type. (Maybe you meant to use 'yield*'?)\");\n        }\n      }\n    }\n    *removeDatabase () {\n      delete this.os;\n    }\n  }\n  return OperationStore;\n})();\n","/**\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","\nclass AbstractConnector { //eslint-disable-line no-unused-vars\n  /*\n    opts\n     .role : String Role of this client (\"master\" or \"slave\")\n     .userId : String that uniquely defines the user.\n  */\n  constructor (y, opts) {\n    this.y = y;\n    if (opts == null){\n      opts = {};\n    }\n    if (opts.role == null || opts.role === \"master\") {\n      this.role = \"master\";\n    } else if (opts.role === \"slave\") {\n      this.role = \"slave\";\n    } else {\n      throw new Error(\"Role must be either 'master' or 'slave'!\");\n    }\n    this.role = opts.role;\n    this.connections = {};\n    this.userEventListeners = [];\n    this.whenSyncedListeners = [];\n    this.currentSyncTarget = null;\n    this.syncingClients = [];\n    this.forwardToSyncingClients = (opts.forwardToSyncingClients === false) ? false : true;\n    this.debug = opts.debug ? true : false;\n  }\n  setUserId (userId) {\n    this.userId = userId;\n    this.y.db.setUserId(userId);\n  }\n  onUserEvent (f) {\n    this.userEventListeners.push(f);\n  }\n  userLeft (user : string) {\n    delete this.connections[user];\n    if (user === this.currentSyncTarget){\n      this.currentSyncTarget = null;\n      this.findNextSyncTarget();\n    }\n    for (var f of this.userEventListeners){\n      f({\n        action: \"userLeft\",\n        user: user\n      });\n    }\n  }\n  userJoined (user, role) {\n    if(role == null){\n      throw new Error(\"You must specify the role of the joined user!\");\n    }\n    if (this.connections[user] != null) {\n      throw new Error(\"This user already joined!\");\n    }\n    this.connections[user] = {\n      isSynced: false,\n      role: role\n    };\n    for (var f of this.userEventListeners) {\n      f({\n        action: \"userJoined\",\n        user: user,\n        role: role\n      });\n    }\n    if (this.currentSyncTarget == null) {\n      this.findNextSyncTarget();\n    }\n  }\n  // Execute a function _when_ we are connected.\n  // If not connected, wait until connected\n  whenSynced (f) {\n    if (this.isSynced === true) {\n      f();\n    } else {\n      this.whenSyncedListeners.push(f);\n    }\n  }\n  // returns false, if there is no sync target\n  // true otherwise\n  findNextSyncTarget () {\n    if (this.currentSyncTarget != null && this.connections[this.currentSyncTarget].isSynced === false) {\n      throw new Error(\"The current sync has not finished!\");\n    }\n\n    var syncUser = null;\n    for (var uid in this.connections) {\n      syncUser = this.connections[uid];\n      if (!syncUser.isSynced) {\n        break;\n      }\n    }\n    if (syncUser != null){\n      var conn = this;\n      this.y.db.requestTransaction(function*(){\n        conn.currentSyncTarget = uid;\n        conn.send(uid, {\n          type: \"sync step 1\",\n          stateVector: yield* this.getStateVector()\n        });\n      });\n    }\n    // set the state to synced!\n    if (!this.isSynced) {\n      this.isSynced = true;\n      for (var f of this.whenSyncedListeners) {\n        f();\n      }\n      this.whenSyncedListeners = null;\n    }\n    return false;\n  }\n  // You received a raw message, and you know that it is intended for to Yjs. Then call this function.\n  receiveMessage (sender, m){\n    if (this.debug) {\n      console.log(`${sender} -> ${this.userId}: ${JSON.stringify(m)}`); //eslint-disable-line\n    }\n    if (m.type === \"sync step 1\") {\n      // TODO: make transaction, stream the ops\n      let conn = this;\n      this.y.db.requestTransaction(function*(){\n        var ops = yield* this.getOperations(m.stateVector);\n        var sv = yield* this.getStateVector();\n        conn.send(sender, {\n          type: \"sync step 2\",\n          os: ops,\n          stateVector: sv\n        });\n        if (this.forwardToSyncingClients) {\n          conn.syncingClients.push(sender);\n          setTimeout(function(){\n            conn.syncingClients = conn.syncingClients.filter(function(cli){\n              return cli !== sender;\n            });\n            conn.send(sender, {\n              type: \"sync done\"\n            });\n          }, conn.syncingClientDuration);\n        }\n      });\n    } else if (m.type === \"sync step 2\") {\n      this.y.db.apply(m.os);\n      let conn = this;\n      this.y.db.requestTransaction(function*(){\n        var ops = yield* this.getOperations(m.stateVector);\n        if (ops.length > 0) {\n          conn.broadcast({\n            type: \"update\",\n            ops: ops\n          });\n        }\n      });\n    } else if (m.type === \"sync done\") {\n      this.connections[sender].isSynced = true;\n      this.findNextSyncTarget();\n    } else if (m.type === \"update\") {\n      if (this.forwardToSyncingClients) {\n        for (var client of this.syncingClients) {\n          this.send(client, m);\n        }\n      }\n      this.y.db.apply(m.ops);\n    }\n  }\n  // Currently, the HB encodes operations as JSON. For the moment I want to keep it\n  // that way. Maybe we support encoding in the HB as XML in the future, but for now I don't want\n  // too much overhead. Y is very likely to get changed a lot in the future\n  //\n  // Because we don't want to encode JSON as string (with character escaping, wich makes it pretty much unreadable)\n  // we encode the JSON as XML.\n  //\n  // When the HB support encoding as XML, the format should look pretty much like this.\n  //\n  // does not support primitive values as array elements\n  // expects an ltx (less than xml) object\n  parseMessageFromXml (m) {\n    function parseArray (node) {\n      for (var n of node.children){\n        if (n.getAttribute(\"isArray\") === \"true\") {\n          return parseArray(n);\n        } else {\n          return parseObject(n);\n        }\n      }\n    }\n    function parseObject (node) {\n      var json = {};\n      for (var attrName in node.attrs) {\n        var value = node.attrs[attrName];\n        var int = parseInt(value);\n        if (isNaN(int) || (\"\" + int) !== value){\n          json[attrName] = value;\n        } else {\n          json[attrName] = int;\n        }\n      }\n      for (var n in node.children){\n        var name = n.name;\n        if (n.getAttribute(\"isArray\") === \"true\") {\n          json[name] = parseArray(n);\n        } else {\n          json[name] = parseObject(n);\n        }\n      }\n      return json;\n    }\n    parseObject(m);\n  }\n  // encode message in xml\n  // we use string because Strophe only accepts an \"xml-string\"..\n  // So {a:4,b:{c:5}} will look like\n  // <y a=\"4\">\n  //   <b c=\"5\"></b>\n  // </y>\n  // m - ltx element\n  // json - Object\n  encodeMessageToXml (msg, obj) {\n    // attributes is optional\n    function encodeObject (m, json) {\n      for (var name in json) {\n        var value = json[name];\n        if (name == null) {\n          // nop\n        } else if (value.constructor === Object) {\n          encodeObject(m.c(name), value);\n        } else if (value.constructor === Array) {\n          encodeArray(m.c(name), value);\n        } else {\n          m.setAttribute(name, value);\n        }\n      }\n    }\n    function encodeArray (m, array) {\n      m.setAttribute(\"isArray\", \"true\");\n      for (var e of array) {\n        if (e.constructor === Object) {\n          encodeObject(m.c(\"array-element\"), e);\n        } else {\n          encodeArray(m.c(\"array-element\"), e);\n        }\n      }\n    }\n    if (obj.constructor === Object) {\n      encodeObject(msg.c(\"y\", { xmlns: \"http://y.ninja/connector-stanza\" }), obj);\n    } else if (obj.constructor === Array) {\n      encodeArray(msg.c(\"y\", { xmlns: \"http://y.ninja/connector-stanza\" }), obj);\n    } else {\n      throw new Error(\"I can't encode this json!\");\n    }\n  }\n}\n","/* @flow */\nclass AbstractTransaction { //eslint-disable-line no-unused-vars\n  constructor (store : OperationStore) {\n    this.store = store;\n  }\n  *getType (id) {\n    var op = yield* this.getOperation(id);\n    return new Y[op.type].Create(op);\n  }\n  // returns false if operation is not expected.\n  *addOperation (op) {\n    var state = yield* this.getState(op.id[0]);\n    if (op.id[1] === state.clock){\n      state.clock++;\n      yield* this.setState(state);\n      yield* this.setOperation(op);\n      this.store.operationAdded(op);\n      return true;\n    } else if (op.id[1] < state.clock) {\n      return false;\n    } else {\n      throw new Error(\"Operations must arrive in order!\");\n    }\n  }\n}\nY.AbstractTransaction = AbstractTransaction;\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 (y) {\n    this.y = y;\n    this.parentListeners = {};\n    this.parentListenersRequestPending = false;\n    this.parentListenersActivated = {};\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\n      a property before you iterate over it!\n    */\n  }\n  setUserId (userId) {\n    this.userId = userId;\n  }\n  apply (ops) {\n    for (var key in ops) {\n      var o = ops[key];\n      var required = Y.Struct[o.struct].requiredOps(o);\n      this.whenOperationsExist(required, o);\n    }\n  }\n  // op is executed as soon as every operation requested is available.\n  // Note that Transaction can (and should) buffer requests.\n  whenOperationsExist (ids : Array<Id>, op : Operation) {\n    if (ids.length > 0) {\n      let listener : Listener = {\n        op: op,\n        missing: ids.length\n      };\n\n      for (let key in ids) {\n        let id = ids[key];\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        op: op\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 key in exeNow) {\n        let o = exeNow[key].op;\n        yield* Struct[o.struct].execute.call(this, o);\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 key in l) {\n            let listener = l[key];\n            let o = listener.op;\n            if (--listener.missing === 0){\n              yield* Struct[o.struct].execute.call(this, o);\n            }\n          }\n        }\n      }\n    });\n  }\n  // called by a transaction when an operation is added\n  operationAdded (op) {\n    var sid = JSON.stringify(op.id);\n    var l = this.listenersById[sid];\n    delete this.listenersById[sid];\n\n    // notify whenOperation listeners (by id)\n    if (l != null) {\n      for (var key in l){\n        var listener = l[key];\n        if (--listener.missing === 0){\n          this.whenOperationsExist([], listener.op);\n        }\n      }\n    }\n    // notify parent listeners, if possible\n    var listeners = this.parentListeners[op.parent];\n    if ( this.parentListenersRequestPending\n        || ( listeners == null )\n        || ( listeners.length === 0 )) {\n      return;\n    }\n    var al = this.parentListenersActivated[JSON.stringify(op.parent)];\n    if ( al == null ){\n      al = [];\n      this.parentListenersActivated[JSON.stringify(op.parent)] = al;\n    }\n    al.push(op);\n\n    this.parentListenersRequestPending = true;\n    var store = this;\n    this.requestTransaction(function*(){\n      store.parentListenersRequestPending = false;\n      var activatedOperations = store.parentListenersActivated;\n      store.parentListenersActivated = {};\n      for (var parentId in activatedOperations){\n        var parent = yield* this.getOperation(parentId);\n        Struct[parent.struct].notifyObservers(activatedOperations[parentId]);\n      }\n    });\n\n  }\n  removeParentListener (id, f) {\n    var ls = this.parentListeners[id];\n    if (ls != null) {\n      this.parentListeners[id] = ls.filter(function(g){\n        return (f !== g);\n      });\n    }\n  }\n  addParentListener (id, f) {\n    var ls = this.parentListeners[JSON.stringify(id)];\n    if (ls == null) {\n      ls = [];\n      this.parentListeners[JSON.stringify(id)] = ls;\n    }\n    ls.push(f);\n  }\n}\nY.AbstractOperationStore = AbstractOperationStore;\n","\nclass WebRTC extends AbstractConnector {\n  constructor (options) {\n    if(options === undefined){\n      throw new Error(\"Options must not be undefined!\");\n    }\n    super({\n      role: \"slave\"\n    });\n\n    var room = options.room;\n\n    // connect per default to our server\n    if(options.url == null){\n      options.url = \"https://yatta.ninja:8888\";\n    }\n\n    var swr = new SimpleWebRTC(options); //eslint-disable-line no-undef\n    this.swr = swr;\n    var self = this;\n\n    swr.once(\"connectionReady\", function(userId){\n      // SimpleWebRTC (swr) is initialized\n      swr.joinRoom(room);\n\n      swr.once(\"joinedRoom\", function(){\n        self.setUserId(userId);\n        var i;\n        // notify the connector class about all the users that already\n        // joined the session\n        for(i in self.swr.webrtc.peers){\n          self.userJoined(self.swr.webrtc.peers[i].id, \"master\");\n        }\n        swr.on(\"channelMessage\", function(peer, room_, message){\n          // The client received a message\n          // Check if the connector is already initialized,\n          // only then forward the message to the connector class\n          if(message.type != null ){\n            self.receiveMessage(peer.id, message.payload);\n          }\n        });\n      });\n\n      swr.on(\"createdPeer\", function(peer){\n        // a new peer/client joined the session.\n        // Notify the connector class, if the connector\n        // is already initialized\n        self.userJoined(peer.id, \"master\");\n      });\n\n      swr.on(\"peerStreamRemoved\", function(peer){\n        // a client left the session.\n        // Notify the connector class, if the connector\n        // is already initialized\n        self.userLeft(peer.id);\n      });\n    });\n  }\n  send (uid, message) {\n    var self = this;\n    // we have to make sure that the message is sent under all circumstances\n    var send = function(){\n      // check if the clients still exists\n      var peer = self.swr.webrtc.getPeers(uid)[0];\n      var success;\n      if(peer){\n        // success is true, if the message is successfully sent\n        success = peer.sendDirectly(\"simplewebrtc\", \"yjs\", message);\n      }\n      if(!success){\n        // resend the message if it didn't work\n        setTimeout(send, 500);\n      }\n    };\n    // try to send the message\n    send();\n  }\n  broadcast (message) {\n    this.swr.sendDirectlyToAll(\"simplewebrtc\", \"yjs\", message);\n  }\n}\n\nY.WebRTC = WebRTC;\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\nY.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 (y, opts) {\n      super(y);\n      if (opts == null) {\n        opts = {};\n      }\n      if (opts.namespace == null || typeof opts.namespace !== \"string\") {\n        throw new Error(\"IndexedDB: expect a string (opts.namespace)!\");\n      } else {\n        this.namespace = opts.namespace;\n      }\n      if (opts.idbVersion != null) {\n        this.idbVersion = opts.idbVersion;\n      } else {\n        this.idbVersion = 5;\n      }\n\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(opts.namespace, store.idbVersion);\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, request);/*\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          return;\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            try {\n              db.createObjectStore(\"OperationStore\", {keyPath: \"id\"});\n              db.createObjectStore(\"StateVector\", {keyPath: \"user\"});\n            } catch (e) {\n                // console.log(\"Store already exists!\");\n            }\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","\n\n\nclass N {\n  // A created node is always red!\n  constructor (val) {\n    this.val = val;\n    this.color = true;\n    this._left = null;\n    this._right = null;\n    this._parent = null;\n    if (val.id === null) {\n      throw new Error(\"You must define id!\");\n    }\n  }\n  isRed () { return this.color; }\n  isBlack () { return !this.color; }\n  redden () { this.color = true; return this; }\n  blacken () { this.color = false; return this; }\n  get grandparent () {\n    return this.parent.parent;\n  }\n  get parent () {\n    return this._parent;\n  }\n  get sibling () {\n    return (this === this.parent.left) ?\n            this.parent.right : this.parent.left;\n  }\n  get left () {\n    return this._left;\n  }\n  get right () {\n    return this._right;\n  }\n  set left (n) {\n    if (n !== null) {\n      n._parent = this;\n    }\n    this._left = n;\n  }\n  set right (n) {\n    if (n !== null) {\n      n._parent = this;\n    }\n    this._right = n;\n  }\n  rotateLeft (tree) {\n    var parent = this.parent;\n    var newParent = this.right;\n    var newRight = this.right.left;\n    newParent.left = this;\n    this.right = newRight;\n    if (parent === null) {\n      tree.root = newParent;\n      newParent._parent = null;\n    } else if (parent.left === this) {\n      parent.left = newParent;\n    } else if (parent.right === this) {\n      parent.right = newParent;\n    } else {\n      throw new Error(\"The elements are wrongly connected!\");\n    }\n  }\n  next () {\n    if ( this.right !== null ) {\n      // search the most left node in the right tree\n      var o = this.right;\n      while (o.left !== null) {\n        o = o.left;\n      }\n      return o;\n    } else {\n      var p = this;\n      while (p.parent !== null && p !== p.parent.left) {\n        p = p.parent;\n      }\n      return p.parent;\n    }\n  }\n  rotateRight (tree) {\n    var parent = this.parent;\n    var newParent = this.left;\n    var newLeft = this.left.right;\n    newParent.right = this;\n    this.left = newLeft;\n    if (parent === null) {\n      tree.root = newParent;\n      newParent._parent = null;\n    } else if (parent.left === this) {\n      parent.left = newParent;\n    } else if (parent.right === this) {\n      parent.right = newParent;\n    } else {\n      throw new Error(\"The elements are wrongly connected!\");\n    }\n  }\n  getUncle () {\n    // we can assume that grandparent exists when this is called!\n    if (this.parent === this.parent.parent.left) {\n      return this.parent.parent.right;\n    } else {\n      return this.parent.parent.left;\n    }\n  }\n}\n\nclass RBTree { //eslint-disable-line no-unused-vars\n  constructor () {\n    this.root = null;\n  }\n  findNodeWithLowerBound (from) {\n    var o = this.root;\n    if (o === null) {\n      return false;\n    } else {\n      while (true) {\n        if ((from === null || from < o.val.id) && o.left !== null) {\n          // o is included in the bound\n          // try to find an element that is closer to the bound\n          o = o.left;\n        } else if (o.val.id < from) {\n          // o is not within the bound, maybe one of the right elements is..\n          if (o.right !== null) {\n            o = o.right;\n          } else {\n            // there is no right element. Search for the next bigger element,\n            // this should be within the bounds\n            return o.next();\n          }\n        } else {\n          return o;\n        }\n      }\n    }\n  }\n  iterate (from, to, f) {\n    var o = this.findNodeWithLowerBound(from);\n    while ( o !== null && (to === null || o.val.id <= to) ) {\n      f(o.val);\n      o = o.next();\n    }\n    return true;\n  }\n  find (id) {\n    return this.findNode(id).val;\n  }\n  findNode (id) {\n    var o = this.root;\n    if (o === null) {\n      return false;\n    } else {\n      while (true) {\n        if (o === null) {\n          return false;\n        }\n        if (id < o.val.id) {\n          o = o.left;\n        } else if (o.val.id < id) {\n          o = o.right;\n        } else {\n          return o;\n        }\n      }\n    }\n  }\n  delete (id) {\n    var d = this.findNode(id);\n    if (d.left !== null && d.right !== null) {\n      // switch d with the greates element in the left subtree.\n      // o should have at most one child.\n      var o = d.left;\n      // find\n      while (o.right !== null) {\n        o = o.right;\n      }\n      // switch\n      d.val = o.val;\n      d = o;\n    }\n    // d has at most one child\n    // let n be the node that replaces d\n    var isFakeChild;\n    var child = d.left || d.right;\n    if ( child === null) {\n      isFakeChild = true;\n      child = new N({id: 0});\n      child.blacken();\n      d.right = child;\n    } else {\n      isFakeChild = false;\n    }\n\n    if (d.parent === null) {\n      if (!isFakeChild) {\n        this.root = child;\n        child.blacken();\n        child._parent = null;\n      } else {\n        this.root = null;\n      }\n      return;\n    } else if (d.parent.left === d) {\n      d.parent.left = child;\n    } else if (d.parent.right === d) {\n      d.parent.right = child;\n    } else {\n      throw new Error(\"Impossible!\");\n    }\n    if ( d.isBlack() ) {\n      if ( child.isRed() ) {\n        child.blacken();\n      } else {\n        this._fixDelete(child);\n      }\n    }\n    this.root.blacken();\n    if (isFakeChild) {\n      if (child.parent.left === child) {\n        child.parent.left = null;\n      } else if (child.parent.right === child) {\n        child.parent.right = null;\n      } else {\n        throw new Error(\"Impossible #3\");\n      }\n    }\n  }\n  _fixDelete (n) {\n    function isBlack (node) {\n      return node !== null ? node.isBlack() : true;\n    }\n    function isRed(node) {\n      return node !== null ? node.isRed() : false;\n    }\n    if (n.parent === null) {\n      // this can only be called after the first iteration of fixDelete.\n      return;\n    }\n    // d was already replaced by the child\n    // d is not the root\n    // d and child are black\n    var sibling = n.sibling;\n    if (isRed(sibling)) {\n      // make sibling the grandfather\n      n.parent.redden();\n      sibling.blacken();\n      if (n === n.parent.left) {\n        n.parent.rotateLeft(this);\n      } else if (n === n.parent.right) {\n        n.parent.rotateRight(this);\n      } else {\n        throw new Error(\"Impossible #2\");\n      }\n      sibling = n.sibling;\n    }\n    // parent, sibling, and children of n are black\n    if ( n.parent.isBlack() &&\n         sibling.isBlack() &&\n         isBlack(sibling.left) &&\n         isBlack(sibling.right)\n    ) {\n      sibling.redden();\n      this._fixDelete(n.parent);\n    } else if ( n.parent.isRed() &&\n                sibling.isBlack() &&\n                isBlack(sibling.left) &&\n                isBlack(sibling.right)\n    ) {\n      sibling.redden();\n      n.parent.blacken();\n    } else {\n      if ( n === n.parent.left &&\n           sibling.isBlack() &&\n           isRed(sibling.left) &&\n           isBlack(sibling.right)\n      ) {\n        sibling.redden();\n        sibling.left.blacken();\n        sibling.rotateRight(this);\n        sibling = n.sibling;\n      } else if ( n === n.parent.right &&\n                  sibling.isBlack() &&\n                  isRed(sibling.right) &&\n                  isBlack(sibling.left)\n      ) {\n        sibling.redden();\n        sibling.right.blacken();\n        sibling.rotateLeft(this);\n        sibling = n.sibling;\n      }\n      sibling.color = n.parent.color;\n      n.parent.blacken();\n      if (n === n.parent.left) {\n        sibling.right.blacken();\n        n.parent.rotateLeft(this);\n      } else {\n        sibling.left.blacken();\n        n.parent.rotateRight(this);\n      }\n    }\n  }\n  add (v) {\n    var node = new N(v);\n    if (this.root !== null) {\n      var p = this.root; // p abbrev. parent\n      while (true) {\n        if (node.val.id < p.val.id) {\n          if (p.left === null) {\n            p.left = node;\n            break;\n          } else {\n            p = p.left;\n          }\n        } else if (p.val.id < node.val.id) {\n          if (p.right === null) {\n            p.right = node;\n            break;\n          } else {\n            p = p.right;\n          }\n        } else {\n          return false;\n        }\n      }\n      this._fixInsert(node);\n    } else {\n      this.root = node;\n    }\n    this.root.blacken();\n  }\n  _fixInsert (n) {\n    if (n.parent === null) {\n      n.blacken();\n      return;\n    } else if (n.parent.isBlack()) {\n      return;\n    }\n    var uncle = n.getUncle();\n    if (uncle !== null && uncle.isRed()) {\n      // Note: parent: red, uncle: red\n      n.parent.blacken();\n      uncle.blacken();\n      n.grandparent.redden();\n      this._fixInsert(n.grandparent);\n    } else {\n      // Note: parent: red, uncle: black or null\n      // Now we transform the tree in such a way that\n      // either of these holds:\n      //   1) grandparent.left.isRed\n      //     and grandparent.left.left.isRed\n      //   2) grandparent.right.isRed\n      //     and grandparent.right.right.isRed\n      if (n === n.parent.right\n        && n.parent === n.grandparent.left) {\n          n.parent.rotateLeft(this);\n          // Since we rotated and want to use the previous\n          // cases, we need to set n in such a way that\n          // n.parent.isRed again\n          n = n.left;\n      } else if (n === n.parent.left\n        && n.parent === n.grandparent.right) {\n          n.parent.rotateRight(this);\n          // see above\n          n = n.right;\n      }\n      // Case 1) or 2) hold from here on.\n      // Now traverse grandparent, make parent a black node\n      // on the highest level which holds two red nodes.\n      n.parent.blacken();\n      n.grandparent.redden();\n      if (n === n.parent.left) {\n        // Case 1\n        n.grandparent.rotateRight(this);\n      } else {\n        // Case 2\n        n.grandparent.rotateLeft(this);\n      }\n    }\n  }\n}\n","\n\n(function(){\n\n  class List {\n    constructor (_model) {\n      this._model = _model;\n    }\n    *val (pos) {\n      var t = yield \"transaction\";\n      if (pos != null) {\n        var o = yield* Y.Struct.List.ref.call(t, this._model, pos);\n        return o ? o.content : null;\n      } else {\n        return yield* Y.Struct.List.map.call(t, this._model, function(c){return c; });\n      }\n    }\n    *insert (pos, contents) {\n      var t = yield \"transaction\";\n      yield* Y.Struct.List.insert.call(t, this._model, pos, contents);\n    }\n  }\n\n  Y.List = function* YList(){\n    var t = yield \"transaction\";\n    var model = yield* Y.Struct.List.create.call(t, {type: \"List\"});\n    return new List(model);\n  };\n  Y.List.Create = List;\n})();\n","\n(function(){\n  class Map {\n    constructor (_model) {\n      this._model = _model;\n    }\n    *val () {\n      var t = yield \"transaction\";\n      var model = yield* t.getOperation(this._model);\n      if (arguments.length === 1) {\n        return yield* Y.Struct.Map.get.call(t, model, arguments[0]);\n      } else if (arguments.length === 2) {\n        return yield* Y.Struct.Map.set.call(t, model, arguments[0], arguments[1]);\n      } else {\n        throw new Error(\"Implement this case!\");\n      }\n    }\n  }\n\n  Y.Map = function* YMap(){\n    var t = yield \"transaction\";\n    if (this instanceof Y.AbstractOperationStore) {\n      var model = yield* Y.Struct.map.create.call(t, {type: \"Map\"});\n      return new Map(model);\n    } else {\n      throw new Error(\"Don't use `new` to create this type!\");\n    }\n  };\n  Y.Map.Create = Map;\n})();\n"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["y.js","Connectors/Test.js","OperationStores/Memory.js","Struct.js","runtime.js","Connectors/WebRTC.js","OperationStores/IndexedDB.js","OperationStores/RedBlackTree.js","Types/List.js","Types/Map.js","Connector.js","OperationStore.js"],"names":["_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","__proto__","_classCallCheck","instance","Constructor","_flushOne","bufs","i","globalRoom","buffers","length","push","userId","getRandom","m","shift","user","users","receiveMessage","copyObject","o","c","key","compareIds","id1","id2","_createClass","defineProperties","target","props","descriptor","defineProperty","protoProps","staticProps","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","resetTryEntry","completion","reset","values","iterable","iteratorMethod","iteratorSymbol","isNaN","hasOwn","hasOwnProperty","Symbol","inModule","module","runtime","regeneratorRuntime","exports","Gp","displayName","isGeneratorFunction","genFun","ctor","name","mark","awrap","async","iter","toString","keys","object","reverse","pop","prev","tempName","tempIndex","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","window","callee$0$0","context$1$0","Y","opts","db","connector","requestTransaction","callee$2$0","context$3$0","addOperation","id","struct","map","transact","destroy","disconnect","removeDatabase","AbstractTransaction","AbstractOperationStore","Struct","removeUser","userLeft","addUser","uname","u","userJoined","userIdCounter","Test","_AbstractConnector","y","options","role","forwardToSyncingClients","setUserId","send","message","JSON","parse","stringify","broadcast","flushAll","flushOne","AbstractConnector","WebRTC","_AbstractConnector2","room","url","swr","SimpleWebRTC","once","joinRoom","webrtc","peers","on","peer","room_","payload","uid","success","getPeers","sendDirectly","setTimeout","sendDirectlyToAll","IndexedDB","Transaction","_AbstractTransaction","store","transaction","sv","objectStore","os","buffer","setOperation","op","put","getOperation","get","removeOperation","setState","getState","t0","clock","getStateVector","stateVector","cursorResult","cursor","openCursor","getStateSet","ss","_iterator","_isArray","_i","_ref","Array","isArray","getOperations","startSS","ops","endSV","_iterator2","_isArray2","_i2","_ref2","endState","startPos","endPos","range","IDBKeyRange","bound","t1","OperationStore","_AbstractOperationStore","handleTransactions","t","request","IDBRequest","IDBCursor","onsuccess","tGen","onerror","transactionQueue","queue","onRequest","IDBOpenDBRequest","event","onupgradeneeded","createObjectStore","keyPath","e","namespace","idbVersion","transactionGen","cont","context$4$0","indexedDB","open","makeGen","close","deleteDatabase","Memory","_AbstractTransaction2","n","findNode","val","find","_iterator3","_isArray3","_i3","_ref3","res","_iterator4","_isArray4","_i4","_ref4","iterate","encode","makeOperationReady","t3","t2","right","_AbstractOperationStore2","RBTree","gen","Map","Create","N","color","_left","_right","_parent","isRed","isBlack","redden","blacken","rotateLeft","tree","parent","newParent","newRight","left","root","p","rotateRight","newLeft","getUncle","set","findNodeWithLowerBound","from","to","f","d","isFakeChild","child","_fixDelete","node","sibling","add","v","_fixInsert","uncle","grandparent","List","_model","pos","ref","content","insert","contents","YList","model","context$2$0","args$3$0","arguments","YMap","connections","userEventListeners","whenSyncedListeners","currentSyncTarget","syncingClients","debug","onUserEvent","findNextSyncTarget","_iterator5","_isArray5","_i5","_ref5","action","isSynced","_iterator6","_isArray6","_i6","_ref6","whenSynced","syncUser","conn","t4","_iterator7","_isArray7","_i7","_ref7","sender","_this","console","log","callee$3$0","filter","cli","syncingClientDuration","apply","_iterator8","_isArray8","_i8","_ref8","client","parseMessageFromXml","parseArray","_x","_again","_function","_iterator9","_isArray9","_i9","_ref9","children","getAttribute","parseObject","json","attrName","attrs","int","parseInt","encodeMessageToXml","msg","encodeObject","encodeArray","setAttribute","array","_iterator10","_isArray10","_i10","_ref10","xmlns","getType","operationAdded","parentListeners","parentListenersRequestPending","parentListenersActivated","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","required","requiredOps","whenOperationsExist","ids","listener","missing","_id","sid","l","exeNow","ls","execute","t6","t5","t7","t8","listeners","al","activatedOperations","parentId","notifyObservers","removeParentListener","g","addParentListener","Operation","Insert","start","end","origin","parentSub","opContent","getDistanceToOrigin","distanceToOrigin","startId","oOriginDistance","t9","t10","t11","t12","t14","t13","t17","t16","t18","operation","oid"],"mappings":"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","file":"y.js","sourcesContent":["/* @flow */\n\nconst GeneratorFunction = (function*(){}).constructor;\n\nclass Y { //eslint-disable-line no-unused-vars\n  constructor (opts) {\n    this.db = new Y[opts.db.name](this, opts.db);\n    this.connector = new Y[opts.connector.name](this, opts.connector);\n    this.db.requestTransaction(function*(){\n      // create initial Map type\n      yield* this.addOperation({\n        id: [\"_\", 0],\n        struct: \"Map\",\n        map: {}\n      });\n    });\n  }\n  transact (generator) {\n    if (generator.constructor !== GeneratorFunction) {\n      throw new Error(\"y.transact requires a Generator function! E.g. function*(){/*..*/}\");\n    }\n    this.db.requestTransaction(generator);\n  }\n  destroy () {\n    this.connector.disconnect();\n    this.db.removeDatabase();\n    this.connector = null;\n    this.db = null;\n    this.transact = function(){\n      throw new Error(\"Remember?, you destroyed this type ;)\");\n    };\n  }\n}\n\nY.AbstractTransaction = AbstractTransaction;\nY.AbstractOperationStore = AbstractOperationStore;\nY.Struct = Struct;\n","var globalRoom = {\n  users: {},\n  buffers: {},\n  removeUser: function(user : AbstractConnector){\n\n    for (var i in this.users) {\n      this.users[i].userLeft(user);\n    }\n    delete this.users[user];\n    delete this.buffers[user];\n  },\n  addUser: function(connector){\n    this.users[connector.userId] = connector;\n    this.buffers[connector.userId] = [];\n    for (var uname in this.users) {\n      if (uname !== connector.userId) {\n        var u = this.users[uname];\n        u.userJoined(connector.userId, \"master\");\n        connector.userJoined(u.userId, \"master\");\n      }\n    }\n  }\n};\nfunction flushOne(){\n  var bufs = [];\n  for (var i in globalRoom.buffers) {\n    if (globalRoom.buffers[i].length > 0) {\n      bufs.push(i);\n    }\n  }\n  if (bufs.length > 0) {\n    var userId = getRandom(bufs);\n    var m = globalRoom.buffers[userId].shift();\n    var user = globalRoom.users[userId];\n    user.receiveMessage(m[0], m[1]);\n    return true;\n  } else {\n    return false;\n  }\n}\n// setInterval(flushOne, 10);\n\nvar userIdCounter = 0;\n\nclass Test extends AbstractConnector {\n  constructor (y, options) {\n    if(options === undefined){\n      throw new Error(\"Options must not be undefined!\");\n    }\n    options.role = \"master\";\n    options.forwardToSyncingClients = false;\n    super(y, options);\n    this.setUserId((userIdCounter++) + \"\");\n    globalRoom.addUser(this);\n    this.globalRoom = globalRoom;\n  }\n  send (userId, message) {\n    globalRoom.buffers[userId].push(JSON.parse(JSON.stringify([this.userId, message])));\n  }\n  broadcast (message) {\n    for (var key in globalRoom.buffers) {\n      globalRoom.buffers[key].push(JSON.parse(JSON.stringify([this.userId, message])));\n    }\n  }\n  disconnect () {\n    globalRoom.removeUser(this.userId);\n  }\n  flushAll () {\n    var c = true;\n    while (c) {\n      c = flushOne();\n    }\n  }\n  flushOne() {\n    flushOne();\n  }\n}\n\nY.Test = Test;\n","\ntype State = {\n  user: string,\n  clock: number\n};\n\n\nfunction copyObject (o) {\n  var c = {};\n  for (var key in o) {\n    c[key] = o[key];\n  }\n  return c;\n}\n\ntype StateVector = Array<State>;\ntype OperationSet = Object; // os[Id] = op\ntype StateSet = Object;\n\nY.Memory = (function(){ //eslint-disable-line no-unused-vars\n  class Transaction extends AbstractTransaction { //eslint-disable-line\n    ss: StateSet;\n    os: OperationSet;\n    store: OperationStore;\n\n    constructor (store : OperationStore) {\n      super(store);\n      this.ss = store.ss;\n      this.os = store.os;\n    }\n    *setOperation (op) {\n      // TODO: you can remove this step! probs..\n      var n = this.os.findNode(op.id);\n      n.val = op;\n      return op;\n    }\n    *getOperation (id) {\n      var op = this.os.find(id);\n      if (op == null) {\n        throw new Error(\"Op does not exist..\");\n      } else {\n        return op;\n      }\n    }\n    *removeOperation (id) {\n      this.os.delete(id);\n    }\n    *setState (state : State) : State {\n      this.ss[state.user] = state.clock;\n    }\n    *getState (user : string) : State {\n      var clock = this.ss[user];\n      if (clock == null){\n        clock = 0;\n      }\n      return {\n        user: user,\n        clock: clock\n      };\n    }\n    *getStateVector () : StateVector {\n      var stateVector = [];\n      for (var user in this.ss) {\n        var clock = this.ss[user];\n        stateVector.push({\n          user: user,\n          clock: clock\n        });\n      }\n      return stateVector;\n    }\n    *getStateSet () : StateSet {\n      return this.ss;\n    }\n    *getOperations (startSS : StateSet) {\n      // TODO: use bounds here!\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        if (user === \"_\") {\n          continue;\n        }\n        var startPos = startSS[user] || 0;\n        var endPos = endState.clock;\n\n        this.os.iterate([user, startPos], [user, endPos], function(op){//eslint-disable-line\n          ops.push(Struct[op.struct].encode(op));\n        });\n      }\n      var res = [];\n      for (var op of ops) {\n        res.push(yield* this.makeOperationReady.call(this, startSS, op));\n      }\n      return res;\n    }\n    *makeOperationReady (ss, op) {\n      // instead of ss, you could use currSS (a ss that increments when you add an operation)\n      var clock;\n      var o = op;\n      while (o.right != null){\n        // while unknown, go to the right\n        o = yield* this.getOperation(o.right);\n        clock = ss[o.id[0]];\n        if (clock != null && o.id[1] < clock) {\n          break;\n        }\n      }\n      op = copyObject(op);\n      op.right = (o == null) ? null : o.id;\n      return op;\n    }\n  }\n  class OperationStore extends AbstractOperationStore { //eslint-disable-line no-undef\n    constructor (y) {\n      super(y);\n      this.os = new RBTree();\n      this.ss = {};\n    }\n    requestTransaction (makeGen : Function) {\n      var t = new Transaction(this);\n      var gen = makeGen.call(t, new Y.Map.Create([\"_\", 0]));\n      var res = gen.next();\n      while(!res.done){\n        if (res.value === \"transaction\") {\n          res = gen.next(t);\n        } else {\n          throw new Error(\"You may not yield this type. (Maybe you meant to use 'yield*'?)\");\n        }\n      }\n    }\n    *removeDatabase () {\n      delete this.os;\n    }\n  }\n  return OperationStore;\n})();\n","/* @flow */\n\n// Op is anything that we could get from the OperationStore.\ntype Op = Object;\ntype Id = [string, number];\n\ntype List = {\n  id: Id,\n  start: Insert,\n  end: Insert\n};\n\ntype Insert = {\n  id: Id,\n  left: Insert,\n  right: Insert,\n  origin: Insert,\n  parent: List,\n  content: any\n};\n\nfunction compareIds(id1, id2) {\n\n  if (id1 == null || id2 == null) {\n    if (id1 == null && id2 == null) {\n      return true;\n    }\n    return false;\n  }\n  if (id1[0] === id2[0] && id1[1] === id2[1]) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nvar Struct = {\n  Operation: {  //eslint-disable-line no-unused-vars\n    create: function*(op : Op) : Struct.Operation {\n      var user = this.store.y.connector.userId;\n      var state = yield* this.getState(user);\n      op.id = [user, state.clock];\n      if ((yield* this.addOperation(op)) === false) {\n        throw new Error(\"This is highly unexpected :(\");\n      }\n      this.store.y.connector.broadcast({\n        type: \"update\",\n        ops: [Struct[op.struct].encode(op)]\n      });\n      return op;\n    }\n  },\n  Insert: {\n    /*{\n        content: any,\n        left: Id,\n        right: Id,\n        parent: Id,\n        parentSub: string (optional)\n      }\n    */\n    create: function*( op: Op ) : Insert {\n      if ( op.left === undefined\n        || op.right === undefined\n        || op.parent === undefined ) {\n          throw new Error(\"You must define left, right, and parent!\");\n        }\n      op.origin = op.left;\n      op.struct = \"Insert\";\n      yield* Struct.Operation.create.call(this, op);\n\n      if (op.left != null) {\n        var left = yield* this.getOperation(op.left);\n        left.right = op.id;\n        yield* this.setOperation(left);\n      }\n      if (op.right != null) {\n        var right = yield* this.getOperation(op.right);\n        right.left = op.id;\n        yield* this.setOperation(right);\n      }\n      var parent = yield* this.getOperation(op.parent);\n      if (op.parentSub != null){\n        if (compareIds(parent.map[op.parentSub], op.right)) {\n          parent.map[op.parentSub] = op.id;\n          yield* this.setOperation(parent);\n        }\n      } else {\n        var start = compareIds(parent.start, op.right);\n        var end = compareIds(parent.end, op.left);\n        if (start || end) {\n          if (start) {\n            parent.start = op.id;\n          }\n          if (end) {\n            parent.end = op.id;\n          }\n          yield* this.setOperation(parent);\n        }\n      }\n      return op;\n    },\n    encode: function(op){\n      /*var e = {\n        id: op.id,\n        left: op.left,\n        right: op.right,\n        origin: op.origin,\n        parent: op.parent,\n        content: op.content,\n        struct: \"Insert\"\n      };\n      if (op.parentSub != null){\n        e.parentSub = op.parentSub;\n      }\n      return e;*/\n      return op;\n    },\n    requiredOps: function(op){\n      var ids = [];\n      if(op.left != null){\n        ids.push(op.left);\n      }\n      if(op.right != null){\n        ids.push(op.right);\n      }\n      if(op.right == null && op.left == null) {\n        ids.push(op.parent);\n      }\n      if (op.opContent != null) {\n        ids.push(op.opContent);\n      }\n      return ids;\n    },\n    getDistanceToOrigin: function *(op){\n      if (op.left == null) {\n        return 0;\n      } else {\n        var d = 0;\n        var o = yield* this.getOperation(op.left);\n        while (!compareIds(op.origin, (o ? o.id : null))) {\n          d++;\n          if (o.left == null) {\n            break;\n          } else {\n            o = yield* this.getOperation(o.left);\n          }\n        }\n        return d;\n      }\n    },\n    /*\n    # $this has to find a unique position between origin and the next known character\n    # case 1: $origin equals $o.origin: the $creator parameter decides if left or right\n    #         let $OL= [o1,o2,o3,o4], whereby $this is to be inserted between o1 and o4\n    #         o2,o3 and o4 origin is 1 (the position of o2)\n    #         there is the case that $this.creator < o2.creator, but o3.creator < $this.creator\n    #         then o2 knows o3. Since on another client $OL could be [o1,o3,o4] the problem is complex\n    #         therefore $this would be always to the right of o3\n    # case 2: $origin < $o.origin\n    #         if current $this insert_position > $o origin: $this ins\n    #         else $insert_position will not change\n    #         (maybe we encounter case 1 later, then this will be to the right of $o)\n    # case 3: $origin > $o.origin\n    #         $this insert_position is to the left of $o (forever!)\n    */\n    execute: function*(op){\n      var i; // loop counter\n      var distanceToOrigin = i = yield* Struct.Insert.getDistanceToOrigin.call(this, op); // most cases: 0 (starts from 0)\n      var o;\n      var parent;\n      var start;\n\n      // find o. o is the first conflicting operation\n      if (op.left != null) {\n        o = yield* this.getOperation(op.left);\n        o = (o.right == null) ? null : yield* this.getOperation(o.right);\n      } else { // left == null\n        parent = yield* this.getOperation(op.parent);\n        let startId = op.parentSub ? parent.map[op.parentSub] : parent.start;\n        start = startId == null ? null : yield* this.getOperation(startId);\n        o = start;\n      }\n\n      // handle conflicts\n      while (true) {\n        if (o != null && !compareIds(o.id, op.right)){\n          var oOriginDistance = yield* Struct.Insert.getDistanceToOrigin.call(this, o);\n          if (oOriginDistance === i) {\n            // case 1\n            if (o.id[0] < op.id[0]) {\n              op.left = o.id;\n              distanceToOrigin = i + 1;\n            }\n          } else if (oOriginDistance < i) {\n            // case 2\n            if (i - distanceToOrigin <= oOriginDistance) {\n              op.left = o.id;\n              distanceToOrigin = i + 1;\n            }\n          } else {\n            break;\n          }\n          i++;\n          o = o.right ? yield* this.getOperation(o.right) : null;\n        } else {\n          break;\n        }\n      }\n\n      // reconnect..\n      var left = null;\n      var right = null;\n      parent = parent || (yield* this.getOperation(op.parent));\n\n      // NOTE: You you have to call addOperation before you set any other operation!\n\n      // reconnect left and set right of op\n      if (op.left != null) {\n        left = yield* this.getOperation(op.left);\n        op.right = left.right;\n        if ((yield* this.addOperation(op)) === false) { // add here\n          return;\n        }\n        left.right = op.id;\n        yield* this.setOperation(left);\n      } else {\n        op.right = op.parentSub ? (parent.map[op.parentSub] || null) : parent.start;\n        if ((yield* this.addOperation(op)) === false) { // or here\n          return;\n        }\n      }\n      // reconnect right\n      if (op.right != null) {\n        right = yield* this.getOperation(op.right);\n        right.left = op.id;\n        yield* this.setOperation(right);\n      }\n\n      // notify parent\n      if (op.parentSub != null) {\n        if (left == null) {\n          parent.map[op.parentSub] = op.id;\n          yield* this.setOperation(parent);\n        }\n      } else {\n        if (right == null || left == null) {\n          if (right == null) {\n            parent.end = op.id;\n          }\n          if (left == null) {\n            parent.start = op.id;\n          }\n          yield* this.setOperation(parent);\n        }\n      }\n    }\n  },\n  List: {\n    create: function*( op : Op){\n      op.start = null;\n      op.end = null;\n      op.struct = \"List\";\n      return yield* Struct.Operation.create.call(this, op);\n    },\n    encode: function(op){\n      return {\n        struct: \"List\",\n        id: op.id,\n        type: op.type\n      };\n    },\n    requiredOps: function(){\n      /*\n      var ids = [];\n      if (op.start != null) {\n        ids.push(op.start);\n      }\n      if (op.end != null){\n        ids.push(op.end);\n      }\n      return ids;\n      */\n      return [];\n    },\n    execute: function* (op) {\n      op.start = null;\n      op.end = null;\n      if ((yield* this.addOperation(op)) === false) {\n        return;\n      }\n    },\n    ref: function* (op : Op, pos : number) : Insert {\n      if (op.start == null) {\n        return null;\n      }\n      var o = yield* this.getOperation(op.start);\n      while ( pos !== 0 && o.right != null) {\n        o = (yield* this.getOperation(o.right));\n        pos--;\n      }\n      return o;\n    },\n    map: function* (o : Op, f : Function) : Array<any> {\n      o = o.start;\n      var res = [];\n      while ( o != null) {\n        var operation = yield* this.getOperation(o);\n        res.push(f(operation.content));\n        o = operation.right;\n      }\n      return res;\n    },\n    insert: function* (op, pos : number, contents : Array<any>) {\n      var ref = yield* Struct.List.ref.call(this, op, pos);\n      var right = ref != null ? ref.id : null;\n      var left = ref != null ? ref.left : null;\n      for (var key in contents) {\n        var insert = {\n          left: left,\n          right: right,\n          content: contents[key],\n          parent: op.id\n        };\n        left = (yield* Struct.Insert.create.call(this, insert)).id;\n      }\n    }\n  },\n  Map: {\n    /*\n      {\n        // empty\n      }\n    */\n    create: function*( op : Op ){\n      op.map = {};\n      op.struct = \"Map\";\n      return yield* Struct.Operation.create.call(this, op);\n    },\n    encode: function(op){\n      return {\n        struct: \"Map\",\n        type: op.type,\n        id: op.id\n      };\n    },\n    requiredOps: function(){\n      /*\n      var ids = [];\n      for (var end in op.map) {\n        ids.push(op.map[end]);\n      }\n      return ids;\n      */\n      return [];\n    },\n    execute: function* (op) {\n      if ((yield* this.addOperation(op)) === false) {\n        return;\n      }\n    },\n    get: function* (op, name) {\n      var res = yield* this.getOperation(op.map[name]);\n      return (res == null) ? void 0 : (res.opContent == null\n                ? res.content : yield* this.getType(res.opContent));\n    },\n    set: function* (op, name, value) {\n      var insert = {\n        left: null,\n        right: op.map[name] || null,\n        parent: op.id,\n        parentSub: name\n      };\n      var oid;\n      if ( value != null && value._model != null\n           && (oid = value._model.id) != null && oid.length === 2) {\n        insert.opContent = oid;\n      } else {\n        insert.content = value;\n      }\n      yield* Struct.Insert.create.call(this, insert);\n    }\n  }\n};\n","/**\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","\nclass WebRTC extends AbstractConnector {\n  constructor (options) {\n    if(options === undefined){\n      throw new Error(\"Options must not be undefined!\");\n    }\n    super({\n      role: \"slave\"\n    });\n\n    var room = options.room;\n\n    // connect per default to our server\n    if(options.url == null){\n      options.url = \"https://yatta.ninja:8888\";\n    }\n\n    var swr = new SimpleWebRTC(options); //eslint-disable-line no-undef\n    this.swr = swr;\n    var self = this;\n\n    swr.once(\"connectionReady\", function(userId){\n      // SimpleWebRTC (swr) is initialized\n      swr.joinRoom(room);\n\n      swr.once(\"joinedRoom\", function(){\n        self.setUserId(userId);\n        var i;\n        // notify the connector class about all the users that already\n        // joined the session\n        for(i in self.swr.webrtc.peers){\n          self.userJoined(self.swr.webrtc.peers[i].id, \"master\");\n        }\n        swr.on(\"channelMessage\", function(peer, room_, message){\n          // The client received a message\n          // Check if the connector is already initialized,\n          // only then forward the message to the connector class\n          if(message.type != null ){\n            self.receiveMessage(peer.id, message.payload);\n          }\n        });\n      });\n\n      swr.on(\"createdPeer\", function(peer){\n        // a new peer/client joined the session.\n        // Notify the connector class, if the connector\n        // is already initialized\n        self.userJoined(peer.id, \"master\");\n      });\n\n      swr.on(\"peerStreamRemoved\", function(peer){\n        // a client left the session.\n        // Notify the connector class, if the connector\n        // is already initialized\n        self.userLeft(peer.id);\n      });\n    });\n  }\n  send (uid, message) {\n    var self = this;\n    // we have to make sure that the message is sent under all circumstances\n    var send = function(){\n      // check if the clients still exists\n      var peer = self.swr.webrtc.getPeers(uid)[0];\n      var success;\n      if(peer){\n        // success is true, if the message is successfully sent\n        success = peer.sendDirectly(\"simplewebrtc\", \"yjs\", message);\n      }\n      if(!success){\n        // resend the message if it didn't work\n        setTimeout(send, 500);\n      }\n    };\n    // try to send the message\n    send();\n  }\n  broadcast (message) {\n    this.swr.sendDirectlyToAll(\"simplewebrtc\", \"yjs\", message);\n  }\n}\n\nY.WebRTC = WebRTC;\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\nY.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 (y, opts) {\n      super(y);\n      if (opts == null) {\n        opts = {};\n      }\n      if (opts.namespace == null || typeof opts.namespace !== \"string\") {\n        throw new Error(\"IndexedDB: expect a string (opts.namespace)!\");\n      } else {\n        this.namespace = opts.namespace;\n      }\n      if (opts.idbVersion != null) {\n        this.idbVersion = opts.idbVersion;\n      } else {\n        this.idbVersion = 5;\n      }\n\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(opts.namespace, store.idbVersion);\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, request);/*\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          return;\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            try {\n              db.createObjectStore(\"OperationStore\", {keyPath: \"id\"});\n              db.createObjectStore(\"StateVector\", {keyPath: \"user\"});\n            } catch (e) {\n                // console.log(\"Store already exists!\");\n            }\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","\nclass N {\n  // A created node is always red!\n  constructor (val) {\n    this.val = val;\n    this.color = true;\n    this._left = null;\n    this._right = null;\n    this._parent = null;\n    if (val.id === null) {\n      throw new Error(\"You must define id!\");\n    }\n  }\n  isRed () { return this.color; }\n  isBlack () { return !this.color; }\n  redden () { this.color = true; return this; }\n  blacken () { this.color = false; return this; }\n  get grandparent () {\n    return this.parent.parent;\n  }\n  get parent () {\n    return this._parent;\n  }\n  get sibling () {\n    return (this === this.parent.left) ?\n            this.parent.right : this.parent.left;\n  }\n  get left () {\n    return this._left;\n  }\n  get right () {\n    return this._right;\n  }\n  set left (n) {\n    if (n !== null) {\n      n._parent = this;\n    }\n    this._left = n;\n  }\n  set right (n) {\n    if (n !== null) {\n      n._parent = this;\n    }\n    this._right = n;\n  }\n  rotateLeft (tree) {\n    var parent = this.parent;\n    var newParent = this.right;\n    var newRight = this.right.left;\n    newParent.left = this;\n    this.right = newRight;\n    if (parent === null) {\n      tree.root = newParent;\n      newParent._parent = null;\n    } else if (parent.left === this) {\n      parent.left = newParent;\n    } else if (parent.right === this) {\n      parent.right = newParent;\n    } else {\n      throw new Error(\"The elements are wrongly connected!\");\n    }\n  }\n  next () {\n    if ( this.right !== null ) {\n      // search the most left node in the right tree\n      var o = this.right;\n      while (o.left !== null) {\n        o = o.left;\n      }\n      return o;\n    } else {\n      var p = this;\n      while (p.parent !== null && p !== p.parent.left) {\n        p = p.parent;\n      }\n      return p.parent;\n    }\n  }\n  rotateRight (tree) {\n    var parent = this.parent;\n    var newParent = this.left;\n    var newLeft = this.left.right;\n    newParent.right = this;\n    this.left = newLeft;\n    if (parent === null) {\n      tree.root = newParent;\n      newParent._parent = null;\n    } else if (parent.left === this) {\n      parent.left = newParent;\n    } else if (parent.right === this) {\n      parent.right = newParent;\n    } else {\n      throw new Error(\"The elements are wrongly connected!\");\n    }\n  }\n  getUncle () {\n    // we can assume that grandparent exists when this is called!\n    if (this.parent === this.parent.parent.left) {\n      return this.parent.parent.right;\n    } else {\n      return this.parent.parent.left;\n    }\n  }\n}\n\nclass RBTree { //eslint-disable-line no-unused-vars\n  constructor () {\n    this.root = null;\n  }\n  findNodeWithLowerBound (from) {\n    var o = this.root;\n    if (o === null) {\n      return false;\n    } else {\n      while (true) {\n        if ((from === null || from < o.val.id) && o.left !== null) {\n          // o is included in the bound\n          // try to find an element that is closer to the bound\n          o = o.left;\n        } else if (o.val.id < from) {\n          // o is not within the bound, maybe one of the right elements is..\n          if (o.right !== null) {\n            o = o.right;\n          } else {\n            // there is no right element. Search for the next bigger element,\n            // this should be within the bounds\n            return o.next();\n          }\n        } else {\n          return o;\n        }\n      }\n    }\n  }\n  iterate (from, to, f) {\n    var o = this.findNodeWithLowerBound(from);\n    while ( o !== null && (to === null || o.val.id <= to) ) {\n      f(o.val);\n      o = o.next();\n    }\n    return true;\n  }\n  find (id) {\n    return this.findNode(id).val;\n  }\n  findNode (id) {\n    var o = this.root;\n    if (o === null) {\n      return false;\n    } else {\n      while (true) {\n        if (o === null) {\n          return false;\n        }\n        if (id < o.val.id) {\n          o = o.left;\n        } else if (o.val.id < id) {\n          o = o.right;\n        } else {\n          return o;\n        }\n      }\n    }\n  }\n  delete (id) {\n    var d = this.findNode(id);\n    if (d.left !== null && d.right !== null) {\n      // switch d with the greates element in the left subtree.\n      // o should have at most one child.\n      var o = d.left;\n      // find\n      while (o.right !== null) {\n        o = o.right;\n      }\n      // switch\n      d.val = o.val;\n      d = o;\n    }\n    // d has at most one child\n    // let n be the node that replaces d\n    var isFakeChild;\n    var child = d.left || d.right;\n    if ( child === null) {\n      isFakeChild = true;\n      child = new N({id: 0});\n      child.blacken();\n      d.right = child;\n    } else {\n      isFakeChild = false;\n    }\n\n    if (d.parent === null) {\n      if (!isFakeChild) {\n        this.root = child;\n        child.blacken();\n        child._parent = null;\n      } else {\n        this.root = null;\n      }\n      return;\n    } else if (d.parent.left === d) {\n      d.parent.left = child;\n    } else if (d.parent.right === d) {\n      d.parent.right = child;\n    } else {\n      throw new Error(\"Impossible!\");\n    }\n    if ( d.isBlack() ) {\n      if ( child.isRed() ) {\n        child.blacken();\n      } else {\n        this._fixDelete(child);\n      }\n    }\n    this.root.blacken();\n    if (isFakeChild) {\n      if (child.parent.left === child) {\n        child.parent.left = null;\n      } else if (child.parent.right === child) {\n        child.parent.right = null;\n      } else {\n        throw new Error(\"Impossible #3\");\n      }\n    }\n  }\n  _fixDelete (n) {\n    function isBlack (node) {\n      return node !== null ? node.isBlack() : true;\n    }\n    function isRed(node) {\n      return node !== null ? node.isRed() : false;\n    }\n    if (n.parent === null) {\n      // this can only be called after the first iteration of fixDelete.\n      return;\n    }\n    // d was already replaced by the child\n    // d is not the root\n    // d and child are black\n    var sibling = n.sibling;\n    if (isRed(sibling)) {\n      // make sibling the grandfather\n      n.parent.redden();\n      sibling.blacken();\n      if (n === n.parent.left) {\n        n.parent.rotateLeft(this);\n      } else if (n === n.parent.right) {\n        n.parent.rotateRight(this);\n      } else {\n        throw new Error(\"Impossible #2\");\n      }\n      sibling = n.sibling;\n    }\n    // parent, sibling, and children of n are black\n    if ( n.parent.isBlack() &&\n         sibling.isBlack() &&\n         isBlack(sibling.left) &&\n         isBlack(sibling.right)\n    ) {\n      sibling.redden();\n      this._fixDelete(n.parent);\n    } else if ( n.parent.isRed() &&\n                sibling.isBlack() &&\n                isBlack(sibling.left) &&\n                isBlack(sibling.right)\n    ) {\n      sibling.redden();\n      n.parent.blacken();\n    } else {\n      if ( n === n.parent.left &&\n           sibling.isBlack() &&\n           isRed(sibling.left) &&\n           isBlack(sibling.right)\n      ) {\n        sibling.redden();\n        sibling.left.blacken();\n        sibling.rotateRight(this);\n        sibling = n.sibling;\n      } else if ( n === n.parent.right &&\n                  sibling.isBlack() &&\n                  isRed(sibling.right) &&\n                  isBlack(sibling.left)\n      ) {\n        sibling.redden();\n        sibling.right.blacken();\n        sibling.rotateLeft(this);\n        sibling = n.sibling;\n      }\n      sibling.color = n.parent.color;\n      n.parent.blacken();\n      if (n === n.parent.left) {\n        sibling.right.blacken();\n        n.parent.rotateLeft(this);\n      } else {\n        sibling.left.blacken();\n        n.parent.rotateRight(this);\n      }\n    }\n  }\n  add (v) {\n    var node = new N(v);\n    if (this.root !== null) {\n      var p = this.root; // p abbrev. parent\n      while (true) {\n        if (node.val.id < p.val.id) {\n          if (p.left === null) {\n            p.left = node;\n            break;\n          } else {\n            p = p.left;\n          }\n        } else if (p.val.id < node.val.id) {\n          if (p.right === null) {\n            p.right = node;\n            break;\n          } else {\n            p = p.right;\n          }\n        } else {\n          return false;\n        }\n      }\n      this._fixInsert(node);\n    } else {\n      this.root = node;\n    }\n    this.root.blacken();\n  }\n  _fixInsert (n) {\n    if (n.parent === null) {\n      n.blacken();\n      return;\n    } else if (n.parent.isBlack()) {\n      return;\n    }\n    var uncle = n.getUncle();\n    if (uncle !== null && uncle.isRed()) {\n      // Note: parent: red, uncle: red\n      n.parent.blacken();\n      uncle.blacken();\n      n.grandparent.redden();\n      this._fixInsert(n.grandparent);\n    } else {\n      // Note: parent: red, uncle: black or null\n      // Now we transform the tree in such a way that\n      // either of these holds:\n      //   1) grandparent.left.isRed\n      //     and grandparent.left.left.isRed\n      //   2) grandparent.right.isRed\n      //     and grandparent.right.right.isRed\n      if (n === n.parent.right\n        && n.parent === n.grandparent.left) {\n          n.parent.rotateLeft(this);\n          // Since we rotated and want to use the previous\n          // cases, we need to set n in such a way that\n          // n.parent.isRed again\n          n = n.left;\n      } else if (n === n.parent.left\n        && n.parent === n.grandparent.right) {\n          n.parent.rotateRight(this);\n          // see above\n          n = n.right;\n      }\n      // Case 1) or 2) hold from here on.\n      // Now traverse grandparent, make parent a black node\n      // on the highest level which holds two red nodes.\n      n.parent.blacken();\n      n.grandparent.redden();\n      if (n === n.parent.left) {\n        // Case 1\n        n.grandparent.rotateRight(this);\n      } else {\n        // Case 2\n        n.grandparent.rotateLeft(this);\n      }\n    }\n  }\n}\n","\n\n(function(){\n\n  class List {\n    constructor (_model) {\n      this._model = _model;\n    }\n    *val (pos) {\n      var t = yield \"transaction\";\n      if (pos != null) {\n        var o = yield* Y.Struct.List.ref.call(t, this._model, pos);\n        return o ? o.content : null;\n      } else {\n        return yield* Y.Struct.List.map.call(t, this._model, function(c){return c; });\n      }\n    }\n    *insert (pos, contents) {\n      var t = yield \"transaction\";\n      yield* Y.Struct.List.insert.call(t, this._model, pos, contents);\n    }\n  }\n\n  Y.List = function* YList(){\n    var t = yield \"transaction\";\n    var model = yield* Y.Struct.List.create.call(t, {type: \"List\"});\n    return new List(model);\n  };\n  Y.List.Create = List;\n})();\n","\n(function(){\n  class Map {\n    constructor (_model) {\n      this._model = _model;\n    }\n    *val () {\n      var t = yield \"transaction\";\n      var model = yield* t.getOperation(this._model);\n      if (arguments.length === 1) {\n        return yield* Y.Struct.Map.get.call(t, model, arguments[0]);\n      } else if (arguments.length === 2) {\n        return yield* Y.Struct.Map.set.call(t, model, arguments[0], arguments[1]);\n      } else {\n        throw new Error(\"Implement this case!\");\n      }\n    }\n  }\n\n  Y.Map = function* YMap(){\n    var t = yield \"transaction\";\n    if (this instanceof Y.AbstractOperationStore) {\n      var model = yield* Y.Struct.map.create.call(t, {type: \"Map\"});\n      return new Map(model);\n    } else {\n      throw new Error(\"Don't use `new` to create this type!\");\n    }\n  };\n  Y.Map.Create = Map;\n})();\n","\nclass AbstractConnector { //eslint-disable-line no-unused-vars\n  /*\n    opts\n     .role : String Role of this client (\"master\" or \"slave\")\n     .userId : String that uniquely defines the user.\n  */\n  constructor (y, opts) {\n    this.y = y;\n    if (opts == null){\n      opts = {};\n    }\n    if (opts.role == null || opts.role === \"master\") {\n      this.role = \"master\";\n    } else if (opts.role === \"slave\") {\n      this.role = \"slave\";\n    } else {\n      throw new Error(\"Role must be either 'master' or 'slave'!\");\n    }\n    this.role = opts.role;\n    this.connections = {};\n    this.userEventListeners = [];\n    this.whenSyncedListeners = [];\n    this.currentSyncTarget = null;\n    this.syncingClients = [];\n    this.forwardToSyncingClients = (opts.forwardToSyncingClients === false) ? false : true;\n    this.debug = opts.debug ? true : false;\n  }\n  setUserId (userId) {\n    this.userId = userId;\n    this.y.db.setUserId(userId);\n  }\n  onUserEvent (f) {\n    this.userEventListeners.push(f);\n  }\n  userLeft (user : string) {\n    delete this.connections[user];\n    if (user === this.currentSyncTarget){\n      this.currentSyncTarget = null;\n      this.findNextSyncTarget();\n    }\n    for (var f of this.userEventListeners){\n      f({\n        action: \"userLeft\",\n        user: user\n      });\n    }\n  }\n  userJoined (user, role) {\n    if(role == null){\n      throw new Error(\"You must specify the role of the joined user!\");\n    }\n    if (this.connections[user] != null) {\n      throw new Error(\"This user already joined!\");\n    }\n    this.connections[user] = {\n      isSynced: false,\n      role: role\n    };\n    for (var f of this.userEventListeners) {\n      f({\n        action: \"userJoined\",\n        user: user,\n        role: role\n      });\n    }\n    if (this.currentSyncTarget == null) {\n      this.findNextSyncTarget();\n    }\n  }\n  // Execute a function _when_ we are connected.\n  // If not connected, wait until connected\n  whenSynced (f) {\n    if (this.isSynced === true) {\n      f();\n    } else {\n      this.whenSyncedListeners.push(f);\n    }\n  }\n  // returns false, if there is no sync target\n  // true otherwise\n  findNextSyncTarget () {\n    if (this.currentSyncTarget != null && this.connections[this.currentSyncTarget].isSynced === false) {\n      throw new Error(\"The current sync has not finished!\");\n    }\n\n    var syncUser = null;\n    for (var uid in this.connections) {\n      syncUser = this.connections[uid];\n      if (!syncUser.isSynced) {\n        break;\n      }\n    }\n    if (syncUser != null){\n      var conn = this;\n      this.y.db.requestTransaction(function*(){\n        conn.currentSyncTarget = uid;\n        conn.send(uid, {\n          type: \"sync step 1\",\n          stateVector: yield* this.getStateVector()\n        });\n      });\n    }\n    // set the state to synced!\n    if (!this.isSynced) {\n      this.isSynced = true;\n      for (var f of this.whenSyncedListeners) {\n        f();\n      }\n      this.whenSyncedListeners = null;\n    }\n    return false;\n  }\n  // You received a raw message, and you know that it is intended for to Yjs. Then call this function.\n  receiveMessage (sender, m){\n    if (this.debug) {\n      console.log(`${sender} -> ${this.userId}: ${JSON.stringify(m)}`); //eslint-disable-line\n    }\n    if (m.type === \"sync step 1\") {\n      // TODO: make transaction, stream the ops\n      let conn = this;\n      this.y.db.requestTransaction(function*(){\n        var ops = yield* this.getOperations(m.stateVector);\n        var sv = yield* this.getStateVector();\n        conn.send(sender, {\n          type: \"sync step 2\",\n          os: ops,\n          stateVector: sv\n        });\n        if (this.forwardToSyncingClients) {\n          conn.syncingClients.push(sender);\n          setTimeout(function(){\n            conn.syncingClients = conn.syncingClients.filter(function(cli){\n              return cli !== sender;\n            });\n            conn.send(sender, {\n              type: \"sync done\"\n            });\n          }, conn.syncingClientDuration);\n        }\n      });\n    } else if (m.type === \"sync step 2\") {\n      this.y.db.apply(m.os);\n      let conn = this;\n      this.y.db.requestTransaction(function*(){\n        var ops = yield* this.getOperations(m.stateVector);\n        if (ops.length > 0) {\n          conn.broadcast({\n            type: \"update\",\n            ops: ops\n          });\n        }\n      });\n    } else if (m.type === \"sync done\") {\n      this.connections[sender].isSynced = true;\n      this.findNextSyncTarget();\n    } else if (m.type === \"update\") {\n      if (this.forwardToSyncingClients) {\n        for (var client of this.syncingClients) {\n          this.send(client, m);\n        }\n      }\n      this.y.db.apply(m.ops);\n    }\n  }\n  // Currently, the HB encodes operations as JSON. For the moment I want to keep it\n  // that way. Maybe we support encoding in the HB as XML in the future, but for now I don't want\n  // too much overhead. Y is very likely to get changed a lot in the future\n  //\n  // Because we don't want to encode JSON as string (with character escaping, wich makes it pretty much unreadable)\n  // we encode the JSON as XML.\n  //\n  // When the HB support encoding as XML, the format should look pretty much like this.\n  //\n  // does not support primitive values as array elements\n  // expects an ltx (less than xml) object\n  parseMessageFromXml (m) {\n    function parseArray (node) {\n      for (var n of node.children){\n        if (n.getAttribute(\"isArray\") === \"true\") {\n          return parseArray(n);\n        } else {\n          return parseObject(n);\n        }\n      }\n    }\n    function parseObject (node) {\n      var json = {};\n      for (var attrName in node.attrs) {\n        var value = node.attrs[attrName];\n        var int = parseInt(value);\n        if (isNaN(int) || (\"\" + int) !== value){\n          json[attrName] = value;\n        } else {\n          json[attrName] = int;\n        }\n      }\n      for (var n in node.children){\n        var name = n.name;\n        if (n.getAttribute(\"isArray\") === \"true\") {\n          json[name] = parseArray(n);\n        } else {\n          json[name] = parseObject(n);\n        }\n      }\n      return json;\n    }\n    parseObject(m);\n  }\n  // encode message in xml\n  // we use string because Strophe only accepts an \"xml-string\"..\n  // So {a:4,b:{c:5}} will look like\n  // <y a=\"4\">\n  //   <b c=\"5\"></b>\n  // </y>\n  // m - ltx element\n  // json - Object\n  encodeMessageToXml (msg, obj) {\n    // attributes is optional\n    function encodeObject (m, json) {\n      for (var name in json) {\n        var value = json[name];\n        if (name == null) {\n          // nop\n        } else if (value.constructor === Object) {\n          encodeObject(m.c(name), value);\n        } else if (value.constructor === Array) {\n          encodeArray(m.c(name), value);\n        } else {\n          m.setAttribute(name, value);\n        }\n      }\n    }\n    function encodeArray (m, array) {\n      m.setAttribute(\"isArray\", \"true\");\n      for (var e of array) {\n        if (e.constructor === Object) {\n          encodeObject(m.c(\"array-element\"), e);\n        } else {\n          encodeArray(m.c(\"array-element\"), e);\n        }\n      }\n    }\n    if (obj.constructor === Object) {\n      encodeObject(msg.c(\"y\", { xmlns: \"http://y.ninja/connector-stanza\" }), obj);\n    } else if (obj.constructor === Array) {\n      encodeArray(msg.c(\"y\", { xmlns: \"http://y.ninja/connector-stanza\" }), obj);\n    } else {\n      throw new Error(\"I can't encode this json!\");\n    }\n  }\n}\n","/* @flow */\nclass AbstractTransaction { //eslint-disable-line no-unused-vars\n  constructor (store : OperationStore) {\n    this.store = store;\n  }\n  *getType (id) {\n    var op = yield* this.getOperation(id);\n    return new Y[op.type].Create(op);\n  }\n  // returns false if operation is not expected.\n  *addOperation (op) {\n    var state = yield* this.getState(op.id[0]);\n    if (op.id[1] === state.clock){\n      state.clock++;\n      yield* this.setState(state);\n      this.os.add(op);\n      this.store.operationAdded(op);\n      return true;\n    } else if (op.id[1] < state.clock) {\n      return false;\n    } else {\n      throw new Error(\"Operations must arrive in order!\");\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 (y) {\n    this.y = y;\n    this.parentListeners = {};\n    this.parentListenersRequestPending = false;\n    this.parentListenersActivated = {};\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\n      a property before you iterate over it!\n    */\n  }\n  setUserId (userId) {\n    this.userId = userId;\n  }\n  apply (ops) {\n    for (var key in ops) {\n      var o = ops[key];\n      var required = Y.Struct[o.struct].requiredOps(o);\n      this.whenOperationsExist(required, o);\n    }\n  }\n  // op is executed as soon as every operation requested is available.\n  // Note that Transaction can (and should) buffer requests.\n  whenOperationsExist (ids : Array<Id>, op : Operation) {\n    if (ids.length > 0) {\n      let listener : Listener = {\n        op: op,\n        missing: ids.length\n      };\n\n      for (let key in ids) {\n        let id = ids[key];\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        op: op\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 key in exeNow) {\n        let o = exeNow[key].op;\n        yield* Struct[o.struct].execute.call(this, o);\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 key in l) {\n            let listener = l[key];\n            let o = listener.op;\n            if (--listener.missing === 0){\n              yield* Struct[o.struct].execute.call(this, o);\n            }\n          }\n        }\n      }\n    });\n  }\n  // called by a transaction when an operation is added\n  operationAdded (op) {\n    var sid = JSON.stringify(op.id);\n    var l = this.listenersById[sid];\n    delete this.listenersById[sid];\n\n    // notify whenOperation listeners (by id)\n    if (l != null) {\n      for (var key in l){\n        var listener = l[key];\n        if (--listener.missing === 0){\n          this.whenOperationsExist([], listener.op);\n        }\n      }\n    }\n    // notify parent listeners, if possible\n    var listeners = this.parentListeners[op.parent];\n    if ( this.parentListenersRequestPending\n        || ( listeners == null )\n        || ( listeners.length === 0 )) {\n      return;\n    }\n    var al = this.parentListenersActivated[JSON.stringify(op.parent)];\n    if ( al == null ){\n      al = [];\n      this.parentListenersActivated[JSON.stringify(op.parent)] = al;\n    }\n    al.push(op);\n\n    this.parentListenersRequestPending = true;\n    var store = this;\n    this.requestTransaction(function*(){\n      store.parentListenersRequestPending = false;\n      var activatedOperations = store.parentListenersActivated;\n      store.parentListenersActivated = {};\n      for (var parentId in activatedOperations){\n        var parent = yield* this.getOperation(parentId);\n        Struct[parent.struct].notifyObservers(activatedOperations[parentId]);\n      }\n    });\n\n  }\n  removeParentListener (id, f) {\n    var ls = this.parentListeners[id];\n    if (ls != null) {\n      this.parentListeners[id] = ls.filter(function(g){\n        return (f !== g);\n      });\n    }\n  }\n  addParentListener (id, f) {\n    var ls = this.parentListeners[JSON.stringify(id)];\n    if (ls == null) {\n      ls = [];\n      this.parentListeners[JSON.stringify(id)] = ls;\n    }\n    ls.push(f);\n  }\n}\n"],"sourceRoot":"/source/"}
\ No newline at end of file
-- 
GitLab