yjs/y.js
2016-02-24 12:00:45 +01:00

4 lines
65 KiB
JavaScript

!function e(t,r,n){function i(s,o){if(!r[s]){if(!t[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(a)return a(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return i(r?r:e)},l,l.exports,e,t,r,n)}return r[s].exports}for(var a="function"==typeof require&&require,s=0;s<n.length;s++)i(n[s]);return i}({1:[function(e,t,r){function n(){l=!1,o.length?c=o.concat(c):f=-1,c.length&&i()}function i(){if(!l){var e=setTimeout(n);l=!0;for(var t=c.length;t;){for(o=c,c=[];++f<t;)o&&o[f].run();f=-1,t=c.length}o=null,l=!1,clearTimeout(e)}}function a(e,t){this.fun=e,this.array=t}function s(){}var o,u=t.exports={},c=[],l=!1,f=-1;u.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];c.push(new a(e,t)),1!==c.length||l||setTimeout(i,0)},a.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=s,u.addListener=s,u.once=s,u.off=s,u.removeListener=s,u.removeAllListeners=s,u.emit=s,u.binding=function(e){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(e){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],2:[function(e,t,r){(function(e,r){"use strict";function n(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}!function(r){function i(e,t,r,n){var i=Object.create((t||s).prototype),a=new g(n||[]);return i._invoke=d(e,r,a),i}function a(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(n){return{type:"throw",arg:n}}}function s(){}function o(){}function u(){}function c(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function l(e){this.arg=e}function f(t){function r(e,n,i,s){var o=a(t[e],t,n);if("throw"!==o.type){var u=o.arg,c=u.value;return c instanceof l?Promise.resolve(c.arg).then(function(e){r("next",e,i,s)},function(e){r("throw",e,i,s)}):Promise.resolve(c).then(function(e){u.value=e,i(u)},s)}s(o.arg)}function i(e,t){function n(){return new Promise(function(n,i){r(e,t,n,i)})}return s=s?s.then(n,n):n()}"object"===("undefined"==typeof e?"undefined":n(e))&&e.domain&&(r=e.domain.bind(r));var s;this._invoke=i}function d(e,t,r){var n=R;return function(i,s){if(n===T)throw new Error("Generator is already running");if(n===I){if("throw"===i)throw s;return v()}for(;;){var o=r.delegate;if(o){if("return"===i||"throw"===i&&o.iterator[i]===b){r.delegate=null;var u=o.iterator["return"];if(u){var c=a(u,o.iterator,s);if("throw"===c.type){i="throw",s=c.arg;continue}}if("return"===i)continue}var c=a(o.iterator[i],o.iterator,s);if("throw"===c.type){r.delegate=null,i="throw",s=c.arg;continue}i="next",s=b;var l=c.arg;if(!l.done)return n=S,l;r[o.resultName]=l.value,r.next=o.nextLoc,r.delegate=null}if("next"===i)n===S?r.sent=s:r.sent=b;else if("throw"===i){if(n===R)throw n=I,s;r.dispatchException(s)&&(i="next",s=b)}else"return"===i&&r.abrupt("return",s);n=T;var c=a(e,t,r);if("normal"===c.type){n=r.done?I:S;var l={value:c.arg,done:r.done};if(c.arg!==B)return l;r.delegate&&"next"===i&&(s=b)}else"throw"===c.type&&(n=I,i="throw",s=c.arg)}}}function h(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function p(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function g(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(h,this),this.reset(!0)}function y(e){if(e){var t=e[w];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function i(){for(;++r<e.length;)if(m.call(e,r))return i.value=e[r],i.done=!1,i;return i.value=b,i.done=!0,i};return n.next=n}}return{next:v}}function v(){return{value:b,done:!0}}var b,m=Object.prototype.hasOwnProperty,k="function"==typeof Symbol?Symbol:{},w=k.iterator||"@@iterator",x=k.toStringTag||"@@toStringTag",O="object"===("undefined"==typeof t?"undefined":n(t)),Y=r.regeneratorRuntime;if(Y)return void(O&&(t.exports=Y));Y=r.regeneratorRuntime=O?t.exports:{},Y.wrap=i;var R="suspendedStart",S="suspendedYield",T="executing",I="completed",B={},E=u.prototype=s.prototype;o.prototype=E.constructor=u,u.constructor=o,u[x]=o.displayName="GeneratorFunction",Y.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return t?t===o||"GeneratorFunction"===(t.displayName||t.name):!1},Y.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,x in e||(e[x]="GeneratorFunction")),e.prototype=Object.create(E),e},Y.awrap=function(e){return new l(e)},c(f.prototype),Y.async=function(e,t,r,n){var a=new f(i(e,t,r,n));return Y.isGeneratorFunction(t)?a:a.next().then(function(e){return e.done?e.value:a.next()})},c(E),E[w]=function(){return this},E[x]="Generator",E.toString=function(){return"[object Generator]"},Y.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}},Y.values=y,g.prototype={constructor:g,reset:function(e){if(this.prev=0,this.next=0,this.sent=b,this.done=!1,this.delegate=null,this.tryEntries.forEach(p),!e)for(var t in this)"t"===t.charAt(0)&&m.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=b)},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){function t(t,n){return a.type="throw",a.arg=e,r.next=t,!!n}if(this.done)throw e;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n],a=i.completion;if("root"===i.tryLoc)return t("end");if(i.tryLoc<=this.prev){var s=m.call(i,"catchLoc"),o=m.call(i,"finallyLoc");if(s&&o){if(this.prev<i.catchLoc)return t(i.catchLoc,!0);if(this.prev<i.finallyLoc)return t(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return t(i.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return t(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&m.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var i=n;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?this.next=i.finallyLoc:this.complete(a),B},complete:function(e,t){if("throw"===e.type)throw e.arg;"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=e.arg,this.next="end"):"normal"===e.type&&t&&(this.next=t)},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),p(r),B}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;p(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:y(e),resultName:t,nextLoc:r},B}}}("object"===("undefined"==typeof r?"undefined":n(r))?r:"object"===("undefined"==typeof window?"undefined":n(window))?window:"object"===("undefined"==typeof self?"undefined":n(self))?self:void 0)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:1}],3:[function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();t.exports=function(e){var t=function(){function t(e,r){if(n(this,t),this.y=e,null==r&&(r={}),null==r.role||"master"===r.role)this.role="master";else{if("slave"!==r.role)throw new Error("Role must be either 'master' or 'slave'!");this.role="slave"}this.y.db.forwardAppliedOperations=r.forwardAppliedOperations||!1,this.role=r.role,this.connections={},this.isSynced=!1,this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null,this.syncingClients=[],this.forwardToSyncingClients=r.forwardToSyncingClients!==!1,this.debug=r.debug===!0,this.broadcastedHB=!1,this.syncStep2=Promise.resolve(),this.broadcastOpBuffer=[],this.protocolVersion=8}return i(t,[{key:"reconnect",value:function(){}},{key:"disconnect",value:function(){return this.connections={},this.isSynced=!1,this.currentSyncTarget=null,this.broadcastedHB=!1,this.syncingClients=[],this.whenSyncedListeners=[],this.y.db.stopGarbageCollector()}},{key:"setUserId",value:function(e){return null==this.userId?(this.userId=e,this.y.db.setUserId(e)):null}},{key:"onUserEvent",value:function(e){this.userEventListeners.push(e)}},{key:"userLeft",value:function(e){if(null!=this.connections[e]){delete this.connections[e],e===this.currentSyncTarget&&(this.currentSyncTarget=null,this.findNextSyncTarget()),this.syncingClients=this.syncingClients.filter(function(t){return t!==e});var t=!0,r=!1,n=void 0;try{for(var i,a=this.userEventListeners[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var s=i.value;s({action:"userLeft",user:e})}}catch(o){r=!0,n=o}finally{try{!t&&a["return"]&&a["return"]()}finally{if(r)throw n}}}}},{key:"userJoined",value: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};var r=!0,n=!1,i=void 0;try{for(var a,s=this.userEventListeners[Symbol.iterator]();!(r=(a=s.next()).done);r=!0){var o=a.value;o({action:"userJoined",user:e,role:t})}}catch(u){n=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(n)throw i}}null==this.currentSyncTarget&&this.findNextSyncTarget()}},{key:"whenSynced",value:function(e){this.isSynced?e():this.whenSyncedListeners.push(e)}},{key:"findNextSyncTarget",value:function(){if(null==this.currentSyncTarget&&!this.isSynced){var e=null;for(var t in this.connections)if(!this.connections[t].isSynced){e=t;break}if(null!=e){var r=this;this.currentSyncTarget=e,this.y.db.requestTransaction(regeneratorRuntime.mark(function l(){var t,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.delegateYield(this.getStateSet(),"t0",1);case 1:return t=i.t0,i.delegateYield(this.getDeleteSet(),"t1",3);case 3:n=i.t1,r.send(e,{type:"sync step 1",stateSet:t,deleteSet:n});case 5:case"end":return i.stop()}},l,this)}))}else{this.isSynced=!0;var n=!0,i=!1,a=void 0;try{for(var s,o=this.whenSyncedListeners[Symbol.iterator]();!(n=(s=o.next()).done);n=!0){var u=s.value;u()}}catch(c){i=!0,a=c}finally{try{!n&&o["return"]&&o["return"]()}finally{if(i)throw a}}this.whenSyncedListeners=[],this.y.db.requestTransaction(regeneratorRuntime.mark(function f(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.garbageCollectAfterSync(),"t0",1);case 1:case"end":return e.stop()}},f,this)}))}}}},{key:"send",value:function(e,t){this.debug&&console.log("send "+this.userId+" -> "+e+": "+t.type,t)}},{key:"broadcastOps",value:function(t){function r(){n.broadcastOpBuffer.length>0&&(n.broadcast({type:"update",ops:n.broadcastOpBuffer}),n.broadcastOpBuffer=[])}t=t.map(function(t){return e.Struct[t.struct].encode(t)});var n=this;0===this.broadcastOpBuffer.length?(this.broadcastOpBuffer=t,this.y.db.transactionInProgress?this.y.db.whenTransactionsFinished().then(r):setTimeout(r,0)):this.broadcastOpBuffer=this.broadcastOpBuffer.concat(t)}},{key:"receiveMessage",value:function(e,t){var r=this;if(e!==this.userId){if(this.debug&&console.log("receive "+e+" -> "+this.userId+": "+t.type,JSON.parse(JSON.stringify(t))),null!=t.protocolVersion&&t.protocolVersion!==this.protocolVersion)return console.error("You tried to sync with a yjs instance that has a different protocol version\n (You: "+this.protocolVersion+", Client: "+t.protocolVersion+").\n The sync was stopped. You need to upgrade your dependencies (especially Yjs & the Connector)!\n "),void this.send(e,{type:"sync stop",protocolVersion:this.protocolVersion});if("sync step 1"===t.type)!function(){var n=r,i=t;r.y.db.requestTransaction(regeneratorRuntime.mark(function a(){var t,r,s;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.delegateYield(this.getStateSet(),"t0",1);case 1:return t=a.t0,a.delegateYield(this.applyDeleteSet(i.deleteSet),"t1",3);case 3:return a.delegateYield(this.getDeleteSet(),"t2",4);case 4:return r=a.t2,a.delegateYield(this.getOperations(i.stateSet),"t3",6);case 6:s=a.t3,n.send(e,{type:"sync step 2",os:s,stateSet:t,deleteSet:r}),this.forwardToSyncingClients?(n.syncingClients.push(e),setTimeout(function(){n.syncingClients=n.syncingClients.filter(function(t){return t!==e}),n.send(e,{type:"sync done"})},5e3)):n.send(e,{type:"sync done"}),n._setSyncedWith(e);case 10:case"end":return a.stop()}},a,this)}))}();else if("sync step 2"===t.type){var n,i,a;!function(){var s=r;n=!r.broadcastedHB,r.broadcastedHB=!0,i=r.y.db,a={},a.promise=new Promise(function(e){a.resolve=e}),r.syncStep2=a.promise;var o=t;i.requestTransaction(regeneratorRuntime.mark(function u(){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.applyDeleteSet(o.deleteSet),"t0",1);case 1:this.store.apply(o.os),i.requestTransaction(regeneratorRuntime.mark(function r(){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.getOperations(o.stateSet),"t0",1);case 1:t=r.t0,t.length>0&&(n?s.broadcastOps(t):s.send(e,{type:"update",ops:t})),a.resolve();case 4:case"end":return r.stop()}},r,this)}));case 3:case"end":return t.stop()}},u,this)}))}()}else if("sync done"===t.type){var s=this;this.syncStep2.then(function(){s._setSyncedWith(e)})}else if("update"===t.type){if(this.forwardToSyncingClients){var o=!0,u=!1,c=void 0;try{for(var l,f=this.syncingClients[Symbol.iterator]();!(o=(l=f.next()).done);o=!0){var d=l.value;this.send(d,t)}}catch(h){u=!0,c=h}finally{try{!o&&f["return"]&&f["return"]()}finally{if(u)throw c}}}if(this.y.db.forwardAppliedOperations){var p=t.ops.filter(function(e){return"Delete"===e.struct});p.length>0&&this.broadcastOps(p)}this.y.db.apply(t.ops)}}}},{key:"_setSyncedWith",value:function(e){var t=this.connections[e];null!=t&&(t.isSynced=!0),e===this.currentSyncTarget&&(this.currentSyncTarget=null,this.findNextSyncTarget())}},{key:"parseMessageFromXml",value:function(e){function t(e){var n=!0,i=!1,a=void 0;try{for(var s,o=e.children[Symbol.iterator]();!(n=(s=o.next()).done);n=!0){var u=s.value;return"true"===u.getAttribute("isArray")?t(u):r(u)}}catch(c){i=!0,a=c}finally{try{!n&&o["return"]&&o["return"]()}finally{if(i)throw a}}}function r(e){var n={};for(var i in e.attrs){var a=e.attrs[i],s=parseInt(a,10);isNaN(s)||""+s!==a?n[i]=a:n[i]=s}for(var o in e.children){var u=o.name;"true"===o.getAttribute("isArray")?n[u]=t(o):n[u]=r(o)}return n}r(e)}},{key:"encodeMessageToXml",value:function(e,t){function r(e,t){for(var i in t){var a=t[i];null==i||(a.constructor===Object?r(e.c(i),a):a.constructor===Array?n(e.c(i),a):e.setAttribute(i,a))}}function n(e,t){e.setAttribute("isArray","true");var i=!0,a=!1,s=void 0;try{for(var o,u=t[Symbol.iterator]();!(i=(o=u.next()).done);i=!0){var c=o.value;c.constructor===Object?r(e.c("array-element"),c):n(e.c("array-element"),c)}}catch(l){a=!0,s=l}finally{try{!i&&u["return"]&&u["return"]()}finally{if(a)throw s}}}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)}}}]),t}();e.AbstractConnector=t}},{}],4:[function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(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&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var s=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),o=function u(e,t,r){null===e&&(e=Function.prototype);var n=Object.getOwnPropertyDescriptor(e,t);if(void 0===n){var i=Object.getPrototypeOf(e);return null===i?void 0:u(i,t,r)}if("value"in n)return n.value;var a=n.get;if(void 0!==a)return a.call(r)};t.exports=function(e){var t={users:{},buffers:{},removeUser:function(e){for(var t in this.users)this.users[t].userLeft(e);delete this.users[e],delete this.buffers[e]},addUser:function(e){this.users[e.userId]=e,this.buffers[e.userId]=[];for(var t in this.users)if(t!==e.userId){var r=this.users[t];r.userJoined(e.userId,"master"),e.userJoined(r.userId,"master")}},whenTransactionsFinished:function(){var e=[];for(var t in this.users)e.push(this.users[t].y.db.whenTransactionsFinished());return Promise.all(e)},flushOne:function(){var e=[];for(var r in t.buffers)t.buffers[r].length>0&&e.push(r);if(e.length>0){var n=getRandom(e),i=t.buffers[n].shift(),a=t.users[n];return a.receiveMessage(i[0],i[1]),a.y.db.whenTransactionsFinished()}return!1},flushAll:function(){return new Promise(function(e){function r(){var n=t.flushOne();if(n){for(;n;)n=t.flushOne();t.whenTransactionsFinished().then(r)}else setTimeout(function(){var n=t.flushOne();n?n.then(function(){t.whenTransactionsFinished().then(r)}):e()},10)}t.whenTransactionsFinished().then(r)})}};e.utils.globalRoom=t;var r=0,u=function(u){function c(e,a){if(n(this,c),void 0===a)throw new Error("Options must not be undefined!");a.role="master",a.forwardToSyncingClients=!1;var s=i(this,Object.getPrototypeOf(c).call(this,e,a));return s.setUserId(r++ +"").then(function(){t.addUser(s)}),s.globalRoom=t,s.syncingClientDuration=0,s}return a(c,u),s(c,[{key:"receiveMessage",value:function(e,t){o(Object.getPrototypeOf(c.prototype),"receiveMessage",this).call(this,e,JSON.parse(JSON.stringify(t)))}},{key:"send",value:function(e,r){var n=t.buffers[e];null!=n&&n.push(JSON.parse(JSON.stringify([this.userId,r])))}},{key:"broadcast",value:function(e){for(var r in t.buffers)t.buffers[r].push(JSON.parse(JSON.stringify([this.userId,e])))}},{key:"isDisconnected",value:function(){return null==t.users[this.userId]}},{key:"reconnect",value:function(){return this.isDisconnected()&&(t.addUser(this),o(Object.getPrototypeOf(c.prototype),"reconnect",this).call(this)),e.utils.globalRoom.flushAll()}},{key:"disconnect",value:function(){return this.isDisconnected()||(t.removeUser(this.userId),o(Object.getPrototypeOf(c.prototype),"disconnect",this).call(this)),this.y.db.whenTransactionsFinished()}},{key:"flush",value:function(){var e=this;return async(regeneratorRuntime.mark(function r(){var n;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:for(;t.buffers[e.userId].length>0;)n=t.buffers[e.userId].shift(),this.receiveMessage(n[0],n[1]);return r.next=3,e.whenTransactionsFinished();case 3:case"end":return r.stop()}},r,this)}))}}]),c}(e.AbstractConnector);e.Test=u}},{}],5:[function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();t.exports=function(e){var t=function(){function t(e,r){function i(){return a.whenTransactionsFinished().then(function(){return a.gc1.length>0||a.gc2.length>0?new Promise(function(e){a.requestTransaction(regeneratorRuntime.mark(function t(){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(null==a.y.connector||!a.y.connector.isSynced){t.next=10;break}r=0;case 2:if(!(r<a.gc2.length)){t.next=8;break}return n=a.gc2[r],t.delegateYield(this.garbageCollectOperation(n),"t0",5);case 5:r++,t.next=2;break;case 8:a.gc2=a.gc1,a.gc1=[];case 10:a.gcTimeout>0&&(a.gcInterval=setTimeout(i,a.gcTimeout)),e();case 12:case"end":return t.stop()}},t,this)}))}):(a.gcTimeout>0&&(a.gcInterval=setTimeout(i,a.gcTimeout)),Promise.resolve())})}n(this,t),this.y=e;var a=this;this.userId=null;var s;this.userIdPromise=new Promise(function(e){s=e}),this.userIdPromise.resolve=s,this.forwardAppliedOperations=!1,this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1,this.initializedTypes={},this.waitingTransactions=[],this.transactionInProgress=!1,this.transactionIsFlushed=!1,"undefined"!=typeof YConcurrency_TestingMode&&(this.executeOrder=[]),this.gc1=[],this.gc2=[],this.gcTimeout=r.gcTimeout||5e4,this.garbageCollect=i,this.gcTimeout>0&&i()}return i(t,[{key:"addToDebug",value:function(){if("undefined"!=typeof YConcurrency_TestingMode){var e=Array.prototype.map.call(arguments,function(e){return"string"==typeof e?e:JSON.stringify(e)}).join("").replace(/"/g,"'").replace(/,/g,", ").replace(/:/g,": ");this.executeOrder.push(e)}}},{key:"getDebugData",value:function(){console.log(this.executeOrder.join("\n"))}},{key:"stopGarbageCollector",value:function(){var e=this;return new Promise(function(t){e.requestTransaction(regeneratorRuntime.mark(function r(){var n,i,a;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:n=e.gc1.concat(e.gc2),e.gc1=[],e.gc2=[],i=0;case 4:if(!(i<n.length)){r.next=12;break}return r.delegateYield(this.getOperation(n[i]),"t0",6);case 6:return a=r.t0,delete a.gc,r.delegateYield(this.setOperation(a),"t1",9);case 9:i++,r.next=4;break;case 12:t();case 13:case"end":return r.stop()}},r,this)}))})}},{key:"addToGarbageCollector",value:function(e,t){return null==e.gc&&e.deleted===!0&&this.y.connector.isSynced&&null!=t&&t.deleted===!0?(e.gc=!0,this.gc1.push(e.id),!0):!1}},{key:"removeFromGarbageCollector",value:function(t){function r(r){return!e.utils.compareIds(r,t.id)}this.gc1=this.gc1.filter(r),this.gc2=this.gc2.filter(r),delete t.gc}},{key:"destroy",value:regeneratorRuntime.mark(function r(){var e,t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:clearInterval(this.gcInterval),this.gcInterval=null;for(e in this.initializedTypes)t=this.initializedTypes[e],null!=t._destroy?t._destroy():console.error("The type you included does not provide destroy functionality, it will remain in memory (updating your packages will help).");case 3:case"end":return r.stop()}},r,this)})},{key:"setUserId",value:function(e){if(!this.userIdPromise.inProgress){this.userIdPromise.inProgress=!0;var t=this;t.requestTransaction(regeneratorRuntime.mark(function r(){var n;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t.userId=e,r.delegateYield(this.getState(e),"t0",2);case 2:n=r.t0,t.opClock=n.clock,t.userIdPromise.resolve(e);case 5:case"end":return r.stop()}},r,this)}))}return this.userIdPromise}},{key:"whenUserIdSet",value:function(e){this.userIdPromise.then(e)}},{key:"getNextOpId",value:function(){if(null!=this._nextUserId)return this._nextUserId;if(null==this.userId)throw new Error("OperationStore not yet initialized!");return[this.userId,this.opClock++]}},{key:"apply",value:function(t){for(var r=0;r<t.length;r++){var n=t[r];if(null==n.id||n.id[0]!==this.y.connector.userId){var i=e.Struct[n.struct].requiredOps(n);this.whenOperationsExist(i,n)}}}},{key:"whenOperationsExist",value:function(e,t){if(e.length>0)for(var r={op:t,missing:e.length},n=0;n<e.length;n++){var i=e[n],a=JSON.stringify(i),s=this.listenersById[a];null==s&&(s=[],this.listenersById[a]=s),s.push(r)}else this.listenersByIdExecuteNow.push({op:t});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var o=this;this.requestTransaction(regeneratorRuntime.mark(function u(){var e,t,r,n,i,a,s,c,l,f;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:e=o.listenersByIdExecuteNow,o.listenersByIdExecuteNow=[],t=o.listenersById,o.listenersById={},o.listenersByIdRequestPending=!1,r=0;case 6:if(!(r<e.length)){u.next=12;break}return n=e[r].op,u.delegateYield(o.tryExecute.call(this,n),"t0",9);case 9:r++,u.next=6;break;case 12:u.t1=regeneratorRuntime.keys(t);case 13:if((u.t2=u.t1()).done){u.next=34;break}return i=u.t2.value,a=t[i],s=JSON.parse(i),u.delegateYield(this.getOperation(s),"t3",18);case 18:if(c=u.t3,null!=c){u.next=23;break}o.listenersById[i]=a,u.next=32;break;case 23:l=0;case 24:if(!(l<a.length)){u.next=32;break}if(f=a[l],n=f.op,0!==--f.missing){u.next=29;break}return u.delegateYield(o.tryExecute.call(this,n),"t4",29);case 29:l++,u.next=24;break;case 32:u.next=13;break;case 34:case"end":return u.stop()}},u,this)}))}}},{key:"tryExecute",value:regeneratorRuntime.mark(function a(t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(this.store.addToDebug("yield* this.store.tryExecute.call(this, ",JSON.stringify(t),")"),"Delete"!==t.struct){i.next=6;break}return i.delegateYield(e.Struct.Delete.execute.call(this,t),"t0",3);case 3:return i.delegateYield(this.store.operationAdded(this,t),"t1",4);case 4:i.next=15;break;case 6:return i.delegateYield(this.getOperation(t.id),"t2",7);case 7:if(r=i.t2,null!=r){i.next=15;break}return i.delegateYield(this.isGarbageCollected(t.id),"t3",10);case 10:if(n=i.t3){i.next=15;break}return i.delegateYield(e.Struct[t.struct].execute.call(this,t),"t4",13);case 13:return i.delegateYield(this.addOperation(t),"t5",14);case 14:return i.delegateYield(this.store.operationAdded(this,t),"t6",15);case 15:case"end":return i.stop()}},a,this)})},{key:"operationAdded",value:regeneratorRuntime.mark(function s(t,r){var n,i,a,o,u,c,l,f,d,h,p;return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:if("Delete"!==r.struct){s.next=9;break}return s.delegateYield(t.getOperation(r.target),"t0",2);case 2:if(n=s.t0,null==n){s.next=7;break}if(i=t.store.initializedTypes[JSON.stringify(n.parent)],null==i){s.next=7;break}return s.delegateYield(i._changed(t,{struct:"Delete",target:r.target}),"t1",7);case 7:s.next=32;break;case 9:return a=r,s.delegateYield(t.getState(r.id[0]),"t2",11);case 11:o=s.t2;case 12:if(null==a||a.id[1]!==o.clock||r.id[0]!==a.id[0]){s.next=19;break}return o.clock++,s.delegateYield(t.checkDeleteStoreForState(o),"t3",15);case 15:return s.delegateYield(t.os.findNext(a.id),"t4",16);case 16:a=s.t4,s.next=12;break;case 19:return s.delegateYield(t.setState(o),"t5",20);case 20:if(u=JSON.stringify(r.id),c=this.listenersById[u],delete this.listenersById[u],null!=c)for(l in c)f=c[l],0===--f.missing&&this.whenOperationsExist([],f.op);return d=this.initializedTypes[JSON.stringify(r.parent)],s.delegateYield(t.isDeleted(r.id),"t6",26);case 26:if(h=s.t6,r.deleted||!h){s.next=30;break}return p={struct:"Delete",target:r.id},s.delegateYield(e.Struct.Delete.execute.call(t,p),"t7",30);case 30:if(null==d){s.next=32;break}return s.delegateYield(d._changed(t,e.utils.copyObject(r)),"t8",32);case 32:case"end":return s.stop()}},s,this)})},{key:"whenTransactionsFinished",value:function(){if(this.transactionInProgress){if(null==this.transactionsFinished){var e,t=new Promise(function(t){e=t});return this.transactionsFinished={resolve:e,promise:t},t}return this.transactionsFinished.promise}return Promise.resolve()}},{key:"getNextRequest",value:function(){return 0===this.waitingTransactions.length?this.transactionIsFlushed?(this.transactionInProgress=!1,this.transactionIsFlushed=!1,null!=this.transactionsFinished&&(this.transactionsFinished.resolve(),this.transactionsFinished=null),null):(this.transactionIsFlushed=!0,regeneratorRuntime.mark(function e(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.flush(),"t0",1);case 1:case"end":return e.stop()}},e,this)})):(this.transactionIsFlushed=!1,this.waitingTransactions.shift())}},{key:"requestTransaction",value:function(e,t){if(this.waitingTransactions.push(e),!this.transactionInProgress)if(this.transactionInProgress=!0,t)this.transact(this.getNextRequest());else{var r=this;setTimeout(function(){r.transact(r.getNextRequest())},0)}}}]),t}();e.AbstractDatabase=t}},{}],6:[function(e,t,r){"use strict";t.exports=function(e){var t={Delete:{encode:function(e){return e},requiredOps:function(e){return[]},execute:regeneratorRuntime.mark(function r(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.deleteOperation(e.target),"t0",1);case 1:return t.abrupt("return",t.t0);case 2:case"end":return t.stop()}},r,this)})},Insert:{encode:function(e){var t={id:e.id,left:e.left,right:e.right,origin:e.origin,parent:e.parent,struct:e.struct};return null!=e.parentSub&&(t.parentSub=e.parentSub),null!=e.opContent?t.opContent=e.opContent:t.content=e.content,t},requiredOps:function(t){var r=[];return null!=t.left&&r.push(t.left),null!=t.right&&r.push(t.right),null==t.origin||e.utils.compareIds(t.left,t.origin)||r.push(t.origin),r.push(t.parent),null!=t.opContent&&r.push(t.opContent),r},getDistanceToOrigin:regeneratorRuntime.mark(function n(t){var r,i;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=t.left){n.next=4;break}return n.abrupt("return",0);case 4:return r=0,n.delegateYield(this.getOperation(t.left),"t0",6);case 6:i=n.t0;case 7:if(e.utils.compareIds(t.origin,i?i.id:null)){n.next=17;break}if(r++,null!=i.left){n.next=13;break}return n.abrupt("break",17);case 13:return n.delegateYield(this.getOperation(i.left),"t1",14);case 14:i=n.t1;case 15:n.next=7;break;case 17:return n.abrupt("return",r);case 18:case"end":return n.stop()}},n,this)}),execute:regeneratorRuntime.mark(function i(r){var n,a,s,o,u,c,l,f,d,h;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.delegateYield(t.Insert.getDistanceToOrigin.call(this,r),"t0",1);case 1:if(a=n=i.t0,null==r.origin){i.next=8;break}return i.delegateYield(this.getOperation(r.origin),"t1",4);case 4:return s=i.t1,null==s.originOf&&(s.originOf=[]),s.originOf.push(r.id),i.delegateYield(this.setOperation(s),"t2",8);case 8:if(null==r.left){i.next=20;break}return i.delegateYield(this.getOperation(r.left),"t3",10);case 10:if(o=i.t3,null!=o.right){i.next=15;break}i.t4=null,i.next=17;break;case 15:return i.delegateYield(this.getOperation(o.right),"t5",16);case 16:i.t4=i.t5;case 17:o=i.t4,i.next=31;break;case 20:return i.delegateYield(this.getOperation(r.parent),"t6",21);case 21:if(u=i.t6,l=r.parentSub?u.map[r.parentSub]:u.start,null!=l){i.next=27;break}i.t7=null,i.next=29;break;case 27:return i.delegateYield(this.getOperation(l),"t8",28);case 28:i.t7=i.t8;case 29:c=i.t7,o=c;case 31:if(null==o||e.utils.compareIds(o.id,r.right)){i.next=53;break}return i.delegateYield(t.Insert.getDistanceToOrigin.call(this,o),"t9",34);case 34:if(f=i.t9,f!==n){i.next=39;break}o.id[0]<r.id[0]&&(r.left=o.id,a=n+1),i.next=44;break;case 39:if(!(n>f)){i.next=43;break}f>=n-a&&(r.left=o.id,a=n+1),i.next=44;break;case 43:return i.abrupt("break",56);case 44:if(n++,null==o.right){i.next=50;break}return i.delegateYield(this.getOperation(o.right),"t10",47);case 47:o=i.t10,i.next=51;break;case 50:o=null;case 51:i.next=54;break;case 53:return i.abrupt("break",56);case 54:i.next=31;break;case 56:if(d=null,h=null,null!=u){i.next=61;break}return i.delegateYield(this.getOperation(r.parent),"t11",60);case 60:u=i.t11;case 61:if(null==r.left){
i.next=69;break}return i.delegateYield(this.getOperation(r.left),"t12",63);case 63:return d=i.t12,r.right=d.right,d.right=r.id,i.delegateYield(this.setOperation(d),"t13",67);case 67:i.next=70;break;case 69:r.right=r.parentSub?u.map[r.parentSub]||null:u.start;case 70:if(null==r.right){i.next=76;break}return i.delegateYield(this.getOperation(r.right),"t14",72);case 72:return h=i.t14,h.left=r.id,null!=h.gc&&this.store.removeFromGarbageCollector(h),i.delegateYield(this.setOperation(h),"t15",76);case 76:if(null==r.parentSub){i.next=86;break}if(null!=d){i.next=80;break}return u.map[r.parentSub]=r.id,i.delegateYield(this.setOperation(u),"t16",80);case 80:if(null==r.right){i.next=82;break}return i.delegateYield(this.deleteOperation(r.right,!0),"t17",82);case 82:if(null==r.left){i.next=84;break}return i.delegateYield(this.deleteOperation(r.id,!0),"t18",84);case 84:i.next=90;break;case 86:if(null!=h&&null!=d){i.next=90;break}return null==h&&(u.end=r.id),null==d&&(u.start=r.id),i.delegateYield(this.setOperation(u),"t19",90);case 90:case"end":return i.stop()}},i,this)})},List:{create:function(e){return{start:null,end:null,struct:"List",id:e}},encode:function(e){return{struct:"List",id:e.id,type:e.type}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:e.start=null,e.end=null;case 2:case"end":return t.stop()}},a,this)}),ref:regeneratorRuntime.mark(function s(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(null!=e.start){i.next=2;break}return i.abrupt("return",null);case 2:return r=null,i.delegateYield(this.getOperation(e.start),"t0",4);case 4:n=i.t0;case 5:if(n.deleted||(r=n,t--),!(t>=0&&null!=n.right)){i.next=12;break}return i.delegateYield(this.getOperation(n.right),"t1",9);case 9:n=i.t1,i.next=13;break;case 12:return i.abrupt("break",15);case 13:i.next=5;break;case 15:return i.abrupt("return",r);case 16:case"end":return i.stop()}},s,this)}),map:regeneratorRuntime.mark(function o(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:e=e.start,r=[];case 2:if(null==e){i.next=9;break}return i.delegateYield(this.getOperation(e),"t0",4);case 4:n=i.t0,n.deleted||r.push(t(n)),e=n.right,i.next=2;break;case 9:return i.abrupt("return",r);case 10:case"end":return i.stop()}},o,this)})},Map:{create:function(e){return{id:e,map:{},struct:"Map"}},encode:function(e){return{struct:"Map",type:e.type,id:e.id,map:{}}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function u(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},u,this)}),get:regeneratorRuntime.mark(function c(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.map[t],null==r){i.next=14;break}return i.delegateYield(this.getOperation(r),"t0",3);case 3:if(n=i.t0,null!=n&&!n.deleted){i.next=8;break}return i.abrupt("return",void 0);case 8:if(null!=n.opContent){i.next=12;break}return i.abrupt("return",n.content);case 12:return i.delegateYield(this.getType(n.opContent),"t1",13);case 13:return i.abrupt("return",i.t1);case 14:case"end":return i.stop()}},c,this)})}};e.Struct=t}},{}],7:[function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();t.exports=function(e){var t=function(){function t(){n(this,t)}return i(t,[{key:"getType",value:regeneratorRuntime.mark(function r(t){var n,i,a;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(n=JSON.stringify(t),i=this.store.initializedTypes[n],null!=i){r.next=9;break}return r.delegateYield(this.getOperation(t),"t0",4);case 4:if(a=r.t0,null==a){r.next=9;break}return r.delegateYield(e[a.type].initType.call(this,this.store,a),"t1",7);case 7:i=r.t1,this.store.initializedTypes[n]=i;case 9:return r.abrupt("return",i);case 10:case"end":return r.stop()}},r,this)})},{key:"createType",value:regeneratorRuntime.mark(function a(t){var r,n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return r=t.struct,n=this.store.getNextOpId(),i=e.Struct[r].create(n),i.type=t.name,a.delegateYield(this.applyCreatedOperations([i]),"t0",5);case 5:return a.delegateYield(this.getType(n),"t1",6);case 6:return a.abrupt("return",a.t1);case 7:case"end":return a.stop()}},a,this)})},{key:"applyCreatedOperations",value:regeneratorRuntime.mark(function s(t){var r,n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:r=[],n=0;case 2:if(!(n<t.length)){a.next=9;break}return i=t[n],a.delegateYield(this.store.tryExecute.call(this,i),"t0",5);case 5:(null==i.id||"_"!==i.id[0])&&r.push(e.Struct[i.struct].encode(i));case 6:n++,a.next=2;break;case 9:!this.store.y.connector.isDisconnected()&&r.length>0&&this.store.y.connector.broadcastOps(r);case 10:case"end":return a.stop()}},s,this)})},{key:"deleteList",value:regeneratorRuntime.mark(function o(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!this.store.y.connector.isSynced){t.next=12;break}case 1:if(null==e||!this.store.y.connector.isSynced){t.next=10;break}return t.delegateYield(this.getOperation(e),"t0",3);case 3:return e=t.t0,e.gc=!0,t.delegateYield(this.setOperation(e),"t1",6);case 6:this.store.gc1.push(e.id),e=e.right,t.next=1;break;case 10:t.next=12;break;case 12:case"end":return t.stop()}},o,this)})},{key:"deleteOperation",value:regeneratorRuntime.mark(function u(e,t){var r,n,i,a,s;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.getOperation(e),"t0",1);case 1:if(r=t.t0,n=!1,null!=r&&r.deleted){t.next=5;break}return t.delegateYield(this.markDeleted(e,1),"t1",5);case 5:if(null==r||null!=r.gc){t.next=40;break}if(r.deleted){t.next=23;break}if(n=!0,r.deleted=!0,null==r.start){t.next=12;break}return t.delegateYield(this.deleteList(r.start),"t2",11);case 11:return t.delegateYield(this.deleteList(r.id),"t3",12);case 12:if(null==r.map){t.next=20;break}t.t4=regeneratorRuntime.keys(r.map);case 14:if((t.t5=t.t4()).done){t.next=19;break}return i=t.t5.value,t.delegateYield(this.deleteList(r.map[i]),"t6",17);case 17:t.next=14;break;case 19:return t.delegateYield(this.deleteList(r.id),"t7",20);case 20:if(null==r.opContent){t.next=23;break}return t.delegateYield(this.deleteOperation(r.opContent),"t8",22);case 22:r.opContent=null;case 23:if(null==r.left){t.next=28;break}return t.delegateYield(this.getOperation(r.left),"t9",25);case 25:a=t.t9,t.next=29;break;case 28:a=null;case 29:return this.store.addToGarbageCollector(r,a),t.delegateYield(this.setOperation(r),"t10",31);case 31:if(null==r.right){t.next=36;break}return t.delegateYield(this.getOperation(r.right),"t11",33);case 33:s=t.t11,t.next=37;break;case 36:s=null;case 37:if(null==s||!this.store.addToGarbageCollector(s,r)){t.next=39;break}return t.delegateYield(this.setOperation(s),"t12",39);case 39:return t.abrupt("return",n);case 40:case"end":return t.stop()}},u,this)})},{key:"markGarbageCollected",value:regeneratorRuntime.mark(function c(t,r){var n,i,a,s;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.delegateYield(this.markDeleted(t,r),"t0",1);case 1:if(n=o.t0,!(n.id[1]<t[1])||n.gc){o.next=8;break}return i=n.len-(t[1]-n.id[1]),n.len-=i,o.delegateYield(this.ds.put(n),"t1",6);case 6:return n={id:t,len:i,gc:!1},o.delegateYield(this.ds.put(n),"t2",8);case 8:return o.delegateYield(this.ds.findPrev(t),"t3",9);case 9:return a=o.t3,o.delegateYield(this.ds.findNext(t),"t4",11);case 11:if(s=o.t4,!(t[1]<n.id[1]+n.len-r)||n.gc){o.next=15;break}return o.delegateYield(this.ds.put({id:[t[0],t[1]+1],len:n.len-1,gc:!1}),"t5",14);case 14:n.len=1;case 15:if(n.gc=!0,null==a||!a.gc||!e.utils.compareIds([a.id[0],a.id[1]+a.len],n.id)){o.next=20;break}return a.len+=n.len,o.delegateYield(this.ds["delete"](n.id),"t6",19);case 19:n=a;case 20:if(null==s||!s.gc||!e.utils.compareIds([n.id[0],n.id[1]+n.len],s.id)){o.next=23;break}return n.len+=s.len,o.delegateYield(this.ds["delete"](s.id),"t7",23);case 23:return o.delegateYield(this.ds.put(n),"t8",24);case 24:case"end":return o.stop()}},c,this)})},{key:"markDeleted",value:regeneratorRuntime.mark(function l(e,t){var r,n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return null==t&&(t=1),a.delegateYield(this.ds.findWithUpperBound(e),"t0",2);case 2:if(r=a.t0,null==r||r.id[0]!==e[0]){a.next=27;break}if(!(r.id[1]<=e[1]&&e[1]<=r.id[1]+r.len)){a.next=23;break}if(n=e[1]+t-(r.id[1]+r.len),!(n>0)){a.next=20;break}if(r.gc){a.next=11;break}r.len+=n,a.next=18;break;case 11:if(n=r.id[1]+r.len-e[1],!(t>n)){a.next=17;break}return r={id:[e[0],e[1]+n],len:t-n,gc:!1},a.delegateYield(this.ds.put(r),"t1",15);case 15:a.next=18;break;case 17:throw new Error("Cannot happen! (it dit though.. :()");case 18:a.next=21;break;case 20:return a.abrupt("return",r);case 21:a.next=25;break;case 23:return r={id:e,len:t,gc:!1},a.delegateYield(this.ds.put(r),"t2",25);case 25:a.next=29;break;case 27:return r={id:e,len:t,gc:!1},a.delegateYield(this.ds.put(r),"t3",29);case 29:return a.delegateYield(this.ds.findNext(r.id),"t4",30);case 30:if(i=a.t4,!(null!=i&&r.id[0]===i.id[0]&&r.id[1]+r.len>=i.id[1])){a.next=45;break}if(n=r.id[1]+r.len-i.id[1],!i.gc){a.next=40;break}if(!(n>=0)){a.next=38;break}if(r.len-=n,!(n>i.len)){a.next=38;break}throw new Error("This case is not handled (on purpose!)");case 38:a.next=45;break;case 40:if(!(n>=0)){a.next=45;break}if(!(n>i.len)){a.next=43;break}throw new Error("This case is not handled (on purpose!)");case 43:return r.len+=i.len-n,a.delegateYield(this.ds["delete"](i.id),"t5",45);case 45:return a.delegateYield(this.ds.put(r),"t6",46);case 46:return a.abrupt("return",r);case 47:case"end":return a.stop()}},l,this)})},{key:"garbageCollectAfterSync",value:regeneratorRuntime.mark(function f(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.os.iterate(this,null,null,regeneratorRuntime.mark(function t(e){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.deleted||null==e.left){t.next=4;break}return t.delegateYield(this.getOperation(e.left),"t0",2);case 2:r=t.t0,this.store.addToGarbageCollector(e,r);case 4:case"end":return t.stop()}},t,this)})),"t0",1);case 1:case"end":return e.stop()}},f,this)})},{key:"garbageCollectOperation",value:regeneratorRuntime.mark(function d(t){var r,n,i,a,s,o,u,c,l,f;return regeneratorRuntime.wrap(function(d){for(;;)switch(d.prev=d.next){case 0:return this.store.addToDebug("yield* this.garbageCollectOperation(",t,")"),d.delegateYield(this.getOperation(t),"t0",2);case 2:return r=d.t0,d.delegateYield(this.markGarbageCollected(t,1),"t1",4);case 4:if(null==r){d.next=54;break}if(null==r.left){d.next=10;break}return d.delegateYield(this.getOperation(r.left),"t2",7);case 7:return n=d.t2,n.right=r.right,d.delegateYield(this.setOperation(n),"t3",10);case 10:if(null==r.right){d.next=46;break}return d.delegateYield(this.getOperation(r.right),"t4",12);case 12:if(i=d.t4,i.left=r.left,!(null!=r.originOf&&r.originOf.length>0)){d.next=40;break}a=r.left,s=null;case 17:if(null==a){d.next=25;break}return d.delegateYield(this.getOperation(a),"t5",19);case 19:if(s=d.t5,!s.deleted){d.next=22;break}return d.abrupt("break",25);case 22:a=s.left,d.next=17;break;case 25:d.t6=regeneratorRuntime.keys(r.originOf);case 26:if((d.t7=d.t6()).done){d.next=35;break}return o=d.t7.value,d.delegateYield(this.getOperation(r.originOf[o]),"t8",29);case 29:if(u=d.t8,null==u){d.next=33;break}return u.origin=a,d.delegateYield(this.setOperation(u),"t9",33);case 33:d.next=26;break;case 35:if(null==a){d.next=38;break}return null==s.originOf?s.originOf=r.originOf:s.originOf=r.originOf.concat(s.originOf),d.delegateYield(this.setOperation(s),"t10",38);case 38:d.next=41;break;case 40:return d.delegateYield(this.setOperation(i),"t11",41);case 41:if(null==r.origin){d.next=46;break}return d.delegateYield(this.getOperation(r.origin),"t12",43);case 43:return c=d.t12,c.originOf=c.originOf.filter(function(r){return!e.utils.compareIds(t,r)}),d.delegateYield(this.setOperation(c),"t13",46);case 46:if(null==r.parent){d.next=53;break}return d.delegateYield(this.getOperation(r.parent),"t14",48);case 48:if(l=d.t14,f=!1,null!=r.parentSub?e.utils.compareIds(l.map[r.parentSub],r.id)&&(f=!0,l.map[r.parentSub]=r.right):(e.utils.compareIds(l.start,r.id)&&(f=!0,l.start=r.right),e.utils.compareIds(l.end,r.id)&&(f=!0,l.end=r.left)),!f){d.next=53;break}return d.delegateYield(this.setOperation(l),"t15",53);case 53:return d.delegateYield(this.removeOperation(r.id),"t16",54);case 54:case"end":return d.stop()}},d,this)})},{key:"checkDeleteStoreForState",value:regeneratorRuntime.mark(function h(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.ds.findWithUpperBound([e.user,e.clock]),"t0",1);case 1:t=r.t0,null!=t&&t.id[0]===e.user&&t.gc&&(e.clock=Math.max(e.clock,t.id[1]+t.len));case 3:case"end":return r.stop()}},h,this)})},{key:"applyDeleteSet",value:regeneratorRuntime.mark(function p(e){var t,r,n,i,a,s,o,u,c,l,f,d,h;return regeneratorRuntime.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:r=function(e,r,n,i){t.push([e,r,n,i])},t=[],p.t0=regeneratorRuntime.keys(e);case 3:if((p.t1=p.t0()).done){p.next=12;break}return n=p.t1.value,i=e[n],a=0,s=i[a],p.delegateYield(this.ds.iterate(this,[n,0],[n,Number.MAX_VALUE],regeneratorRuntime.mark(function g(e){var t;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(null==s){o.next=10;break}if(t=0,!(e.id[1]+e.len<=s[0])){o.next=6;break}return o.abrupt("break",10);case 6:s[0]<e.id[1]?(t=Math.min(e.id[1]-s[0],s[1]),r(n,s[0],t,s[2])):(t=e.id[1]+e.len-s[0],s[2]&&!e.gc&&r(n,s[0],Math.min(t,s[1]),s[2]));case 7:s[1]<=t?s=i[++a]:(s[0]=s[0]+t,s[1]=s[1]-t),o.next=0;break;case 10:case"end":return o.stop()}},g,this)})),"t2",9);case 9:for(;a<i.length;a++)s=i[a],r(n,s[0],s[1],s[2]);p.next=3;break;case 12:o=0;case 13:if(!(o<t.length)){p.next=46;break}return u=t[o],p.delegateYield(this.getState(u[0]),"t3",16);case 16:if(c=p.t3,!(u[1]<c.clock)){p.next=32;break}l=u[1];case 19:if(!(l<u[1]+u[2])){p.next=30;break}return f=[u[0],l],p.delegateYield(this.deleteOperation(f),"t4",22);case 22:if(d=p.t4,!d){p.next=25;break}return p.delegateYield(this.store.operationAdded(this,{struct:"Delete",target:f}),"t5",25);case 25:if(!u[3]){p.next=27;break}return p.delegateYield(this.garbageCollectOperation(f),"t6",27);case 27:l++,p.next=19;break;case 30:p.next=37;break;case 32:if(!u[3]){p.next=36;break}return p.delegateYield(this.markGarbageCollected([u[0],u[1]],u[2]),"t7",34);case 34:p.next=37;break;case 36:return p.delegateYield(this.markDeleted([u[0],u[1]],u[2]),"t8",37);case 37:if(!u[3]){p.next=42;break}if(!(c.clock>=u[1]&&c.clock<u[1]+u[2])){p.next=42;break}return c.clock=u[1]+u[2],p.delegateYield(this.checkDeleteStoreForState(c),"t9",41);case 41:return p.delegateYield(this.setState(c),"t10",42);case 42:if(this.store.forwardAppliedOperations){for(h=[],l=u[1];l<u[1]+u[2];l++)h.push({struct:"Delete",target:[s[0],l]});this.store.y.connector.broadcastOps(h)}case 43:o++,p.next=13;break;case 46:case"end":return p.stop()}},p,this)})},{key:"isGarbageCollected",value:regeneratorRuntime.mark(function g(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.ds.findWithUpperBound(e),"t0",1);case 1:return t=r.t0,r.abrupt("return",null!=t&&t.id[0]===e[0]&&e[1]<t.id[1]+t.len&&t.gc);case 3:case"end":return r.stop()}},g,this)})},{key:"getDeleteSet",value:regeneratorRuntime.mark(function y(){var e;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.delegateYield(this.ds.iterate(this,null,null,regeneratorRuntime.mark(function r(t){var n,i,a,s,o;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:n=t.id[0],i=t.id[1],a=t.len,s=t.gc,o=e[n],void 0===o&&(o=[],e[n]=o),o.push([i,a,s]);case 7:case"end":return r.stop()}},r,this)})),"t0",2);case 2:return t.abrupt("return",e);case 3:case"end":return t.stop()}},y,this)})},{key:"isDeleted",value:regeneratorRuntime.mark(function v(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.ds.findWithUpperBound(e),"t0",1);case 1:return t=r.t0,r.abrupt("return",null!=t&&t.id[0]===e[0]&&e[1]<t.id[1]+t.len);case 3:case"end":return r.stop()}},v,this)})},{key:"setOperation",value:regeneratorRuntime.mark(function b(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.os.put(e),"t0",1);case 1:return t.abrupt("return",e);case 2:case"end":return t.stop()}},b,this)})},{key:"addOperation",value:regeneratorRuntime.mark(function m(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.os.put(e),"t0",1);case 1:!this.store.y.connector.isDisconnected()&&this.store.forwardAppliedOperations&&"_"!==e.id[0]&&this.store.y.connector.broadcastOps([e]);case 2:case"end":return t.stop()}},m,this)})},{key:"getOperation",value:regeneratorRuntime.mark(function k(t){var r,n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.delegateYield(this.os.find(t),"t0",1);case 1:if(r=a.t0,null==r&&"_"===t[0]){a.next=6;break}return a.abrupt("return",r);case 6:if(null!=this.store._nextUserId){a.next=13;break}return n=t[1].split("_")[0],i=e.Struct[n].create(t),a.delegateYield(this.setOperation(i),"t1",10);case 10:return a.abrupt("return",i);case 13:return a.abrupt("return",null);case 14:case"end":return a.stop()}},k,this)})},{key:"removeOperation",value:regeneratorRuntime.mark(function w(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.os["delete"](e),"t0",1);case 1:case"end":return t.stop()}},w,this)})},{key:"setState",value:regeneratorRuntime.mark(function x(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t={id:[e.user],clock:e.clock},r.delegateYield(this.ss.put(t),"t0",2);case 2:case"end":return r.stop()}},x,this)})},{key:"getState",value:regeneratorRuntime.mark(function O(e){var t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(this.ss.find([e]),"t0",1);case 1:return t=n.t0,r=null==t?null:t.clock,null==r&&(r=0),n.abrupt("return",{user:e,clock:r});case 5:case"end":return n.stop()}},O,this)})},{key:"getStateVector",value:regeneratorRuntime.mark(function Y(){var e;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=[],t.delegateYield(this.ss.iterate(this,null,null,regeneratorRuntime.mark(function r(t){return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:e.push({user:t.id[0],clock:t.clock});case 1:case"end":return r.stop()}},r,this)})),"t0",2);case 2:return t.abrupt("return",e);case 3:case"end":return t.stop()}},Y,this)})},{key:"getStateSet",value:regeneratorRuntime.mark(function R(){var e;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.delegateYield(this.ss.iterate(this,null,null,regeneratorRuntime.mark(function r(t){return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:e[t.id[0]]=t.clock;case 1:case"end":return r.stop()}},r,this)})),"t0",2);case 2:return t.abrupt("return",e);case 3:case"end":return t.stop()}},R,this)})},{key:"getOperations",value:regeneratorRuntime.mark(function S(t){var r,n,i,a,s,o,u,c,l,f;return regeneratorRuntime.wrap(function(d){for(;;)switch(d.prev=d.next){case 0:return null==t&&(t={}),r=[],d.delegateYield(this.getStateVector(),"t0",3);case 3:n=d.t0,i=!0,a=!1,s=void 0,d.prev=7,o=n[Symbol.iterator]();case 9:if(i=(u=o.next()).done){d.next=19;break}if(c=u.value,l=c.user,"_"!==l){d.next=14;break}return d.abrupt("continue",16);case 14:return f=t[l]||0,d.delegateYield(this.os.iterate(this,[l,f],[l,Number.MAX_VALUE],regeneratorRuntime.mark(function h(n){var i,a,s,o;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:if(n=e.Struct[n.struct].encode(n),"Insert"===n.struct){u.next=5;break}r.push(n),u.next=27;break;case 5:if(!(null==n.right||n.right[1]<(t[n.right[0]]||0))){u.next=27;break}i=n,a=[n],s=n.right;case 9:if(null!=i.left){u.next=15;break}return n.left=null,r.push(n),e.utils.compareIds(i.id,n.id)||(i=e.Struct[n.struct].encode(i),i.right=a[a.length-1].id,r.push(i)),u.abrupt("break",27);case 15:return u.delegateYield(this.getOperation(i.left),"t0",16);case 16:for(i=u.t0;a.length>0&&e.utils.compareIds(a[a.length-1].origin,i.id);)a.pop();if(!(i.id[1]<(t[i.id[0]]||0))){u.next=24;break}return n.left=i.id,r.push(n),u.abrupt("break",27);case 24:e.utils.compareIds(i.id,n.origin)?(n.left=n.origin,r.push(n),n=e.Struct[n.struct].encode(i),n.right=s,a.length>0&&console.log("This should not happen .. :( please report this"),a=[n]):(o=e.Struct[n.struct].encode(i),o.right=a[a.length-1].id,o.left=o.origin,r.push(o),a.push(i));case 25:u.next=9;break;case 27:case"end":return u.stop()}},h,this)})),"t1",16);case 16:i=!0,d.next=9;break;case 19:d.next=25;break;case 21:d.prev=21,d.t2=d["catch"](7),a=!0,s=d.t2;case 25:d.prev=25,d.prev=26,!i&&o["return"]&&o["return"]();case 28:if(d.prev=28,!a){d.next=31;break}throw s;case 31:return d.finish(28);case 32:return d.finish(25);case 33:return d.abrupt("return",r.reverse());case 34:case"end":return d.stop()}},S,this,[[7,21,25,33],[26,,28,32]])})},{key:"flush",value:regeneratorRuntime.mark(function T(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.os.flush(),"t0",1);case 1:return e.delegateYield(this.ss.flush(),"t1",2);case 2:return e.delegateYield(this.ds.flush(),"t2",3);case 3:case"end":return e.stop()}},T,this)})}]),t}();e.Transaction=t}},{}],8:[function(e,t,r){"use strict";function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(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&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function c(e,t,r){null===e&&(e=Function.prototype);var n=Object.getOwnPropertyDescriptor(e,t);if(void 0===n){var i=Object.getPrototypeOf(e);return null===i?void 0:c(i,t,r)}if("value"in n)return n.value;var a=n.get;if(void 0!==a)return a.call(r)},u=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();t.exports=function(e){function t(e){var t={};for(var r in e)t[r]=e[r];return t}function r(e,t){return e[0]<t[0]||e[0]===t[0]&&(e[1]<t[1]||a(e[1])<a(t[1]))}function c(e,t){return null==e||null==t?null==e&&null==t?!0:!1:e[0]===t[0]&&e[1]===t[1]?!0:!1}function l(e){for(var t=new Array(e),r=0;r<t.length;r++)t[r]={id:[null,null]};return t}function f(e){var t=function(e){function t(){s(this,t);var e=n(this,Object.getPrototypeOf(t).apply(this,arguments));return e.writeBuffer=l(5),e.readBuffer=l(10),e}return i(t,e),u(t,[{key:"find",value:regeneratorRuntime.mark(function r(e){var n,i,a;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:n=this.readBuffer.length-1;case 1:if(!(n>=0)){r.next=10;break}if(i=this.readBuffer[n],i.id[1]!==e[1]||i.id[0]!==e[0]){r.next=7;break}for(;n<this.readBuffer.length-1;n++)this.readBuffer[n]=this.readBuffer[n+1];return this.readBuffer[this.readBuffer.length-1]=i,r.abrupt("return",i);case 7:n--,r.next=1;break;case 10:n=this.writeBuffer.length-1;case 11:if(!(n>=0)){r.next=19;break}if(i=this.writeBuffer[n],i.id[1]!==e[1]||i.id[0]!==e[0]){r.next=16;break}return a=i,r.abrupt("break",19);case 16:n--,r.next=11;break;case 19:if(!(0>n)){r.next=22;break}return r.delegateYield(o(Object.getPrototypeOf(t.prototype),"find",this).call(this,e),"t0",21);case 21:a=r.t0;case 22:if(null!=a){for(n=0;n<this.readBuffer.length-1;n++)this.readBuffer[n]=this.readBuffer[n+1];this.readBuffer[this.readBuffer.length-1]=a}return r.abrupt("return",a);case 24:case"end":return r.stop()}},r,this)})},{key:"put",value:regeneratorRuntime.mark(function a(e){var r,n,i,s;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:r=e.id,n=this.writeBuffer.length-1;case 2:if(!(n>=0)){a.next=11;break}if(i=this.writeBuffer[n],i.id[1]!==r[1]||i.id[0]!==r[0]){a.next=8;break}for(;n<this.writeBuffer.length-1;n++)this.writeBuffer[n]=this.writeBuffer[n+1];return this.writeBuffer[this.writeBuffer.length-1]=e,a.abrupt("break",11);case 8:n--,a.next=2;break;case 11:if(!(0>n)){a.next=17;break}if(s=this.writeBuffer[0],null===s.id[0]){a.next=15;break}return a.delegateYield(o(Object.getPrototypeOf(t.prototype),"put",this).call(this,s),"t0",15);case 15:for(n=0;n<this.writeBuffer.length-1;n++)this.writeBuffer[n]=this.writeBuffer[n+1];this.writeBuffer[this.writeBuffer.length-1]=e;case 17:for(n=0;n<this.readBuffer.length-1;n++)i=this.readBuffer[n+1],i.id[1]===r[1]&&i.id[0]===r[0]?this.readBuffer[n]=e:this.readBuffer[n]=i;this.readBuffer[this.readBuffer.length-1]=e;case 19:case"end":return a.stop()}},a,this)})},{key:"delete",value:regeneratorRuntime.mark(function c(e){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:for(r=0;r<this.readBuffer.length;r++)n=this.readBuffer[r],n.id[1]===e[1]&&n.id[0]===e[0]&&(this.readBuffer[r]={id:[null,null]});return i.delegateYield(this.flush(),"t0",2);case 2:return i.delegateYield(o(Object.getPrototypeOf(t.prototype),"delete",this).call(this,e),"t1",3);case 3:case"end":return i.stop()}},c,this)})},{key:"findWithLowerBound",value:regeneratorRuntime.mark(function f(){var e=arguments;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.flush(),"t0",1);case 1:return r.delegateYield(o(Object.getPrototypeOf(t.prototype),"findWithLowerBound",this).apply(this,e),"t1",2);case 2:return r.abrupt("return",r.t1);case 3:case"end":return r.stop()}},f,this)})},{key:"findWithUpperBound",value:regeneratorRuntime.mark(function d(){var e=arguments;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.flush(),"t0",1);case 1:return r.delegateYield(o(Object.getPrototypeOf(t.prototype),"findWithUpperBound",this).apply(this,e),"t1",2);case 2:return r.abrupt("return",r.t1);case 3:case"end":return r.stop()}},d,this)})},{key:"findNext",value:regeneratorRuntime.mark(function h(){var e=arguments;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.flush(),"t0",1);case 1:return r.delegateYield(o(Object.getPrototypeOf(t.prototype),"findNext",this).apply(this,e),"t1",2);case 2:return r.abrupt("return",r.t1);case 3:case"end":return r.stop()}},h,this)})},{key:"findPrev",value:regeneratorRuntime.mark(function p(){var e=arguments;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.flush(),"t0",1);case 1:return r.delegateYield(o(Object.getPrototypeOf(t.prototype),"findPrev",this).apply(this,e),"t1",2);case 2:return r.abrupt("return",r.t1);case 3:case"end":return r.stop()}},p,this)})},{key:"iterate",value:regeneratorRuntime.mark(function g(){var e=arguments;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.flush(),"t0",1);case 1:return r.delegateYield(o(Object.getPrototypeOf(t.prototype),"iterate",this).apply(this,e),"t1",2);case 2:case"end":return r.stop()}},g,this)})},{key:"flush",value:regeneratorRuntime.mark(function y(){var e,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:e=0;case 1:if(!(e<this.writeBuffer.length)){n.next=9;break}if(r=this.writeBuffer[e],null===r.id[0]){n.next=6;break}return n.delegateYield(o(Object.getPrototypeOf(t.prototype),"put",this).call(this,r),"t0",5);case 5:this.writeBuffer[e]={id:[null,null]};case 6:e++,n.next=1;break;case 9:case"end":return n.stop()}},y,this)})}]),t}(e);return t}e.utils={};var d=function(){function t(e){s(this,t),this.waiting=[],this.awaiting=0,this.onevent=e,this.eventListeners=[]}return u(t,[{key:"destroy",value:function(){this.waiting=null,this.awaiting=null,this.onevent=null,this.eventListeners=null}},{key:"receivedOp",value:function(t){this.awaiting<=0?this.onevent([t]):this.waiting.push(e.utils.copyObject(t))}},{key:"awaitAndPrematurelyCall",value:function(e){this.awaiting++,this.onevent(e)}},{key:"addEventListener",value:function(e){this.eventListeners.push(e)}},{key:"removeEventListener",value:function(e){this.eventListeners=this.eventListeners.filter(function(t){return e!==t})}},{key:"removeAllEventListeners",value:function(){this.eventListeners=[]}},{key:"callEventListeners",value:function(e){for(var t=0;t<this.eventListeners.length;t++)try{this.eventListeners[t](e)}catch(r){console.log("User events must not throw Errors!")}}},{key:"awaitedInserts",value:function(t){for(var r=this.waiting.splice(this.waiting.length-t),n=0;n<r.length;n++){var i=r[n];if("Insert"!==i.struct)throw new Error("Expected Insert Operation!");for(var a=this.waiting.length-1;a>=0;a--){var s=this.waiting[a];"Insert"===s.struct&&(e.utils.compareIds(i.left,s.id)?(s.right=i.id,i.left=s.left):e.utils.compareIds(i.right,s.id)&&(s.left=i.id,i.right=s.right))}}this._tryCallEvents()}},{key:"awaitedDeletes",value:function(t,r){for(var n=this.waiting.splice(this.waiting.length-t),i=0;i<n.length;i++){var a=n[i];if("Delete"!==a.struct)throw new Error("Expected Delete Operation!");if(null!=r)for(var s=0;s<this.waiting.length;s++){var o=this.waiting[s];"Insert"===o.struct&&e.utils.compareIds(a.target,o.left)&&(o.left=r)}}this._tryCallEvents()}},{key:"_tryCallEvents",value:function(){if(this.awaiting--,this.awaiting<=0&&this.waiting.length>0){var e=this.waiting;this.waiting=[],this.onevent(e)}}}]),t}();e.utils.EventHandler=d;var h=function p(e){if(s(this,p),null==e.struct||null==e.initType||null==e["class"]||null==e.name)throw new Error("Custom type was not initialized correctly!");this.struct=e.struct,this.initType=e.initType,this["class"]=e["class"],this.name=e.name};e.utils.CustomType=h,e.utils.copyObject=t,e.utils.smaller=r,e.utils.compareIds=c,e.utils.createSmallLookupBuffer=f}},{}],9:[function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(t){for(var r="undefined"!=typeof regeneratorRuntime?".js":".es6",n=[],i=0;i<t.length;i++){var s="y-"+t[i].toLowerCase();if(null==a[t[i]])if(null==o[t[i]])if("undefined"!=typeof window&&"undefined"!==window.Y){var u;!function(){u=document.createElement("script"),u.src=a.sourceDir+"/"+s+"/"+s+r,document.head.appendChild(u);var e={};o[t[i]]=e,e.promise=new Promise(function(t){e.resolve=t}),n.push(e.promise)}()}else e(s)(a);else n.push(o[t[i]].promise)}return Promise.all(n)}function a(e){e.types=null!=e.types?e.types:[];var t=[e.db.name,e.connector.name].concat(e.types);for(var r in e.share)t.push(e.share[r]);return a.sourceDir=e.sourceDir,a.requestModules(t).then(function(){return new Promise(function(t,r){if(null==e)r("An options object is expected! ");else if(null==e.connector)r("You must specify a connector! (missing connector property)");else if(null==e.connector.name)r("You must specify connector name! (missing connector.name property)");else if(null==e.db)r("You must specify a database! (missing db property)");else if(null==e.connector.name)r("You must specify db name! (missing db.name property)");else if(null==e.share)r("You must specify a set of shared types!");else{
var n=new u(e);n.db.whenUserIdSet(function(){n.init(function(){t(n)})})}})})}var s=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();e("./Connector.js")(a),e("./Database.js")(a),e("./Transaction.js")(a),e("./Struct.js")(a),e("./Utils.js")(a),e("./Connectors/Test.js")(a);var o={};t.exports=a,a.requiringModules=o,a.extend=function(e,t){a[e]=t,null!=o[e]&&(o[e].resolve(),delete o[e])},a.requestModules=i;var u=function(){function e(t,r){n(this,e),this.options=t,this.db=new a[t.db.name](this,t.db),this.connector=new a[t.connector.name](this,t.connector)}return s(e,[{key:"init",value:function(e){var t=this.options,r={};this.share=r,this.db.requestTransaction(regeneratorRuntime.mark(function n(){var i,s,o,u;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:n.t0=regeneratorRuntime.keys(t.share);case 1:if((n.t1=n.t0()).done){n.next=14;break}return i=n.t1.value,s=t.share[i],o=["_",a[s].struct+"_"+i],n.delegateYield(this.getOperation(o),"t2",6);case 6:if(u=n.t2,u.type===s){n.next=10;break}return u.type=s,n.delegateYield(this.setOperation(u),"t3",10);case 10:return n.delegateYield(this.getType(o),"t4",11);case 11:r[i]=n.t4,n.next=1;break;case 14:this.store.whenTransactionsFinished().then(e);case 15:case"end":return n.stop()}},n,this)}))}},{key:"isConnected",value:function(){return this.connector.isSynced}},{key:"disconnect",value:function(){return this.connector.disconnect()}},{key:"reconnect",value:function(){return this.connector.reconnect()}},{key:"destroy",value:function(){null!=this.connector.destroy?this.connector.destroy():this.connector.disconnect();var e=this;this.db.requestTransaction(regeneratorRuntime.mark(function t(){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(e.db.destroy(),"t0",1);case 1:e.connector=null,e.db=null;case 3:case"end":return t.stop()}},t,this)}))}}]),e}();"undefined"!=typeof window&&(window.Y=a)},{"./Connector.js":3,"./Connectors/Test.js":4,"./Database.js":5,"./Struct.js":6,"./Transaction.js":7,"./Utils.js":8}]},{},[2,9]);
//# sourceMappingURL=y.js.map