/** * yjs - A framework for real-time p2p shared editing on any data * @version v13.0.0-13 * @license MIT */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Y=t()}(this,function(){"use strict";function e(e,t){return t={exports:{}},e(t,t.exports),t.exports}function t(e){var t=new D(e);t.readVarString();var r=t.readVarString(),i=[];return i.push("\n === "+r+" ===\n"),"update"===r?n(t,i):"sync step 1"===r?s(t,i):"sync step 2"===r?d(t,i):i.push("-- Unknown message type - probably an encoding issue!!!"),i.join("")}function r(e){var t=new D(e);return t.readVarString(),t.readVarString()}function n(e,t){for(var r=e.readUint32(),n=0;n0&&(r.y.db.forwardAppliedOperations&&r.broadcastOps(a),r.y.persistence&&r.y.persistence.saveOperations(a)),e.pos=n}r.y.db.applyOperations(e)}function a(e,t){e.y.db.requestTransaction(B.mark(function r(){var n,i;return B.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return n=new _,n.writeVarString(e.opts.room||""),n.writeVarString("sync step 1"),n.writeVarString(e.authInfo||""),n.writeVarUint(e.protocolVersion),i=e.preferUntransformed&&0===this.os.length,n.writeUint8(i?1:0),r.delegateYield(this.writeStateSet(n),"t0",8);case 8:e.send(t,n.createBuffer());case 9:case"end":return r.stop()}},r,this)}))}function s(e,t){var r=e.readVarString(),n=e.readVarUint(),i=1===e.readUint8();t.push('\n - auth: "'+r+'"\n - protocolVersion: '+n+"\n - preferUntransformed: "+i+"\n"),u(e,t)}function o(e,t,r,n,i){var s=e.readVarUint(),o=1===e.readUint8();return s!==r.protocolVersion&&(console.warn("You tried to sync with a yjs instance that has a different protocol version\n (You: "+s+", Client: "+s+").\n The sync was stopped. You need to upgrade your dependencies (especially Yjs & the Connector)!\n "),r.y.destroy()),r.y.db.whenTransactionsFinished().then(function(){return r.y.db.requestTransaction(B.mark(function i(){return B.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(t.writeVarString("sync step 2"),t.writeVarString(r.authInfo||""),!o){i.next=7;break}return t.writeUint8(1),i.delegateYield(this.writeOperationsUntransformed(t),"t0",5);case 5:i.next=9;break;case 7:return t.writeUint8(0),i.delegateYield(this.writeOperations(t,e),"t1",9);case 9:return i.delegateYield(this.writeDeleteSet(t),"t2",10);case 10:r.send(n.uid,t.createBuffer()),n.receivedSyncStep2=!0;case 12:case"end":return i.stop()}},i,this)})),r.y.db.whenTransactionsFinished().then(function(){"slave"===r.role&&a(r,i)})})}function u(e,t){t.push(" == SS: \n");for(var r=e.readUint32(),n=0;n100)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return r*M;case"days":case"day":case"d":return r*q;case"hours":case"hour":case"hrs":case"hr":case"h":return r*F;case"minutes":case"minute":case"mins":case"min":case"m":return r*N;case"seconds":case"second":case"secs":case"sec":case"s":return r*j;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function p(e){return e>=q?Math.round(e/q)+"d":e>=F?Math.round(e/F)+"h":e>=N?Math.round(e/N)+"m":e>=j?Math.round(e/j)+"s":e+"ms"}function g(e){return y(e,q,"day")||y(e,F,"hour")||y(e,N,"minute")||y(e,j,"second")||e+" ms"}function y(e,t,r){if(!(e=0;--n){var i=this.tryEntries[n],a=i.completion;if("root"===i.tryLoc)return t("end");if(i.tryLoc<=this.prev){var s=b.call(i,"catchLoc"),o=b.call(i,"finallyLoc");if(s&&o){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&b.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),h(r),U}},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;h(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:p(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=y),U}}}("object"===w(k)?k:"object"===("undefined"==typeof window?"undefined":w(window))?window:"object"===("undefined"==typeof self?"undefined":w(self))?self:k)}),C="object"===w(k)?k:"object"===("undefined"==typeof window?"undefined":w(window))?window:"object"===("undefined"==typeof self?"undefined":w(self))?self:k,E=C.regeneratorRuntime&&Object.getOwnPropertyNames(C).indexOf("regeneratorRuntime")>=0,U=E&&C.regeneratorRuntime;C.regeneratorRuntime=void 0;var B=I;if(E)C.regeneratorRuntime=U;else try{delete C.regeneratorRuntime}catch(e){C.regeneratorRuntime=void 0}String.fromCodePoint||function(){var e=function(){try{var e={},t=Object.defineProperty,r=t(e,e,e)&&t}catch(e){}return r}(),t=String.fromCharCode,r=Math.floor,n=function(e){var n,i,a=[],s=-1,o=arguments.length;if(!o)return"";for(var u="";++s1114111||r(c)!=c)throw RangeError("Invalid code point: "+c);c<=65535?a.push(c):(c-=65536,n=55296+(c>>10),i=c%1024+56320,a.push(n,i)),(s+1==o||a.length>16384)&&(u+=t.apply(null,a),a.length=0)}return u};e?e(String,"fromCodePoint",{value:n,configurable:!0,writable:!0}):String.fromCodePoint=n}(),String.prototype.codePointAt||function(){var e=function(){try{var e={},t=Object.defineProperty,r=t(e,e,e)&&t}catch(e){}return r}(),t=function(e){if(null==this)throw TypeError();var t=String(this),r=t.length,n=e?Number(e):0;if(n!=n&&(n=0),!(n<0||n>=r)){var i,a=t.charCodeAt(n);return a>=55296&&a<=56319&&r>n+1&&(i=t.charCodeAt(n+1))>=56320&&i<=57343?1024*(a-55296)+i-56320+65536:a}};e?e(String.prototype,"codePointAt",{value:t,configurable:!0,writable:!0}):String.prototype.codePointAt=t}();var T=e(function(e){e.require;var t={isNotUTF8:function(e,r,n){try{t.getStringFromBytes(e,r,n,!0)}catch(e){return!0}return!1},getCharLength:function(e){return 240==(240&e)?4:224==(224&e)?3:192==(192&e)?2:e==(127&e)?1:0},getCharCode:function(e,r,n){var i=0,a="";if(r=r||0,0==(n=n||t.getCharLength(e[r])))throw new Error(e[r].toString(2)+" is not a significative byte (offset:"+r+").");if(1===n)return e[r];if(a="00000000".slice(0,n)+1+"00000000".slice(n+1),e[r]&parseInt(a,2))throw Error("Index "+r+": A "+n+" bytes encoded char cannot encode the "+(n+1)+"th rank bit to 1.");for(a="0000".slice(0,n+1)+"11111111".slice(n+1),i+=(e[r]&parseInt(a,2))<<6*--n;n;){if(128!=(128&e[r+1])||64==(64&e[r+1]))throw Error("Index "+(r+1)+': Next bytes of encoded char must begin with a "10" bit sequence.');i+=(63&e[++r])<<6*--n}return i},getStringFromBytes:function(e,r,n,i){var a,s=[];for(r|=0,n="number"==typeof n?n:e.byteLength||e.length;rn){if(i)throw Error("Index "+r+": Found a "+a+" bytes encoded char declaration but only "+(n-r)+" bytes are available.")}else s.push(String.fromCodePoint(t.getCharCode(e,r,a,i)));r+=a-1}return s.join("")},getBytesForCharCode:function(e){if(e<128)return 1;if(e<2048)return 2;if(e<65536)return 3;if(e<2097152)return 4;throw new Error("CharCode "+e+" cannot be encoded with UTF8.")},setBytesFromCharCode:function(e,r,n,i){if(e|=0,r=r||[],n|=0,1==(i=i||t.getBytesForCharCode(e)))r[n]=e;else for(r[n++]=(parseInt("1111".slice(0,i),2)<<8-i)+(e>>>6*--i);i>0;)r[n++]=e>>>6*--i&63|128;return r},setBytesFromString:function(e,r,n,i,a){e=e||"",r=r||[],n|=0,i="number"==typeof i?i:r.byteLength||1/0;for(var s=0,o=e.length;si)throw new Error('Not enought bytes to encode the char "'+e[s]+'" at the offset "'+n+'".');t.setBytesFromCharCode(e[s].codePointAt(0),r,n,u,a),n+=u}return r}};e.exports=t}),_=function(){function e(){m(this,e),this.data=[]}return x(e,[{key:"createBuffer",value:function(){return Uint8Array.from(this.data).buffer}},{key:"writeUint8",value:function(e){this.data.push(255&e)}},{key:"setUint8",value:function(e,t){this.data[e]=255&t}},{key:"writeUint16",value:function(e){this.data.push(255&e,e>>>8&255)}},{key:"setUint16",value:function(e,t){this.data[e]=255&t,this.data[e+1]=t>>>8&255}},{key:"writeUint32",value:function(e){for(var t=0;t<4;t++)this.data.push(255&e),e>>>=8}},{key:"setUint32",value:function(e,t){for(var r=0;r<4;r++)this.data[e+r]=255&t,t>>>=8}},{key:"writeVarUint",value:function(e){for(;e>=128;)this.data.push(128|127&e),e>>>=7;this.data.push(127&e)}},{key:"writeVarString",value:function(e){var t=T.setBytesFromString(e),r=t.length;this.writeVarUint(r);for(var n=0;n>>0;if(t>35)throw new Error("Integer out of range!")}}},{key:"readVarString",value:function(){for(var e=this.readVarUint(),t=new Array(e),r=0;r0)return f(e);if("number"===r&&!1===isNaN(e))return t.long?g(e):p(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))},G=e(function(e,t){function r(e){var r,n=0;for(r in e)n=(n<<5)-n+e.charCodeAt(r),n|=0;return t.colors[Math.abs(n)%t.colors.length]}function n(e){function n(){if(n.enabled){var e=n,r=+new Date,i=r-(u||r);e.diff=i,e.prev=u,e.curr=r,u=r;for(var a=new Array(arguments.length),s=0;s=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function n(e){var r=this.useColors;if(e[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+e[0]+(r?"%c ":" ")+"+"+t.humanize(this.diff),r){var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var i=0,a=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(i++,"%c"===e&&(a=i))}),e.splice(a,0,n)}}function i(){return"object"===("undefined"==typeof console?"undefined":w(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}}function s(){var e;try{e=t.storage.debug}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e}t=e.exports=G,t.log=i,t.formatArgs=n,t.save=a,t.load=s,t.useColors=r,t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(s())});!function(e){var t=function(){function t(r,n){if(m(this,t),this.y=r,null==n&&(n={}),this.opts=n,this.preferUntransformed=n.preferUntransformed||!1,null==n.role||"master"===n.role)this.role="master";else{if("slave"!==n.role)throw new Error("Role must be either 'master' or 'slave'!");this.role="slave"}this.log=e.debug("y:connector"),this.logMessage=e.debug("y:connector-message"),this.y.db.forwardAppliedOperations=n.forwardAppliedOperations||!1,this.role=n.role,this.connections=new Map,this.isSynced=!1,this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null,this.debug=!0===n.debug,this.broadcastOpBuffer=[],this.protocolVersion=11,this.authInfo=n.auth||null,this.checkAuth=n.checkAuth||function(){return Promise.resolve("write")},!1!==n.generateUserId&&this.setUserId(e.utils.generateUserId())}return x(t,[{key:"reconnect",value:function(){return this.log("reconnecting.."),this.y.db.startGarbageCollector()}},{key:"disconnect",value:function(){return this.log("discronnecting.."),this.connections=new Map,this.isSynced=!1,this.currentSyncTarget=null,this.whenSyncedListeners=[],this.y.db.stopGarbageCollector(),this.y.db.whenTransactionsFinished()}},{key:"repair",value:function(){var e=this;this.log("Repairing the state of Yjs. This can happen if messages get lost, and Yjs detects that something is wrong. If this happens often, please report an issue here: https://github.com/y-js/yjs/issues"),this.isSynced=!1,this.connections.forEach(function(t,r){t.isSynced=!1,e._syncWithUser(r)})}},{key:"setUserId",value:function(e){if(null==this.userId){if(!Number.isInteger(e)){var t=new Error("UserId must be an integer!");throw this.y.emit("error",t),t}return this.log('Set userId to "%s"',e),this.userId=e,this.y.db.setUserId(e)}return null}},{key:"onUserEvent",value:function(e){this.userEventListeners.push(e)}},{key:"removeUserEventListener",value:function(e){this.userEventListeners=this.userEventListeners.filter(function(t){return e!==t})}},{key:"userLeft",value:function(e){if(this.connections.has(e)){this.log("%s: User left %s",this.userId,e),this.connections.delete(e),this._setSyncedWith(null);var t=!0,r=!1,n=void 0;try{for(var i,a=this.userEventListeners[Symbol.iterator]();!(t=(i=a.next()).done);t=!0)(0,i.value)({action:"userLeft",user:e})}catch(e){r=!0,n=e}finally{try{!t&&a.return&&a.return()}finally{if(r)throw n}}}}},{key:"userJoined",value:function(e,t,r){if(null==t)throw new Error("You must specify the role of the joined user!");if(this.connections.has(e))throw new Error("This user already joined!");this.log("%s: User joined %s",this.userId,e),this.connections.set(e,{uid:e,isSynced:!1,role:t,processAfterAuth:[],auth:r||null,receivedSyncStep2:!1});var n={};n.promise=new Promise(function(e){n.resolve=e}),this.connections.get(e).syncStep2=n;var i=!0,a=!1,s=void 0;try{for(var o,u=this.userEventListeners[Symbol.iterator]();!(i=(o=u.next()).done);i=!0)(0,o.value)({action:"userJoined",user:e,role:t})}catch(e){a=!0,s=e}finally{try{!i&&u.return&&u.return()}finally{if(a)throw s}}this._syncWithUser(e)}},{key:"whenSynced",value:function(e){this.isSynced?e():this.whenSyncedListeners.push(e)}},{key:"_syncWithUser",value:function(e){"slave"!==this.role&&a(this,e)}},{key:"_fireIsSyncedListeners",value:function(){var e=this;this.y.db.whenTransactionsFinished().then(function(){if(!e.isSynced){e.isSynced=!0;var t=!0,r=!1,n=void 0;try{for(var i,a=e.whenSyncedListeners[Symbol.iterator]();!(t=(i=a.next()).done);t=!0)(0,i.value)()}catch(e){r=!0,n=e}finally{try{!t&&a.return&&a.return()}finally{if(r)throw n}}e.whenSyncedListeners=[]}})}},{key:"send",value:function(e,t){if(!(t instanceof ArrayBuffer||t instanceof Uint8Array))throw new Error("Expected Message to be an ArrayBuffer or Uint8Array - please don't use this method to send custom messages");this.log("%s: Send '%y' to %s",this.userId,t,e),this.logMessage("Message: %Y",t)}},{key:"broadcast",value:function(e){if(!(e instanceof ArrayBuffer||e instanceof Uint8Array))throw new Error("Expected Message to be an ArrayBuffer or Uint8Array - please don't use this method to send custom messages");this.log("%s: Broadcast '%y'",this.userId,e),this.logMessage("Message: %Y",e)}},{key:"broadcastOps",value:function(t){function r(){if(n.broadcastOpBuffer.length>0){var t=new _;t.writeVarString(n.opts.room),t.writeVarString("update");var r=n.broadcastOpBuffer;n.broadcastOpBuffer=[];var i=r.length;t.writeUint32(i);for(var a=0;a0&&t.every(function(e){return e.isSynced})&&this._fireIsSyncedListeners()}},{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(e){i=!0,a=e}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(e){a=!0,s=e}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}(b),function(e){var t=function(){function t(r,n){m(this,t),this.y=r,this.opts=n,this.saveOperationsBuffer=[],this.log=e.debug("y:persistence")}return x(t,[{key:"saveToMessageQueue",value:function(e){this.log("Room %s: Save message to message queue",this.y.options.connector.room)}},{key:"saveOperations",value:function(t){var r=this;t=t.map(function(t){return e.Struct[t.struct].encode(t)});var n=function(){if(r.saveOperationsBuffer.length>0){var t=new _;t.writeVarString(r.opts.room),t.writeVarString("update");var n=r.saveOperationsBuffer;r.saveOperationsBuffer=[];var i=n.length;t.writeUint32(i);for(var a=0;a0&&(i.gc1.length>0||i.gc2.length>0)?(i.y.connector.isSynced||console.warn("gc should be empty when not synced!"),new Promise(function(e){i.requestTransaction(B.mark(function t(){var r,a;return B.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(null==i.y.connector||!i.y.connector.isSynced){t.next=10;break}r=0;case 2:if(!(r0&&(i.gcInterval=setTimeout(n,i.gcTimeout)),e();case 12:case"end":return t.stop()}},t,this)}))})):(i.gcTimeout>0&&(i.gcInterval=setTimeout(n,i.gcTimeout)),Promise.resolve())})}m(this,t),this.y=e,r.gc=!0===r.gc,this.dbOpts=r;var i=this;this.userId=null;var a;this.userIdPromise=new Promise(function(e){a=e}),this.userIdPromise.resolve=a,this.forwardAppliedOperations=!1,this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1,this.initializedTypes={},this.waitingTransactions=[],this.transactionInProgress=!1,this.transactionIsFlushed=!1,"undefined"!=typeof YConcurrencyTestingMode&&(this.executeOrder=[]),this.gc1=[],this.gc2=[],this.garbageCollect=n,this.startGarbageCollector(),this.repairCheckInterval=r.repairCheckInterval?r.repairCheckInterval:6e3,this.opsReceivedTimestamp=new Date,this.startRepairCheck()}return x(t,[{key:"startGarbageCollector",value:function(){this.gc=this.dbOpts.gc,this.gc?this.gcTimeout=this.dbOpts.gcTimeout?this.dbOpts.gcTimeout:3e4:this.gcTimeout=-1,this.gcTimeout>0&&this.garbageCollect()}},{key:"startRepairCheck",value:function(){var e=this;this.repairCheckInterval>0&&(this.repairCheckIntervalHandler=setInterval(function(){new Date-e.opsReceivedTimestamp>e.repairCheckInterval&&Object.keys(e.listenersById).length>0&&(e.listenersById={},e.opsReceivedTimestamp=new Date,e.y.connector.repair())},this.repairCheckInterval))}},{key:"stopRepairCheck",value:function(){clearInterval(this.repairCheckIntervalHandler)}},{key:"queueGarbageCollector",value:function(e){this.y.connector.isSynced&&this.gc&&this.gc1.push(e)}},{key:"emptyGarbageCollector",value:function(){var e=this;return new Promise(function(t){var r=function r(){e.gc1.length>0||e.gc2.length>0?e.garbageCollect().then(r):t()};setTimeout(r,0)})}},{key:"addToDebug",value:function(){if("undefined"!=typeof YConcurrencyTestingMode){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 this.gc=!1,this.gcTimeout=-1,new Promise(function(t){e.requestTransaction(B.mark(function r(){var n,i,a;return B.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(!(i1)){e.next=10;break}return e.delegateYield(this.getInsertionCleanStart([t.id[0],t.id[1]+1]),"t0",8);case 8:t=e.t0,n=!0;case 10:if(!n){e.next=15;break}return t.gc=!0,e.delegateYield(this.setOperation(t),"t1",13);case 13:return this.store.queueGarbageCollector(t.id),e.abrupt("return",!0);case 15:return e.abrupt("return",!1);case 16:case"end":return e.stop()}},e,this)})},{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:"destroyTypes",value:function(){for(var e in this.initializedTypes){var 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).")}}},{key:"destroy",value:B.mark(function e(){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:clearTimeout(this.gcInterval),this.gcInterval=null,this.stopRepairCheck();case 3:case"end":return e.stop()}},e,this)})},{key:"setUserId",value:function(e){if(!this.userIdPromise.inProgress){this.userIdPromise.inProgress=!0;var t=this;t.requestTransaction(B.mark(function r(){var n;return B.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(e){if(null==e)throw new Error("getNextOpId expects the number of created ids to create!");if(null==this.userId)throw new Error("OperationStore not yet initialized!");var t=[this.userId,this.opClock];return this.opClock+=e,t}},{key:"applyOperations",value:function(t){this.opsReceivedTimestamp=new Date;for(var r=t.readUint32(),n=0;n0)for(var r={op:t,missing:e.length},n=0;n0&&(this.store.y.connector.broadcastOps(n),null!=this.store.y.persistence&&this.store.y.persistence.saveOperations(n));case 10:case"end":return t.stop()}},t,this)})},{key:"deleteList",value:B.mark(function e(t){var r;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(null==t){e.next=15;break}return e.delegateYield(this.getOperation(t),"t0",2);case 2:if(t=e.t0,t.gc){e.next=12;break}return t.gc=!0,t.deleted=!0,e.delegateYield(this.setOperation(t),"t1",7);case 7:return r=null!=t.content?t.content.length:1,e.delegateYield(this.markDeleted(t.id,r),"t2",9);case 9:if(null==t.opContent){e.next=11;break}return e.delegateYield(this.deleteOperation(t.opContent),"t3",11);case 11:this.store.queueGarbageCollector(t.id);case 12:t=t.right,e.next=0;break;case 15:case"end":return e.stop()}},e,this)})},{key:"deleteOperation",value:B.mark(function e(t,r,n){var i,a,s,o,u,c,l;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return null==r&&(r=1),e.delegateYield(this.markDeleted(t,r),"t0",2);case 2:if(!(r>0)){e.next=64;break}return i=!1,e.delegateYield(this.os.findWithUpperBound([t[0],t[1]+r-1]),"t1",5);case 5:if(a=e.t1,s=null!=a&&null!=a.content?a.content.length:1,!(null==a||a.id[0]!==t[0]||a.id[1]+s<=t[1])){e.next=12;break}a=null,r=0,e.next=22;break;case 12:if(a.deleted){e.next=21;break}if(!(a.id[1]t[1]+r)){e.next=21;break}return e.delegateYield(this.getInsertionCleanEnd([t[0],t[1]+r-1]),"t3",19);case 19:a=e.t3,s=a.content.length;case 21:r=a.id[1]-t[1];case 22:if(null==a){e.next=62;break}if(a.deleted){e.next=44;break}if(i=!0,a.deleted=!0,null==a.start){e.next=28;break}return e.delegateYield(this.deleteList(a.start),"t4",28);case 28:if(null==a.map){e.next=35;break}e.t5=B.keys(a.map);case 30:if((e.t6=e.t5()).done){e.next=35;break}return o=e.t6.value,e.delegateYield(this.deleteList(a.map[o]),"t7",33);case 33:e.next=30;break;case 35:if(null==a.opContent){e.next=37;break}return e.delegateYield(this.deleteOperation(a.opContent),"t8",37);case 37:if(null==a.requires){e.next=44;break}u=0;case 39:if(!(u0)){e.next=20;break}if(n.gc){e.next=11;break}n.len+=i,e.next=18;break;case 11:if(!((i=n.id[1]+n.len-t[1])=a.id[1])){e.next=61;break}i=n.id[1]+n.len-a.id[1];case 33:if(!(i>=0)){e.next=61;break}if(!a.gc){e.next=44;break}if(n.len-=i,!(i>=a.len)){e.next=41;break}if(!((i-=a.len)>0)){e.next=41;break}return e.delegateYield(this.ds.put(n),"t5",40);case 40:return e.delegateYield(this.markDeleted([a.id[0],a.id[1]+a.len],i),"t6",41);case 41:return e.abrupt("break",61);case 44:if(!(i>a.len)){e.next=56;break}return e.delegateYield(this.ds.findNext(a.id),"t7",46);case 46:return s=e.t7,e.delegateYield(this.ds.delete(a.id),"t8",48);case 48:if(null!=s&&n.id[0]===s.id[0]){e.next=52;break}return e.abrupt("break",61);case 52:a=s,i=n.id[1]+n.len-a.id[1];case 54:e.next=59;break;case 56:return n.len+=a.len-i,e.delegateYield(this.ds.delete(a.id),"t9",58);case 58:return e.abrupt("break",61);case 59:e.next=33;break;case 61:return e.delegateYield(this.ds.put(n),"t10",62);case 62:return e.abrupt("return",n);case 63:case"end":return e.stop()}},e,this)})},{key:"garbageCollectAfterSync",value:B.mark(function e(){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if((this.store.gc1.length>0||this.store.gc2.length>0)&&console.warn("gc should be empty after sync"),this.store.gc){e.next=3;break}return e.abrupt("return");case 3:return e.delegateYield(this.os.iterate(this,null,null,B.mark(function e(t){var r,n,i;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.gc){e.next=3;break}return delete t.gc,e.delegateYield(this.setOperation(t),"t0",3);case 3:if(null==t.parent){e.next=23;break}return e.delegateYield(this.isDeleted(t.parent),"t1",5);case 5:if(!(r=e.t1)){e.next=23;break}if(t.gc=!0,t.deleted){e.next=20;break}return e.delegateYield(this.markDeleted(t.id,null!=t.content?t.content.length:1),"t2",10);case 10:if(t.deleted=!0,null==t.opContent){e.next=13;break}return e.delegateYield(this.deleteOperation(t.opContent),"t3",13);case 13:if(null==t.requires){e.next=20;break}n=0;case 15:if(!(n0)){t.next=53;break}c=n.left,t.t11=B.keys(n.originOf);case 39:if((t.t12=t.t11()).done){t.next=48;break}return l=t.t12.value,t.delegateYield(this.getOperation(n.originOf[l]),"t13",42);case 42:if(null==(d=t.t13)){t.next=46;break}return d.origin=c,t.delegateYield(this.setOperation(d),"t14",46);case 46:t.next=39;break;case 48:if(null==c){t.next=53;break}return t.delegateYield(this.getInsertion(c),"t15",50);case 50:return h=t.t15,null==h.originOf?h.originOf=n.originOf:h.originOf=n.originOf.concat(h.originOf),t.delegateYield(this.setOperation(h),"t16",53);case 53:if(null==n.origin){t.next=58;break}return t.delegateYield(this.getInsertion(n.origin),"t17",55);case 55:return f=t.t17,f.originOf=f.originOf.filter(function(t){return!e.utils.compareIds(r,t)}),t.delegateYield(this.setOperation(f),"t18",58);case 58:if(null==n.parent){t.next=61;break}return t.delegateYield(this.getOperation(n.parent),"t19",60);case 60:p=t.t19;case 61:if(null==p){t.next=66;break}if(g=!1,null!=n.parentSub?e.utils.compareIds(p.map[n.parentSub],n.id)&&(g=!0,null!=n.right?p.map[n.parentSub]=n.right:delete p.map[n.parentSub]):(e.utils.compareIds(p.start,n.id)&&(g=!0,p.start=n.right),e.utils.matchesId(n,p.end)&&(g=!0,p.end=n.left)),!g){t.next=66;break}return t.delegateYield(this.setOperation(p),"t20",66);case 66:return t.delegateYield(this.removeOperation(n.id),"t21",67);case 67:case"end":return t.stop()}},t,this)})},{key:"checkDeleteStoreForState",value:B.mark(function e(t){var r;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.ds.findWithUpperBound([t.user,t.clock]),"t0",1);case 1:null!=(r=e.t0)&&r.id[0]===t.user&&r.gc&&(t.clock=Math.max(t.clock,r.id[1]+r.len));case 3:case"end":return e.stop()}},e,this)})},{key:"updateState",value:B.mark(function e(t){var r,n,i;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.getState(t),"t0",1);case 1:return r=e.t0,e.delegateYield(this.checkDeleteStoreForState(r),"t1",3);case 3:return e.delegateYield(this.getInsertion([t,r.clock]),"t2",4);case 4:n=e.t2,i=null!=n&&null!=n.content?n.content.length:1;case 6:if(!(null!=n&&t===n.id[0]&&n.id[1]<=r.clock&&n.id[1]+i>r.clock)){e.next=14;break}return r.clock+=i,e.delegateYield(this.checkDeleteStoreForState(r),"t3",9);case 9:return e.delegateYield(this.os.findNext(n.id),"t4",10);case 10:n=e.t4,i=null!=n&&null!=n.content?n.content.length:1,e.next=6;break;case 14:return e.delegateYield(this.setState(r),"t5",15);case 15:case"end":return e.stop()}},e,this)})},{key:"applyDeleteSet",value:B.mark(function e(t){var r,n,i,a,s,o,u,c,l,d,h,f,p=this;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:r=[],n=t.readUint32(),i=B.mark(function e(n){var i,a,u,c,l,d,h;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:for(i=t.readVarUint(),a=[],u=t.readVarUint(),c=0;c=c[1])){e.next=34;break}return e.delegateYield(this.os.findWithUpperBound([c[0],l-1]),"t3",18);case 18:if(null!=(d=e.t3)){e.next=21;break}return e.abrupt("break",34);case 21:if(h=null!=d.content?d.content.length:1,!(d.id[0]!==c[0]||d.id[1]+h<=c[1])){e.next=24;break}return e.abrupt("break",34);case 24:if(!(d.id[1]+h>c[1]+c[2])){e.next=27;break}return e.delegateYield(this.getInsertionCleanEnd([c[0],c[1]+c[2]-1]),"t4",26);case 26:d=e.t4;case 27:if(!(d.id[1]1)){t.next=15;break}return a=i[0],s=e.Struct[a].create(r),s.type=i[1],t.delegateYield(this.setOperation(s),"t1",12);case 12:return t.abrupt("return",s);case 15:throw new Error("Unexpected case. Operation cannot be generated correctly!Incompatible Yjs version?");case 16:case"end":return t.stop()}},t,this)})},{key:"removeOperation",value:B.mark(function e(t){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.os.delete(t),"t0",1);case 1:case"end":return e.stop()}},e,this)})},{key:"setState",value:B.mark(function e(t){var r;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r={id:[t.user],clock:t.clock},e.delegateYield(this.ss.put(r),"t0",2);case 2:case"end":return e.stop()}},e,this)})},{key:"getState",value:B.mark(function e(t){var r,n;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.ss.find([t]),"t0",1);case 1:return r=e.t0,n=null==r?null:r.clock,null==n&&(n=0),e.abrupt("return",{user:t,clock:n});case 5:case"end":return e.stop()}},e,this)})},{key:"getStateVector",value:B.mark(function e(){var t;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=[],e.delegateYield(this.ss.iterate(this,null,null,B.mark(function e(r){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.push({user:r.id[0],clock:r.clock});case 1:case"end":return e.stop()}},e,this)})),"t0",2);case 2:return e.abrupt("return",t);case 3:case"end":return e.stop()}},e,this)})},{key:"getStateSet",value:B.mark(function e(){var t;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t={},e.delegateYield(this.ss.iterate(this,null,null,B.mark(function e(r){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t[r.id[0]]=r.clock;case 1:case"end":return e.stop()}},e,this)})),"t0",2);case 2:return e.abrupt("return",t);case 3:case"end":return e.stop()}},e,this)})},{key:"writeStateSet",value:B.mark(function e(t){var r,n;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.pos,n=0,t.writeUint32(0),e.delegateYield(this.ss.iterate(this,null,null,B.mark(function e(r){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.writeVarUint(r.id[0]),t.writeVarUint(r.clock),n++;case 3:case"end":return e.stop()}},e,this)})),"t0",4);case 4:return t.setUint32(r,n),e.abrupt("return",0===n);case 6:case"end":return e.stop()}},e,this)})},{key:"getOperations",value:B.mark(function t(r){var n,i,a,s,o,u,c,l,d,h,f,p,g,y,v,b,k,w,m;return B.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return null==r&&(r=new Map),n=[],t.delegateYield(this.getStateVector(),"t0",3);case 3:i=t.t0,a=!0,s=!1,o=void 0,t.prev=7,u=i[Symbol.iterator]();case 9:if(a=(c=u.next()).done){t.next=23;break}if(l=c.value,16777215!==(d=l.user)){t.next=14;break}return t.abrupt("continue",20);case 14:if(!((h=r.get(d)||0)>0)){t.next=19;break}return t.delegateYield(this.getInsertion([d,h]),"t1",17);case 17:null!=(f=t.t1)&&(h=f.id[1]);case 19:r.set(d,h);case 20:a=!0,t.next=9;break;case 23:t.next=29;break;case 25:t.prev=25,t.t2=t.catch(7),s=!0,o=t.t2;case 29:t.prev=29,t.prev=30,!a&&u.return&&u.return();case 32:if(t.prev=32,!s){t.next=35;break}throw o;case 35:return t.finish(32);case 36:return t.finish(29);case 37:p=!0,g=!1,y=void 0,t.prev=40,v=i[Symbol.iterator]();case 42:if(p=(b=v.next()).done){t.next=52;break}if(k=b.value,w=k.user,m=r.get(w),16777215!==w){t.next=48;break}return t.abrupt("continue",49);case 48:return t.delegateYield(this.os.iterate(this,[w,m],[w,Number.MAX_VALUE],B.mark(function t(i){var a,s,o,u;return B.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(i=e.Struct[i.struct].encode(i),"Insert"===i.struct){t.next=5;break}n.push(i),t.next=40;break;case 5:if(!(null==i.right||i.right[1]<(r.get(i.right[0])||0))){t.next=40;break}a=i,s=[i],o=i.right;case 9:if(null!=a.left){t.next=14;break}return i.left=null,n.push(i),t.abrupt("break",40);case 14:return t.delegateYield(this.getInsertion(a.left),"t0",15);case 15:for(a=t.t0;s.length>0&&e.utils.matchesId(a,s[s.length-1].origin);)s.pop();if(!(a.id[1]<(r.get(a.id[0])||0))){t.next=23;break}return i.left=e.utils.getLastId(a),n.push(i),t.abrupt("break",40);case 23:if(!e.utils.matchesId(a,i.origin)){t.next=33;break}if(i.left=i.origin,n.push(i),i=e.Struct[i.struct].encode(a),i.right=o,!(s.length>0)){t.next=30;break}throw new Error("Reached inconsistent OS state.Operations are not correctly connected.");case 30:s=[i],t.next=38;break;case 33:u=e.Struct[i.struct].encode(a),u.right=s[s.length-1].id,u.left=u.origin,n.push(u),s.push(a);case 38:t.next=9;break;case 40:case"end":return t.stop()}},t,this)})),"t3",49);case 49:p=!0,t.next=42;break;case 52:t.next=58;break;case 54:t.prev=54,t.t4=t.catch(40),g=!0,y=t.t4;case 58:t.prev=58,t.prev=59,!p&&v.return&&v.return();case 61:if(t.prev=61,!g){t.next=64;break}throw y;case 64:return t.finish(61);case 65:return t.finish(58);case 66:return t.abrupt("return",n.reverse());case 67:case"end":return t.stop()}},t,this,[[7,25,29,37],[30,,32,36],[40,54,58,66],[59,,61,65]])})},{key:"writeOperations",value:B.mark(function t(r,n){var i,a,s,o,u,c,l,d;return B.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:for(i=new Map,a=n.readUint32(),s=0;s1)){r.next=84;break}return r.delegateYield(this.getInsertionCleanEnd(p.id),"t16",83);case 83:p=r.t16;case 84:this.store.removeFromGarbageCollector(p);case 85:return r.delegateYield(this.setOperation(p),"t17",86);case 86:if(null==n.parentSub){r.next=96;break}if(null!=f){r.next=90;break}return c.map[n.parentSub]=n.id,r.delegateYield(this.setOperation(c),"t18",90);case 90:if(null==n.right){r.next=92;break}return r.delegateYield(this.deleteOperation(n.right,1,!0),"t19",92);case 92:if(null==n.left){r.next=94;break}return r.delegateYield(this.deleteOperation(n.id,1,!0),"t20",94);case 94:r.next=100;break;case 96:if(null!=p&&null!=f){r.next=100;break}return null==p&&(c.end=e.utils.getLastId(n)),null==f&&(c.start=n.id),r.delegateYield(this.setOperation(c),"t21",100);case 100:i=0;case 101:if(!(i0&&(t.info=JSON.parse(r)),t},requiredOps:function(){return[]},execute:B.mark(function e(t){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.start=null,t.end=null;case 2:case"end":return e.stop()}},e,this)}),ref:B.mark(function e(t,r){var n,i;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=t.start){e.next=2;break}return e.abrupt("return",null);case 2:return n=null,e.delegateYield(this.getOperation(t.start),"t0",4);case 4:i=e.t0;case 5:if(i.deleted||(n=i,r--),!(r>=0&&null!=i.right)){e.next=12;break}return e.delegateYield(this.getOperation(i.right),"t1",9);case 9:i=e.t1,e.next=13;break;case 12:return e.abrupt("break",15);case 13:e.next=5;break;case 15:return e.abrupt("return",n);case 16:case"end":return e.stop()}},e,this)}),map:B.mark(function e(t,r){var n,i;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t=t.start,n=[];case 2:if(null==t){e.next=9;break}return e.delegateYield(this.getOperation(t),"t0",4);case 4:i=e.t0,i.deleted||n.push(r(i)),t=i.right,e.next=2;break;case 9:return e.abrupt("return",n);case 10:case"end":return e.stop()}},e,this)})},Map:{create:function(e){return{id:e,map:{},struct:"Map"}},encode:function(e){var t={struct:"Map",type:e.type,id:e.id,map:{}};return null!=e.requires&&(t.requires=e.require,console.warn("requires is used! see same note above for List")),null!=e.info&&(t.info=e.info),t},binaryEncode:function(e,t){e.writeUint8(V),e.writeOpID(t.id),e.writeVarString(t.type);var r=null!=t.info?JSON.stringify(t.info):"";e.writeVarString(r)},binaryDecode:function(e){e.skip8();var t={id:e.readOpID(),type:e.readVarString(),struct:"Map",map:{}},r=e.readVarString();return r.length>0&&(t.info=JSON.parse(r)),t},requiredOps:function(){return[]},execute:B.mark(function e(){return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},e,this)}),get:B.mark(function e(t,r){var n,i;return B.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(null==(n=t.map[r])){e.next=14;break}return e.delegateYield(this.getOperation(n),"t0",3);case 3:if(null!=(i=e.t0)&&!i.deleted){e.next=8;break}return e.abrupt("return",void 0);case 8:if(null!=i.opContent){e.next=12;break}return e.abrupt("return",i.content[0]);case 12:return e.delegateYield(this.getType(i.opContent),"t1",13);case 13:return e.abrupt("return",e.t1);case 14:case"end":return e.stop()}},e,this)})}};e.Struct=t}(b),function(e){function t(e){var t={};for(var r in e)t[r]=e[r];return t}function r(e){return e=t(e),null!=e.content&&(e.content=e.content.map(function(e){return e})),e}function n(e,t){return e[0]=e.id[1]&&t[1]=0)){e.next=10;break}if(a=this.readBuffer[i],a.id[1]!==r[1]||a.id[0]!==r[0]){e.next=7;break}for(;i=0)){e.next=19;break}if(a=this.writeBuffer[i],a.id[1]!==r[1]||a.id[0]!==r[0]){e.next=16;break}return s=a,e.abrupt("break",19);case 16:i--,e.next=11;break;case 19:if(!(i<0&&void 0===n)){e.next=22;break}return e.delegateYield(O(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"find",this).call(this,r),"t0",21);case 21:s=e.t0;case 22:if(null!=s){for(i=0;i=0)){e.next=11;break}if(a=this.writeBuffer[i],a.id[1]!==n[1]||a.id[0]!==n[0]){e.next=8;break}for(;i0;)for(var n=0;n0&&this.awaiting--,!(0===this.awaiting&&this.waiting.length>0)){t.next=70;break}o=0;case 7:if(!(o=0;a--){var s=this.waiting[a];"Insert"===s.struct&&(e.utils.matchesId(s,i.left)?(s.right=i.id,i.left=s.left):e.utils.compareIds(s.id,i.right)&&(s.left=e.utils.getLastId(i),i.right=s.right))}}this._tryCallEvents(t)}},{key:"awaitedDeletes",value:function(t,r){for(var n=this.waiting.splice(this.waiting.length-t),i=0;i0&&this.awaiting--,0===this.awaiting&&this.waiting.length>0){var t=[],r=[];this.waiting.forEach(function(e){"Delete"===e.struct?r.push(e):t.push(e)}),t=function(t){for(var r=[];t.length>0;)for(var n=0;n