@atlaskit/collab-provider 8.5.0 → 8.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/dist/cjs/analytics/analytics-helper.js +22 -24
- package/dist/cjs/analytics/performance.js +4 -4
- package/dist/cjs/channel.js +218 -203
- package/dist/cjs/connectivity/network.js +4 -4
- package/dist/cjs/disconnected-reason-mapper.js +4 -4
- package/dist/cjs/document/catchup.js +81 -81
- package/dist/cjs/document/document-service.js +226 -285
- package/dist/cjs/document/step-queue-state.js +4 -0
- package/dist/cjs/errors/error-types.js +102 -23
- package/dist/cjs/helpers/const.js +12 -12
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/metadata/metadata-service.js +77 -0
- package/dist/cjs/participants/participants-helper.js +19 -28
- package/dist/cjs/participants/participants-service.js +90 -60
- package/dist/cjs/participants/participants-state.js +1 -0
- package/dist/cjs/provider/commit-step.js +10 -2
- package/dist/cjs/provider/index.js +168 -101
- package/dist/cjs/types.js +12 -4
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/analytics/analytics-helper.js +3 -3
- package/dist/es2019/analytics/performance.js +3 -3
- package/dist/es2019/channel.js +27 -6
- package/dist/es2019/connectivity/network.js +3 -3
- package/dist/es2019/disconnected-reason-mapper.js +3 -3
- package/dist/es2019/document/catchup.js +4 -2
- package/dist/es2019/document/document-service.js +45 -76
- package/dist/es2019/document/step-queue-state.js +4 -0
- package/dist/es2019/errors/error-types.js +104 -25
- package/dist/es2019/helpers/const.js +9 -9
- package/dist/es2019/index.js +2 -1
- package/dist/es2019/metadata/metadata-service.js +57 -0
- package/dist/es2019/participants/participants-helper.js +3 -8
- package/dist/es2019/participants/participants-service.js +46 -15
- package/dist/es2019/participants/participants-state.js +1 -0
- package/dist/es2019/provider/commit-step.js +8 -1
- package/dist/es2019/provider/index.js +111 -39
- package/dist/es2019/types.js +16 -3
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/analytics/analytics-helper.js +22 -24
- package/dist/esm/analytics/performance.js +3 -3
- package/dist/esm/channel.js +218 -203
- package/dist/esm/connectivity/network.js +3 -3
- package/dist/esm/disconnected-reason-mapper.js +3 -3
- package/dist/esm/document/catchup.js +81 -81
- package/dist/esm/document/document-service.js +226 -285
- package/dist/esm/document/step-queue-state.js +4 -0
- package/dist/esm/errors/error-types.js +104 -25
- package/dist/esm/helpers/const.js +9 -9
- package/dist/esm/index.js +2 -1
- package/dist/esm/metadata/metadata-service.js +69 -0
- package/dist/esm/participants/participants-helper.js +19 -28
- package/dist/esm/participants/participants-service.js +90 -60
- package/dist/esm/participants/participants-state.js +1 -0
- package/dist/esm/provider/commit-step.js +8 -1
- package/dist/esm/provider/index.js +167 -99
- package/dist/esm/types.js +16 -3
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/esm/version.json +1 -1
- package/dist/types/channel.d.ts +2 -2
- package/dist/types/document/document-service.d.ts +5 -24
- package/dist/types/index.d.ts +2 -1
- package/dist/types/metadata/metadata-service.d.ts +25 -0
- package/dist/types/participants/participants-helper.d.ts +2 -3
- package/dist/types/participants/participants-service.d.ts +8 -8
- package/dist/types/provider/commit-step.d.ts +11 -0
- package/dist/types/provider/index.d.ts +15 -13
- package/dist/types/types.d.ts +24 -10
- package/package.json +12 -7
- package/report.api.md +26 -7
- package/channel/package.json +0 -15
- package/config/package.json +0 -15
- package/disconnected-reason-mapper/package.json +0 -15
- package/emitter/package.json +0 -15
|
@@ -8,12 +8,12 @@ exports.default = exports.NetworkStatus = void 0;
|
|
|
8
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
var NetworkStatus
|
|
12
|
-
exports.NetworkStatus = NetworkStatus;
|
|
13
|
-
(function (NetworkStatus) {
|
|
11
|
+
var NetworkStatus = /*#__PURE__*/function (NetworkStatus) {
|
|
14
12
|
NetworkStatus["ONLINE"] = "ONLINE";
|
|
15
13
|
NetworkStatus["OFFLINE"] = "OFFLINE";
|
|
16
|
-
|
|
14
|
+
return NetworkStatus;
|
|
15
|
+
}({});
|
|
16
|
+
exports.NetworkStatus = NetworkStatus;
|
|
17
17
|
var Network = /*#__PURE__*/function () {
|
|
18
18
|
function Network(props) {
|
|
19
19
|
var _this = this;
|
|
@@ -17,16 +17,16 @@ var socketIOReasons = {
|
|
|
17
17
|
PING_TIMEOUT: 'ping timeout' // The connection has encountered an error (example: the server was killed during a HTTP long-polling cycle)
|
|
18
18
|
};
|
|
19
19
|
exports.socketIOReasons = socketIOReasons;
|
|
20
|
-
var DisconnectReason
|
|
21
|
-
exports.DisconnectReason = DisconnectReason;
|
|
22
|
-
(function (DisconnectReason) {
|
|
20
|
+
var DisconnectReason = /*#__PURE__*/function (DisconnectReason) {
|
|
23
21
|
DisconnectReason["CLIENT_DISCONNECT"] = "CLIENT_DISCONNECT";
|
|
24
22
|
DisconnectReason["SERVER_DISCONNECT"] = "SERVER_DISCONNECT";
|
|
25
23
|
DisconnectReason["SOCKET_CLOSED"] = "SOCKET_CLOSED";
|
|
26
24
|
DisconnectReason["SOCKET_ERROR"] = "SOCKET_ERROR";
|
|
27
25
|
DisconnectReason["SOCKET_TIMEOUT"] = "SOCKET_TIMEOUT";
|
|
28
26
|
DisconnectReason["UNKNOWN_DISCONNECT"] = "UNKNOWN_DISCONNECT";
|
|
29
|
-
|
|
27
|
+
return DisconnectReason;
|
|
28
|
+
}({});
|
|
29
|
+
exports.DisconnectReason = DisconnectReason;
|
|
30
30
|
var disconnectedReasonMapper = function disconnectedReasonMapper(reason) {
|
|
31
31
|
switch (reason) {
|
|
32
32
|
case socketIOReasons.IO_CLIENT_DISCONNECT:
|
|
@@ -12,7 +12,7 @@ var _utils = require("../helpers/utils");
|
|
|
12
12
|
var _prosemirrorTransform = require("prosemirror-transform");
|
|
13
13
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
14
14
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
15
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++)
|
|
15
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
16
16
|
var logger = (0, _utils.createLogger)('Catchup', 'red');
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -44,91 +44,91 @@ var catchup = /*#__PURE__*/function () {
|
|
|
44
44
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(opt) {
|
|
45
45
|
var _yield$opt$fetchCatch, doc, serverStepMaps, serverVersion, metadata, currentPmVersion, unconfirmedSteps, _unconfirmedSteps, stepMaps, mapping, newUnconfirmedSteps;
|
|
46
46
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
47
|
-
while (1) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
47
|
+
while (1) switch (_context.prev = _context.next) {
|
|
48
|
+
case 0:
|
|
49
|
+
_context.next = 2;
|
|
50
|
+
return opt.fetchCatchup(opt.getCurrentPmVersion());
|
|
51
|
+
case 2:
|
|
52
|
+
_yield$opt$fetchCatch = _context.sent;
|
|
53
|
+
doc = _yield$opt$fetchCatch.doc;
|
|
54
|
+
serverStepMaps = _yield$opt$fetchCatch.stepMaps;
|
|
55
|
+
serverVersion = _yield$opt$fetchCatch.version;
|
|
56
|
+
metadata = _yield$opt$fetchCatch.metadata;
|
|
57
|
+
if (doc) {
|
|
58
|
+
currentPmVersion = opt.getCurrentPmVersion();
|
|
59
|
+
if (typeof serverVersion === 'undefined') {
|
|
60
|
+
logger("Could not determine server version");
|
|
61
|
+
} else if (serverVersion <= currentPmVersion) {
|
|
62
|
+
// there are no step maps in this case after page recovery
|
|
63
|
+
unconfirmedSteps = opt.getUnconfirmedSteps(); // replace the entire document
|
|
64
|
+
logger("Replacing document: ".concat(doc));
|
|
65
|
+
logger("getting metadata: ".concat(metadata));
|
|
66
|
+
// Replace local document and version number
|
|
67
|
+
opt.updateDocument({
|
|
68
|
+
doc: JSON.parse(doc),
|
|
69
|
+
version: serverVersion,
|
|
70
|
+
metadata: metadata,
|
|
71
|
+
reserveCursor: true
|
|
72
|
+
});
|
|
73
|
+
opt.updateMetadata(metadata);
|
|
74
|
+
if (unconfirmedSteps !== null && unconfirmedSteps !== void 0 && unconfirmedSteps.length) {
|
|
75
|
+
opt.applyLocalSteps(unconfirmedSteps);
|
|
76
|
+
}
|
|
77
|
+
} else {
|
|
78
|
+
// Please, do not use those steps inside of async
|
|
79
|
+
// method. That will lead to outdated steps
|
|
80
|
+
_unconfirmedSteps = opt.getUnconfirmedSteps();
|
|
81
|
+
logger("Too far behind[current: v".concat(currentPmVersion, ", server: v").concat(serverVersion, ". ").concat(serverStepMaps.length, " steps need to catchup]"));
|
|
82
|
+
/**
|
|
83
|
+
* Remove steps from queue where the version is older than
|
|
84
|
+
* the version we received from service. Keep steps that might be
|
|
85
|
+
* newer.
|
|
86
|
+
*/
|
|
87
|
+
opt.filterQueue(function (data) {
|
|
88
|
+
return data.version > serverVersion;
|
|
89
|
+
});
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
// We are too far behind - replace the entire document
|
|
92
|
+
logger("Replacing document: ".concat(doc));
|
|
93
|
+
logger("getting metadata: ".concat(metadata));
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
// Replace local document and version number
|
|
96
|
+
opt.updateDocument({
|
|
97
|
+
doc: JSON.parse(doc),
|
|
98
|
+
version: serverVersion,
|
|
99
|
+
metadata: metadata,
|
|
100
|
+
reserveCursor: true
|
|
101
|
+
});
|
|
102
|
+
opt.updateMetadata(metadata);
|
|
102
103
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
104
|
+
// After replacing the whole document in the editor, we need to reapply the unconfirmed
|
|
105
|
+
// steps back into the editor, so we don't lose any data. But before that, we need to rebase
|
|
106
|
+
// those steps since their position could be changed after replacing.
|
|
107
|
+
// https://prosemirror.net/docs/guide/#transform.rebasing
|
|
108
|
+
if (_unconfirmedSteps !== null && _unconfirmedSteps !== void 0 && _unconfirmedSteps.length) {
|
|
109
|
+
// Create StepMap from StepMap JSON
|
|
110
|
+
// eslint-disable-next-line no-unused-vars
|
|
111
|
+
stepMaps = serverStepMaps.map(function (_ref2) {
|
|
112
|
+
var ranges = _ref2.ranges,
|
|
113
|
+
inverted = _ref2.inverted;
|
|
114
|
+
// Due to @types/prosemirror-transform mismatch with the actual
|
|
115
|
+
// constructor, hack to set the `inverted`.
|
|
116
|
+
var stepMap = new _prosemirrorTransform.StepMap(ranges);
|
|
117
|
+
stepMap.inverted = inverted;
|
|
118
|
+
return stepMap;
|
|
119
|
+
}); // create Mapping used for Step.map
|
|
120
|
+
mapping = new _prosemirrorTransform.Mapping(stepMaps);
|
|
121
|
+
logger("".concat(_unconfirmedSteps.length, " unconfirmed steps before rebased: ").concat(JSON.stringify(_unconfirmedSteps)));
|
|
122
|
+
newUnconfirmedSteps = rebaseSteps(_unconfirmedSteps, mapping);
|
|
123
|
+
logger("Re-aply ".concat(newUnconfirmedSteps.length, " mapped unconfirmed steps: ").concat(JSON.stringify(newUnconfirmedSteps)));
|
|
124
|
+
// Re-apply local steps
|
|
125
|
+
opt.applyLocalSteps(newUnconfirmedSteps);
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
}
|
|
129
|
+
case 8:
|
|
130
|
+
case "end":
|
|
131
|
+
return _context.stop();
|
|
132
132
|
}
|
|
133
133
|
}, _callee);
|
|
134
134
|
}));
|