From 414288148f2c148a4ae4de51db4b29ad0dcbc6d1 Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Wed, 4 Nov 2015 14:39:27 +0100 Subject: [PATCH] test --- LICENSE | 23 ++++++++ README.md | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 65 +++++++++++++++++++++++ y.js | 4 ++ y.js.map | 1 + 5 files changed, 238 insertions(+) create mode 100644 LICENSE create mode 100644 package.json create mode 100644 y.js create mode 100644 y.js.map diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..c8c5c6da --- /dev/null +++ b/LICENSE @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) 2014 + - Kevin Jahns . + - Chair of Computer Science 5 (Databases & Information Systems), RWTH Aachen University, Germany + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index e69de29b..5974c2fd 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,145 @@ + +# ![Yjs](http://y-js.org/files/layout/yjs.svg) + +[![Build Status](https://travis-ci.org/y-js/yjs.svg)](https://travis-ci.org/y-js/yjs) + +Yjs is a framework for optimistic concurrency control and automatic conflict resolution on shared data types. The framework implements a new OT-like concurrency algorithm and provides similar functionality as [ShareJs] and [OpenCoweb]. Yjs was designed to handle concurrent actions on arbitrary complex data types like Text, Json, and XML. We provide a tutorial and some applications for this framework on our [homepage](http://y-js.org/). + +You can create you own shared types easily. Therefore, you can take matters into your own hand by defining the meaning of the shared types and ensure that it is valid, while Yjs ensures data consistency (everyone will eventually end up with the same data). We already provide data types for + +| Name | Description +| ---------------------------------------------------- | --------------------------------------------- +y-object | Add, update, and remove properties of an object. Circular references are supported. Included in Yjs +[y-list](https://github.com/y-js/y-list) | A shared linked list implementation. Circular references are supported +[y-selections](https://github.com/y-js/y-selections) | Manages selections on types that use linear structures (e.g. the y-list type). You can select a range of elements and assign meaning to them. +[y-xml](https://github.com/y-js/y-xml) | An implementation of the DOM. You can create a two way binding to Browser DOM objects +[y-text](https://github.com/y-js/y-text) | Collaborate on text. You can create a two way binding to textareas, input elements, or HTML elements (e.g. *h1*, or *p*) +[y-richtext](https://github.com/y-js/y-richtext) | Collaborate on rich text. You can create a two way binding to several editors + +Unlike other frameworks, Yjs supports P2P message propagation and is not bound to a specific communication protocol. Therefore, Yjs is extremely scalable and can be used in a wide range of application scenarios. + +We support several communication protocols as so called *Connectors*. You can create your own connector too - read [this wiki page](https://github.com/y-js/yjs/wiki/Custom-Connectors). Currently, we support the following communication protocols: + +Name | Description +---------------------------------------- | ------------------------------------------------------- +[y-xmpp](https://github.com/y-js/y-xmpp) | Propagate updates in a XMPP multi-user-chat room ([XEP-0045](http://xmpp.org/extensions/xep-0045.html)) +[y-webrtc](https://github.com/y-js/y-webrtc) | Propagate updates Browser2Browser via WebRTC +[y-test](https://github.com/y-js/y-test) | A Connector for testing purposes. It is designed to simulate delays that happen in worst case scenarios + + +You can use Yjs client-, and server- side. You can get it as via npm, and bower. We even provide polymer elements for Yjs! + +The advantages over similar frameworks are support for +* .. P2P message propagation and arbitrary communication protocols +* .. arbitrary complex data types +* .. offline editing: Changes are stored persistently and only relevant changes are propagated on rejoin +* .. AnyUndo: Undo *any* action that was executed in constant time (coming..) +* .. Intention Preservation: When working on Text, the intention of your changes are preserved. This is particularily important when working offline. Every type has a notion on how we define Intention Preservation on it. + + +## Use it! +You can find a tutorial, and examples on the [website](http://y-js.org). Furthermore, the [github wiki](https://github.com/y-js/yjs/wiki) offers more information about how you can use Yjs in your application. + +Either clone this git repository, install it with [bower](http://bower.io/), or install it with [npm](https://www.npmjs.org/package/yjs). + +### Bower +``` +bower install y-js/yjs +``` +Then you include the libraries directly from the installation folder. +``` + +``` + +### Npm +``` +npm install yjs --save +``` + +And use it like this with *npm*: +``` +Y = require("yjs"); +``` + +# Y() +In order to create an instance of Y, you need to have a connection object (instance of a Connector). Then, you can create a shared data type like this: +``` +var y = new Y(connector); +``` + + +# Y.Map +Yjs includes only one type by default - the Y.Map type. It mimics the behaviour of a javascript Object. You can create, update, and remove properies on the Y.Map type. Furthermore, you can observe changes on this type as you can observe changes on Javascript Objects with [Object.observe](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe) - an ECMAScript 7 proposal which is likely to become accepted by the committee. Until then, we have our own implementation. + + +##### Reference +* Create +``` +var map = y.set("new_map", Y.Map).then(function(map){ + map // is my map type +}); +``` +* Every instance of Y is an Y.Map +``` +var y = new Y(options); +``` +* .get(name) + * Retrieve the value of a property. If the value is a type, `.get(name)` returns a promise +* .set(name, value) + * Set/update a property. `value` may be a primitive type, or a custom type definition (e.g. `Y.Map`) +* .delete(name) + * Delete a property +* .observe(observer) + * The `observer` is called whenever something on this object changes. Throws *add*, *update*, and *delete* events +* .observePath(path, observer) + * `path` is an array of property names. `observer` is called when the property under `path` is set, deleted, or updated +* .unobserve(f) + * Delete an observer + +# A note on intention preservation +When users create/update/delete the same property concurrently, only one change will prevail. Changes on different properties do not conflict with each other. + +# A note on time complexities +* .get(name) + * O(1) +* .set(name, value) + * O(1) +* .delete(name) + * O(1) +* Apply a delete operation from another user + * O(1) +* Apply an update operation from another user (set/update a property) + * Yjs does not transform against operations that do not conflict with each other. + * An operation conflicts with another operation if it changes the same property. + * Overall worst case complexety: O(|conflicts|!) + +# Status +Yjs is a work in progress. Different versions of the *y-* repositories may not work together. Just drop me a line if you run into troubles. + +## Get help +There are some friendly people on [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/y-js/yjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) who may help you with your problem, and answer your questions. + +Please report _any_ issues to the [Github issue page](https://github.com/y-js/yjs/issues)! I try to fix them very soon, if possible. + +## Changelog +##### 1.0 +This is a complete rewrite of the 0.5 version of Yjs. Since Yjs 1.0 it is possible to work asynchronously on a persistent database, which enables offline support. +* Switched to semver versioning +* Requires a promise implementation in environment (es6 promises suffice, included in all the major browsers). Otherwise you have to include a polyfill +* Y.Object has been renamed to Y.Map +* Y.Map exchanges `.val(name [, value])` in favor of `.set(name, value)` and `.get(name)` +* Y.Map `.get(name)` returns a promise, if the value is a custom type +* The Connector definition slightly changed (I'll update the wiki) +* The Type definitions completely changed, so you have to rewrite them (I'll rewrite the article in the wiki) +* Support for several packaging systems + + +## Contribution +I created this framework during my bachelor thesis at the chair of computer science 5 [(i5)](http://dbis.rwth-aachen.de/cms), RWTH University. Since December 2014 I'm working on Yjs as a part of my student worker job at the i5. + +## License +Yjs is licensed under the [MIT License](./LICENSE.txt). + + + +[ShareJs]: https://github.com/sh \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..74f7b3ec --- /dev/null +++ b/package.json @@ -0,0 +1,65 @@ +{ + "name": "yjs", + "version": "0.6.21", + "description": "A framework for real-time p2p shared editing on arbitrary complex data types", + "main": "y.js", + "scripts": { + "test": "node --harmony ./node_modules/.bin/gulp test", + "lint": "./node_modules/.bin/standard", + "build": "./node_modules/.bin/standard build" + }, + "pre-commit": [ + "lint", + "test" + ], + "standard": { + "parser": "babel-eslint", + "ignore": [ + "build/**", + "./y.js", + "./y.js.map" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/y-js/yjs.git" + }, + "keywords": [ + "OT", + "Operational Transformation", + "collaboration", + "synchronization", + "ShareJs", + "OpenCoweb", + "concurrency" + ], + "author": "Kevin Jahns", + "email": "kevin.jahns@rwth-aachen.de", + "license": "MIT", + "bugs": { + "url": "https://github.com/y-js/yjs/issues" + }, + "homepage": "http://y-js.org", + "devDependencies": { + "babel-eslint": "^4.1.2", + "gulp": "^3.9.0", + "gulp-babel": "^5.2.1", + "gulp-bump": "^1.0.0", + "gulp-concat": "^2.6.0", + "gulp-filter": "^3.0.1", + "gulp-git": "^1.6.0", + "gulp-jasmine": "^2.0.1", + "gulp-jasmine-browser": "^0.2.3", + "gulp-load-plugins": "^1.0.0", + "gulp-shell": "^0.5.1", + "gulp-sourcemaps": "^1.5.2", + "gulp-tag-version": "^1.3.0", + "gulp-uglify": "^1.4.1", + "gulp-util": "^3.0.6", + "gulp-watch": "^4.3.5", + "minimist": "^1.2.0", + "pre-commit": "^1.1.1", + "promise-polyfill": "^2.1.0", + "standard": "^5.2.2" + } +} diff --git a/y.js b/y.js new file mode 100644 index 00000000..1c86c6d3 --- /dev/null +++ b/y.js @@ -0,0 +1,4 @@ +"use strict";function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Y(e){return new Promise(function(t){var r=new YConfig(e,function(){r.db.whenUserIdSet(function(){t(r)})})})}function copyObject(e){var t={};for(var r in e)t[r]=e[r];return t}function smaller(e,t){return e[0]0&&e.push(t);if(e.length>0){var r=getRandom(e),n=globalRoom.buffers[r].shift(),i=globalRoom.users[r];return i.receiveMessage(n[0],n[1]),!0}return!1}var _createClass=function(){function e(e,t){for(var r=0;r=0;--n){var i=this.tryEntries[n],a=i.completion;if("root"===i.tryLoc)return t("end");if(i.tryLoc<=this.prev){var s=y.call(i,"catchLoc"),o=y.call(i,"finallyLoc");if(s&&o){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&y.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),p(r),Y}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;p(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:h(e),resultName:t,nextLoc:r},Y}}}("object"==typeof global?global:"object"==typeof window?window:"object"==typeof self?self:void 0);var YConfig=function(){function e(t,r){_classCallCheck(this,e),this.db=new Y[t.db.name](this,t.db),this.connector=new Y[t.connector.name](this,t.connector),this.db.requestTransaction(regeneratorRuntime.mark(function n(){var e,t;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return e={id:["_",0],struct:"Map",type:"Map",map:{}},n.delegateYield(this.store.tryExecute.call(this,e),"t0",2);case 2:return n.delegateYield(this.getType(e.id),"t1",3);case 3:t=n.t1,this.store.y.root=t,r();case 6:case"end":return n.stop()}},n,this)}))}return e.prototype.isConnected=function(){return this.connector.isSynced},e.prototype.disconnect=function(){return this.connector.disconnect()},e.prototype.reconnect=function(){return this.connector.reconnect()},e.prototype.destroy=function(){this.disconnect(),this.db.destroy(),this.connector=null,this.db=null},e}();"undefined"!=typeof YConcurrency_TestingMode&&(g.Y=Y),Y.utils={};var AbstractConnector=function(){function e(t,r){if(_classCallCheck(this,e),this.y=t,null==r&&(r={}),null==r.role||"master"===r.role)this.role="master";else{if("slave"!==r.role)throw new Error("Role must be either 'master' or 'slave'!");this.role="slave"}this.role=r.role,this.connections={},this.isSynced=!1,this.userEventListeners=[],this.whenSyncedListeners=[],this.currentSyncTarget=null,this.syncingClients=[],this.forwardToSyncingClients=r.forwardToSyncingClients!==!1,this.debug=r.debug===!0,this.broadcastedHB=!1,this.syncStep2=Promise.resolve()}return e.prototype.reconnect=function(){},e.prototype.disconnect=function(){return this.connections={},this.isSynced=!1,this.currentSyncTarget=null,this.broadcastedHB=!1,this.syncingClients=[],this.whenSyncedListeners=[],this.y.db.stopGarbageCollector()},e.prototype.setUserId=function(e){return this.userId=e,this.y.db.setUserId(e)},e.prototype.onUserEvent=function(e){this.userEventListeners.push(e)},e.prototype.userLeft=function(e){delete this.connections[e],e===this.currentSyncTarget&&(this.currentSyncTarget=null,this.findNextSyncTarget()),this.syncingClients=this.syncingClients.filter(function(t){return t!==e});for(var t=this.userEventListeners,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var a=i;a({action:"userLeft",user:e})}},e.prototype.userJoined=function(e,t){if(null==t)throw new Error("You must specify the role of the joined user!");if(null!=this.connections[e])throw new Error("This user already joined!");this.connections[e]={isSynced:!1,role:t};for(var r=this.userEventListeners,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var a;if(n){if(i>=r.length)break;a=r[i++]}else{if(i=r.next(),i.done)break;a=i.value}var s=a;s({action:"userJoined",user:e,role:t})}null==this.currentSyncTarget&&this.findNextSyncTarget()},e.prototype.whenSynced=function(e){this.isSynced?e():this.whenSyncedListeners.push(e)},e.prototype.findNextSyncTarget=function(){if(null==this.currentSyncTarget&&!this.isSynced){var e=null;for(var t in this.connections)if(!this.connections[t].isSynced){e=t;break}if(null!=e){var r=this;this.currentSyncTarget=e,this.y.db.requestTransaction(regeneratorRuntime.mark(function u(){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=r,t.t1=e,t.delegateYield(this.getStateSet(),"t2",3);case 3:return t.t3=t.t2,t.delegateYield(this.getDeleteSet(),"t4",5);case 5:t.t5=t.t4,t.t6={type:"sync step 1",stateSet:t.t3,deleteSet:t.t5},t.t0.send.call(t.t0,t.t1,t.t6);case 8:case"end":return t.stop()}},u,this)}))}else{this.isSynced=!0;for(var n=this.whenSyncedListeners,i=Array.isArray(n),a=0,n=i?n:n[Symbol.iterator]();;){var s;if(i){if(a>=n.length)break;s=n[a++]}else{if(a=n.next(),a.done)break;s=a.value}var o=s;o()}this.whenSyncedListeners=[],this.y.db.requestTransaction(regeneratorRuntime.mark(function c(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.garbageCollectAfterSync(),"t0",1);case 1:case"end":return e.stop()}},c,this)}))}}},e.prototype.send=function(e,t){this.debug&&console.log("send "+this.userId+" -> "+e+": "+t.type,m)},e.prototype.receiveMessage=function(e,t){var r=this;if(e!==this.userId)if(this.debug&&console.log("receive "+e+" -> "+this.userId+": "+t.type,JSON.parse(JSON.stringify(t))),"sync step 1"===t.type)!function(){var n=r;r.y.db.requestTransaction(regeneratorRuntime.mark(function i(){var r,a,s;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return i.delegateYield(this.getStateSet(),"t0",1);case 1:return r=i.t0,i.delegateYield(this.applyDeleteSet(t.deleteSet),"t1",3);case 3:return i.delegateYield(this.getDeleteSet(),"t2",4);case 4:return a=i.t2,i.delegateYield(this.getOperations(t.stateSet),"t3",6);case 6:s=i.t3,n.send(e,{type:"sync step 2",os:s,stateSet:r,deleteSet:a}),this.forwardToSyncingClients?(n.syncingClients.push(e),setTimeout(function(){n.syncingClients=n.syncingClients.filter(function(t){return t!==e}),n.send(e,{type:"sync done"})},n.syncingClientDuration)):n.send(e,{type:"sync done"}),n._setSyncedWith(e);case 10:case"end":return i.stop()}},i,this)}))}();else if("sync step 2"===t.type){var n,i;!function(){var a=r;n=!r.broadcastedHB,r.broadcastedHB=!0,i=r.y.db,r.syncStep2=new Promise(function(r){i.requestTransaction(regeneratorRuntime.mark(function s(){return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:return s.delegateYield(this.applyDeleteSet(t.deleteSet),"t0",1);case 1:this.store.apply(t.os),i.requestTransaction(regeneratorRuntime.mark(function o(){var i;return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:return s.delegateYield(this.getOperations(t.stateSet),"t0",1);case 1:i=s.t0,i.length>0&&(t={type:"update",ops:i},n?a.broadcast(t):a.send(e,t)),r();case 4:case"end":return s.stop()}},o,this)}));case 3:case"end":return s.stop()}},s,this)}))})}()}else if("sync done"===t.type){var a=this;this.syncStep2.then(function(){a._setSyncedWith(e)})}else if("update"===t.type){if(this.forwardToSyncingClients)for(var s=this.syncingClients,o=Array.isArray(s),u=0,s=o?s:s[Symbol.iterator]();;){var c;if(o){if(u>=s.length)break;c=s[u++]}else{if(u=s.next(),u.done)break;c=u.value}var l=c;this.send(l,t)}this.y.db.apply(t.ops)}},e.prototype._setSyncedWith=function(e){var t=this.connections[e];null!=t&&(t.isSynced=!0),e===this.currentSyncTarget&&(this.currentSyncTarget=null,this.findNextSyncTarget())},e.prototype.parseMessageFromXml=function(e){function t(e){var t=!0;e:for(;t;){var n=e;i=a=s=i=o=u=void 0,t=!1;for(var i=n.children,a=Array.isArray(i),s=0,i=a?i:i[Symbol.iterator]();;){var o;if(a){if(s>=i.length)break;o=i[s++]}else{if(s=i.next(),s.done)break;o=s.value}var u=o;if("true"===u.getAttribute("isArray")){e=u,t=!0;continue e}return r(u)}}}function r(e){var n={};for(var 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)},e.prototype.encodeMessageToXml=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");for(var i=t,a=Array.isArray(i),s=0,i=a?i:i[Symbol.iterator]();;){var o;if(a){if(s>=i.length)break;o=i[s++]}else{if(s=i.next(),s.done)break;o=s.value}var u=o;u.constructor===Object?r(e.c("array-element"),u):n(e.c("array-element"),u)}}if(t.constructor===Object)r(e.c("y",{xmlns:"http://y.ninja/connector-stanza"}),t);else{if(t.constructor!==Array)throw new Error("I can't encode this json!");n(e.c("y",{xmlns:"http://y.ninja/connector-stanza"}),t)}},e}();Y.AbstractConnector=AbstractConnector;var AbstractDatabase=function(){function e(t,r){function n(){return new Promise(function(e){i.requestTransaction(regeneratorRuntime.mark(function t(){var r,a;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(null==i.y.connector||!i.y.connector.isSynced){t.next=10;break}t.t0=regeneratorRuntime.keys(i.gc2);case 2:if((t.t1=t.t0()).done){t.next=8;break}return r=t.t1.value,a=i.gc2[r],t.delegateYield(this.garbageCollectOperation(a),"t2",6);case 6:t.next=2;break;case 8:i.gc2=i.gc1,i.gc1=[];case 10:i.gcTimeout>0&&(i.gcInterval=setTimeout(n,i.gcTimeout)),e();case 12:case"end":return t.stop()}},t,this)}))})}_classCallCheck(this,e),this.y=t,this.listenersById={},this.listenersByIdExecuteNow=[],this.listenersByIdRequestPending=!1,this.initializedTypes={},this.whenUserIdSetListener=null,this.waitingTransactions=[],this.transactionInProgress=!1,"undefined"!=typeof YConcurrency_TestingMode&&(this.executeOrder=[]),this.gc1=[],this.gc2=[],this.gcTimeout=r.gcTimeout||5e3;var i=this;this.garbageCollect=n,this.gcTimeout>0&&n()}return e.prototype.addToDebug=function(){if("undefined"!=typeof YConcurrency_TestingMode){var e=Array.prototype.map.call(arguments,function(e){return"string"==typeof e?e:JSON.stringify(e)}).join("").replace(/"/g,"'").replace(/,/g,", ").replace(/:/g,": ");this.executeOrder.push(e)}},e.prototype.getDebugData=function(){console.log(this.executeOrder.join("\n"))},e.prototype.stopGarbageCollector=function(){var e=this;return new Promise(function(t){e.requestTransaction(regeneratorRuntime.mark(function r(){var n,i,a;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:n=e.gc1.concat(e.gc2),e.gc1=[],e.gc2=[],r.t0=regeneratorRuntime.keys(n);case 4:if((r.t1=r.t0()).done){r.next=12;break}return i=r.t1.value,r.delegateYield(this.getOperation(n[i]),"t2",7);case 7:return a=r.t2,delete a.gc,r.delegateYield(this.setOperation(a),"t3",10);case 10:r.next=4;break;case 12:t();case 13:case"end":return r.stop()}},r,this)}))})},e.prototype.addToGarbageCollector=function(e,t){return null==e.gc&&e.deleted===!0&&this.y.connector.isSynced&&null!=t&&t.deleted===!0?(e.gc=!0,this.gc1.push(e.id),!0):!1},e.prototype.removeFromGarbageCollector=function(e){function t(t){return!Y.utils.compareIds(t,e.id)}this.gc1=this.gc1.filter(t),this.gc2=this.gc2.filter(t),delete e.gc},e.prototype.destroy=function(){clearInterval(this.gcInterval),this.gcInterval=null},e.prototype.setUserId=function(e){var t=this;return new Promise(function(r){t.requestTransaction(regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return t.userId=e,n.delegateYield(this.getState(e),"t0",2);case 2:t.opClock=n.t0.clock,null!=t.whenUserIdSetListener&&(t.whenUserIdSetListener(),t.whenUserIdSetListener=null),r();case 5:case"end":return n.stop()}},n,this)}))})},e.prototype.whenUserIdSet=function(e){null!=this.userId?e():this.whenUserIdSetListener=e},e.prototype.getNextOpId=function(){if(null==this.userId)throw new Error("OperationStore not yet initialized!");return[this.userId,this.opClock++]},e.prototype.apply=function(e){for(var t in e){var r=e[t],n=Y.Struct[r.struct].requiredOps(r);this.whenOperationsExist(n,r)}},e.prototype.whenOperationsExist=function(e,t){if(e.length>0){var r={op:t,missing:e.length};for(var n in e){var i=e[n],a=JSON.stringify(i),s=this.listenersById[a];null==s&&(s=[],this.listenersById[a]=s),s.push(r)}}else this.listenersByIdExecuteNow.push({op:t});if(!this.listenersByIdRequestPending){this.listenersByIdRequestPending=!0;var o=this;this.requestTransaction(regeneratorRuntime.mark(function u(){var e,t,r,n,i,a,s,c;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:e=o.listenersByIdExecuteNow,o.listenersByIdExecuteNow=[],t=o.listenersById,o.listenersById={},o.listenersByIdRequestPending=!1,u.t0=regeneratorRuntime.keys(e);case 6:if((u.t1=u.t0()).done){u.next=12;break}return r=u.t1.value,n=e[r].op,u.delegateYield(o.tryExecute.call(this,n),"t2",10);case 10:u.next=6;break;case 12:u.t3=regeneratorRuntime.keys(t);case 13:if((u.t4=u.t3()).done){u.next=34;break}return i=u.t4.value,a=t[i],s=JSON.parse(i),u.delegateYield(this.getOperation(s),"t5",18);case 18:if(u.t6=u.t5,null!=u.t6){u.next=23;break}o.listenersById[i]=a,u.next=32;break;case 23:u.t7=regeneratorRuntime.keys(a);case 24:if((u.t8=u.t7()).done){u.next=32;break}if(r=u.t8.value,c=a[r],n=c.op,0!==--c.missing){u.next=30;break}return u.delegateYield(o.tryExecute.call(this,n),"t9",30);case 30:u.next=24;break;case 32:u.next=13;break;case 34:case"end":return u.stop()}},u,this)}))}},e.prototype.tryExecute=regeneratorRuntime.mark(function t(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(this.store.addToDebug("yield* this.store.tryExecute.call(this, ",JSON.stringify(e),")"),"Delete"!==e.struct){t.next=6;break}return t.delegateYield(Y.Struct.Delete.execute.call(this,e),"t0",3);case 3:return t.delegateYield(this.store.operationAdded(this,e),"t1",4);case 4:t.next=16;break;case 6:return t.delegateYield(this.getOperation(e.id),"t3",7);case 7:if(t.t4=t.t3,t.t2=null==t.t4,!t.t2){t.next=12;break}return t.delegateYield(this.isGarbageCollected(e.id),"t5",11);case 11:t.t2=!t.t5;case 12:if(!t.t2){t.next=16;break}return t.delegateYield(Y.Struct[e.struct].execute.call(this,e),"t6",14);case 14:return t.delegateYield(this.addOperation(e),"t7",15);case 15:return t.delegateYield(this.store.operationAdded(this,e),"t8",16);case 16:case"end":return t.stop()}},t,this)}),e.prototype.operationAdded=regeneratorRuntime.mark(function r(e,t){var n,i,a,s,o,u,c,l,p,d;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if("Delete"!==t.struct){r.next=9;break}return r.delegateYield(e.getOperation(t.target),"t0",2);case 2:if(n=r.t0,null==n){r.next=7;break}if(i=e.store.initializedTypes[JSON.stringify(n.parent)],null==i){r.next=7;break}return r.delegateYield(i._changed(e,{struct:"Delete",target:t.target}),"t1",7);case 7:r.next=36;break;case 9:return a=t,r.delegateYield(e.getState(t.id[0]),"t2",11);case 11:s=r.t2;case 12:if(null==a||a.id[1]!==s.clock||t.id[0]!==a.id[0]){r.next=19;break}return s.clock++,r.delegateYield(e.checkDeleteStoreForState(s),"t3",15);case 15:return r.delegateYield(e.os.findNext(a.id),"t4",16);case 16:a=r.t4,r.next=12;break;case 19:return r.delegateYield(e.setState(s),"t5",20);case 20:if(o=JSON.stringify(t.id),u=this.listenersById[o],delete this.listenersById[o],null!=u)for(c in u)l=u[c],0===--l.missing&&this.whenOperationsExist([],l.op);if(p=this.initializedTypes[JSON.stringify(t.parent)],null==p){r.next=27;break}return r.delegateYield(p._changed(e,Y.utils.copyObject(t)),"t6",27);case 27:if(r.t7=!t.deleted,!r.t7){r.next=31;break}return r.delegateYield(e.isDeleted(t.id),"t8",30);case 30:r.t7=r.t8;case 31:if(!r.t7){r.next=36;break}return d={struct:"Delete",target:t.id},r.delegateYield(Y.Struct.Delete.execute.call(e,d),"t9",34);case 34:if(null==p){r.next=36;break}return r.delegateYield(p._changed(e,d),"t10",36);case 36:case"end":return r.stop()}},r,this)}),e.prototype.getNextRequest=function(){return 0===this.waitingTransactions.length?(this.transactionInProgress=!1,null):this.waitingTransactions.shift()},e.prototype.requestTransaction=function(e,t){if(t)this.transact(e);else if(this.transactionInProgress)this.waitingTransactions.push(e);else{this.transactionInProgress=!0;var r=this;setTimeout(function(){r.transact(e)},0)}},e}();Y.AbstractDatabase=AbstractDatabase;var Transaction=function(){function e(){_classCallCheck(this,e)}return e.prototype.getType=regeneratorRuntime.mark(function t(e){var r,n,i;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(r=JSON.stringify(e),n=this.store.initializedTypes[r],null!=n){t.next=9;break}return t.delegateYield(this.getOperation(e),"t0",4);case 4:if(i=t.t0,null==i){t.next=9;break}return t.delegateYield(Y[i.type].initType.call(this,this.store,i),"t1",7);case 7:n=t.t1,this.store.initializedTypes[r]=n;case 9:return t.abrupt("return",n);case 10:case"end":return t.stop()}},t,this)}),e.prototype.applyCreatedOperations=regeneratorRuntime.mark(function r(e){var t,n,i;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:t=[],n=0;case 2:if(!(na;a++)t.push([e,a,i])},t=[],l.t0=regeneratorRuntime.keys(e);case 3:if((l.t1=l.t0()).done){l.next=12;break}return n=l.t1.value,i=e[n],a=0,s=i[a],l.delegateYield(this.ds.iterate(this,[n,0],[n,Number.MAX_VALUE],regeneratorRuntime.mark(function d(e){var t;return regeneratorRuntime.wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(null==s){o.next=10;break}if(t=0,!(e.id[1]+e.len<=s[0])){o.next=6;break}return o.abrupt("break",10);case 6:s[0]=n.length)){y.next=8;break}return y.abrupt("break",23);case 8:s=n[a++],y.next=15;break;case 11:if(a=n.next(),!a.done){y.next=14;break}return y.abrupt("break",23);case 14:s=a.value;case 15:if(o=s,u=o.user,"_"!==u){y.next=19;break}return y.abrupt("continue",21);case 19:return c=e[u]||0,y.delegateYield(this.os.iterate(this,[u,c],[u,Number.MAX_VALUE],regeneratorRuntime.mark(function m(e){return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:t.push(e);case 1:case"end":return r.stop()}},m,this)})),"t1",21);case 21:y.next=5;break;case 23:l=[],p=t,d=Array.isArray(p),h=0,p=d?p:p[Symbol.iterator]();case 25:if(!d){y.next=31;break}if(!(h>=p.length)){y.next=28;break}return y.abrupt("break",42);case 28:f=p[h++],y.next=35;break;case 31:if(h=p.next(),!h.done){y.next=34;break}return y.abrupt("break",42);case 34:f=h.value;case 35:return g=f,y.t2=l,y.delegateYield(this.makeOperationReady(e,g),"t3",38);case 38:y.t4=y.t3,y.t2.push.call(y.t2,y.t4);case 40:y.next=25;break;case 42:return y.abrupt("return",l);case 43:case"end":return y.stop()}},x,this)}),e.prototype.makeOperationReady=regeneratorRuntime.mark(function R(e,t){var r,n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:t=Y.Struct[t.struct].encode(t),t=Y.utils.copyObject(t),r=t,n=[t.id];case 4:if(null==r.right){a.next=13;break}return a.delegateYield(this.getOperation(r.right),"t0",6);case 6:if(i=a.t0,!(r.right[1]<(e[r.right[0]]||0))&&n.some(function(e){return Y.utils.compareIds(e,i.origin)})){a.next=9;break}return a.abrupt("break",13);case 9:n.push(r.right),r=i,a.next=4;break;case 13:return t.right=r.right,t.left=t.origin,a.abrupt("return",t);case 16:case"end":return a.stop()}},R,this)}),e}();Y.Transaction=Transaction;var Struct={Delete:{encode:function(e){return e},requiredOps:function(e){return[]},execute:regeneratorRuntime.mark(function e(t){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.deleteOperation(t.target),"t0",1);case 1:return e.abrupt("return",e.t0);case 2:case"end":return e.stop()}},e,this)})},Insert:{encode:function(e){var t={id:e.id,left:e.left,right:e.right,origin:e.origin,parent:e.parent,struct:e.struct};return null!=e.parentSub&&(t.parentSub=e.parentSub),null!=e.opContent?t.opContent=e.opContent:t.content=e.content,t},requiredOps:function(e){var t=[];return null!=e.left&&t.push(e.left),null!=e.right&&t.push(e.right),null==e.origin||Y.utils.compareIds(e.left,e.origin)||t.push(e.origin),t.push(e.parent),null!=e.opContent&&t.push(e.opContent),t},getDistanceToOrigin:regeneratorRuntime.mark(function t(e){var r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(null!=e.left){t.next=4;break}return t.abrupt("return",0);case 4:return r=0,t.delegateYield(this.getOperation(e.left),"t0",6);case 6:n=t.t0;case 7:if(Y.utils.compareIds(e.origin,n?n.id:null)){t.next=17;break}if(r++,null!=n.left){t.next=13;break}return t.abrupt("break",17);case 13:return t.delegateYield(this.getOperation(n.left),"t1",14);case 14:n=t.t1;case 15:t.next=7;break;case 17:return t.abrupt("return",r);case 18:case"end":return t.stop()}},t,this)}),execute:regeneratorRuntime.mark(function r(e){var t,n,i,a,s,o,u,c,l;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(Struct.Insert.getDistanceToOrigin.call(this,e),"t0",1);case 1:if(n=t=r.t0,null==e.left){r.next=14;break}return r.delegateYield(this.getOperation(e.left),"t1",4);case 4:if(i=r.t1,null!=i.right){r.next=9;break}r.t2=null,r.next=11;break;case 9:return r.delegateYield(this.getOperation(i.right),"t3",10);case 10:r.t2=r.t3;case 11:i=r.t2,r.next=25;break;case 14:return r.delegateYield(this.getOperation(e.parent),"t4",15);case 15:if(a=r.t4,o=e.parentSub?a.map[e.parentSub]:a.start,null!=o){r.next=21;break}r.t5=null,r.next=23;break;case 21:return r.delegateYield(this.getOperation(o),"t6",22);case 22:r.t5=r.t6;case 23:s=r.t5,i=s;case 25:if(null==i||Y.utils.compareIds(i.id,e.right)){r.next=48;break}return r.delegateYield(Struct.Insert.getDistanceToOrigin.call(this,i),"t7",28);case 28:if(u=r.t7,u!==t){r.next=33;break}i.id[0]u)){r.next=37;break}u>=t-n&&(e.left=i.id,n=t+1),r.next=38;break;case 37:return r.abrupt("break",51);case 38:if(t++,!i.right){r.next=44;break}return r.delegateYield(this.getOperation(i.right),"t9",41);case 41:r.t8=r.t9,r.next=45;break;case 44:r.t8=null;case 45:i=r.t8,r.next=49;break;case 48:return r.abrupt("break",51);case 49:r.next=25;break;case 51:if(c=null,l=null,r.t10=a,r.t10){r.next=57;break}return r.delegateYield(this.getOperation(e.parent),"t11",56);case 56:r.t10=r.t11;case 57:if(a=r.t10,null==e.left){r.next=66;break}return r.delegateYield(this.getOperation(e.left),"t12",60);case 60:return c=r.t12,e.right=c.right,c.right=e.id,r.delegateYield(this.setOperation(c),"t13",64);case 64:r.next=67;break;case 66:e.right=e.parentSub?a.map[e.parentSub]||null:a.start;case 67:if(null==e.right){r.next=73;break}return r.delegateYield(this.getOperation(e.right),"t14",69);case 69:return l=r.t14,l.left=e.id,null!=l.gc&&this.store.removeFromGarbageCollector(l),r.delegateYield(this.setOperation(l),"t15",73);case 73:if(null==e.parentSub){r.next=83;break}if(null!=c){r.next=77;break}return a.map[e.parentSub]=e.id,r.delegateYield(this.setOperation(a),"t16",77);case 77:if(null==e.right){r.next=79;break}return r.delegateYield(this.deleteOperation(e.right,!0),"t17",79);case 79:if(null==e.left){r.next=81;break}return r.delegateYield(this.deleteOperation(e.id,!0),"t18",81);case 81:r.next=87;break;case 83:if(null!=l&&null!=c){r.next=87;break}return null==l&&(a.end=e.id),null==c&&(a.start=e.id),r.delegateYield(this.setOperation(a),"t19",87);case 87:case"end":return r.stop()}},r,this)})},List:{encode:function(e){return{struct:"List",id:e.id,type:e.type}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function n(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:e.start=null,e.end=null;case 2:case"end":return t.stop()}},n,this)}),ref:regeneratorRuntime.mark(function i(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(null!=e.start){i.next=2;break}return i.abrupt("return",null);case 2:return r=null,i.delegateYield(this.getOperation(e.start),"t0",4);case 4:n=i.t0;case 5:if(n.deleted||(r=n,t--),!(t>=0&&null!=n.right)){i.next=12;break}return i.delegateYield(this.getOperation(n.right),"t1",9);case 9:n=i.t1,i.next=13;break;case 12:return i.abrupt("break",15);case 13:i.next=5;break;case 15:return i.abrupt("return",r);case 16:case"end":return i.stop()}},i,this)}),map:regeneratorRuntime.mark(function a(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:e=e.start,r=[];case 2:if(null==e){i.next=9;break}return i.delegateYield(this.getOperation(e),"t0",4);case 4:n=i.t0,n.deleted||r.push(t(n)),e=n.right,i.next=2;break;case 9:return i.abrupt("return",r);case 10:case"end":return i.stop()}},a,this)})},Map:{encode:function(e){return{struct:"Map",type:e.type,id:e.id,map:{}}},requiredOps:function(){return[]},execute:regeneratorRuntime.mark(function s(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}},s,this)}),get:regeneratorRuntime.mark(function o(e,t){var r,n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.map[t],null==r){i.next=16;break}return i.delegateYield(this.getOperation(r),"t0",3);case 3:if(n=i.t0,null!=n&&!n.deleted){i.next=8;break}i.t1=void 0,i.next=15;break;case 8:if(null!=n.opContent){i.next=12;break}i.t2=n.content,i.next=14;break;case 12:return i.delegateYield(this.getType(n.opContent),"t3",13);case 13:i.t2=i.t3;case 14:i.t1=i.t2;case 15:return i.abrupt("return",i.t1);case 16:case"end":return i.stop()}},o,this)}),"delete":regeneratorRuntime.mark(function u(e,t){var r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(r=e.map[t]||null,null==r){n.next=3;break}return n.delegateYield(Struct.Delete.create.call(this,{target:r}),"t0",3);case 3:case"end":return n.stop()}},u,this)})}};Y.Struct=Struct;var EventHandler=function(){function e(t){_classCallCheck(this,e),this.waiting=[],this.awaiting=0,this.onevent=t,this.eventListeners=[]}return e.prototype.receivedOp=function(e){this.awaiting<=0?this.onevent([e]):this.waiting.push(Y.utils.copyObject(e))},e.prototype.awaitAndPrematurelyCall=function(e){this.awaiting++,this.onevent(e)},e.prototype.addEventListener=function(e){this.eventListeners.push(e)},e.prototype.removeEventListener=function(e){this.eventListeners=this.eventListeners.filter(function(t){return e!==t})},e.prototype.removeAllEventListeners=function(){this.eventListeners=[]},e.prototype.callEventListeners=function(e){for(var t in this.eventListeners)try{this.eventListeners[t](e)}catch(r){console.log("User events must not throw Errors!")}},e.prototype.awaitedInserts=function(e){for(var t=this.waiting.splice(this.waiting.length-e),r=0;r=0;i--){var a=this.waiting[i];Y.utils.compareIds(n.left,a.id)?(a.right=n.id,n.left=a.left):Y.utils.compareIds(n.right,a.id)&&(a.left=n.id,n.right=a.right)}this._tryCallEvents()},e.prototype.awaitedDeletes=function(e,t){var r=this.waiting.splice(this.waiting.length-e);for(var n in r){var i=r[n];if(null!=t)for(var a in this.waiting){var s=this.waiting[a];Y.utils.compareIds(i.target,s.left)&&(i.left=t)}}this._tryCallEvents()},e.prototype._tryCallEvents=function(){if(this.awaiting--,this.awaiting<=0&&this.waiting.length>0){var e=this.waiting;this.waiting=[],this.onevent(e)}},e}();Y.utils.EventHandler=EventHandler;var CustomType=function c(e){if(_classCallCheck(this,c),null==e.createType||null==e.initType||null==e["class"])throw new Error("Custom type was not initialized correctly!");this.createType=e.createType,this.initType=e.initType,this["class"]=e["class"]};Y.utils.CustomType=CustomType,Y.utils.copyObject=copyObject,Y.utils.smaller=smaller,Y.utils.compareIds=compareIds;var N=function(){function e(t){if(_classCallCheck(this,e),this.val=t,this.color=!0,this._left=null,this._right=null,this._parent=null,null===t.id)throw new Error("You must define id!")}return e.prototype.isRed=function(){return this.color},e.prototype.isBlack=function(){return!this.color},e.prototype.redden=function(){return this.color=!0,this},e.prototype.blacken=function(){return this.color=!1,this},e.prototype.rotateLeft=function(e){var t=this.parent,r=this.right,n=this.right.left;if(r.left=this,this.right=n,null===t)e.root=r,r._parent=null;else if(t.left===this)t.left=r;else{if(t.right!==this)throw new Error("The elements are wrongly connected!");t.right=r}},e.prototype.next=function(){if(null!==this.right){for(var e=this.right;null!==e.left;)e=e.left;return e}for(var t=this;null!==t.parent&&t!==t.parent.left;)t=t.parent;return t.parent},e.prototype.prev=function(){if(null!==this.left){for(var e=this.left;null!==e.right;)e=e.right;return e}for(var t=this;null!==t.parent&&t!==t.parent.right;)t=t.parent;return t.parent},e.prototype.rotateRight=function(e){var t=this.parent,r=this.left,n=this.left.right;if(r.right=this,this.left=n,null===t)e.root=r,r._parent=null;else if(t.left===this)t.left=r;else{if(t.right!==this)throw new Error("The elements are wrongly connected!");t.right=r}},e.prototype.getUncle=function(){return this.parent===this.parent.parent.left?this.parent.parent.right:this.parent.parent.left},_createClass(e,[{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(e){null!==e&&(e._parent=this),this._left=e}},{key:"right",get:function(){return this._right},set:function(e){null!==e&&(e._parent=this),this._right=e}}]),e}(),RBTree=function(){function e(){_classCallCheck(this,e),this.root=null,this.length=0}return e.prototype.findNext=regeneratorRuntime.mark(function t(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.findWithLowerBound([e[0],e[1]+1]),"t0",1);case 1:return t.abrupt("return",t.t0);case 2:case"end":return t.stop()}},t,this)}),e.prototype.findPrev=regeneratorRuntime.mark(function r(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.findWithUpperBound([e[0],e[1]-1]),"t0",1);case 1:return t.abrupt("return",t.t0);case 2:case"end":return t.stop()}},r,this)}),e.prototype.findNodeWithLowerBound=function(e){if(void 0===e)throw new Error("You must define from!");var t=this.root;if(null===t)return null;for(;;)if(null!==e&&!Y.utils.smaller(e,t.val.id)||null===t.left){if(null===e||!Y.utils.smaller(t.val.id,e))return t;if(null===t.right)return t.next();t=t.right}else t=t.left},e.prototype.findNodeWithUpperBound=function(e){if(void 0===e)throw new Error("You must define from!");var t=this.root;if(null===t)return null;for(;;)if(null!==e&&!Y.utils.smaller(t.val.id,e)||null===t.right){if(null===e||!Y.utils.smaller(e,t.val.id))return t;if(null===t.left)return t.prev();t=t.left}else t=t.right},e.prototype.findWithLowerBound=regeneratorRuntime.mark(function n(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t=this.findNodeWithLowerBound(e),r.abrupt("return",null==t?null:t.val);case 2:case"end":return r.stop()}},n,this)}),e.prototype.findWithUpperBound=regeneratorRuntime.mark(function i(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return t=this.findNodeWithUpperBound(e),r.abrupt("return",null==t?null:t.val);case 2:case"end":return r.stop()}},i,this)}),e.prototype.iterate=regeneratorRuntime.mark(function a(e,t,r,n){var i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:i=this.findNodeWithLowerBound(t);case 1:if(null===i||null!==r&&!Y.utils.smaller(i.val.id,r)&&!Y.utils.compareIds(i.val.id,r)){a.next=6;break}return a.delegateYield(n.call(e,i.val),"t0",3);case 3:i=i.next(),a.next=1;break;case 6:return a.abrupt("return",!0);case 7:case"end":return a.stop()}},a,this)}),e.prototype.logTable=regeneratorRuntime.mark(function s(e,t,r){var n;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return null==r&&(r=function(){return!0}),null==e&&(e=null),null==t&&(t=null),n=[],i.delegateYield(this.iterate(this,e,t,regeneratorRuntime.mark(function a(e){var t,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(r(e)){t={};for(i in e)"object"==typeof e[i]?t[i]=JSON.stringify(e[i]):t[i]=e[i];n.push(t)}case 1:case"end":return a.stop()}},a,this)})),"t0",5);case 5:null!=console.table&&console.table(n);case 6:case"end":return i.stop()}},s,this)}),e.prototype.find=regeneratorRuntime.mark(function o(e){var t;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",(t=this.findNode(e))?t.val:null);case 1:case"end":return r.stop()}},o,this)}),e.prototype.findNode=function(e){if(null==e||e.constructor!==Array)throw new Error("Expect id to be an array!");var t=this.root;if(null===t)return!1;for(;;){if(null===t)return!1;if(Y.utils.smaller(e,t.val.id))t=t.left;else{if(!Y.utils.smaller(t.val.id,e))return t;t=t.right}}},e.prototype["delete"]=regeneratorRuntime.mark(function u(e){var t,r,n,i;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(null!=e&&e.constructor===Array){a.next=2;break}throw new Error("id is expected to be an Array!");case 2:if(t=this.findNode(e),null!=t){a.next=5;break}throw new Error("Element does not exist!");case 5:if(this.length--,null!==t.left&&null!==t.right){for(r=t.left;null!==r.right;)r=r.right;t.val=r.val,t=r}if(i=t.left||t.right,null===i?(n=!0,i=new N({id:0}),i.blacken(),t.right=i):n=!1,null!==t.parent){a.next=14;break}return n?this.root=null:(this.root=i,i.blacken(),i._parent=null),a.abrupt("return");case 14:if(t.parent.left!==t){a.next=18;break}t.parent.left=i,a.next=23;break;case 18:if(t.parent.right!==t){a.next=22;break}t.parent.right=i,a.next=23;break;case 22:throw new Error("Impossible!");case 23:if(t.isBlack()&&(i.isRed()?i.blacken():this._fixDelete(i)),this.root.blacken(),!n){a.next=35;break}if(i.parent.left!==i){a.next=30;break}i.parent.left=null,a.next=35;break;case 30:if(i.parent.right!==i){a.next=34;break}i.parent.right=null,a.next=35;break;case 34:throw new Error("Impossible #3");case 35:case"end":return a.stop()}},u,this)}),e.prototype._fixDelete=function(e){function t(e){return null!==e?e.isBlack():!0}function r(e){return null!==e?e.isRed():!1}if(null!==e.parent){var n=e.sibling;if(r(n)){if(e.parent.redden(),n.blacken(),e===e.parent.left)e.parent.rotateLeft(this);else{if(e!==e.parent.right)throw new Error("Impossible #2");e.parent.rotateRight(this)}n=e.sibling}e.parent.isBlack()&&n.isBlack()&&t(n.left)&&t(n.right)?(n.redden(),this._fixDelete(e.parent)):e.parent.isRed()&&n.isBlack()&&t(n.left)&&t(n.right)?(n.redden(),e.parent.blacken()):(e===e.parent.left&&n.isBlack()&&r(n.left)&&t(n.right)?(n.redden(),n.left.blacken(),n.rotateRight(this),n=e.sibling):e===e.parent.right&&n.isBlack()&&r(n.right)&&t(n.left)&&(n.redden(),n.right.blacken(),n.rotateLeft(this),n=e.sibling),n.color=e.parent.color,e.parent.blacken(),e===e.parent.left?(n.right.blacken(),e.parent.rotateLeft(this)):(n.left.blacken(),e.parent.rotateRight(this)))}},e.prototype.put=regeneratorRuntime.mark(function c(e){var t,r;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=e&&null!=e.id&&e.id.constructor===Array){n.next=2;break}throw new Error("v is expected to have an id property which is an Array!");case 2:if(t=new N(e),null===this.root){n.next=31;break}r=this.root;case 5:if(!Y.utils.smaller(t.val.id,r.val.id)){n.next=15;break}if(null!==r.left){n.next=12;break}return r.left=t,n.abrupt("break",28);case 12:r=r.left;case 13:n.next=26;break;case 15:if(!Y.utils.smaller(r.val.id,t.val.id)){n.next=24;break}if(null!==r.right){n.next=21;break}return r.right=t,n.abrupt("break",28);case 21:r=r.right;case 22:n.next=26;break;case 24:return r.val=t.val,n.abrupt("return",r);case 26:n.next=5;break;case 28:this._fixInsert(t),n.next=32;break;case 31:this.root=t;case 32:return this.length++,this.root.blacken(),n.abrupt("return",t);case 35:case"end":return n.stop()}},c,this)}),e.prototype._fixInsert=function(e){if(null===e.parent)return void e.blacken();if(!e.parent.isBlack()){var t=e.getUncle();null!==t&&t.isRed()?(e.parent.blacken(),t.blacken(),e.grandparent.redden(),this._fixInsert(e.grandparent)):(e===e.parent.right&&e.parent===e.grandparent.left?(e.parent.rotateLeft(this),e=e.left):e===e.parent.left&&e.parent===e.grandparent.right&&(e.parent.rotateRight(this),e=e.right),e.parent.blacken(),e.grandparent.redden(),e===e.parent.left?e.grandparent.rotateRight(this):e.grandparent.rotateLeft(this))}},e}();Y.utils.RBTree=RBTree,Y.Memory=function(){var e=function(e){function t(r){_classCallCheck(this,t),e.call(this,r),this.store=r,this.ss=r.ss,this.os=r.os,this.ds=r.ds}return _inherits(t,e),t}(Y.Transaction),t=function(t){function r(e,n){_classCallCheck(this,r),t.call(this,e,n),this.os=new Y.utils.RBTree,this.ds=new Y.utils.RBTree,this.ss=new Y.utils.RBTree}return _inherits(r,t),r.prototype.logTable=function(){var e=this;e.requestTransaction(regeneratorRuntime.mark(function t(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return console.log("User: ",this.store.y.connector.userId,"=============================="),e.t0=console,e.delegateYield(this.getStateSet(),"t1",3);case 3:return e.t2=e.t1,e.t0.log.call(e.t0,"State Set (SS):",e.t2),console.log("Operation Store (OS):"),e.delegateYield(this.os.logTable(),"t3",7);case 7:return console.log("Deletion Store (DS):"),e.delegateYield(this.ds.logTable(),"t4",9);case 9:(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!");case 13:case"end":return e.stop()}},t,this)}),!0)},r.prototype.transact=function(t){for(var r=new e(this);null!==t;){for(var n=t.call(r),i=n.next();!i.done;)i=n.next(i.value);t=this.getNextRequest()}},r.prototype.destroy=regeneratorRuntime.mark(function n(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.prototype.destroy.call(this),delete this.os,delete this.ss,delete this.ds;case 4:case"end":return e.stop()}},n,this)}),r}(Y.AbstractDatabase);return t}(),Y.IndexedDB=function(){var e=function(){function e(t,r){_classCallCheck(this,e),this.store=t.objectStore(r)}return e.prototype.find=regeneratorRuntime.mark(function t(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.store.get(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},t,this)}),e.prototype.put=regeneratorRuntime.mark(function r(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.store.put(e);case 2:case"end":return t.stop()}},r,this)}),e.prototype["delete"]=regeneratorRuntime.mark(function n(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.store["delete"](e);case 2:case"end":return t.stop()}},n,this)}),e.prototype.findWithLowerBound=regeneratorRuntime.mark(function i(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.store.openCursor(window.IDBKeyRange.lowerBound(e));case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},i,this)}),e.prototype.findWithUpperBound=regeneratorRuntime.mark(function a(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.store.openCursor(window.IDBKeyRange.upperBound(e),"prev");case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},a,this)}),e.prototype.findNext=regeneratorRuntime.mark(function s(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.findWithLowerBound([e[0],e[1]+1]),"t0",1);case 1:return t.abrupt("return",t.t0);case 2:case"end":return t.stop()}},s,this)}),e.prototype.findPrev=regeneratorRuntime.mark(function o(e){return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.delegateYield(this.findWithUpperBound([e[0],e[1]-1]),"t0",1);case 1:return t.abrupt("return",t.t0);case 2:case"end":return t.stop()}},o,this)}),e.prototype.iterate=regeneratorRuntime.mark(function u(e,t,r,n){var i,a;return regeneratorRuntime.wrap(function(s){for(;;)switch(s.prev=s.next){case 0:i=null,null!=t&&null!=r?i=window.IDBKeyRange.bound(t,r):null!=t?i=window.IDBKeyRange.lowerBound(t):null!=r&&(i=window.IDBKeyRange.upperBound(r)),a=this.store.openCursor(i);case 3:return s.next=5,a;case 5:if(s.t0=s.sent,null==s.t0){s.next=11;break}return s.delegateYield(n.call(e,a.result.value),"t1",8);case 8:a.result["continue"](),s.next=3;break;case 11:case"end":return s.stop()}},u,this)}),e}(),t=function(t){function r(n){_classCallCheck(this,r),t.call(this,n);var i=n.db.transaction(["OperationStore","StateStore","DeleteStore"],"readwrite");this.store=n,this.ss=new e(i,"StateStore"),this.os=new e(i,"OperationStore"),this.ds=new e(i,"DeleteStore")}return _inherits(r,t),r}(Y.Transaction),r=function(e){function r(t,n){if(_classCallCheck(this,r),e.call(this,t,n),null==n&&(n={}),null==n.namespace||"string"!=typeof n.namespace)throw new Error("IndexedDB: expect a string (opts.namespace)!");this.namespace=n.namespace,null!=n.idbVersion?this.idbVersion=n.idbVersion:this.idbVersion=5;var i=this;this.requestTransaction(regeneratorRuntime.mark(function s(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.indexedDB.open(n.namespace,i.idbVersion);case 2:i.db=e.sent;case 3:case"end":return e.stop()}},s,this)})),n.cleanStart&&this.requestTransaction(regeneratorRuntime.mark(function o(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.os.store.clear();case 2:return e.next=4,this.ds.store.clear();case 4:return e.next=6,this.ss.store.clear();case 6:case"end":return e.stop()}},o,this)}));var a=[];window.addEventListener("storage",function(e){e.key==="__YJS__"+i.namespace&&(a.push(e.newValue),1===a.length&&i.requestTransaction(regeneratorRuntime.mark(function t(){var e,r,n;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:e=a,a=[],t.t0=regeneratorRuntime.keys(e);case 3:if((t.t1=t.t0()).done){t.next=12;break}if(r=t.t1.value,n=JSON.parse(e[r]),"Delete"===n.struct){t.next=9;break}return t.delegateYield(this.getOperation(n.id),"t2",8);case 8:n=t.t2;case 9:return t.delegateYield(this.store.operationAdded(this,n,!0),"t3",10);case 10:t.next=3;break;case 12:case"end":return t.stop()}},t,this)})))},!1)}return _inherits(r,e),r.prototype.operationAdded=regeneratorRuntime.mark(function n(t,r,i){return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.delegateYield(e.prototype.operationAdded.call(this,t,r),"t0",1);case 1:i||(window.localStorage["__YJS__"+this.namespace]=JSON.stringify(r));case 2:case"end":return n.stop()}},n,this)}),r.prototype.transact=function(e){function r(s){var o=s.value;return s.done?(e=i.getNextRequest(),void(null!=e&&(null==n&&null!=i.db&&(n=new t(i)),a=e.call(n),r(a.next())))):void(o.constructor===window.IDBRequest?(o.onsuccess=function(){var e=o.result;null!=e&&e.constructor===window.IDBCursorWithValue&&(e=e.value),r(a.next(e))},o.onerror=function(e){a["throw"](e)}):o.constructor===window.IDBCursor?(o.onsuccess=function(){r(a.next(null!=o.result?o.result.value:null))},o.onerror=function(e){a["throw"](e)}):o.constructor===window.IDBOpenDBRequest?(o.onsuccess=function(e){var t=e.target.result;r(a.next(t))},o.onerror=function(){a["throw"]("Couldn't open IndexedDB database!")},o.onupgradeneeded=function(e){var t=e.target.result;try{t.createObjectStore("OperationStore",{keyPath:"id"}),t.createObjectStore("DeleteStore",{keyPath:"id"}),t.createObjectStore("StateStore",{keyPath:"id"})}catch(r){console.log("Store already exists!")}}):a["throw"]("You must not yield this type!"))}var n=null!=this.db?new t(this):null,i=this,a=e.call(n);r(a.next())},r.prototype.destroy=regeneratorRuntime.mark(function i(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return this.db.close(),e.next=3,window.indexedDB.deleteDatabase(this.namespace);case 3:case"end":return e.stop()}},i,this)}),r}(Y.AbstractDatabase);return r}();var globalRoom={users:{},buffers:{},removeUser:function(e){for(var t in this.users)this.users[t].userLeft(e);delete this.users[e],delete this.buffers[e]},addUser:function(e){this.users[e.userId]=e,this.buffers[e.userId]=[];for(var t in this.users)if(t!==e.userId){var r=this.users[t];r.userJoined(e.userId,"master"),e.userJoined(r.userId,"master")}}};Y.utils.globalRoom=globalRoom;var userIdCounter=0,Test=function(e){ +function t(r,n){var i=this;if(_classCallCheck(this,t),void 0===n)throw new Error("Options must not be undefined!");n.role="master",n.forwardToSyncingClients=!1,e.call(this,r,n),this.setUserId(userIdCounter++ +"").then(function(){globalRoom.addUser(i)}),this.globalRoom=globalRoom,this.syncingClientDuration=0}return _inherits(t,e),t.prototype.receiveMessage=function(t,r){e.prototype.receiveMessage.call(this,t,JSON.parse(JSON.stringify(r)))},t.prototype.send=function(e,t){var r=globalRoom.buffers[e];null!=r&&r.push(JSON.parse(JSON.stringify([this.userId,t])))},t.prototype.broadcast=function(e){for(var t in globalRoom.buffers)globalRoom.buffers[t].push(JSON.parse(JSON.stringify([this.userId,e])))},t.prototype.isDisconnected=function(){return null==globalRoom.users[this.userId]},t.prototype.reconnect=function(){return this.isDisconnected()&&(globalRoom.addUser(this),e.prototype.reconnect.call(this)),this.flushAll()},t.prototype.disconnect=function(){return this.isDisconnected()||(globalRoom.removeUser(this.userId),e.prototype.disconnect.call(this)),wait()},t.prototype.flush=function(){var e=this;return async(regeneratorRuntime.mark(function t(){var r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,wait();case 2:if(!(globalRoom.buffers[e.userId].length>0)){t.next=9;break}return r=globalRoom.buffers[e.userId].shift(),this.receiveMessage(r[0],r[1]),t.next=7,wait();case 7:t.next=2;break;case 9:case"end":return t.stop()}},t,this)}))},t.prototype.flushAll=function(){return new Promise(function(e){function t(){var r=_flushOne();if(r){for(;_flushOne(););wait().then(t)}else wait().then(function(){e()})}wait().then(t)})},t.prototype.flushOne=function(){_flushOne()},t}(Y.AbstractConnector);Y.Test=Test;var WebRTC=function(e){function t(r,n){if(_classCallCheck(this,t),void 0===n)throw new Error("Options must not be undefined!");if(null==n.room)throw new Error("You must define a room name!");n.role="slave",e.call(this,r,n),this.webrtcOptions={url:n.url||"https://yatta.ninja:8888",room:n.room};var i=new SimpleWebRTC(this.webrtcOptions);this.swr=i;var a=this;i.once("connectionReady",function(e){i.joinRoom(a.webrtcOptions.room),i.once("joinedRoom",function(){a.setUserId(e),i.on("channelMessage",function(e,t,r){null!=r.type&&a.receiveMessage(e.id,r.payload)})}),i.on("createdPeer",function(e){a.userJoined(e.id,"master")}),i.on("peerStreamRemoved",function(e){a.userLeft(e.id)})})}return _inherits(t,e),t.prototype.disconnect=function(){this.swr.leaveRoom(),e.prototype.disconnect.call(this)},t.prototype.reconnect=function(){this.swr.joinRoom(this.webrtcOptions.room),e.prototype.reconnect.call(this)},t.prototype.send=function r(e,t){var n=this,r=function i(){var r,a=n.swr.webrtc.getPeers(e)[0];a&&(r=a.sendDirectly("simplewebrtc","yjs",t)),r||setTimeout(i,500)};r()},t.prototype.broadcast=function(e){this.swr.sendDirectlyToAll("simplewebrtc","yjs",e)},t.prototype.isDisconnected=function(){return!1},t}(Y.AbstractConnector);Y.WebRTC=WebRTC,function(){var e=function(){function e(t,r,n,i){var a=this;_classCallCheck(this,e),this.os=t,this._model=r,this.idArray=n,this.valArray=i,this.eventHandler=new Y.utils.EventHandler(function(e){var t=[];for(var r in e){var n=e[r];if("Insert"===n.struct){var i=void 0;if(null===n.left)i=0;else{var s=JSON.stringify(n.left);if(i=a.idArray.indexOf(s)+1,0>=i)throw new Error("Unexpected operation!")}a.idArray.splice(i,0,JSON.stringify(n.id)),a.valArray.splice(i,0,n.content),t.push({type:"insert",object:a,index:i,length:1})}else{if("Delete"!==n.struct)throw new Error("Unexpected struct!");var i=a.idArray.indexOf(JSON.stringify(n.target));i>=0&&(a.idArray.splice(i,1),a.valArray.splice(i,1),t.push({type:"delete",object:a,index:i,length:1}))}}a.eventHandler.callEventListeners(t)})}return e.prototype.get=function(e){if(null==e||"number"!=typeof e)throw new Error("pos must be a number!");return this.valArray[e]},e.prototype.toArray=function(){return this.valArray.slice()},e.prototype.insert=function(e,t){if("number"!=typeof e)throw new Error("pos must be a number!");if(!(t instanceof Array))throw new Error("contents must be an Array of objects!");if(0!==t.length){if(e>this.idArray.length||0>e)throw new Error("This position exceeds the range of the array!");for(var r=0===e?null:JSON.parse(this.idArray[e-1]),n=[],i=r,a=0;athis.idArray.length||0>e||0>t)throw new Error("The deletion range exceeds the range of the array!");if(0!==t){for(var r=this.eventHandler,n=e>0?JSON.parse(this.idArray[e-1]):null,i=[],a=0;t>a;a++)i.push({target:JSON.parse(this.idArray[e+a]),struct:"Delete"});r.awaitAndPrematurelyCall(i),this.os.requestTransaction(regeneratorRuntime.mark(function s(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.applyCreatedOperations(i),"t0",1);case 1:r.awaitedDeletes(i.length,n);case 2:case"end":return e.stop()}},s,this)}))}},e.prototype.observe=function(e){this.eventHandler.addEventListener(e)},e.prototype._changed=regeneratorRuntime.mark(function t(e,r){var n,i;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(r.deleted){t.next=13;break}if("Insert"!==r.struct){t.next=12;break}n=r.left;case 3:if(null==n){t.next=11;break}return t.delegateYield(e.getOperation(n),"t0",5);case 5:if(i=t.t0,i.deleted){t.next=8;break}return t.abrupt("break",11);case 8:n=i.left,t.next=3;break;case 11:r.left=n;case 12:this.eventHandler.receivedOp(r);case 13:case"end":return t.stop()}},t,this)}),_createClass(e,[{key:"length",get:function(){return this.idArray.length}}]),e}();Y.Array=new Y.utils.CustomType({"class":e,createType:regeneratorRuntime.mark(function t(){var e,r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=this.store.getNextOpId(),r={struct:"List",type:"Array",start:null,end:null,id:e},t.delegateYield(this.applyCreatedOperations([r]),"t0",3);case 3:return t.abrupt("return",e);case 4:case"end":return t.stop()}},t,this)}),initType:regeneratorRuntime.mark(function r(t,n){var i,a;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return i=[],r.delegateYield(Y.Struct.List.map.call(this,n,function(e){return i.push(e.content),JSON.stringify(e.id)}),"t0",2);case 2:return a=r.t0,r.abrupt("return",new e(t,n.id,a,i));case 4:case"end":return r.stop()}},r,this)})})}(),function(){var e=function(){function e(t,r,n,i){var a=this;_classCallCheck(this,e),this._model=r.id,this.os=t,this.map=Y.utils.copyObject(r.map),this.contents=n,this.opContents=i,this.eventHandler=new Y.utils.EventHandler(function(e){var t=[];for(var r in e){var n,i=e[r],s="Delete"===i.struct?i.key:i.parentSub;if(null!=a.opContents[s]?!function(){var e=a.opContents[s];n=function(){return new Promise(function(t){a.os.requestTransaction(regeneratorRuntime.mark(function r(){return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.delegateYield(this.getType(e),"t0",1);case 1:r.t1=r.t0,t(r.t1);case 3:case"end":return r.stop()}},r,this)}))})}}():n=a.contents[s],"Insert"===i.struct){if(null===i.left){null!=i.opContent?(delete a.contents[s],i.deleted?delete a.opContents[s]:a.opContents[s]=i.opContent):(delete a.opContents[s],i.deleted?delete a.contents[s]:a.contents[s]=i.content),a.map[s]=i.id;var o={name:s,object:a};void 0===n?o.type="add":(o.type="update",o.oldValue=n),t.push(o)}}else{if("Delete"!==i.struct)throw new Error("Unexpected Operation!");if(Y.utils.compareIds(a.map[s],i.target)){delete a.opContents[s],delete a.contents[s];var u={name:s,object:a,oldValue:n,type:"delete"};t.push(u)}}}a.eventHandler.callEventListeners(t)})}return e.prototype.get=function(e){var t=this;if(null==e)throw new Error("You must specify key!");return null==this.opContents[e]?this.contents[e]:new Promise(function(r){var n=t.opContents[e];t.os.requestTransaction(regeneratorRuntime.mark(function i(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.getType(n),"t0",1);case 1:e.t1=e.t0,r(e.t1);case 3:case"end":return e.stop()}},i,this)}))})},e.prototype.getPrimitive=function(e){return null==e?Y.utils.copyObject(this.contents):this.contents[e]},e.prototype["delete"]=function(e){var t=this.map[e];if(null!=t){var r={target:t,struct:"Delete"},n=this.eventHandler,i=Y.utils.copyObject(r);i.key=e,n.awaitAndPrematurelyCall([i]),this.os.requestTransaction(regeneratorRuntime.mark(function a(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.applyCreatedOperations([r]),"t0",1);case 1:n.awaitedDeletes(1);case 2:case"end":return e.stop()}},a,this)}))}},e.prototype.set=function(e,t){var r=this,n=this.map[e]||null,i={left:null,right:n,origin:null,parent:this._model,parentSub:e,struct:"Insert"};return new Promise(function(e){if(t instanceof Y.utils.CustomType)r.os.requestTransaction(regeneratorRuntime.mark(function a(){var r,n;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.delegateYield(t.createType.call(this),"t0",1);case 1:return r=a.t0,a.delegateYield(this.getType(r),"t1",3);case 3:return n=a.t1,i.opContent=r,i.id=this.store.getNextOpId(),a.delegateYield(this.applyCreatedOperations([i]),"t2",7);case 7:e(n);case 8:case"end":return a.stop()}},a,this)}));else{i.content=t,i.id=r.os.getNextOpId();var n=r.eventHandler;n.awaitAndPrematurelyCall([i]),r.os.requestTransaction(regeneratorRuntime.mark(function s(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(this.applyCreatedOperations([i]),"t0",1);case 1:n.awaitedInserts(1);case 2:case"end":return e.stop()}},s,this)})),e(t)}})},e.prototype.observe=function(e){this.eventHandler.addEventListener(e)},e.prototype.unobserve=function(e){this.eventHandler.removeEventListener(e)},e.prototype.observePath=function(e,t){function r(e){for(var r=0;rr.length&&(t.right=r.length),t.left=Math.min(t.left,t.right);var n=document.createRange();n.setStart(r,t.left),n.setEnd(r,t.right);var a=window.getSelection();a.removeAllRanges(),a.addRange(n)}},o=function(t){var r=t.replace(new RegExp("\n","g")," ").split(" ");e.innerText="";for(var n in r){var i=r[n];e.innerText+=i,n!==r.length-1&&(e.innerHTML+=" ")}}),o(this.toString()),this.observe(function(e){for(var t in e){var r=e[t];if(!n){var i,o;if("insert"===r.type){i=r.index,o=function(e){return i>=e?e:e+=1};var u=a(o);s(u)}else"delete"===r.type&&(i=r.index,o=function(e){return i>e?e:e-=1},u=a(o),s(u))}}}),e.onkeypress=function(t){if(i.is_deleted)return e.onkeypress=null,!0;n=!0;var r;if(r=13===t.keyCode?"\n":null!=t.key?32===t.charCode?" ":t.key:window.String.fromCharCode(t.keyCode),r.length>1)return!0;if(r.length>0){var o=a(),u=Math.min(o.left,o.right,i.length),c=Math.abs(o.right-o.left);i["delete"](u,c),i.insert(u,r),o.left=u+r.length,o.right=o.left,s(o)}return t.preventDefault(),n=!1,!1},e.onpaste=function(t){return i.is_deleted?(e.onpaste=null,!0):void t.preventDefault()},e.oncut=function(t){return i.is_deleted?(e.oncut=null,!0):void t.preventDefault()},e.onkeydown=function(t){if(n=!0,i.is_deleted)return e.onkeydown=null,!0;var r=a(),o=Math.min(r.left,r.right,i.toString().length),u=Math.abs(r.left-r.right);if(null!=t.keyCode&&8===t.keyCode){if(u>0)i["delete"](o,u),r.left=o,r.right=o,s(r);else if(null!=t.ctrlKey&&t.ctrlKey){var c=i.toString(),l=o,p=0;for(o>0&&(l--,p++);l>0&&" "!==c[l]&&"\n"!==c[l];)l--,p++;i["delete"](l,o-l),r.left=l,r.right=l,s(r)}else o>0&&(i["delete"](o-1,1),r.left=o-1,r.right=o-1,s(r));return t.preventDefault(),n=!1,!1}return null!=t.keyCode&&46===t.keyCode?(u>0?(i["delete"](o,u),r.left=o,r.right=o,s(r)):(i["delete"](o,1),r.left=o,r.right=o,s(r)),t.preventDefault(),n=!1,!1):(n=!1,!0)}},t}(Y.Array["class"]);Y.TextBind=new Y.utils.CustomType({"class":e,createType:regeneratorRuntime.mark(function t(){var e,r;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=this.store.getNextOpId(),r={start:null,end:null,struct:"List",type:"TextBind",id:e},t.delegateYield(this.applyCreatedOperations([r]),"t0",3);case 3:return t.abrupt("return",e);case 4:case"end":return t.stop()}},t,this)}),initType:regeneratorRuntime.mark(function r(t,n){var i,a;return regeneratorRuntime.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return i=[],r.delegateYield(Y.Struct.List.map.call(this,n,function(e){return i.push(e.content),JSON.stringify(e.id)}),"t0",2);case 2:return a=r.t0,r.abrupt("return",new e(t,n.id,a,i));case 4:case"end":return r.stop()}},r,this)})})}(); +//# sourceMappingURL=y.js.map \ No newline at end of file diff --git a/y.js.map b/y.js.map new file mode 100644 index 00000000..aeb78138 --- /dev/null +++ b/y.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["y.js","Utils.js","Test.js","runtime.js","Connector.js","Database.js","Transaction.js","Struct.js","RedBlackTree.js","Memory.js","IndexedDB.js","WebRTC.js","Array.js","Map.js","TextBind.js"],"names":["_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_classCallCheck","instance","Constructor","Y","opts","Promise","resolve","yconfig","YConfig","db","whenUserIdSet","copyObject","o","c","key","smaller","a","b","compareIds","id1","id2","_flushOne","bufs","i","globalRoom","buffers","length","push","userId","getRandom","m","shift","user","users","receiveMessage","_createClass","defineProperties","target","props","descriptor","defineProperty","protoProps","staticProps","global","wrap","innerFn","outerFn","self","tryLocsList","generator","Generator","_invoke","makeInvokeMethod","Context","tryCatch","fn","obj","arg","type","call","err","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","forEach","method","this","AwaitArgument","AsyncIterator","invoke","result","then","invokeNext","invokeThrow","unwrapped","enqueue","enqueueResult","previousPromise","ignored","process","domain","bind","context","state","GenStateSuspendedStart","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","iterator","undefined","returnMethod","record","info","done","GenStateSuspendedYield","resultName","next","nextLoc","sent","dispatchException","abrupt","ContinueSentinel","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","values","iterable","iteratorMethod","iteratorSymbol","isNaN","hasOwn","hasOwnProperty","Symbol","inModule","module","runtime","regeneratorRuntime","exports","Gp","displayName","isGeneratorFunction","genFun","ctor","name","mark","awrap","async","iter","toString","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","window","callback","connector","requestTransaction","model","root","context$3$0","id","struct","map","store","tryExecute","getType","t1","y","isConnected","isSynced","disconnect","reconnect","destroy","YConcurrency_TestingMode","g","utils","AbstractConnector","role","connections","userEventListeners","whenSyncedListeners","currentSyncTarget","syncingClients","forwardToSyncingClients","debug","broadcastedHB","syncStep2","stopGarbageCollector","setUserId","onUserEvent","f","userLeft","findNextSyncTarget","filter","cli","_iterator","_isArray","Array","isArray","_i","_ref","action","userJoined","_iterator2","_isArray2","_i2","_ref2","whenSynced","syncUser","uid","conn","callee$2$0","t0","getStateSet","t3","t2","getDeleteSet","t5","t4","t6","stateSet","deleteSet","send","_iterator3","_isArray3","_i3","_ref3","garbageCollectAfterSync","message","console","log","sender","_this","JSON","parse","stringify","callee$3$0","currentStateSet","ds","ops","context$4$0","applyDeleteSet","getOperations","os","setTimeout","syncingClientDuration","_setSyncedWith","broadcastHB","callee$4$0","context$5$0","apply","callee$5$0","context$6$0","broadcast","_iterator4","_isArray4","_i4","_ref4","client","parseMessageFromXml","parseArray","_x","_again","_function","node","_iterator5","_isArray5","_i5","_ref5","n","children","getAttribute","parseObject","json","attrName","attrs","int","parseInt","encodeMessageToXml","msg","encodeObject","encodeArray","setAttribute","array","_iterator6","_isArray6","_i6","_ref6","e","xmlns","AbstractDatabase","garbageCollect","oid","gc2","garbageCollectOperation","gc1","gcTimeout","gcInterval","listenersById","listenersByIdExecuteNow","listenersByIdRequestPending","initializedTypes","whenUserIdSetListener","waitingTransactions","transactionInProgress","executeOrder","addToDebug","command","arguments","s","join","replace","getDebugData","ungc","op","concat","getOperation","gc","setOperation","addToGarbageCollector","left","deleted","removeFromGarbageCollector","clearInterval","getState","opClock","clock","getNextOpId","required","Struct","requiredOps","whenOperationsExist","ids","listener","missing","sid","l","exeNow","ls","t7","t8","context$2$0","Delete","execute","operationAdded","isGarbageCollected","addOperation","transaction","t","delop","parent","_changed","checkDeleteStoreForState","findNext","setState","isDeleted","getNextRequest","makeGen","callImmediately","transact","Transaction","initType","applyCreatedOperations","encode","isDisconnected","deleteList","start","right","deleteOperation","targetId","preventCallType","callType","markDeleted","opContent","t9","t10","t12","t13","markGarbageCollected","newlen","len","put","findPrev","findWithUpperBound","iterate","neworigin","neworigin_","setParent","origin","some","t15","parentSub","end","removeOperation","Math","max","deletions","createDeletions","dv","pos","d","del","Number","MAX_VALUE","diff","min","counter","find","val","ss","getStateVector","stateVector","startSS","endSV","_iterator7","_isArray7","_i7","_ref7","endState","startPos","res","_iterator8","_isArray8","_i8","_ref8","makeOperationReady","context$1$0","Insert","content","getDistanceToOrigin","distanceToOrigin","startId","oOriginDistance","t11","t14","List","ref","operation","Map","get","delete","_delete","v","EventHandler","onevent","waiting","awaiting","eventListeners","receivedOp","awaitAndPrematurelyCall","addEventListener","removeEventListener","removeAllEventListeners","callEventListeners","event","awaitedInserts","splice","w","_tryCallEvents","awaitedDeletes","newLeft","j","events","CustomType","def","createType","N","color","_left","_right","_parent","isRed","isBlack","redden","blacken","rotateLeft","tree","newParent","newRight","p","rotateRight","getUncle","set","RBTree","findWithLowerBound","findNodeWithLowerBound","from","findNodeWithUpperBound","to","logTable","o_","table","findNode","isFakeChild","child","_fixDelete","sibling","_fixInsert","uncle","grandparent","Memory","_Y$Transaction","Database","_Y$AbstractDatabase","warn","gen","IndexedDB","Store","objectStore","openCursor","IDBKeyRange","lowerBound","upperBound","range","cursorResult","bound","_Y$Transaction2","OperationStore","_Y$AbstractDatabase2","namespace","idbVersion","indexedDB","open","cleanStart","clear","operationsToAdd","newValue","add","noAdd","localStorage","handleTransactions","request","IDBRequest","onsuccess","IDBCursorWithValue","onerror","IDBCursor","IDBOpenDBRequest","onupgradeneeded","createObjectStore","keyPath","close","deleteDatabase","removeUser","addUser","uname","u","userIdCounter","Test","_Y$AbstractConnector","options","_this2","buffer","flushAll","wait","flush","nextFlush","flushOne","WebRTC","_Y$AbstractConnector2","room","webrtcOptions","url","swr","SimpleWebRTC","once","joinRoom","on","peer","room_","payload","leaveRoom","success","webrtc","getPeers","sendDirectly","sendDirectlyToAll","YArray","_model","idArray","valArray","_this3","eventHandler","userEvents","indexOf","index","toArray","insert","contents","mostLeft","prevId","mostRight","dels","observe","class","YArrayCreator","modelid","YArrayInitializer","YMap","opContents","_this4","oldValue","prevType","callee$7$0","context$8$0","insertEvent","deleteEvent","_this5","getPrimitive","modDel","_this6","typeid","unobserve","observePath","path","observeProperty","propertyName","property","deleteChildObservers","resetObserverPath","promise","_deleteChildObservers","observer","YMapCreator","YMapInitializer","YTextBind","_Y$Array$class","textfields","split","textfield","domRoot","getSelection","creatorToken","word","createRange","writeRange","writeContent","selectionStart","setSelectionRange","fix","selectionEnd","clength","textContent","anchorOffset","focusOffset","editedElement","focusNode","childNodes","isReal","textnode","r","document","setStart","setEnd","removeAllRanges","addRange","contentArray","RegExp","innerText","innerHTML","oPos","cursor","onkeypress","is_deleted","char","keyCode","charCode","String","fromCharCode","abs","preventDefault","onpaste","oncut","onkeydown","ctrlKey","newPos","delLength","TextBind","YTextBindCreator","YTextBindInitializer"],"mappings":"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","file":"y.js","sourcesContent":["/* @flow */\n'use strict'\n\nfunction Y (opts) {\n return new Promise(function (resolve) {\n var yconfig = new YConfig(opts, function () {\n yconfig.db.whenUserIdSet(function () {\n resolve(yconfig)\n })\n })\n })\n}\n\nclass YConfig {\n constructor (opts, callback) {\n this.db = new Y[opts.db.name](this, opts.db)\n this.connector = new Y[opts.connector.name](this, opts.connector)\n this.db.requestTransaction(function * requestTransaction () {\n // create initial Map type\n var model = {\n id: ['_', 0],\n struct: 'Map',\n type: 'Map',\n map: {}\n }\n yield* this.store.tryExecute.call(this, model)\n var root = yield* this.getType(model.id)\n this.store.y.root = root\n callback()\n })\n }\n isConnected () {\n return this.connector.isSynced\n }\n disconnect () {\n return this.connector.disconnect()\n }\n reconnect () {\n return this.connector.reconnect()\n }\n destroy () {\n this.disconnect()\n this.db.destroy()\n this.connector = null\n this.db = null\n }\n}\n\nif (typeof YConcurrency_TestingMode !== 'undefined') {\n g.Y = Y //eslint-disable-line\n // debugger //eslint-disable-line\n}\nY.utils = {}\n","/* global Y */\n'use strict'\n\n/*\n EventHandler is an helper class for constructing custom types.\n\n Why: When constructing custom types, you sometimes want your types to work\n synchronous: E.g.\n ``` Synchronous\n mytype.setSomething(\"yay\")\n mytype.getSomething() === \"yay\"\n ```\n ``` Asynchronous\n mytype.setSomething(\"yay\")\n mytype.getSomething() === undefined\n mytype.waitForSomething().then(function(){\n mytype.getSomething() === \"yay\"\n })\n\n The structures usually work asynchronously (you have to wait for the\n database request to finish). EventHandler will help you to make your type\n synchronously.\n*/\nclass EventHandler {\n /*\n onevent: is called when the structure changes.\n\n Note: \"awaiting opertations\" is used to denote operations that were\n prematurely called. Events for received operations can not be executed until\n all prematurely called operations were executed (\"waiting operations\")\n */\n constructor (onevent) {\n this.waiting = []\n this.awaiting = 0\n this.onevent = onevent\n this.eventListeners = []\n }\n /*\n Call this when a new operation arrives. It will be executed right away if\n there are no waiting operations, that you prematurely executed\n */\n receivedOp (op) {\n if (this.awaiting <= 0) {\n this.onevent([op])\n } else {\n this.waiting.push(Y.utils.copyObject(op))\n }\n }\n /*\n You created some operations, and you want the `onevent` function to be\n called right away. Received operations will not be executed untill all\n prematurely called operations are executed\n */\n awaitAndPrematurelyCall (ops) {\n this.awaiting++\n this.onevent(ops)\n }\n /*\n Basic event listener boilerplate...\n TODO: maybe put this in a different type..\n */\n addEventListener (f) {\n this.eventListeners.push(f)\n }\n removeEventListener (f) {\n this.eventListeners = this.eventListeners.filter(function (g) {\n return f !== g\n })\n }\n removeAllEventListeners () {\n this.eventListeners = []\n }\n callEventListeners (event) {\n for (var i in this.eventListeners) {\n try {\n this.eventListeners[i](event)\n } catch (e) {\n console.log('User events must not throw Errors!') // eslint-disable-line\n }\n }\n }\n /*\n Call this when you successfully awaited the execution of n Insert operations\n */\n awaitedInserts (n) {\n var ops = this.waiting.splice(this.waiting.length - n)\n for (var oid = 0; oid < ops.length; oid++) {\n var op = ops[oid]\n for (var i = this.waiting.length - 1; i >= 0; i--) {\n let w = this.waiting[i]\n if (Y.utils.compareIds(op.left, w.id)) {\n // include the effect of op in w\n w.right = op.id\n // exclude the effect of w in op\n op.left = w.left\n } else if (Y.utils.compareIds(op.right, w.id)) {\n // similar..\n w.left = op.id\n op.right = w.right\n }\n }\n }\n this._tryCallEvents()\n }\n /*\n Call this when you successfully awaited the execution of n Delete operations\n */\n awaitedDeletes (n, newLeft) {\n var ops = this.waiting.splice(this.waiting.length - n)\n for (var j in ops) {\n var del = ops[j]\n if (newLeft != null) {\n for (var i in this.waiting) {\n let w = this.waiting[i]\n // We will just care about w.left\n if (Y.utils.compareIds(del.target, w.left)) {\n del.left = newLeft\n }\n }\n }\n }\n this._tryCallEvents()\n }\n /* (private)\n Try to execute the events for the waiting operations\n */\n _tryCallEvents () {\n this.awaiting--\n if (this.awaiting <= 0 && this.waiting.length > 0) {\n var events = this.waiting\n this.waiting = []\n this.onevent(events)\n }\n }\n}\nY.utils.EventHandler = EventHandler\n\n/*\n A wrapper for the definition of a custom type.\n Every custom type must have three properties:\n\n * createType\n - Defines the model of a newly created custom type and returns the type\n * initType\n - Given a model, creates a custom type\n * class\n - the constructor of the custom type (e.g. in order to inherit from a type)\n*/\nclass CustomType { // eslint-disable-line\n constructor (def) {\n if (def.createType == null ||\n def.initType == null ||\n def.class == null\n ) {\n throw new Error('Custom type was not initialized correctly!')\n }\n this.createType = def.createType\n this.initType = def.initType\n this.class = def.class\n }\n}\nY.utils.CustomType = CustomType\n\n/*\n Make a flat copy of an object\n (just copy properties)\n*/\nfunction copyObject (o) {\n var c = {}\n for (var key in o) {\n c[key] = o[key]\n }\n return c\n}\nY.utils.copyObject = copyObject\n\n/*\n Defines a smaller relation on Id's\n*/\nfunction smaller (a, b) {\n return a[0] < b[0] || (a[0] === b[0] && a[1] < b[1])\n}\nY.utils.smaller = smaller\n\nfunction compareIds (id1, id2) {\n if (id1 == null || id2 == null) {\n if (id1 == null && id2 == null) {\n return true\n }\n return false\n }\n if (id1[0] === id2[0] && id1[1] === id2[1]) {\n return true\n } else {\n return false\n }\n}\nY.utils.compareIds = compareIds\n","/* global getRandom, Y, wait, async */\n'use strict'\n\nvar globalRoom = {\n users: {},\n buffers: {},\n removeUser: function (user) {\n for (var i in this.users) {\n this.users[i].userLeft(user)\n }\n delete this.users[user]\n delete this.buffers[user]\n },\n addUser: function (connector) {\n this.users[connector.userId] = connector\n this.buffers[connector.userId] = []\n for (var uname in this.users) {\n if (uname !== connector.userId) {\n var u = this.users[uname]\n u.userJoined(connector.userId, 'master')\n connector.userJoined(u.userId, 'master')\n }\n }\n }\n}\nY.utils.globalRoom = globalRoom\n\nfunction flushOne () {\n var bufs = []\n for (var i in globalRoom.buffers) {\n if (globalRoom.buffers[i].length > 0) {\n bufs.push(i)\n }\n }\n if (bufs.length > 0) {\n var userId = getRandom(bufs)\n var m = globalRoom.buffers[userId].shift()\n var user = globalRoom.users[userId]\n user.receiveMessage(m[0], m[1])\n return true\n } else {\n return false\n }\n}\n\n// setInterval(flushOne, 10)\n\nvar userIdCounter = 0\n\nclass Test extends Y.AbstractConnector {\n constructor (y, options) {\n if (options === undefined) {\n throw new Error('Options must not be undefined!')\n }\n options.role = 'master'\n options.forwardToSyncingClients = false\n super(y, options)\n this.setUserId((userIdCounter++) + '').then(() => {\n globalRoom.addUser(this)\n })\n this.globalRoom = globalRoom\n this.syncingClientDuration = 0\n }\n receiveMessage (sender, m) {\n super.receiveMessage(sender, JSON.parse(JSON.stringify(m)))\n }\n send (userId, message) {\n var buffer = globalRoom.buffers[userId]\n if (buffer != null) {\n buffer.push(JSON.parse(JSON.stringify([this.userId, message])))\n }\n }\n broadcast (message) {\n for (var key in globalRoom.buffers) {\n globalRoom.buffers[key].push(JSON.parse(JSON.stringify([this.userId, message])))\n }\n }\n isDisconnected () {\n return globalRoom.users[this.userId] == null\n }\n reconnect () {\n if (this.isDisconnected()) {\n globalRoom.addUser(this)\n super.reconnect()\n }\n return this.flushAll()\n }\n disconnect () {\n if (!this.isDisconnected()) {\n globalRoom.removeUser(this.userId)\n super.disconnect()\n }\n return wait()\n }\n flush () {\n var self = this\n return async(function * () {\n yield wait()\n while (globalRoom.buffers[self.userId].length > 0) {\n var m = globalRoom.buffers[self.userId].shift()\n this.receiveMessage(m[0], m[1])\n yield wait()\n }\n })\n }\n flushAll () {\n return new Promise(function (resolve) {\n // flushes may result in more created operations,\n // flush until there is nothing more to flush\n function nextFlush () {\n var c = flushOne()\n if (c) {\n while (flushOne()) {\n // nop\n }\n wait().then(nextFlush)\n } else {\n wait().then(function () {\n resolve()\n })\n }\n }\n // in the case that there are\n // still actions that want to be performed\n wait().then(nextFlush)\n })\n }\n /*\n Flushes an operation for some user..\n */\n flushOne () {\n flushOne()\n }\n}\n\nY.Test = Test\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n\n generator._invoke = makeInvokeMethod(\n innerFn, self || null,\n new Context(tryLocsList || [])\n );\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n genFun.__proto__ = GeneratorFunctionPrototype;\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n var enqueueResult =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(function() {\n return invoke(method, arg);\n }) : new Promise(function(resolve) {\n resolve(invoke(method, arg));\n });\n\n // Avoid propagating enqueueResult failures to Promises returned by\n // later invocations of the iterator.\n previousPromise = enqueueResult[\"catch\"](function(ignored){});\n\n return enqueueResult;\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","/* globals Y */\n'use strict'\n\nclass AbstractConnector {\n /*\n opts contains the following information:\n role : String Role of this client (\"master\" or \"slave\")\n userId : String Uniquely defines the user.\n debug: Boolean Whether to print debug messages (optional)\n */\n constructor (y, opts) {\n this.y = y\n if (opts == null) {\n opts = {}\n }\n if (opts.role == null || opts.role === 'master') {\n this.role = 'master'\n } else if (opts.role === 'slave') {\n this.role = 'slave'\n } else {\n throw new Error(\"Role must be either 'master' or 'slave'!\")\n }\n this.role = opts.role\n this.connections = {}\n this.isSynced = false\n this.userEventListeners = []\n this.whenSyncedListeners = []\n this.currentSyncTarget = null\n this.syncingClients = []\n this.forwardToSyncingClients = opts.forwardToSyncingClients !== false\n this.debug = opts.debug === true\n this.broadcastedHB = false\n this.syncStep2 = Promise.resolve()\n }\n reconnect () {\n }\n disconnect () {\n this.connections = {}\n this.isSynced = false\n this.currentSyncTarget = null\n this.broadcastedHB = false\n this.syncingClients = []\n this.whenSyncedListeners = []\n return this.y.db.stopGarbageCollector()\n }\n setUserId (userId) {\n this.userId = userId\n return this.y.db.setUserId(userId)\n }\n onUserEvent (f) {\n this.userEventListeners.push(f)\n }\n userLeft (user) {\n delete this.connections[user]\n if (user === this.currentSyncTarget) {\n this.currentSyncTarget = null\n this.findNextSyncTarget()\n }\n this.syncingClients = this.syncingClients.filter(function (cli) {\n return cli !== user\n })\n for (var f of this.userEventListeners) {\n f({\n action: 'userLeft',\n user: user\n })\n }\n }\n userJoined (user, role) {\n if (role == null) {\n throw new Error('You must specify the role of the joined user!')\n }\n if (this.connections[user] != null) {\n throw new Error('This user already joined!')\n }\n this.connections[user] = {\n isSynced: false,\n role: role\n }\n for (var f of this.userEventListeners) {\n f({\n action: 'userJoined',\n user: user,\n role: role\n })\n }\n if (this.currentSyncTarget == null) {\n this.findNextSyncTarget()\n }\n }\n // Execute a function _when_ we are connected.\n // If not connected, wait until connected\n whenSynced (f) {\n if (this.isSynced) {\n f()\n } else {\n this.whenSyncedListeners.push(f)\n }\n }\n /*\n\n returns false, if there is no sync target\n true otherwise\n */\n findNextSyncTarget () {\n if (this.currentSyncTarget != null || this.isSynced) {\n return // \"The current sync has not finished!\"\n }\n\n var syncUser = null\n for (var uid in this.connections) {\n if (!this.connections[uid].isSynced) {\n syncUser = uid\n break\n }\n }\n if (syncUser != null) {\n var conn = this\n this.currentSyncTarget = syncUser\n this.y.db.requestTransaction(function *() {\n conn.send(syncUser, {\n type: 'sync step 1',\n stateSet: yield* this.getStateSet(),\n deleteSet: yield* this.getDeleteSet()\n })\n })\n } else {\n this.isSynced = true\n // call when synced listeners\n for (var f of this.whenSyncedListeners) {\n f()\n }\n this.whenSyncedListeners = []\n this.y.db.requestTransaction(function *() {\n yield* this.garbageCollectAfterSync()\n })\n }\n }\n send (uid, message) {\n if (this.debug) {\n console.log(`send ${this.userId} -> ${uid}: ${message.type}`, m) // eslint-disable-line\n }\n }\n /*\n You received a raw message, and you know that it is intended for Yjs. Then call this function.\n */\n receiveMessage (sender, m) {\n if (sender === this.userId) {\n return\n }\n if (this.debug) {\n console.log(`receive ${sender} -> ${this.userId}: ${m.type}`, JSON.parse(JSON.stringify(m))) // eslint-disable-line\n }\n if (m.type === 'sync step 1') {\n // TODO: make transaction, stream the ops\n let conn = this\n this.y.db.requestTransaction(function *() {\n var currentStateSet = yield* this.getStateSet()\n yield* this.applyDeleteSet(m.deleteSet)\n\n var ds = yield* this.getDeleteSet()\n var ops = yield* this.getOperations(m.stateSet)\n conn.send(sender, {\n type: 'sync step 2',\n os: ops,\n stateSet: currentStateSet,\n deleteSet: ds\n })\n if (this.forwardToSyncingClients) {\n conn.syncingClients.push(sender)\n setTimeout(function () {\n conn.syncingClients = conn.syncingClients.filter(function (cli) {\n return cli !== sender\n })\n conn.send(sender, {\n type: 'sync done'\n })\n }, conn.syncingClientDuration)\n } else {\n conn.send(sender, {\n type: 'sync done'\n })\n }\n conn._setSyncedWith(sender)\n })\n } else if (m.type === 'sync step 2') {\n let conn = this\n var broadcastHB = !this.broadcastedHB\n this.broadcastedHB = true\n var db = this.y.db\n this.syncStep2 = new Promise(function (resolve) {\n db.requestTransaction(function * () {\n yield* this.applyDeleteSet(m.deleteSet)\n this.store.apply(m.os)\n db.requestTransaction(function * () {\n var ops = yield* this.getOperations(m.stateSet)\n if (ops.length > 0) {\n m = {\n type: 'update',\n ops: ops\n }\n if (!broadcastHB) { // TODO: consider to broadcast here..\n conn.send(sender, m)\n } else {\n // broadcast only once!\n conn.broadcast(m)\n }\n }\n resolve()\n })\n })\n })\n } else if (m.type === 'sync done') {\n var self = this\n this.syncStep2.then(function () {\n self._setSyncedWith(sender)\n })\n } else if (m.type === 'update') {\n if (this.forwardToSyncingClients) {\n for (var client of this.syncingClients) {\n this.send(client, m)\n }\n }\n this.y.db.apply(m.ops)\n }\n }\n _setSyncedWith (user) {\n var conn = this.connections[user]\n if (conn != null) {\n conn.isSynced = true\n }\n if (user === this.currentSyncTarget) {\n this.currentSyncTarget = null\n this.findNextSyncTarget()\n }\n }\n /*\n Currently, the HB encodes operations as JSON. For the moment I want to keep it\n that way. Maybe we support encoding in the HB as XML in the future, but for now I don't want\n too much overhead. Y is very likely to get changed a lot in the future\n\n Because we don't want to encode JSON as string (with character escaping, wich makes it pretty much unreadable)\n we encode the JSON as XML.\n\n When the HB support encoding as XML, the format should look pretty much like this.\n\n does not support primitive values as array elements\n expects an ltx (less than xml) object\n */\n parseMessageFromXml (m) {\n function parseArray (node) {\n for (var n of node.children) {\n if (n.getAttribute('isArray') === 'true') {\n return parseArray(n)\n } else {\n return parseObject(n)\n }\n }\n }\n function parseObject (node) {\n var json = {}\n for (var attrName in node.attrs) {\n var value = node.attrs[attrName]\n var int = parseInt(value, 10)\n if (isNaN(int) || ('' + int) !== value) {\n json[attrName] = value\n } else {\n json[attrName] = int\n }\n }\n for (var n in node.children) {\n var name = n.name\n if (n.getAttribute('isArray') === 'true') {\n json[name] = parseArray(n)\n } else {\n json[name] = parseObject(n)\n }\n }\n return json\n }\n parseObject(m)\n }\n /*\n encode message in xml\n we use string because Strophe only accepts an \"xml-string\"..\n So {a:4,b:{c:5}} will look like\n \n \n \n m - ltx element\n json - Object\n */\n encodeMessageToXml (msg, obj) {\n // attributes is optional\n function encodeObject (m, json) {\n for (var name in json) {\n var value = json[name]\n if (name == null) {\n // nop\n } else if (value.constructor === Object) {\n encodeObject(m.c(name), value)\n } else if (value.constructor === Array) {\n encodeArray(m.c(name), value)\n } else {\n m.setAttribute(name, value)\n }\n }\n }\n function encodeArray (m, array) {\n m.setAttribute('isArray', 'true')\n for (var e of array) {\n if (e.constructor === Object) {\n encodeObject(m.c('array-element'), e)\n } else {\n encodeArray(m.c('array-element'), e)\n }\n }\n }\n if (obj.constructor === Object) {\n encodeObject(msg.c('y', { xmlns: 'http://y.ninja/connector-stanza' }), obj)\n } else if (obj.constructor === Array) {\n encodeArray(msg.c('y', { xmlns: 'http://y.ninja/connector-stanza' }), obj)\n } else {\n throw new Error(\"I can't encode this json!\")\n }\n }\n}\nY.AbstractConnector = AbstractConnector\n","/* global Y */\n'use strict'\n\n/*\n Partial definition of an OperationStore.\n TODO: name it Database, operation store only holds operations.\n\n A database definition must alse define the following methods:\n * logTable() (optional)\n - show relevant information information in a table\n * requestTransaction(makeGen)\n - request a transaction\n * destroy()\n - destroy the database\n*/\nclass AbstractDatabase {\n constructor (y, opts) {\n this.y = y\n // E.g. this.listenersById[id] : Array\n this.listenersById = {}\n // Execute the next time a transaction is requested\n this.listenersByIdExecuteNow = []\n // A transaction is requested\n this.listenersByIdRequestPending = false\n /* To make things more clear, the following naming conventions:\n * ls : we put this.listenersById on ls\n * l : Array\n * id : Id (can't use as property name)\n * sid : String (converted from id via JSON.stringify\n so we can use it as a property name)\n\n Always remember to first overwrite\n a property before you iterate over it!\n */\n // TODO: Use ES7 Weak Maps. This way types that are no longer user,\n // wont be kept in memory.\n this.initializedTypes = {}\n this.whenUserIdSetListener = null\n this.waitingTransactions = []\n this.transactionInProgress = false\n if (typeof YConcurrency_TestingMode !== 'undefined') {\n this.executeOrder = []\n }\n this.gc1 = [] // first stage\n this.gc2 = [] // second stage -> after that, remove the op\n this.gcTimeout = opts.gcTimeout || 5000\n var os = this\n function garbageCollect () {\n return new Promise((resolve) => {\n os.requestTransaction(function * () {\n if (os.y.connector != null && os.y.connector.isSynced) {\n for (var i in os.gc2) {\n var oid = os.gc2[i]\n yield* this.garbageCollectOperation(oid)\n }\n os.gc2 = os.gc1\n os.gc1 = []\n }\n if (os.gcTimeout > 0) {\n os.gcInterval = setTimeout(garbageCollect, os.gcTimeout)\n }\n resolve()\n })\n })\n }\n this.garbageCollect = garbageCollect\n if (this.gcTimeout > 0) {\n garbageCollect()\n }\n }\n addToDebug () {\n if (typeof YConcurrency_TestingMode !== 'undefined') {\n var command = Array.prototype.map.call(arguments, function (s) {\n if (typeof s === 'string') {\n return s\n } else {\n return JSON.stringify(s)\n }\n }).join('').replace(/\"/g, \"'\").replace(/,/g, ', ').replace(/:/g, ': ')\n this.executeOrder.push(command)\n }\n }\n getDebugData () {\n console.log(this.executeOrder.join('\\n'))\n }\n stopGarbageCollector () {\n var self = this\n return new Promise(function (resolve) {\n self.requestTransaction(function * () {\n var ungc = self.gc1.concat(self.gc2)\n self.gc1 = []\n self.gc2 = []\n for (var i in ungc) {\n var op = yield* this.getOperation(ungc[i])\n delete op.gc\n yield* this.setOperation(op)\n }\n resolve()\n })\n })\n }\n /*\n Try to add to GC.\n\n TODO: rename this function\n\n Rulez:\n * Only gc if this user is online\n * The most left element in a list must not be gc'd.\n => There is at least one element in the list\n\n returns true iff op was added to GC\n */\n addToGarbageCollector (op, left) {\n if (\n op.gc == null &&\n op.deleted === true &&\n this.y.connector.isSynced &&\n left != null &&\n left.deleted === true\n ) {\n op.gc = true\n this.gc1.push(op.id)\n return true\n } else {\n return false\n }\n }\n removeFromGarbageCollector (op) {\n function filter (o) {\n return !Y.utils.compareIds(o, op.id)\n }\n this.gc1 = this.gc1.filter(filter)\n this.gc2 = this.gc2.filter(filter)\n delete op.gc\n }\n destroy () {\n clearInterval(this.gcInterval)\n this.gcInterval = null\n }\n setUserId (userId) {\n var self = this\n return new Promise(function (resolve) {\n self.requestTransaction(function * () {\n self.userId = userId\n self.opClock = (yield* this.getState(userId)).clock\n if (self.whenUserIdSetListener != null) {\n self.whenUserIdSetListener()\n self.whenUserIdSetListener = null\n }\n resolve()\n })\n })\n }\n whenUserIdSet (f) {\n if (this.userId != null) {\n f()\n } else {\n this.whenUserIdSetListener = f\n }\n }\n getNextOpId () {\n if (this.userId == null) {\n throw new Error('OperationStore not yet initialized!')\n }\n return [this.userId, this.opClock++]\n }\n /*\n Apply a list of operations.\n\n * get a transaction\n * check whether all Struct.*.requiredOps are in the OS\n * check if it is an expected op (otherwise wait for it)\n * check if was deleted, apply a delete operation after op was applied\n */\n apply (ops) {\n for (var key in ops) {\n var o = ops[key]\n var required = Y.Struct[o.struct].requiredOps(o)\n this.whenOperationsExist(required, o)\n }\n }\n /*\n op is executed as soon as every operation requested is available.\n Note that Transaction can (and should) buffer requests.\n */\n whenOperationsExist (ids, op) {\n if (ids.length > 0) {\n let listener = {\n op: op,\n missing: ids.length\n }\n\n for (let key in ids) {\n let id = ids[key]\n let sid = JSON.stringify(id)\n let l = this.listenersById[sid]\n if (l == null) {\n l = []\n this.listenersById[sid] = l\n }\n l.push(listener)\n }\n } else {\n this.listenersByIdExecuteNow.push({\n op: op\n })\n }\n\n if (this.listenersByIdRequestPending) {\n return\n }\n\n this.listenersByIdRequestPending = true\n var store = this\n\n this.requestTransaction(function * () {\n var exeNow = store.listenersByIdExecuteNow\n store.listenersByIdExecuteNow = []\n\n var ls = store.listenersById\n store.listenersById = {}\n\n store.listenersByIdRequestPending = false\n\n for (let key in exeNow) {\n let o = exeNow[key].op\n yield* store.tryExecute.call(this, o)\n }\n\n for (var sid in ls) {\n var l = ls[sid]\n var id = JSON.parse(sid)\n if ((yield* this.getOperation(id)) == null) {\n store.listenersById[sid] = l\n } else {\n for (let key in l) {\n let listener = l[key]\n let o = listener.op\n if (--listener.missing === 0) {\n yield* store.tryExecute.call(this, o)\n }\n }\n }\n }\n })\n }\n /*\n Actually execute an operation, when all expected operations are available.\n */\n * tryExecute (op) {\n this.store.addToDebug('yield* this.store.tryExecute.call(this, ', JSON.stringify(op), ')')\n if (op.struct === 'Delete') {\n yield* Y.Struct.Delete.execute.call(this, op)\n yield* this.store.operationAdded(this, op)\n } else if ((yield* this.getOperation(op.id)) == null && !(yield* this.isGarbageCollected(op.id))) {\n yield* Y.Struct[op.struct].execute.call(this, op)\n yield* this.addOperation(op)\n yield* this.store.operationAdded(this, op)\n }\n }\n // called by a transaction when an operation is added\n * operationAdded (transaction, op) {\n if (op.struct === 'Delete') {\n var target = yield* transaction.getOperation(op.target)\n if (target != null) {\n var type = transaction.store.initializedTypes[JSON.stringify(target.parent)]\n if (type != null) {\n yield* type._changed(transaction, {\n struct: 'Delete',\n target: op.target\n })\n }\n }\n } else {\n // increase SS\n var o = op\n var state = yield* transaction.getState(op.id[0])\n while (o != null && o.id[1] === state.clock && op.id[0] === o.id[0]) {\n // either its a new operation (1. case), or it is an operation that was deleted, but is not yet in the OS\n state.clock++\n yield* transaction.checkDeleteStoreForState(state)\n o = yield* transaction.os.findNext(o.id)\n }\n yield* transaction.setState(state)\n\n // notify whenOperation listeners (by id)\n var sid = JSON.stringify(op.id)\n var l = this.listenersById[sid]\n delete this.listenersById[sid]\n\n if (l != null) {\n for (var key in l) {\n var listener = l[key]\n if (--listener.missing === 0) {\n this.whenOperationsExist([], listener.op)\n }\n }\n }\n var t = this.initializedTypes[JSON.stringify(op.parent)]\n // notify parent, if it has been initialized as a custom type\n if (t != null) {\n yield* t._changed(transaction, Y.utils.copyObject(op))\n }\n\n // Delete if DS says this is actually deleted\n if (!op.deleted && (yield* transaction.isDeleted(op.id))) {\n var delop = {\n struct: 'Delete',\n target: op.id\n }\n yield* Y.Struct['Delete'].execute.call(transaction, delop)\n if (t != null) {\n yield* t._changed(transaction, delop)\n }\n }\n }\n }\n getNextRequest () {\n if (this.waitingTransactions.length === 0) {\n this.transactionInProgress = false\n return null\n } else {\n return this.waitingTransactions.shift()\n }\n }\n requestTransaction (makeGen, callImmediately) {\n if (callImmediately) {\n this.transact(makeGen)\n } else if (!this.transactionInProgress) {\n this.transactionInProgress = true\n var self = this\n setTimeout(function () {\n self.transact(makeGen)\n }, 0)\n } else {\n this.waitingTransactions.push(makeGen)\n }\n }\n}\nY.AbstractDatabase = AbstractDatabase\n","/* global Y */\n'use strict'\n\n/*\n Partial definition of a transaction\n\n A transaction provides all the the async functionality on a database.\n\n By convention, a transaction has the following properties:\n * ss for StateSet\n * os for OperationStore\n * ds for DeleteStore\n\n A transaction must also define the following methods:\n * checkDeleteStoreForState(state)\n - When increasing the state of a user, an operation with an higher id\n may already be garbage collected, and therefore it will never be received.\n update the state to reflect this knowledge. This won't call a method to save the state!\n * getDeleteSet(id)\n - Get the delete set in a readable format:\n {\n \"userX\": [\n [5,1], // starting from position 5, one operations is deleted\n [9,4] // starting from position 9, four operations are deleted\n ],\n \"userY\": ...\n }\n * getOpsFromDeleteSet(ds) -- TODO: just call this.deleteOperation(id) here\n - get a set of deletions that need to be applied in order to get to\n achieve the state of the supplied ds\n * setOperation(op)\n - write `op` to the database.\n Note: this is allowed to return an in-memory object.\n E.g. the Memory adapter returns the object that it has in-memory.\n Changing values on this object will be stored directly in the database\n without calling this function. Therefore,\n setOperation may have no functionality in some adapters. This also has\n implications on the way we use operations that were served from the database.\n We try not to call copyObject, if not necessary.\n * addOperation(op)\n - add an operation to the database.\n This may only be called once for every op.id\n Must return a function that returns the next operation in the database (ordered by id)\n * getOperation(id)\n * removeOperation(id)\n - remove an operation from the database. This is called when an operation\n is garbage collected.\n * setState(state)\n - `state` is of the form\n {\n user: \"1\",\n clock: 4\n } <- meaning that we have four operations from user \"1\"\n (with these id's respectively: 0, 1, 2, and 3)\n * getState(user)\n * getStateVector()\n - Get the state of the OS in the form\n [{\n user: \"userX\",\n clock: 11\n },\n ..\n ]\n * getStateSet()\n - Get the state of the OS in the form\n {\n \"userX\": 11,\n \"userY\": 22\n }\n * getOperations(startSS)\n - Get the all the operations that are necessary in order to achive the\n stateSet of this user, starting from a stateSet supplied by another user\n * makeOperationReady(ss, op)\n - this is called only by `getOperations(startSS)`. It makes an operation\n applyable on a given SS.\n*/\nclass Transaction {\n /*\n Get a type based on the id of its model.\n If it does not exist yes, create it.\n TODO: delete type from store.initializedTypes[id] when corresponding id was deleted!\n */\n * getType (id) {\n var sid = JSON.stringify(id)\n var t = this.store.initializedTypes[sid]\n if (t == null) {\n var op = yield* this.getOperation(id)\n if (op != null) {\n t = yield* Y[op.type].initType.call(this, this.store, op)\n this.store.initializedTypes[sid] = t\n }\n }\n return t\n }\n /*\n Apply operations that this user created (no remote ones!)\n * does not check for Struct.*.requiredOps()\n * also broadcasts it through the connector\n */\n * applyCreatedOperations (ops) {\n var send = []\n for (var i = 0; i < ops.length; i++) {\n var op = ops[i]\n yield* this.store.tryExecute.call(this, op)\n send.push(Y.Struct[op.struct].encode(op))\n }\n if (!this.store.y.connector.isDisconnected()) {\n this.store.y.connector.broadcast({\n type: 'update',\n ops: send\n })\n }\n }\n\n * deleteList (start) {\n if (this.store.y.connector.isSynced) {\n while (start != null && this.store.y.connector.isSynced) {\n start = (yield* this.getOperation(start))\n start.gc = true\n yield* this.setOperation(start)\n // TODO: will always reset the parent..\n this.store.gc1.push(start.id)\n start = start.right\n }\n } else {\n // TODO: when not possible??? do later in (gcWhenSynced)\n }\n }\n\n /*\n Mark an operation as deleted, and add it to the GC, if possible.\n */\n * deleteOperation (targetId, preventCallType) {\n var target = yield* this.getOperation(targetId)\n var callType = false\n\n if (target == null || !target.deleted) {\n yield* this.markDeleted(targetId)\n }\n\n if (target != null && target.gc == null) {\n if (!target.deleted) {\n callType = true\n // set deleted & notify type\n target.deleted = true\n /*\n if (!preventCallType) {\n var type = this.store.initializedTypes[JSON.stringify(target.parent)]\n if (type != null) {\n yield* type._changed(this, {\n struct: 'Delete',\n target: targetId\n })\n }\n }\n */\n // delete containing lists\n if (target.start != null) {\n // TODO: don't do it like this .. -.-\n yield* this.deleteList(target.start)\n yield* this.deleteList(target.id)\n }\n if (target.map != null) {\n for (var name in target.map) {\n yield* this.deleteList(target.map[name])\n }\n // TODO: here to.. (see above)\n yield* this.deleteList(target.id)\n }\n if (target.opContent != null) {\n yield* this.deleteOperation(target.opContent)\n target.opContent = null\n }\n }\n var left = target.left != null ? yield* this.getOperation(target.left) : null\n\n this.store.addToGarbageCollector(target, left)\n\n // set here because it was deleted and/or gc'd\n yield* this.setOperation(target)\n\n /*\n Check if it is possible to add right to the gc.\n Because this delete can't be responsible for left being gc'd,\n we don't have to add left to the gc..\n */\n var right = target.right != null ? yield* this.getOperation(target.right) : null\n if (\n right != null &&\n this.store.addToGarbageCollector(right, target)\n ) {\n yield* this.setOperation(right)\n }\n return callType\n }\n }\n /*\n Mark an operation as deleted&gc'd\n */\n * markGarbageCollected (id) {\n // this.mem.push([\"gc\", id]);\n var n = yield* this.markDeleted(id)\n if (!n.gc) {\n if (n.id[1] < id[1]) {\n // un-extend left\n var newlen = n.len - (id[1] - n.id[1])\n n.len -= newlen\n yield* this.ds.put(n)\n n = {id: id, len: newlen, gc: false}\n yield* this.ds.put(n)\n }\n // get prev&next before adding a new operation\n var prev = yield* this.ds.findPrev(id)\n var next = yield* this.ds.findNext(id)\n\n if (id[1] < n.id[1] + n.len - 1) {\n // un-extend right\n yield* this.ds.put({id: [id[0], id[1] + 1], len: n.len - 1, gc: false})\n n.len = 1\n }\n // set gc'd\n n.gc = true\n // can extend left?\n if (\n prev != null &&\n prev.gc &&\n Y.utils.compareIds([prev.id[0], prev.id[1] + prev.len], n.id)\n ) {\n prev.len += n.len\n yield* this.ds.delete(n.id)\n n = prev\n // ds.put n here?\n }\n // can extend right?\n if (\n next != null &&\n next.gc &&\n Y.utils.compareIds([n.id[0], n.id[1] + n.len], next.id)\n ) {\n n.len += next.len\n yield* this.ds.delete(next.id)\n }\n yield* this.ds.put(n)\n }\n }\n /*\n Mark an operation as deleted.\n\n returns the delete node\n */\n * markDeleted (id) {\n // this.mem.push([\"del\", id]);\n var n = yield* this.ds.findWithUpperBound(id)\n if (n != null && n.id[0] === id[0]) {\n if (n.id[1] <= id[1] && id[1] < n.id[1] + n.len) {\n // already deleted\n return n\n } else if (n.id[1] + n.len === id[1] && !n.gc) {\n // can extend existing deletion\n n.len++\n } else {\n // cannot extend left\n n = {id: id, len: 1, gc: false}\n yield* this.ds.put(n)\n }\n } else {\n // cannot extend left\n n = {id: id, len: 1, gc: false}\n yield* this.ds.put(n)\n }\n // can extend right?\n var next = yield* this.ds.findNext(n.id)\n if (\n next != null &&\n Y.utils.compareIds([n.id[0], n.id[1] + n.len], next.id) &&\n !next.gc\n ) {\n n.len = n.len + next.len\n yield* this.ds.delete(next.id)\n }\n yield* this.ds.put(n)\n return n\n }\n /*\n Call this method when the client is connected&synced with the\n other clients (e.g. master). This will query the database for\n operations that can be gc'd and add them to the garbage collector.\n */\n * garbageCollectAfterSync () {\n yield* this.os.iterate(this, null, null, function * (op) {\n if (op.deleted && op.left != null) {\n var left = yield* this.getOperation(op.left)\n this.store.addToGarbageCollector(op, left)\n }\n })\n }\n /*\n Really remove an op and all its effects.\n The complicated case here is the Insert operation:\n * reset left\n * reset right\n * reset parent.start\n * reset parent.end\n * reset origins of all right ops\n */\n * garbageCollectOperation (id) {\n this.store.addToDebug('yield* this.garbageCollectOperation(', id, ')')\n // check to increase the state of the respective user\n var state = yield* this.getState(id[0])\n if (state.clock === id[1]) {\n state.clock++\n // also check if more expected operations were gc'd\n yield* this.checkDeleteStoreForState(state)\n // then set the state\n yield* this.setState(state)\n }\n yield* this.markGarbageCollected(id)\n\n // if op exists, then clean that mess up..\n var o = yield* this.getOperation(id)\n if (o != null) {\n /*\n if (!o.deleted) {\n yield* this.deleteOperation(id)\n o = yield* this.getOperation(id)\n }\n */\n\n // remove gc'd op from the left op, if it exists\n if (o.left != null) {\n var left = yield* this.getOperation(o.left)\n left.right = o.right\n yield* this.setOperation(left)\n }\n // remove gc'd op from the right op, if it exists\n // also reset origins of right ops\n if (o.right != null) {\n var right = yield* this.getOperation(o.right)\n right.left = o.left\n if (Y.utils.compareIds(right.origin, o.id)) { // rights origin is o\n // find new origin of right ops\n // origin is the first left deleted operation\n var neworigin = o.left\n while (neworigin != null) {\n var neworigin_ = yield* this.getOperation(neworigin)\n if (neworigin_.deleted) {\n break\n }\n neworigin = neworigin_.left\n }\n\n // reset origin of right\n right.origin = neworigin\n\n // reset origin of all right ops (except first right - duh!),\n // until you find origin pointer to the left of o\n var i = right.right == null ? null : yield* this.getOperation(right.right)\n var ids = [o.id, o.right]\n while (i != null && ids.some(function (id) {\n return Y.utils.compareIds(id, i.origin)\n })) {\n if (Y.utils.compareIds(i.origin, o.id)) {\n // reset origin of i\n i.origin = neworigin\n yield* this.setOperation(i)\n }\n // get next i\n i = i.right == null ? null : yield* this.getOperation(i.right)\n }\n } /* otherwise, rights origin is to the left of o,\n then there is no right op (from o), that origins in o */\n yield* this.setOperation(right)\n }\n\n if (o.parent != null) {\n // remove gc'd op from parent, if it exists\n var parent = yield* this.getOperation(o.parent)\n var setParent = false // whether to save parent to the os\n if (o.parentSub != null) {\n if (Y.utils.compareIds(parent.map[o.parentSub], o.id)) {\n setParent = true\n parent.map[o.parentSub] = o.right\n }\n } else {\n if (Y.utils.compareIds(parent.start, o.id)) {\n // gc'd op is the start\n setParent = true\n parent.start = o.right\n }\n if (Y.utils.compareIds(parent.end, o.id)) {\n // gc'd op is the end\n setParent = true\n parent.end = o.left\n }\n }\n if (setParent) {\n yield* this.setOperation(parent)\n }\n }\n // finally remove it from the os\n yield* this.removeOperation(o.id)\n }\n }\n * checkDeleteStoreForState (state) {\n var n = yield* this.ds.findWithUpperBound([state.user, state.clock])\n if (n != null && n.id[0] === state.user && n.gc) {\n state.clock = Math.max(state.clock, n.id[1] + n.len)\n }\n }\n /*\n apply a delete set in order to get\n the state of the supplied ds\n */\n * applyDeleteSet (ds) {\n var deletions = []\n function createDeletions (user, start, len, gc) {\n for (var c = start; c < start + len; c++) {\n deletions.push([user, c, gc])\n }\n }\n\n for (var user in ds) {\n var dv = ds[user]\n var pos = 0\n var d = dv[pos]\n yield* this.ds.iterate(this, [user, 0], [user, Number.MAX_VALUE], function * (n) {\n // cases:\n // 1. d deletes something to the right of n\n // => go to next n (break)\n // 2. d deletes something to the left of n\n // => create deletions\n // => reset d accordingly\n // *)=> if d doesn't delete anything anymore, go to next d (continue)\n // 3. not 2) and d deletes something that also n deletes\n // => reset d so that it doesn't contain n's deletion\n // *)=> if d does not delete anything anymore, go to next d (continue)\n while (d != null) {\n var diff = 0 // describe the diff of length in 1) and 2)\n if (n.id[1] + n.len <= d[0]) {\n // 1)\n break\n } else if (d[0] < n.id[1]) {\n // 2)\n // delete maximum the len of d\n // else delete as much as possible\n diff = Math.min(n.id[1] - d[0], d[1])\n createDeletions(user, d[0], diff, d[2])\n } else {\n // 3)\n diff = n.id[1] + n.len - d[0] // never null (see 1)\n if (d[2] && !n.gc) {\n // d marks as gc'd but n does not\n // then delete either way\n createDeletions(user, d[0], Math.min(diff, d[1]), d[2])\n }\n }\n if (d[1] <= diff) {\n // d doesn't delete anything anymore\n d = dv[++pos]\n } else {\n d[0] = d[0] + diff // reset pos\n d[1] = d[1] - diff // reset length\n }\n }\n })\n // for the rest.. just apply it\n for (; pos < dv.length; pos++) {\n d = dv[pos]\n createDeletions(user, d[0], d[1], d[2])\n }\n }\n for (var i in deletions) {\n var del = deletions[i]\n var id = [del[0], del[1]]\n // always try to delete..\n var addOperation = yield* this.deleteOperation(id)\n if (addOperation) {\n // TODO:.. really .. here? You could prevent calling all these functions in operationAdded\n yield* this.store.operationAdded(this, {struct: 'Delete', target: id})\n }\n if (del[2]) {\n // gc\n yield* this.garbageCollectOperation(id)\n }\n }\n }\n * isGarbageCollected (id) {\n var n = yield* this.ds.findWithUpperBound(id)\n return n != null && n.id[0] === id[0] && id[1] < n.id[1] + n.len && n.gc\n }\n /*\n A DeleteSet (ds) describes all the deleted ops in the OS\n */\n * getDeleteSet () {\n var ds = {}\n yield* this.ds.iterate(this, null, null, function * (n) {\n var user = n.id[0]\n var counter = n.id[1]\n var len = n.len\n var gc = n.gc\n var dv = ds[user]\n if (dv === void 0) {\n dv = []\n ds[user] = dv\n }\n dv.push([counter, len, gc])\n })\n return ds\n }\n * isDeleted (id) {\n var n = yield* this.ds.findWithUpperBound(id)\n return n != null && n.id[0] === id[0] && id[1] < n.id[1] + n.len\n }\n * setOperation (op) {\n yield* this.os.put(op)\n return op\n }\n * addOperation (op) {\n yield* this.os.put(op)\n }\n * getOperation (id) {\n return yield* this.os.find(id)\n }\n * removeOperation (id) {\n yield* this.os.delete(id)\n }\n * setState (state) {\n var val = {\n id: [state.user],\n clock: state.clock\n }\n // TODO: find a way to skip this step.. (after implementing some dbs..)\n if (yield* this.ss.find([state.user])) {\n yield* this.ss.put(val)\n } else {\n yield* this.ss.put(val)\n }\n }\n * getState (user) {\n var n\n var clock = (n = yield* this.ss.find([user])) == null ? null : n.clock\n if (clock == null) {\n clock = 0\n }\n return {\n user: user,\n clock: clock\n }\n }\n * getStateVector () {\n var stateVector = []\n yield* this.ss.iterate(this, null, null, function * (n) {\n stateVector.push({\n user: n.id[0],\n clock: n.clock\n })\n })\n return stateVector\n }\n * getStateSet () {\n var ss = {}\n yield* this.ss.iterate(this, null, null, function * (n) {\n ss[n.id[0]] = n.clock\n })\n return ss\n }\n * getOperations (startSS) {\n // TODO: use bounds here!\n if (startSS == null) {\n startSS = {}\n }\n var ops = []\n\n var endSV = yield* this.getStateVector()\n for (var endState of endSV) {\n var user = endState.user\n if (user === '_') {\n continue\n }\n var startPos = startSS[user] || 0\n\n yield* this.os.iterate(this, [user, startPos], [user, Number.MAX_VALUE], function * (op) {\n ops.push(op)\n })\n }\n var res = []\n for (var op of ops) {\n res.push(yield* this.makeOperationReady(startSS, op))\n }\n return res\n }\n /*\n Here, we make op executable for the receiving user.\n\n Notes:\n startSS: denotes to the SV that the remote user sent\n currSS: denotes to the state vector that the user should have if he\n applies all already sent operations (increases is each step)\n\n We face several problems:\n * Execute op as is won't work because ops depend on each other\n -> find a way so that they do not anymore\n * When changing left, must not go more to the left than the origin\n * When changing right, you have to consider that other ops may have op\n as their origin, this means that you must not set one of these ops\n as the new right (interdependencies of ops)\n * can't just go to the right until you find the first known operation,\n With currSS\n -> interdependency of ops is a problem\n With startSS\n -> leads to inconsistencies when two users join at the same time.\n Then the position depends on the order of execution -> error!\n\n Solution:\n -> re-create originial situation\n -> set op.left = op.origin (which never changes)\n -> set op.right\n to the first operation that is known (according to startSS)\n or to the first operation that has an origin that is not to the\n right of op.\n -> Enforces unique execution order -> happy user\n\n Improvements: TODO\n * Could set left to origin, or the first known operation\n (startSS or currSS.. ?)\n -> Could be necessary when I turn GC again.\n -> Is a bad(ish) idea because it requires more computation\n */\n * makeOperationReady (startSS, op) {\n op = Y.Struct[op.struct].encode(op)\n op = Y.utils.copyObject(op)\n var o = op\n var ids = [op.id]\n // search for the new op.right\n // it is either the first known op (according to startSS)\n // or the o that has no origin to the right of op\n // (this is why we use the ids array)\n while (o.right != null) {\n var right = yield* this.getOperation(o.right)\n if (o.right[1] < (startSS[o.right[0]] || 0) || !ids.some(function (id) {\n return Y.utils.compareIds(id, right.origin)\n })) {\n break\n }\n ids.push(o.right)\n o = right\n }\n op.right = o.right\n op.left = op.origin\n return op\n }\n}\nY.Transaction = Transaction\n","/* global Y */\n'use strict'\n\n/*\n An operation also defines the structure of a type. This is why operation and\n structure are used interchangeably here.\n\n It must be of the type Object. I hope to achieve some performance\n improvements when working on databases that support the json format.\n\n An operation must have the following properties:\n\n * encode\n - Encode the structure in a readable format (preferably string- todo)\n * decode (todo)\n - decode structure to json\n * execute\n - Execute the semantics of an operation.\n * requiredOps\n - Operations that are required to execute this operation.\n*/\n\nvar Struct = {\n /* This is the only operation that is actually not a structure, because\n it is not stored in the OS. This is why it _does not_ have an id\n\n op = {\n target: Id\n }\n */\n Delete: {\n encode: function (op) {\n return op\n },\n requiredOps: function (op) {\n return [] // [op.target]\n },\n execute: function * (op) {\n return yield* this.deleteOperation(op.target)\n }\n },\n Insert: {\n /* {\n content: any,\n id: Id,\n left: Id,\n origin: Id,\n right: Id,\n parent: Id,\n parentSub: string (optional), // child of Map type\n }\n */\n encode: function (op) {\n // TODO: you could not send the \"left\" property, then you also have to\n // \"op.left = null\" in $execute or $decode\n var e = {\n id: op.id,\n left: op.left,\n right: op.right,\n origin: op.origin,\n parent: op.parent,\n struct: op.struct\n }\n if (op.parentSub != null) {\n e.parentSub = op.parentSub\n }\n if (op.opContent != null) {\n e.opContent = op.opContent\n } else {\n e.content = op.content\n }\n\n return e\n },\n requiredOps: function (op) {\n var ids = []\n if (op.left != null) {\n ids.push(op.left)\n }\n if (op.right != null) {\n ids.push(op.right)\n }\n if (op.origin != null && !Y.utils.compareIds(op.left, op.origin)) {\n ids.push(op.origin)\n }\n // if (op.right == null && op.left == null) {\n ids.push(op.parent)\n\n if (op.opContent != null) {\n ids.push(op.opContent)\n }\n return ids\n },\n getDistanceToOrigin: function * (op) {\n if (op.left == null) {\n return 0\n } else {\n var d = 0\n var o = yield* this.getOperation(op.left)\n while (!Y.utils.compareIds(op.origin, (o ? o.id : null))) {\n d++\n if (o.left == null) {\n break\n } else {\n o = yield* this.getOperation(o.left)\n }\n }\n return d\n }\n },\n /*\n # $this has to find a unique position between origin and the next known character\n # case 1: $origin equals $o.origin: the $creator parameter decides if left or right\n # let $OL= [o1,o2,o3,o4], whereby $this is to be inserted between o1 and o4\n # o2,o3 and o4 origin is 1 (the position of o2)\n # there is the case that $this.creator < o2.creator, but o3.creator < $this.creator\n # then o2 knows o3. Since on another client $OL could be [o1,o3,o4] the problem is complex\n # therefore $this would be always to the right of o3\n # case 2: $origin < $o.origin\n # if current $this insert_position > $o origin: $this ins\n # else $insert_position will not change\n # (maybe we encounter case 1 later, then this will be to the right of $o)\n # case 3: $origin > $o.origin\n # $this insert_position is to the left of $o (forever!)\n */\n execute: function *(op) {\n var i // loop counter\n var distanceToOrigin = i = yield* Struct.Insert.getDistanceToOrigin.call(this, op) // most cases: 0 (starts from 0)\n var o\n var parent\n var start\n\n // find o. o is the first conflicting operation\n if (op.left != null) {\n o = yield* this.getOperation(op.left)\n o = (o.right == null) ? null : yield* this.getOperation(o.right)\n } else { // left == null\n parent = yield* this.getOperation(op.parent)\n let startId = op.parentSub ? parent.map[op.parentSub] : parent.start\n start = startId == null ? null : yield* this.getOperation(startId)\n o = start\n }\n\n // handle conflicts\n while (true) {\n if (o != null && !Y.utils.compareIds(o.id, op.right)) {\n var oOriginDistance = yield* Struct.Insert.getDistanceToOrigin.call(this, o)\n if (oOriginDistance === i) {\n // case 1\n if (o.id[0] < op.id[0]) {\n op.left = o.id\n distanceToOrigin = i + 1\n }\n } else if (oOriginDistance < i) {\n // case 2\n if (i - distanceToOrigin <= oOriginDistance) {\n op.left = o.id\n distanceToOrigin = i + 1\n }\n } else {\n break\n }\n i++\n o = o.right ? yield* this.getOperation(o.right) : null\n } else {\n break\n }\n }\n\n // reconnect..\n var left = null\n var right = null\n parent = parent || (yield* this.getOperation(op.parent))\n\n // reconnect left and set right of op\n if (op.left != null) {\n left = yield* this.getOperation(op.left)\n op.right = left.right\n left.right = op.id\n\n yield* this.setOperation(left)\n } else {\n op.right = op.parentSub ? parent.map[op.parentSub] || null : parent.start\n }\n // reconnect right\n if (op.right != null) {\n right = yield* this.getOperation(op.right)\n right.left = op.id\n\n // if right exists, and it is supposed to be gc'd. Remove it from the gc\n if (right.gc != null) {\n this.store.removeFromGarbageCollector(right)\n }\n yield* this.setOperation(right)\n }\n\n // update parents .map/start/end properties\n if (op.parentSub != null) {\n if (left == null) {\n parent.map[op.parentSub] = op.id\n yield* this.setOperation(parent)\n }\n // is a child of a map struct.\n // Then also make sure that only the most left element is not deleted\n if (op.right != null) {\n yield* this.deleteOperation(op.right, true)\n }\n if (op.left != null) {\n yield* this.deleteOperation(op.id, true)\n }\n } else {\n if (right == null || left == null) {\n if (right == null) {\n parent.end = op.id\n }\n if (left == null) {\n parent.start = op.id\n }\n yield* this.setOperation(parent)\n }\n }\n }\n },\n List: {\n /*\n {\n start: null,\n end: null,\n struct: \"List\",\n type: \"\",\n id: this.os.getNextOpId()\n }\n */\n encode: function (op) {\n return {\n struct: 'List',\n id: op.id,\n type: op.type\n }\n },\n requiredOps: function () {\n /*\n var ids = []\n if (op.start != null) {\n ids.push(op.start)\n }\n if (op.end != null){\n ids.push(op.end)\n }\n return ids\n */\n return []\n },\n execute: function * (op) {\n op.start = null\n op.end = null\n },\n ref: function * (op, pos) {\n if (op.start == null) {\n return null\n }\n var res = null\n var o = yield* this.getOperation(op.start)\n\n while (true) {\n if (!o.deleted) {\n res = o\n pos--\n }\n if (pos >= 0 && o.right != null) {\n o = (yield* this.getOperation(o.right))\n } else {\n break\n }\n }\n return res\n },\n map: function * (o, f) {\n o = o.start\n var res = []\n while (o != null) { // TODO: change to != (at least some convention)\n var operation = yield* this.getOperation(o)\n if (!operation.deleted) {\n res.push(f(operation))\n }\n o = operation.right\n }\n return res\n }\n },\n Map: {\n /*\n {\n map: {},\n struct: \"Map\",\n type: \"\",\n id: this.os.getNextOpId()\n }\n */\n encode: function (op) {\n return {\n struct: 'Map',\n type: op.type,\n id: op.id,\n map: {} // overwrite map!!\n }\n },\n requiredOps: function () {\n return []\n },\n execute: function * () {},\n /*\n Get a property by name\n */\n get: function * (op, name) {\n var oid = op.map[name]\n if (oid != null) {\n var res = yield* this.getOperation(oid)\n return (res == null || res.deleted) ? void 0 : (res.opContent == null\n ? res.content : yield* this.getType(res.opContent))\n }\n },\n /*\n Delete a property by name\n */\n delete: function * (op, name) {\n var v = op.map[name] || null\n if (v != null) {\n yield* Struct.Delete.create.call(this, {\n target: v\n })\n }\n }\n }\n}\nY.Struct = Struct\n","/* global Y */\n'use strict'\n\n/*\n This file contains a not so fancy implemantion of a Red Black Tree.\n*/\n\nclass N {\n // A created node is always red!\n constructor (val) {\n this.val = val\n this.color = true\n this._left = null\n this._right = null\n this._parent = null\n if (val.id === null) {\n throw new Error('You must define id!')\n }\n }\n isRed () { return this.color }\n isBlack () { return !this.color }\n redden () { this.color = true; return this }\n blacken () { this.color = false; return this }\n get grandparent () {\n return this.parent.parent\n }\n get parent () {\n return this._parent\n }\n get sibling () {\n return (this === this.parent.left)\n ? this.parent.right : this.parent.left\n }\n get left () {\n return this._left\n }\n get right () {\n return this._right\n }\n set left (n) {\n if (n !== null) {\n n._parent = this\n }\n this._left = n\n }\n set right (n) {\n if (n !== null) {\n n._parent = this\n }\n this._right = n\n }\n rotateLeft (tree) {\n var parent = this.parent\n var newParent = this.right\n var newRight = this.right.left\n newParent.left = this\n this.right = newRight\n if (parent === null) {\n tree.root = newParent\n newParent._parent = null\n } else if (parent.left === this) {\n parent.left = newParent\n } else if (parent.right === this) {\n parent.right = newParent\n } else {\n throw new Error('The elements are wrongly connected!')\n }\n }\n next () {\n if (this.right !== null) {\n // search the most left node in the right tree\n var o = this.right\n while (o.left !== null) {\n o = o.left\n }\n return o\n } else {\n var p = this\n while (p.parent !== null && p !== p.parent.left) {\n p = p.parent\n }\n return p.parent\n }\n }\n prev () {\n if (this.left !== null) {\n // search the most right node in the left tree\n var o = this.left\n while (o.right !== null) {\n o = o.right\n }\n return o\n } else {\n var p = this\n while (p.parent !== null && p !== p.parent.right) {\n p = p.parent\n }\n return p.parent\n }\n }\n rotateRight (tree) {\n var parent = this.parent\n var newParent = this.left\n var newLeft = this.left.right\n newParent.right = this\n this.left = newLeft\n if (parent === null) {\n tree.root = newParent\n newParent._parent = null\n } else if (parent.left === this) {\n parent.left = newParent\n } else if (parent.right === this) {\n parent.right = newParent\n } else {\n throw new Error('The elements are wrongly connected!')\n }\n }\n getUncle () {\n // we can assume that grandparent exists when this is called!\n if (this.parent === this.parent.parent.left) {\n return this.parent.parent.right\n } else {\n return this.parent.parent.left\n }\n }\n}\n\nclass RBTree {\n constructor () {\n this.root = null\n this.length = 0\n }\n * findNext (id) {\n return yield* this.findWithLowerBound([id[0], id[1] + 1])\n }\n * findPrev (id) {\n return yield* this.findWithUpperBound([id[0], id[1] - 1])\n }\n findNodeWithLowerBound (from) {\n if (from === void 0) {\n throw new Error('You must define from!')\n }\n var o = this.root\n if (o === null) {\n return null\n } else {\n while (true) {\n if ((from === null || Y.utils.smaller(from, o.val.id)) && o.left !== null) {\n // o is included in the bound\n // try to find an element that is closer to the bound\n o = o.left\n } else if (from !== null && Y.utils.smaller(o.val.id, from)) {\n // o is not within the bound, maybe one of the right elements is..\n if (o.right !== null) {\n o = o.right\n } else {\n // there is no right element. Search for the next bigger element,\n // this should be within the bounds\n return o.next()\n }\n } else {\n return o\n }\n }\n }\n }\n findNodeWithUpperBound (to) {\n if (to === void 0) {\n throw new Error('You must define from!')\n }\n var o = this.root\n if (o === null) {\n return null\n } else {\n while (true) {\n if ((to === null || Y.utils.smaller(o.val.id, to)) && o.right !== null) {\n // o is included in the bound\n // try to find an element that is closer to the bound\n o = o.right\n } else if (to !== null && Y.utils.smaller(to, o.val.id)) {\n // o is not within the bound, maybe one of the left elements is..\n if (o.left !== null) {\n o = o.left\n } else {\n // there is no left element. Search for the prev smaller element,\n // this should be within the bounds\n return o.prev()\n }\n } else {\n return o\n }\n }\n }\n }\n * findWithLowerBound (from) {\n var n = this.findNodeWithLowerBound(from)\n return n == null ? null : n.val\n }\n * findWithUpperBound (to) {\n var n = this.findNodeWithUpperBound(to)\n return n == null ? null : n.val\n }\n * iterate (t, from, to, f) {\n var o = this.findNodeWithLowerBound(from)\n while (o !== null && (to === null || Y.utils.smaller(o.val.id, to) || Y.utils.compareIds(o.val.id, to))) {\n yield* f.call(t, o.val)\n o = o.next()\n }\n return true\n }\n * logTable (from, to, filter) {\n if (filter == null) {\n filter = function () {\n return true\n }\n }\n if (from == null) { from = null }\n if (to == null) { to = null }\n var os = []\n yield* this.iterate(this, from, to, function * (o) {\n if (filter(o)) {\n var o_ = {}\n for (var key in o) {\n if (typeof o[key] === 'object') {\n o_[key] = JSON.stringify(o[key])\n } else {\n o_[key] = o[key]\n }\n }\n os.push(o_)\n }\n })\n if (console.table != null) {\n console.table(os)\n }\n }\n * find (id) {\n var n\n return (n = this.findNode(id)) ? n.val : null\n }\n findNode (id) {\n if (id == null || id.constructor !== Array) {\n throw new Error('Expect id to be an array!')\n }\n var o = this.root\n if (o === null) {\n return false\n } else {\n while (true) {\n if (o === null) {\n return false\n }\n if (Y.utils.smaller(id, o.val.id)) {\n o = o.left\n } else if (Y.utils.smaller(o.val.id, id)) {\n o = o.right\n } else {\n return o\n }\n }\n }\n }\n * delete (id) {\n if (id == null || id.constructor !== Array) {\n throw new Error('id is expected to be an Array!')\n }\n var d = this.findNode(id)\n if (d == null) {\n throw new Error('Element does not exist!')\n }\n this.length--\n if (d.left !== null && d.right !== null) {\n // switch d with the greates element in the left subtree.\n // o should have at most one child.\n var o = d.left\n // find\n while (o.right !== null) {\n o = o.right\n }\n // switch\n d.val = o.val\n d = o\n }\n // d has at most one child\n // let n be the node that replaces d\n var isFakeChild\n var child = d.left || d.right\n if (child === null) {\n isFakeChild = true\n child = new N({id: 0})\n child.blacken()\n d.right = child\n } else {\n isFakeChild = false\n }\n\n if (d.parent === null) {\n if (!isFakeChild) {\n this.root = child\n child.blacken()\n child._parent = null\n } else {\n this.root = null\n }\n return\n } else if (d.parent.left === d) {\n d.parent.left = child\n } else if (d.parent.right === d) {\n d.parent.right = child\n } else {\n throw new Error('Impossible!')\n }\n if (d.isBlack()) {\n if (child.isRed()) {\n child.blacken()\n } else {\n this._fixDelete(child)\n }\n }\n this.root.blacken()\n if (isFakeChild) {\n if (child.parent.left === child) {\n child.parent.left = null\n } else if (child.parent.right === child) {\n child.parent.right = null\n } else {\n throw new Error('Impossible #3')\n }\n }\n }\n _fixDelete (n) {\n function isBlack (node) {\n return node !== null ? node.isBlack() : true\n }\n function isRed (node) {\n return node !== null ? node.isRed() : false\n }\n if (n.parent === null) {\n // this can only be called after the first iteration of fixDelete.\n return\n }\n // d was already replaced by the child\n // d is not the root\n // d and child are black\n var sibling = n.sibling\n if (isRed(sibling)) {\n // make sibling the grandfather\n n.parent.redden()\n sibling.blacken()\n if (n === n.parent.left) {\n n.parent.rotateLeft(this)\n } else if (n === n.parent.right) {\n n.parent.rotateRight(this)\n } else {\n throw new Error('Impossible #2')\n }\n sibling = n.sibling\n }\n // parent, sibling, and children of n are black\n if (n.parent.isBlack() &&\n sibling.isBlack() &&\n isBlack(sibling.left) &&\n isBlack(sibling.right)\n ) {\n sibling.redden()\n this._fixDelete(n.parent)\n } else if (n.parent.isRed() &&\n sibling.isBlack() &&\n isBlack(sibling.left) &&\n isBlack(sibling.right)\n ) {\n sibling.redden()\n n.parent.blacken()\n } else {\n if (n === n.parent.left &&\n sibling.isBlack() &&\n isRed(sibling.left) &&\n isBlack(sibling.right)\n ) {\n sibling.redden()\n sibling.left.blacken()\n sibling.rotateRight(this)\n sibling = n.sibling\n } else if (n === n.parent.right &&\n sibling.isBlack() &&\n isRed(sibling.right) &&\n isBlack(sibling.left)\n ) {\n sibling.redden()\n sibling.right.blacken()\n sibling.rotateLeft(this)\n sibling = n.sibling\n }\n sibling.color = n.parent.color\n n.parent.blacken()\n if (n === n.parent.left) {\n sibling.right.blacken()\n n.parent.rotateLeft(this)\n } else {\n sibling.left.blacken()\n n.parent.rotateRight(this)\n }\n }\n }\n * put (v) {\n if (v == null || v.id == null || v.id.constructor !== Array) {\n throw new Error('v is expected to have an id property which is an Array!')\n }\n var node = new N(v)\n if (this.root !== null) {\n var p = this.root // p abbrev. parent\n while (true) {\n if (Y.utils.smaller(node.val.id, p.val.id)) {\n if (p.left === null) {\n p.left = node\n break\n } else {\n p = p.left\n }\n } else if (Y.utils.smaller(p.val.id, node.val.id)) {\n if (p.right === null) {\n p.right = node\n break\n } else {\n p = p.right\n }\n } else {\n p.val = node.val\n return p\n }\n }\n this._fixInsert(node)\n } else {\n this.root = node\n }\n this.length++\n this.root.blacken()\n return node\n }\n _fixInsert (n) {\n if (n.parent === null) {\n n.blacken()\n return\n } else if (n.parent.isBlack()) {\n return\n }\n var uncle = n.getUncle()\n if (uncle !== null && uncle.isRed()) {\n // Note: parent: red, uncle: red\n n.parent.blacken()\n uncle.blacken()\n n.grandparent.redden()\n this._fixInsert(n.grandparent)\n } else {\n // Note: parent: red, uncle: black or null\n // Now we transform the tree in such a way that\n // either of these holds:\n // 1) grandparent.left.isRed\n // and grandparent.left.left.isRed\n // 2) grandparent.right.isRed\n // and grandparent.right.right.isRed\n if (n === n.parent.right && n.parent === n.grandparent.left) {\n n.parent.rotateLeft(this)\n // Since we rotated and want to use the previous\n // cases, we need to set n in such a way that\n // n.parent.isRed again\n n = n.left\n } else if (n === n.parent.left && n.parent === n.grandparent.right) {\n n.parent.rotateRight(this)\n // see above\n n = n.right\n }\n // Case 1) or 2) hold from here on.\n // Now traverse grandparent, make parent a black node\n // on the highest level which holds two red nodes.\n n.parent.blacken()\n n.grandparent.redden()\n if (n === n.parent.left) {\n // Case 1\n n.grandparent.rotateRight(this)\n } else {\n // Case 2\n n.grandparent.rotateLeft(this)\n }\n }\n }\n}\n\nY.utils.RBTree = RBTree\n","/* global Y */\n'use strict'\n\nY.Memory = (function () {\n class Transaction extends Y.Transaction {\n constructor (store) {\n super(store)\n this.store = store\n this.ss = store.ss\n this.os = store.os\n this.ds = store.ds\n }\n }\n class Database extends Y.AbstractDatabase {\n constructor (y, opts) {\n super(y, opts)\n this.os = new Y.utils.RBTree()\n this.ds = new Y.utils.RBTree()\n this.ss = new Y.utils.RBTree()\n }\n logTable () {\n var self = this\n self.requestTransaction(function * () {\n console.log('User: ', this.store.y.connector.userId, \"==============================\") // eslint-disable-line\n console.log(\"State Set (SS):\", yield* this.getStateSet()) // eslint-disable-line\n console.log(\"Operation Store (OS):\") // eslint-disable-line\n yield* this.os.logTable() // eslint-disable-line\n console.log(\"Deletion Store (DS):\") //eslint-disable-line\n yield* this.ds.logTable() // eslint-disable-line\n if (this.store.gc1.length > 0 || this.store.gc2.length > 0) {\n console.warn('GC1|2 not empty!', this.store.gc1, this.store.gc2)\n }\n if (JSON.stringify(this.store.listenersById) !== '{}') {\n console.warn('listenersById not empty!')\n }\n if (JSON.stringify(this.store.listenersByIdExecuteNow) !== '[]') {\n console.warn('listenersByIdExecuteNow not empty!')\n }\n if (this.store.transactionInProgress) {\n console.warn('Transaction still in progress!')\n }\n }, true)\n }\n transact (makeGen) {\n var t = new Transaction(this)\n while (makeGen !== null) {\n var gen = makeGen.call(t)\n var res = gen.next()\n while (!res.done) {\n res = gen.next(res.value)\n }\n makeGen = this.getNextRequest()\n }\n }\n * destroy () {\n super.destroy()\n delete this.os\n delete this.ss\n delete this.ds\n }\n }\n return Database\n})()\n","/* global Y */\n\n'use strict'\n\nY.IndexedDB = (function () {\n class Store {\n constructor (transaction, name) {\n this.store = transaction.objectStore(name)\n }\n * find (id) {\n return yield this.store.get(id)\n }\n * put (v) {\n yield this.store.put(v)\n }\n * delete (id) {\n yield this.store.delete(id)\n }\n * findWithLowerBound (start) {\n return yield this.store.openCursor(window.IDBKeyRange.lowerBound(start))\n }\n * findWithUpperBound (end) {\n return yield this.store.openCursor(window.IDBKeyRange.upperBound(end), 'prev')\n }\n * findNext (id) {\n return yield* this.findWithLowerBound([id[0], id[1] + 1])\n }\n * findPrev (id) {\n return yield* this.findWithUpperBound([id[0], id[1] - 1])\n }\n * iterate (t, start, end, gen) {\n var range = null\n if (start != null && end != null) {\n range = window.IDBKeyRange.bound(start, end)\n } else if (start != null) {\n range = window.IDBKeyRange.lowerBound(start)\n } else if (end != null) {\n range = window.IDBKeyRange.upperBound(end)\n }\n var cursorResult = this.store.openCursor(range)\n while ((yield cursorResult) != null) {\n yield* gen.call(t, cursorResult.result.value)\n cursorResult.result.continue()\n }\n }\n\n }\n class Transaction extends Y.Transaction {\n constructor (store) {\n super(store)\n var transaction = store.db.transaction(['OperationStore', 'StateStore', 'DeleteStore'], 'readwrite')\n this.store = store\n this.ss = new Store(transaction, 'StateStore')\n this.os = new Store(transaction, 'OperationStore')\n this.ds = new Store(transaction, 'DeleteStore')\n }\n }\n class OperationStore extends Y.AbstractDatabase {\n constructor (y, opts) {\n super(y, opts)\n if (opts == null) {\n opts = {}\n }\n if (opts.namespace == null || typeof opts.namespace !== 'string') {\n throw new Error('IndexedDB: expect a string (opts.namespace)!')\n } else {\n this.namespace = opts.namespace\n }\n if (opts.idbVersion != null) {\n this.idbVersion = opts.idbVersion\n } else {\n this.idbVersion = 5\n }\n var store = this\n // initialize database!\n this.requestTransaction(function * () {\n store.db = yield window.indexedDB.open(opts.namespace, store.idbVersion)\n })\n if (opts.cleanStart) {\n this.requestTransaction(function * () {\n yield this.os.store.clear()\n yield this.ds.store.clear()\n yield this.ss.store.clear()\n })\n }\n var operationsToAdd = []\n window.addEventListener('storage', function (event) {\n if (event.key === '__YJS__' + store.namespace) {\n operationsToAdd.push(event.newValue)\n if (operationsToAdd.length === 1) {\n store.requestTransaction(function * () {\n var add = operationsToAdd\n operationsToAdd = []\n for (var i in add) {\n // don't call the localStorage event twice..\n var op = JSON.parse(add[i])\n if (op.struct !== 'Delete') {\n op = yield* this.getOperation(op.id)\n }\n yield* this.store.operationAdded(this, op, true)\n }\n })\n }\n }\n }, false)\n }\n * operationAdded (transaction, op, noAdd) {\n yield* super.operationAdded(transaction, op)\n if (!noAdd) {\n window.localStorage['__YJS__' + this.namespace] = JSON.stringify(op)\n }\n }\n transact (makeGen) {\n var transaction = this.db != null ? new Transaction(this) : null\n var store = this\n\n var gen = makeGen.call(transaction)\n handleTransactions(gen.next())\n\n function handleTransactions (result) {\n var request = result.value\n if (result.done) {\n makeGen = store.getNextRequest()\n if (makeGen != null) {\n if (transaction == null && store.db != null) {\n transaction = new Transaction(store)\n }\n gen = makeGen.call(transaction)\n handleTransactions(gen.next())\n } // else no transaction in progress!\n return\n }\n if (request.constructor === window.IDBRequest) {\n request.onsuccess = function () {\n var res = request.result\n if (res != null && res.constructor === window.IDBCursorWithValue) {\n res = res.value\n }\n handleTransactions(gen.next(res))\n }\n request.onerror = function (err) {\n gen.throw(err)\n }\n } else if (request.constructor === window.IDBCursor) {\n request.onsuccess = function () {\n handleTransactions(gen.next(request.result != null ? request.result.value : null))\n }\n request.onerror = function (err) {\n gen.throw(err)\n }\n } else if (request.constructor === window.IDBOpenDBRequest) {\n request.onsuccess = function (event) {\n var db = event.target.result\n handleTransactions(gen.next(db))\n }\n request.onerror = function () {\n gen.throw(\"Couldn't open IndexedDB database!\")\n }\n request.onupgradeneeded = function (event) {\n var db = event.target.result\n try {\n db.createObjectStore('OperationStore', {keyPath: 'id'})\n db.createObjectStore('DeleteStore', {keyPath: 'id'})\n db.createObjectStore('StateStore', {keyPath: 'id'})\n } catch (e) {\n console.log('Store already exists!')\n }\n }\n } else {\n gen.throw('You must not yield this type!')\n }\n }\n }\n // TODO: implement \"free\"..\n * destroy () {\n this.db.close()\n yield window.indexedDB.deleteDatabase(this.namespace)\n }\n }\n return OperationStore\n})()\n","/* global Y, SimpleWebRTC */\n'use strict'\n\nclass WebRTC extends Y.AbstractConnector {\n constructor (y, options) {\n if (options === undefined) {\n throw new Error('Options must not be undefined!')\n }\n if (options.room == null) {\n throw new Error('You must define a room name!')\n }\n options.role = 'slave'\n super(y, options)\n this.webrtcOptions = {\n url: options.url || 'https://yatta.ninja:8888',\n room: options.room\n }\n var swr = new SimpleWebRTC(this.webrtcOptions)\n this.swr = swr\n var self = this\n swr.once('connectionReady', function (userId) {\n // SimpleWebRTC (swr) is initialized\n swr.joinRoom(self.webrtcOptions.room)\n\n swr.once('joinedRoom', function () {\n self.setUserId(userId)\n /*\n var i\n // notify the connector class about all the users that already\n // joined the session\n for(i in self.swr.webrtc.peers){\n self.userJoined(self.swr.webrtc.peers[i].id, \"master\")\n }*/\n swr.on('channelMessage', function (peer, room_, message) {\n // The client received a message\n // Check if the connector is already initialized,\n // only then forward the message to the connector class\n if (message.type != null) {\n self.receiveMessage(peer.id, message.payload)\n }\n })\n })\n\n swr.on('createdPeer', function (peer) {\n // a new peer/client joined the session.\n // Notify the connector class, if the connector\n // is already initialized\n self.userJoined(peer.id, 'master')\n })\n\n swr.on('peerStreamRemoved', function (peer) {\n // a client left the session.\n // Notify the connector class, if the connector\n // is already initialized\n self.userLeft(peer.id)\n })\n })\n }\n disconnect () {\n this.swr.leaveRoom()\n super.disconnect()\n }\n reconnect () {\n this.swr.joinRoom(this.webrtcOptions.room)\n super.reconnect()\n }\n send (uid, message) {\n var self = this\n // we have to make sure that the message is sent under all circumstances\n var send = function () {\n // check if the clients still exists\n var peer = self.swr.webrtc.getPeers(uid)[0]\n var success\n if (peer) {\n // success is true, if the message is successfully sent\n success = peer.sendDirectly('simplewebrtc', 'yjs', message)\n }\n if (!success) {\n // resend the message if it didn't work\n setTimeout(send, 500)\n }\n }\n // try to send the message\n send()\n }\n broadcast (message) {\n this.swr.sendDirectlyToAll('simplewebrtc', 'yjs', message)\n }\n isDisconnected () {\n return false\n }\n}\n\nY.WebRTC = WebRTC\n","/* global Y */\n'use strict'\n\n;(function () {\n class YArray {\n constructor (os, _model, idArray, valArray) {\n this.os = os\n this._model = _model\n // Array of all the operation id's\n this.idArray = idArray\n // Array of all the values\n this.valArray = valArray\n this.eventHandler = new Y.utils.EventHandler(ops => {\n var userEvents = []\n for (var i in ops) {\n var op = ops[i]\n if (op.struct === 'Insert') {\n let pos\n // we check op.left only!,\n // because op.right might not be defined when this is called\n if (op.left === null) {\n pos = 0\n } else {\n var sid = JSON.stringify(op.left)\n pos = this.idArray.indexOf(sid) + 1\n if (pos <= 0) {\n throw new Error('Unexpected operation!')\n }\n }\n this.idArray.splice(pos, 0, JSON.stringify(op.id))\n this.valArray.splice(pos, 0, op.content)\n userEvents.push({\n type: 'insert',\n object: this,\n index: pos,\n length: 1\n })\n } else if (op.struct === 'Delete') {\n let pos = this.idArray.indexOf(JSON.stringify(op.target))\n if (pos >= 0) {\n this.idArray.splice(pos, 1)\n this.valArray.splice(pos, 1)\n userEvents.push({\n type: 'delete',\n object: this,\n index: pos,\n length: 1\n })\n }\n } else {\n throw new Error('Unexpected struct!')\n }\n }\n this.eventHandler.callEventListeners(userEvents)\n })\n }\n get length () {\n return this.idArray.length\n }\n get (pos) {\n if (pos == null || typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n return this.valArray[pos]\n }\n toArray () {\n return this.valArray.slice()\n }\n insert (pos, contents) {\n if (typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (!(contents instanceof Array)) {\n throw new Error('contents must be an Array of objects!')\n }\n if (contents.length === 0) {\n return\n }\n if (pos > this.idArray.length || pos < 0) {\n throw new Error('This position exceeds the range of the array!')\n }\n var mostLeft = pos === 0 ? null : JSON.parse(this.idArray[pos - 1])\n\n var ops = []\n var prevId = mostLeft\n for (var i = 0; i < contents.length; i++) {\n var op = {\n left: prevId,\n origin: prevId,\n // right: mostRight,\n // NOTE: I intentionally do not define right here, because it could be deleted\n // at the time of creating this operation, and is therefore not defined in idArray\n parent: this._model,\n content: contents[i],\n struct: 'Insert',\n id: this.os.getNextOpId()\n }\n ops.push(op)\n prevId = op.id\n }\n var eventHandler = this.eventHandler\n eventHandler.awaitAndPrematurelyCall(ops)\n this.os.requestTransaction(function *() {\n // now we can set the right reference.\n var mostRight\n if (mostLeft != null) {\n mostRight = (yield* this.getOperation(mostLeft)).right\n } else {\n mostRight = (yield* this.getOperation(ops[0].parent)).start\n }\n for (var j in ops) {\n ops[j].right = mostRight\n }\n yield* this.applyCreatedOperations(ops)\n eventHandler.awaitedInserts(ops.length)\n })\n }\n delete (pos, length) {\n if (length == null) { length = 1 }\n if (typeof length !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (pos + length > this.idArray.length || pos < 0 || length < 0) {\n throw new Error('The deletion range exceeds the range of the array!')\n }\n if (length === 0) {\n return\n }\n var eventHandler = this.eventHandler\n var newLeft = pos > 0 ? JSON.parse(this.idArray[pos - 1]) : null\n var dels = []\n for (var i = 0; i < length; i++) {\n dels.push({\n target: JSON.parse(this.idArray[pos + i]),\n struct: 'Delete'\n })\n }\n eventHandler.awaitAndPrematurelyCall(dels)\n this.os.requestTransaction(function *() {\n yield* this.applyCreatedOperations(dels)\n eventHandler.awaitedDeletes(dels.length, newLeft)\n })\n }\n observe (f) {\n this.eventHandler.addEventListener(f)\n }\n * _changed (transaction, op) {\n if (!op.deleted) {\n if (op.struct === 'Insert') {\n var l = op.left\n var left\n while (l != null) {\n left = yield* transaction.getOperation(l)\n if (!left.deleted) {\n break\n }\n l = left.left\n }\n op.left = l\n }\n this.eventHandler.receivedOp(op)\n }\n }\n }\n\n Y.Array = new Y.utils.CustomType({\n class: YArray,\n createType: function * YArrayCreator () {\n var modelid = this.store.getNextOpId()\n var model = {\n struct: 'List',\n type: 'Array',\n start: null,\n end: null,\n id: modelid\n }\n yield* this.applyCreatedOperations([model])\n return modelid\n },\n initType: function * YArrayInitializer (os, model) {\n var valArray = []\n var idArray = yield* Y.Struct.List.map.call(this, model, function (c) {\n valArray.push(c.content)\n return JSON.stringify(c.id)\n })\n return new YArray(os, model.id, idArray, valArray)\n }\n })\n})()\n","/* global Y */\n'use strict'\n\n;(function () {\n class YMap {\n constructor (os, model, contents, opContents) {\n this._model = model.id\n this.os = os\n this.map = Y.utils.copyObject(model.map)\n this.contents = contents\n this.opContents = opContents\n this.eventHandler = new Y.utils.EventHandler(ops => {\n var userEvents = []\n for (var i in ops) {\n var op = ops[i]\n var oldValue\n // key is the name to use to access (op)content\n var key = op.struct === 'Delete' ? op.key : op.parentSub\n\n // compute oldValue\n if (this.opContents[key] != null) {\n let prevType = this.opContents[key]\n oldValue = () => {// eslint-disable-line\n return new Promise((resolve) => {\n this.os.requestTransaction(function *() {// eslint-disable-line\n resolve(yield* this.getType(prevType))\n })\n })\n }\n } else {\n oldValue = this.contents[key]\n }\n // compute op event\n if (op.struct === 'Insert') {\n if (op.left === null) {\n if (op.opContent != null) {\n delete this.contents[key]\n if (op.deleted) {\n delete this.opContents[key]\n } else {\n this.opContents[key] = op.opContent\n }\n } else {\n delete this.opContents[key]\n if (op.deleted) {\n delete this.contents[key]\n } else {\n this.contents[key] = op.content\n }\n }\n this.map[key] = op.id\n var insertEvent = {\n name: key,\n object: this\n }\n if (oldValue === undefined) {\n insertEvent.type = 'add'\n } else {\n insertEvent.type = 'update'\n insertEvent.oldValue = oldValue\n }\n userEvents.push(insertEvent)\n }\n } else if (op.struct === 'Delete') {\n if (Y.utils.compareIds(this.map[key], op.target)) {\n delete this.opContents[key]\n delete this.contents[key]\n var deleteEvent = {\n name: key,\n object: this,\n oldValue: oldValue,\n type: 'delete'\n }\n userEvents.push(deleteEvent)\n }\n } else {\n throw new Error('Unexpected Operation!')\n }\n }\n this.eventHandler.callEventListeners(userEvents)\n })\n }\n get (key) {\n // return property.\n // if property does not exist, return null\n // if property is a type, return a promise\n if (key == null) {\n throw new Error('You must specify key!')\n }\n if (this.opContents[key] == null) {\n return this.contents[key]\n } else {\n return new Promise((resolve) => {\n var oid = this.opContents[key]\n this.os.requestTransaction(function *() {\n resolve(yield* this.getType(oid))\n })\n })\n }\n }\n /*\n If there is a primitive (not a custom type), then return it.\n Returns all primitive values, if propertyName is specified!\n Note: modifying the return value could result in inconsistencies!\n -- so make sure to copy it first!\n */\n getPrimitive (key) {\n if (key == null) {\n return Y.utils.copyObject(this.contents)\n } else {\n return this.contents[key]\n }\n }\n delete (key) {\n var right = this.map[key]\n if (right != null) {\n var del = {\n target: right,\n struct: 'Delete'\n }\n var eventHandler = this.eventHandler\n var modDel = Y.utils.copyObject(del)\n modDel.key = key\n eventHandler.awaitAndPrematurelyCall([modDel])\n this.os.requestTransaction(function *() {\n yield* this.applyCreatedOperations([del])\n eventHandler.awaitedDeletes(1)\n })\n }\n }\n set (key, value) {\n // set property.\n // if property is a type, return a promise\n // if not, apply immediately on this type an call event\n\n var right = this.map[key] || null\n var insert = {\n left: null,\n right: right,\n origin: null,\n parent: this._model,\n parentSub: key,\n struct: 'Insert'\n }\n return new Promise((resolve) => {\n if (value instanceof Y.utils.CustomType) {\n // construct a new type\n this.os.requestTransaction(function *() {\n var typeid = yield* value.createType.call(this)\n var type = yield* this.getType(typeid)\n insert.opContent = typeid\n insert.id = this.store.getNextOpId()\n yield* this.applyCreatedOperations([insert])\n resolve(type)\n })\n } else {\n insert.content = value\n insert.id = this.os.getNextOpId()\n var eventHandler = this.eventHandler\n eventHandler.awaitAndPrematurelyCall([insert])\n\n this.os.requestTransaction(function *() {\n yield* this.applyCreatedOperations([insert])\n eventHandler.awaitedInserts(1)\n })\n resolve(value)\n }\n })\n }\n observe (f) {\n this.eventHandler.addEventListener(f)\n }\n unobserve (f) {\n this.eventHandler.removeEventListener(f)\n }\n /*\n Observe a path.\n\n E.g.\n ```\n o.set('textarea', Y.TextBind)\n o.observePath(['textarea'], function(t){\n // is called whenever textarea is replaced\n t.bind(textarea)\n })\n\n returns a Promise that contains a function that removes the observer from the path.\n */\n observePath (path, f) {\n var self = this\n function observeProperty (events) {\n // call f whenever path changes\n for (var i = 0; i < events.length; i++) {\n var event = events[i]\n if (event.name === propertyName) {\n // call this also for delete events!\n var property = self.get(propertyName)\n if (property instanceof Promise) {\n property.then(f)\n } else {\n f(property)\n }\n }\n }\n }\n\n if (path.length < 1) {\n throw new Error('Path must contain at least one element!')\n } else if (path.length === 1) {\n var propertyName = path[0]\n var property = self.get(propertyName)\n if (property instanceof Promise) {\n property.then(f)\n } else {\n f(property)\n }\n this.observe(observeProperty)\n return Promise.resolve(function () {\n self.unobserve(f)\n })\n } else {\n var deleteChildObservers\n var resetObserverPath = function () {\n var promise = self.get(path[0])\n if (!promise instanceof Promise) {\n // its either not defined or a primitive value\n promise = self.set(path[0], Y.Map)\n }\n return promise.then(function (map) {\n return map.observePath(path.slice(1), f)\n }).then(function (_deleteChildObservers) {\n // update deleteChildObservers\n deleteChildObservers = _deleteChildObservers\n return Promise.resolve() // Promise does not return anything\n })\n }\n var observer = function (events) {\n for (var e in events) {\n var event = events[e]\n if (event.name === path[0]) {\n deleteChildObservers()\n if (event.type === 'add' || event.type === 'update') {\n resetObserverPath()\n }\n // TODO: what about the delete events?\n }\n }\n }\n self.observe(observer)\n return resetObserverPath().then(\n // this promise contains a function that deletes all the child observers\n // and how to unobserve the observe from this object\n Promise.resolve(function () {\n deleteChildObservers()\n self.unobserve(observer)\n })\n )\n }\n }\n * _changed (transaction, op) {\n if (op.struct === 'Delete') {\n op.key = (yield* transaction.getOperation(op.target)).parentSub\n }\n this.eventHandler.receivedOp(op)\n }\n }\n Y.Map = new Y.utils.CustomType({\n class: YMap,\n createType: function * YMapCreator () {\n var modelid = this.store.getNextOpId()\n var model = {\n map: {},\n struct: 'Map',\n type: 'Map',\n id: modelid\n }\n yield* this.applyCreatedOperations([model])\n return modelid\n },\n initType: function * YMapInitializer (os, model) {\n var contents = {}\n var opContents = {}\n var map = model.map\n for (var name in map) {\n var op = yield* this.getOperation(map[name])\n if (op.opContent != null) {\n opContents[name] = op.opContent\n } else {\n contents[name] = op.content\n }\n }\n return new YMap(os, model, contents, opContents)\n }\n })\n})()\n","/* global Y */\n'use strict'\n\n;(function () {\n class YTextBind extends Y.Array['class'] {\n constructor (os, _model, idArray, valArray) {\n super(os, _model, idArray, valArray)\n this.textfields = []\n }\n toString () {\n return this.valArray.join('')\n }\n insert (pos, content) {\n super.insert(pos, content.split(''))\n }\n bind (textfield, domRoot) {\n domRoot = domRoot || window; // eslint-disable-line\n if (domRoot.getSelection == null) {\n domRoot = window;// eslint-disable-line\n }\n\n // don't duplicate!\n for (var t in this.textfields) {\n if (this.textfields[t] === textfield) {\n return\n }\n }\n var creatorToken = false\n\n var word = this\n textfield.value = this.toString()\n this.textfields.push(textfield)\n var createRange, writeRange, writeContent\n if (textfield.selectionStart != null && textfield.setSelectionRange != null) {\n createRange = function (fix) {\n var left = textfield.selectionStart\n var right = textfield.selectionEnd\n if (fix != null) {\n left = fix(left)\n right = fix(right)\n }\n return {\n left: left,\n right: right\n }\n }\n writeRange = function (range) {\n writeContent(word.toString())\n textfield.setSelectionRange(range.left, range.right)\n }\n writeContent = function (content) {\n textfield.value = content\n }\n } else {\n createRange = function (fix) {\n var range = {}\n var s = domRoot.getSelection()\n var clength = textfield.textContent.length\n range.left = Math.min(s.anchorOffset, clength)\n range.right = Math.min(s.focusOffset, clength)\n if (fix != null) {\n range.left = fix(range.left)\n range.right = fix(range.right)\n }\n var editedElement = s.focusNode\n if (editedElement === textfield || editedElement === textfield.childNodes[0]) {\n range.isReal = true\n } else {\n range.isReal = false\n }\n return range\n }\n\n writeRange = function (range) {\n writeContent(word.toString())\n var textnode = textfield.childNodes[0]\n if (range.isReal && textnode != null) {\n if (range.left < 0) {\n range.left = 0\n }\n range.right = Math.max(range.left, range.right)\n if (range.right > textnode.length) {\n range.right = textnode.length\n }\n range.left = Math.min(range.left, range.right)\n var r = document.createRange(); // eslint-disable-line\n r.setStart(textnode, range.left)\n r.setEnd(textnode, range.right)\n var s = window.getSelection(); // eslint-disable-line\n s.removeAllRanges()\n s.addRange(r)\n }\n }\n writeContent = function (content) {\n var contentArray = content.replace(new RegExp('\\n', 'g'), ' ').split(' ');// eslint-disable-line\n textfield.innerText = ''\n for (var i in contentArray) {\n var c = contentArray[i]\n textfield.innerText += c\n if (i !== contentArray.length - 1) {\n textfield.innerHTML += ' '\n }\n }\n }\n }\n writeContent(this.toString())\n\n this.observe(function (events) {\n for (var e in events) {\n var event = events[e]\n if (!creatorToken) {\n var oPos, fix\n if (event.type === 'insert') {\n oPos = event.index\n fix = function (cursor) {// eslint-disable-line\n if (cursor <= oPos) {\n return cursor\n } else {\n cursor += 1\n return cursor\n }\n }\n var r = createRange(fix)\n writeRange(r)\n } else if (event.type === 'delete') {\n oPos = event.index\n fix = function (cursor) {// eslint-disable-line\n if (cursor < oPos) {\n return cursor\n } else {\n cursor -= 1\n return cursor\n }\n }\n r = createRange(fix)\n writeRange(r)\n }\n }\n }\n })\n // consume all text-insert changes.\n textfield.onkeypress = function (event) {\n if (word.is_deleted) {\n // if word is deleted, do not do anything ever again\n textfield.onkeypress = null\n return true\n }\n creatorToken = true\n var char\n if (event.keyCode === 13) {\n char = '\\n'\n } else if (event.key != null) {\n if (event.charCode === 32) {\n char = ' '\n } else {\n char = event.key\n }\n } else {\n char = window.String.fromCharCode(event.keyCode); // eslint-disable-line\n }\n if (char.length > 1) {\n return true\n } else if (char.length > 0) {\n var r = createRange()\n var pos = Math.min(r.left, r.right, word.length)\n var diff = Math.abs(r.right - r.left)\n word.delete(pos, diff)\n word.insert(pos, char)\n r.left = pos + char.length\n r.right = r.left\n writeRange(r)\n }\n event.preventDefault()\n creatorToken = false\n return false\n }\n textfield.onpaste = function (event) {\n if (word.is_deleted) {\n // if word is deleted, do not do anything ever again\n textfield.onpaste = null\n return true\n }\n event.preventDefault()\n }\n textfield.oncut = function (event) {\n if (word.is_deleted) {\n // if word is deleted, do not do anything ever again\n textfield.oncut = null\n return true\n }\n event.preventDefault()\n }\n //\n // consume deletes. Note that\n // chrome: won't consume deletions on keypress event.\n // keyCode is deprecated. BUT: I don't see another way.\n // since event.key is not implemented in the current version of chrome.\n // Every browser supports keyCode. Let's stick with it for now..\n //\n textfield.onkeydown = function (event) {\n creatorToken = true\n if (word.is_deleted) {\n // if word is deleted, do not do anything ever again\n textfield.onkeydown = null\n return true\n }\n var r = createRange()\n var pos = Math.min(r.left, r.right, word.toString().length)\n var diff = Math.abs(r.left - r.right)\n if (event.keyCode != null && event.keyCode === 8) { // Backspace\n if (diff > 0) {\n word.delete(pos, diff)\n r.left = pos\n r.right = pos\n writeRange(r)\n } else {\n if (event.ctrlKey != null && event.ctrlKey) {\n var val = word.toString()\n var newPos = pos\n var delLength = 0\n if (pos > 0) {\n newPos--\n delLength++\n }\n while (newPos > 0 && val[newPos] !== ' ' && val[newPos] !== '\\n') {\n newPos--\n delLength++\n }\n word.delete(newPos, pos - newPos)\n r.left = newPos\n r.right = newPos\n writeRange(r)\n } else {\n if (pos > 0) {\n word.delete(pos - 1, 1)\n r.left = pos - 1\n r.right = pos - 1\n writeRange(r)\n }\n }\n }\n event.preventDefault()\n creatorToken = false\n return false\n } else if (event.keyCode != null && event.keyCode === 46) { // Delete\n if (diff > 0) {\n word.delete(pos, diff)\n r.left = pos\n r.right = pos\n writeRange(r)\n } else {\n word.delete(pos, 1)\n r.left = pos\n r.right = pos\n writeRange(r)\n }\n event.preventDefault()\n creatorToken = false\n return false\n } else {\n creatorToken = false\n return true\n }\n }\n }\n }\n Y.TextBind = new Y.utils.CustomType({\n class: YTextBind,\n createType: function * YTextBindCreator () {\n var modelid = this.store.getNextOpId()\n var model = {\n start: null,\n end: null,\n struct: 'List',\n type: 'TextBind',\n id: modelid\n }\n yield* this.applyCreatedOperations([model])\n return modelid\n },\n initType: function * YTextBindInitializer (os, model) {\n var valArray = []\n var idArray = yield* Y.Struct.List.map.call(this, model, function (c) {\n valArray.push(c.content)\n return JSON.stringify(c.id)\n })\n return new YTextBind(os, model.id, idArray, valArray)\n }\n })\n})()\n"],"sourceRoot":"/source/"} \ No newline at end of file