diff --git a/src/OperationStores/Memory.js b/src/OperationStores/Memory.js new file mode 100644 index 00000000..4e36c71c --- /dev/null +++ b/src/OperationStores/Memory.js @@ -0,0 +1,102 @@ + +type State = { + user: string, + clock: number +}; + +type StateVector = Array; +type OperationSet = Object; // os[Id] = op +type StateSet = Object; + +Y.Memory = (function(){ //eslint-disable-line no-unused-vars + class Transaction extends AbstractTransaction { //eslint-disable-line + ss: StateSet; + os: OperationSet; + store: OperationStore; + + constructor (store : OperationStore) { + super(store); + this.sv = store.ss; + this.os = store.os; + } + *setOperation (op) { + this.os[JSON.stringify(op.id)] = op; + return op; + } + *getOperation (id) { + return this.os[JSON.stringify(id)]; + } + *removeOperation (id) { + delete this.os[JSON.stringify(id)]; + } + *setState (state : State) : State { + this.sv[state.user] = state.clock; + } + *getState (user : string) : State { + var clock = this.ss[user]; + if (clock == null){ + clock = 0; + } + return { + user: user, + clock: clock + }; + } + *getStateVector () : StateVector { + var stateVector = []; + + for (var user in this.ss) { + var clock = this.ss[user]; + stateVector.push({ + user: user, + clock: clock + }); + } + return stateVector; + } + *getStateSet () : StateSet { + return this.ss; + } + *getOperations (startSS : StateSet) { + if (startSS == null){ + startSS = {}; + } + var ops = []; + + var endSV : StateVector = yield* this.getStateVector(); + for (var endState of endSV) { + var user = endState.user; + var startPos = startSS[user] || 0; + var endPos = endState.clock; + + for (var clock = startPos; clock <= endPos; clock++) { + var op = yield* this.getOperation([user, clock]); + if (op != null) { + ops.push(op); + } + } + } + return ops; + } + } + class OperationStore extends AbstractOperationStore { //eslint-disable-line no-undef + namespace: string; + ready: Promise; + whenReadyListeners: Array; + constructor (y) { + super(y); + } + requestTransaction (makeGen : Function) { + var t = new Transaction(this); + var gen = makeGen.call(t); + gen.next(); + if (gen.done !== true) { + throw new Error("transaction is supposed to be done. Note: you may not yield with this transaction! (yield* is allowed though)"); + } + } + *removeDatabase () { + delete this.os; + } + } + return OperationStore; +})(); diff --git a/src/Types/Object.js b/src/Types/Object.js new file mode 100644 index 00000000..009588a6 --- /dev/null +++ b/src/Types/Object.js @@ -0,0 +1,25 @@ + +(function(){ + class Map { + constructor (_model) { + this._model = _model; + } + *val () { + var transaction = yield "transaction"; + var model = transaction.getOperation(this._model); + if (arguments.length === 0) { + throw new Error("Implement this case!"); + } else if (arguments.length === 1) { + return yield* this.Struct.Map.get.call(transaction, model, arguments[0]); + } else { + return yield* this.Struct.Map.set.call(transaction, model, arguments[0], arguments[1]); + } + } + } + + Y.Map = function* YMap(){ + var model = yield* this.Struct.map.create.call(this); + return new Map(model); + }; + Y.Map.Create = Map; +})(); diff --git a/src/y.spec.js b/src/y.spec.js new file mode 100644 index 00000000..d84a3c1b --- /dev/null +++ b/src/y.spec.js @@ -0,0 +1,30 @@ +/* @flow */ +/*eslint-env browser,jasmine */ + +describe("Yjs (basic)", function(){ + beforeEach(function(){ + this.users = []; + for (var i = 0; i < 5; i++) { + this.users.push(new Y({ + db: { + name: "Memory" + }, + connector: { + name: "Test" + } + })); + } + }); + afterEach(function(){ + for (var y of this.users) { + y.destroy(); + } + this.users = []; + }); + it("can List.insert and get value from the other user", function(done){ + this.users[0].val("name", 1); + this.users[0].connector.whenSynced(function(){ + done(); + }); + }); +}); diff --git a/y.js b/y.js index 93e1e562..1c8a0666 100644 --- a/y.js +++ b/y.js @@ -1,2 +1,3 @@ -"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 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 h(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 h(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(l,this),this.reset()}function p(e){if(e){var t=e[v];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:p(e),resultName:t,nextLoc:r},S}}}("object"==typeof global?global:"object"==typeof window?window:"object"==typeof self?self:void 0);var AbstractConnector=function(){function e(t){if(_classCallCheck(this,e),null==t&&(t={}),null==t.role||"master"===t.role)this.role="master";else{if("slave"!==t.role)throw new Error("Role must be either 'master' or 'slave'!");this.role="slave"}this.role=t.role,this.connections={},this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null}return e.prototype.setUserId=function(e){this.os.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:if(r=this.getState(e.id[0]),e.id[1]!==r.clock){t.next=8;break}return r.clock++,t.delegateYield(this.setState(r),"t0",4);case 4:return this.store.operationAdded(e),t.abrupt("return",!0);case 8:return t.abrupt("return",!1);case 9:case"end":return t.stop()}},t,this)}),e}(),AbstractOperationStore=function(){function e(t){_classCallCheck(this,e),this.y=t,this.parentListeners={},this.parentListenersRequestPending=!1,this.parentListenersActivated={},this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1}return 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 h(){var e,t,r,n,a,i,s,o,u,c,l,p,d,g;return regeneratorRuntime.wrap(function(h){for(;;)switch(h.prev=h.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){h.next=12;break}if(!(a>=r.length)){h.next=9;break}return h.abrupt("break",20);case 9:i=r[a++],h.next=16;break;case 12:if(a=r.next(),!a.done){h.next=15;break}return h.abrupt("break",20);case 15:i=a.value;case 16:return s=i,h.delegateYield(s.f.apply(this,s.args),"t0",18);case 18:h.next=6;break;case 20:h.t1=regeneratorRuntime.keys(t);case 21:if((h.t2=h.t1()).done){h.next=49;break}return o=h.t2.value,u=t[o],c=JSON.parse(o),h.delegateYield(this.getOperation(c),"t3",26);case 26:if(h.t4=h.t3,null!=h.t4){h.next=31;break}f.listenersById[o]=u,h.next=47;break;case 31:l=u,p=Array.isArray(l),d=0,l=p?l:l[Symbol.iterator]();case 32:if(!p){h.next=38;break}if(!(d>=l.length)){h.next=35;break}return h.abrupt("break",47);case 35:g=l[d++],h.next=42;break;case 38:if(d=l.next(),!d.done){h.next=41;break}return h.abrupt("break",47);case 41:g=d.value;case 42:if(s=g,0!==--s.missing){h.next=45;break}return h.delegateYield(s.f.apply(this,s.args),"t5",45);case 45:h.next=32;break;case 47:h.next=21;break;case 49:case"end":return h.stop()}},h,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}(),Struct={Operation:{create:regeneratorRuntime.mark(function e(t){var r,n;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.store.y.connector.userId,e.delegateYield(this.getState(r),"t0",2);case 2:return n=e.t0,t.id=[r,n.clock],e.delegateYield(this.addOperation(t),"t1",5);case 5:return e.abrupt("return",e.t1);case 6:case"end":return e.stop()}},e,this)})},Insert:{create:regeneratorRuntime.mark(function t(e,r,n,a,i){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.left=n?n.id:null,e.origin=e.left,e.right=a?a.id:null,e.parent=i.id,e.struct="Insert",t.delegateYield(Struct.Operation.create.call(this,e),"t0",6);case 6:if(null==n){t.next=9;break}return n.right=e.id,t.delegateYield(this.setOperation(n),"t1",9);case 9:if(null==a){t.next=12;break}return a.left=e.id,t.delegateYield(this.setOperation(a),"t2",12);case 12:return t.abrupt("return",e);case 13:case"end":return t.stop()}},t,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 r(e){var t,n;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t=0,r.next=3,this.getOperation(e.left);case 3:n=r.sent;case 4:if(e.origin===(n?n.id:null)){r.next=11;break}return t++,r.next=8,this.getOperation(n.left);case 8:n=r.sent,r.next=4;break;case 11:return r.abrupt("return",t);case 12:case"end":return r.stop()}},r,this)}),execute:regeneratorRuntime.mark(function n(e){var t,r,a,i,s,o;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(Struct.Insert.getDistanceToOrigin(e),"t0",1);case 1:return t=n.t0,r=t,n.delegateYield(this.getOperation(this.left),"t1",4);case 4:return a=n.t1,n.delegateYield(this.getOperation(a.right),"t2",6);case 6:a=n.t2;case 7:if(a.id===this.right){n.next=23;break}if(Struct.Insert.getDistanceToOrigin(a)!==r){n.next=13;break}a.id[0]=r-t&&(e.left=a,t=r+1),n.next=18;break;case 17:return n.abrupt("break",26);case 18:return r++,n.delegateYield(this.getOperation(a.next_cl),"t3",20);case 20:a=n.t3,n.next=24;break;case 23:return n.abrupt("break",26);case 24:n.next=7;break;case 26:return s=this.getOperation(e.left),o=this.getOperation(e.right),s.right=e.id,o.left=e.id,e.left=s,e.right=o,n.delegateYield(this.setOperation(s),"t4",33);case 33:return n.delegateYield(this.setOperation(o),"t5",34);case 34:return n.delegateYield(this.setOperation(e),"t6",35);case 35:case"end":return n.stop()}},n,this)})},List:{create:regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.start=null,e.end=null,e.struct="List",t.delegateYield(Struct.Operation.create.call(this,e),"t0",4);case 4:return t.abrupt("return",t.t0);case 5:case"end":return t.stop()}},a,this)}),requiredOps:function(e,t){return null!=e.start&&t.push(e.start),null!=e.end&&t.push(e.end),t},execute:regeneratorRuntime.mark(function i(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},i,this)}),ref:regeneratorRuntime.mark(function s(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()}},s,this)}),map:regeneratorRuntime.mark(function o(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()}},o,this)}),insert:regeneratorRuntime.mark(function u(e,t,r){var n,a,i,s,o,c,l;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return u.delegateYield(Struct.List.ref.call(this,e,t),"t0",1);case 1:return n=u.t0,u.delegateYield(this.getOperation(n.right),"t1",3);case 3:a=u.t1,i=r,s=Array.isArray(i),o=0,i=s?i:i[Symbol.iterator]();case 5:if(!s){u.next=11;break}if(!(o>=i.length)){u.next=8;break}return u.abrupt("break",20);case 8:c=i[o++],u.next=15;break;case 11:if(o=i.next(),!o.done){u.next=14;break}return u.abrupt("break",20);case 14:c=o.value;case 15:return l=c,u.delegateYield(Struct.Insert.create.call(this,{},l,n,a,e),"t2",17);case 17:n=u.t2;case 18:u.next=5;break;case 20:case"end":return u.stop()}},u,this)})}},Y=function(){function e(t){_classCallCheck(this,e),this.connector=new e[t.connector.name](t.connector),this.db=new e[t.db.name](this,t.db)}return e.prototype.transact=function(e){this.db.requestTransaction(e)},e}(),globalRoom={users:{},buffers:{},removeUser: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.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){if(_classCallCheck(this,t),void 0===r)throw new Error("Options must not be undefined!");e.call(this,{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,h,p,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,h=IDBKeyRange.bound([u,l],[u,f]),p=this.os.openCursor(h);case 21:return c.next=23,p;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;t.createObjectStore("OperationStore",{keyPath:"id"}),t.createObjectStore("StateVector",{keyPath:"user"})}):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.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,3);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}(),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}(); +"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 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 AbstractConnector=function(){function e(t){if(_classCallCheck(this,e),null==t&&(t={}),null==t.role||"master"===t.role)this.role="master";else{if("slave"!==t.role)throw new Error("Role must be either 'master' or 'slave'!");this.role="slave"}this.role=t.role,this.connections={},this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null}return e.prototype.setUserId=function(e){this.os.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:if(r=this.getState(e.id[0]),e.id[1]!==r.clock){t.next=8;break}return r.clock++,t.delegateYield(this.setState(r),"t0",4);case 4:return this.store.operationAdded(e),t.abrupt("return",!0);case 8:return t.abrupt("return",!1);case 9:case"end":return t.stop()}},t,this)}),e}(),AbstractOperationStore=function(){function e(t){_classCallCheck(this,e),this.y=t,this.parentListeners={},this.parentListenersRequestPending=!1,this.parentListenersActivated={},this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1}return 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}(),Struct={Operation:{create:regeneratorRuntime.mark(function e(t){var r,n;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.store.y.connector.userId,e.delegateYield(this.getState(r),"t0",2);case 2:return n=e.t0,t.id=[r,n.clock],e.delegateYield(this.addOperation(t),"t1",5);case 5:return e.abrupt("return",e.t1);case 6:case"end":return e.stop()}},e,this)})},Insert:{create:regeneratorRuntime.mark(function t(e,r,n,a,i){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.left=n?n.id:null,e.origin=e.left,e.right=a?a.id:null,e.parent=i.id,e.struct="Insert",t.delegateYield(Struct.Operation.create.call(this,e),"t0",6);case 6:if(null==n){t.next=9;break}return n.right=e.id,t.delegateYield(this.setOperation(n),"t1",9);case 9:if(null==a){t.next=12;break}return a.left=e.id,t.delegateYield(this.setOperation(a),"t2",12);case 12:return t.abrupt("return",e);case 13:case"end":return t.stop()}},t,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 r(e){var t,n;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t=0,r.next=3,this.getOperation(e.left);case 3:n=r.sent;case 4:if(e.origin===(n?n.id:null)){r.next=11;break}return t++,r.next=8,this.getOperation(n.left);case 8:n=r.sent,r.next=4;break;case 11:return r.abrupt("return",t);case 12:case"end":return r.stop()}},r,this)}),execute:regeneratorRuntime.mark(function n(e){var t,r,a,i,s,o;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(Struct.Insert.getDistanceToOrigin(e),"t0",1);case 1:return t=n.t0,r=t,n.delegateYield(this.getOperation(this.left),"t1",4);case 4:return a=n.t1,n.delegateYield(this.getOperation(a.right),"t2",6);case 6:a=n.t2;case 7:if(a.id===this.right){n.next=23;break}if(Struct.Insert.getDistanceToOrigin(a)!==r){n.next=13;break}a.id[0]=r-t&&(e.left=a,t=r+1),n.next=18;break;case 17:return n.abrupt("break",26);case 18:return r++,n.delegateYield(this.getOperation(a.next_cl),"t3",20);case 20:a=n.t3,n.next=24;break;case 23:return n.abrupt("break",26);case 24:n.next=7;break;case 26:return s=this.getOperation(e.left),o=this.getOperation(e.right),s.right=e.id,o.left=e.id,e.left=s,e.right=o,n.delegateYield(this.setOperation(s),"t4",33);case 33:return n.delegateYield(this.setOperation(o),"t5",34);case 34:return n.delegateYield(this.setOperation(e),"t6",35);case 35:case"end":return n.stop()}},n,this)})},List:{create:regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.start=null,e.end=null,e.struct="List",t.delegateYield(Struct.Operation.create.call(this,e),"t0",4);case 4:return t.abrupt("return",t.t0);case 5:case"end":return t.stop()}},a,this)}),requiredOps:function(e,t){return null!=e.start&&t.push(e.start),null!=e.end&&t.push(e.end),t},execute:regeneratorRuntime.mark(function i(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},i,this)}),ref:regeneratorRuntime.mark(function s(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()}},s,this)}),map:regeneratorRuntime.mark(function o(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()}},o,this)}),insert:regeneratorRuntime.mark(function u(e,t,r){var n,a,i,s,o,c,l;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return u.delegateYield(Struct.List.ref.call(this,e,t),"t0",1);case 1:return n=u.t0,u.delegateYield(this.getOperation(n.right),"t1",3);case 3:a=u.t1,i=r,s=Array.isArray(i),o=0,i=s?i:i[Symbol.iterator]();case 5:if(!s){u.next=11;break}if(!(o>=i.length)){u.next=8;break}return u.abrupt("break",20);case 8:c=i[o++],u.next=15;break;case 11:if(o=i.next(),!o.done){u.next=14;break}return u.abrupt("break",20);case 14:c=o.value;case 15:return l=c,u.delegateYield(Struct.Insert.create.call(this,{},l,n,a,e),"t2",17);case 17:n=u.t2;case 18:u.next=5;break;case 20:case"end":return u.stop()}},u,this)})},Map:{create:regeneratorRuntime.mark(function c(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e.start=null,e.end=null,e.struct="Map",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()}},c,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 l(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},l,this)}),ref:regeneratorRuntime.mark(function f(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()}},f,this)}),map:regeneratorRuntime.mark(function p(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()}},p,this)}),insert:regeneratorRuntime.mark(function h(e,t,r){var n,a,i,s,o,u,c;return regeneratorRuntime.wrap(function(l){for(;;)switch(l.prev=l.next){case 0:return l.delegateYield(Struct.List.ref.call(this,e,t),"t0",1);case 1:return n=l.t0,l.delegateYield(this.getOperation(n.right),"t1",3);case 3:a=l.t1,i=r,s=Array.isArray(i),o=0,i=s?i:i[Symbol.iterator]();case 5:if(!s){l.next=11;break}if(!(o>=i.length)){l.next=8;break}return l.abrupt("break",20);case 8:u=i[o++],l.next=15;break;case 11:if(o=i.next(),!o.done){l.next=14;break}return l.abrupt("break",20);case 14:u=o.value;case 15:return c=u,l.delegateYield(Struct.Insert.create.call(this,{},c,n,a,e),"t2",17);case 17:n=l.t2;case 18:l.next=5;break;case 20:case"end":return l.stop()}},h,this)})}},Y=function(){function e(t){_classCallCheck(this,e),this.connector=new e[t.connector.name](t.connector),this.db=new e[t.db.name](this,t.db)}return e.prototype.transact=function(e){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}(),globalRoom={users:{},buffers:{},removeUser: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.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){if(_classCallCheck(this,t),void 0===r)throw new Error("Options must not be undefined!");e.call(this,{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;t.createObjectStore("OperationStore",{keyPath:"id"}),t.createObjectStore("StateVector",{keyPath:"user"})}):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.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,3);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.sv=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.sv[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)}return _inherits(r,t),r.prototype.requestTransaction=function(t){var r=new e(this),n=t.call(r);if(n.next(),n.done!==!0)throw new Error("transaction is supposed to be done. Note: you may not yield with this transaction! (yield* is allowed though)")},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:if(e=t.sent,r=e.getOperation(this._model),0!==n.length){t.next=8;break}throw new Error("Implement this case!");case 8:if(1!==n.length){t.next=13;break}return t.delegateYield(this.Struct.Map.get.call(e,r,n[0]),"t0",10);case 10:return t.abrupt("return",t.t0);case 13:return t.delegateYield(this.Struct.Map.set.call(e,r,n[0],n[1]),"t1",14);case 14:return t.abrupt("return",t.t1);case 15: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:return t.delegateYield(this.Struct.map.create.call(this),"t0",1);case 1:return r=t.t0,t.abrupt("return",new e(r));case 3: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 cdd46e60..534d0d07 100644 --- a/y.js.map +++ b/y.js.map @@ -1 +1 @@ -{"version":3,"sources":["y.js","Connectors/Test.js","runtime.js","Connector.js","OperationStore.js","Operations.js","Connectors/WebRTC.js","OperationStores/IndexedDB.js","Types/List.js"],"names":["_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","__proto__","_classCallCheck","instance","Constructor","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","AbstractConnector","opts","role","connections","userEventListeners","whenSyncedListeners","currentSyncTarget","setUserId","userId","os","onUserEvent","f","userLeft","user","findNextSyncTarget","_iterator","_isArray","isArray","_i","_ref","action","userJoined","isSynced","_iterator2","_isArray2","_i2","_ref2","whenSynced","syncUser","uid","conn","y","requestTransaction","callee$2$0","context$3$0","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","addOperation","op","context$2$0","getState","id","clock","setState","operationAdded","AbstractOperationStore","parentListeners","parentListenersRequestPending","parentListenersActivated","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","_iterator7","_isArray7","_i7","_ref7","required","Y","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","context$1$0","connector","Insert","content","left","right","origin","struct","setOperation","getDistanceToOrigin","d","distanceToOrigin","tmp","next_cl","List","start","end","ref","pos","map","res","operation","insert","contents","or","_iterator12","_isArray12","_i12","_ref12","db","transact","globalRoom","users","buffers","removeUser","_iterator13","_isArray13","_i13","_ref13","u","addUser","_iterator14","_isArray14","_i14","_ref14","setInterval","bufs","userIdCounter","Test","_AbstractConnector","options","message","_iterator15","_isArray15","_i15","_ref15","buf","disconnect","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","get","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","namespace","transactionGen","cont","indexedDB","open","makeGen","removeDatabase","close","deleteDatabase","_model","val","YList","model","Create"],"mappings":"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","file":"y.js","sourcesContent":["/* @flow */\n\nclass Y { //eslint-disable-line no-unused-vars\n constructor (opts) {\n this.connector = new Y[opts.connector.name](opts.connector);\n this.db = new Y[opts.db.name](this, opts.db);\n }\n transact (generator) {\n this.db.requestTransaction(generator);\n }\n}\n","// returns a rendom 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 for (var u of this.users) {\n u.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 (options) {\n if(options === undefined){\n throw new Error(\"Options must not be undefined!\");\n }\n super({\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 (opts) {\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.os.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 = this.getState(op.id[0]);\n if (op.id[1] === state.clock){\n state.clock++;\n yield* this.setState(state);\n this.store.operationAdded(op);\n return true;\n } else {\n return false;\n }\n }\n}\n\ntype Listener = {\n f : GeneratorFunction, // is called when all operations are available\n missing : number // number of operations that are missing\n}\n\ntype Id = [string, number];\n\nclass AbstractOperationStore { //eslint-disable-line no-unused-vars\n constructor (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 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}\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\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 create: function*( op: Op,\n content: any,\n left: Insert,\n right: Insert,\n parent: List) : Insert {\n op.left = left ? left.id : null;\n op.origin = op.left;\n op.right = right ? right.id : null;\n op.parent = parent.id;\n op.struct = \"Insert\";\n yield* Struct.Operation.create.call(this, op);\n\n if (left != null) {\n left.right = op.id;\n yield* this.setOperation(left);\n }\n if (right != null) {\n right.left = op.id;\n yield* this.setOperation(right);\n }\n return op;\n },\n requiredOps: function(op, ids){\n 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 // reconnect..\n var left = this.getOperation(op.left);\n var right = this.getOperation(op.right);\n left.right = op.id;\n right.left = op.id;\n op.left = left;\n op.right = right;\n yield* this.setOperation(left);\n yield* this.setOperation(right);\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, 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 o = yield* Struct.Insert.create.call(this, {}, content, o, or, op);\n }\n }\n }\n};\n","\nclass WebRTC extends AbstractConnector {\n constructor (options) {\n if(options === undefined){\n throw new Error(\"Options must not be undefined!\");\n }\n super({\n role: \"slave\"\n });\n\n var room = options.room;\n\n // connect per default to our server\n if(options.url == null){\n options.url = \"https://yatta.ninja:8888\";\n }\n\n var swr = new SimpleWebRTC(options); //eslint-disable-line no-undef\n this.swr = swr;\n var self = this;\n\n swr.once(\"connectionReady\", function(userId){\n // SimpleWebRTC (swr) is initialized\n swr.joinRoom(room);\n\n swr.once(\"joinedRoom\", function(){\n self.setUserId(userId);\n var i;\n // notify the connector class about all the users that already\n // joined the session\n for(i in self.swr.webrtc.peers){\n self.userJoined(self.swr.webrtc.peers[i].id, \"master\");\n }\n swr.on(\"channelMessage\", function(peer, room_, message){\n // The client received a message\n // Check if the connector is already initialized,\n // only then forward the message to the connector class\n if(message.type != null ){\n self.receiveMessage(peer.id, message.payload);\n }\n });\n });\n\n swr.on(\"createdPeer\", function(peer){\n // a new peer/client joined the session.\n // Notify the connector class, if the connector\n // is already initialized\n self.userJoined(peer.id, \"master\");\n });\n\n swr.on(\"peerStreamRemoved\", function(peer){\n // a client left the session.\n // Notify the connector class, if the connector\n // is already initialized\n self.userLeft(peer.id);\n });\n });\n }\n send (uid, message) {\n var self = this;\n // we have to make sure that the message is sent under all circumstances\n var send = function(){\n // check if the clients still exists\n var peer = self.swr.webrtc.getPeers(uid)[0];\n var success;\n if(peer){\n // success is true, if the message is successfully sent\n success = peer.sendDirectly(\"simplewebrtc\", \"yjs\", message);\n }\n if(!success){\n // resend the message if it didn't work\n setTimeout(send, 500);\n }\n };\n // try to send the message\n send();\n }\n broadcast (message) {\n this.swr.sendDirectlyToAll(\"simplewebrtc\", \"yjs\", message);\n }\n}\n\nY.WebRTC = WebRTC;\n","\ntype State = {\n user: string,\n clock: number\n};\n\ntype StateVector = Array;\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\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, 3);\n var transactionQueue = store.transactionQueue;\n\n var transaction = null;\n var cont = true;\n while (cont) {\n var request = yield transactionQueue;\n transaction = new Transaction(store);\n\n yield* request.call(transaction, 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 db.createObjectStore(\"OperationStore\", {keyPath: \"id\"});\n db.createObjectStore(\"StateVector\", {keyPath: \"user\"});\n };\n } else {\n tGen.throw(\"You can not yield this type!\");\n }\n }\n handleTransactions(tGen.next());\n\n }\n requestTransaction (makeGen : Function) {\n this.transactionQueue.queue.push(makeGen);\n if (this.transactionQueue.onRequest != null) {\n this.transactionQueue.onRequest();\n }\n }\n *removeDatabase () {\n this.db.close();\n yield indexedDB.deleteDatabase(this.namespace);\n }\n }\n return OperationStore;\n})();\n","\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"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["y.js","Connectors/Test.js","runtime.js","Connector.js","OperationStore.js","Operations.js","Connectors/WebRTC.js","OperationStores/IndexedDB.js","OperationStores/Memory.js","Types/List.js","Types/Object.js"],"names":["_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","__proto__","_classCallCheck","instance","Constructor","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","AbstractConnector","opts","role","connections","userEventListeners","whenSyncedListeners","currentSyncTarget","setUserId","userId","os","onUserEvent","f","userLeft","user","findNextSyncTarget","_iterator","_isArray","isArray","_i","_ref","action","userJoined","isSynced","_iterator2","_isArray2","_i2","_ref2","whenSynced","syncUser","uid","conn","y","requestTransaction","callee$2$0","context$3$0","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","addOperation","op","context$2$0","getState","id","clock","setState","operationAdded","AbstractOperationStore","parentListeners","parentListenersRequestPending","parentListenersActivated","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","_iterator7","_isArray7","_i7","_ref7","required","Y","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","context$1$0","connector","Insert","content","left","right","origin","struct","setOperation","getDistanceToOrigin","d","distanceToOrigin","tmp","next_cl","List","start","end","ref","pos","map","res","operation","insert","contents","or","_iterator12","_isArray12","_i12","_ref12","Map","_iterator13","_isArray13","_i13","_ref13","db","transact","destroy","disconnect","removeDatabase","globalRoom","users","buffers","removeUser","_iterator14","_isArray14","_i14","_ref14","u","addUser","_iterator15","_isArray15","_i15","_ref15","setInterval","bufs","userIdCounter","Test","_AbstractConnector","options","message","_iterator16","_isArray16","_i16","_ref16","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","get","removeOperation","cursorResult","cursor","openCursor","getStateSet","ss","_iterator17","_isArray17","_i17","_ref17","startSS","endSV","_iterator18","_isArray18","_i18","_ref18","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","namespace","transactionGen","cont","indexedDB","open","makeGen","close","deleteDatabase","Memory","_AbstractTransaction2","_iterator19","_isArray19","_i19","_ref19","_AbstractOperationStore2","gen","_model","val","YList","model","Create","args$3$0","arguments","set","YMap"],"mappings":"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","file":"y.js","sourcesContent":["/* @flow */\n\nclass Y { //eslint-disable-line no-unused-vars\n constructor (opts) {\n this.connector = new Y[opts.connector.name](opts.connector);\n this.db = new Y[opts.db.name](this, opts.db);\n }\n transact (generator) {\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","// 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 for (var u of this.users) {\n u.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 (options) {\n if(options === undefined){\n throw new Error(\"Options must not be undefined!\");\n }\n super({\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 (opts) {\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.os.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 = this.getState(op.id[0]);\n if (op.id[1] === state.clock){\n state.clock++;\n yield* this.setState(state);\n this.store.operationAdded(op);\n return true;\n } else {\n return false;\n }\n }\n}\n\ntype Listener = {\n f : GeneratorFunction, // is called when all operations are available\n missing : number // number of operations that are missing\n}\n\ntype Id = [string, number];\n\nclass AbstractOperationStore { //eslint-disable-line no-unused-vars\n constructor (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 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}\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\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 create: function*( op: Op,\n content: any,\n left: Insert,\n right: Insert,\n parent: List) : Insert {\n op.left = left ? left.id : null;\n op.origin = op.left;\n op.right = right ? right.id : null;\n op.parent = parent.id;\n op.struct = \"Insert\";\n yield* Struct.Operation.create.call(this, op);\n\n if (left != null) {\n left.right = op.id;\n yield* this.setOperation(left);\n }\n if (right != null) {\n right.left = op.id;\n yield* this.setOperation(right);\n }\n return op;\n },\n requiredOps: function(op, ids){\n 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 // reconnect..\n var left = this.getOperation(op.left);\n var right = this.getOperation(op.right);\n left.right = op.id;\n right.left = op.id;\n op.left = left;\n op.right = right;\n yield* this.setOperation(left);\n yield* this.setOperation(right);\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, 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 o = yield* Struct.Insert.create.call(this, {}, content, o, or, op);\n }\n }\n },\n Map: {\n create: function*( op : Op){\n op.start = null;\n op.end = null;\n op.struct = \"Map\";\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 o = yield* Struct.Insert.create.call(this, {}, content, o, or, op);\n }\n }\n }\n};\n","\nclass WebRTC extends AbstractConnector {\n constructor (options) {\n if(options === undefined){\n throw new Error(\"Options must not be undefined!\");\n }\n super({\n role: \"slave\"\n });\n\n var room = options.room;\n\n // connect per default to our server\n if(options.url == null){\n options.url = \"https://yatta.ninja:8888\";\n }\n\n var swr = new SimpleWebRTC(options); //eslint-disable-line no-undef\n this.swr = swr;\n var self = this;\n\n swr.once(\"connectionReady\", function(userId){\n // SimpleWebRTC (swr) is initialized\n swr.joinRoom(room);\n\n swr.once(\"joinedRoom\", function(){\n self.setUserId(userId);\n var i;\n // notify the connector class about all the users that already\n // joined the session\n for(i in self.swr.webrtc.peers){\n self.userJoined(self.swr.webrtc.peers[i].id, \"master\");\n }\n swr.on(\"channelMessage\", function(peer, room_, message){\n // The client received a message\n // Check if the connector is already initialized,\n // only then forward the message to the connector class\n if(message.type != null ){\n self.receiveMessage(peer.id, message.payload);\n }\n });\n });\n\n swr.on(\"createdPeer\", function(peer){\n // a new peer/client joined the session.\n // Notify the connector class, if the connector\n // is already initialized\n self.userJoined(peer.id, \"master\");\n });\n\n swr.on(\"peerStreamRemoved\", function(peer){\n // a client left the session.\n // Notify the connector class, if the connector\n // is already initialized\n self.userLeft(peer.id);\n });\n });\n }\n send (uid, message) {\n var self = this;\n // we have to make sure that the message is sent under all circumstances\n var send = function(){\n // check if the clients still exists\n var peer = self.swr.webrtc.getPeers(uid)[0];\n var success;\n if(peer){\n // success is true, if the message is successfully sent\n success = peer.sendDirectly(\"simplewebrtc\", \"yjs\", message);\n }\n if(!success){\n // resend the message if it didn't work\n setTimeout(send, 500);\n }\n };\n // try to send the message\n send();\n }\n broadcast (message) {\n this.swr.sendDirectlyToAll(\"simplewebrtc\", \"yjs\", message);\n }\n}\n\nY.WebRTC = WebRTC;\n","\ntype State = {\n user: string,\n clock: number\n};\n\ntype StateVector = Array;\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\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, 3);\n var transactionQueue = store.transactionQueue;\n\n var transaction = null;\n var cont = true;\n while (cont) {\n var request = yield transactionQueue;\n transaction = new Transaction(store);\n\n yield* request.call(transaction, 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 db.createObjectStore(\"OperationStore\", {keyPath: \"id\"});\n db.createObjectStore(\"StateVector\", {keyPath: \"user\"});\n };\n } else {\n tGen.throw(\"You can not yield this type!\");\n }\n }\n handleTransactions(tGen.next());\n\n }\n requestTransaction (makeGen : Function) {\n this.transactionQueue.queue.push(makeGen);\n if (this.transactionQueue.onRequest != null) {\n this.transactionQueue.onRequest();\n }\n }\n *removeDatabase () {\n this.db.close();\n yield indexedDB.deleteDatabase(this.namespace);\n }\n }\n return OperationStore;\n})();\n","\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.sv = 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.sv[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 namespace: string;\n ready: Promise;\n whenReadyListeners: Array;\n constructor (y) {\n super(y);\n }\n requestTransaction (makeGen : Function) {\n var t = new Transaction(this);\n var gen = makeGen.call(t);\n gen.next();\n if (gen.done !== true) {\n throw new Error(\"transaction is supposed to be done. Note: you may not yield with this transaction! (yield* is allowed though)\");\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 = 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* this.Struct.Map.get.call(transaction, model, arguments[0]);\n } else {\n return yield* this.Struct.Map.set.call(transaction, model, arguments[0], arguments[1]);\n }\n }\n }\n\n Y.Map = function* YMap(){\n var model = yield* this.Struct.map.create.call(this);\n return new Map(model);\n };\n Y.Map.Create = Map;\n})();\n"],"sourceRoot":"/source/"} \ No newline at end of file