From b25977be061eca2e33b7d16b31bcaf7de57dfdd5 Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Tue, 30 Jun 2015 15:44:14 +0200 Subject: [PATCH] Map type works with simple update & sync. now going to implement support for syncing existing operation buffers --- .eslintignore | 1 + src/Connector.js | 57 ++++++++++++-------- src/Connectors/Test.js | 48 +++++++++++------ src/OperationStore.js | 27 ++++++---- src/OperationStores/Memory.js | 3 ++ src/Struct.js | 97 ++++++++++++++++++++++++++--------- src/y.spec.js | 40 +++++++++++++-- y.js | 5 +- y.js.map | 2 +- 9 files changed, 200 insertions(+), 80 deletions(-) diff --git a/.eslintignore b/.eslintignore index 8f210072..2778cf50 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ build/ y.js +y.js.map interfaces/ diff --git a/src/Connector.js b/src/Connector.js index b62804cf..9ca2710a 100644 --- a/src/Connector.js +++ b/src/Connector.js @@ -22,6 +22,9 @@ class AbstractConnector { //eslint-disable-line no-unused-vars this.userEventListeners = []; this.whenSyncedListeners = []; this.currentSyncTarget = null; + this.syncingClients = []; + this.forwardToSyncingClients = (opts.forwardToSyncingClients === false) ? false : true; + this.debug = opts.debug ? true : false; } setUserId (userId) { this.userId = userId; @@ -61,6 +64,9 @@ class AbstractConnector { //eslint-disable-line no-unused-vars role: role }); } + if (this.currentSyncTarget == null) { + this.findNextSyncTarget(); + } } // Execute a function _when_ we are connected. // If not connected, wait until connected @@ -78,7 +84,6 @@ class AbstractConnector { //eslint-disable-line no-unused-vars throw new Error("The current sync has not finished!"); } - var syncUser = null; for (var uid in this.connections) { syncUser = this.connections[uid]; @@ -88,7 +93,7 @@ class AbstractConnector { //eslint-disable-line no-unused-vars } if (syncUser != null){ var conn = this; - this.y.os.requestTransaction(function*(){ + this.y.db.requestTransaction(function*(){ conn.currentSyncTarget = uid; conn.send(uid, { type: "sync step 1", @@ -107,11 +112,14 @@ class AbstractConnector { //eslint-disable-line no-unused-vars return false; } // You received a raw message, and you know that it is intended for to Yjs. Then call this function. - receiveMessage (sender, m) { + receiveMessage (sender, m){ + if (this.debug) { + console.log(`${sender} -> ${this.userId}: ${JSON.stringify(m)}`); //eslint-disable-line + } if (m.type === "sync step 1") { // TODO: make transaction, stream the ops let conn = this; - this.os.requestTransaction(function*(){ + this.y.db.requestTransaction(function*(){ var ops = yield* this.getOperations(m.stateVector); var sv = yield* this.getStateVector(); conn.send(sender, { @@ -119,33 +127,40 @@ class AbstractConnector { //eslint-disable-line no-unused-vars os: ops, stateVector: sv }); - conn.syncingClients.push(sender); - setTimeout(function(){ - conn.syncingClients = conn.syncingClients.filter(function(cli){ - return cli !== sender; - }); - conn.send(sender, { - type: "sync done" - }); - }, conn.syncingClientDuration); + if (this.forwardToSyncingClients) { + conn.syncingClients.push(sender); + setTimeout(function(){ + conn.syncingClients = conn.syncingClients.filter(function(cli){ + return cli !== sender; + }); + conn.send(sender, { + type: "sync done" + }); + }, conn.syncingClientDuration); + } }); } else if (m.type === "sync step 2") { + this.y.db.apply(m.os); let conn = this; - this.os.requestTransaction(function*(){ + this.y.db.requestTransaction(function*(){ var ops = yield* this.getOperations(m.stateVector); - conn.broadcast({ - type: "update", - ops: ops - }); + if (ops.length > 0) { + conn.broadcast({ + type: "update", + ops: ops + }); + } }); } else if (m.type === "sync done") { this.connections[sender].isSynced = true; this.findNextSyncTarget(); } else if (m.type === "update") { - for (var client of this.syncingClients) { - this.send(client, m); + if (this.forwardToSyncingClients) { + for (var client of this.syncingClients) { + this.send(client, m); + } } - this.os.apply(m.ops); + this.y.db.apply(m.ops); } } // Currently, the HB encodes operations as JSON. For the moment I want to keep it diff --git a/src/Connectors/Test.js b/src/Connectors/Test.js index a4b11612..ba7f2168 100644 --- a/src/Connectors/Test.js +++ b/src/Connectors/Test.js @@ -15,7 +15,7 @@ function getRandom (o) { var globalRoom = { users: {}, buffers: {}, - removeUser: function(user){ + removeUser: function(user : AbstractConnector){ for (var i in this.users) { this.users[i].userLeft(user); @@ -24,15 +24,18 @@ var globalRoom = { delete this.buffers[user]; }, addUser: function(connector){ - for (var u of this.users) { - u.userJoined(connector.userId); - } this.users[connector.userId] = connector; this.buffers[connector.userId] = []; + for (var uname in this.users) { + if (uname !== connector.userId) { + var u = this.users[uname]; + u.userJoined(connector.userId, "master"); + connector.userJoined(u.userId, "master"); + } + } } }; - -setInterval(function(){ +function flushOne(){ var bufs = []; for (var i in globalRoom.buffers) { if (globalRoom.buffers[i].length > 0) { @@ -41,11 +44,15 @@ setInterval(function(){ } if (bufs.length > 0) { var userId = getRandom(bufs); - var m = globalRoom.buffers[userId]; + var m = globalRoom.buffers[userId].shift(); var user = globalRoom.users[userId]; - user.receiveMessage(m); + user.receiveMessage(m[0], m[1]); + return true; + } else { + return false; } -}, 10); +} +setInterval(flushOne, 10); var userIdCounter = 0; @@ -54,23 +61,30 @@ class Test extends AbstractConnector { if(options === undefined){ throw new Error("Options must not be undefined!"); } - super(y, { - role: "master" - }); - + options.role = "master"; + options.forwardToSyncingClients = false; + super(y, options); this.setUserId((userIdCounter++) + ""); + globalRoom.addUser(this); + this.globalRoom = globalRoom; } - send (uid, message) { - globalRoom.buffers[uid].push(message); + send (userId, message) { + globalRoom.buffers[userId].push([this.userId, message]); } broadcast (message) { - for (var buf of globalRoom.buffers) { - buf.push(message); + for (var key in globalRoom.buffers) { + globalRoom.buffers[key].push([this.userId, message]); } } disconnect () { globalRoom.removeUser(this.userId); } + flushAll () { + var c = true; + while (c) { + c = flushOne(); + } + } } Y.Test = Test; diff --git a/src/OperationStore.js b/src/OperationStore.js index 8144f237..384f5353 100644 --- a/src/OperationStore.js +++ b/src/OperationStore.js @@ -53,9 +53,10 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars this.userId = userId; } apply (ops) { - for (var o of ops) { - var required = Y.Struct[o.type].requiredOps(o); - this.whenOperationsExist(required, Y.Struct[o.type].execute, o); + for (var key in ops) { + var o = ops[key]; + var required = Y.Struct[o.struct].requiredOps(o); + this.whenOperationsExist(required, Y.Struct[o.struct].execute, o); } } // f is called as soon as every operation requested is available. @@ -68,7 +69,8 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars missing: ids.length }; - for (let id of ids) { + for (let key in ids) { + let id = ids[key]; let sid = JSON.stringify(id); let l = this.listenersById[sid]; if (l == null){ @@ -100,8 +102,9 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars store.listenersByIdRequestPending = false; - for (let listener of exeNow) { - yield* listener.f.apply(this, listener.args); + for (let key in exeNow) { + let listener = exeNow[key]; + yield* listener.f.call(this, listener.args); } for (var sid in ls){ @@ -110,9 +113,10 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars if ((yield* this.getOperation(id)) == null){ store.listenersById[sid] = l; } else { - for (let listener of l) { + for (let key in l) { + let listener = l[key]; if (--listener.missing === 0){ - yield* listener.f.apply(this, listener.args); + yield* listener.f.call(this, listener.args); } } } @@ -122,9 +126,10 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars // called by a transaction when an operation is added operationAdded (op) { // notify whenOperation listeners (by id) - var l = this.listenersById[op.id]; + var l = this.listenersById[JSON.stringify(op.id)]; if (l != null) { - for (var listener of l){ + for (var key in l){ + var listener = l[key]; if (--listener.missing === 0){ this.whenOperationsExist([], listener.f, listener.args); } @@ -152,7 +157,7 @@ class AbstractOperationStore { //eslint-disable-line no-unused-vars store.parentListenersActivated = {}; for (var parentId in activatedOperations){ var parent = yield* this.getOperation(parentId); - Struct[parent.type].notifyObservers(activatedOperations[parentId]); + Struct[parent.struct].notifyObservers(activatedOperations[parentId]); } }); diff --git a/src/OperationStores/Memory.js b/src/OperationStores/Memory.js index 09a1c757..1ce6e263 100644 --- a/src/OperationStores/Memory.js +++ b/src/OperationStores/Memory.js @@ -66,6 +66,9 @@ Y.Memory = (function(){ //eslint-disable-line no-unused-vars var endSV : StateVector = yield* this.getStateVector(); for (var endState of endSV) { var user = endState.user; + if (user === "_") { + continue; + } var startPos = startSS[user] || 0; var endPos = endState.clock; diff --git a/src/Struct.js b/src/Struct.js index 9a890b4b..fbd31a91 100644 --- a/src/Struct.js +++ b/src/Struct.js @@ -40,7 +40,11 @@ var Struct = { var user = this.store.y.connector.userId; var state = yield* this.getState(user); op.id = [user, state.clock]; - return yield* this.addOperation(op); + yield* this.addOperation(op); + this.store.y.connector.broadcast({ + type: "update", + ops: [op] + }); } }, Insert: { @@ -91,21 +95,25 @@ var Struct = { } return op; }, - requiredOps: function(op, ids){ + requiredOps: function(op){ + var ids = []; if(op.left != null){ ids.push(op.left); } if(op.right != null){ ids.push(op.right); } + if(op.right == null && op.left == null) { + ids.push(op.parent); + } return ids; }, getDistanceToOrigin: function *(op){ var d = 0; - var o = yield this.getOperation(op.left); + var o = yield* this.getOperation(op.left); while (op.origin !== (o ? o.id : null)) { d++; - o = yield this.getOperation(o.left); + o = yield* this.getOperation(o.left); } return d; }, @@ -125,13 +133,50 @@ var Struct = { # $this insert_position is to the left of $o (forever!) */ execute: function*(op){ - var distanceToOrigin = yield* Struct.Insert.getDistanceToOrigin(op); // most cases: 0 (starts from 0) + var distanceToOrigin = yield* Struct.Insert.getDistanceToOrigin.call(this, op); // most cases: 0 (starts from 0) var i = distanceToOrigin; // loop counter - var o = yield* this.getOperation(this.left); - o = yield* this.getOperation(o.right); - var tmp; + var o, tmp; + if (op.right == null && op.left == null) { + var p = yield* this.getOperation(op.parent); + if (op.parentSub != null) { + tmp = p.map[op.parentSub]; + if (!compareIds(tmp, op.id)) { + op.right = tmp; + } + if (op.right == null) { + // this is the first ins in parent + p.map[op.parentSub] = op.id; + yield* this.setOperation(p); + yield* this.setOperation(op); + return; + } + } else { + tmp = p.start; + if (!compareIds(tmp, op.id)) { + op.left = tmp; + } + if (op.left == null) { + // this is the first ins in parent + p.start = op.id; + p.end = op.id; + yield* this.setOperation(p); + yield* this.setOperation(op); + return; + } + } + } + + if (op.left != null) { + o = yield* this.getOperation(op.left); + o = yield* this.getOperation(o.right); + } else if (op.right != null) { + o = yield* this.getOperation(op.right); + while (o.left != null){ + o = yield* this.getOperation(o.left); + } + } while (true) { - if (o.id !== this.right){ + if (o.id !== op.right){ if (Struct.Insert.getDistanceToOrigin(o) === i) { // case 1 if (o.id[0] < op.id[0]) { @@ -158,21 +203,19 @@ var Struct = { var left = null; var right = null; if (op.left != null) { - left = this.getOperation(op.left); + left = yield* this.getOperation(op.left); left.right = op.id; yield* this.setOperation(left); } if (op.right != null) { - right = this.getOperation(op.right); + right = yield* this.getOperation(op.right); right.left = op.id; yield* this.setOperation(right); } - op.left = left; - op.right = right; yield* this.setOperation(op); // notify parent - var parent = this.getOperation(op.parent); + var parent = yield* this.getOperation(op.parent); if (op.parentSub != null) { if (right == null) { parent.map[op.parentSub] = op.id; @@ -189,6 +232,7 @@ var Struct = { yield* this.setOperation(parent); } } + yield* this.setOperation(op); } }, List: { @@ -198,7 +242,8 @@ var Struct = { op.struct = "List"; return yield* Struct.Operation.create.call(this, op); }, - requiredOps: function(op, ids){ + requiredOps: function(op){ + var ids = []; if (op.start != null) { ids.push(op.start); } @@ -207,8 +252,8 @@ var Struct = { } return ids; }, - execute: function* () { - // nop + execute: function* (op) { + yield* this.setOperation(op); }, ref: function* (op : Op, pos : number) : Insert { var o = op.start; @@ -231,11 +276,11 @@ var Struct = { insert: function* (op, pos : number, contents : Array) { var o = yield* Struct.List.ref.call(this, op, pos); var or = yield* this.getOperation(o.right); - for (var content of contents) { + for (var key in contents) { var insert = { left: o, right: or, - content: content, + content: contents[key], parent: op }; o = yield* Struct.Insert.create.call(this, insert); @@ -253,17 +298,19 @@ var Struct = { op.struct = "Map"; return yield* Struct.Operation.create.call(this, op); }, - requiredOps: function(op, ids){ - for (var end of op.map) { - ids.push(end); + requiredOps: function(op){ + var ids = []; + for (var end in op.map) { + ids.push(op.map[end]); } return ids; }, - execute: function* () { - // nop + execute: function* (op) { + yield* this.setOperation(op); }, get: function* (op, name) { - return (yield* this.getOperation(op.map[name])).content; + var res = yield* this.getOperation(op.map[name]); + return (res != null) ? res.content : void 0; }, set: function* (op, name, value) { var end = op.map[name]; diff --git a/src/y.spec.js b/src/y.spec.js index c1dfb3d4..27e40d41 100644 --- a/src/y.spec.js +++ b/src/y.spec.js @@ -11,7 +11,8 @@ describe("Yjs (basic)", function(){ name: "Memory" }, connector: { - name: "Test" + name: "Test", + debug: true } })); } @@ -29,12 +30,45 @@ describe("Yjs (basic)", function(){ done(); }); }); - it("Basic get&set of Map property", function(done){ + it("Basic get&set of Map property (converge via sync)", function(done){ var y = this.users[0]; y.transact(function*(){ yield* y.root.val("stuff", "stuffy"); expect(yield* y.root.val("stuff")).toEqual("stuffy"); - done(); }); + + y.connector.flushAll(); + + function getTransaction(yy){ + return function*(){ + expect(yield* yy.root.val("stuff")).toEqual("stuffy"); + }; + } + for (var key in this.users) { + var u = this.users[key]; + u.transact(getTransaction(u)); + } + done(); + }); + it("Basic get&set of Map property (converge via update)", function(done){ + var y = this.users[0]; + y.connector.flushAll(); + y.transact(function*(){ + yield* y.root.val("stuff", "stuffy"); + expect(yield* y.root.val("stuff")).toEqual("stuffy"); + }); + + function getTransaction(yy){ + return function*(){ + expect(yield* yy.root.val("stuff")).toEqual("stuffy"); + }; + } + y.connector.flushAll(); + + for (var key in this.users) { + var u = this.users[key]; + u.transact(getTransaction(u)); + } + done(); }); }); diff --git a/y.js b/y.js index b80c9678..113f4aab 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?!0:!1:e[0]==t[0]&&e[1]===t[1]?!0:!1}function getRandom(e){if(e instanceof Array)return e[Math.floor(Math.random()*e.length)];if(e.constructor===Object){var t=[];for(var r in e)t.push(r);return e[getRandom(t)]}}!function(e){function t(e,t,r,a){var i=Object.create((t||n).prototype);return i._invoke=c(e,r||null,new p(a||[])),i}function r(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(n){return{type:"throw",arg:n}}}function n(){}function a(){}function i(){}function 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(a,i):Promise.resolve(s).then(function(e){return n.value=e,n},i)}function r(e,r){var a=n?n.then(function(){return t(e,r)}):new Promise(function(n){n(t(e,r))});return n=a["catch"](s),a}"object"==typeof process&&process.domain&&(t=process.domain.bind(t));var n,a=t.bind(e,"next"),i=t.bind(e,"throw"),s=t.bind(e,"return");this._invoke=r}function c(e,t,n){var a=x;return function(i,s){if(a===w)throw new Error("Generator is already running");if(a===R)return d();for(;;){var o=n.delegate;if(o){if("return"===i||"throw"===i&&o.iterator[i]===g){n.delegate=null;var u=o.iterator["return"];if(u){var c=r(u,o.iterator,s);if("throw"===c.type){i="throw",s=c.arg;continue}}if("return"===i)continue}var c=r(o.iterator[i],o.iterator,s);if("throw"===c.type){n.delegate=null,i="throw",s=c.arg;continue}i="next",s=g;var l=c.arg;if(!l.done)return a=k,l;n[o.resultName]=l.value,n.next=o.nextLoc,n.delegate=null}if("next"===i)a===k?n.sent=s:delete n.sent;else if("throw"===i){if(a===x)throw a=R,s;n.dispatchException(s)&&(i="next",s=g)}else"return"===i&&n.abrupt("return",s);a=w;var c=r(e,t,n);if("normal"===c.type){a=n.done?R:k;var l={value:c.arg,done:n.done};if(c.arg!==S)return l;n.delegate&&"next"===i&&(s=g)}else"throw"===c.type&&(a=R,i="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[b];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function a(){for(;++rt;++t)this[e]=null},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){function t(t,n){return i.type="throw",i.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n],i=a.completion;if("root"===a.tryLoc)return t("end");if(a.tryLoc<=this.prev){var s=y.call(a,"catchLoc"),o=y.call(a,"finallyLoc");if(s&&o){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&y.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),f(r),S}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;f(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:h(e),resultName:t,nextLoc:r},S}}}("object"==typeof global?global:"object"==typeof window?window:"object"==typeof self?self:void 0);var 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);var r=this;this.db.requestTransaction(regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.addOperation({id:["_",0],struct:"Map",map:{}}),"t0",1);case 1:r.root=new e.Map.Create(["_",0]);case 2:case"end":return t.stop()}},n,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}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 a;if(r){if(n>=t.length)break;a=t[n++]}else{if(n=t.next(),n.done)break;a=n.value}var i=a;i({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),a=0,r=n?r:r[Symbol.iterator]();;){var i;if(n){if(a>=r.length)break;i=r[a++]}else{if(a=r.next(),a.done)break;i=a.value}var s=i;s({action:"userJoined",user:e,role:t})}},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.os.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,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var s;if(a){if(i>=n.length)break;s=n[i++]}else{if(i=n.next(),i.done)break;s=i.value}var o=s;o()}this.whenSyncedListeners=null}return!1},e.prototype.receiveMessage=function(e,t){var r=this;if("sync step 1"===t.type)!function(){var n=r;r.os.requestTransaction(regeneratorRuntime.mark(function a(){var r,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.delegateYield(this.getOperations(t.stateVector),"t0",1);case 1:return r=a.t0,a.delegateYield(this.getStateVector(),"t1",3);case 3:i=a.t1,n.send(e,{type:"sync step 2",os:r,stateVector:i}),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 7:case"end":return a.stop()}},a,this)}))}();else if("sync step 2"===t.type)!function(){var e=r;r.os.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,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){for(var n=this.syncingClients,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var s;if(a){if(i>=n.length)break;s=n[i++]}else{if(i=n.next(),i.done)break;s=i.value}var o=s;this.send(o,t)}this.os.apply(t.ops)}},e.prototype.parseMessageFromXml=function(e){function t(e){var t=!0;e:for(;t;){var n=e;a=i=s=a=o=u=void 0,t=!1;for(var a=n.children,i=Array.isArray(a),s=0,a=i?a:a[Symbol.iterator]();;){var o;if(i){if(s>=a.length)break;o=a[s++]}else{if(s=a.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 a in e.attrs){var i=e.attrs[a],s=parseInt(i);n[a]=isNaN(s)||""+s!==i?i: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 a in t){var i=t[a];null==a||(i.constructor===Object?r(e.c(a),i):i.constructor===Array?n(e.c(a),i):e.setAttribute(a,i))}}function n(e,t){e.setAttribute("isArray","true");for(var a=t,i=Array.isArray(a),s=0,a=i?a:a[Symbol.iterator]();;){var o;if(i){if(s>=a.length)break;o=a[s++]}else{if(s=a.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.addOperation=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.getState(e.id[0]),"t0",1);case 1:if(r=t.t0,e.id[1]!==r.clock){t.next=10;break}return r.clock++,t.delegateYield(this.setState(r),"t1",5);case 5:return t.delegateYield(this.setOperation(e),"t2",6);case 6:return this.store.operationAdded(e),t.abrupt("return",!0);case 10:return t.abrupt("return",!1);case 11:case"end":return t.stop()}},t,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=e,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var a;if(r){if(n>=t.length)break;a=t[n++]}else{if(n=t.next(),n.done)break;a=n.value}var i=a,s=Y.Struct[i.type].requiredOps(i);this.whenOperationsExist(s,Y.Struct[i.type].execute,i)}},e.prototype.whenOperationsExist=function(e,t,r){if(e.length>0)for(var n={f:t,args:r||[],missing:e.length},a=e,i=Array.isArray(a),s=0,a=i?a:a[Symbol.iterator]();;){var o;if(i){if(s>=a.length)break;o=a[s++]}else{if(s=a.next(),s.done)break;o=s.value}var u=o,c=JSON.stringify(u),l=this.listenersById[c];null==l&&(l=[],this.listenersById[c]=l),l.push(n)}else this.listenersByIdExecuteNow.push({f:t,args:r||[]});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var f=this;this.requestTransaction(regeneratorRuntime.mark(function p(){var e,t,r,n,a,i,s,o,u,c,l,h,d,g;return regeneratorRuntime.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:e=f.listenersByIdExecuteNow,f.listenersByIdExecuteNow=[],t=f.listenersById,f.listenersById={},f.listenersByIdRequestPending=!1,r=e,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();case 6:if(!n){p.next=12;break}if(!(a>=r.length)){p.next=9;break}return p.abrupt("break",20);case 9:i=r[a++],p.next=16;break;case 12:if(a=r.next(),!a.done){p.next=15;break}return p.abrupt("break",20);case 15:i=a.value;case 16:return s=i,p.delegateYield(s.f.apply(this,s.args),"t0",18);case 18:p.next=6;break;case 20:p.t1=regeneratorRuntime.keys(t);case 21:if((p.t2=p.t1()).done){p.next=49;break}return o=p.t2.value,u=t[o],c=JSON.parse(o),p.delegateYield(this.getOperation(c),"t3",26);case 26:if(p.t4=p.t3,null!=p.t4){p.next=31;break}f.listenersById[o]=u,p.next=47;break;case 31:l=u,h=Array.isArray(l),d=0,l=h?l:l[Symbol.iterator]();case 32:if(!h){p.next=38;break}if(!(d>=l.length)){p.next=35;break}return p.abrupt("break",47);case 35:g=l[d++],p.next=42;break;case 38:if(d=l.next(),!d.done){p.next=41;break}return p.abrupt("break",47);case 41:g=d.value;case 42:if(s=g,0!==--s.missing){p.next=45;break}return p.delegateYield(s.f.apply(this,s.args),"t5",45);case 45:p.next=32;break;case 47:p.next=21;break;case 49:case"end":return p.stop()}},p,this)}))}},e.prototype.operationAdded=function(e){var t=this.listenersById[e.id];if(null!=t)for(var r=t,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();;){var i;if(n){if(a>=r.length)break;i=r[a++]}else{if(a=r.next(),a.done)break;i=a.value}var s=i;0===--s.missing&&this.whenOperationsExist([],s.f,s.args)}var o=this.parentListeners[e.parent];if(!this.parentListenersRequestPending&&null!=o&&0!==o.length){var u=this.parentListenersActivated[JSON.stringify(e.parent)];null==u&&(u=[],this.parentListenersActivated[JSON.stringify(e.parent)]=u),u.push(e),this.parentListenersRequestPending=!0;var c=this;this.requestTransaction(regeneratorRuntime.mark(function l(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:c.parentListenersRequestPending=!1,e=c.parentListenersActivated,c.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.type].notifyObservers(e[t]),n.next=4;break;case 11:case"end":return n.stop()}},l,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:return t.abrupt("return",t.t1);case 6:case"end":return t.stop()}},t,this)})},Insert:{create:regeneratorRuntime.mark(function r(e){var t,n,a;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=8;break}return e.left.right=e.id,r.delegateYield(this.setOperation(e.left),"t1",8);case 8:if(null==e.right){r.next=11;break}return e.right.left=e.id,r.delegateYield(this.setOperation(e.right),"t2",11);case 11:return r.delegateYield(this.getOperation(e.parent),"t3",12);case 12:if(t=r.t3,null==e.parentSub){r.next=19;break}if(!compareIds(t.map[e.parentSub],e.left)){r.next=17;break}return t.map[e.parentSub]=e.id,r.delegateYield(this.setOperation(t),"t4",17);case 17:r.next=25;break;case 19:if(n=compareIds(t.start,e.right),a=compareIds(t.end,e.left),!n&&!a){r.next=25;break}return n&&(t.start=e.id),a&&(parend.end=e.id),r.delegateYield(this.setOperation(t),"t5",25);case 25:return r.abrupt("return",e);case 26:case"end":return r.stop()}},r,this)}),requiredOps:function(e,t){return null!=e.left&&t.push(e.left),null!=e.right&&t.push(e.right),t},getDistanceToOrigin:regeneratorRuntime.mark(function n(e){var t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return t=0,n.next=3,this.getOperation(e.left);case 3:r=n.sent;case 4:if(e.origin===(r?r.id:null)){n.next=11;break}return t++,n.next=8,this.getOperation(r.left);case 8:r=n.sent,n.next=4;break;case 11:return n.abrupt("return",t);case 12:case"end":return n.stop()}},n,this)}),execute:regeneratorRuntime.mark(function a(e){var t,r,n,i,s,o,u;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.delegateYield(Struct.Insert.getDistanceToOrigin(e),"t0",1);case 1:return t=a.t0,r=t,a.delegateYield(this.getOperation(this.left),"t1",4);case 4:return n=a.t1,a.delegateYield(this.getOperation(n.right),"t2",6);case 6:n=a.t2;case 7:if(n.id===this.right){a.next=23;break}if(Struct.Insert.getDistanceToOrigin(n)!==r){a.next=13;break}n.id[0]=r-t&&(e.left=n,t=r+1),a.next=18;break;case 17:return a.abrupt("break",26);case 18:return r++,a.delegateYield(this.getOperation(n.next_cl),"t3",20);case 20:n=a.t3,a.next=24;break;case 23:return a.abrupt("break",26);case 24:a.next=7;break;case 26:if(s=null,o=null,null==e.left){a.next=32;break}return s=this.getOperation(e.left),s.right=e.id,a.delegateYield(this.setOperation(s),"t4",32);case 32:if(null==e.right){a.next=36;break}return o=this.getOperation(e.right),o.left=e.id,a.delegateYield(this.setOperation(o),"t5",36);case 36:return e.left=s,e.right=o,a.delegateYield(this.setOperation(e),"t6",39);case 39:if(u=this.getOperation(e.parent),null==e.parentSub){a.next=46;break}if(null!=o){a.next=44;break}return u.map[e.parentSub]=e.id,a.delegateYield(this.setOperation(u),"t7",44);case 44:a.next=50;break;case 46:if(null!=o&&null!=s){a.next=50;break}return null==o&&(u.end=e.id),null==s&&(u.start=e.id),a.delegateYield(this.setOperation(u),"t8",50);case 50:case"end":return a.stop()}},a,this)})},List:{create:regeneratorRuntime.mark(function i(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()}},i,this)}),requiredOps:function(e,t){return null!=e.start&&t.push(e.start),null!=e.end&&t.push(e.end),t},execute:regeneratorRuntime.mark(function s(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.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:r=e.start;case 1:if(0===t&&null==r){n.next=7;break}return n.delegateYield(this.getOperation(r),"t0",3);case 3:r=n.t0.right,t--,n.next=1;break;case 7:if(null!=r){n.next=11;break}n.t1=null,n.next=13;break;case 11:return n.delegateYield(this.getOperation(r),"t2",12);case 12:n.t1=n.t2;case 13:return n.abrupt("return",n.t1);case 14:case"end":return n.stop()}},o,this)}),map:regeneratorRuntime.mark(function u(e,t){var r,n;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:e=e.start,r=[];case 2:if(null==e){a.next=9;break}return a.delegateYield(this.getOperation(e),"t0",4);case 4:n=a.t0,r.push(t(n.content)),e=n.right,a.next=2;break;case 9:return a.abrupt("return",r);case 10:case"end":return a.stop()}},u,this)}),insert:regeneratorRuntime.mark(function c(e,t,r){var n,a,i,s,o,u,l,c;return regeneratorRuntime.wrap(function(f){for(;;)switch(f.prev=f.next){case 0:return f.delegateYield(Struct.List.ref.call(this,e,t),"t0",1);case 1:return n=f.t0,f.delegateYield(this.getOperation(n.right),"t1",3);case 3:a=f.t1,i=r,s=Array.isArray(i),o=0,i=s?i:i[Symbol.iterator]();case 5:if(!s){f.next=11;break}if(!(o>=i.length)){f.next=8;break}return f.abrupt("break",21);case 8:u=i[o++],f.next=15;break;case 11:if(o=i.next(),!o.done){f.next=14;break}return f.abrupt("break",21);case 14:u=o.value;case 15:return l=u,c={left:n,right:a,content:l,parent:e},f.delegateYield(Struct.Insert.create.call(this,c),"t2",18);case 18:n=f.t2;case 19:f.next=5;break;case 21:case"end":return f.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)}),requiredOps:function(e,t){for(var r=e.map,n=Array.isArray(r),a=0,r=n?r:r[Symbol.iterator]();;){var i;if(n){if(a>=r.length)break;i=r[a++]}else{if(a=r.next(),a.done)break;i=a.value}var s=i;t.push(s)}return t},execute:regeneratorRuntime.mark(function f(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},f,this)}),get:regeneratorRuntime.mark(function p(e,t){return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.getOperation(e.map[t]),"t0",1);case 1:return r.abrupt("return",r.t0.content);case 2:case"end":return r.stop()}},p,this)}),set:regeneratorRuntime.mark(function h(e,t,r){var n,a;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return n=e.map[t],null==n&&(n=null,e.map[t]=n),a={left:n,right:null,content:r,parent:e.id,parentSub:t},i.delegateYield(Struct.Insert.create.call(this,a),"t0",4);case 4:case"end":return i.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){for(var t=this.users,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var a;if(r){if(n>=t.length)break;a=t[n++]}else{if(n=t.next(),n.done)break;a=n.value}var i=a;i.userJoined(e.userId)}this.users[e.userId]=e,this.buffers[e.userId]=[]}};setInterval(function(){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],a=globalRoom.users[r];a.receiveMessage(n)}},10);var userIdCounter=0,Test=function(e){function t(r,n){if(_classCallCheck(this,t),void 0===n)throw new Error("Options must not be undefined!");e.call(this,r,{role:"master"}),this.setUserId(userIdCounter++ +"")}return _inherits(t,e),t.prototype.send=function(e,t){globalRoom.buffers[e].push(t)},t.prototype.broadcast=function(e){for(var t=globalRoom.buffers,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var a;if(r){if(n>=t.length)break;a=t[n++]}else{if(n=t.next(),n.done)break;a=n.value}var i=a;i.push(e)}},t.prototype.disconnect=function(){globalRoom.removeUser(this.userId)},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 a=new SimpleWebRTC(r);this.swr=a;var i=this;a.once("connectionReady",function(e){a.joinRoom(n),a.once("joinedRoom",function(){i.setUserId(e);var t;for(t in i.swr.webrtc.peers)i.userJoined(i.swr.webrtc.peers[t].id,"master");a.on("channelMessage",function(e,t,r){null!=r.type&&i.receiveMessage(e.id,r.payload)})}),a.on("createdPeer",function(e){i.userJoined(e.id,"master")}),a.on("peerStreamRemoved",function(e){i.userLeft(e.id)})})}return _inherits(t,e),t.prototype.send=function r(e,t){var n=this,r=function a(){var r,i=n.swr.webrtc.getPeers(e)[0];i&&(r=i.sendDirectly("simplewebrtc","yjs",t)),r||setTimeout(a,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 a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return this.buffer[JSON.stringify(e)]=null,t.next=3,this.os["delete"](e);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},a,this)}),t.prototype.setState=regeneratorRuntime.mark(function i(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.sv.put(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},i,this)}),t.prototype.getState=regeneratorRuntime.mark(function 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,a,i,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),a=0,r=n?r:r[Symbol.iterator]();case 4:if(!n){o.next=10;break}if(!(a>=r.length)){o.next=7;break}return o.abrupt("break",18);case 7:i=r[a++],o.next=14;break;case 10:if(a=r.next(),!a.done){o.next=13;break}return o.abrupt("break",18);case 13:i=a.value;case 14:s=i,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,a,i,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,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();case 5:if(!a){c.next=11;break}if(!(i>=n.length)){c.next=8;break}return c.abrupt("break",31);case 8:s=n[i++],c.next=15;break;case 11:if(i=n.next(),!i.done){c.next=14;break}return c.abrupt("break",31);case 14:s=i.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,a){function i(e){var t=e.value;e.done||(t.constructor===IDBRequest||t.constructor===IDBCursor?(t.onsuccess=function(){i(o.next(t.result))},t.onerror=function(e){o["throw"](e)}):t===s.transactionQueue?t.queue.length>0?i(o.next(t.queue.shift())):t.onRequest=function(){t.onRequest=null,i(o.next(t.queue.shift()))}:t.constructor===IDBOpenDBRequest?(t.onsuccess=function(e){var t=e.target.result;i(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){console.log("Store already exists!")}}):o["throw"]("You can not yield this type!"))}if(_classCallCheck(this,r),t.call(this,n),null==a&&(a={}),null==a.namespace||"string"!=typeof a.namespace)throw new Error("IndexedDB: expect a string (opts.namespace)!");this.namespace=a.namespace,this.idbVersion=null!=a.idbVersion?a.idbVersion:5,this.transactionQueue={queue:[],onRequest:null};var s=this,o=regeneratorRuntime.mark(function u(){var t,r,n,i;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,indexedDB.open(a.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 i=o.sent,r=new e(s),o.delegateYield(i.call(r,i),"t0",12);case 12:o.next=6;break;case 14:case"end":return o.stop()}},u,this)})();i(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:return this.os[JSON.stringify(e.id)]=e,t.abrupt("return",e);case 2:case"end":return t.stop()}},r,this)}),t.prototype.getOperation=regeneratorRuntime.mark(function n(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this.os[JSON.stringify(e)]);case 1:case"end":return t.stop()}},n,this)}),t.prototype.removeOperation=regeneratorRuntime.mark(function a(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()}},a,this)}),t.prototype.setState=regeneratorRuntime.mark(function i(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()}},i,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,a,i,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,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();case 5:if(!a){c.next=11;break}if(!(i>=n.length)){c.next=8;break}return c.abrupt("break",29);case 8:s=n[i++],c.next=15;break;case 11:if(i=n.next(),!i.done){c.next=14;break}return c.abrupt("break",29);case 14:s=i.value;case 15:o=s,u=o.user,l=e[u]||0,f=o.clock,p=l;case 20:if(!(f>=p)){c.next=27;break}return c.delegateYield(this.getOperation([u,p]),"t1",22);case 22:h=c.t1,null!=h&&t.push(h);case 24:p++,c.next=20;break;case 27:c.next=5;break;case 29:return c.abrupt("return",t);case 30:case"end":return c.stop()}},c,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),a=n.next();!a.done;){if("transaction"!==a.value)throw new Error("You may not yield this type. (Maybe you meant to use 'yield*'?)");a=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}(),function(){var e=function(){function e(t){_classCallCheck(this,e),this._model=t}return e.prototype.val=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(null==e){t.next=6;break}return t.delegateYield(this.Struct.List.ref(this._model,e),"t0",2);case 2:return r=t.t0,t.abrupt("return",r?r.content:null);case 6:return t.delegateYield(this.Struct.List.map(this._model,function(e){return e}),"t1",7);case 7:return t.abrupt("return",t.t1);case 8:case"end":return t.stop()}},t,this)}),e.prototype.insert=regeneratorRuntime.mark(function r(e,t){return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.Struct.List.insert(e,t),"t0",1);case 1:case"end":return r.stop()}},r,this)}),e}();Y.List=regeneratorRuntime.mark(function t(){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.Struct.List.create(),"t0",1);case 1:return r=t.t0,t.abrupt("return",new e(r));case 3: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,0!==n.length){t.next=9;break}throw new Error("Implement this case!");case 9:if(1!==n.length){t.next=14;break}return t.delegateYield(Y.Struct.Map.get.call(e,r,n[0]),"t1",11);case 11:return t.abrupt("return",t.t1);case 14:return t.delegateYield(Y.Struct.Map.set.call(e,r,n[0],n[1]),"t2",15);case 15:return t.abrupt("return",t.t2);case 16:case"end":return t.stop()}},t,this)}),e}();Y.Map=regeneratorRuntime.mark(function t(){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!(this instanceof Y.AbstractOperationStore)){t.next=6;break}return t.delegateYield(Y.Struct.map.create.call(this),"t0",2);case 2:return r=t.t0,t.abrupt("return",new e(r));case 6:throw new Error("Don't use `new` to create this type!");case 7: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 compareIds(e,t){return null==e?null==t?!0:!1:e[0]===t[0]&&e[1]===t[1]?!0:!1}function getRandom(e){if(e instanceof Array)return e[Math.floor(Math.random()*e.length)];if(e.constructor===Object){var t=[];for(var r in e)t.push(r);return e[getRandom(t)]}}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(),a=globalRoom.users[r];return a.receiveMessage(n[0],n[1]),!0}return!1}!function(e){function t(e,t,r,a){var i=Object.create((t||n).prototype);return i._invoke=c(e,r||null,new f(a||[])),i}function r(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(n){return{type:"throw",arg:n}}}function n(){}function a(){}function i(){}function 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(a,i):Promise.resolve(s).then(function(e){return n.value=e,n},i)}function r(e,r){var a=n?n.then(function(){return t(e,r)}):new Promise(function(n){n(t(e,r))});return n=a["catch"](s),a}"object"==typeof process&&process.domain&&(t=process.domain.bind(t));var n,a=t.bind(e,"next"),i=t.bind(e,"throw"),s=t.bind(e,"return");this._invoke=r}function c(e,t,n){var a=x;return function(i,s){if(a===k)throw new Error("Generator is already running");if(a===R)return d();for(;;){var o=n.delegate;if(o){if("return"===i||"throw"===i&&o.iterator[i]===g){n.delegate=null;var u=o.iterator["return"];if(u){var c=r(u,o.iterator,s);if("throw"===c.type){i="throw",s=c.arg;continue}}if("return"===i)continue}var c=r(o.iterator[i],o.iterator,s);if("throw"===c.type){n.delegate=null,i="throw",s=c.arg;continue}i="next",s=g;var l=c.arg;if(!l.done)return a=w,l;n[o.resultName]=l.value,n.next=o.nextLoc,n.delegate=null}if("next"===i)a===w?n.sent=s:delete n.sent;else if("throw"===i){if(a===x)throw a=R,s;n.dispatchException(s)&&(i="next",s=g)}else"return"===i&&n.abrupt("return",s);a=k;var c=r(e,t,n);if("normal"===c.type){a=n.done?R:w;var l={value:c.arg,done:n.done};if(c.arg!==S)return l;n.delegate&&"next"===i&&(s=g)}else"throw"===c.type&&(a=R,i="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[b];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function a(){for(;++rt;++t)this[e]=null},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){function t(t,n){return i.type="throw",i.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n],i=a.completion;if("root"===a.tryLoc)return t("end");if(a.tryLoc<=this.prev){var s=y.call(a,"catchLoc"),o=y.call(a,"finallyLoc");if(s&&o){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&y.call(n,"finallyLoc")&&this.prev=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 a=n.arg;p(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:h(e),resultName:t,nextLoc:r},S}}}("object"==typeof global?global:"object"==typeof window?window:"object"==typeof self?self:void 0);var 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);var r=this;this.db.requestTransaction(regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.addOperation({id:["_",0],struct:"Map",map:{}}),"t0",1);case 1:r.root=new e.Map.Create(["_",0]);case 2:case"end":return t.stop()}},n,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 a;if(r){if(n>=t.length)break;a=t[n++]}else{if(n=t.next(),n.done)break;a=n.value}var i=a;i({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),a=0,r=n?r:r[Symbol.iterator]();;){var i;if(n){if(a>=r.length)break;i=r[a++]}else{if(a=r.next(),a.done)break;i=a.value}var s=i;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,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var s;if(a){if(i>=n.length)break;s=n[i++]}else{if(i=n.next(),i.done)break;s=i.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 a(){var r,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.delegateYield(this.getOperations(t.stateVector),"t0",1);case 1:return r=a.t0,a.delegateYield(this.getStateVector(),"t1",3);case 3:i=a.t1,n.send(e,{type:"sync step 2",os:r,stateVector:i}),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 a.stop()}},a,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,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var s;if(a){if(i>=n.length)break;s=n[i++]}else{if(i=n.next(),i.done)break;s=i.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;a=i=s=a=o=u=void 0,t=!1;for(var a=n.children,i=Array.isArray(a),s=0,a=i?a:a[Symbol.iterator]();;){var o;if(i){if(s>=a.length)break;o=a[s++]}else{if(s=a.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 a in e.attrs){var i=e.attrs[a],s=parseInt(i);n[a]=isNaN(s)||""+s!==i?i: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 a in t){var i=t[a];null==a||(i.constructor===Object?r(e.c(a),i):i.constructor===Array?n(e.c(a),i):e.setAttribute(a,i))}}function n(e,t){e.setAttribute("isArray","true");for(var a=t,i=Array.isArray(a),s=0,a=i?a:a[Symbol.iterator]();;){var o;if(i){if(s>=a.length)break;o=a[s++]}else{if(s=a.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.addOperation=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.getState(e.id[0]),"t0",1);case 1:if(r=t.t0,e.id[1]!==r.clock){t.next=10;break}return r.clock++,t.delegateYield(this.setState(r),"t1",5);case 5:return t.delegateYield(this.setOperation(e),"t2",6);case 6:return this.store.operationAdded(e),t.abrupt("return",!0);case 10:return t.abrupt("return",!1);case 11:case"end":return t.stop()}},t,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,Y.Struct[r.struct].execute,r)}},e.prototype.whenOperationsExist=function(e,t,r){if(e.length>0){var n={f:t,args:r||[],missing:e.length};for(var a in e){var i=e[a],s=JSON.stringify(i),o=this.listenersById[s];null==o&&(o=[],this.listenersById[s]=o),o.push(n)}}else this.listenersByIdExecuteNow.push({f:t,args:r||[]});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var u=this;this.requestTransaction(regeneratorRuntime.mark(function c(){var e,t,r,n,a,i,s;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:e=u.listenersByIdExecuteNow,u.listenersByIdExecuteNow=[],t=u.listenersById,u.listenersById={},u.listenersByIdRequestPending=!1,o.t0=regeneratorRuntime.keys(e);case 6:if((o.t1=o.t0()).done){o.next=12;break}return r=o.t1.value,n=e[r],o.delegateYield(n.f.call(this,n.args),"t2",10);case 10:o.next=6;break;case 12:o.t3=regeneratorRuntime.keys(t);case 13:if((o.t4=o.t3()).done){o.next=33;break}return a=o.t4.value,i=t[a],s=JSON.parse(a),o.delegateYield(this.getOperation(s),"t5",18);case 18:if(o.t6=o.t5,null!=o.t6){o.next=23;break}u.listenersById[a]=i,o.next=31;break;case 23:o.t7=regeneratorRuntime.keys(i);case 24:if((o.t8=o.t7()).done){o.next=31;break}if(r=o.t8.value,n=i[r],0!==--n.missing){o.next=29;break}return o.delegateYield(n.f.call(this,n.args),"t9",29);case 29:o.next=24;break;case 31:o.next=13;break;case 33:case"end":return o.stop()}},c,this)}))}},e.prototype.operationAdded=function(e){var t=this.listenersById[JSON.stringify(e.id)];if(null!=t)for(var r in t){var n=t[r];0===--n.missing&&this.whenOperationsExist([],n.f,n.args)}var a=this.parentListeners[e.parent];if(!this.parentListenersRequestPending&&null!=a&&0!==a.length){var i=this.parentListenersActivated[JSON.stringify(e.parent)];null==i&&(i=[],this.parentListenersActivated[JSON.stringify(e.parent)]=i),i.push(e),this.parentListenersRequestPending=!0;var s=this;this.requestTransaction(regeneratorRuntime.mark(function o(){var e,t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:s.parentListenersRequestPending=!1,e=s.parentListenersActivated,s.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()}},o,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:this.store.y.connector.broadcast({type:"update",ops:[e]});case 6:case"end":return t.stop()}},t,this)})},Insert:{create:regeneratorRuntime.mark(function r(e){var t,n,a;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=8;break}return e.left.right=e.id,r.delegateYield(this.setOperation(e.left),"t1",8);case 8:if(null==e.right){r.next=11;break}return e.right.left=e.id,r.delegateYield(this.setOperation(e.right),"t2",11);case 11:return r.delegateYield(this.getOperation(e.parent),"t3",12);case 12:if(t=r.t3,null==e.parentSub){r.next=19;break}if(!compareIds(t.map[e.parentSub],e.left)){r.next=17;break}return t.map[e.parentSub]=e.id,r.delegateYield(this.setOperation(t),"t4",17);case 17:r.next=25;break;case 19:if(n=compareIds(t.start,e.right),a=compareIds(t.end,e.left),!n&&!a){r.next=25;break}return n&&(t.start=e.id),a&&(t.end=e.id),r.delegateYield(this.setOperation(t),"t5",25);case 25:return r.abrupt("return",e);case 26:case"end":return r.stop()}},r,this)}),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),t},getDistanceToOrigin:regeneratorRuntime.mark(function n(e){var t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return t=0,n.delegateYield(this.getOperation(e.left),"t0",2);case 2:r=n.t0;case 3:if(e.origin===(r?r.id:null)){n.next=9;break}return t++,n.delegateYield(this.getOperation(r.left),"t1",6);case 6:r=n.t1,n.next=3;break;case 9:return n.abrupt("return",t);case 10:case"end":return n.stop()}},n,this)}),execute:regeneratorRuntime.mark(function a(e){var t,r,n,i,s,o,u,c;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.delegateYield(Struct.Insert.getDistanceToOrigin.call(this,e),"t0",1);case 1:if(t=a.t0,r=t,null!=e.right||null!=e.left){a.next=24;break}return a.delegateYield(this.getOperation(e.parent),"t1",5);case 5:if(s=a.t1,null==e.parentSub){a.next=16;break}if(i=s.map[e.parentSub],compareIds(i,e.id)||(e.right=i),null!=e.right){a.next=14;break}return s.map[e.parentSub]=e.id,a.delegateYield(this.setOperation(s),"t2",12);case 12:return a.delegateYield(this.setOperation(e),"t3",13);case 13:return a.abrupt("return");case 14:a.next=24;break;case 16:if(i=s.start,compareIds(i,e.id)||(e.left=i),null!=e.left){a.next=24;break}return s.start=e.id,s.end=e.id,a.delegateYield(this.setOperation(s),"t4",22);case 22:return a.delegateYield(this.setOperation(e),"t5",23);case 23:return a.abrupt("return");case 24:if(null==e.left){a.next=31;break}return a.delegateYield(this.getOperation(e.left),"t6",26);case 26:return n=a.t6,a.delegateYield(this.getOperation(n.right),"t7",28);case 28:n=a.t7,a.next=39;break;case 31:if(null==e.right){a.next=39;break}return a.delegateYield(this.getOperation(e.right),"t8",33);case 33:n=a.t8;case 34:if(null==n.left){a.next=39;break}return a.delegateYield(this.getOperation(n.left),"t9",36);case 36:n=a.t9,a.next=34;break;case 39:if(n.id===e.right){a.next=55;break}if(Struct.Insert.getDistanceToOrigin(n)!==r){a.next=45;break}n.id[0]=r-t&&(e.left=n,t=r+1),a.next=50;break;case 49:return a.abrupt("break",58);case 50:return r++,a.delegateYield(this.getOperation(n.next_cl),"t10",52);case 52:n=a.t10,a.next=56;break;case 55:return a.abrupt("break",58);case 56:a.next=39;break;case 58:if(o=null,u=null,null==e.left){a.next=65;break}return a.delegateYield(this.getOperation(e.left),"t11",62);case 62:return o=a.t11,o.right=e.id,a.delegateYield(this.setOperation(o),"t12",65);case 65:if(null==e.right){a.next=70;break}return a.delegateYield(this.getOperation(e.right),"t13",67);case 67:return u=a.t13,u.left=e.id,a.delegateYield(this.setOperation(u),"t14",70);case 70:return a.delegateYield(this.setOperation(e),"t15",71);case 71:return a.delegateYield(this.getOperation(e.parent),"t16",72);case 72:if(c=a.t16,null==e.parentSub){a.next=79;break}if(null!=u){a.next=77;break}return c.map[e.parentSub]=e.id,a.delegateYield(this.setOperation(c),"t17",77);case 77:a.next=83;break;case 79:if(null!=u&&null!=o){a.next=83;break}return null==u&&(c.end=e.id),null==o&&(c.start=e.id),a.delegateYield(this.setOperation(c),"t18",83);case 83:return a.delegateYield(this.setOperation(e),"t19",84);case 84:case"end":return a.stop()}},a,this)})},List:{create:regeneratorRuntime.mark(function i(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()}},i,this)}),requiredOps:function(e){var t=[];return null!=e.start&&t.push(e.start),null!=e.end&&t.push(e.end),t},execute:regeneratorRuntime.mark(function s(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.setOperation(e),"t0",1);case 1: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:r=e.start;case 1:if(0===t&&null==r){n.next=7;break}return n.delegateYield(this.getOperation(r),"t0",3);case 3:r=n.t0.right,t--,n.next=1;break;case 7:if(null!=r){n.next=11;break}n.t1=null,n.next=13;break;case 11:return n.delegateYield(this.getOperation(r),"t2",12);case 12:n.t1=n.t2;case 13:return n.abrupt("return",n.t1);case 14:case"end":return n.stop()}},o,this)}),map:regeneratorRuntime.mark(function u(e,t){var r,n;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:e=e.start,r=[];case 2:if(null==e){a.next=9;break}return a.delegateYield(this.getOperation(e),"t0",4);case 4:n=a.t0,r.push(t(n.content)),e=n.right,a.next=2;break;case 9:return a.abrupt("return",r);case 10:case"end":return a.stop()}},u,this)}),insert:regeneratorRuntime.mark(function c(e,t,r){var n,a,i,c;return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:return s.delegateYield(Struct.List.ref.call(this,e,t),"t0",1);case 1:return n=s.t0,s.delegateYield(this.getOperation(n.right),"t1",3);case 3:a=s.t1,s.t2=regeneratorRuntime.keys(r);case 5:if((s.t3=s.t2()).done){s.next=12;break}return i=s.t3.value,c={left:n,right:a,content:r[i],parent:e},s.delegateYield(Struct.Insert.create.call(this,c),"t4",9);case 9:n=s.t4,s.next=5;break;case 12:case"end":return s.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)}),requiredOps:function(e){var t=[];for(var r in e.map)t.push(e.map[r]);return t},execute:regeneratorRuntime.mark(function p(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.setOperation(e),"t0",1);case 1: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:return r=n.t0,n.abrupt("return",null!=r?r.content:void 0);case 3:case"end":return n.stop()}},f,this)}),set:regeneratorRuntime.mark(function h(e,t,r){var n,a;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return n=e.map[t],null==n&&(n=null,e.map[t]=n),a={left:n,right:null,content:r,parent:e.id,parentSub:t},i.delegateYield(Struct.Insert.create.call(this,a),"t0",4);case 4:case"end":return i.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")}}};setInterval(flushOne,10);var 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([this.userId,t])},t.prototype.broadcast=function(e){for(var t in globalRoom.buffers)globalRoom.buffers[t].push([this.userId,e])},t.prototype.disconnect=function(){globalRoom.removeUser(this.userId)},t.prototype.flushAll=function(){for(var e=!0;e;)e=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 a=new SimpleWebRTC(r);this.swr=a;var i=this;a.once("connectionReady",function(e){a.joinRoom(n),a.once("joinedRoom",function(){i.setUserId(e);var t;for(t in i.swr.webrtc.peers)i.userJoined(i.swr.webrtc.peers[t].id,"master");a.on("channelMessage",function(e,t,r){null!=r.type&&i.receiveMessage(e.id,r.payload)})}),a.on("createdPeer",function(e){i.userJoined(e.id,"master")}),a.on("peerStreamRemoved",function(e){i.userLeft(e.id)})})}return _inherits(t,e),t.prototype.send=function r(e,t){var n=this,r=function a(){var r,i=n.swr.webrtc.getPeers(e)[0];i&&(r=i.sendDirectly("simplewebrtc","yjs",t)),r||setTimeout(a,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 a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return this.buffer[JSON.stringify(e)]=null,t.next=3,this.os["delete"](e);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},a,this)}),t.prototype.setState=regeneratorRuntime.mark(function i(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.sv.put(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},i,this)}),t.prototype.getState=regeneratorRuntime.mark(function 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,a,i,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),a=0,r=n?r:r[Symbol.iterator]();case 4:if(!n){o.next=10;break}if(!(a>=r.length)){o.next=7;break}return o.abrupt("break",18);case 7:i=r[a++],o.next=14;break;case 10:if(a=r.next(),!a.done){o.next=13;break}return o.abrupt("break",18);case 13:i=a.value;case 14:s=i,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,a,i,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,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();case 5:if(!a){c.next=11;break}if(!(i>=n.length)){c.next=8;break}return c.abrupt("break",31);case 8:s=n[i++],c.next=15;break;case 11:if(i=n.next(),!i.done){c.next=14;break}return c.abrupt("break",31);case 14:s=i.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,a){function i(e){var t=e.value;e.done||(t.constructor===IDBRequest||t.constructor===IDBCursor?(t.onsuccess=function(){i(o.next(t.result))},t.onerror=function(e){o["throw"](e)}):t===s.transactionQueue?t.queue.length>0?i(o.next(t.queue.shift())):t.onRequest=function(){t.onRequest=null,i(o.next(t.queue.shift()))}:t.constructor===IDBOpenDBRequest?(t.onsuccess=function(e){var t=e.target.result;i(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==a&&(a={}),null==a.namespace||"string"!=typeof a.namespace)throw new Error("IndexedDB: expect a string (opts.namespace)!");this.namespace=a.namespace,this.idbVersion=null!=a.idbVersion?a.idbVersion:5,this.transactionQueue={queue:[],onRequest:null};var s=this,o=regeneratorRuntime.mark(function u(){var t,r,n,i;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,indexedDB.open(a.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 i=o.sent,r=new e(s),o.delegateYield(i.call(r,i),"t0",12); + +case 12:o.next=6;break;case 14:case"end":return o.stop()}},u,this)})();i(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:return this.os[JSON.stringify(e.id)]=e,t.abrupt("return",e);case 2:case"end":return t.stop()}},r,this)}),t.prototype.getOperation=regeneratorRuntime.mark(function n(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this.os[JSON.stringify(e)]);case 1:case"end":return t.stop()}},n,this)}),t.prototype.removeOperation=regeneratorRuntime.mark(function a(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()}},a,this)}),t.prototype.setState=regeneratorRuntime.mark(function i(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()}},i,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,a,i,s,o,u,l,p,f,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,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();case 5:if(!a){c.next=11;break}if(!(i>=n.length)){c.next=8;break}return c.abrupt("break",31);case 8:s=n[i++],c.next=15;break;case 11:if(i=n.next(),!i.done){c.next=14;break}return c.abrupt("break",31);case 14:s=i.value;case 15:if(o=s,u=o.user,"_"!==u){c.next=19;break}return c.abrupt("continue",29);case 19:l=e[u]||0,p=o.clock,f=l;case 22:if(!(p>=f)){c.next=29;break}return c.delegateYield(this.getOperation([u,f]),"t1",24);case 24:h=c.t1,null!=h&&t.push(h);case 26:f++,c.next=22;break;case 29:c.next=5;break;case 31:return c.abrupt("return",t);case 32:case"end":return c.stop()}},c,this)}),t}(AbstractTransaction),t=function(t){function r(e){_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),a=n.next();!a.done;){if("transaction"!==a.value)throw new Error("You may not yield this type. (Maybe you meant to use 'yield*'?)");a=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}(),function(){var e=function(){function e(t){_classCallCheck(this,e),this._model=t}return e.prototype.val=regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(null==e){t.next=6;break}return t.delegateYield(this.Struct.List.ref(this._model,e),"t0",2);case 2:return r=t.t0,t.abrupt("return",r?r.content:null);case 6:return t.delegateYield(this.Struct.List.map(this._model,function(e){return e}),"t1",7);case 7:return t.abrupt("return",t.t1);case 8:case"end":return t.stop()}},t,this)}),e.prototype.insert=regeneratorRuntime.mark(function r(e,t){return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.Struct.List.insert(e,t),"t0",1);case 1:case"end":return r.stop()}},r,this)}),e}();Y.List=regeneratorRuntime.mark(function t(){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.Struct.List.create(),"t0",1);case 1:return r=t.t0,t.abrupt("return",new e(r));case 3: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,0!==n.length){t.next=9;break}throw new Error("Implement this case!");case 9:if(1!==n.length){t.next=14;break}return t.delegateYield(Y.Struct.Map.get.call(e,r,n[0]),"t1",11);case 11:return t.abrupt("return",t.t1);case 14:return t.delegateYield(Y.Struct.Map.set.call(e,r,n[0],n[1]),"t2",15);case 15:return t.abrupt("return",t.t2);case 16:case"end":return t.stop()}},t,this)}),e}();Y.Map=regeneratorRuntime.mark(function t(){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!(this instanceof Y.AbstractOperationStore)){t.next=6;break}return t.delegateYield(Y.Struct.map.create.call(this),"t0",2);case 2:return r=t.t0,t.abrupt("return",new e(r));case 6:throw new Error("Don't use `new` to create this type!");case 7:case"end":return t.stop()}},t,this)}),Y.Map.Create=e}(); //# sourceMappingURL=y.js.map \ No newline at end of file diff --git a/y.js.map b/y.js.map index 39be9d0c..2bb80139 100644 --- a/y.js.map +++ b/y.js.map @@ -1 +1 @@ -{"version":3,"sources":["y.js","Struct.js","Connectors/Test.js","runtime.js","Connector.js","OperationStore.js","Connectors/WebRTC.js","OperationStores/IndexedDB.js","OperationStores/Memory.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","getRandom","o","Array","Math","floor","random","length","keys","key","push","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","i","hasOwn","hasOwnProperty","Symbol","inModule","module","runtime","regeneratorRuntime","exports","Gp","displayName","isGeneratorFunction","genFun","ctor","name","mark","awrap","async","iter","toString","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","y","requestTransaction","callee$2$0","context$3$0","addOperation","id","struct","map","root","Map","Create","transact","destroy","disconnect","removeDatabase","AbstractConnector","role","connections","userEventListeners","whenSyncedListeners","currentSyncTarget","setUserId","userId","onUserEvent","f","userLeft","user","findNextSyncTarget","_iterator","_isArray","isArray","_i","_ref","action","userJoined","isSynced","_iterator2","_isArray2","_i2","_ref2","whenSynced","syncUser","uid","conn","os","t0","t1","getStateVector","t3","t2","t4","stateVector","send","_iterator3","_isArray3","_i3","_ref3","receiveMessage","sender","m","_this","callee$3$0","ops","sv","context$4$0","getOperations","syncingClients","setTimeout","filter","cli","syncingClientDuration","broadcast","_iterator4","_isArray4","_i4","_ref4","client","apply","parseMessageFromXml","parseArray","_x","_again","_function","node","_iterator5","_isArray5","_i5","_ref5","n","children","getAttribute","parseObject","json","attrName","attrs","int","parseInt","encodeMessageToXml","msg","encodeObject","c","encodeArray","setAttribute","array","_iterator6","_isArray6","_i6","_ref6","e","xmlns","AbstractTransaction","store","op","context$2$0","getState","clock","setState","setOperation","operationAdded","AbstractOperationStore","parentListeners","parentListenersRequestPending","parentListenersActivated","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","_iterator7","_isArray7","_i7","_ref7","required","Struct","requiredOps","whenOperationsExist","execute","ids","args","listener","missing","_iterator8","_isArray8","_i8","_ref8","_id","sid","JSON","stringify","l","exeNow","ls","_iterator9","_isArray9","_i9","_ref9","_iterator10","_isArray10","_i10","_ref10","parse","getOperation","_iterator11","_isArray11","_i11","_ref11","listeners","parent","al","activatedOperations","parentId","notifyObservers","removeParentListener","g","addParentListener","Operation","Insert","start","end","left","right","origin","parentSub","parend","getDistanceToOrigin","d","distanceToOrigin","tmp","next_cl","List","ref","pos","res","operation","content","insert","contents","or","_iterator12","_isArray12","_i12","_ref12","_iterator13","_isArray13","_i13","_ref13","get","set","globalRoom","users","buffers","removeUser","addUser","_iterator14","_isArray14","_i14","_ref14","u","setInterval","bufs","userIdCounter","Test","_AbstractConnector","options","message","_iterator15","_isArray15","_i15","_ref15","buf","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","_iterator16","_isArray16","_i16","_ref16","startSS","endSV","_iterator17","_isArray17","_i17","_ref17","endState","startPos","endPos","range","IDBKeyRange","bound","OperationStore","_AbstractOperationStore","handleTransactions","t","request","IDBRequest","IDBCursor","onsuccess","tGen","onerror","transactionQueue","queue","shift","onRequest","IDBOpenDBRequest","event","target","onupgradeneeded","createObjectStore","keyPath","console","log","namespace","idbVersion","transactionGen","cont","indexedDB","open","makeGen","close","deleteDatabase","Memory","_AbstractTransaction2","_iterator18","_isArray18","_i18","_ref18","_AbstractOperationStore2","gen","_model","val","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 var y = this;\n this.db.requestTransaction(function*(){\n yield* this.addOperation({\n id: [\"_\", 0],\n struct: \"Map\",\n map: {}\n });\n y.root = new Y.Map.Create([\"_\", 0]);\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 if (id1 == null) {\n if (id2 == null) {\n return true;\n } else {\n return false;\n }\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 return yield* this.addOperation(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 op.left.right = op.id;\n yield* this.setOperation(op.left);\n }\n if (op.right != null) {\n op.right.left = op.id;\n yield* this.setOperation(op.right);\n }\n var parent = yield* this.getOperation(op.parent);\n if (op.parentSub != null){\n if (compareIds(parent.map[op.parentSub], op.left)) {\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 parend.end = op.id;\n }\n yield* this.setOperation(parent);\n }\n }\n return op;\n },\n requiredOps: function(op, ids){\n if(op.left != null){\n ids.push(op.left);\n }\n if(op.right != null){\n ids.push(op.right);\n }\n return ids;\n },\n getDistanceToOrigin: function *(op){\n var d = 0;\n var o = yield this.getOperation(op.left);\n while (op.origin !== (o ? o.id : null)) {\n d++;\n o = yield this.getOperation(o.left);\n }\n return d;\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 distanceToOrigin = yield* Struct.Insert.getDistanceToOrigin(op); // most cases: 0 (starts from 0)\n var i = distanceToOrigin; // loop counter\n var o = yield* this.getOperation(this.left);\n o = yield* this.getOperation(o.right);\n var tmp;\n while (true) {\n if (o.id !== this.right){\n if (Struct.Insert.getDistanceToOrigin(o) === i) {\n // case 1\n if (o.id[0] < op.id[0]) {\n op.left = o;\n distanceToOrigin = i + 1;\n }\n } else if ((tmp = Struct.Insert.getDistanceToOrigin(o)) < i) {\n // case 2\n if (i - distanceToOrigin <= tmp) {\n op.left = o;\n distanceToOrigin = i + 1;\n }\n } else {\n break;\n }\n i++;\n o = yield* this.getOperation(o.next_cl);\n } else {\n break;\n }\n }\n\n // reconnect..\n var left = null;\n var right = null;\n if (op.left != null) {\n left = this.getOperation(op.left);\n left.right = op.id;\n yield* this.setOperation(left);\n }\n if (op.right != null) {\n right = this.getOperation(op.right);\n right.left = op.id;\n yield* this.setOperation(right);\n }\n op.left = left;\n op.right = right;\n yield* this.setOperation(op);\n\n // notify parent\n var parent = this.getOperation(op.parent);\n if (op.parentSub != null) {\n if (right == 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 requiredOps: function(op, 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 execute: function* () {\n // nop\n },\n ref: function* (op : Op, pos : number) : Insert {\n var o = op.start;\n while ( pos !== 0 || o != null) {\n o = (yield* this.getOperation(o)).right;\n pos--;\n }\n return (o == null) ? null : yield* this.getOperation(o);\n },\n map: function* (o : Op, f : Function) : Array {\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) {\n var o = yield* Struct.List.ref.call(this, op, pos);\n var or = yield* this.getOperation(o.right);\n for (var content of contents) {\n var insert = {\n left: o,\n right: or,\n content: content,\n parent: op\n };\n o = yield* Struct.Insert.create.call(this, insert);\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 requiredOps: function(op, ids){\n for (var end of op.map) {\n ids.push(end);\n }\n return ids;\n },\n execute: function* () {\n // nop\n },\n get: function* (op, name) {\n return (yield* this.getOperation(op.map[name])).content;\n },\n set: function* (op, name, value) {\n var end = op.map[name];\n if (end == null) {\n end = null;\n op.map[name] = end;\n }\n var insert = {\n left: end,\n right: null,\n content: value,\n parent: op.id,\n parentSub: name\n };\n yield* Struct.Insert.create.call(this, insert);\n }\n }\n};\n\nY.Struct = Struct;\n","// returns a random element of o\n// works on Object, and Array\nfunction getRandom (o) {\n if (o instanceof Array) {\n return o[Math.floor(Math.random() * o.length)];\n } else if (o.constructor === Object) {\n var keys = [];\n for (var key in o) {\n keys.push(key);\n }\n return o[getRandom(keys)];\n }\n}\n\nvar globalRoom = {\n users: {},\n buffers: {},\n removeUser: function(user){\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 for (var u of this.users) {\n u.userJoined(connector.userId);\n }\n this.users[connector.userId] = connector;\n this.buffers[connector.userId] = [];\n }\n};\n\nsetInterval(function(){\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];\n var user = globalRoom.users[userId];\n user.receiveMessage(m);\n }\n}, 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 super(y, {\n role: \"master\"\n });\n\n this.setUserId((userIdCounter++) + \"\");\n }\n send (uid, message) {\n globalRoom.buffers[uid].push(message);\n }\n broadcast (message) {\n for (var buf of globalRoom.buffers) {\n buf.push(message);\n }\n }\n disconnect () {\n globalRoom.removeUser(this.userId);\n }\n}\n\nY.Test = Test;\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 }\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 }\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\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.os.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 (m.type === \"sync step 1\") {\n // TODO: make transaction, stream the ops\n let conn = this;\n this.os.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 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 } else if (m.type === \"sync step 2\") {\n let conn = this;\n this.os.requestTransaction(function*(){\n var ops = yield* this.getOperations(m.stateVector);\n conn.broadcast({\n type: \"update\",\n ops: ops\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 for (var client of this.syncingClients) {\n this.send(client, m);\n }\n this.os.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 // \n // \n // \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 // 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 {\n return false;\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\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\n * id : Id (can't use as property name)\n * sid : String (converted from id via JSON.stringify\n so we can use it as a property name)\n\n Always remember to first overwrite over\n a property before you iterate over it!\n */\n }\n setUserId (userId) {\n this.userId = userId;\n }\n apply (ops) {\n for (var o of ops) {\n var required = Y.Struct[o.type].requiredOps(o);\n this.whenOperationsExist(required, Y.Struct[o.type].execute, o);\n }\n }\n // f is called as soon as every operation requested is available.\n // Note that Transaction can (and should) buffer requests.\n whenOperationsExist (ids : Array, f : GeneratorFunction, args : Array) {\n if (ids.length > 0) {\n let listener : Listener = {\n f: f,\n args: args || [],\n missing: ids.length\n };\n\n for (let id of ids) {\n let sid = JSON.stringify(id);\n let l = this.listenersById[sid];\n if (l == null){\n l = [];\n this.listenersById[sid] = l;\n }\n l.push(listener);\n }\n } else {\n this.listenersByIdExecuteNow.push({\n f: f,\n args: args || []\n });\n }\n\n if (this.listenersByIdRequestPending){\n return;\n }\n\n this.listenersByIdRequestPending = true;\n var store = this;\n\n this.requestTransaction(function*(){\n var exeNow = store.listenersByIdExecuteNow;\n store.listenersByIdExecuteNow = [];\n\n var ls = store.listenersById;\n store.listenersById = {};\n\n store.listenersByIdRequestPending = false;\n\n for (let listener of exeNow) {\n yield* listener.f.apply(this, listener.args);\n }\n\n for (var sid in ls){\n var l = ls[sid];\n var id = JSON.parse(sid);\n if ((yield* this.getOperation(id)) == null){\n store.listenersById[sid] = l;\n } else {\n for (let listener of l) {\n if (--listener.missing === 0){\n yield* listener.f.apply(this, listener.args);\n }\n }\n }\n }\n });\n }\n // called by a transaction when an operation is added\n operationAdded (op) {\n // notify whenOperation listeners (by id)\n var l = this.listenersById[op.id];\n if (l != null) {\n for (var listener of l){\n if (--listener.missing === 0){\n this.whenOperationsExist([], listener.f, listener.args);\n }\n }\n }\n // 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.type].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;\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;\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","\ntype State = {\n user: string,\n clock: number\n};\n\ntype StateVector = Array;\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 this.os[JSON.stringify(op.id)] = op;\n return op;\n }\n *getOperation (id) {\n return this.os[JSON.stringify(id)];\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 var startPos = startSS[user] || 0;\n var endPos = endState.clock;\n\n for (var clock = startPos; clock <= endPos; clock++) {\n var op = yield* this.getOperation([user, clock]);\n if (op != null) {\n ops.push(op);\n }\n }\n }\n return ops;\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);\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\n(function(){\n\n class List {\n constructor (_model) {\n this._model = _model;\n }\n *val (pos) {\n if (pos != null) {\n var o = yield* this.Struct.List.ref(this._model, pos);\n return o ? o.content : null;\n } else {\n return yield* this.Struct.List.map(this._model, function(c){return c; });\n }\n }\n *insert (pos, contents) {\n yield* this.Struct.List.insert(pos, contents);\n }\n }\n\n Y.List = function* YList(){\n var model = yield* this.Struct.List.create();\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 transaction = yield \"transaction\";\n var model = yield* transaction.getOperation(this._model);\n if (arguments.length === 0) {\n throw new Error(\"Implement this case!\");\n } else if (arguments.length === 1) {\n return yield* Y.Struct.Map.get.call(transaction, model, arguments[0]);\n } else {\n return yield* Y.Struct.Map.set.call(transaction, model, arguments[0], arguments[1]);\n }\n }\n }\n\n Y.Map = function* YMap(){\n if (this instanceof Y.AbstractOperationStore) {\n var model = yield* Y.Struct.map.create.call(this);\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","Struct.js","Connectors/Test.js","runtime.js","Connector.js","OperationStore.js","Connectors/WebRTC.js","OperationStores/IndexedDB.js","OperationStores/Memory.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","getRandom","o","Array","Math","floor","random","length","keys","key","push","flushOne","bufs","i","globalRoom","buffers","userId","m","shift","user","users","receiveMessage","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","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","y","requestTransaction","callee$2$0","context$3$0","addOperation","id","struct","map","root","Map","Create","transact","destroy","disconnect","removeDatabase","AbstractConnector","role","connections","userEventListeners","whenSyncedListeners","currentSyncTarget","syncingClients","forwardToSyncingClients","debug","setUserId","onUserEvent","f","userLeft","findNextSyncTarget","_iterator","_isArray","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","c","encodeArray","setAttribute","array","_iterator6","_isArray6","_i6","_ref6","e","xmlns","AbstractTransaction","store","op","context$2$0","getState","clock","setState","setOperation","operationAdded","AbstractOperationStore","parentListeners","parentListenersRequestPending","parentListenersActivated","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","required","Struct","requiredOps","whenOperationsExist","execute","ids","args","listener","missing","_id","sid","l","exeNow","ls","parse","getOperation","t6","t5","t7","t8","listeners","parent","al","activatedOperations","parentId","notifyObservers","removeParentListener","g","addParentListener","Operation","Insert","start","end","left","right","origin","parentSub","getDistanceToOrigin","d","distanceToOrigin","tmp","p","t9","next_cl","t10","t11","t13","t16","List","ref","pos","res","operation","content","insert","contents","or","get","set","removeUser","addUser","uname","u","setInterval","userIdCounter","Test","_AbstractConnector","options","message","flushAll","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","target","onupgradeneeded","createObjectStore","keyPath","namespace","idbVersion","transactionGen","cont","indexedDB","open","makeGen","close","deleteDatabase","Memory","_AbstractTransaction2","_iterator9","_isArray9","_i9","_ref9","_AbstractOperationStore2","gen","_model","val","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 var y = this;\n this.db.requestTransaction(function*(){\n yield* this.addOperation({\n id: [\"_\", 0],\n struct: \"Map\",\n map: {}\n });\n y.root = new Y.Map.Create([\"_\", 0]);\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 if (id1 == null) {\n if (id2 == null) {\n return true;\n } else {\n return false;\n }\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 yield* this.addOperation(op);\n this.store.y.connector.broadcast({\n type: \"update\",\n ops: [op]\n });\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 op.left.right = op.id;\n yield* this.setOperation(op.left);\n }\n if (op.right != null) {\n op.right.left = op.id;\n yield* this.setOperation(op.right);\n }\n var parent = yield* this.getOperation(op.parent);\n if (op.parentSub != null){\n if (compareIds(parent.map[op.parentSub], op.left)) {\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 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 return ids;\n },\n getDistanceToOrigin: function *(op){\n var d = 0;\n var o = yield* this.getOperation(op.left);\n while (op.origin !== (o ? o.id : null)) {\n d++;\n o = yield* this.getOperation(o.left);\n }\n return d;\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 distanceToOrigin = yield* Struct.Insert.getDistanceToOrigin.call(this, op); // most cases: 0 (starts from 0)\n var i = distanceToOrigin; // loop counter\n var o, tmp;\n if (op.right == null && op.left == null) {\n var p = yield* this.getOperation(op.parent);\n if (op.parentSub != null) {\n tmp = p.map[op.parentSub];\n if (!compareIds(tmp, op.id)) {\n op.right = tmp;\n }\n if (op.right == null) {\n // this is the first ins in parent\n p.map[op.parentSub] = op.id;\n yield* this.setOperation(p);\n yield* this.setOperation(op);\n return;\n }\n } else {\n tmp = p.start;\n if (!compareIds(tmp, op.id)) {\n op.left = tmp;\n }\n if (op.left == null) {\n // this is the first ins in parent\n p.start = op.id;\n p.end = op.id;\n yield* this.setOperation(p);\n yield* this.setOperation(op);\n return;\n }\n }\n }\n\n if (op.left != null) {\n o = yield* this.getOperation(op.left);\n o = yield* this.getOperation(o.right);\n } else if (op.right != null) {\n o = yield* this.getOperation(op.right);\n while (o.left != null){\n o = yield* this.getOperation(o.left);\n }\n }\n while (true) {\n if (o.id !== op.right){\n if (Struct.Insert.getDistanceToOrigin(o) === i) {\n // case 1\n if (o.id[0] < op.id[0]) {\n op.left = o;\n distanceToOrigin = i + 1;\n }\n } else if ((tmp = Struct.Insert.getDistanceToOrigin(o)) < i) {\n // case 2\n if (i - distanceToOrigin <= tmp) {\n op.left = o;\n distanceToOrigin = i + 1;\n }\n } else {\n break;\n }\n i++;\n o = yield* this.getOperation(o.next_cl);\n } else {\n break;\n }\n }\n\n // reconnect..\n var left = null;\n var right = null;\n if (op.left != null) {\n left = yield* this.getOperation(op.left);\n left.right = op.id;\n yield* this.setOperation(left);\n }\n if (op.right != null) {\n right = yield* this.getOperation(op.right);\n right.left = op.id;\n yield* this.setOperation(right);\n }\n yield* this.setOperation(op);\n\n // notify parent\n var parent = yield* this.getOperation(op.parent);\n if (op.parentSub != null) {\n if (right == 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 yield* this.setOperation(op);\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 requiredOps: function(op){\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 execute: function* (op) {\n yield* this.setOperation(op);\n },\n ref: function* (op : Op, pos : number) : Insert {\n var o = op.start;\n while ( pos !== 0 || o != null) {\n o = (yield* this.getOperation(o)).right;\n pos--;\n }\n return (o == null) ? null : yield* this.getOperation(o);\n },\n map: function* (o : Op, f : Function) : Array {\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) {\n var o = yield* Struct.List.ref.call(this, op, pos);\n var or = yield* this.getOperation(o.right);\n for (var key in contents) {\n var insert = {\n left: o,\n right: or,\n content: contents[key],\n parent: op\n };\n o = yield* Struct.Insert.create.call(this, insert);\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 requiredOps: function(op){\n var ids = [];\n for (var end in op.map) {\n ids.push(op.map[end]);\n }\n return ids;\n },\n execute: function* (op) {\n yield* this.setOperation(op);\n },\n get: function* (op, name) {\n var res = yield* this.getOperation(op.map[name]);\n return (res != null) ? res.content : void 0;\n },\n set: function* (op, name, value) {\n var end = op.map[name];\n if (end == null) {\n end = null;\n op.map[name] = end;\n }\n var insert = {\n left: end,\n right: null,\n content: value,\n parent: op.id,\n parentSub: name\n };\n yield* Struct.Insert.create.call(this, insert);\n }\n }\n};\n\nY.Struct = Struct;\n","// returns a random element of o\n// works on Object, and Array\nfunction getRandom (o) {\n if (o instanceof Array) {\n return o[Math.floor(Math.random() * o.length)];\n } else if (o.constructor === Object) {\n var keys = [];\n for (var key in o) {\n keys.push(key);\n }\n return o[getRandom(keys)];\n }\n}\n\nvar 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}\nsetInterval(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([this.userId, message]);\n }\n broadcast (message) {\n for (var key in globalRoom.buffers) {\n globalRoom.buffers[key].push([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}\n\nY.Test = Test;\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 // \n // \n // \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 // 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 {\n return false;\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\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\n * id : Id (can't use as property name)\n * sid : String (converted from id via JSON.stringify\n so we can use it as a property name)\n\n Always remember to first overwrite over\n a property before you iterate over it!\n */\n }\n 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, Y.Struct[o.struct].execute, o);\n }\n }\n // f is called as soon as every operation requested is available.\n // Note that Transaction can (and should) buffer requests.\n whenOperationsExist (ids : Array, f : GeneratorFunction, args : Array) {\n if (ids.length > 0) {\n let listener : Listener = {\n f: f,\n args: args || [],\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 f: f,\n args: args || []\n });\n }\n\n if (this.listenersByIdRequestPending){\n return;\n }\n\n this.listenersByIdRequestPending = true;\n var store = this;\n\n this.requestTransaction(function*(){\n var exeNow = store.listenersByIdExecuteNow;\n store.listenersByIdExecuteNow = [];\n\n var ls = store.listenersById;\n store.listenersById = {};\n\n store.listenersByIdRequestPending = false;\n\n for (let key in exeNow) {\n let listener = exeNow[key];\n yield* listener.f.call(this, listener.args);\n }\n\n for (var sid in ls){\n var l = ls[sid];\n var id = JSON.parse(sid);\n if ((yield* this.getOperation(id)) == null){\n store.listenersById[sid] = l;\n } else {\n for (let key in l) {\n let listener = l[key];\n if (--listener.missing === 0){\n yield* listener.f.call(this, listener.args);\n }\n }\n }\n }\n });\n }\n // called by a transaction when an operation is added\n operationAdded (op) {\n // notify whenOperation listeners (by id)\n var l = this.listenersById[JSON.stringify(op.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.f, listener.args);\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;\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;\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","\ntype State = {\n user: string,\n clock: number\n};\n\ntype StateVector = Array;\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 this.os[JSON.stringify(op.id)] = op;\n return op;\n }\n *getOperation (id) {\n return this.os[JSON.stringify(id)];\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 = yield* this.getOperation([user, clock]);\n if (op != null) {\n ops.push(op);\n }\n }\n }\n return ops;\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);\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\n(function(){\n\n class List {\n constructor (_model) {\n this._model = _model;\n }\n *val (pos) {\n if (pos != null) {\n var o = yield* this.Struct.List.ref(this._model, pos);\n return o ? o.content : null;\n } else {\n return yield* this.Struct.List.map(this._model, function(c){return c; });\n }\n }\n *insert (pos, contents) {\n yield* this.Struct.List.insert(pos, contents);\n }\n }\n\n Y.List = function* YList(){\n var model = yield* this.Struct.List.create();\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 transaction = yield \"transaction\";\n var model = yield* transaction.getOperation(this._model);\n if (arguments.length === 0) {\n throw new Error(\"Implement this case!\");\n } else if (arguments.length === 1) {\n return yield* Y.Struct.Map.get.call(transaction, model, arguments[0]);\n } else {\n return yield* Y.Struct.Map.set.call(transaction, model, arguments[0], arguments[1]);\n }\n }\n }\n\n Y.Map = function* YMap(){\n if (this instanceof Y.AbstractOperationStore) {\n var model = yield* Y.Struct.map.create.call(this);\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