10 lines
73 KiB
JavaScript
10 lines
73 KiB
JavaScript
/**
|
|
* yjs - A framework for real-time p2p shared editing on any data
|
|
* @version v13.0.0-20
|
|
* @license MIT
|
|
*/
|
|
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Y=e()}(this,function(){"use strict";function t(t,e){return e={exports:{}},t(e,e.exports),e.exports}function e(t){var e=new _(t);e.readVarString();var n=e.readVarString(),i=[];return i.push("\n === "+n+" ===\n"),"update"===n?r(e,i):"sync step 1"===n?o(e,i):"sync step 2"===n?h(e,i):i.push("-- Unknown message type - probably an encoding issue!!!"),i.join("")}function n(t){var e=new _(t);return e.readVarString(),e.readVarString()}function r(t,e){for(var n=t.readUint32(),r=0;r<n;r++)e.push(JSON.stringify(w.Struct.binaryDecodeOperation(t))+"\n")}function i(t,e,n){if(n.y.db.forwardAppliedOperations||null!=n.y.persistence){for(var r=t.pos,i=t.readUint32(),s=[],o=0;o<i;o++){var a=w.Struct.binaryDecodeOperation(t);"Delete"===a.struct&&s.push(a)}s.length>0&&(n.y.db.forwardAppliedOperations&&n.broadcastOps(s),n.y.persistence&&n.y.persistence.saveOperations(s)),t.pos=r}n.y.db.applyOperations(t)}function s(t,e){t.y.db.requestTransaction(function(){var n=new C;n.writeVarString(t.opts.room||""),n.writeVarString("sync step 1"),n.writeVarString(t.authInfo||""),n.writeVarUint(t.protocolVersion);var r=t.preferUntransformed&&0===this.os.length;n.writeUint8(r?1:0),this.writeStateSet(n),t.send(e,n.createBuffer())})}function o(t,e){var n=t.readVarString(),r=t.readVarUint(),i=1===t.readUint8();e.push('\n - auth: "'+n+'"\n - protocolVersion: '+r+"\n - preferUntransformed: "+i+"\n"),l(t,e)}function a(t,e,n,r,i){var o=t.readVarUint(),a=1===t.readUint8();return o!==n.protocolVersion&&(console.warn("You tried to sync with a yjs instance that has a different protocol version\n (You: "+o+", Client: "+o+").\n The sync was stopped. You need to upgrade your dependencies (especially Yjs & the Connector)!\n "),n.y.destroy()),n.y.db.whenTransactionsFinished().then(function(){return n.y.db.requestTransaction(function(){e.writeVarString("sync step 2"),e.writeVarString(n.authInfo||""),a?(e.writeUint8(1),this.writeOperationsUntransformed(e)):(e.writeUint8(0),this.writeOperations(e,t)),this.writeDeleteSet(e),n.send(r.uid,e.createBuffer()),r.receivedSyncStep2=!0}),n.y.db.whenTransactionsFinished().then(function(){"slave"===n.role&&s(n,i)})})}function l(t,e){e.push(" == SS: \n");for(var n=t.readUint32(),r=0;r<n;r++){var i=t.readVarUint(),s=t.readVarUint();e.push(" "+i+": "+s+"\n")}}function u(t,e){e.push(" == OS: \n");for(var n=t.readUint32(),r=0;r<n;r++){var i=w.Struct.binaryDecodeOperation(t);e.push(JSON.stringify(i)+"\n")}}function c(t,e){e.push(" == DS: \n");for(var n=t.readUint32(),r=0;r<n;r++){var i=t.readVarUint();e.push(" User: "+i+": ");for(var s=t.readVarUint(),o=0;o<s;o++){var a=t.readVarUint(),l=t.readVarUint(),u=1===t.readUint8();e.push("["+a+", "+l+", "+u+"]")}}}function h(t,e){e.push(" - auth: "+t.readVarString()+"\n");var n=1===t.readUint8();e.push(" - osUntransformed: "+n+"\n"),u(t,e),n&&l(t,e),c(t,e)}function f(t,e,n,r,i){var s=n.y.db,o=r.syncStep2;return s.requestTransaction(function(){1===t.readUint8()?this.applyOperationsUntransformed(t):this.store.applyOperations(t)}),s.requestTransaction(function(){this.applyDeleteSet(t)}),s.whenTransactionsFinished().then(function(){n._setSyncedWith(i),o.resolve()})}function d(t){var e=function(){function t(e){if(k(this,t),this.val=e,this.color=!0,this._left=null,this._right=null,this._parent=null,null===e.id)throw new Error("You must define id!")}return S(t,[{key:"isRed",value:function(){return this.color}},{key:"isBlack",value:function(){return!this.color}},{key:"redden",value:function(){return this.color=!0,this}},{key:"blacken",value:function(){return this.color=!1,this}},{key:"rotateLeft",value:function(t){var e=this.parent,n=this.right,r=this.right.left;if(n.left=this,this.right=r,null===e)t.root=n,n._parent=null;else if(e.left===this)e.left=n;else{if(e.right!==this)throw new Error("The elements are wrongly connected!");e.right=n}}},{key:"next",value:function(){if(null!==this.right){for(var t=this.right;null!==t.left;)t=t.left;return t}for(var e=this;null!==e.parent&&e!==e.parent.left;)e=e.parent;return e.parent}},{key:"prev",value:function(){if(null!==this.left){for(var t=this.left;null!==t.right;)t=t.right;return t}for(var e=this;null!==e.parent&&e!==e.parent.right;)e=e.parent;return e.parent}},{key:"rotateRight",value:function(t){var e=this.parent,n=this.left,r=this.left.right;if(n.right=this,this.left=r,null===e)t.root=n,n._parent=null;else if(e.left===this)e.left=n;else{if(e.right!==this)throw new Error("The elements are wrongly connected!");e.right=n}}},{key:"getUncle",value:function(){return this.parent===this.parent.parent.left?this.parent.parent.right:this.parent.parent.left}},{key:"grandparent",get:function(){return this.parent.parent}},{key:"parent",get:function(){return this._parent}},{key:"sibling",get:function(){return this===this.parent.left?this.parent.right:this.parent.left}},{key:"left",get:function(){return this._left},set:function(t){null!==t&&(t._parent=this),this._left=t}},{key:"right",get:function(){return this._right},set:function(t){null!==t&&(t._parent=this),this._right=t}}]),t}(),n=function(){function n(){k(this,n),this.root=null,this.length=0}return S(n,[{key:"findNext",value:function(t){return this.findWithLowerBound([t[0],t[1]+1])}},{key:"findPrev",value:function(t){return this.findWithUpperBound([t[0],t[1]-1])}},{key:"findNodeWithLowerBound",value:function(e){if(void 0===e)throw new Error("You must define from!");var n=this.root;if(null===n)return null;for(;;)if(null!==e&&!t.utils.smaller(e,n.val.id)||null===n.left){if(null===e||!t.utils.smaller(n.val.id,e))return n;if(null===n.right)return n.next();n=n.right}else n=n.left}},{key:"findNodeWithUpperBound",value:function(e){if(void 0===e)throw new Error("You must define from!");var n=this.root;if(null===n)return null;for(;;)if(null!==e&&!t.utils.smaller(n.val.id,e)||null===n.right){if(null===e||!t.utils.smaller(e,n.val.id))return n;if(null===n.left)return n.prev();n=n.left}else n=n.right}},{key:"findSmallestNode",value:function(){for(var t=this.root;null!=t&&null!=t.left;)t=t.left;return t}},{key:"findWithLowerBound",value:function(t){var e=this.findNodeWithLowerBound(t);return null==e?null:e.val}},{key:"findWithUpperBound",value:function(t){var e=this.findNodeWithUpperBound(t);return null==e?null:e.val}},{key:"iterate",value:function(e,n,r,i){var s;for(s=null===n?this.findSmallestNode():this.findNodeWithLowerBound(n);null!==s&&(null===r||t.utils.smaller(s.val.id,r)||t.utils.compareIds(s.val.id,r));)i.call(e,s.val),s=s.next();return!0}},{key:"logTable",value:function(t,e,n){null==n&&(n=function(){return!0}),null==t&&(t=null),null==e&&(e=null);var r=[];this.iterate(this,t,e,function(t){if(n(t)){var e={};for(var i in t)"object"===O(t[i])?e[i]=JSON.stringify(t[i]):e[i]=t[i];r.push(e)}}),null!=console.table&&console.table(r)}},{key:"find",value:function(t){var e;return(e=this.findNode(t))?e.val:null}},{key:"findNode",value:function(e){if(null==e||e.constructor!==Array)throw new Error("Expect id to be an array!");var n=this.root;if(null===n)return!1;for(;;){if(null===n)return!1;if(t.utils.smaller(e,n.val.id))n=n.left;else{if(!t.utils.smaller(n.val.id,e))return n;n=n.right}}}},{key:"delete",value:function(t){if(null==t||t.constructor!==Array)throw new Error("id is expected to be an Array!");var n=this.findNode(t);if(null!=n){if(this.length--,null!==n.left&&null!==n.right){for(var r=n.left;null!==r.right;)r=r.right;n.val=r.val,n=r}var i,s=n.left||n.right;if(null===s?(i=!0,s=new e({id:0}),s.blacken(),n.right=s):i=!1,null===n.parent)return void(i?this.root=null:(this.root=s,s.blacken(),s._parent=null));if(n.parent.left===n)n.parent.left=s;else{if(n.parent.right!==n)throw new Error("Impossible!");n.parent.right=s}if(n.isBlack()&&(s.isRed()?s.blacken():this._fixDelete(s)),this.root.blacken(),i)if(s.parent.left===s)s.parent.left=null;else{if(s.parent.right!==s)throw new Error("Impossible #3");s.parent.right=null}}}},{key:"_fixDelete",value:function(t){function e(t){return null===t||t.isBlack()}function n(t){return null!==t&&t.isRed()}if(null!==t.parent){var r=t.sibling;if(n(r)){if(t.parent.redden(),r.blacken(),t===t.parent.left)t.parent.rotateLeft(this);else{if(t!==t.parent.right)throw new Error("Impossible #2");t.parent.rotateRight(this)}r=t.sibling}t.parent.isBlack()&&r.isBlack()&&e(r.left)&&e(r.right)?(r.redden(),this._fixDelete(t.parent)):t.parent.isRed()&&r.isBlack()&&e(r.left)&&e(r.right)?(r.redden(),t.parent.blacken()):(t===t.parent.left&&r.isBlack()&&n(r.left)&&e(r.right)?(r.redden(),r.left.blacken(),r.rotateRight(this),r=t.sibling):t===t.parent.right&&r.isBlack()&&n(r.right)&&e(r.left)&&(r.redden(),r.right.blacken(),r.rotateLeft(this),r=t.sibling),r.color=t.parent.color,t.parent.blacken(),t===t.parent.left?(r.right.blacken(),t.parent.rotateLeft(this)):(r.left.blacken(),t.parent.rotateRight(this)))}}},{key:"put",value:function(n){if(null==n||null==n.id||n.id.constructor!==Array)throw new Error("v is expected to have an id property which is an Array!");var r=new e(n);if(null!==this.root){for(var i=this.root;;)if(t.utils.smaller(r.val.id,i.val.id)){if(null===i.left){i.left=r;break}i=i.left}else{if(!t.utils.smaller(i.val.id,r.val.id))return i.val=r.val,i;if(null===i.right){i.right=r;break}i=i.right}this._fixInsert(r)}else this.root=r;return this.length++,this.root.blacken(),r}},{key:"_fixInsert",value:function(t){if(null===t.parent)return void t.blacken();if(!t.parent.isBlack()){var e=t.getUncle();null!==e&&e.isRed()?(t.parent.blacken(),e.blacken(),t.grandparent.redden(),this._fixInsert(t.grandparent)):(t===t.parent.right&&t.parent===t.grandparent.left?(t.parent.rotateLeft(this),t=t.left):t===t.parent.left&&t.parent===t.grandparent.right&&(t.parent.rotateRight(this),t=t.right),t.parent.blacken(),t.grandparent.redden(),t===t.parent.left?t.grandparent.rotateRight(this):t.grandparent.rotateLeft(this))}}},{key:"flush",value:function(){}}]),n}();t.utils.RBTree=n}function p(t){if(t=String(t),!(t.length>100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return n*j;case"days":case"day":case"d":return n*N;case"hours":case"hour":case"hrs":case"hr":case"h":return n*V;case"minutes":case"minute":case"mins":case"min":case"m":return n*P;case"seconds":case"second":case"secs":case"sec":case"s":return n*x;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function g(t){return t>=N?Math.round(t/N)+"d":t>=V?Math.round(t/V)+"h":t>=P?Math.round(t/P)+"m":t>=x?Math.round(t/x)+"s":t+"ms"}function v(t){return y(t,N,"day")||y(t,V,"hour")||y(t,P,"minute")||y(t,x,"second")||t+" ms"}function y(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}function m(t){var e;e=null===w.sourceDir?null:w.sourceDir||"/bower_components";for(var n="undefined"!=typeof regeneratorRuntime?".js":".es6",r=[],i=0;i<t.length;i++){var s=t[i].split("(")[0],o="y-"+s.toLowerCase();if(null==w[s])if(null==R[s])if("undefined"!=typeof window&&"undefined"!==window.Y){var a;!function(){null!=e&&(a=document.createElement("script"),a.src=e+"/"+o+"/"+o+n,document.head.appendChild(a));var t={};R[s]=t,t.promise=new Promise(function(e){t.resolve=e}),r.push(t.promise)}()}else console.info("YJS: Please do not depend on automatic requiring of modules anymore! Extend modules as follows `require('y-modulename')(Y)`"),require(o)(w);else r.push(R[t[i]].promise)}return Promise.all(r)}function w(t){t.hasOwnProperty("sourceDir")&&(w.sourceDir=t.sourceDir),t.types=null!=t.types?t.types:[];var e=[t.db.name,t.connector.name].concat(t.types);for(var n in t.share)e.push(t.share[n]);return new Promise(function(n,r){null==t?r(new Error("An options object is expected!")):null==t.connector?r(new Error("You must specify a connector! (missing connector property)")):null==t.connector.name?r(new Error("You must specify connector name! (missing connector.name property)")):null==t.db?r(new Error("You must specify a database! (missing db property)")):null==t.connector.name?r(new Error("You must specify db name! (missing db.name property)")):(t=w.utils.copyObject(t),t.connector=w.utils.copyObject(t.connector),t.db=w.utils.copyObject(t.db),t.share=w.utils.copyObject(t.share),w.requestModules(e).then(function(){var e=new W(t),i=!1;null!=t.timeout&&t.timeout>=0&&setTimeout(function(){i||(r(new Error("Yjs init timeout")),e.destroy())},t.timeout),null!=e.persistence&&e.persistence.retrieveContent(),e.db.whenUserIdSet(function(){e.init(function(){i=!0,n(e)},r)})}).catch(r))})}String.fromCodePoint||function(){var t=function(){try{var t={},e=Object.defineProperty,n=e(t,t,t)&&e}catch(t){}return n}(),e=String.fromCharCode,n=Math.floor,r=function(t){var r,i,s=[],o=-1,a=arguments.length;if(!a)return"";for(var l="";++o<a;){var u=Number(arguments[o]);if(!isFinite(u)||u<0||u>1114111||n(u)!=u)throw RangeError("Invalid code point: "+u);u<=65535?s.push(u):(u-=65536,r=55296+(u>>10),i=u%1024+56320,s.push(r,i)),(o+1==a||s.length>16384)&&(l+=e.apply(null,s),s.length=0)}return l};t?t(String,"fromCodePoint",{value:r,configurable:!0,writable:!0}):String.fromCodePoint=r}(),String.prototype.codePointAt||function(){var t=function(){try{var t={},e=Object.defineProperty,n=e(t,t,t)&&e}catch(t){}return n}(),e=function(t){if(null==this)throw TypeError();var e=String(this),n=e.length,r=t?Number(t):0;if(r!=r&&(r=0),!(r<0||r>=n)){var i,s=e.charCodeAt(r);return s>=55296&&s<=56319&&n>r+1&&(i=e.charCodeAt(r+1))>=56320&&i<=57343?1024*(s-55296)+i-56320+65536:s}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var b=t(function(t){t.require;var e={isNotUTF8:function(t,n,r){try{e.getStringFromBytes(t,n,r,!0)}catch(t){return!0}return!1},getCharLength:function(t){return 240==(240&t)?4:224==(224&t)?3:192==(192&t)?2:t==(127&t)?1:0},getCharCode:function(t,n,r){var i=0,s="";if(n=n||0,0==(r=r||e.getCharLength(t[n])))throw new Error(t[n].toString(2)+" is not a significative byte (offset:"+n+").");if(1===r)return t[n];if(s="00000000".slice(0,r)+1+"00000000".slice(r+1),t[n]&parseInt(s,2))throw Error("Index "+n+": A "+r+" bytes encoded char cannot encode the "+(r+1)+"th rank bit to 1.");for(s="0000".slice(0,r+1)+"11111111".slice(r+1),i+=(t[n]&parseInt(s,2))<<6*--r;r;){if(128!=(128&t[n+1])||64==(64&t[n+1]))throw Error("Index "+(n+1)+': Next bytes of encoded char must begin with a "10" bit sequence.');i+=(63&t[++n])<<6*--r}return i},getStringFromBytes:function(t,n,r,i){var s,o=[];for(n|=0,r="number"==typeof r?r:t.byteLength||t.length;n<r;n++){if(s=e.getCharLength(t[n]),n+s>r){if(i)throw Error("Index "+n+": Found a "+s+" bytes encoded char declaration but only "+(r-n)+" bytes are available.")}else o.push(String.fromCodePoint(e.getCharCode(t,n,s,i)));n+=s-1}return o.join("")},getBytesForCharCode:function(t){if(t<128)return 1;if(t<2048)return 2;if(t<65536)return 3;if(t<2097152)return 4;throw new Error("CharCode "+t+" cannot be encoded with UTF8.")},setBytesFromCharCode:function(t,n,r,i){if(t|=0,n=n||[],r|=0,1==(i=i||e.getBytesForCharCode(t)))n[r]=t;else for(n[r++]=(parseInt("1111".slice(0,i),2)<<8-i)+(t>>>6*--i);i>0;)n[r++]=t>>>6*--i&63|128;return n},setBytesFromString:function(t,n,r,i,s){t=t||"",n=n||[],r|=0,i="number"==typeof i?i:n.byteLength||1/0;for(var o=0,a=t.length;o<a;o++){var l=e.getBytesForCharCode(t[o].codePointAt(0));if(s&&r+l>i)throw new Error('Not enought bytes to encode the char "'+t[o]+'" at the offset "'+r+'".');e.setBytesFromCharCode(t[o].codePointAt(0),n,r,l,s),r+=l}return n}};t.exports=e}),O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},k=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},S=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),I=function t(e,n,r){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,n);if(void 0===i){var s=Object.getPrototypeOf(e);return null===s?void 0:t(s,n,r)}if("value"in i)return i.value;var o=i.get;if(void 0!==o)return o.call(r)},B=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)},U=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},C=function(){function t(){k(this,t),this.data=[]}return S(t,[{key:"createBuffer",value:function(){return Uint8Array.from(this.data).buffer}},{key:"writeUint8",value:function(t){this.data.push(255&t)}},{key:"setUint8",value:function(t,e){this.data[t]=255&e}},{key:"writeUint16",value:function(t){this.data.push(255&t,t>>>8&255)}},{key:"setUint16",value:function(t,e){this.data[t]=255&e,this.data[t+1]=e>>>8&255}},{key:"writeUint32",value:function(t){for(var e=0;e<4;e++)this.data.push(255&t),t>>>=8}},{key:"setUint32",value:function(t,e){for(var n=0;n<4;n++)this.data[t+n]=255&e,e>>>=8}},{key:"writeVarUint",value:function(t){for(;t>=128;)this.data.push(128|127&t),t>>>=7;this.data.push(127&t)}},{key:"writeVarString",value:function(t){var e=b.setBytesFromString(t),n=e.length;this.writeVarUint(n);for(var r=0;r<n;r++)this.data.push(e[r])}},{key:"writeOpID",value:function(t){var e=t[0];this.writeVarUint(e),16777215!==e?this.writeVarUint(t[1]):this.writeVarString(t[1])}},{key:"length",get:function(){return this.data.length}},{key:"pos",get:function(){return this.data.length}}]),t}(),_=function(){function t(e){if(k(this,t),e instanceof ArrayBuffer)this.uint8arr=new Uint8Array(e);else{if(!(e instanceof Uint8Array||"undefined"!=typeof Buffer&&e instanceof Buffer))throw new Error("Expected an ArrayBuffer or Uint8Array!");this.uint8arr=e}this.pos=0}return S(t,[{key:"skip8",value:function(){this.pos++}},{key:"readUint8",value:function(){return this.uint8arr[this.pos++]}},{key:"readUint32",value:function(){var t=this.uint8arr[this.pos]+(this.uint8arr[this.pos+1]<<8)+(this.uint8arr[this.pos+2]<<16)+(this.uint8arr[this.pos+3]<<24);return this.pos+=4,t}},{key:"peekUint8",value:function(){return this.uint8arr[this.pos]}},{key:"readVarUint",value:function(){for(var t=0,e=0;;){var n=this.uint8arr[this.pos++];if(t|=(127&n)<<e,e+=7,n<128)return t>>>0;if(e>35)throw new Error("Integer out of range!")}}},{key:"readVarString",value:function(){for(var t=this.readVarUint(),e=new Array(t),n=0;n<t;n++)e[n]=this.uint8arr[this.pos++];return b.getStringFromBytes(e)}},{key:"peekVarString",value:function(){var t=this.pos,e=this.readVarString();return this.pos=t,e}},{key:"readOpID",value:function(){var t=this.readVarUint();return 16777215!==t?[t,this.readVarUint()]:[t,this.readVarString()]}}]),t}(),E=0,T=1,D=2,L=3,A=4,x=1e3,P=60*x,V=60*P,N=24*V,j=365.25*N,q=function(t,e){e=e||{};var n=void 0===t?"undefined":O(t);if("string"===n&&t.length>0)return p(t);if("number"===n&&!1===isNaN(t))return e.long?v(t):g(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))},F=t(function(t,e){function n(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}function r(t){function r(){if(r.enabled){var t=r,n=+new Date,i=n-(l||n);t.diff=i,t.prev=l,t.curr=n,l=n;for(var s=new Array(arguments.length),o=0;o<s.length;o++)s[o]=arguments[o];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var a=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;a++;var i=e.formatters[r];if("function"==typeof i){var o=s[a];n=i.call(t,o),s.splice(a,1),a--}return n}),e.formatArgs.call(t,s);(r.log||e.log||console.log.bind(console)).apply(t,s)}}return r.namespace=t,r.enabled=e.enabled(t),r.useColors=e.useColors(),r.color=n(t),"function"==typeof e.init&&e.init(r),r}function i(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&(t=n[i].replace(/\*/g,".*?"),"-"===t[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))}function s(){e.enable("")}function o(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1}function a(t){return t instanceof Error?t.stack||t.message:t}e=t.exports=r.debug=r.default=r,e.coerce=a,e.disable=s,e.enable=i,e.enabled=o,e.humanize=q,e.names=[],e.skips=[],e.formatters={};var l}),M=t(function(t,e){function n(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function r(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var i=0,s=0;t[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(i++,"%c"===t&&(s=i))}),t.splice(s,0,r)}}function i(){return"object"===("undefined"==typeof console?"undefined":O(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}}function o(){var t;try{t=e.storage.debug}catch(t){}return!t&&"undefined"!=typeof process&&"env"in process&&(t=process.env.DEBUG),t}e=t.exports=F,e.log=i,e.formatArgs=r,e.save=s,e.load=o,e.useColors=n,e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(o())});!function(t){var e=function(){function e(n,r){if(k(this,e),this.y=n,null==r&&(r={}),this.opts=r,this.preferUntransformed=r.preferUntransformed||!1,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.log=t.debug("y:connector"),this.logMessage=t.debug("y:connector-message"),this.y.db.forwardAppliedOperations=r.forwardAppliedOperations||!1,this.role=r.role,this.connections=new Map,this.isSynced=!1,this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null,this.debug=!0===r.debug,this.broadcastOpBuffer=[],this.protocolVersion=11,this.authInfo=r.auth||null,this.checkAuth=r.checkAuth||function(){return Promise.resolve("write")},!1!==r.generateUserId&&this.setUserId(t.utils.generateUserId()),null==r.maxBufferLength?this.maxBufferLength=-1:this.maxBufferLength=r.maxBufferLength}return S(e,[{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 t=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(e,n){e.isSynced=!1,t._syncWithUser(n)})}},{key:"setUserId",value:function(t){if(null==this.userId){if(!Number.isInteger(t)){var e=new Error("UserId must be an integer!");throw this.y.emit("error",e),e}return this.log('Set userId to "%s"',t),this.userId=t,this.y.db.setUserId(t)}return null}},{key:"onUserEvent",value:function(t){this.userEventListeners.push(t)}},{key:"removeUserEventListener",value:function(t){this.userEventListeners=this.userEventListeners.filter(function(e){return t!==e})}},{key:"userLeft",value:function(t){if(this.connections.has(t)){this.log("%s: User left %s",this.userId,t),this.connections.delete(t),this._setSyncedWith(null);var e=!0,n=!1,r=void 0;try{for(var i,s=this.userEventListeners[Symbol.iterator]();!(e=(i=s.next()).done);e=!0)(0,i.value)({action:"userLeft",user:t})}catch(t){n=!0,r=t}finally{try{!e&&s.return&&s.return()}finally{if(n)throw r}}}}},{key:"userJoined",value:function(t,e,n){if(null==e)throw new Error("You must specify the role of the joined user!");if(this.connections.has(t))throw new Error("This user already joined!");this.log("%s: User joined %s",this.userId,t),this.connections.set(t,{uid:t,isSynced:!1,role:e,processAfterAuth:[],auth:n||null,receivedSyncStep2:!1});var r={};r.promise=new Promise(function(t){r.resolve=t}),this.connections.get(t).syncStep2=r;var i=!0,s=!1,o=void 0;try{for(var a,l=this.userEventListeners[Symbol.iterator]();!(i=(a=l.next()).done);i=!0)(0,a.value)({action:"userJoined",user:t,role:e})}catch(t){s=!0,o=t}finally{try{!i&&l.return&&l.return()}finally{if(s)throw o}}this._syncWithUser(t)}},{key:"whenSynced",value:function(t){this.isSynced?t():this.whenSyncedListeners.push(t)}},{key:"_syncWithUser",value:function(t){"slave"!==this.role&&s(this,t)}},{key:"_fireIsSyncedListeners",value:function(){var t=this;this.y.db.whenTransactionsFinished().then(function(){if(!t.isSynced){t.isSynced=!0;var e=!0,n=!1,r=void 0;try{for(var i,s=t.whenSyncedListeners[Symbol.iterator]();!(e=(i=s.next()).done);e=!0)(0,i.value)()}catch(t){n=!0,r=t}finally{try{!e&&s.return&&s.return()}finally{if(n)throw r}}t.whenSyncedListeners=[]}})}},{key:"send",value:function(t,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: Send '%y' to %s",this.userId,e,t),this.logMessage("Message: %Y",e)}},{key:"broadcast",value:function(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: Broadcast '%y'",this.userId,t),this.logMessage("Message: %Y",t)}},{key:"broadcastOps",value:function(e){function n(){if(r.broadcastOpBuffer.length>0){var e=new C;e.writeVarString(r.opts.room),e.writeVarString("update");var i=r.broadcastOpBuffer,s=i.length,o=e.pos;e.writeUint32(0);for(var a=0;a<s&&(r.maxBufferLength<0||e.length<r.maxBufferLength);a++){var l=i[a];t.Struct[l.struct].binaryEncode(e,l)}e.setUint32(o,a),r.broadcastOpBuffer=i.slice(a),r.broadcast(e.createBuffer()),a!==s&&setTimeout(n,100)}}e=e.map(function(e){return t.Struct[e.struct].encode(e)});var r=this;0===this.broadcastOpBuffer.length?(this.broadcastOpBuffer=e,this.y.db.whenTransactionsFinished().then(n)):this.broadcastOpBuffer=this.broadcastOpBuffer.concat(e)}},{key:"receiveMessage",value:function(t,e,n){var r=this;if(n=n||!1,!(e instanceof ArrayBuffer||e instanceof Uint8Array))return Promise.reject(new Error("Expected Message to be an ArrayBuffer or Uint8Array!"));if(t===this.userId)return Promise.resolve();var i=new _(e),s=new C,o=i.readVarString();s.writeVarString(o);var a=i.readVarString(),l=this.connections.get(t);if(this.log("%s: Receive '%s' from %s",this.userId,a,t),this.logMessage("Message: %Y",e),null==l&&!n)throw new Error("Received message from unknown peer!");if("sync step 1"===a||"sync step 2"===a){var u=i.readVarUint();if(null==l.auth)return l.processAfterAuth.push([a,l,i,s,t]),this.checkAuth(u,this.y,t).then(function(t){null==l.auth&&(l.auth=t,r.y.emit("userAuthenticated",{user:l.uid,auth:t}));var e=l.processAfterAuth;return l.processAfterAuth=[],e.reduce(function(t,e){return t.then(function(){return r.computeMessage(e[0],e[1],e[2],e[3],e[4])})},Promise.resolve())})}if(n||null!=l.auth)return this.computeMessage(a,l,i,s,t,n);l.processAfterAuth.push([a,l,i,s,t,!1])}},{key:"computeMessage",value:function(t,e,n,r,s,o){return"sync step 1"!==t||"write"!==e.auth&&"read"!==e.auth?"sync step 2"===t&&"write"===e.auth?f(n,r,this,e,s):"update"!==t||!o&&"write"!==e.auth?Promise.reject(new Error("Unable to receive message")):i(n,r,this,e,s):(a(n,r,this,e,s),this.y.db.whenTransactionsFinished())}},{key:"_setSyncedWith",value:function(t){null!=t&&(this.connections.get(t).isSynced=!0);var e=Array.from(this.connections.values());e.length>0&&e.every(function(t){return t.isSynced})&&this._fireIsSyncedListeners()}}]),e}();t.AbstractConnector=e}(w),function(t){var e=function(){function e(n,r){k(this,e),this.y=n,this.opts=r,this.saveOperationsBuffer=[],this.log=t.debug("y:persistence")}return S(e,[{key:"saveToMessageQueue",value:function(t){this.log("Room %s: Save message to message queue",this.y.options.connector.room)}},{key:"saveOperations",value:function(e){var n=this;e=e.map(function(e){return t.Struct[e.struct].encode(e)});var r=function(){if(n.saveOperationsBuffer.length>0){var e=new C;e.writeVarString(n.opts.room),e.writeVarString("update");var r=n.saveOperationsBuffer;n.saveOperationsBuffer=[];var i=r.length;e.writeUint32(i);for(var s=0;s<i;s++){var o=r[s];t.Struct[o.struct].binaryEncode(e,o)}n.saveToMessageQueue(e.createBuffer())}};0===this.saveOperationsBuffer.length?(this.saveOperationsBuffer=e,this.y.db.whenTransactionsFinished().then(r)):this.saveOperationsBuffer=this.saveOperationsBuffer.concat(e)}}]),e}();t.AbstractPersistence=e}(w),function(t){var e=function(){function e(t,n){function r(){return i.whenTransactionsFinished().then(function(){return i.gcTimeout>0&&(i.gc1.length>0||i.gc2.length>0)?(i.y.connector.isSynced||console.warn("gc should be empty when not synced!"),new Promise(function(t){i.requestTransaction(function(){if(null!=i.y.connector&&i.y.connector.isSynced){for(var e=0;e<i.gc2.length;e++){var n=i.gc2[e];this.garbageCollectOperation(n)}i.gc2=i.gc1,i.gc1=[]}i.gcTimeout>0&&(i.gcInterval=setTimeout(r,i.gcTimeout)),t()})})):(i.gcTimeout>0&&(i.gcInterval=setTimeout(r,i.gcTimeout)),Promise.resolve())})}k(this,e),this.y=t,n.gc=!0===n.gc,this.dbOpts=n;var i=this;this.userId=null;var s;this.userIdPromise=new Promise(function(t){s=t}),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 YConcurrencyTestingMode&&(this.executeOrder=[]),this.gc1=[],this.gc2=[],this.garbageCollect=r,this.startGarbageCollector(),this.repairCheckInterval=n.repairCheckInterval?n.repairCheckInterval:6e3,this.opsReceivedTimestamp=new Date,this.startRepairCheck()}return S(e,[{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 t=this;this.repairCheckInterval>0&&(this.repairCheckIntervalHandler=setInterval(function(){new Date-t.opsReceivedTimestamp>t.repairCheckInterval&&Object.keys(t.listenersById).length>0&&(t.listenersById={},t.opsReceivedTimestamp=new Date,t.y.connector.repair())
|
|
},this.repairCheckInterval))}},{key:"stopRepairCheck",value:function(){clearInterval(this.repairCheckIntervalHandler)}},{key:"queueGarbageCollector",value:function(t){this.y.connector.isSynced&&this.gc&&this.gc1.push(t)}},{key:"emptyGarbageCollector",value:function(){var t=this;return new Promise(function(e){var n=function n(){t.gc1.length>0||t.gc2.length>0?t.garbageCollect().then(n):e()};setTimeout(n,0)})}},{key:"addToDebug",value:function(){if("undefined"!=typeof YConcurrencyTestingMode){var t=Array.prototype.map.call(arguments,function(t){return"string"==typeof t?t:JSON.stringify(t)}).join("").replace(/"/g,"'").replace(/,/g,", ").replace(/:/g,": ");this.executeOrder.push(t)}}},{key:"getDebugData",value:function(){console.log(this.executeOrder.join("\n"))}},{key:"stopGarbageCollector",value:function(){var t=this;return this.gc=!1,this.gcTimeout=-1,new Promise(function(e){t.requestTransaction(function(){var n=t.gc1.concat(t.gc2);t.gc1=[],t.gc2=[];for(var r=0;r<n.length;r++){var i=this.getOperation(n[r]);null!=i&&(delete i.gc,this.setOperation(i))}e()})})}},{key:"addToGarbageCollector",value:function(t,e){if(null==t.gc&&!0===t.deleted&&this.store.gc&&this.store.y.connector.isSynced){var n=!1;if(null!=e&&!0===e.deleted?n=!0:null!=t.content&&t.content.length>1&&(t=this.getInsertionCleanStart([t.id[0],t.id[1]+1]),n=!0),n)return t.gc=!0,this.setOperation(t),this.store.queueGarbageCollector(t.id),!0}return!1}},{key:"removeFromGarbageCollector",value:function(e){function n(n){return!t.utils.compareIds(n,e.id)}this.gc1=this.gc1.filter(n),this.gc2=this.gc2.filter(n),delete e.gc}},{key:"destroyTypes",value:function(){for(var t in this.initializedTypes){var e=this.initializedTypes[t];null!=e._destroy?e._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:function(){clearTimeout(this.gcInterval),this.gcInterval=null,this.stopRepairCheck()}},{key:"setUserId",value:function(t){if(!this.userIdPromise.inProgress){this.userIdPromise.inProgress=!0;var e=this;e.requestTransaction(function(){e.userId=t;var n=this.getState(t);e.opClock=n.clock,e.userIdPromise.resolve(t)})}return this.userIdPromise}},{key:"whenUserIdSet",value:function(t){this.userIdPromise.then(t)}},{key:"getNextOpId",value:function(t){if(null==t)throw new Error("getNextOpId expects the number of created ids to create!");if(null==this.userId)throw new Error("OperationStore not yet initialized!");var e=[this.userId,this.opClock];return this.opClock+=t,e}},{key:"applyOperations",value:function(e){this.opsReceivedTimestamp=new Date;for(var n=e.readUint32(),r=0;r<n;r++){var i=t.Struct.binaryDecodeOperation(e);if(null==i.id||i.id[0]!==this.y.connector.userId){var s=t.Struct[i.struct].requiredOps(i);null!=i.requires&&(s=s.concat(i.requires)),this.whenOperationsExist(s,i)}}}},{key:"whenOperationsExist",value:function(t,e){if(t.length>0)for(var n={op:e,missing:t.length},r=0;r<t.length;r++){var i=t[r],s=JSON.stringify(i),o=this.listenersById[s];null==o&&(o=[],this.listenersById[s]=o),o.push(n)}else this.listenersByIdExecuteNow.push({op:e});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var a=this;this.requestTransaction(function(){var t=a.listenersByIdExecuteNow;a.listenersByIdExecuteNow=[];var e=a.listenersById;a.listenersById={},a.listenersByIdRequestPending=!1;for(var n=0;n<t.length;n++){var r=t[n].op;a.tryExecute.call(this,r)}for(var i in e){var s=e[i],o=JSON.parse(i);if(null==("string"==typeof o[1]?this.getOperation(o):this.getInsertion(o)))a.listenersById[i]=s;else for(var l=0;l<s.length;l++){var u=s[l],c=u.op;0==--u.missing&&a.tryExecute.call(this,c)}}})}}},{key:"tryExecute",value:function(e){if(this.store.addToDebug("this.store.tryExecute.call(this, ",JSON.stringify(e),")"),"Delete"===e.struct)t.Struct.Delete.execute.call(this,e);else{for(var n=this.getInsertion(e.id);null!=n&&null!=n.content&&n.id[1]+n.content.length<e.id[1]+e.content.length;){var r=n.content.length-(e.id[1]-n.id[1]);e.content.splice(0,r),e.id=[e.id[0],e.id[1]+r],e.left=t.utils.getLastId(n),e.origin=e.left,n=this.getOperation(e.id)}if(null==n){var i=e.id;this.isGarbageCollected(i)||(t.Struct[e.struct].execute.call(this,e),this.addOperation(e),this.store.operationAdded(this,e),e=this.getOperation(i),this.tryCombineWithLeft(e))}}}},{key:"operationAdded",value:function(e,n){if("Delete"===n.struct){var r=this.initializedTypes[JSON.stringify(n.targetParent)];null!=r&&r._changed(e,n)}else{e.updateState(n.id[0]);for(var i=null!=n.content?n.content.length:1,s=0;s<i;s++){var o=JSON.stringify([n.id[0],n.id[1]+s]),a=this.listenersById[o];if(delete this.listenersById[o],null!=a)for(var l in a){var u=a[l];0==--u.missing&&this.whenOperationsExist([],u.op)}}var c=this.initializedTypes[JSON.stringify(n.parent)];if(null!=n.parent&&e.isDeleted(n.parent))return void e.deleteList(n.id);if(null!=c){var h=t.utils.copyOperation(n);c._changed(e,h)}if(!n.deleted)for(var f=null!=n.content?n.content.length:1,d=n.id,p=0;p<f;p++){var g=[d[0],d[1]+p],v=e.isDeleted(g);if(v){var y={struct:"Delete",target:g};this.tryExecute.call(e,y)}}}}},{key:"whenTransactionsFinished",value:function(){if(this.transactionInProgress){if(null==this.transactionsFinished){var t,e=new Promise(function(e){t=e});this.transactionsFinished={resolve:t,promise:e}}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,function(){this.flush()}):(this.transactionIsFlushed=!1,this.waitingTransactions.shift())}},{key:"requestTransaction",value:function(t,e){var n=this;this.waitingTransactions.push(t),this.transactionInProgress||(this.transactionInProgress=!0,setTimeout(function(){n.transact(n.getNextRequest())},0))}},{key:"getType",value:function(t){return this.initializedTypes[JSON.stringify(t)]}},{key:"initType",value:function(e,n){var r=JSON.stringify(e),i=this.store.initializedTypes[r];if(null==i){var s=this.getOperation(e);null!=s&&(i=t[s.type].typeDefinition.initType.call(this,this.store,s,n),this.store.initializedTypes[r]=i)}return i}},{key:"createType",value:function(e,n){var r=e[0].struct;n=n||this.getNextOpId(1);var i=t.Struct[r].create(n,e[1]);i.type=e[0].name,this.requestTransaction(function(){16777215===i.id[0]?this.setOperation(i):this.applyCreatedOperations([i])});var s=t[i.type].typeDefinition.createType(this,i,e[1]);return this.initializedTypes[JSON.stringify(i.id)]=s,s}}]),e}();t.AbstractDatabase=e}(w),function(t){var e=function(){function e(){k(this,e)}return S(e,[{key:"applyCreatedOperations",value:function(e){for(var n=[],r=0;r<e.length;r++){var i=e[r];this.store.tryExecute.call(this,i),null!=i.id&&"string"==typeof i.id[1]||n.push(t.Struct[i.struct].encode(i))}n.length>0&&(this.store.y.connector.broadcastOps(n),null!=this.store.y.persistence&&this.store.y.persistence.saveOperations(n))}},{key:"deleteList",value:function(t){for(;null!=t;){if(t=this.getOperation(t),!t.gc){t.gc=!0,t.deleted=!0,this.setOperation(t);var e=null!=t.content?t.content.length:1;this.markDeleted(t.id,e),null!=t.opContent&&this.deleteOperation(t.opContent),this.store.queueGarbageCollector(t.id)}t=t.right}}},{key:"deleteOperation",value:function(t,e,n){for(null==e&&(e=1),this.markDeleted(t,e);e>0;){var r=!1,i=this.os.findWithUpperBound([t[0],t[1]+e-1]),s=null!=i&&null!=i.content?i.content.length:1;if(null==i||i.id[0]!==t[0]||i.id[1]+s<=t[1]?(i=null,e=0):(i.deleted||(i.id[1]<t[1]&&(i=this.getInsertionCleanStart(t),s=i.content.length),i.id[1]+s>t[1]+e&&(i=this.getInsertionCleanEnd([t[0],t[1]+e-1]),s=i.content.length)),e=i.id[1]-t[1]),null!=i){if(!i.deleted){if(r=!0,i.deleted=!0,null!=i.start&&this.deleteList(i.start),null!=i.map)for(var o in i.map)this.deleteList(i.map[o]);if(null!=i.opContent&&this.deleteOperation(i.opContent),null!=i.requires)for(var a=0;a<i.requires.length;a++)this.deleteOperation(i.requires[a])}var l;l=null!=i.left?this.getInsertion(i.left):null,this.setOperation(i);var u;u=null!=i.right?this.getOperation(i.right):null,r&&!n&&this.store.operationAdded(this,{struct:"Delete",target:i.id,length:s,targetParent:i.parent}),this.store.addToGarbageCollector.call(this,i,l),null!=u&&this.store.addToGarbageCollector.call(this,u,i)}}}},{key:"markGarbageCollected",value:function(e,n){this.store.addToDebug("this.markGarbageCollected(",e,", ",n,")");var r=this.markDeleted(e,n);if(r.id[1]<e[1]&&!r.gc){var i=r.len-(e[1]-r.id[1]);r.len-=i,this.ds.put(r),r={id:e,len:i,gc:!1},this.ds.put(r)}var s=this.ds.findPrev(e),o=this.ds.findNext(e);e[1]+n<r.id[1]+r.len&&!r.gc&&(this.ds.put({id:[e[0],e[1]+n],len:r.len-n,gc:!1}),r.len=n),r.gc=!0,null!=s&&s.gc&&t.utils.compareIds([s.id[0],s.id[1]+s.len],r.id)&&(s.len+=r.len,this.ds.delete(r.id),r=s),null!=o&&o.gc&&t.utils.compareIds([r.id[0],r.id[1]+r.len],o.id)&&(r.len+=o.len,this.ds.delete(o.id)),this.ds.put(r),this.updateState(r.id[0])}},{key:"markDeleted",value:function(t,e){null==e&&(e=1);var n=this.ds.findWithUpperBound(t);if(null!=n&&n.id[0]===t[0])if(n.id[1]<=t[1]&&t[1]<=n.id[1]+n.len){var r=t[1]+e-(n.id[1]+n.len);if(!(r>0))return n;if(n.gc){if(!((r=n.id[1]+n.len-t[1])<e))throw new Error("DS reached an inconsistent state. Please report this issue!");n={id:[t[0],t[1]+r],len:e-r,gc:!1},this.ds.put(n)}else n.len+=r}else n={id:t,len:e,gc:!1},this.ds.put(n);else n={id:t,len:e,gc:!1},this.ds.put(n);var i=this.ds.findNext(n.id);if(null!=i&&n.id[0]===i.id[0]&&n.id[1]+n.len>=i.id[1])for(r=n.id[1]+n.len-i.id[1];r>=0;){if(i.gc){n.len-=r,r>=i.len&&(r-=i.len)>0&&(this.ds.put(n),this.markDeleted([i.id[0],i.id[1]+i.len],r));break}if(!(r>i.len)){n.len+=i.len-r,this.ds.delete(i.id);break}var s=this.ds.findNext(i.id);if(this.ds.delete(i.id),null==s||n.id[0]!==s.id[0])break;i=s,r=n.id[1]+n.len-i.id[1]}return this.ds.put(n),n}},{key:"garbageCollectAfterSync",value:function(){(this.store.gc1.length>0||this.store.gc2.length>0)&&console.warn("gc should be empty after sync"),this.store.gc&&this.os.iterate(this,null,null,function(t){if(t.gc&&(delete t.gc,this.setOperation(t)),null!=t.parent&&this.isDeleted(t.parent)){if(t.gc=!0,!t.deleted&&(this.markDeleted(t.id,null!=t.content?t.content.length:1),t.deleted=!0,null!=t.opContent&&this.deleteOperation(t.opContent),null!=t.requires))for(var e=0;e<t.requires.length;e++)this.deleteOperation(t.requires[e]);return this.setOperation(t),void this.store.gc1.push(t.id)}if(t.deleted){var n=null;null!=t.left&&(n=this.getInsertion(t.left)),this.store.addToGarbageCollector.call(this,t,n)}})}},{key:"garbageCollectOperation",value:function(e){this.store.addToDebug("this.garbageCollectOperation(",e,")");var n=this.getOperation(e);if(this.markGarbageCollected(e,null!=n&&null!=n.content?n.content.length:1),null!=n){var r=[];null!=n.opContent&&r.push(n.opContent),null!=n.requires&&(r=r.concat(n.requires));for(var i=0;i<r.length;i++){var s=this.getOperation(r[i]);null!=s?(s.deleted||(this.deleteOperation(s.id),s=this.getOperation(s.id)),s.gc=!0,this.setOperation(s),this.store.queueGarbageCollector(s.id)):this.markGarbageCollected(r[i],1)}if(null!=n.left){var o=this.getInsertion(n.left);o.right=n.right,this.setOperation(o)}if(null!=n.right){var a=this.getOperation(n.right);if(a.left=n.left,this.setOperation(a),null!=n.originOf&&n.originOf.length>0){var l=n.left;for(var u in n.originOf){var c=this.getOperation(n.originOf[u]);null!=c&&(c.origin=l,this.setOperation(c))}if(null!=l){var h=this.getInsertion(l);null==h.originOf?h.originOf=n.originOf:h.originOf=n.originOf.concat(h.originOf),this.setOperation(h)}}}if(null!=n.origin){var f=this.getInsertion(n.origin);f.originOf=f.originOf.filter(function(n){return!t.utils.compareIds(e,n)}),this.setOperation(f)}var d;if(null!=n.parent&&(d=this.getOperation(n.parent)),null!=d){var p=!1;null!=n.parentSub?t.utils.compareIds(d.map[n.parentSub],n.id)&&(p=!0,null!=n.right?d.map[n.parentSub]=n.right:delete d.map[n.parentSub]):(t.utils.compareIds(d.start,n.id)&&(p=!0,d.start=n.right),t.utils.matchesId(n,d.end)&&(p=!0,d.end=n.left)),p&&this.setOperation(d)}this.removeOperation(n.id)}}},{key:"checkDeleteStoreForState",value:function(t){var e=this.ds.findWithUpperBound([t.user,t.clock]);null!=e&&e.id[0]===t.user&&e.gc&&(t.clock=Math.max(t.clock,e.id[1]+e.len))}},{key:"updateState",value:function(t){var e=this.getState(t);this.checkDeleteStoreForState(e);for(var n=this.getInsertion([t,e.clock]),r=null!=n&&null!=n.content?n.content.length:1;null!=n&&t===n.id[0]&&n.id[1]<=e.clock&&n.id[1]+r>e.clock;)e.clock+=r,this.checkDeleteStoreForState(e),n=this.os.findNext(n.id),r=null!=n&&null!=n.content?n.content.length:1;this.setState(e)}},{key:"applyDeleteSet",value:function(t){for(var e=this,n=[],r=t.readUint32(),i=0;i<r;i++){var s,o;!function(r){for(var i=t.readVarUint(),a=[],l=t.readVarUint(),u=0;u<l;u++){var c=t.readVarUint(),h=t.readVarUint(),f=1===t.readUint8();a.push([c,h,f])}for(s=0,o=a[s],e.ds.iterate(e,[i,0],[i,Number.MAX_VALUE],function(t){for(;null!=o;){var e=0;if(t.id[1]+t.len<=o[0])break;o[0]<t.id[1]?(e=Math.min(t.id[1]-o[0],o[1]),n.push([i,o[0],e,o[2]])):(e=t.id[1]+t.len-o[0],o[2]&&!t.gc&&n.push([i,o[0],Math.min(e,o[1]),o[2]])),o[1]<=e?o=a[++s]:(o[0]=o[0]+e,o[1]=o[1]-e)}});s<a.length;s++)o=a[s],n.push([i,o[0],o[1],o[2]])}()}for(var a=0;a<n.length;a++){var l=n[a];if(this.deleteOperation([l[0],l[1]],l[2]),l[3]){this.markGarbageCollected([l[0],l[1]],l[2]);for(var u=l[1]+l[2];u>=l[1];){var c=this.os.findWithUpperBound([l[0],u-1]);if(null==c)break;var h=null!=c.content?c.content.length:1;if(c.id[0]!==l[0]||c.id[1]+h<=l[1])break;c.id[1]+h>l[1]+l[2]&&(c=this.getInsertionCleanEnd([l[0],l[1]+l[2]-1])),c.id[1]<l[1]&&(c=this.getInsertionCleanStart([l[0],l[1]])),u=c.id[1],this.garbageCollectOperation(c.id)}}if(this.store.forwardAppliedOperations||null!=this.store.y.persistence){var f=[];f.push({struct:"Delete",target:[l[0],l[1]],length:l[2]}),this.store.forwardAppliedOperations&&this.store.y.connector.broadcastOps(f),null!=this.store.y.persistence&&this.store.y.persistence.saveOperations(f)}}}},{key:"isGarbageCollected",value:function(t){var e=this.ds.findWithUpperBound(t);return null!=e&&e.id[0]===t[0]&&t[1]<e.id[1]+e.len&&e.gc}},{key:"writeDeleteSet",value:function(t){var e=new Map;this.ds.iterate(this,null,null,function(t){var n=t.id[0],r=t.id[1],i=t.len,s=t.gc,o=e.get(n);void 0===o&&(o=[],e.set(n,o)),o.push([r,i,s])});var n=Array.from(e.keys());t.writeUint32(n.length);for(var r=0;r<n.length;r++){var i=n[r],s=e.get(i);t.writeVarUint(i),t.writeVarUint(s.length);for(var o=0;o<s.length;o++){var a=s[o];t.writeVarUint(a[0]),t.writeVarUint(a[1]),t.writeUint8(a[2]?1:0)}}}},{key:"isDeleted",value:function(t){var e=this.ds.findWithUpperBound(t);return null!=e&&e.id[0]===t[0]&&t[1]<e.id[1]+e.len}},{key:"setOperation",value:function(t){return this.os.put(t),t}},{key:"addOperation",value:function(t){this.os.put(t),t.id[0]!==this.store.userId&&"string"!=typeof t.id[1]&&(this.store.forwardAppliedOperations&&this.store.y.connector.broadcastOps([t]),null!=this.store.y.persistence&&this.store.y.persistence.saveOperations([t]))}},{key:"tryCombineWithLeft",value:function(e){if(null!=e&&null!=e.left&&null!=e.content&&e.left[0]===e.id[0]&&t.utils.compareIds(e.left,e.origin)){var n=this.getInsertion(e.left);null==n.content||n.id[1]+n.content.length!==e.id[1]||1!==n.originOf.length||n.gc||n.deleted||e.gc||e.deleted||(null!=e.originOf?n.originOf=e.originOf:delete n.originOf,n.content=n.content.concat(e.content),n.right=e.right,this.os.delete(e.id),this.setOperation(n))}}},{key:"getInsertion",value:function(t){var e=this.os.findWithUpperBound(t);if(null==e)return null;var n=null!=e.content?e.content.length:1;return t[0]===e.id[0]&&t[1]<e.id[1]+n?e:null}},{key:"getInsertionCleanStartEnd",value:function(t){return this.getInsertionCleanStart(t),this.getInsertionCleanEnd(t)}},{key:"getInsertionCleanStart",value:function(e){var n=this.getInsertion(e);if(null!=n){if(n.id[1]===e[1])return n;var r=t.utils.copyObject(n);n.content=r.content.splice(e[1]-n.id[1]),n.id=e;var i=t.utils.getLastId(r);return n.origin=i,r.originOf=[n.id],r.right=n.id,n.left=i,this.setOperation(r),this.setOperation(n),r.gc&&this.store.queueGarbageCollector(n.id),n}return null}},{key:"getInsertionCleanEnd",value:function(e){var n=this.getInsertion(e);if(null!=n){if(null==n.content||n.id[1]+n.content.length-1===e[1])return n;var r=t.utils.copyObject(n);r.content=n.content.splice(e[1]-n.id[1]+1),r.id=[e[0],e[1]+1];var i=t.utils.getLastId(n);return r.origin=i,n.originOf=[r.id],n.right=r.id,r.left=i,this.setOperation(r),this.setOperation(n),n.gc&&this.store.queueGarbageCollector(r.id),n}return null}},{key:"getOperation",value:function(e){var n=this.os.find(e);if(16777215!==e[0]||null!=n)return n;var r=e[1].split("_");if(r.length>1){var i=r[0],s=t[r[1]],o=null;null!=s&&(o=t.utils.parseTypeDefinition(s,r[3]));var a=t.Struct[i].create(e,o);return a.type=r[1],this.setOperation(a),a}throw new Error("Unexpected case. Operation cannot be generated correctly!Incompatible Yjs version?")}},{key:"removeOperation",value:function(t){this.os.delete(t)}},{key:"setState",value:function(t){var e={id:[t.user],clock:t.clock};this.ss.put(e)}},{key:"getState",value:function(t){var e=this.ss.find([t]),n=null==e?null:e.clock;return null==n&&(n=0),{user:t,clock:n}}},{key:"getStateVector",value:function(){var t=[];return this.ss.iterate(this,null,null,function(e){t.push({user:e.id[0],clock:e.clock})}),t}},{key:"getStateSet",value:function(){var t={};return this.ss.iterate(this,null,null,function(e){t[e.id[0]]=e.clock}),t}},{key:"writeStateSet",value:function(t){var e=t.pos,n=0;return t.writeUint32(0),this.ss.iterate(this,null,null,function(e){t.writeVarUint(e.id[0]),t.writeVarUint(e.clock),n++}),t.setUint32(e,n),0===n}},{key:"getOperations",value:function(e){null==e&&(e=new Map);var n=[],r=this.getStateVector(),i=!0,s=!1,o=void 0;try{for(var a,l=r[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var u=a.value,c=u.user;if(16777215!==c){var h=e.get(c)||0;if(h>0){var f=this.getInsertion([c,h]);null!=f&&(h=f.id[1])}e.set(c,h)}}}catch(t){s=!0,o=t}finally{try{!i&&l.return&&l.return()}finally{if(s)throw o}}var d=!0,p=!1,g=void 0;try{for(var v,y=r[Symbol.iterator]();!(d=(v=y.next()).done);d=!0){var m=v.value,w=m.user,b=e.get(w);16777215!==w&&this.os.iterate(this,[w,b],[w,Number.MAX_VALUE],function(r){if(r=t.Struct[r.struct].encode(r),"Insert"!==r.struct)n.push(r);else if(null==r.right||r.right[1]<(e.get(r.right[0])||0))for(var i=r,s=[r],o=r.right;;){if(null==i.left){r.left=null,n.push(r);break}for(i=this.getInsertion(i.left);s.length>0&&t.utils.matchesId(i,s[s.length-1].origin);)s.pop();if(i.id[1]<(e.get(i.id[0])||0)){r.left=t.utils.getLastId(i),n.push(r);break}if(t.utils.matchesId(i,r.origin)){if(r.left=r.origin,n.push(r),r=t.Struct[r.struct].encode(i),r.right=o,s.length>0)throw new Error("Reached inconsistent OS state.Operations are not correctly connected.");s=[r]}else{var a=t.Struct[r.struct].encode(i);a.right=s[s.length-1].id,a.left=a.origin,n.push(a),s.push(i)}}})}}catch(t){p=!0,g=t}finally{try{!d&&y.return&&y.return()}finally{if(p)throw g}}return n.reverse()}},{key:"writeOperations",value:function(e,n){for(var r=new Map,i=n.readUint32(),s=0;s<i;s++){var o=n.readVarUint(),a=n.readVarUint();r.set(o,a)}var l=this.getOperations(r);e.writeUint32(l.length);for(var u=0;u<l.length;u++){var c=l[u];t.Struct[c.struct].binaryEncode(e,t.Struct[c.struct].encode(c))}}},{key:"toBinary",value:function(){var t=new C;return this.writeOperationsUntransformed(t),this.writeDeleteSet(t),t.createBuffer()}},{key:"fromBinary",value:function(t){var e=new _(t);this.applyOperationsUntransformed(e),this.applyDeleteSet(e)}},{key:"writeOperationsUntransformed",value:function(e){var n=e.pos,r=0;e.writeUint32(0),this.os.iterate(this,null,null,function(n){16777215!==n.id[0]&&(r++,t.Struct[n.struct].binaryEncode(e,t.Struct[n.struct].encode(n)))}),e.setUint32(n,r),this.writeStateSet(e)}},{key:"applyOperationsUntransformed",value:function(e){for(var n=e.readUint32(),r=0;r<n;r++){var i=t.Struct.binaryDecodeOperation(e);this.os.put(i)}this.os.iterate(this,null,null,function(e){if(null!=e.parent&&"Insert"===e.struct)if(null!=e.parentSub&&null==e.left){var n=this.getOperation(e.parent);n.map[e.parentSub]=e.id,this.setOperation(n)}else if(null==e.right||null==e.left){var r=this.getOperation(e.parent);null==e.right&&(r.end=t.utils.getLastId(e)),null==e.left&&(r.start=e.id),this.setOperation(r)}});for(var s=e.readUint32(),o=0;o<s;o++){var a=e.readVarUint(),l=e.readVarUint();this.ss.put({id:[a],clock:l})}}},{key:"flush",value:function(){this.os.flush(),this.ss.flush(),this.ds.flush()}}]),e}();t.Transaction=e}(w),function(t){var e={};t.Struct=e,e.binaryDecodeOperation=function(t){var n=t.peekUint8();if(n===E)return e.Delete.binaryDecode(t);if(n===T)return e.Insert.binaryDecode(t);if(n===D)return e.List.binaryDecode(t);if(n===L)return e.Map.binaryDecode(t);if(n===A)return e.Xml.binaryDecode(t);throw new Error("Unable to decode operation!")},e.Delete={encode:function(t){return{target:t.target,length:t.length||0,struct:"Delete"}},binaryEncode:function(t,e){t.writeUint8(E),t.writeOpID(e.target),t.writeVarUint(e.length||0)},binaryDecode:function(t){return t.skip8(),{target:t.readOpID(),length:t.readVarUint(),struct:"Delete"}},requiredOps:function(t){return[]},execute:function(t){return this.deleteOperation(t.target,t.length||1)}},e.Insert={encode:function(t){var e={id:t.id,left:t.left,right:t.right,origin:t.origin,parent:t.parent,struct:t.struct};return null!=t.parentSub&&(e.parentSub=t.parentSub),t.hasOwnProperty("opContent")?e.opContent=t.opContent:e.content=t.content.slice(),e},binaryEncode:function(e,n){e.writeUint8(T);var r=null!=n.content&&n.content.every(function(t){return"string"==typeof t&&1===t.length}),i=t.utils.compareIds(n.left,n.origin),s=(null!=n.parentSub?1:0)|(null!=n.opContent?2:0)|(r?4:0)|(i?8:0)|(null!=n.left?16:0)|(null!=n.right?32:0)|(null!=n.origin?64:0);e.writeUint8(s),e.writeOpID(n.id),e.writeOpID(n.parent),16&s&&e.writeOpID(n.left),32&s&&e.writeOpID(n.right),!i&&64&s&&e.writeOpID(n.origin),1&s&&e.writeVarString(n.parentSub),2&s?e.writeOpID(n.opContent):4&s?e.writeVarString(n.content.join("")):e.writeVarString(JSON.stringify(n.content))},binaryDecode:function(t){var e={struct:"Insert"};t.skip8();var n=t.readUint8();if(e.id=t.readOpID(),e.parent=t.readOpID(),e.left=16&n?t.readOpID():null,e.right=32&n?t.readOpID():null,e.origin=8&n?e.left:64&n?t.readOpID():null,1&n&&(e.parentSub=t.readVarString()),2&n)e.opContent=t.readOpID();else if(4&n)e.content=t.readVarString().split("");else{var r=t.readVarString();e.content=JSON.parse(r)}return e},requiredOps:function(e){var n=[];return null!=e.left&&n.push(e.left),null!=e.right&&n.push(e.right),null==e.origin||t.utils.compareIds(e.left,e.origin)||n.push(e.origin),n.push(e.parent),null!=e.opContent&&n.push(e.opContent),n},getDistanceToOrigin:function(e){if(null==e.left)return 0;for(var n=0,r=this.getInsertion(e.left);!t.utils.matchesId(r,e.origin)&&(n++,null!=r.left);)r=this.getInsertion(r.left);return n},execute:function(n){var r,i=[];if(null!=n.origin){var s=this.getInsertionCleanEnd(n.origin);null==s.originOf&&(s.originOf=[]),s.originOf.push(n.id),this.setOperation(s),null!=s.right&&i.push(s.right)}var o,a,l,u=r=e.Insert.getDistanceToOrigin.call(this,n);if(null!=n.left)o=this.getInsertionCleanEnd(n.left),t.utils.compareIds(n.left,n.origin)||null==o.right||i.push(o.right),o=null==o.right?null:this.getOperation(o.right);else{a=this.getOperation(n.parent);var c=n.parentSub?a.map[n.parentSub]:a.start;l=null==c?null:this.getOperation(c),o=l}for(null!=n.right&&(i.push(n.right),this.getInsertionCleanStart(n.right));null!=o&&!t.utils.compareIds(o.id,n.right);){var h=e.Insert.getDistanceToOrigin.call(this,o);if(h===r)o.id[0]<n.id[0]&&(n.left=t.utils.getLastId(o),u=r+1);else{if(!(h<r))break;r-u<=h&&(n.left=t.utils.getLastId(o),u=r+1)}r++,o=null!=o.right?this.getInsertion(o.right):null}var f=null,d=null;for(null==a&&(a=this.getOperation(n.parent)),null!=n.left?(f=this.getInsertion(n.left),n.right=f.right,f.right=n.id,this.setOperation(f)):n.right=n.parentSub?a.map[n.parentSub]||null:a.start,null!=n.right&&(d=this.getOperation(n.right),d.left=t.utils.getLastId(n),null!=d.gc&&(null!=d.content&&d.content.length>1&&(d=this.getInsertionCleanEnd(d.id)),this.store.removeFromGarbageCollector(d)),this.setOperation(d)),null!=n.parentSub?(null==f&&(a.map[n.parentSub]=n.id,this.setOperation(a)),null!=n.right&&this.deleteOperation(n.right,1,!0),null!=n.left&&this.deleteOperation(n.id,1,!0)):null!=d&&null!=f||(null==d&&(a.end=t.utils.getLastId(n)),null==f&&(a.start=n.id),this.setOperation(a)),r=0;r<i.length;r++){var p=this.getOperation(i[r]);this.tryCombineWithLeft(p)}}},e.List={create:function(t){return{start:null,end:null,struct:"List",id:t}},encode:function(t){return{struct:"List",id:t.id,type:t.type}},binaryEncode:function(t,e){t.writeUint8(D),t.writeOpID(e.id),t.writeVarString(e.type)},binaryDecode:function(t){return t.skip8(),{id:t.readOpID(),type:t.readVarString(),struct:"List",start:null,end:null}},requiredOps:function(){return[]},execute:function(t){t.start=null,t.end=null},ref:function(t,e){if(null==t.start)return null;for(var n=null,r=this.getOperation(t.start);r.deleted||(n=r,e--),e>=0&&null!=r.right;)r=this.getOperation(r.right);return n},map:function(t,e){t=t.start;for(var n=[];null!=t;){var r=this.getOperation(t);r.deleted||n.push(e(r)),t=r.right}return n}},e.Map={create:function(t){return{id:t,map:{},struct:"Map"}},encode:function(t){return{struct:"Map",type:t.type,id:t.id,map:{}}},binaryEncode:function(t,e){t.writeUint8(L),t.writeOpID(e.id),t.writeVarString(e.type)},binaryDecode:function(t){return t.skip8(),{id:t.readOpID(),type:t.readVarString(),struct:"Map",map:{}}},requiredOps:function(){return[]},execute:function(t){t.start=null,t.end=null},get:function(t,e){var n=t.map[e];if(null!=n){var r=this.getOperation(n);return null==r||r.deleted?void 0:null==r.opContent?r.content[0]:this.getType(r.opContent)}}},e.Xml={create:function(t,e){return{id:t,map:{},start:null,end:null,struct:"Xml",nodeName:null!=e?e.nodeName:null}},encode:function(t){return{struct:"Xml",type:t.type,id:t.id,map:{},nodeName:t.nodeName}},binaryEncode:function(t,e){t.writeUint8(A),t.writeOpID(e.id),t.writeVarString(e.type),t.writeVarString(e.nodeName)},binaryDecode:function(t){return t.skip8(),{id:t.readOpID(),type:t.readVarString(),struct:"Xml",map:{},start:null,end:null,nodeName:t.readVarString()}},requiredOps:function(){return[]},execute:function(){},ref:e.List.ref,map:e.List.map,get:e.Map.get}}(w),function(t){function e(t){var e={};for(var n in t)e[n]=t[n];return e}function n(t){return t=e(t),null!=t.content&&(t.content=t.content.map(function(t){return t})),t}function r(t,e){return t[0]<e[0]||t[0]===e[0]&&(t[1]<e[1]||O(t[1])<O(e[1]))}function i(t,e){return t.target[0]===e[0]&&t.target[1]<=e[1]&&e[1]<t.target[1]+(t.length||1)}function s(t,e){return null==t||null==e?t===e:t[0]===e[0]&&t[1]===e[1]}function o(t,e){return null==e||null==t?e===t:e[0]===t.id[0]&&(null==t.content?e[1]===t.id[1]:e[1]>=t.id[1]&&e[1]<t.id[1]+t.content.length)}function a(t){return null==t.content||1===t.content.length?t.id:[t.id[0],t.id[1]+t.content.length-1]}function l(t){for(var e=new Array(t),n=0;n<e.length;n++)e[n]={id:[null,null]};return e}function u(t){return function(t){function e(t,n){k(this,e);var r=U(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.writeBuffer=l(5),r.readBuffer=l(10),r}return B(e,t),S(e,[{key:"find",value:function(t,n){var r,i;for(r=this.readBuffer.length-1;r>=0;r--)if(i=this.readBuffer[r],i.id[1]===t[1]&&i.id[0]===t[0]){for(;r<this.readBuffer.length-1;r++)this.readBuffer[r]=this.readBuffer[r+1];return this.readBuffer[this.readBuffer.length-1]=i,i}var s;for(r=this.writeBuffer.length-1;r>=0;r--)if(i=this.writeBuffer[r],i.id[1]===t[1]&&i.id[0]===t[0]){s=i;break}if(r<0&&void 0===n&&(s=I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"find",this).call(this,t)),null!=s){for(r=0;r<this.readBuffer.length-1;r++)this.readBuffer[r]=this.readBuffer[r+1];this.readBuffer[this.readBuffer.length-1]=s}return s}},{key:"put",value:function(t){var n,r,i=t.id;for(n=this.writeBuffer.length-1;n>=0;n--)if(r=this.writeBuffer[n],r.id[1]===i[1]&&r.id[0]===i[0]){for(;n<this.writeBuffer.length-1;n++)this.writeBuffer[n]=this.writeBuffer[n+1];this.writeBuffer[this.writeBuffer.length-1]=t;break}if(n<0){var s=this.writeBuffer[0];for(null!==s.id[0]&&I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"put",this).call(this,s),n=0;n<this.writeBuffer.length-1;n++)this.writeBuffer[n]=this.writeBuffer[n+1];this.writeBuffer[this.writeBuffer.length-1]=t}for(n=0;n<this.readBuffer.length-1;n++)r=this.readBuffer[n+1],r.id[1]===i[1]&&r.id[0]===i[0]?this.readBuffer[n]=t:this.readBuffer[n]=r;this.readBuffer[this.readBuffer.length-1]=t}},{key:"delete",value:function(t){var n,r;for(n=0;n<this.readBuffer.length;n++)r=this.readBuffer[n],r.id[1]===t[1]&&r.id[0]===t[0]&&(this.readBuffer[n]={id:[null,null]});this.flush(),I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"delete",this).call(this,t)}},{key:"findWithLowerBound",value:function(t){var n=this.find(t,!0);return null!=n?n:(this.flush(),I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"findWithLowerBound",this).apply(this,arguments))}},{key:"findWithUpperBound",value:function(t){var n=this.find(t,!0);return null!=n?n:(this.flush(),I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"findWithUpperBound",this).apply(this,arguments))}},{key:"findNext",value:function(){return this.flush(),I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"findNext",this).apply(this,arguments)}},{key:"findPrev",value:function(){return this.flush(),I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"findPrev",this).apply(this,arguments)}},{key:"iterate",value:function(){this.flush(),I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"iterate",this).apply(this,arguments)}},{key:"flush",value:function(){for(var t=0;t<this.writeBuffer.length;t++){var n=this.writeBuffer[t];null!==n.id[0]&&(I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"put",this).call(this,n),this.writeBuffer[t]={id:[null,null]})}}}]),e}(t)}function c(){if("undefined"!=typeof crypto&&null!=crypto.getRandomValue){var t=new Uint32Array(1);return crypto.getRandomValues(t),t[0]}if("undefined"!=typeof crypto&&null!=crypto.randomBytes){var e=crypto.randomBytes(4);return new Uint32Array(e.buffer)[0]}return Math.ceil(4294967295*Math.random())}t.utils={BinaryDecoder:_,BinaryEncoder:C},t.utils.bubbleEvent=function(t,e){for(t.eventHandler.callEventListeners(e),e.path=[];null!=t&&null!=t._deepEventHandler;){t._deepEventHandler.callEventListeners(e);var n=null;null!=t._parent&&(n=t.os.getType(t._parent)),null!=n&&null!=n._getPathToChild?(e.path=[n._getPathToChild(t._model)].concat(e.path),t=n):t=null}},t.utils.getRelativePosition=function(t,e){return null==t?null:t._content.length<=e?["endof",t._model[0],t._model[1]]:t._content[e].id},t.utils.fromRelativePosition=function(t,e){var n,r=0;"endof"===e[0]?(e=t.db.os.find(e.slice(1)).end,n=t.db.os.findNodeWithUpperBound(e).val,n.deleted||(r=null!=n.content?n.content.length:1)):(n=t.db.os.findNodeWithUpperBound(e).val,n.deleted||(r=e[1]-n.id[1]));var i=t.db.getType(n.parent);if(null==i||t.db.os.find(n.parent).deleted)return null;for(;null!=n.left;)n=t.db.os.findNodeWithUpperBound(n.left).val,n.deleted||(r+=null!=n.content?n.content.length:1);return{type:i,offset:r}};var h=function(){function t(){k(this,t),this._eventListener={}}return S(t,[{key:"on",value:function(t,e){null==this._eventListener[t]&&(this._eventListener[t]=[]),this._eventListener[t].push(e)}},{key:"off",value:function(t,e){
|
|
if(null==t||null==e)throw new Error("You must specify event name and function!");var n=this._eventListener[t]||[];this._eventListener[t]=n.filter(function(t){return t!==e})}},{key:"emit",value:function(t,e){var n=this._eventListener[t]||[];"error"===t&&0===n.length&&console.error(e),n.forEach(function(t){return t(e)})}},{key:"destroy",value:function(){this._eventListener=null}}]),t}();t.utils.NamedEventHandler=h;var f=function(){function t(){k(this,t),this.eventListeners=[]}return S(t,[{key:"destroy",value:function(){this.eventListeners=null}},{key:"addEventListener",value:function(t){this.eventListeners.push(t)}},{key:"removeEventListener",value:function(t){this.eventListeners=this.eventListeners.filter(function(e){return t!==e})}},{key:"removeAllEventListeners",value:function(){this.eventListeners=[]}},{key:"callEventListeners",value:function(t){for(var e=0;e<this.eventListeners.length;e++)try{var n={};for(var r in t)n[r]=t[r];this.eventListeners[e](n)}catch(t){console.error(t)}}}]),t}();t.utils.EventListenerHandler=f;var d=function(e){function n(t){k(this,n);var e=U(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return e.waiting=[],e.awaiting=0,e.onevent=t,e}return B(n,e),S(n,[{key:"destroy",value:function(){I(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"destroy",this).call(this),this.waiting=null,this.onevent=null}},{key:"receivedOp",value:function(t){if(this.awaiting<=0)this.onevent(t);else if("Delete"===t.struct){var e=this;null==t.key?function t(n){if(null==n.length)throw new Error("This shouldn't happen! d.length must be defined!");for(var r=0;r<e.waiting.length;r++){var i=e.waiting[r];if("Insert"===i.struct&&i.id[0]===n.target[0]){var s=i.hasOwnProperty("content")?i.content.length:1,o=n.target[1],a=n.target[1]+(n.length||1),l=i.id[1],u=i.id[1]+s;if(u<=o||a<=l)continue;if(l<o){if(o<u){if(u<a){i.content.splice(o-l),n.length=a-u,n.target=[n.target[0],u];continue}if(u===a)return void i.content.splice(o-l);var c={id:[i.id[0],a],content:i.content.slice(a-l),struct:"Insert"};return e.waiting.push(c),void i.content.splice(o-l)}}else{if(o===l){if(u<a){n.length=a-u,n.target=[n.target[0],u],i.content=[];continue}return u===a?void e.waiting.splice(r,1):(i.content=i.content.slice(a-l),void(i.id=[i.id[0],a]))}if(l<a){if(u<a)return e.waiting.splice(r,1),t({target:[n.target[0],o],length:l-o,struct:"Delete"}),void t({target:[n.target[0],u],length:u-a,struct:"Delete"});if(u===a){e.waiting.splice(r,1),r--,n.length-=s;continue}n.length=l-o,i.content.splice(0,a-l),i.id=[i.id[0],a];continue}}}}e.waiting.push(n)}(t):this.waiting.push(t)}else this.waiting.push(t)}},{key:"awaitAndPrematurelyCall",value:function(e){this.awaiting++,e.map(t.utils.copyOperation).forEach(this.onevent)}},{key:"awaitOps",value:function(e,n,r){var i=this.waiting.length;if(n.apply(e,r),this.waiting.splice(i),this.awaiting>0&&this.awaiting--,0===this.awaiting&&this.waiting.length>0){for(var s=0;s<this.waiting.length;s++){var o=this.waiting[s];if("Insert"===o.struct){var a=e.getInsertion(o.id);if(null!=a.parentSub&&null!=a.left)this.waiting.splice(s,1),s--;else if(t.utils.compareIds(a.id,o.id))if(null==a.left)o.left=null;else{for(var l=e.getInsertion(a.left);null!=l.deleted;){if(null==l.left){l=null;break}l=e.getInsertion(l.left)}o.left=null!=l?t.utils.getLastId(l):null}else o.left=[o.id[0],o.id[1]-1]}}if(null!=this._pullChanges&&this._pullChanges(),0===this.awaiting){var u=[],c=[];this.waiting.forEach(function(t){"Delete"===t.struct?c.push(t):u.push(t)}),this.waiting=[],u=function(e){for(var n=[];e.length>0;)for(var r=0;r<e.length;r++){for(var i=!0,s=0;s<e.length;s++)if(t.utils.matchesId(e[s],e[r].left)){i=!1;break}i&&(n.push(e.splice(r,1)[0]),r--)}return n}(u);for(var h=0;h<u.length;h++){if(0!==this.awaiting){this.waiting=this.waiting.concat(u.slice(h));break}this.onevent(u[h])}for(h=0;h<c.length;h++){if(0!==this.awaiting){this.waiting=this.waiting.concat(c.slice(h));break}this.onevent(c[h])}}}}},{key:"awaitedInserts",value:function(e){for(var n=this.waiting.splice(this.waiting.length-e),r=0;r<n.length;r++){var i=n[r];if("Insert"!==i.struct)throw new Error("Expected Insert Operation!");for(var s=this.waiting.length-1;s>=0;s--){var o=this.waiting[s];"Insert"===o.struct&&(t.utils.matchesId(o,i.left)?(o.right=i.id,i.left=o.left):t.utils.compareIds(o.id,i.right)&&(o.left=t.utils.getLastId(i),i.right=o.right))}}this._tryCallEvents(e)}},{key:"awaitedDeletes",value:function(e,n){for(var r=this.waiting.splice(this.waiting.length-e),i=0;i<r.length;i++){var s=r[i];if("Delete"!==s.struct)throw new Error("Expected Delete Operation!");if(null!=n)for(var o=0;o<this.waiting.length;o++){var a=this.waiting[o];"Insert"===a.struct&&t.utils.compareIds(s.target,a.left)&&(a.left=n)}}this._tryCallEvents(e)}},{key:"_tryCallEvents",value:function(){if(this.awaiting>0&&this.awaiting--,0===this.awaiting&&this.waiting.length>0){var e=[],n=[];this.waiting.forEach(function(t){"Delete"===t.struct?n.push(t):e.push(t)}),e=function(e){for(var n=[];e.length>0;)for(var r=0;r<e.length;r++){for(var i=!0,s=0;s<e.length;s++)if(t.utils.matchesId(e[s],e[r].left)){i=!1;break}i&&(n.push(e.splice(r,1)[0]),r--)}return n}(e),e.forEach(this.onevent),n.forEach(this.onevent),this.waiting=[]}}}]),n}(f);t.utils.EventHandler=d;var p=function(){function t(){k(this,t)}return S(t,[{key:"getPath",value:function(){var t=null;if(null!=this._parent&&(t=this.os.getType(this._parent)),null!=t&&null!=t._getPathToChild){var e=t._getPathToChild(this._model),n=t.getPath();return n.push(e),n}return[]}}]),t}();t.utils.CustomType=p;var g=function t(e){if(k(this,t),null==e.struct||null==e.initType||null==e.class||null==e.name||null==e.createType)throw new Error("Custom type was not initialized correctly!");this.struct=e.struct,this.initType=e.initType,this.createType=e.createType,this.class=e.class,this.name=e.name,null!=e.appendAdditionalInfo&&(this.appendAdditionalInfo=e.appendAdditionalInfo),this.parseArguments=(e.parseArguments||function(){return[this]}).bind(this),this.parseArguments.typeDefinition=this};t.utils.CustomTypeDefinition=g,t.utils.isTypeDefinition=function(e){if(null!=e){if(e instanceof t.utils.CustomTypeDefinition)return[e];if(e.constructor===Array&&e[0]instanceof t.utils.CustomTypeDefinition)return e;if(e instanceof Function&&e.typeDefinition instanceof t.utils.CustomTypeDefinition)return[e.typeDefinition]}return!1},t.utils.copyObject=e,t.utils.copyOperation=n,t.utils.smaller=r,t.utils.inDeletionRange=i,t.utils.compareIds=s,t.utils.matchesId=o,t.utils.getLastId=a,t.utils.createSmallLookupBuffer=u,t.utils.generateUserId=c,t.utils.parseTypeDefinition=function(t,e){var n=[];try{n=JSON.parse("["+e+"]")}catch(t){throw new Error("Was not able to parse type definition!")}return null!=t.typeDefinition.parseArguments&&(n=t.typeDefinition.parseArguments(n[0])[1]),n}}(w),function(t){d(t);var e=function(t){function e(t){k(this,e);var n=U(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return n.store=t,n.ss=t.ss,n.os=t.os,n.ds=t.ds,n}return B(e,t),e}(t.Transaction),n=t.utils.RBTree,r=t.utils.createSmallLookupBuffer(n),i=function(t){function i(t,e){k(this,i);var s=U(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return s.os=new r,s.ds=new n,s.ss=new r,s}return B(i,t),S(i,[{key:"logTable",value:function(){this.requestTransaction(function(){console.log("User: ",this.store.y.connector.userId,"=============================="),console.log("State Set (SS):",this.getStateSet()),console.log("Operation Store (OS):"),this.os.logTable(),console.log("Deletion Store (DS):"),this.ds.logTable(),(this.store.gc1.length>0||this.store.gc2.length>0)&&console.warn("GC1|2 not empty!",this.store.gc1,this.store.gc2),"{}"!==JSON.stringify(this.store.listenersById)&&console.warn("listenersById not empty!"),"[]"!==JSON.stringify(this.store.listenersByIdExecuteNow)&&console.warn("listenersByIdExecuteNow not empty!"),this.store.transactionInProgress&&console.warn("Transaction still in progress!")},!0)}},{key:"transact",value:function(t){var n=new e(this);try{for(;null!=t;)t.call(n),t=this.getNextRequest()}catch(t){this.y.emit("error",t)}}},{key:"destroy",value:function(){I(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"destroy",this).call(this),delete this.os,delete this.ss,delete this.ds}}]),i}(t.AbstractDatabase);t.memory=i}(w),w.debug=M,M.formatters.Y=e,M.formatters.y=n;var R={};w.requiringModules=R,w.extend=function(t,e){if(2===arguments.length&&"string"==typeof t)e instanceof w.utils.CustomTypeDefinition?w[t]=e.parseArguments:w[t]=e,null!=R[t]&&(R[t].resolve(),delete R[t]);else for(var n=0;n<arguments.length;n++){var r=arguments[n];if("function"!=typeof r)throw new Error("Expected function!");r(w)}},w.requestModules=m;var W=function(t){function e(t,n){k(this,e);var r=U(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.options=t,r.db=new w[t.db.name](r,t.db),r.connector=new w[t.connector.name](r,t.connector),null!=t.persistence?r.persistence=new w[t.persistence.name](r,t.persistence):r.persistence=null,r.connected=!0,r}return B(e,t),S(e,[{key:"init",value:function(t){var e=this.options,n={};this.share=n,this.db.requestTransaction(function(){for(var t in e.share){var r=e.share[t].split("("),i="";2===r.length&&(i=r[1].split(")")[0]||"");var s=r.splice(0,1),o=w[s],a=o.typeDefinition,l=[16777215,a.struct+"_"+s+"_"+t+"_"+i],u=w.utils.parseTypeDefinition(o,i);n[t]=this.store.initType.call(this,l,u)}}),this.db.whenTransactionsFinished().then(t)}},{key:"isConnected",value:function(){return this.connector.isSynced}},{key:"disconnect",value:function(){return this.connected?(this.connected=!1,this.connector.disconnect()):Promise.resolve()}},{key:"reconnect",value:function(){return this.connected?Promise.resolve():(this.connected=!0,this.connector.reconnect())}},{key:"destroy",value:function(){var t=this,n=this;return this.close().then(function(){return null!=n.db.deleteDB?n.db.deleteDB():Promise.resolve()}).then(function(){I(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"destroy",t).call(t)})}},{key:"close",value:function(){var t=this;return this.share=null,null!=this.connector.destroy?this.connector.destroy():this.connector.disconnect(),this.db.whenTransactionsFinished().then(function(){return t.db.destroyTypes(),t.db.requestTransaction(function(){t.db.destroy()}),t.db.whenTransactionsFinished()})}}]),e}(w.utils.NamedEventHandler);return w});
|
|
//# sourceMappingURL=y.js.map
|