UNPKG

@slate-sheikah/backend

Version:

slate-sheikah backend: Backend components for slate-sheikah. Slate + Automerge + Sockets

112 lines (91 loc) 10.3 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var Automerge = _interopRequireWildcard(require("automerge")); var _bridge = require("@slate-sheikah/bridge"); /** * AutomergeBackend contains collaboration with Automerge */ var AutomergeBackend = /*#__PURE__*/function () { function AutomergeBackend() { var _this = this; (0, _classCallCheck2["default"])(this, AutomergeBackend); (0, _defineProperty2["default"])(this, "connections", {}); (0, _defineProperty2["default"])(this, "docSet", new Automerge.DocSet()); (0, _defineProperty2["default"])(this, "createConnection", function (id, send) { if (_this.connections[id]) { console.warn("Already has connection with id: ".concat(id, ". It will be terminated before creating new connection")); _this.closeConnection(id); } _this.connections[id] = new Automerge.Connection(_this.docSet, (0, _bridge.toCollabAction)('operation', send)); }); (0, _defineProperty2["default"])(this, "openConnection", function (id) { return _this.connections[id].open(); }); (0, _defineProperty2["default"])(this, "receiveOperation", function (id, data) { try { _this.connections[id].receiveMsg(data.payload); } catch (e) { console.error('Unexpected error in receiveOperation', e); } }); (0, _defineProperty2["default"])(this, "getDocument", function (docId) { return _this.docSet.getDoc(docId); }); (0, _defineProperty2["default"])(this, "appendDocument", function (docId, data) { try { if (_this.getDocument(docId)) { throw new Error("Already has document with id: ".concat(docId)); } var sync = (0, _bridge.toSync)({ cursors: {}, children: data }); var doc = Automerge.from(sync); _this.docSet.setDoc(docId, doc); } catch (e) { console.error(e, docId); } }); (0, _defineProperty2["default"])(this, "removeDocument", function (docId) { return _this.docSet.removeDoc(docId); }); (0, _defineProperty2["default"])(this, "garbageCursor", function (docId, id) { try { var doc = _this.getDocument(docId); if (!doc.cursors) return; var change = Automerge.change(doc, function (d) { delete d.cursors[id]; }); _this.docSet.setDoc(docId, change); } catch (e) { console.error('Unexpected error in garbageCursor', e); } }); } (0, _createClass2["default"])(AutomergeBackend, [{ key: "closeConnection", /** * Close Automerge Connection and remove it from connections */ value: function closeConnection(id) { var _this$connections$id; (_this$connections$id = this.connections[id]) === null || _this$connections$id === void 0 ? void 0 : _this$connections$id.close(); delete this.connections[id]; } /** * Receive and apply operation to Automerge Connection */ }]); return AutomergeBackend; }(); var _default = AutomergeBackend; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BdXRvbWVyZ2VCYWNrZW5kLnRzIl0sIm5hbWVzIjpbIkF1dG9tZXJnZUJhY2tlbmQiLCJBdXRvbWVyZ2UiLCJEb2NTZXQiLCJpZCIsInNlbmQiLCJjb25uZWN0aW9ucyIsImNvbnNvbGUiLCJ3YXJuIiwiY2xvc2VDb25uZWN0aW9uIiwiQ29ubmVjdGlvbiIsImRvY1NldCIsIm9wZW4iLCJkYXRhIiwicmVjZWl2ZU1zZyIsInBheWxvYWQiLCJlIiwiZXJyb3IiLCJkb2NJZCIsImdldERvYyIsImdldERvY3VtZW50IiwiRXJyb3IiLCJzeW5jIiwiY3Vyc29ycyIsImNoaWxkcmVuIiwiZG9jIiwiZnJvbSIsInNldERvYyIsInJlbW92ZURvYyIsImNoYW5nZSIsImQiLCJjbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFXQTs7O0lBSU1BLGdCOzs7OzswREFDdUIsRTtxREFFUyxJQUFJQyxTQUFTLENBQUNDLE1BQWQsRTsrREFNakIsVUFBQ0MsRUFBRCxFQUFhQyxJQUFiLEVBQTJCO0FBQzVDLFVBQUksS0FBSSxDQUFDQyxXQUFMLENBQWlCRixFQUFqQixDQUFKLEVBQTBCO0FBQ3hCRyxRQUFBQSxPQUFPLENBQUNDLElBQVIsMkNBQ3FDSixFQURyQzs7QUFJQSxRQUFBLEtBQUksQ0FBQ0ssZUFBTCxDQUFxQkwsRUFBckI7QUFDRDs7QUFFRCxNQUFBLEtBQUksQ0FBQ0UsV0FBTCxDQUFpQkYsRUFBakIsSUFBdUIsSUFBSUYsU0FBUyxDQUFDUSxVQUFkLENBQ3JCLEtBQUksQ0FBQ0MsTUFEZ0IsRUFFckIsNEJBQWUsV0FBZixFQUE0Qk4sSUFBNUIsQ0FGcUIsQ0FBdkI7QUFJRCxLOzZEQU1nQixVQUFDRCxFQUFEO0FBQUEsYUFBZ0IsS0FBSSxDQUFDRSxXQUFMLENBQWlCRixFQUFqQixFQUFxQlEsSUFBckIsRUFBaEI7QUFBQSxLOytEQWdCRSxVQUFDUixFQUFELEVBQWFTLElBQWIsRUFBb0M7QUFDckQsVUFBSTtBQUNGLFFBQUEsS0FBSSxDQUFDUCxXQUFMLENBQWlCRixFQUFqQixFQUFxQlUsVUFBckIsQ0FBZ0NELElBQUksQ0FBQ0UsT0FBckM7QUFDRCxPQUZELENBRUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1ZULFFBQUFBLE9BQU8sQ0FBQ1UsS0FBUixDQUFjLHNDQUFkLEVBQXNERCxDQUF0RDtBQUNEO0FBQ0YsSzswREFNYSxVQUFDRSxLQUFEO0FBQUEsYUFBbUIsS0FBSSxDQUFDUCxNQUFMLENBQVlRLE1BQVosQ0FBbUJELEtBQW5CLENBQW5CO0FBQUEsSzs2REFNRyxVQUFDQSxLQUFELEVBQWdCTCxJQUFoQixFQUFpQztBQUNoRCxVQUFJO0FBQ0YsWUFBSSxLQUFJLENBQUNPLFdBQUwsQ0FBaUJGLEtBQWpCLENBQUosRUFBNkI7QUFDM0IsZ0JBQU0sSUFBSUcsS0FBSix5Q0FBMkNILEtBQTNDLEVBQU47QUFDRDs7QUFFRCxZQUFNSSxJQUFJLEdBQUcsb0JBQU87QUFBRUMsVUFBQUEsT0FBTyxFQUFFLEVBQVg7QUFBZUMsVUFBQUEsUUFBUSxFQUFFWDtBQUF6QixTQUFQLENBQWI7QUFFQSxZQUFNWSxHQUFHLEdBQUd2QixTQUFTLENBQUN3QixJQUFWLENBQXdCSixJQUF4QixDQUFaOztBQUVBLFFBQUEsS0FBSSxDQUFDWCxNQUFMLENBQVlnQixNQUFaLENBQW1CVCxLQUFuQixFQUEwQk8sR0FBMUI7QUFDRCxPQVZELENBVUUsT0FBT1QsQ0FBUCxFQUFVO0FBQ1ZULFFBQUFBLE9BQU8sQ0FBQ1UsS0FBUixDQUFjRCxDQUFkLEVBQWlCRSxLQUFqQjtBQUNEO0FBQ0YsSzs2REFNZ0IsVUFBQ0EsS0FBRDtBQUFBLGFBQW1CLEtBQUksQ0FBQ1AsTUFBTCxDQUFZaUIsU0FBWixDQUFzQlYsS0FBdEIsQ0FBbkI7QUFBQSxLOzREQU1ELFVBQUNBLEtBQUQsRUFBZ0JkLEVBQWhCLEVBQStCO0FBQzdDLFVBQUk7QUFDRixZQUFNcUIsR0FBRyxHQUFHLEtBQUksQ0FBQ0wsV0FBTCxDQUFpQkYsS0FBakIsQ0FBWjs7QUFFQSxZQUFJLENBQUNPLEdBQUcsQ0FBQ0YsT0FBVCxFQUFrQjtBQUVsQixZQUFNTSxNQUFNLEdBQUczQixTQUFTLENBQUMyQixNQUFWLENBQWlCSixHQUFqQixFQUFzQixVQUFDSyxDQUFELEVBQVk7QUFDL0MsaUJBQU9BLENBQUMsQ0FBQ1AsT0FBRixDQUFVbkIsRUFBVixDQUFQO0FBQ0QsU0FGYyxDQUFmOztBQUlBLFFBQUEsS0FBSSxDQUFDTyxNQUFMLENBQVlnQixNQUFaLENBQW1CVCxLQUFuQixFQUEwQlcsTUFBMUI7QUFDRCxPQVZELENBVUUsT0FBT2IsQ0FBUCxFQUFVO0FBQ1ZULFFBQUFBLE9BQU8sQ0FBQ1UsS0FBUixDQUFjLG1DQUFkLEVBQW1ERCxDQUFuRDtBQUNEO0FBQ0YsSzs7Ozs7O0FBeEVEOzs7b0NBSWdCWixFLEVBQVk7QUFBQTs7QUFDMUIsbUNBQUtFLFdBQUwsQ0FBaUJGLEVBQWpCLCtFQUFzQjJCLEtBQXRCO0FBRUEsYUFBTyxLQUFLekIsV0FBTCxDQUFpQkYsRUFBakIsQ0FBUDtBQUNEO0FBRUQ7Ozs7Ozs7O2VBaUVhSCxnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEF1dG9tZXJnZSBmcm9tICdhdXRvbWVyZ2UnXG5cbmltcG9ydCB7IE5vZGUgfSBmcm9tICdzbGF0ZSdcblxuaW1wb3J0IHtcbiAgdG9Db2xsYWJBY3Rpb24sXG4gIHRvU3luYyxcbiAgU3luY0RvYyxcbiAgQ29sbGFiQWN0aW9uXG59IGZyb20gJ0BzbGF0ZS1zaGVpa2FoL2JyaWRnZSdcblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9ucyB7XG4gIFtrZXk6IHN0cmluZ106IEF1dG9tZXJnZS5Db25uZWN0aW9uPFN5bmNEb2M+XG59XG5cbi8qKlxuICogQXV0b21lcmdlQmFja2VuZCBjb250YWlucyBjb2xsYWJvcmF0aW9uIHdpdGggQXV0b21lcmdlXG4gKi9cblxuY2xhc3MgQXV0b21lcmdlQmFja2VuZCB7XG4gIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucyA9IHt9XG5cbiAgZG9jU2V0OiBBdXRvbWVyZ2UuRG9jU2V0PFN5bmNEb2M+ID0gbmV3IEF1dG9tZXJnZS5Eb2NTZXQoKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgQXV0bW9yZ2UgQ29ubmVjdGlvblxuICAgKi9cblxuICBjcmVhdGVDb25uZWN0aW9uID0gKGlkOiBzdHJpbmcsIHNlbmQ6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25zW2lkXSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgQWxyZWFkeSBoYXMgY29ubmVjdGlvbiB3aXRoIGlkOiAke2lkfS4gSXQgd2lsbCBiZSB0ZXJtaW5hdGVkIGJlZm9yZSBjcmVhdGluZyBuZXcgY29ubmVjdGlvbmBcbiAgICAgIClcblxuICAgICAgdGhpcy5jbG9zZUNvbm5lY3Rpb24oaWQpXG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW9uc1tpZF0gPSBuZXcgQXV0b21lcmdlLkNvbm5lY3Rpb24oXG4gICAgICB0aGlzLmRvY1NldCxcbiAgICAgIHRvQ29sbGFiQWN0aW9uKCdvcGVyYXRpb24nLCBzZW5kKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBBdXRvbWVyZ2UgQ29ubmVjdGlvblxuICAgKi9cblxuICBvcGVuQ29ubmVjdGlvbiA9IChpZDogc3RyaW5nKSA9PiB0aGlzLmNvbm5lY3Rpb25zW2lkXS5vcGVuKClcblxuICAvKipcbiAgICogQ2xvc2UgQXV0b21lcmdlIENvbm5lY3Rpb24gYW5kIHJlbW92ZSBpdCBmcm9tIGNvbm5lY3Rpb25zXG4gICAqL1xuXG4gIGNsb3NlQ29ubmVjdGlvbihpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uc1tpZF0/LmNsb3NlKClcblxuICAgIGRlbGV0ZSB0aGlzLmNvbm5lY3Rpb25zW2lkXVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmUgYW5kIGFwcGx5IG9wZXJhdGlvbiB0byBBdXRvbWVyZ2UgQ29ubmVjdGlvblxuICAgKi9cblxuICByZWNlaXZlT3BlcmF0aW9uID0gKGlkOiBzdHJpbmcsIGRhdGE6IENvbGxhYkFjdGlvbikgPT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25zW2lkXS5yZWNlaXZlTXNnKGRhdGEucGF5bG9hZClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGluIHJlY2VpdmVPcGVyYXRpb24nLCBlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZG9jdW1lbnQgZnJvbSBBdXRvbWVyZ2UgRG9jU2V0XG4gICAqL1xuXG4gIGdldERvY3VtZW50ID0gKGRvY0lkOiBzdHJpbmcpID0+IHRoaXMuZG9jU2V0LmdldERvYyhkb2NJZClcblxuICAvKipcbiAgICogQXBwZW5kIGRvY3VtZW50IHRvIEF1dG9tZXJnZSBEb2NTZXRcbiAgICovXG5cbiAgYXBwZW5kRG9jdW1lbnQgPSAoZG9jSWQ6IHN0cmluZywgZGF0YTogTm9kZVtdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmdldERvY3VtZW50KGRvY0lkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFscmVhZHkgaGFzIGRvY3VtZW50IHdpdGggaWQ6ICR7ZG9jSWR9YClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3luYyA9IHRvU3luYyh7IGN1cnNvcnM6IHt9LCBjaGlsZHJlbjogZGF0YSB9KVxuXG4gICAgICBjb25zdCBkb2MgPSBBdXRvbWVyZ2UuZnJvbTxTeW5jRG9jPihzeW5jKVxuXG4gICAgICB0aGlzLmRvY1NldC5zZXREb2MoZG9jSWQsIGRvYylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUsIGRvY0lkKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZG9jdW1lbnQgZnJvbSBBdXRvbWVyZ2UgRG9jU2V0XG4gICAqL1xuXG4gIHJlbW92ZURvY3VtZW50ID0gKGRvY0lkOiBzdHJpbmcpID0+IHRoaXMuZG9jU2V0LnJlbW92ZURvYyhkb2NJZClcblxuICAvKipcbiAgICogUmVtb3ZlIGNsaWVudCBjdXJzb3IgZGF0YVxuICAgKi9cblxuICBnYXJiYWdlQ3Vyc29yID0gKGRvY0lkOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZG9jID0gdGhpcy5nZXREb2N1bWVudChkb2NJZClcblxuICAgICAgaWYgKCFkb2MuY3Vyc29ycykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGNoYW5nZSA9IEF1dG9tZXJnZS5jaGFuZ2UoZG9jLCAoZDogYW55KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBkLmN1cnNvcnNbaWRdXG4gICAgICB9KVxuXG4gICAgICB0aGlzLmRvY1NldC5zZXREb2MoZG9jSWQsIGNoYW5nZSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGluIGdhcmJhZ2VDdXJzb3InLCBlKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdXRvbWVyZ2VCYWNrZW5kXG4iXX0=