yjs/y.js
2015-06-27 19:01:15 +02:00

2 lines
29 KiB
JavaScript

"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(;++r<e.length;)if(y.call(e,r))return a.value=e[r],a.done=!1,a;return a.value=g,a.done=!0,a};return n.next=n}}return{next:d}}function d(){return{value:g,done:!0}}var g,y=Object.prototype.hasOwnProperty,v="function"==typeof Symbol&&Symbol.iterator||"@@iterator",b="object"==typeof module,m=e.regeneratorRuntime;if(m)return void(b&&(module.exports=m));m=e.regeneratorRuntime=b?module.exports:{},m.wrap=t;var x="suspendedStart",k="suspendedYield",w="executing",R="completed",S={},O=i.prototype=n.prototype;a.prototype=O.constructor=i,i.constructor=a,a.displayName="GeneratorFunction",m.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return t?t===a||"GeneratorFunction"===(t.displayName||t.name):!1},m.mark=function(e){return e.__proto__=i,e.prototype=Object.create(O),e},m.awrap=function(e){return new o(e)},s(u.prototype),m.async=function(e,r,n,a){var i=new u(t(e,r,n,a));return m.isGeneratorFunction(r)?i:i.next().then(function(e){return e.done?e.value:i.next()})},s(O),O[v]=function(){return this},O.toString=function(){return"[object Generator]"},m.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},m.values=p,h.prototype={constructor:h,reset:function(){this.prev=0,this.next=0,this.sent=g,this.done=!1,this.delegate=null,this.tryEntries.forEach(f);for(var e,t=0;y.call(this,e="t"+t)||20>t;++t)this[e]=null},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){function t(t,n){return i.type="throw",i.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n],i=a.completion;if("root"===a.tryLoc)return t("end");if(a.tryLoc<=this.prev){var s=y.call(a,"catchLoc"),o=y.call(a,"finallyLoc");if(s&&o){if(this.prev<a.catchLoc)return t(a.catchLoc,!0);if(this.prev<a.finallyLoc)return t(a.finallyLoc)}else if(s){if(this.prev<a.catchLoc)return t(a.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return t(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&y.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var a=n;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?this.next=a.finallyLoc:this.complete(i),S},complete:function(e,t){if("throw"===e.type)throw e.arg;"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=e.arg,this.next="end"):"normal"===e.type&&t&&(this.next=t)},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),f(r),S}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;f(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator: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]<e.id[0]&&(e.left=a,t=r+1),n.next=18;break;case 13:if(!((i=Struct.Insert.getDistanceToOrigin(a))<r)){n.next=17;break}i>=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}();
//# sourceMappingURL=y.js.map