@liveblocks/client 0.16.3 → 0.16.4
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/index.d.ts +3 -727
- package/index.js +85 -2861
- package/index.mjs +1324 -0
- package/internal.d.ts +18 -56
- package/internal.js +321 -148
- package/internal.mjs +320 -0
- package/package.json +17 -16
- package/shared.d.ts +771 -0
- package/shared.js +2482 -0
- package/shared.mjs +1947 -0
- package/esm/index.js +0 -3068
- package/esm/index.mjs +0 -3068
- package/esm/internal.js +0 -150
- package/esm/internal.mjs +0 -150
package/index.js
CHANGED
|
@@ -2,2437 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
for (var i = 0; i < props.length; i++) {
|
|
7
|
-
var descriptor = props[i];
|
|
8
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
9
|
-
descriptor.configurable = true;
|
|
10
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
11
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
16
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
17
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
18
|
-
return Constructor;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function _extends() {
|
|
22
|
-
_extends = Object.assign || function (target) {
|
|
23
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
24
|
-
var source = arguments[i];
|
|
25
|
-
|
|
26
|
-
for (var key in source) {
|
|
27
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
28
|
-
target[key] = source[key];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return target;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
return _extends.apply(this, arguments);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function _inheritsLoose(subClass, superClass) {
|
|
40
|
-
subClass.prototype = Object.create(superClass.prototype);
|
|
41
|
-
subClass.prototype.constructor = subClass;
|
|
42
|
-
|
|
43
|
-
_setPrototypeOf(subClass, superClass);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function _getPrototypeOf(o) {
|
|
47
|
-
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
|
48
|
-
return o.__proto__ || Object.getPrototypeOf(o);
|
|
49
|
-
};
|
|
50
|
-
return _getPrototypeOf(o);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function _setPrototypeOf(o, p) {
|
|
54
|
-
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
55
|
-
o.__proto__ = p;
|
|
56
|
-
return o;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
return _setPrototypeOf(o, p);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function _isNativeReflectConstruct() {
|
|
63
|
-
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
64
|
-
if (Reflect.construct.sham) return false;
|
|
65
|
-
if (typeof Proxy === "function") return true;
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
|
|
69
|
-
return true;
|
|
70
|
-
} catch (e) {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function _construct(Parent, args, Class) {
|
|
76
|
-
if (_isNativeReflectConstruct()) {
|
|
77
|
-
_construct = Reflect.construct;
|
|
78
|
-
} else {
|
|
79
|
-
_construct = function _construct(Parent, args, Class) {
|
|
80
|
-
var a = [null];
|
|
81
|
-
a.push.apply(a, args);
|
|
82
|
-
var Constructor = Function.bind.apply(Parent, a);
|
|
83
|
-
var instance = new Constructor();
|
|
84
|
-
if (Class) _setPrototypeOf(instance, Class.prototype);
|
|
85
|
-
return instance;
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return _construct.apply(null, arguments);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function _isNativeFunction(fn) {
|
|
93
|
-
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function _wrapNativeSuper(Class) {
|
|
97
|
-
var _cache = typeof Map === "function" ? new Map() : undefined;
|
|
98
|
-
|
|
99
|
-
_wrapNativeSuper = function _wrapNativeSuper(Class) {
|
|
100
|
-
if (Class === null || !_isNativeFunction(Class)) return Class;
|
|
101
|
-
|
|
102
|
-
if (typeof Class !== "function") {
|
|
103
|
-
throw new TypeError("Super expression must either be null or a function");
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (typeof _cache !== "undefined") {
|
|
107
|
-
if (_cache.has(Class)) return _cache.get(Class);
|
|
108
|
-
|
|
109
|
-
_cache.set(Class, Wrapper);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function Wrapper() {
|
|
113
|
-
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
Wrapper.prototype = Object.create(Class.prototype, {
|
|
117
|
-
constructor: {
|
|
118
|
-
value: Wrapper,
|
|
119
|
-
enumerable: false,
|
|
120
|
-
writable: true,
|
|
121
|
-
configurable: true
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
return _setPrototypeOf(Wrapper, Class);
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
return _wrapNativeSuper(Class);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
131
|
-
if (source == null) return {};
|
|
132
|
-
var target = {};
|
|
133
|
-
var sourceKeys = Object.keys(source);
|
|
134
|
-
var key, i;
|
|
135
|
-
|
|
136
|
-
for (i = 0; i < sourceKeys.length; i++) {
|
|
137
|
-
key = sourceKeys[i];
|
|
138
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
139
|
-
target[key] = source[key];
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return target;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function _assertThisInitialized(self) {
|
|
146
|
-
if (self === void 0) {
|
|
147
|
-
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return self;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
function _unsupportedIterableToArray(o, minLen) {
|
|
154
|
-
if (!o) return;
|
|
155
|
-
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
156
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
157
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
158
|
-
if (n === "Map" || n === "Set") return Array.from(o);
|
|
159
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function _arrayLikeToArray(arr, len) {
|
|
163
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
164
|
-
|
|
165
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
166
|
-
|
|
167
|
-
return arr2;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
171
|
-
var it;
|
|
172
|
-
|
|
173
|
-
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
|
174
|
-
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
175
|
-
if (it) o = it;
|
|
176
|
-
var i = 0;
|
|
177
|
-
return function () {
|
|
178
|
-
if (i >= o.length) return {
|
|
179
|
-
done: true
|
|
180
|
-
};
|
|
181
|
-
return {
|
|
182
|
-
done: false,
|
|
183
|
-
value: o[i++]
|
|
184
|
-
};
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
it = o[Symbol.iterator]();
|
|
192
|
-
return it.next.bind(it);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
var ServerMessageType;
|
|
196
|
-
|
|
197
|
-
(function (ServerMessageType) {
|
|
198
|
-
ServerMessageType[ServerMessageType["UpdatePresence"] = 100] = "UpdatePresence";
|
|
199
|
-
ServerMessageType[ServerMessageType["UserJoined"] = 101] = "UserJoined";
|
|
200
|
-
ServerMessageType[ServerMessageType["UserLeft"] = 102] = "UserLeft";
|
|
201
|
-
ServerMessageType[ServerMessageType["Event"] = 103] = "Event";
|
|
202
|
-
ServerMessageType[ServerMessageType["RoomState"] = 104] = "RoomState";
|
|
203
|
-
ServerMessageType[ServerMessageType["InitialStorageState"] = 200] = "InitialStorageState";
|
|
204
|
-
ServerMessageType[ServerMessageType["UpdateStorage"] = 201] = "UpdateStorage";
|
|
205
|
-
})(ServerMessageType || (ServerMessageType = {}));
|
|
206
|
-
|
|
207
|
-
var ClientMessageType;
|
|
208
|
-
|
|
209
|
-
(function (ClientMessageType) {
|
|
210
|
-
ClientMessageType[ClientMessageType["UpdatePresence"] = 100] = "UpdatePresence";
|
|
211
|
-
ClientMessageType[ClientMessageType["ClientEvent"] = 103] = "ClientEvent";
|
|
212
|
-
ClientMessageType[ClientMessageType["FetchStorage"] = 200] = "FetchStorage";
|
|
213
|
-
ClientMessageType[ClientMessageType["UpdateStorage"] = 201] = "UpdateStorage";
|
|
214
|
-
})(ClientMessageType || (ClientMessageType = {}));
|
|
215
|
-
|
|
216
|
-
var CrdtType;
|
|
217
|
-
|
|
218
|
-
(function (CrdtType) {
|
|
219
|
-
CrdtType[CrdtType["Object"] = 0] = "Object";
|
|
220
|
-
CrdtType[CrdtType["List"] = 1] = "List";
|
|
221
|
-
CrdtType[CrdtType["Map"] = 2] = "Map";
|
|
222
|
-
CrdtType[CrdtType["Register"] = 3] = "Register";
|
|
223
|
-
})(CrdtType || (CrdtType = {}));
|
|
224
|
-
|
|
225
|
-
var OpType;
|
|
226
|
-
|
|
227
|
-
(function (OpType) {
|
|
228
|
-
OpType[OpType["Init"] = 0] = "Init";
|
|
229
|
-
OpType[OpType["SetParentKey"] = 1] = "SetParentKey";
|
|
230
|
-
OpType[OpType["CreateList"] = 2] = "CreateList";
|
|
231
|
-
OpType[OpType["UpdateObject"] = 3] = "UpdateObject";
|
|
232
|
-
OpType[OpType["CreateObject"] = 4] = "CreateObject";
|
|
233
|
-
OpType[OpType["DeleteCrdt"] = 5] = "DeleteCrdt";
|
|
234
|
-
OpType[OpType["DeleteObjectKey"] = 6] = "DeleteObjectKey";
|
|
235
|
-
OpType[OpType["CreateMap"] = 7] = "CreateMap";
|
|
236
|
-
OpType[OpType["CreateRegister"] = 8] = "CreateRegister";
|
|
237
|
-
})(OpType || (OpType = {}));
|
|
238
|
-
|
|
239
|
-
var WebsocketCloseCodes;
|
|
240
|
-
|
|
241
|
-
(function (WebsocketCloseCodes) {
|
|
242
|
-
WebsocketCloseCodes[WebsocketCloseCodes["CLOSE_ABNORMAL"] = 1006] = "CLOSE_ABNORMAL";
|
|
243
|
-
WebsocketCloseCodes[WebsocketCloseCodes["INVALID_MESSAGE_FORMAT"] = 4000] = "INVALID_MESSAGE_FORMAT";
|
|
244
|
-
WebsocketCloseCodes[WebsocketCloseCodes["NOT_ALLOWED"] = 4001] = "NOT_ALLOWED";
|
|
245
|
-
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_MESSAGES_PER_SECONDS"] = 4002] = "MAX_NUMBER_OF_MESSAGES_PER_SECONDS";
|
|
246
|
-
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_CONCURRENT_CONNECTIONS"] = 4003] = "MAX_NUMBER_OF_CONCURRENT_CONNECTIONS";
|
|
247
|
-
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_MESSAGES_PER_DAY_PER_APP"] = 4004] = "MAX_NUMBER_OF_MESSAGES_PER_DAY_PER_APP";
|
|
248
|
-
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_CONCURRENT_CONNECTIONS_PER_ROOM"] = 4005] = "MAX_NUMBER_OF_CONCURRENT_CONNECTIONS_PER_ROOM";
|
|
249
|
-
WebsocketCloseCodes[WebsocketCloseCodes["CLOSE_WITHOUT_RETRY"] = 4999] = "CLOSE_WITHOUT_RETRY";
|
|
250
|
-
})(WebsocketCloseCodes || (WebsocketCloseCodes = {}));
|
|
251
|
-
|
|
252
|
-
var AbstractCrdt = function () {
|
|
253
|
-
function AbstractCrdt() {}
|
|
254
|
-
|
|
255
|
-
var _proto = AbstractCrdt.prototype;
|
|
256
|
-
|
|
257
|
-
_proto._apply = function _apply(op, _isLocal) {
|
|
258
|
-
switch (op.type) {
|
|
259
|
-
case OpType.DeleteCrdt:
|
|
260
|
-
{
|
|
261
|
-
if (this._parent != null && this._parentKey != null) {
|
|
262
|
-
return this._parent._detachChild(this);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
return {
|
|
266
|
-
modified: false
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
return {
|
|
272
|
-
modified: false
|
|
273
|
-
};
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
_proto._setParentLink = function _setParentLink(parent, key) {
|
|
277
|
-
if (this.__parent != null && this.__parent !== parent) {
|
|
278
|
-
throw new Error("Cannot attach parent if it already exist");
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
this.__parentKey = key;
|
|
282
|
-
this.__parent = parent;
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
_proto._attach = function _attach(id, doc) {
|
|
286
|
-
if (this.__id || this.__doc) {
|
|
287
|
-
throw new Error("Cannot attach if CRDT is already attached");
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
doc.addItem(id, this);
|
|
291
|
-
this.__id = id;
|
|
292
|
-
this.__doc = doc;
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
_proto._detach = function _detach() {
|
|
296
|
-
if (this.__doc && this.__id) {
|
|
297
|
-
this.__doc.deleteItem(this.__id);
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
this.__parent = undefined;
|
|
301
|
-
this.__doc = undefined;
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
_createClass(AbstractCrdt, [{
|
|
305
|
-
key: "_doc",
|
|
306
|
-
get: function get() {
|
|
307
|
-
return this.__doc;
|
|
308
|
-
}
|
|
309
|
-
}, {
|
|
310
|
-
key: "roomId",
|
|
311
|
-
get: function get() {
|
|
312
|
-
return this.__doc ? this.__doc.roomId : null;
|
|
313
|
-
}
|
|
314
|
-
}, {
|
|
315
|
-
key: "_id",
|
|
316
|
-
get: function get() {
|
|
317
|
-
return this.__id;
|
|
318
|
-
}
|
|
319
|
-
}, {
|
|
320
|
-
key: "_parent",
|
|
321
|
-
get: function get() {
|
|
322
|
-
return this.__parent;
|
|
323
|
-
}
|
|
324
|
-
}, {
|
|
325
|
-
key: "_parentKey",
|
|
326
|
-
get: function get() {
|
|
327
|
-
return this.__parentKey;
|
|
328
|
-
}
|
|
329
|
-
}]);
|
|
330
|
-
|
|
331
|
-
return AbstractCrdt;
|
|
332
|
-
}();
|
|
333
|
-
|
|
334
|
-
var min = 32;
|
|
335
|
-
var max = 126;
|
|
336
|
-
function makePosition(before, after) {
|
|
337
|
-
if (before == null && after == null) {
|
|
338
|
-
return pos([min + 1]);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
if (before != null && after == null) {
|
|
342
|
-
return getNextPosition(before);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
if (before == null && after != null) {
|
|
346
|
-
return getPreviousPosition(after);
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
return pos(makePositionFromCodes(posCodes(before), posCodes(after)));
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
function getPreviousPosition(after) {
|
|
353
|
-
var result = [];
|
|
354
|
-
var afterCodes = posCodes(after);
|
|
355
|
-
|
|
356
|
-
for (var i = 0; i < afterCodes.length; i++) {
|
|
357
|
-
var code = afterCodes[i];
|
|
358
|
-
|
|
359
|
-
if (code <= min + 1) {
|
|
360
|
-
result.push(min);
|
|
361
|
-
|
|
362
|
-
if (afterCodes.length - 1 === i) {
|
|
363
|
-
result.push(max);
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
|
-
} else {
|
|
367
|
-
result.push(code - 1);
|
|
368
|
-
break;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
return pos(result);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
function getNextPosition(before) {
|
|
376
|
-
var result = [];
|
|
377
|
-
var beforeCodes = posCodes(before);
|
|
378
|
-
|
|
379
|
-
for (var i = 0; i < beforeCodes.length; i++) {
|
|
380
|
-
var code = beforeCodes[i];
|
|
381
|
-
|
|
382
|
-
if (code === max) {
|
|
383
|
-
result.push(code);
|
|
384
|
-
|
|
385
|
-
if (beforeCodes.length - 1 === i) {
|
|
386
|
-
result.push(min + 1);
|
|
387
|
-
break;
|
|
388
|
-
}
|
|
389
|
-
} else {
|
|
390
|
-
result.push(code + 1);
|
|
391
|
-
break;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
return pos(result);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
function makePositionFromCodes(before, after) {
|
|
399
|
-
var index = 0;
|
|
400
|
-
var result = [];
|
|
401
|
-
|
|
402
|
-
while (true) {
|
|
403
|
-
var beforeDigit = before[index] || min;
|
|
404
|
-
var afterDigit = after[index] || max;
|
|
405
|
-
|
|
406
|
-
if (beforeDigit > afterDigit) {
|
|
407
|
-
throw new Error("Impossible to generate position between " + before + " and " + after);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
if (beforeDigit === afterDigit) {
|
|
411
|
-
result.push(beforeDigit);
|
|
412
|
-
index++;
|
|
413
|
-
continue;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
if (afterDigit - beforeDigit === 1) {
|
|
417
|
-
result.push(beforeDigit);
|
|
418
|
-
result.push.apply(result, makePositionFromCodes(before.slice(index + 1), []));
|
|
419
|
-
break;
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
var mid = afterDigit + beforeDigit >> 1;
|
|
423
|
-
result.push(mid);
|
|
424
|
-
break;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
return result;
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
function posCodes(str) {
|
|
431
|
-
var codes = [];
|
|
432
|
-
|
|
433
|
-
for (var i = 0; i < str.length; i++) {
|
|
434
|
-
codes.push(str.charCodeAt(i));
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
return codes;
|
|
438
|
-
}
|
|
439
|
-
function pos(codes) {
|
|
440
|
-
return String.fromCharCode.apply(String, codes);
|
|
441
|
-
}
|
|
442
|
-
function compare(posA, posB) {
|
|
443
|
-
var aCodes = posCodes(posA);
|
|
444
|
-
var bCodes = posCodes(posB);
|
|
445
|
-
var maxLength = Math.max(aCodes.length, bCodes.length);
|
|
446
|
-
|
|
447
|
-
for (var i = 0; i < maxLength; i++) {
|
|
448
|
-
var a = aCodes[i] == null ? min : aCodes[i];
|
|
449
|
-
var b = bCodes[i] == null ? min : bCodes[i];
|
|
450
|
-
|
|
451
|
-
if (a === b) {
|
|
452
|
-
continue;
|
|
453
|
-
} else {
|
|
454
|
-
return a - b;
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
throw new Error("Impossible to compare similar position \"" + posA + "\" and \"" + posB + "\"");
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
var LiveRegister = function (_AbstractCrdt) {
|
|
462
|
-
_inheritsLoose(LiveRegister, _AbstractCrdt);
|
|
463
|
-
|
|
464
|
-
function LiveRegister(data) {
|
|
465
|
-
var _this;
|
|
466
|
-
|
|
467
|
-
_this = _AbstractCrdt.call(this) || this;
|
|
468
|
-
_this._data = data;
|
|
469
|
-
return _this;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
LiveRegister._deserialize = function _deserialize(_ref, _parentToChildren, doc) {
|
|
473
|
-
var id = _ref[0],
|
|
474
|
-
item = _ref[1];
|
|
475
|
-
|
|
476
|
-
if (item.type !== CrdtType.Register) {
|
|
477
|
-
throw new Error("Tried to deserialize a map but item type is \"" + item.type + "\"");
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
var register = new LiveRegister(item.data);
|
|
481
|
-
|
|
482
|
-
register._attach(id, doc);
|
|
483
|
-
|
|
484
|
-
return register;
|
|
485
|
-
};
|
|
486
|
-
|
|
487
|
-
var _proto = LiveRegister.prototype;
|
|
488
|
-
|
|
489
|
-
_proto._serialize = function _serialize(parentId, parentKey, doc, intent) {
|
|
490
|
-
if (this._id == null || parentId == null || parentKey == null) {
|
|
491
|
-
throw new Error("Cannot serialize register if parentId or parentKey is undefined");
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
return [{
|
|
495
|
-
type: OpType.CreateRegister,
|
|
496
|
-
opId: doc == null ? void 0 : doc.generateOpId(),
|
|
497
|
-
id: this._id,
|
|
498
|
-
intent: intent,
|
|
499
|
-
parentId: parentId,
|
|
500
|
-
parentKey: parentKey,
|
|
501
|
-
data: this.data
|
|
502
|
-
}];
|
|
503
|
-
};
|
|
504
|
-
|
|
505
|
-
_proto._toSerializedCrdt = function _toSerializedCrdt() {
|
|
506
|
-
var _this$_parent;
|
|
507
|
-
|
|
508
|
-
return {
|
|
509
|
-
type: CrdtType.Register,
|
|
510
|
-
parentId: (_this$_parent = this._parent) == null ? void 0 : _this$_parent._id,
|
|
511
|
-
parentKey: this._parentKey,
|
|
512
|
-
data: this.data
|
|
513
|
-
};
|
|
514
|
-
};
|
|
515
|
-
|
|
516
|
-
_proto._attachChild = function _attachChild(_op, _isLocal) {
|
|
517
|
-
throw new Error("Method not implemented.");
|
|
518
|
-
};
|
|
519
|
-
|
|
520
|
-
_proto._detachChild = function _detachChild(_crdt) {
|
|
521
|
-
throw new Error("Method not implemented.");
|
|
522
|
-
};
|
|
523
|
-
|
|
524
|
-
_proto._apply = function _apply(op, isLocal) {
|
|
525
|
-
return _AbstractCrdt.prototype._apply.call(this, op, isLocal);
|
|
526
|
-
};
|
|
527
|
-
|
|
528
|
-
_createClass(LiveRegister, [{
|
|
529
|
-
key: "data",
|
|
530
|
-
get: function get() {
|
|
531
|
-
return this._data;
|
|
532
|
-
}
|
|
533
|
-
}]);
|
|
534
|
-
|
|
535
|
-
return LiveRegister;
|
|
536
|
-
}(AbstractCrdt);
|
|
537
|
-
|
|
538
|
-
var LiveList = function (_AbstractCrdt) {
|
|
539
|
-
_inheritsLoose(LiveList, _AbstractCrdt);
|
|
540
|
-
|
|
541
|
-
function LiveList(items) {
|
|
542
|
-
var _this;
|
|
543
|
-
|
|
544
|
-
if (items === void 0) {
|
|
545
|
-
items = [];
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
_this = _AbstractCrdt.call(this) || this;
|
|
549
|
-
_this._items = [];
|
|
550
|
-
var position = undefined;
|
|
551
|
-
|
|
552
|
-
for (var i = 0; i < items.length; i++) {
|
|
553
|
-
var newPosition = makePosition(position);
|
|
554
|
-
|
|
555
|
-
var _item = selfOrRegister(items[i]);
|
|
556
|
-
|
|
557
|
-
_this._items.push([_item, newPosition]);
|
|
558
|
-
|
|
559
|
-
position = newPosition;
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
return _this;
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
LiveList._deserialize = function _deserialize(_ref, parentToChildren, doc) {
|
|
566
|
-
var id = _ref[0];
|
|
567
|
-
var list = new LiveList([]);
|
|
568
|
-
|
|
569
|
-
list._attach(id, doc);
|
|
570
|
-
|
|
571
|
-
var children = parentToChildren.get(id);
|
|
572
|
-
|
|
573
|
-
if (children == null) {
|
|
574
|
-
return list;
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
for (var _iterator = _createForOfIteratorHelperLoose(children), _step; !(_step = _iterator()).done;) {
|
|
578
|
-
var entry = _step.value;
|
|
579
|
-
var child = deserialize(entry, parentToChildren, doc);
|
|
580
|
-
|
|
581
|
-
child._setParentLink(list, entry[1].parentKey);
|
|
582
|
-
|
|
583
|
-
list._items.push([child, entry[1].parentKey]);
|
|
584
|
-
|
|
585
|
-
list._items.sort(function (itemA, itemB) {
|
|
586
|
-
return compare(itemA[1], itemB[1]);
|
|
587
|
-
});
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
return list;
|
|
591
|
-
};
|
|
592
|
-
|
|
593
|
-
var _proto = LiveList.prototype;
|
|
594
|
-
|
|
595
|
-
_proto._serialize = function _serialize(parentId, parentKey, doc, intent) {
|
|
596
|
-
if (this._id == null) {
|
|
597
|
-
throw new Error("Cannot serialize item is not attached");
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
if (parentId == null || parentKey == null) {
|
|
601
|
-
throw new Error("Cannot serialize list if parentId or parentKey is undefined");
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
var ops = [];
|
|
605
|
-
var op = {
|
|
606
|
-
id: this._id,
|
|
607
|
-
opId: doc == null ? void 0 : doc.generateOpId(),
|
|
608
|
-
intent: intent,
|
|
609
|
-
type: OpType.CreateList,
|
|
610
|
-
parentId: parentId,
|
|
611
|
-
parentKey: parentKey
|
|
612
|
-
};
|
|
613
|
-
ops.push(op);
|
|
614
|
-
|
|
615
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(this._items), _step2; !(_step2 = _iterator2()).done;) {
|
|
616
|
-
var _step2$value = _step2.value,
|
|
617
|
-
_value = _step2$value[0],
|
|
618
|
-
key = _step2$value[1];
|
|
619
|
-
ops.push.apply(ops, _value._serialize(this._id, key, doc));
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
return ops;
|
|
623
|
-
};
|
|
624
|
-
|
|
625
|
-
_proto._indexOfPosition = function _indexOfPosition(position) {
|
|
626
|
-
return this._items.findIndex(function (item) {
|
|
627
|
-
return item[1] === position;
|
|
628
|
-
});
|
|
629
|
-
};
|
|
630
|
-
|
|
631
|
-
_proto._attach = function _attach(id, doc) {
|
|
632
|
-
_AbstractCrdt.prototype._attach.call(this, id, doc);
|
|
633
|
-
|
|
634
|
-
for (var _iterator3 = _createForOfIteratorHelperLoose(this._items), _step3; !(_step3 = _iterator3()).done;) {
|
|
635
|
-
var _step3$value = _step3.value,
|
|
636
|
-
_item2 = _step3$value[0];
|
|
637
|
-
|
|
638
|
-
_item2._attach(doc.generateId(), doc);
|
|
639
|
-
}
|
|
640
|
-
};
|
|
641
|
-
|
|
642
|
-
_proto._detach = function _detach() {
|
|
643
|
-
_AbstractCrdt.prototype._detach.call(this);
|
|
644
|
-
|
|
645
|
-
for (var _iterator4 = _createForOfIteratorHelperLoose(this._items), _step4; !(_step4 = _iterator4()).done;) {
|
|
646
|
-
var _step4$value = _step4.value,
|
|
647
|
-
_value2 = _step4$value[0];
|
|
648
|
-
|
|
649
|
-
_value2._detach();
|
|
650
|
-
}
|
|
651
|
-
};
|
|
652
|
-
|
|
653
|
-
_proto._attachChild = function _attachChild(op, isLocal) {
|
|
654
|
-
if (this._doc == null) {
|
|
655
|
-
throw new Error("Can't attach child if doc is not present");
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
var id = op.id,
|
|
659
|
-
parentKey = op.parentKey,
|
|
660
|
-
intent = op.intent;
|
|
661
|
-
var key = parentKey;
|
|
662
|
-
var child = creationOpToLiveStructure(op);
|
|
663
|
-
|
|
664
|
-
if (this._doc.getItem(id) !== undefined) {
|
|
665
|
-
return {
|
|
666
|
-
modified: false
|
|
667
|
-
};
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
child._attach(id, this._doc);
|
|
671
|
-
|
|
672
|
-
child._setParentLink(this, key);
|
|
673
|
-
|
|
674
|
-
var index = this._items.findIndex(function (entry) {
|
|
675
|
-
return entry[1] === key;
|
|
676
|
-
});
|
|
677
|
-
|
|
678
|
-
var newKey = key;
|
|
679
|
-
|
|
680
|
-
if (index !== -1) {
|
|
681
|
-
if (intent === "set") {
|
|
682
|
-
var existingItem = this._items[index][0];
|
|
683
|
-
|
|
684
|
-
existingItem._detach();
|
|
685
|
-
|
|
686
|
-
var storageUpdate = {
|
|
687
|
-
node: this,
|
|
688
|
-
type: "LiveList",
|
|
689
|
-
updates: [{
|
|
690
|
-
index: index,
|
|
691
|
-
type: "set",
|
|
692
|
-
item: child instanceof LiveRegister ? child.data : child
|
|
693
|
-
}]
|
|
694
|
-
};
|
|
695
|
-
this._items[index][0] = child;
|
|
696
|
-
return {
|
|
697
|
-
modified: storageUpdate,
|
|
698
|
-
reverse: existingItem._serialize(this._id, key, this._doc, "set")
|
|
699
|
-
};
|
|
700
|
-
} else if (isLocal) {
|
|
701
|
-
var before = this._items[index] ? this._items[index][1] : undefined;
|
|
702
|
-
var after = this._items[index + 1] ? this._items[index + 1][1] : undefined;
|
|
703
|
-
newKey = makePosition(before, after);
|
|
704
|
-
|
|
705
|
-
child._setParentLink(this, newKey);
|
|
706
|
-
} else {
|
|
707
|
-
var _this$_items;
|
|
708
|
-
|
|
709
|
-
this._items[index][1] = makePosition(key, (_this$_items = this._items[index + 1]) == null ? void 0 : _this$_items[1]);
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
|
|
713
|
-
this._items.push([child, newKey]);
|
|
714
|
-
|
|
715
|
-
this._items.sort(function (itemA, itemB) {
|
|
716
|
-
return compare(itemA[1], itemB[1]);
|
|
717
|
-
});
|
|
718
|
-
|
|
719
|
-
var newIndex = this._items.findIndex(function (entry) {
|
|
720
|
-
return entry[1] === newKey;
|
|
721
|
-
});
|
|
722
|
-
|
|
723
|
-
return {
|
|
724
|
-
reverse: [{
|
|
725
|
-
type: OpType.DeleteCrdt,
|
|
726
|
-
id: id
|
|
727
|
-
}],
|
|
728
|
-
modified: {
|
|
729
|
-
node: this,
|
|
730
|
-
type: "LiveList",
|
|
731
|
-
updates: [{
|
|
732
|
-
index: newIndex,
|
|
733
|
-
type: "insert",
|
|
734
|
-
item: child instanceof LiveRegister ? child.data : child
|
|
735
|
-
}]
|
|
736
|
-
}
|
|
737
|
-
};
|
|
738
|
-
};
|
|
739
|
-
|
|
740
|
-
_proto._detachChild = function _detachChild(child) {
|
|
741
|
-
if (child) {
|
|
742
|
-
var reverse = child._serialize(this._id, child._parentKey, this._doc);
|
|
743
|
-
|
|
744
|
-
var indexToDelete = this._items.findIndex(function (item) {
|
|
745
|
-
return item[0] === child;
|
|
746
|
-
});
|
|
747
|
-
|
|
748
|
-
this._items.splice(indexToDelete, 1);
|
|
749
|
-
|
|
750
|
-
child._detach();
|
|
751
|
-
|
|
752
|
-
var storageUpdate = {
|
|
753
|
-
node: this,
|
|
754
|
-
type: "LiveList",
|
|
755
|
-
updates: [{
|
|
756
|
-
index: indexToDelete,
|
|
757
|
-
type: "delete"
|
|
758
|
-
}]
|
|
759
|
-
};
|
|
760
|
-
return {
|
|
761
|
-
modified: storageUpdate,
|
|
762
|
-
reverse: reverse
|
|
763
|
-
};
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
return {
|
|
767
|
-
modified: false
|
|
768
|
-
};
|
|
769
|
-
};
|
|
770
|
-
|
|
771
|
-
_proto._setChildKey = function _setChildKey(key, child, previousKey) {
|
|
772
|
-
child._setParentLink(this, key);
|
|
773
|
-
|
|
774
|
-
var previousIndex = this._items.findIndex(function (entry) {
|
|
775
|
-
return entry[0]._id === child._id;
|
|
776
|
-
});
|
|
777
|
-
|
|
778
|
-
var index = this._items.findIndex(function (entry) {
|
|
779
|
-
return entry[1] === key;
|
|
780
|
-
});
|
|
781
|
-
|
|
782
|
-
if (index !== -1) {
|
|
783
|
-
var _this$_items2;
|
|
784
|
-
|
|
785
|
-
this._items[index][1] = makePosition(key, (_this$_items2 = this._items[index + 1]) == null ? void 0 : _this$_items2[1]);
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
var item = this._items.find(function (item) {
|
|
789
|
-
return item[0] === child;
|
|
790
|
-
});
|
|
791
|
-
|
|
792
|
-
if (item) {
|
|
793
|
-
item[1] = key;
|
|
794
|
-
}
|
|
795
|
-
|
|
796
|
-
this._items.sort(function (itemA, itemB) {
|
|
797
|
-
return compare(itemA[1], itemB[1]);
|
|
798
|
-
});
|
|
799
|
-
|
|
800
|
-
var newIndex = this._items.findIndex(function (entry) {
|
|
801
|
-
return entry[0]._id === child._id;
|
|
802
|
-
});
|
|
803
|
-
|
|
804
|
-
var updatesDelta = newIndex === previousIndex ? [] : [{
|
|
805
|
-
index: newIndex,
|
|
806
|
-
item: child instanceof LiveRegister ? child.data : child,
|
|
807
|
-
previousIndex: previousIndex,
|
|
808
|
-
type: "move"
|
|
809
|
-
}];
|
|
810
|
-
return {
|
|
811
|
-
modified: {
|
|
812
|
-
node: this,
|
|
813
|
-
type: "LiveList",
|
|
814
|
-
updates: updatesDelta
|
|
815
|
-
},
|
|
816
|
-
reverse: [{
|
|
817
|
-
type: OpType.SetParentKey,
|
|
818
|
-
id: item == null ? void 0 : item[0]._id,
|
|
819
|
-
parentKey: previousKey
|
|
820
|
-
}]
|
|
821
|
-
};
|
|
822
|
-
};
|
|
823
|
-
|
|
824
|
-
_proto._apply = function _apply(op, isLocal) {
|
|
825
|
-
return _AbstractCrdt.prototype._apply.call(this, op, isLocal);
|
|
826
|
-
};
|
|
827
|
-
|
|
828
|
-
_proto._toSerializedCrdt = function _toSerializedCrdt() {
|
|
829
|
-
var _this$_parent;
|
|
830
|
-
|
|
831
|
-
return {
|
|
832
|
-
type: CrdtType.List,
|
|
833
|
-
parentId: (_this$_parent = this._parent) == null ? void 0 : _this$_parent._id,
|
|
834
|
-
parentKey: this._parentKey
|
|
835
|
-
};
|
|
836
|
-
};
|
|
837
|
-
|
|
838
|
-
_proto.push = function push(element) {
|
|
839
|
-
return this.insert(element, this.length);
|
|
840
|
-
};
|
|
841
|
-
|
|
842
|
-
_proto.insert = function insert(element, index) {
|
|
843
|
-
if (index < 0 || index > this._items.length) {
|
|
844
|
-
throw new Error("Cannot insert list item at index \"\x1D" + index + "\". index should be between 0 and " + this._items.length);
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
var before = this._items[index - 1] ? this._items[index - 1][1] : undefined;
|
|
848
|
-
var after = this._items[index] ? this._items[index][1] : undefined;
|
|
849
|
-
var position = makePosition(before, after);
|
|
850
|
-
var value = selfOrRegister(element);
|
|
851
|
-
|
|
852
|
-
value._setParentLink(this, position);
|
|
853
|
-
|
|
854
|
-
this._items.push([value, position]);
|
|
855
|
-
|
|
856
|
-
this._items.sort(function (itemA, itemB) {
|
|
857
|
-
return compare(itemA[1], itemB[1]);
|
|
858
|
-
});
|
|
859
|
-
|
|
860
|
-
var newIndex = this._items.findIndex(function (entry) {
|
|
861
|
-
return entry[1] === position;
|
|
862
|
-
});
|
|
863
|
-
|
|
864
|
-
if (this._doc && this._id) {
|
|
865
|
-
var _id = this._doc.generateId();
|
|
866
|
-
|
|
867
|
-
value._attach(_id, this._doc);
|
|
868
|
-
|
|
869
|
-
var storageUpdates = new Map();
|
|
870
|
-
storageUpdates.set(this._id, {
|
|
871
|
-
node: this,
|
|
872
|
-
type: "LiveList",
|
|
873
|
-
updates: [{
|
|
874
|
-
index: newIndex,
|
|
875
|
-
item: value instanceof LiveRegister ? value.data : value,
|
|
876
|
-
type: "insert"
|
|
877
|
-
}]
|
|
878
|
-
});
|
|
879
|
-
|
|
880
|
-
this._doc.dispatch(value._serialize(this._id, position, this._doc), [{
|
|
881
|
-
type: OpType.DeleteCrdt,
|
|
882
|
-
id: _id
|
|
883
|
-
}], storageUpdates);
|
|
884
|
-
}
|
|
885
|
-
};
|
|
886
|
-
|
|
887
|
-
_proto.move = function move(index, targetIndex) {
|
|
888
|
-
if (targetIndex < 0) {
|
|
889
|
-
throw new Error("targetIndex cannot be less than 0");
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
if (targetIndex >= this._items.length) {
|
|
893
|
-
throw new Error("targetIndex cannot be greater or equal than the list length");
|
|
894
|
-
}
|
|
895
|
-
|
|
896
|
-
if (index < 0) {
|
|
897
|
-
throw new Error("index cannot be less than 0");
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
if (index >= this._items.length) {
|
|
901
|
-
throw new Error("index cannot be greater or equal than the list length");
|
|
902
|
-
}
|
|
903
|
-
|
|
904
|
-
var beforePosition = null;
|
|
905
|
-
var afterPosition = null;
|
|
906
|
-
|
|
907
|
-
if (index < targetIndex) {
|
|
908
|
-
afterPosition = targetIndex === this._items.length - 1 ? undefined : this._items[targetIndex + 1][1];
|
|
909
|
-
beforePosition = this._items[targetIndex][1];
|
|
910
|
-
} else {
|
|
911
|
-
afterPosition = this._items[targetIndex][1];
|
|
912
|
-
beforePosition = targetIndex === 0 ? undefined : this._items[targetIndex - 1][1];
|
|
913
|
-
}
|
|
914
|
-
|
|
915
|
-
var position = makePosition(beforePosition, afterPosition);
|
|
916
|
-
var item = this._items[index];
|
|
917
|
-
var previousPosition = item[1];
|
|
918
|
-
item[1] = position;
|
|
919
|
-
|
|
920
|
-
item[0]._setParentLink(this, position);
|
|
921
|
-
|
|
922
|
-
this._items.sort(function (itemA, itemB) {
|
|
923
|
-
return compare(itemA[1], itemB[1]);
|
|
924
|
-
});
|
|
925
|
-
|
|
926
|
-
var newIndex = this._items.findIndex(function (entry) {
|
|
927
|
-
return entry[1] === position;
|
|
928
|
-
});
|
|
929
|
-
|
|
930
|
-
if (this._doc && this._id) {
|
|
931
|
-
var storageUpdates = new Map();
|
|
932
|
-
storageUpdates.set(this._id, {
|
|
933
|
-
node: this,
|
|
934
|
-
type: "LiveList",
|
|
935
|
-
updates: [{
|
|
936
|
-
index: newIndex,
|
|
937
|
-
previousIndex: index,
|
|
938
|
-
item: item[0],
|
|
939
|
-
type: "move"
|
|
940
|
-
}]
|
|
941
|
-
});
|
|
942
|
-
|
|
943
|
-
this._doc.dispatch([{
|
|
944
|
-
type: OpType.SetParentKey,
|
|
945
|
-
id: item[0]._id,
|
|
946
|
-
opId: this._doc.generateOpId(),
|
|
947
|
-
parentKey: position
|
|
948
|
-
}], [{
|
|
949
|
-
type: OpType.SetParentKey,
|
|
950
|
-
id: item[0]._id,
|
|
951
|
-
parentKey: previousPosition
|
|
952
|
-
}], storageUpdates);
|
|
953
|
-
}
|
|
954
|
-
};
|
|
955
|
-
|
|
956
|
-
_proto.delete = function _delete(index) {
|
|
957
|
-
if (index < 0 || index >= this._items.length) {
|
|
958
|
-
throw new Error("Cannot delete list item at index \"\x1D" + index + "\". index should be between 0 and " + (this._items.length - 1));
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
var item = this._items[index];
|
|
962
|
-
|
|
963
|
-
item[0]._detach();
|
|
964
|
-
|
|
965
|
-
this._items.splice(index, 1);
|
|
966
|
-
|
|
967
|
-
if (this._doc) {
|
|
968
|
-
var childRecordId = item[0]._id;
|
|
969
|
-
|
|
970
|
-
if (childRecordId) {
|
|
971
|
-
var storageUpdates = new Map();
|
|
972
|
-
storageUpdates.set(this._id, {
|
|
973
|
-
node: this,
|
|
974
|
-
type: "LiveList",
|
|
975
|
-
updates: [{
|
|
976
|
-
index: index,
|
|
977
|
-
type: "delete"
|
|
978
|
-
}]
|
|
979
|
-
});
|
|
980
|
-
|
|
981
|
-
this._doc.dispatch([{
|
|
982
|
-
id: childRecordId,
|
|
983
|
-
opId: this._doc.generateOpId(),
|
|
984
|
-
type: OpType.DeleteCrdt
|
|
985
|
-
}], item[0]._serialize(this._id, item[1]), storageUpdates);
|
|
986
|
-
}
|
|
987
|
-
}
|
|
988
|
-
};
|
|
989
|
-
|
|
990
|
-
_proto.clear = function clear() {
|
|
991
|
-
if (this._doc) {
|
|
992
|
-
var ops = [];
|
|
993
|
-
var reverseOps = [];
|
|
994
|
-
var updateDelta = [];
|
|
995
|
-
var i = 0;
|
|
996
|
-
|
|
997
|
-
for (var _iterator5 = _createForOfIteratorHelperLoose(this._items), _step5; !(_step5 = _iterator5()).done;) {
|
|
998
|
-
var _item3 = _step5.value;
|
|
999
|
-
|
|
1000
|
-
_item3[0]._detach();
|
|
1001
|
-
|
|
1002
|
-
var childId = _item3[0]._id;
|
|
1003
|
-
|
|
1004
|
-
if (childId) {
|
|
1005
|
-
ops.push({
|
|
1006
|
-
id: childId,
|
|
1007
|
-
type: OpType.DeleteCrdt
|
|
1008
|
-
});
|
|
1009
|
-
reverseOps.push.apply(reverseOps, _item3[0]._serialize(this._id, _item3[1]));
|
|
1010
|
-
updateDelta.push({
|
|
1011
|
-
index: i,
|
|
1012
|
-
type: "delete"
|
|
1013
|
-
});
|
|
1014
|
-
}
|
|
1015
|
-
|
|
1016
|
-
i++;
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
|
-
this._items = [];
|
|
1020
|
-
var storageUpdates = new Map();
|
|
1021
|
-
storageUpdates.set(this._id, {
|
|
1022
|
-
node: this,
|
|
1023
|
-
type: "LiveList",
|
|
1024
|
-
updates: updateDelta
|
|
1025
|
-
});
|
|
1026
|
-
|
|
1027
|
-
this._doc.dispatch(ops, reverseOps, storageUpdates);
|
|
1028
|
-
} else {
|
|
1029
|
-
for (var _iterator6 = _createForOfIteratorHelperLoose(this._items), _step6; !(_step6 = _iterator6()).done;) {
|
|
1030
|
-
var _item4 = _step6.value;
|
|
1031
|
-
|
|
1032
|
-
_item4[0]._detach();
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
this._items = [];
|
|
1036
|
-
}
|
|
1037
|
-
};
|
|
1038
|
-
|
|
1039
|
-
_proto.set = function set(index, item) {
|
|
1040
|
-
if (index < 0 || index >= this._items.length) {
|
|
1041
|
-
throw new Error("Cannot set list item at index \"\x1D" + index + "\". index should be between 0 and " + (this._items.length - 1));
|
|
1042
|
-
}
|
|
1043
|
-
|
|
1044
|
-
var _this$_items$index = this._items[index],
|
|
1045
|
-
existingItem = _this$_items$index[0],
|
|
1046
|
-
position = _this$_items$index[1];
|
|
1047
|
-
|
|
1048
|
-
existingItem._detach();
|
|
1049
|
-
|
|
1050
|
-
var value = selfOrRegister(item);
|
|
1051
|
-
|
|
1052
|
-
value._setParentLink(this, position);
|
|
1053
|
-
|
|
1054
|
-
this._items[index][0] = value;
|
|
1055
|
-
|
|
1056
|
-
if (this._doc && this._id) {
|
|
1057
|
-
var _id2 = this._doc.generateId();
|
|
1058
|
-
|
|
1059
|
-
value._attach(_id2, this._doc);
|
|
1060
|
-
|
|
1061
|
-
var storageUpdates = new Map();
|
|
1062
|
-
storageUpdates.set(this._id, {
|
|
1063
|
-
node: this,
|
|
1064
|
-
type: "LiveList",
|
|
1065
|
-
updates: [{
|
|
1066
|
-
index: index,
|
|
1067
|
-
item: value instanceof LiveRegister ? value.data : value,
|
|
1068
|
-
type: "set"
|
|
1069
|
-
}]
|
|
1070
|
-
});
|
|
1071
|
-
|
|
1072
|
-
this._doc.dispatch(value._serialize(this._id, position, this._doc, "set"), existingItem._serialize(this._id, position, undefined, "set"), storageUpdates);
|
|
1073
|
-
}
|
|
1074
|
-
};
|
|
1075
|
-
|
|
1076
|
-
_proto.toArray = function toArray() {
|
|
1077
|
-
return this._items.map(function (entry) {
|
|
1078
|
-
return selfOrRegisterValue(entry[0]);
|
|
1079
|
-
});
|
|
1080
|
-
};
|
|
1081
|
-
|
|
1082
|
-
_proto.every = function every(predicate) {
|
|
1083
|
-
return this.toArray().every(predicate);
|
|
1084
|
-
};
|
|
1085
|
-
|
|
1086
|
-
_proto.filter = function filter(predicate) {
|
|
1087
|
-
return this.toArray().filter(predicate);
|
|
1088
|
-
};
|
|
1089
|
-
|
|
1090
|
-
_proto.find = function find(predicate) {
|
|
1091
|
-
return this.toArray().find(predicate);
|
|
1092
|
-
};
|
|
1093
|
-
|
|
1094
|
-
_proto.findIndex = function findIndex(predicate) {
|
|
1095
|
-
return this.toArray().findIndex(predicate);
|
|
1096
|
-
};
|
|
1097
|
-
|
|
1098
|
-
_proto.forEach = function forEach(callbackfn) {
|
|
1099
|
-
return this.toArray().forEach(callbackfn);
|
|
1100
|
-
};
|
|
1101
|
-
|
|
1102
|
-
_proto.get = function get(index) {
|
|
1103
|
-
if (index < 0 || index >= this._items.length) {
|
|
1104
|
-
return undefined;
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
return selfOrRegisterValue(this._items[index][0]);
|
|
1108
|
-
};
|
|
1109
|
-
|
|
1110
|
-
_proto.indexOf = function indexOf(searchElement, fromIndex) {
|
|
1111
|
-
return this.toArray().indexOf(searchElement, fromIndex);
|
|
1112
|
-
};
|
|
1113
|
-
|
|
1114
|
-
_proto.lastIndexOf = function lastIndexOf(searchElement, fromIndex) {
|
|
1115
|
-
return this.toArray().lastIndexOf(searchElement, fromIndex);
|
|
1116
|
-
};
|
|
1117
|
-
|
|
1118
|
-
_proto.map = function map(callback) {
|
|
1119
|
-
return this._items.map(function (entry, i) {
|
|
1120
|
-
return callback(selfOrRegisterValue(entry[0]), i);
|
|
1121
|
-
});
|
|
1122
|
-
};
|
|
1123
|
-
|
|
1124
|
-
_proto.some = function some(predicate) {
|
|
1125
|
-
return this.toArray().some(predicate);
|
|
1126
|
-
};
|
|
1127
|
-
|
|
1128
|
-
_proto[Symbol.iterator] = function () {
|
|
1129
|
-
return new LiveListIterator(this._items);
|
|
1130
|
-
};
|
|
1131
|
-
|
|
1132
|
-
_createClass(LiveList, [{
|
|
1133
|
-
key: "length",
|
|
1134
|
-
get: function get() {
|
|
1135
|
-
return this._items.length;
|
|
1136
|
-
}
|
|
1137
|
-
}]);
|
|
1138
|
-
|
|
1139
|
-
return LiveList;
|
|
1140
|
-
}(AbstractCrdt);
|
|
1141
|
-
|
|
1142
|
-
var LiveListIterator = function () {
|
|
1143
|
-
function LiveListIterator(items) {
|
|
1144
|
-
this._innerIterator = items[Symbol.iterator]();
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
|
-
var _proto2 = LiveListIterator.prototype;
|
|
1148
|
-
|
|
1149
|
-
_proto2[Symbol.iterator] = function () {
|
|
1150
|
-
return this;
|
|
1151
|
-
};
|
|
1152
|
-
|
|
1153
|
-
_proto2.next = function next() {
|
|
1154
|
-
var result = this._innerIterator.next();
|
|
1155
|
-
|
|
1156
|
-
if (result.done) {
|
|
1157
|
-
return {
|
|
1158
|
-
done: true,
|
|
1159
|
-
value: undefined
|
|
1160
|
-
};
|
|
1161
|
-
}
|
|
1162
|
-
|
|
1163
|
-
return {
|
|
1164
|
-
value: selfOrRegisterValue(result.value[0])
|
|
1165
|
-
};
|
|
1166
|
-
};
|
|
1167
|
-
|
|
1168
|
-
return LiveListIterator;
|
|
1169
|
-
}();
|
|
1170
|
-
|
|
1171
|
-
var LiveMap = function (_AbstractCrdt) {
|
|
1172
|
-
_inheritsLoose(LiveMap, _AbstractCrdt);
|
|
1173
|
-
|
|
1174
|
-
function LiveMap(entries) {
|
|
1175
|
-
var _this;
|
|
1176
|
-
|
|
1177
|
-
_this = _AbstractCrdt.call(this) || this;
|
|
1178
|
-
|
|
1179
|
-
if (entries) {
|
|
1180
|
-
var mappedEntries = [];
|
|
1181
|
-
|
|
1182
|
-
for (var _iterator = _createForOfIteratorHelperLoose(entries), _step; !(_step = _iterator()).done;) {
|
|
1183
|
-
var entry = _step.value;
|
|
1184
|
-
|
|
1185
|
-
var _value = selfOrRegister(entry[1]);
|
|
1186
|
-
|
|
1187
|
-
_value._setParentLink(_assertThisInitialized(_this), entry[0]);
|
|
1188
|
-
|
|
1189
|
-
mappedEntries.push([entry[0], _value]);
|
|
1190
|
-
}
|
|
1191
|
-
|
|
1192
|
-
_this._map = new Map(mappedEntries);
|
|
1193
|
-
} else {
|
|
1194
|
-
_this._map = new Map();
|
|
1195
|
-
}
|
|
1196
|
-
|
|
1197
|
-
return _this;
|
|
1198
|
-
}
|
|
1199
|
-
|
|
1200
|
-
var _proto = LiveMap.prototype;
|
|
1201
|
-
|
|
1202
|
-
_proto._serialize = function _serialize(parentId, parentKey, doc, intent) {
|
|
1203
|
-
if (this._id == null) {
|
|
1204
|
-
throw new Error("Cannot serialize item is not attached");
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1207
|
-
if (parentId == null || parentKey == null) {
|
|
1208
|
-
throw new Error("Cannot serialize map if parentId or parentKey is undefined");
|
|
1209
|
-
}
|
|
1210
|
-
|
|
1211
|
-
var ops = [];
|
|
1212
|
-
var op = {
|
|
1213
|
-
id: this._id,
|
|
1214
|
-
opId: doc == null ? void 0 : doc.generateOpId(),
|
|
1215
|
-
type: OpType.CreateMap,
|
|
1216
|
-
intent: intent,
|
|
1217
|
-
parentId: parentId,
|
|
1218
|
-
parentKey: parentKey
|
|
1219
|
-
};
|
|
1220
|
-
ops.push(op);
|
|
1221
|
-
|
|
1222
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(this._map), _step2; !(_step2 = _iterator2()).done;) {
|
|
1223
|
-
var _step2$value = _step2.value,
|
|
1224
|
-
_key2 = _step2$value[0],
|
|
1225
|
-
_value2 = _step2$value[1];
|
|
1226
|
-
ops.push.apply(ops, _value2._serialize(this._id, _key2, doc));
|
|
1227
|
-
}
|
|
1228
|
-
|
|
1229
|
-
return ops;
|
|
1230
|
-
};
|
|
1231
|
-
|
|
1232
|
-
LiveMap._deserialize = function _deserialize(_ref, parentToChildren, doc) {
|
|
1233
|
-
var id = _ref[0],
|
|
1234
|
-
item = _ref[1];
|
|
1235
|
-
|
|
1236
|
-
if (item.type !== CrdtType.Map) {
|
|
1237
|
-
throw new Error("Tried to deserialize a map but item type is \"" + item.type + "\"");
|
|
1238
|
-
}
|
|
1239
|
-
|
|
1240
|
-
var map = new LiveMap();
|
|
1241
|
-
|
|
1242
|
-
map._attach(id, doc);
|
|
1243
|
-
|
|
1244
|
-
var children = parentToChildren.get(id);
|
|
1245
|
-
|
|
1246
|
-
if (children == null) {
|
|
1247
|
-
return map;
|
|
1248
|
-
}
|
|
1249
|
-
|
|
1250
|
-
for (var _iterator3 = _createForOfIteratorHelperLoose(children), _step3; !(_step3 = _iterator3()).done;) {
|
|
1251
|
-
var entry = _step3.value;
|
|
1252
|
-
var crdt = entry[1];
|
|
1253
|
-
|
|
1254
|
-
if (crdt.parentKey == null) {
|
|
1255
|
-
throw new Error("Tried to deserialize a crdt but it does not have a parentKey and is not the root");
|
|
1256
|
-
}
|
|
1257
|
-
|
|
1258
|
-
var child = deserialize(entry, parentToChildren, doc);
|
|
1259
|
-
|
|
1260
|
-
child._setParentLink(map, crdt.parentKey);
|
|
1261
|
-
|
|
1262
|
-
map._map.set(crdt.parentKey, child);
|
|
1263
|
-
}
|
|
1264
|
-
|
|
1265
|
-
return map;
|
|
1266
|
-
};
|
|
1267
|
-
|
|
1268
|
-
_proto._attach = function _attach(id, doc) {
|
|
1269
|
-
_AbstractCrdt.prototype._attach.call(this, id, doc);
|
|
1270
|
-
|
|
1271
|
-
for (var _iterator4 = _createForOfIteratorHelperLoose(this._map), _step4; !(_step4 = _iterator4()).done;) {
|
|
1272
|
-
var _step4$value = _step4.value;
|
|
1273
|
-
_step4$value[0];
|
|
1274
|
-
var _value3 = _step4$value[1];
|
|
1275
|
-
|
|
1276
|
-
if (isCrdt(_value3)) {
|
|
1277
|
-
_value3._attach(doc.generateId(), doc);
|
|
1278
|
-
}
|
|
1279
|
-
}
|
|
1280
|
-
};
|
|
1281
|
-
|
|
1282
|
-
_proto._attachChild = function _attachChild(op, _isLocal) {
|
|
1283
|
-
var _updates;
|
|
1284
|
-
|
|
1285
|
-
if (this._doc == null) {
|
|
1286
|
-
throw new Error("Can't attach child if doc is not present");
|
|
1287
|
-
}
|
|
1288
|
-
|
|
1289
|
-
var id = op.id,
|
|
1290
|
-
parentKey = op.parentKey;
|
|
1291
|
-
var key = parentKey;
|
|
1292
|
-
var child = creationOpToLiveStructure(op);
|
|
1293
|
-
|
|
1294
|
-
if (this._doc.getItem(id) !== undefined) {
|
|
1295
|
-
return {
|
|
1296
|
-
modified: false
|
|
1297
|
-
};
|
|
1298
|
-
}
|
|
1299
|
-
|
|
1300
|
-
var previousValue = this._map.get(key);
|
|
1301
|
-
|
|
1302
|
-
var reverse;
|
|
1303
|
-
|
|
1304
|
-
if (previousValue) {
|
|
1305
|
-
reverse = previousValue._serialize(this._id, key);
|
|
1306
|
-
|
|
1307
|
-
previousValue._detach();
|
|
1308
|
-
} else {
|
|
1309
|
-
reverse = [{
|
|
1310
|
-
type: OpType.DeleteCrdt,
|
|
1311
|
-
id: id
|
|
1312
|
-
}];
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
|
-
child._setParentLink(this, key);
|
|
1316
|
-
|
|
1317
|
-
child._attach(id, this._doc);
|
|
1318
|
-
|
|
1319
|
-
this._map.set(key, child);
|
|
1320
|
-
|
|
1321
|
-
return {
|
|
1322
|
-
modified: {
|
|
1323
|
-
node: this,
|
|
1324
|
-
type: "LiveMap",
|
|
1325
|
-
updates: (_updates = {}, _updates[key] = {
|
|
1326
|
-
type: "update"
|
|
1327
|
-
}, _updates)
|
|
1328
|
-
},
|
|
1329
|
-
reverse: reverse
|
|
1330
|
-
};
|
|
1331
|
-
};
|
|
1332
|
-
|
|
1333
|
-
_proto._detach = function _detach() {
|
|
1334
|
-
_AbstractCrdt.prototype._detach.call(this);
|
|
1335
|
-
|
|
1336
|
-
for (var _iterator5 = _createForOfIteratorHelperLoose(this._map.values()), _step5; !(_step5 = _iterator5()).done;) {
|
|
1337
|
-
var item = _step5.value;
|
|
1338
|
-
|
|
1339
|
-
item._detach();
|
|
1340
|
-
}
|
|
1341
|
-
};
|
|
1342
|
-
|
|
1343
|
-
_proto._detachChild = function _detachChild(child) {
|
|
1344
|
-
var _updates2;
|
|
1345
|
-
|
|
1346
|
-
var reverse = child._serialize(this._id, child._parentKey, this._doc);
|
|
1347
|
-
|
|
1348
|
-
for (var _iterator6 = _createForOfIteratorHelperLoose(this._map), _step6; !(_step6 = _iterator6()).done;) {
|
|
1349
|
-
var _step6$value = _step6.value,
|
|
1350
|
-
_key3 = _step6$value[0],
|
|
1351
|
-
_value4 = _step6$value[1];
|
|
1352
|
-
|
|
1353
|
-
if (_value4 === child) {
|
|
1354
|
-
this._map.delete(_key3);
|
|
1355
|
-
}
|
|
1356
|
-
}
|
|
1357
|
-
|
|
1358
|
-
child._detach();
|
|
1359
|
-
|
|
1360
|
-
var storageUpdate = {
|
|
1361
|
-
node: this,
|
|
1362
|
-
type: "LiveMap",
|
|
1363
|
-
updates: (_updates2 = {}, _updates2[child._parentKey] = {
|
|
1364
|
-
type: "delete"
|
|
1365
|
-
}, _updates2)
|
|
1366
|
-
};
|
|
1367
|
-
return {
|
|
1368
|
-
modified: storageUpdate,
|
|
1369
|
-
reverse: reverse
|
|
1370
|
-
};
|
|
1371
|
-
};
|
|
1372
|
-
|
|
1373
|
-
_proto._toSerializedCrdt = function _toSerializedCrdt() {
|
|
1374
|
-
var _this$_parent;
|
|
1375
|
-
|
|
1376
|
-
return {
|
|
1377
|
-
type: CrdtType.Map,
|
|
1378
|
-
parentId: (_this$_parent = this._parent) == null ? void 0 : _this$_parent._id,
|
|
1379
|
-
parentKey: this._parentKey
|
|
1380
|
-
};
|
|
1381
|
-
};
|
|
1382
|
-
|
|
1383
|
-
_proto.get = function get(key) {
|
|
1384
|
-
var value = this._map.get(key);
|
|
1385
|
-
|
|
1386
|
-
if (value == undefined) {
|
|
1387
|
-
return undefined;
|
|
1388
|
-
}
|
|
1389
|
-
|
|
1390
|
-
return selfOrRegisterValue(value);
|
|
1391
|
-
};
|
|
1392
|
-
|
|
1393
|
-
_proto.set = function set(key, value) {
|
|
1394
|
-
var oldValue = this._map.get(key);
|
|
1395
|
-
|
|
1396
|
-
if (oldValue) {
|
|
1397
|
-
oldValue._detach();
|
|
1398
|
-
}
|
|
1399
|
-
|
|
1400
|
-
var item = selfOrRegister(value);
|
|
1401
|
-
|
|
1402
|
-
item._setParentLink(this, key);
|
|
1403
|
-
|
|
1404
|
-
this._map.set(key, item);
|
|
1405
|
-
|
|
1406
|
-
if (this._doc && this._id) {
|
|
1407
|
-
var _updates3;
|
|
1408
|
-
|
|
1409
|
-
var id = this._doc.generateId();
|
|
1410
|
-
|
|
1411
|
-
item._attach(id, this._doc);
|
|
1412
|
-
|
|
1413
|
-
var storageUpdates = new Map();
|
|
1414
|
-
storageUpdates.set(this._id, {
|
|
1415
|
-
node: this,
|
|
1416
|
-
type: "LiveMap",
|
|
1417
|
-
updates: (_updates3 = {}, _updates3[key] = {
|
|
1418
|
-
type: "update"
|
|
1419
|
-
}, _updates3)
|
|
1420
|
-
});
|
|
1421
|
-
|
|
1422
|
-
this._doc.dispatch(item._serialize(this._id, key, this._doc), oldValue ? oldValue._serialize(this._id, key) : [{
|
|
1423
|
-
type: OpType.DeleteCrdt,
|
|
1424
|
-
id: id
|
|
1425
|
-
}], storageUpdates);
|
|
1426
|
-
}
|
|
1427
|
-
};
|
|
1428
|
-
|
|
1429
|
-
_proto.has = function has(key) {
|
|
1430
|
-
return this._map.has(key);
|
|
1431
|
-
};
|
|
1432
|
-
|
|
1433
|
-
_proto.delete = function _delete(key) {
|
|
1434
|
-
var item = this._map.get(key);
|
|
1435
|
-
|
|
1436
|
-
if (item == null) {
|
|
1437
|
-
return false;
|
|
1438
|
-
}
|
|
1439
|
-
|
|
1440
|
-
item._detach();
|
|
1441
|
-
|
|
1442
|
-
this._map.delete(key);
|
|
1443
|
-
|
|
1444
|
-
if (this._doc && item._id) {
|
|
1445
|
-
var _updates4;
|
|
1446
|
-
|
|
1447
|
-
var storageUpdates = new Map();
|
|
1448
|
-
storageUpdates.set(this._id, {
|
|
1449
|
-
node: this,
|
|
1450
|
-
type: "LiveMap",
|
|
1451
|
-
updates: (_updates4 = {}, _updates4[key] = {
|
|
1452
|
-
type: "delete"
|
|
1453
|
-
}, _updates4)
|
|
1454
|
-
});
|
|
1455
|
-
|
|
1456
|
-
this._doc.dispatch([{
|
|
1457
|
-
type: OpType.DeleteCrdt,
|
|
1458
|
-
id: item._id,
|
|
1459
|
-
opId: this._doc.generateOpId()
|
|
1460
|
-
}], item._serialize(this._id, key), storageUpdates);
|
|
1461
|
-
}
|
|
1462
|
-
|
|
1463
|
-
return true;
|
|
1464
|
-
};
|
|
1465
|
-
|
|
1466
|
-
_proto.entries = function entries() {
|
|
1467
|
-
var _ref2;
|
|
1468
|
-
|
|
1469
|
-
var innerIterator = this._map.entries();
|
|
1470
|
-
|
|
1471
|
-
return _ref2 = {}, _ref2[Symbol.iterator] = function () {
|
|
1472
|
-
return this;
|
|
1473
|
-
}, _ref2.next = function next() {
|
|
1474
|
-
var iteratorValue = innerIterator.next();
|
|
1475
|
-
|
|
1476
|
-
if (iteratorValue.done) {
|
|
1477
|
-
return {
|
|
1478
|
-
done: true,
|
|
1479
|
-
value: undefined
|
|
1480
|
-
};
|
|
1481
|
-
}
|
|
1482
|
-
|
|
1483
|
-
var entry = iteratorValue.value;
|
|
1484
|
-
return {
|
|
1485
|
-
value: [entry[0], selfOrRegisterValue(iteratorValue.value[1])]
|
|
1486
|
-
};
|
|
1487
|
-
}, _ref2;
|
|
1488
|
-
};
|
|
1489
|
-
|
|
1490
|
-
_proto[Symbol.iterator] = function () {
|
|
1491
|
-
return this.entries();
|
|
1492
|
-
};
|
|
1493
|
-
|
|
1494
|
-
_proto.keys = function keys() {
|
|
1495
|
-
return this._map.keys();
|
|
1496
|
-
};
|
|
1497
|
-
|
|
1498
|
-
_proto.values = function values() {
|
|
1499
|
-
var _ref3;
|
|
1500
|
-
|
|
1501
|
-
var innerIterator = this._map.values();
|
|
1502
|
-
|
|
1503
|
-
return _ref3 = {}, _ref3[Symbol.iterator] = function () {
|
|
1504
|
-
return this;
|
|
1505
|
-
}, _ref3.next = function next() {
|
|
1506
|
-
var iteratorValue = innerIterator.next();
|
|
1507
|
-
|
|
1508
|
-
if (iteratorValue.done) {
|
|
1509
|
-
return {
|
|
1510
|
-
done: true,
|
|
1511
|
-
value: undefined
|
|
1512
|
-
};
|
|
1513
|
-
}
|
|
1514
|
-
|
|
1515
|
-
return {
|
|
1516
|
-
value: selfOrRegisterValue(iteratorValue.value)
|
|
1517
|
-
};
|
|
1518
|
-
}, _ref3;
|
|
1519
|
-
};
|
|
1520
|
-
|
|
1521
|
-
_proto.forEach = function forEach(callback) {
|
|
1522
|
-
for (var _iterator7 = _createForOfIteratorHelperLoose(this), _step7; !(_step7 = _iterator7()).done;) {
|
|
1523
|
-
var entry = _step7.value;
|
|
1524
|
-
callback(entry[1], entry[0], this);
|
|
1525
|
-
}
|
|
1526
|
-
};
|
|
1527
|
-
|
|
1528
|
-
_createClass(LiveMap, [{
|
|
1529
|
-
key: "size",
|
|
1530
|
-
get: function get() {
|
|
1531
|
-
return this._map.size;
|
|
1532
|
-
}
|
|
1533
|
-
}]);
|
|
1534
|
-
|
|
1535
|
-
return LiveMap;
|
|
1536
|
-
}(AbstractCrdt);
|
|
1537
|
-
|
|
1538
|
-
function parseJson(rawMessage) {
|
|
1539
|
-
try {
|
|
1540
|
-
return JSON.parse(rawMessage);
|
|
1541
|
-
} catch (e) {
|
|
1542
|
-
return undefined;
|
|
1543
|
-
}
|
|
1544
|
-
}
|
|
1545
|
-
function isJsonArray(data) {
|
|
1546
|
-
return Array.isArray(data);
|
|
1547
|
-
}
|
|
1548
|
-
function isJsonObject(data) {
|
|
1549
|
-
return data !== null && typeof data === "object" && !isJsonArray(data);
|
|
1550
|
-
}
|
|
1551
|
-
|
|
1552
|
-
function remove(array, item) {
|
|
1553
|
-
for (var i = 0; i < array.length; i++) {
|
|
1554
|
-
if (array[i] === item) {
|
|
1555
|
-
array.splice(i, 1);
|
|
1556
|
-
break;
|
|
1557
|
-
}
|
|
1558
|
-
}
|
|
1559
|
-
}
|
|
1560
|
-
function compact(items) {
|
|
1561
|
-
return items.filter(function (item) {
|
|
1562
|
-
return item != null;
|
|
1563
|
-
});
|
|
1564
|
-
}
|
|
1565
|
-
function creationOpToLiveStructure(op) {
|
|
1566
|
-
switch (op.type) {
|
|
1567
|
-
case OpType.CreateRegister:
|
|
1568
|
-
return new LiveRegister(op.data);
|
|
1569
|
-
|
|
1570
|
-
case OpType.CreateObject:
|
|
1571
|
-
return new LiveObject(op.data);
|
|
1572
|
-
|
|
1573
|
-
case OpType.CreateMap:
|
|
1574
|
-
return new LiveMap();
|
|
1575
|
-
|
|
1576
|
-
case OpType.CreateList:
|
|
1577
|
-
return new LiveList();
|
|
1578
|
-
}
|
|
1579
|
-
}
|
|
1580
|
-
function isSameNodeOrChildOf(node, parent) {
|
|
1581
|
-
if (node === parent) {
|
|
1582
|
-
return true;
|
|
1583
|
-
}
|
|
1584
|
-
|
|
1585
|
-
if (node._parent) {
|
|
1586
|
-
return isSameNodeOrChildOf(node._parent, parent);
|
|
1587
|
-
}
|
|
1588
|
-
|
|
1589
|
-
return false;
|
|
1590
|
-
}
|
|
1591
|
-
function deserialize(entry, parentToChildren, doc) {
|
|
1592
|
-
switch (entry[1].type) {
|
|
1593
|
-
case CrdtType.Object:
|
|
1594
|
-
{
|
|
1595
|
-
return LiveObject._deserialize(entry, parentToChildren, doc);
|
|
1596
|
-
}
|
|
1597
|
-
|
|
1598
|
-
case CrdtType.List:
|
|
1599
|
-
{
|
|
1600
|
-
return LiveList._deserialize(entry, parentToChildren, doc);
|
|
1601
|
-
}
|
|
1602
|
-
|
|
1603
|
-
case CrdtType.Map:
|
|
1604
|
-
{
|
|
1605
|
-
return LiveMap._deserialize(entry, parentToChildren, doc);
|
|
1606
|
-
}
|
|
1607
|
-
|
|
1608
|
-
case CrdtType.Register:
|
|
1609
|
-
{
|
|
1610
|
-
return LiveRegister._deserialize(entry, parentToChildren, doc);
|
|
1611
|
-
}
|
|
1612
|
-
|
|
1613
|
-
default:
|
|
1614
|
-
{
|
|
1615
|
-
throw new Error("Unexpected CRDT type");
|
|
1616
|
-
}
|
|
1617
|
-
}
|
|
1618
|
-
}
|
|
1619
|
-
function isCrdt(obj) {
|
|
1620
|
-
return obj instanceof LiveObject || obj instanceof LiveMap || obj instanceof LiveList || obj instanceof LiveRegister;
|
|
1621
|
-
}
|
|
1622
|
-
function selfOrRegisterValue(obj) {
|
|
1623
|
-
if (obj instanceof LiveRegister) {
|
|
1624
|
-
return obj.data;
|
|
1625
|
-
}
|
|
1626
|
-
|
|
1627
|
-
return obj;
|
|
1628
|
-
}
|
|
1629
|
-
function selfOrRegister(obj) {
|
|
1630
|
-
if (obj instanceof LiveObject || obj instanceof LiveMap || obj instanceof LiveList) {
|
|
1631
|
-
return obj;
|
|
1632
|
-
} else if (obj instanceof LiveRegister) {
|
|
1633
|
-
throw new Error("Internal error. LiveRegister should not be created from selfOrRegister");
|
|
1634
|
-
} else {
|
|
1635
|
-
return new LiveRegister(obj);
|
|
1636
|
-
}
|
|
1637
|
-
}
|
|
1638
|
-
function getTreesDiffOperations(currentItems, newItems) {
|
|
1639
|
-
var ops = [];
|
|
1640
|
-
currentItems.forEach(function (_, id) {
|
|
1641
|
-
if (!newItems.get(id)) {
|
|
1642
|
-
ops.push({
|
|
1643
|
-
type: OpType.DeleteCrdt,
|
|
1644
|
-
id: id
|
|
1645
|
-
});
|
|
1646
|
-
}
|
|
1647
|
-
});
|
|
1648
|
-
newItems.forEach(function (crdt, id) {
|
|
1649
|
-
var currentCrdt = currentItems.get(id);
|
|
1650
|
-
|
|
1651
|
-
if (currentCrdt) {
|
|
1652
|
-
if (crdt.type === CrdtType.Object) {
|
|
1653
|
-
if (JSON.stringify(crdt.data) !== JSON.stringify(currentCrdt.data)) {
|
|
1654
|
-
ops.push({
|
|
1655
|
-
type: OpType.UpdateObject,
|
|
1656
|
-
id: id,
|
|
1657
|
-
data: crdt.data
|
|
1658
|
-
});
|
|
1659
|
-
}
|
|
1660
|
-
}
|
|
1661
|
-
|
|
1662
|
-
if (crdt.parentKey !== currentCrdt.parentKey) {
|
|
1663
|
-
ops.push({
|
|
1664
|
-
type: OpType.SetParentKey,
|
|
1665
|
-
id: id,
|
|
1666
|
-
parentKey: crdt.parentKey
|
|
1667
|
-
});
|
|
1668
|
-
}
|
|
1669
|
-
} else {
|
|
1670
|
-
switch (crdt.type) {
|
|
1671
|
-
case CrdtType.Register:
|
|
1672
|
-
ops.push({
|
|
1673
|
-
type: OpType.CreateRegister,
|
|
1674
|
-
id: id,
|
|
1675
|
-
parentId: crdt.parentId,
|
|
1676
|
-
parentKey: crdt.parentKey,
|
|
1677
|
-
data: crdt.data
|
|
1678
|
-
});
|
|
1679
|
-
break;
|
|
1680
|
-
|
|
1681
|
-
case CrdtType.List:
|
|
1682
|
-
ops.push({
|
|
1683
|
-
type: OpType.CreateList,
|
|
1684
|
-
id: id,
|
|
1685
|
-
parentId: crdt.parentId,
|
|
1686
|
-
parentKey: crdt.parentKey
|
|
1687
|
-
});
|
|
1688
|
-
break;
|
|
1689
|
-
|
|
1690
|
-
case CrdtType.Object:
|
|
1691
|
-
ops.push({
|
|
1692
|
-
type: OpType.CreateObject,
|
|
1693
|
-
id: id,
|
|
1694
|
-
parentId: crdt.parentId,
|
|
1695
|
-
parentKey: crdt.parentKey,
|
|
1696
|
-
data: crdt.data
|
|
1697
|
-
});
|
|
1698
|
-
break;
|
|
1699
|
-
|
|
1700
|
-
case CrdtType.Map:
|
|
1701
|
-
ops.push({
|
|
1702
|
-
type: OpType.CreateMap,
|
|
1703
|
-
id: id,
|
|
1704
|
-
parentId: crdt.parentId,
|
|
1705
|
-
parentKey: crdt.parentKey
|
|
1706
|
-
});
|
|
1707
|
-
break;
|
|
1708
|
-
}
|
|
1709
|
-
}
|
|
1710
|
-
});
|
|
1711
|
-
return ops;
|
|
1712
|
-
}
|
|
1713
|
-
|
|
1714
|
-
function mergeObjectStorageUpdates(first, second) {
|
|
1715
|
-
var updates = first.updates;
|
|
1716
|
-
|
|
1717
|
-
for (var _iterator = _createForOfIteratorHelperLoose(entries(second.updates)), _step; !(_step = _iterator()).done;) {
|
|
1718
|
-
var _step$value = _step.value,
|
|
1719
|
-
_key = _step$value[0],
|
|
1720
|
-
value = _step$value[1];
|
|
1721
|
-
updates[_key] = value;
|
|
1722
|
-
}
|
|
1723
|
-
|
|
1724
|
-
return _extends({}, second, {
|
|
1725
|
-
updates: updates
|
|
1726
|
-
});
|
|
1727
|
-
}
|
|
1728
|
-
|
|
1729
|
-
function mergeMapStorageUpdates(first, second) {
|
|
1730
|
-
var updates = first.updates;
|
|
1731
|
-
|
|
1732
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(entries(second.updates)), _step2; !(_step2 = _iterator2()).done;) {
|
|
1733
|
-
var _step2$value = _step2.value,
|
|
1734
|
-
_key2 = _step2$value[0],
|
|
1735
|
-
value = _step2$value[1];
|
|
1736
|
-
updates[_key2] = value;
|
|
1737
|
-
}
|
|
1738
|
-
|
|
1739
|
-
return _extends({}, second, {
|
|
1740
|
-
updates: updates
|
|
1741
|
-
});
|
|
1742
|
-
}
|
|
1743
|
-
|
|
1744
|
-
function mergeListStorageUpdates(first, second) {
|
|
1745
|
-
var updates = first.updates;
|
|
1746
|
-
return _extends({}, second, {
|
|
1747
|
-
updates: updates.concat(second.updates)
|
|
1748
|
-
});
|
|
1749
|
-
}
|
|
1750
|
-
|
|
1751
|
-
function mergeStorageUpdates(first, second) {
|
|
1752
|
-
if (!first) {
|
|
1753
|
-
return second;
|
|
1754
|
-
}
|
|
1755
|
-
|
|
1756
|
-
if (first.type === "LiveObject" && second.type === "LiveObject") {
|
|
1757
|
-
return mergeObjectStorageUpdates(first, second);
|
|
1758
|
-
} else if (first.type === "LiveMap" && second.type === "LiveMap") {
|
|
1759
|
-
return mergeMapStorageUpdates(first, second);
|
|
1760
|
-
} else if (first.type === "LiveList" && second.type === "LiveList") {
|
|
1761
|
-
return mergeListStorageUpdates(first, second);
|
|
1762
|
-
} else ;
|
|
1763
|
-
|
|
1764
|
-
return second;
|
|
1765
|
-
}
|
|
1766
|
-
|
|
1767
|
-
function isPlain(value) {
|
|
1768
|
-
var type = typeof value;
|
|
1769
|
-
return type === "undefined" || value === null || type === "string" || type === "boolean" || type === "number" || Array.isArray(value) || isPlainObject$1(value);
|
|
1770
|
-
}
|
|
1771
|
-
|
|
1772
|
-
function isPlainObject$1(value) {
|
|
1773
|
-
if (typeof value !== "object" || value === null) return false;
|
|
1774
|
-
var proto = Object.getPrototypeOf(value);
|
|
1775
|
-
if (proto === null) return true;
|
|
1776
|
-
var baseProto = proto;
|
|
1777
|
-
|
|
1778
|
-
while (Object.getPrototypeOf(baseProto) !== null) {
|
|
1779
|
-
baseProto = Object.getPrototypeOf(baseProto);
|
|
1780
|
-
}
|
|
1781
|
-
|
|
1782
|
-
return proto === baseProto;
|
|
1783
|
-
}
|
|
1784
|
-
|
|
1785
|
-
function findNonSerializableValue(value, path) {
|
|
1786
|
-
if (path === void 0) {
|
|
1787
|
-
path = "";
|
|
1788
|
-
}
|
|
1789
|
-
|
|
1790
|
-
if (!isPlain) {
|
|
1791
|
-
return {
|
|
1792
|
-
path: path || "root",
|
|
1793
|
-
value: value
|
|
1794
|
-
};
|
|
1795
|
-
}
|
|
1796
|
-
|
|
1797
|
-
if (typeof value !== "object" || value === null) {
|
|
1798
|
-
return false;
|
|
1799
|
-
}
|
|
1800
|
-
|
|
1801
|
-
for (var _i = 0, _Object$entries = Object.entries(value); _i < _Object$entries.length; _i++) {
|
|
1802
|
-
var _Object$entries$_i = _Object$entries[_i],
|
|
1803
|
-
_key3 = _Object$entries$_i[0],
|
|
1804
|
-
nestedValue = _Object$entries$_i[1];
|
|
1805
|
-
var nestedPath = path ? path + "." + _key3 : _key3;
|
|
1806
|
-
|
|
1807
|
-
if (!isPlain(nestedValue)) {
|
|
1808
|
-
return {
|
|
1809
|
-
path: nestedPath,
|
|
1810
|
-
value: nestedValue
|
|
1811
|
-
};
|
|
1812
|
-
}
|
|
1813
|
-
|
|
1814
|
-
if (typeof nestedValue === "object") {
|
|
1815
|
-
var nonSerializableNestedValue = findNonSerializableValue(nestedValue, nestedPath);
|
|
1816
|
-
|
|
1817
|
-
if (nonSerializableNestedValue) {
|
|
1818
|
-
return nonSerializableNestedValue;
|
|
1819
|
-
}
|
|
1820
|
-
}
|
|
1821
|
-
}
|
|
1822
|
-
|
|
1823
|
-
return false;
|
|
1824
|
-
}
|
|
1825
|
-
function isTokenValid(token) {
|
|
1826
|
-
var tokenParts = token.split(".");
|
|
1827
|
-
|
|
1828
|
-
if (tokenParts.length !== 3) {
|
|
1829
|
-
return false;
|
|
1830
|
-
}
|
|
1831
|
-
|
|
1832
|
-
var data = parseJson(atob(tokenParts[1]));
|
|
1833
|
-
|
|
1834
|
-
if (data === undefined || !isJsonObject(data) || typeof data.exp !== "number") {
|
|
1835
|
-
return false;
|
|
1836
|
-
}
|
|
1837
|
-
|
|
1838
|
-
var now = Date.now();
|
|
1839
|
-
|
|
1840
|
-
if (now / 1000 > data.exp - 300) {
|
|
1841
|
-
return false;
|
|
1842
|
-
}
|
|
1843
|
-
|
|
1844
|
-
return true;
|
|
1845
|
-
}
|
|
1846
|
-
function entries(obj) {
|
|
1847
|
-
return Object.entries(obj);
|
|
1848
|
-
}
|
|
1849
|
-
|
|
1850
|
-
var LiveObject = function (_AbstractCrdt) {
|
|
1851
|
-
_inheritsLoose(LiveObject, _AbstractCrdt);
|
|
1852
|
-
|
|
1853
|
-
function LiveObject(object) {
|
|
1854
|
-
var _this;
|
|
1855
|
-
|
|
1856
|
-
if (object === void 0) {
|
|
1857
|
-
object = {};
|
|
1858
|
-
}
|
|
1859
|
-
|
|
1860
|
-
_this = _AbstractCrdt.call(this) || this;
|
|
1861
|
-
_this._propToLastUpdate = new Map();
|
|
1862
|
-
|
|
1863
|
-
for (var key in object) {
|
|
1864
|
-
var value = object[key];
|
|
1865
|
-
|
|
1866
|
-
if (value instanceof AbstractCrdt) {
|
|
1867
|
-
value._setParentLink(_assertThisInitialized(_this), key);
|
|
1868
|
-
}
|
|
1869
|
-
}
|
|
1870
|
-
|
|
1871
|
-
_this._map = new Map(Object.entries(object));
|
|
1872
|
-
return _this;
|
|
1873
|
-
}
|
|
1874
|
-
|
|
1875
|
-
var _proto = LiveObject.prototype;
|
|
1876
|
-
|
|
1877
|
-
_proto._serialize = function _serialize(parentId, parentKey, doc, intent) {
|
|
1878
|
-
if (this._id == null) {
|
|
1879
|
-
throw new Error("Cannot serialize item is not attached");
|
|
1880
|
-
}
|
|
1881
|
-
|
|
1882
|
-
var ops = [];
|
|
1883
|
-
var op = {
|
|
1884
|
-
id: this._id,
|
|
1885
|
-
opId: doc == null ? void 0 : doc.generateOpId(),
|
|
1886
|
-
intent: intent,
|
|
1887
|
-
type: OpType.CreateObject,
|
|
1888
|
-
parentId: parentId,
|
|
1889
|
-
parentKey: parentKey,
|
|
1890
|
-
data: {}
|
|
1891
|
-
};
|
|
1892
|
-
ops.push(op);
|
|
1893
|
-
|
|
1894
|
-
for (var _iterator = _createForOfIteratorHelperLoose(this._map), _step; !(_step = _iterator()).done;) {
|
|
1895
|
-
var _step$value = _step.value,
|
|
1896
|
-
key = _step$value[0],
|
|
1897
|
-
value = _step$value[1];
|
|
1898
|
-
|
|
1899
|
-
if (value instanceof AbstractCrdt) {
|
|
1900
|
-
ops.push.apply(ops, value._serialize(this._id, key, doc));
|
|
1901
|
-
} else {
|
|
1902
|
-
op.data[key] = value;
|
|
1903
|
-
}
|
|
1904
|
-
}
|
|
1905
|
-
|
|
1906
|
-
return ops;
|
|
1907
|
-
};
|
|
1908
|
-
|
|
1909
|
-
LiveObject._deserialize = function _deserialize(_ref, parentToChildren, doc) {
|
|
1910
|
-
var id = _ref[0],
|
|
1911
|
-
item = _ref[1];
|
|
1912
|
-
|
|
1913
|
-
if (item.type !== CrdtType.Object) {
|
|
1914
|
-
throw new Error("Tried to deserialize a record but item type is \"" + item.type + "\"");
|
|
1915
|
-
}
|
|
1916
|
-
|
|
1917
|
-
var object = new LiveObject(item.data);
|
|
1918
|
-
|
|
1919
|
-
object._attach(id, doc);
|
|
1920
|
-
|
|
1921
|
-
return this._deserializeChildren(object, parentToChildren, doc);
|
|
1922
|
-
};
|
|
1923
|
-
|
|
1924
|
-
LiveObject._deserializeChildren = function _deserializeChildren(object, parentToChildren, doc) {
|
|
1925
|
-
var children = parentToChildren.get(object._id);
|
|
1926
|
-
|
|
1927
|
-
if (children == null) {
|
|
1928
|
-
return object;
|
|
1929
|
-
}
|
|
1930
|
-
|
|
1931
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(children), _step2; !(_step2 = _iterator2()).done;) {
|
|
1932
|
-
var entry = _step2.value;
|
|
1933
|
-
var crdt = entry[1];
|
|
1934
|
-
|
|
1935
|
-
if (crdt.parentKey == null) {
|
|
1936
|
-
throw new Error("Tried to deserialize a crdt but it does not have a parentKey and is not the root");
|
|
1937
|
-
}
|
|
1938
|
-
|
|
1939
|
-
var child = deserialize(entry, parentToChildren, doc);
|
|
1940
|
-
|
|
1941
|
-
child._setParentLink(object, crdt.parentKey);
|
|
1942
|
-
|
|
1943
|
-
object._map.set(crdt.parentKey, child);
|
|
1944
|
-
}
|
|
1945
|
-
|
|
1946
|
-
return object;
|
|
1947
|
-
};
|
|
1948
|
-
|
|
1949
|
-
_proto._attach = function _attach(id, doc) {
|
|
1950
|
-
_AbstractCrdt.prototype._attach.call(this, id, doc);
|
|
1951
|
-
|
|
1952
|
-
for (var _iterator3 = _createForOfIteratorHelperLoose(this._map), _step3; !(_step3 = _iterator3()).done;) {
|
|
1953
|
-
var _step3$value = _step3.value;
|
|
1954
|
-
_step3$value[0];
|
|
1955
|
-
var value = _step3$value[1];
|
|
1956
|
-
|
|
1957
|
-
if (value instanceof AbstractCrdt) {
|
|
1958
|
-
value._attach(doc.generateId(), doc);
|
|
1959
|
-
}
|
|
1960
|
-
}
|
|
1961
|
-
};
|
|
1962
|
-
|
|
1963
|
-
_proto._attachChild = function _attachChild(op, isLocal) {
|
|
1964
|
-
var _updates;
|
|
1965
|
-
|
|
1966
|
-
if (this._doc == null) {
|
|
1967
|
-
throw new Error("Can't attach child if doc is not present");
|
|
1968
|
-
}
|
|
1969
|
-
|
|
1970
|
-
var id = op.id,
|
|
1971
|
-
parentKey = op.parentKey,
|
|
1972
|
-
opId = op.opId;
|
|
1973
|
-
var key = parentKey;
|
|
1974
|
-
var child = creationOpToLiveStructure(op);
|
|
1975
|
-
|
|
1976
|
-
if (this._doc.getItem(id) !== undefined) {
|
|
1977
|
-
if (this._propToLastUpdate.get(key) === opId) {
|
|
1978
|
-
this._propToLastUpdate.delete(key);
|
|
1979
|
-
}
|
|
1980
|
-
|
|
1981
|
-
return {
|
|
1982
|
-
modified: false
|
|
1983
|
-
};
|
|
1984
|
-
}
|
|
1985
|
-
|
|
1986
|
-
if (isLocal) {
|
|
1987
|
-
this._propToLastUpdate.set(key, opId);
|
|
1988
|
-
} else if (this._propToLastUpdate.get(key) === undefined) ; else if (this._propToLastUpdate.get(key) === opId) {
|
|
1989
|
-
this._propToLastUpdate.delete(key);
|
|
1990
|
-
|
|
1991
|
-
return {
|
|
1992
|
-
modified: false
|
|
1993
|
-
};
|
|
1994
|
-
} else {
|
|
1995
|
-
return {
|
|
1996
|
-
modified: false
|
|
1997
|
-
};
|
|
1998
|
-
}
|
|
1999
|
-
|
|
2000
|
-
var previousValue = this._map.get(key);
|
|
2001
|
-
|
|
2002
|
-
var reverse;
|
|
2003
|
-
|
|
2004
|
-
if (isCrdt(previousValue)) {
|
|
2005
|
-
reverse = previousValue._serialize(this._id, key);
|
|
2006
|
-
|
|
2007
|
-
previousValue._detach();
|
|
2008
|
-
} else if (previousValue === undefined) {
|
|
2009
|
-
reverse = [{
|
|
2010
|
-
type: OpType.DeleteObjectKey,
|
|
2011
|
-
id: this._id,
|
|
2012
|
-
key: key
|
|
2013
|
-
}];
|
|
2014
|
-
} else {
|
|
2015
|
-
var _data;
|
|
2016
|
-
|
|
2017
|
-
reverse = [{
|
|
2018
|
-
type: OpType.UpdateObject,
|
|
2019
|
-
id: this._id,
|
|
2020
|
-
data: (_data = {}, _data[key] = previousValue, _data)
|
|
2021
|
-
}];
|
|
2022
|
-
}
|
|
2023
|
-
|
|
2024
|
-
this._map.set(key, child);
|
|
2025
|
-
|
|
2026
|
-
child._setParentLink(this, key);
|
|
2027
|
-
|
|
2028
|
-
child._attach(id, this._doc);
|
|
2029
|
-
|
|
2030
|
-
return {
|
|
2031
|
-
reverse: reverse,
|
|
2032
|
-
modified: {
|
|
2033
|
-
node: this,
|
|
2034
|
-
type: "LiveObject",
|
|
2035
|
-
updates: (_updates = {}, _updates[key] = {
|
|
2036
|
-
type: "update"
|
|
2037
|
-
}, _updates)
|
|
2038
|
-
}
|
|
2039
|
-
};
|
|
2040
|
-
};
|
|
2041
|
-
|
|
2042
|
-
_proto._detachChild = function _detachChild(child) {
|
|
2043
|
-
if (child) {
|
|
2044
|
-
var _updates2;
|
|
2045
|
-
|
|
2046
|
-
var reverse = child._serialize(this._id, child._parentKey, this._doc);
|
|
2047
|
-
|
|
2048
|
-
for (var _iterator4 = _createForOfIteratorHelperLoose(this._map), _step4; !(_step4 = _iterator4()).done;) {
|
|
2049
|
-
var _step4$value = _step4.value,
|
|
2050
|
-
key = _step4$value[0],
|
|
2051
|
-
value = _step4$value[1];
|
|
2052
|
-
|
|
2053
|
-
if (value === child) {
|
|
2054
|
-
this._map.delete(key);
|
|
2055
|
-
}
|
|
2056
|
-
}
|
|
2057
|
-
|
|
2058
|
-
child._detach();
|
|
2059
|
-
|
|
2060
|
-
var storageUpdate = {
|
|
2061
|
-
node: this,
|
|
2062
|
-
type: "LiveObject",
|
|
2063
|
-
updates: (_updates2 = {}, _updates2[child._parentKey] = {
|
|
2064
|
-
type: "delete"
|
|
2065
|
-
}, _updates2)
|
|
2066
|
-
};
|
|
2067
|
-
return {
|
|
2068
|
-
modified: storageUpdate,
|
|
2069
|
-
reverse: reverse
|
|
2070
|
-
};
|
|
2071
|
-
}
|
|
2072
|
-
|
|
2073
|
-
return {
|
|
2074
|
-
modified: false
|
|
2075
|
-
};
|
|
2076
|
-
};
|
|
2077
|
-
|
|
2078
|
-
_proto._detachChildren = function _detachChildren() {
|
|
2079
|
-
for (var _iterator5 = _createForOfIteratorHelperLoose(this._map), _step5; !(_step5 = _iterator5()).done;) {
|
|
2080
|
-
var _step5$value = _step5.value,
|
|
2081
|
-
key = _step5$value[0],
|
|
2082
|
-
value = _step5$value[1];
|
|
2083
|
-
|
|
2084
|
-
this._map.delete(key);
|
|
2085
|
-
|
|
2086
|
-
value._detach();
|
|
2087
|
-
}
|
|
2088
|
-
};
|
|
2089
|
-
|
|
2090
|
-
_proto._detach = function _detach() {
|
|
2091
|
-
_AbstractCrdt.prototype._detach.call(this);
|
|
2092
|
-
|
|
2093
|
-
for (var _iterator6 = _createForOfIteratorHelperLoose(this._map.values()), _step6; !(_step6 = _iterator6()).done;) {
|
|
2094
|
-
var value = _step6.value;
|
|
2095
|
-
|
|
2096
|
-
if (isCrdt(value)) {
|
|
2097
|
-
value._detach();
|
|
2098
|
-
}
|
|
2099
|
-
}
|
|
2100
|
-
};
|
|
2101
|
-
|
|
2102
|
-
_proto._apply = function _apply(op, isLocal) {
|
|
2103
|
-
if (op.type === OpType.UpdateObject) {
|
|
2104
|
-
return this._applyUpdate(op, isLocal);
|
|
2105
|
-
} else if (op.type === OpType.DeleteObjectKey) {
|
|
2106
|
-
return this._applyDeleteObjectKey(op);
|
|
2107
|
-
}
|
|
2108
|
-
|
|
2109
|
-
return _AbstractCrdt.prototype._apply.call(this, op, isLocal);
|
|
2110
|
-
};
|
|
2111
|
-
|
|
2112
|
-
_proto._toSerializedCrdt = function _toSerializedCrdt() {
|
|
2113
|
-
var _this$_parent;
|
|
2114
|
-
|
|
2115
|
-
var data = {};
|
|
2116
|
-
|
|
2117
|
-
for (var _iterator7 = _createForOfIteratorHelperLoose(this._map), _step7; !(_step7 = _iterator7()).done;) {
|
|
2118
|
-
var _step7$value = _step7.value,
|
|
2119
|
-
key = _step7$value[0],
|
|
2120
|
-
value = _step7$value[1];
|
|
2121
|
-
|
|
2122
|
-
if (value instanceof AbstractCrdt === false) {
|
|
2123
|
-
data[key] = value;
|
|
2124
|
-
}
|
|
2125
|
-
}
|
|
2126
|
-
|
|
2127
|
-
return {
|
|
2128
|
-
type: CrdtType.Object,
|
|
2129
|
-
parentId: (_this$_parent = this._parent) == null ? void 0 : _this$_parent._id,
|
|
2130
|
-
parentKey: this._parentKey,
|
|
2131
|
-
data: data
|
|
2132
|
-
};
|
|
2133
|
-
};
|
|
2134
|
-
|
|
2135
|
-
_proto._applyUpdate = function _applyUpdate(op, isLocal) {
|
|
2136
|
-
var isModified = false;
|
|
2137
|
-
var reverse = [];
|
|
2138
|
-
var reverseUpdate = {
|
|
2139
|
-
type: OpType.UpdateObject,
|
|
2140
|
-
id: this._id,
|
|
2141
|
-
data: {}
|
|
2142
|
-
};
|
|
2143
|
-
reverse.push(reverseUpdate);
|
|
2144
|
-
|
|
2145
|
-
for (var key in op.data) {
|
|
2146
|
-
var oldValue = this._map.get(key);
|
|
2147
|
-
|
|
2148
|
-
if (oldValue instanceof AbstractCrdt) {
|
|
2149
|
-
reverse.push.apply(reverse, oldValue._serialize(this._id, key));
|
|
2150
|
-
|
|
2151
|
-
oldValue._detach();
|
|
2152
|
-
} else if (oldValue !== undefined) {
|
|
2153
|
-
reverseUpdate.data[key] = oldValue;
|
|
2154
|
-
} else if (oldValue === undefined) {
|
|
2155
|
-
reverse.push({
|
|
2156
|
-
type: OpType.DeleteObjectKey,
|
|
2157
|
-
id: this._id,
|
|
2158
|
-
key: key
|
|
2159
|
-
});
|
|
2160
|
-
}
|
|
2161
|
-
}
|
|
2162
|
-
|
|
2163
|
-
var updateDelta = {};
|
|
2164
|
-
|
|
2165
|
-
for (var _key2 in op.data) {
|
|
2166
|
-
if (isLocal) {
|
|
2167
|
-
this._propToLastUpdate.set(_key2, op.opId);
|
|
2168
|
-
} else if (this._propToLastUpdate.get(_key2) == null) {
|
|
2169
|
-
isModified = true;
|
|
2170
|
-
} else if (this._propToLastUpdate.get(_key2) === op.opId) {
|
|
2171
|
-
this._propToLastUpdate.delete(_key2);
|
|
2172
|
-
|
|
2173
|
-
continue;
|
|
2174
|
-
} else {
|
|
2175
|
-
continue;
|
|
2176
|
-
}
|
|
2177
|
-
|
|
2178
|
-
var _oldValue = this._map.get(_key2);
|
|
2179
|
-
|
|
2180
|
-
if (isCrdt(_oldValue)) {
|
|
2181
|
-
_oldValue._detach();
|
|
2182
|
-
}
|
|
2183
|
-
|
|
2184
|
-
isModified = true;
|
|
2185
|
-
updateDelta[_key2] = {
|
|
2186
|
-
type: "update"
|
|
2187
|
-
};
|
|
2188
|
-
|
|
2189
|
-
this._map.set(_key2, op.data[_key2]);
|
|
2190
|
-
}
|
|
2191
|
-
|
|
2192
|
-
if (Object.keys(reverseUpdate.data).length !== 0) {
|
|
2193
|
-
reverse.unshift(reverseUpdate);
|
|
2194
|
-
}
|
|
2195
|
-
|
|
2196
|
-
return isModified ? {
|
|
2197
|
-
modified: {
|
|
2198
|
-
node: this,
|
|
2199
|
-
type: "LiveObject",
|
|
2200
|
-
updates: updateDelta
|
|
2201
|
-
},
|
|
2202
|
-
reverse: reverse
|
|
2203
|
-
} : {
|
|
2204
|
-
modified: false
|
|
2205
|
-
};
|
|
2206
|
-
};
|
|
2207
|
-
|
|
2208
|
-
_proto._applyDeleteObjectKey = function _applyDeleteObjectKey(op) {
|
|
2209
|
-
var _updates3;
|
|
2210
|
-
|
|
2211
|
-
var key = op.key;
|
|
2212
|
-
|
|
2213
|
-
if (this._map.has(key) === false) {
|
|
2214
|
-
return {
|
|
2215
|
-
modified: false
|
|
2216
|
-
};
|
|
2217
|
-
}
|
|
2218
|
-
|
|
2219
|
-
if (this._propToLastUpdate.get(key) !== undefined) {
|
|
2220
|
-
return {
|
|
2221
|
-
modified: false
|
|
2222
|
-
};
|
|
2223
|
-
}
|
|
2224
|
-
|
|
2225
|
-
var oldValue = this._map.get(key);
|
|
2226
|
-
|
|
2227
|
-
var reverse = [];
|
|
2228
|
-
|
|
2229
|
-
if (isCrdt(oldValue)) {
|
|
2230
|
-
reverse = oldValue._serialize(this._id, op.key);
|
|
2231
|
-
|
|
2232
|
-
oldValue._detach();
|
|
2233
|
-
} else if (oldValue !== undefined) {
|
|
2234
|
-
var _data2;
|
|
2235
|
-
|
|
2236
|
-
reverse = [{
|
|
2237
|
-
type: OpType.UpdateObject,
|
|
2238
|
-
id: this._id,
|
|
2239
|
-
data: (_data2 = {}, _data2[key] = oldValue, _data2)
|
|
2240
|
-
}];
|
|
2241
|
-
}
|
|
2242
|
-
|
|
2243
|
-
this._map.delete(key);
|
|
2244
|
-
|
|
2245
|
-
return {
|
|
2246
|
-
modified: {
|
|
2247
|
-
node: this,
|
|
2248
|
-
type: "LiveObject",
|
|
2249
|
-
updates: (_updates3 = {}, _updates3[op.key] = {
|
|
2250
|
-
type: "delete"
|
|
2251
|
-
}, _updates3)
|
|
2252
|
-
},
|
|
2253
|
-
reverse: reverse
|
|
2254
|
-
};
|
|
2255
|
-
};
|
|
2256
|
-
|
|
2257
|
-
_proto.toObject = function toObject() {
|
|
2258
|
-
return Object.fromEntries(this._map);
|
|
2259
|
-
};
|
|
2260
|
-
|
|
2261
|
-
_proto.set = function set(key, value) {
|
|
2262
|
-
var _this$update;
|
|
2263
|
-
|
|
2264
|
-
this.update((_this$update = {}, _this$update[key] = value, _this$update));
|
|
2265
|
-
};
|
|
2266
|
-
|
|
2267
|
-
_proto.get = function get(key) {
|
|
2268
|
-
return this._map.get(key);
|
|
2269
|
-
};
|
|
2270
|
-
|
|
2271
|
-
_proto.delete = function _delete(key) {
|
|
2272
|
-
var _updates4;
|
|
2273
|
-
|
|
2274
|
-
var keyAsString = key;
|
|
2275
|
-
|
|
2276
|
-
var oldValue = this._map.get(keyAsString);
|
|
2277
|
-
|
|
2278
|
-
if (oldValue === undefined) {
|
|
2279
|
-
return;
|
|
2280
|
-
}
|
|
2281
|
-
|
|
2282
|
-
if (this._doc == null || this._id == null) {
|
|
2283
|
-
if (oldValue instanceof AbstractCrdt) {
|
|
2284
|
-
oldValue._detach();
|
|
2285
|
-
}
|
|
2286
|
-
|
|
2287
|
-
this._map.delete(keyAsString);
|
|
2288
|
-
|
|
2289
|
-
return;
|
|
2290
|
-
}
|
|
2291
|
-
|
|
2292
|
-
var reverse;
|
|
2293
|
-
|
|
2294
|
-
if (oldValue instanceof AbstractCrdt) {
|
|
2295
|
-
oldValue._detach();
|
|
2296
|
-
|
|
2297
|
-
reverse = oldValue._serialize(this._id, keyAsString);
|
|
2298
|
-
} else {
|
|
2299
|
-
var _data3;
|
|
2300
|
-
|
|
2301
|
-
reverse = [{
|
|
2302
|
-
type: OpType.UpdateObject,
|
|
2303
|
-
data: (_data3 = {}, _data3[keyAsString] = oldValue, _data3),
|
|
2304
|
-
id: this._id
|
|
2305
|
-
}];
|
|
2306
|
-
}
|
|
2307
|
-
|
|
2308
|
-
this._map.delete(keyAsString);
|
|
2309
|
-
|
|
2310
|
-
var storageUpdates = new Map();
|
|
2311
|
-
storageUpdates.set(this._id, {
|
|
2312
|
-
node: this,
|
|
2313
|
-
type: "LiveObject",
|
|
2314
|
-
updates: (_updates4 = {}, _updates4[key] = {
|
|
2315
|
-
type: "delete"
|
|
2316
|
-
}, _updates4)
|
|
2317
|
-
});
|
|
2318
|
-
|
|
2319
|
-
this._doc.dispatch([{
|
|
2320
|
-
type: OpType.DeleteObjectKey,
|
|
2321
|
-
key: keyAsString,
|
|
2322
|
-
id: this._id,
|
|
2323
|
-
opId: this._doc.generateOpId()
|
|
2324
|
-
}], reverse, storageUpdates);
|
|
2325
|
-
};
|
|
2326
|
-
|
|
2327
|
-
_proto.update = function update(overrides) {
|
|
2328
|
-
var _this2 = this;
|
|
2329
|
-
|
|
2330
|
-
if (this._doc == null || this._id == null) {
|
|
2331
|
-
for (var key in overrides) {
|
|
2332
|
-
var oldValue = this._map.get(key);
|
|
2333
|
-
|
|
2334
|
-
if (oldValue instanceof AbstractCrdt) {
|
|
2335
|
-
oldValue._detach();
|
|
2336
|
-
}
|
|
2337
|
-
|
|
2338
|
-
var newValue = overrides[key];
|
|
2339
|
-
|
|
2340
|
-
if (newValue instanceof AbstractCrdt) {
|
|
2341
|
-
newValue._setParentLink(this, key);
|
|
2342
|
-
}
|
|
2343
|
-
|
|
2344
|
-
this._map.set(key, newValue);
|
|
2345
|
-
}
|
|
2346
|
-
|
|
2347
|
-
return;
|
|
2348
|
-
}
|
|
2349
|
-
|
|
2350
|
-
var ops = [];
|
|
2351
|
-
var reverseOps = [];
|
|
2352
|
-
|
|
2353
|
-
var opId = this._doc.generateOpId();
|
|
2354
|
-
|
|
2355
|
-
var updatedProps = {};
|
|
2356
|
-
var reverseUpdateOp = {
|
|
2357
|
-
id: this._id,
|
|
2358
|
-
type: OpType.UpdateObject,
|
|
2359
|
-
data: {}
|
|
2360
|
-
};
|
|
2361
|
-
var updateDelta = {};
|
|
2362
|
-
|
|
2363
|
-
for (var _key3 in overrides) {
|
|
2364
|
-
var _oldValue2 = this._map.get(_key3);
|
|
2365
|
-
|
|
2366
|
-
if (_oldValue2 instanceof AbstractCrdt) {
|
|
2367
|
-
reverseOps.push.apply(reverseOps, _oldValue2._serialize(this._id, _key3));
|
|
2368
|
-
|
|
2369
|
-
_oldValue2._detach();
|
|
2370
|
-
} else if (_oldValue2 === undefined) {
|
|
2371
|
-
reverseOps.push({
|
|
2372
|
-
type: OpType.DeleteObjectKey,
|
|
2373
|
-
id: this._id,
|
|
2374
|
-
key: _key3
|
|
2375
|
-
});
|
|
2376
|
-
} else {
|
|
2377
|
-
reverseUpdateOp.data[_key3] = _oldValue2;
|
|
2378
|
-
}
|
|
2379
|
-
|
|
2380
|
-
var _newValue = overrides[_key3];
|
|
2381
|
-
|
|
2382
|
-
if (_newValue instanceof AbstractCrdt) {
|
|
2383
|
-
_newValue._setParentLink(this, _key3);
|
|
2384
|
-
|
|
2385
|
-
_newValue._attach(this._doc.generateId(), this._doc);
|
|
2386
|
-
|
|
2387
|
-
var newAttachChildOps = _newValue._serialize(this._id, _key3, this._doc);
|
|
2388
|
-
|
|
2389
|
-
var createCrdtOp = newAttachChildOps.find(function (op) {
|
|
2390
|
-
return op.parentId === _this2._id;
|
|
2391
|
-
});
|
|
2392
|
-
|
|
2393
|
-
if (createCrdtOp) {
|
|
2394
|
-
this._propToLastUpdate.set(_key3, createCrdtOp.opId);
|
|
2395
|
-
}
|
|
2396
|
-
|
|
2397
|
-
ops.push.apply(ops, newAttachChildOps);
|
|
2398
|
-
} else {
|
|
2399
|
-
updatedProps[_key3] = _newValue;
|
|
2400
|
-
|
|
2401
|
-
this._propToLastUpdate.set(_key3, opId);
|
|
2402
|
-
}
|
|
2403
|
-
|
|
2404
|
-
this._map.set(_key3, _newValue);
|
|
2405
|
-
|
|
2406
|
-
updateDelta[_key3] = {
|
|
2407
|
-
type: "update"
|
|
2408
|
-
};
|
|
2409
|
-
}
|
|
2410
|
-
|
|
2411
|
-
if (Object.keys(reverseUpdateOp.data).length !== 0) {
|
|
2412
|
-
reverseOps.unshift(reverseUpdateOp);
|
|
2413
|
-
}
|
|
2414
|
-
|
|
2415
|
-
if (Object.keys(updatedProps).length !== 0) {
|
|
2416
|
-
ops.unshift({
|
|
2417
|
-
opId: opId,
|
|
2418
|
-
id: this._id,
|
|
2419
|
-
type: OpType.UpdateObject,
|
|
2420
|
-
data: updatedProps
|
|
2421
|
-
});
|
|
2422
|
-
}
|
|
2423
|
-
|
|
2424
|
-
var storageUpdates = new Map();
|
|
2425
|
-
storageUpdates.set(this._id, {
|
|
2426
|
-
node: this,
|
|
2427
|
-
type: "LiveObject",
|
|
2428
|
-
updates: updateDelta
|
|
2429
|
-
});
|
|
2430
|
-
|
|
2431
|
-
this._doc.dispatch(ops, reverseOps, storageUpdates);
|
|
2432
|
-
};
|
|
2433
|
-
|
|
2434
|
-
return LiveObject;
|
|
2435
|
-
}(AbstractCrdt);
|
|
5
|
+
var LiveObject = require('./shared.js');
|
|
2436
6
|
|
|
2437
7
|
var BACKOFF_RETRY_DELAYS = [250, 500, 1000, 2000, 4000, 8000, 10000];
|
|
2438
8
|
var BACKOFF_RETRY_DELAYS_SLOW = [2000, 30000, 60000, 300000];
|
|
@@ -2455,7 +25,7 @@ function makeOthers(userMap) {
|
|
|
2455
25
|
|
|
2456
26
|
var users = Object.values(userMap).map(function (user) {
|
|
2457
27
|
user._hasReceivedInitialPresence;
|
|
2458
|
-
var publicKeys = _objectWithoutPropertiesLoose(user, ["_hasReceivedInitialPresence"]);
|
|
28
|
+
var publicKeys = LiveObject._objectWithoutPropertiesLoose(user, ["_hasReceivedInitialPresence"]);
|
|
2459
29
|
|
|
2460
30
|
return publicKeys;
|
|
2461
31
|
});
|
|
@@ -2478,7 +48,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2478
48
|
authenticate: function authenticate(auth, createWebSocket) {
|
|
2479
49
|
var token = state.token;
|
|
2480
50
|
|
|
2481
|
-
if (token && isTokenValid(token)) {
|
|
51
|
+
if (token && LiveObject.isTokenValid(token)) {
|
|
2482
52
|
var parsedToken = parseToken(token);
|
|
2483
53
|
var socket = createWebSocket(token);
|
|
2484
54
|
authenticationSuccess(parsedToken, socket);
|
|
@@ -2523,7 +93,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2523
93
|
function genericSubscribe(callback) {
|
|
2524
94
|
state.listeners.storage.push(callback);
|
|
2525
95
|
return function () {
|
|
2526
|
-
return remove(state.listeners.storage, callback);
|
|
96
|
+
return LiveObject.remove(state.listeners.storage, callback);
|
|
2527
97
|
};
|
|
2528
98
|
}
|
|
2529
99
|
|
|
@@ -2531,10 +101,10 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2531
101
|
var cb = function cb(updates) {
|
|
2532
102
|
var relatedUpdates = [];
|
|
2533
103
|
|
|
2534
|
-
for (var _iterator = _createForOfIteratorHelperLoose(updates), _step; !(_step = _iterator()).done;) {
|
|
104
|
+
for (var _iterator = LiveObject._createForOfIteratorHelperLoose(updates), _step; !(_step = _iterator()).done;) {
|
|
2535
105
|
var update = _step.value;
|
|
2536
106
|
|
|
2537
|
-
if (options != null && options.isDeep && isSameNodeOrChildOf(update.node, crdt)) {
|
|
107
|
+
if (options != null && options.isDeep && LiveObject.isSameNodeOrChildOf(update.node, crdt)) {
|
|
2538
108
|
relatedUpdates.push(update);
|
|
2539
109
|
} else if (update.node._id === crdt._id) {
|
|
2540
110
|
innerCallback(update.node);
|
|
@@ -2571,7 +141,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2571
141
|
var parentToChildren = new Map();
|
|
2572
142
|
var root = null;
|
|
2573
143
|
|
|
2574
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(items), _step2; !(_step2 = _iterator2()).done;) {
|
|
144
|
+
for (var _iterator2 = LiveObject._createForOfIteratorHelperLoose(items), _step2; !(_step2 = _iterator2()).done;) {
|
|
2575
145
|
var tuple = _step2.value;
|
|
2576
146
|
var parentId = tuple[1].parentId;
|
|
2577
147
|
|
|
@@ -2604,7 +174,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2604
174
|
state.items.forEach(function (liveCrdt, id) {
|
|
2605
175
|
currentItems.set(id, liveCrdt._toSerializedCrdt());
|
|
2606
176
|
});
|
|
2607
|
-
var ops = getTreesDiffOperations(currentItems, new Map(items));
|
|
177
|
+
var ops = LiveObject.getTreesDiffOperations(currentItems, new Map(items));
|
|
2608
178
|
var result = apply(ops, false);
|
|
2609
179
|
notify(result.updates);
|
|
2610
180
|
}
|
|
@@ -2614,7 +184,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2614
184
|
root = _buildRootAndParentTo[0],
|
|
2615
185
|
parentToChildren = _buildRootAndParentTo[1];
|
|
2616
186
|
|
|
2617
|
-
return LiveObject._deserialize(root, parentToChildren, {
|
|
187
|
+
return LiveObject.LiveObject._deserialize(root, parentToChildren, {
|
|
2618
188
|
getItem: getItem,
|
|
2619
189
|
addItem: addItem,
|
|
2620
190
|
deleteItem: deleteItem,
|
|
@@ -2658,7 +228,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2658
228
|
(_state$batch$ops = state.batch.ops).push.apply(_state$batch$ops, ops);
|
|
2659
229
|
|
|
2660
230
|
storageUpdates.forEach(function (value, key) {
|
|
2661
|
-
state.batch.updates.storageUpdates.set(key, mergeStorageUpdates(state.batch.updates.storageUpdates.get(key), value));
|
|
231
|
+
state.batch.updates.storageUpdates.set(key, LiveObject.mergeStorageUpdates(state.batch.updates.storageUpdates.get(key), value));
|
|
2662
232
|
});
|
|
2663
233
|
|
|
2664
234
|
(_state$batch$reverseO = state.batch.reverseOps).push.apply(_state$batch$reverseO, reverse);
|
|
@@ -2683,10 +253,10 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2683
253
|
if (otherEvents.length > 0) {
|
|
2684
254
|
state.others = makeOthers(state.users);
|
|
2685
255
|
|
|
2686
|
-
for (var _iterator3 = _createForOfIteratorHelperLoose(otherEvents), _step3; !(_step3 = _iterator3()).done;) {
|
|
256
|
+
for (var _iterator3 = LiveObject._createForOfIteratorHelperLoose(otherEvents), _step3; !(_step3 = _iterator3()).done;) {
|
|
2687
257
|
var event = _step3.value;
|
|
2688
258
|
|
|
2689
|
-
for (var _iterator4 = _createForOfIteratorHelperLoose(state.listeners.others), _step4; !(_step4 = _iterator4()).done;) {
|
|
259
|
+
for (var _iterator4 = LiveObject._createForOfIteratorHelperLoose(state.listeners.others), _step4; !(_step4 = _iterator4()).done;) {
|
|
2690
260
|
var _listener = _step4.value;
|
|
2691
261
|
|
|
2692
262
|
_listener(state.others, event);
|
|
@@ -2695,7 +265,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2695
265
|
}
|
|
2696
266
|
|
|
2697
267
|
if (presence) {
|
|
2698
|
-
for (var _iterator5 = _createForOfIteratorHelperLoose(state.listeners["my-presence"]), _step5; !(_step5 = _iterator5()).done;) {
|
|
268
|
+
for (var _iterator5 = LiveObject._createForOfIteratorHelperLoose(state.listeners["my-presence"]), _step5; !(_step5 = _iterator5()).done;) {
|
|
2699
269
|
var _listener2 = _step5.value;
|
|
2700
270
|
|
|
2701
271
|
_listener2(state.me);
|
|
@@ -2703,7 +273,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2703
273
|
}
|
|
2704
274
|
|
|
2705
275
|
if (storageUpdates.size > 0) {
|
|
2706
|
-
for (var _iterator6 = _createForOfIteratorHelperLoose(state.listeners.storage), _step6; !(_step6 = _iterator6()).done;) {
|
|
276
|
+
for (var _iterator6 = LiveObject._createForOfIteratorHelperLoose(state.listeners.storage), _step6; !(_step6 = _iterator6()).done;) {
|
|
2707
277
|
var subscriber = _step6.value;
|
|
2708
278
|
subscriber(Array.from(storageUpdates.values()));
|
|
2709
279
|
}
|
|
@@ -2738,7 +308,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2738
308
|
};
|
|
2739
309
|
var createdNodeIds = new Set();
|
|
2740
310
|
|
|
2741
|
-
for (var _iterator7 = _createForOfIteratorHelperLoose(item), _step7; !(_step7 = _iterator7()).done;) {
|
|
311
|
+
for (var _iterator7 = LiveObject._createForOfIteratorHelperLoose(item), _step7; !(_step7 = _iterator7()).done;) {
|
|
2742
312
|
var op = _step7.value;
|
|
2743
313
|
|
|
2744
314
|
if (op.type === "presence") {
|
|
@@ -2751,7 +321,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2751
321
|
reverse.data[_key2] = state.me[_key2];
|
|
2752
322
|
}
|
|
2753
323
|
|
|
2754
|
-
state.me = _extends({}, state.me, op.data);
|
|
324
|
+
state.me = LiveObject._extends({}, state.me, op.data);
|
|
2755
325
|
|
|
2756
326
|
if (state.buffer.presence == null) {
|
|
2757
327
|
state.buffer.presence = op.data;
|
|
@@ -2778,12 +348,12 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2778
348
|
if (!createdNodeIds.has(parentId)) {
|
|
2779
349
|
var _result$reverse;
|
|
2780
350
|
|
|
2781
|
-
result.updates.storageUpdates.set(applyOpResult.modified.node._id, mergeStorageUpdates(result.updates.storageUpdates.get(applyOpResult.modified.node._id), applyOpResult.modified));
|
|
351
|
+
result.updates.storageUpdates.set(applyOpResult.modified.node._id, LiveObject.mergeStorageUpdates(result.updates.storageUpdates.get(applyOpResult.modified.node._id), applyOpResult.modified));
|
|
2782
352
|
|
|
2783
353
|
(_result$reverse = result.reverse).unshift.apply(_result$reverse, applyOpResult.reverse);
|
|
2784
354
|
}
|
|
2785
355
|
|
|
2786
|
-
if (op.type === OpType.CreateList || op.type === OpType.CreateMap || op.type === OpType.CreateObject) {
|
|
356
|
+
if (op.type === LiveObject.OpType.CreateList || op.type === LiveObject.OpType.CreateMap || op.type === LiveObject.OpType.CreateObject) {
|
|
2787
357
|
createdNodeIds.add(applyOpResult.modified.node._id);
|
|
2788
358
|
}
|
|
2789
359
|
}
|
|
@@ -2799,9 +369,9 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2799
369
|
}
|
|
2800
370
|
|
|
2801
371
|
switch (op.type) {
|
|
2802
|
-
case OpType.DeleteObjectKey:
|
|
2803
|
-
case OpType.UpdateObject:
|
|
2804
|
-
case OpType.DeleteCrdt:
|
|
372
|
+
case LiveObject.OpType.DeleteObjectKey:
|
|
373
|
+
case LiveObject.OpType.UpdateObject:
|
|
374
|
+
case LiveObject.OpType.DeleteCrdt:
|
|
2805
375
|
{
|
|
2806
376
|
var item = state.items.get(op.id);
|
|
2807
377
|
|
|
@@ -2814,7 +384,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2814
384
|
return item._apply(op, isLocal);
|
|
2815
385
|
}
|
|
2816
386
|
|
|
2817
|
-
case OpType.SetParentKey:
|
|
387
|
+
case LiveObject.OpType.SetParentKey:
|
|
2818
388
|
{
|
|
2819
389
|
var _item = state.items.get(op.id);
|
|
2820
390
|
|
|
@@ -2824,7 +394,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2824
394
|
};
|
|
2825
395
|
}
|
|
2826
396
|
|
|
2827
|
-
if (_item._parent instanceof LiveList) {
|
|
397
|
+
if (_item._parent instanceof LiveObject.LiveList) {
|
|
2828
398
|
var previousKey = _item._parentKey;
|
|
2829
399
|
|
|
2830
400
|
if (previousKey === op.parentKey) {
|
|
@@ -2841,10 +411,10 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2841
411
|
};
|
|
2842
412
|
}
|
|
2843
413
|
|
|
2844
|
-
case OpType.CreateObject:
|
|
2845
|
-
case OpType.CreateList:
|
|
2846
|
-
case OpType.CreateMap:
|
|
2847
|
-
case OpType.CreateRegister:
|
|
414
|
+
case LiveObject.OpType.CreateObject:
|
|
415
|
+
case LiveObject.OpType.CreateList:
|
|
416
|
+
case LiveObject.OpType.CreateMap:
|
|
417
|
+
case LiveObject.OpType.CreateRegister:
|
|
2848
418
|
{
|
|
2849
419
|
var parent = state.items.get(op.parentId);
|
|
2850
420
|
|
|
@@ -2857,14 +427,10 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2857
427
|
return parent._attachChild(op, isLocal);
|
|
2858
428
|
}
|
|
2859
429
|
}
|
|
2860
|
-
|
|
2861
|
-
return {
|
|
2862
|
-
modified: false
|
|
2863
|
-
};
|
|
2864
430
|
}
|
|
2865
431
|
|
|
2866
432
|
function subscribe(firstParam, listener, options) {
|
|
2867
|
-
if (firstParam instanceof AbstractCrdt) {
|
|
433
|
+
if (firstParam instanceof LiveObject.AbstractCrdt) {
|
|
2868
434
|
return crdtSubscribe(firstParam, listener, options);
|
|
2869
435
|
} else if (typeof firstParam === "function") {
|
|
2870
436
|
return genericSubscribe(firstParam);
|
|
@@ -2875,7 +441,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2875
441
|
state.listeners[firstParam].push(listener);
|
|
2876
442
|
return function () {
|
|
2877
443
|
var callbacks = state.listeners[firstParam];
|
|
2878
|
-
remove(callbacks, listener);
|
|
444
|
+
LiveObject.remove(callbacks, listener);
|
|
2879
445
|
};
|
|
2880
446
|
}
|
|
2881
447
|
|
|
@@ -2887,7 +453,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2887
453
|
}
|
|
2888
454
|
|
|
2889
455
|
var callbacks = state.listeners[event];
|
|
2890
|
-
remove(callbacks, callback);
|
|
456
|
+
LiveObject.remove(callbacks, callback);
|
|
2891
457
|
}
|
|
2892
458
|
|
|
2893
459
|
function getConnectionState() {
|
|
@@ -2928,7 +494,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
2928
494
|
oldValues[_key4] = state.me[_key4];
|
|
2929
495
|
}
|
|
2930
496
|
|
|
2931
|
-
state.me = _extends({}, state.me, overrides);
|
|
497
|
+
state.me = LiveObject._extends({}, state.me, overrides);
|
|
2932
498
|
|
|
2933
499
|
if (state.isBatching) {
|
|
2934
500
|
if (options != null && options.addToHistory) {
|
|
@@ -3007,7 +573,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3007
573
|
id: user.id,
|
|
3008
574
|
info: user.info,
|
|
3009
575
|
connectionId: message.actor,
|
|
3010
|
-
presence: _extends({}, user.presence, message.data),
|
|
576
|
+
presence: LiveObject._extends({}, user.presence, message.data),
|
|
3011
577
|
_hasReceivedInitialPresence: true
|
|
3012
578
|
};
|
|
3013
579
|
}
|
|
@@ -3061,7 +627,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3061
627
|
}
|
|
3062
628
|
|
|
3063
629
|
function onEvent(message) {
|
|
3064
|
-
for (var _iterator8 = _createForOfIteratorHelperLoose(state.listeners.event), _step8; !(_step8 = _iterator8()).done;) {
|
|
630
|
+
for (var _iterator8 = LiveObject._createForOfIteratorHelperLoose(state.listeners.event), _step8; !(_step8 = _iterator8()).done;) {
|
|
3065
631
|
var _listener3 = _step8.value;
|
|
3066
632
|
|
|
3067
633
|
_listener3({
|
|
@@ -3081,7 +647,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3081
647
|
|
|
3082
648
|
if (state.me) {
|
|
3083
649
|
state.buffer.messages.push({
|
|
3084
|
-
type: ClientMessageType.UpdatePresence,
|
|
650
|
+
type: LiveObject.ClientMessageType.UpdatePresence,
|
|
3085
651
|
data: state.me,
|
|
3086
652
|
targetActor: message.actor
|
|
3087
653
|
});
|
|
@@ -3095,7 +661,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3095
661
|
}
|
|
3096
662
|
|
|
3097
663
|
function parseServerMessage(data) {
|
|
3098
|
-
if (!isJsonObject(data)) {
|
|
664
|
+
if (!LiveObject.isJsonObject(data)) {
|
|
3099
665
|
return null;
|
|
3100
666
|
}
|
|
3101
667
|
|
|
@@ -3103,16 +669,16 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3103
669
|
}
|
|
3104
670
|
|
|
3105
671
|
function parseServerMessages(text) {
|
|
3106
|
-
var data = parseJson(text);
|
|
672
|
+
var data = LiveObject.parseJson(text);
|
|
3107
673
|
|
|
3108
674
|
if (data === undefined) {
|
|
3109
675
|
return null;
|
|
3110
|
-
} else if (isJsonArray(data)) {
|
|
3111
|
-
return compact(data.map(function (item) {
|
|
676
|
+
} else if (LiveObject.isJsonArray(data)) {
|
|
677
|
+
return LiveObject.compact(data.map(function (item) {
|
|
3112
678
|
return parseServerMessage(item);
|
|
3113
679
|
}));
|
|
3114
680
|
} else {
|
|
3115
|
-
return compact([parseServerMessage(data)]);
|
|
681
|
+
return LiveObject.compact([parseServerMessage(data)]);
|
|
3116
682
|
}
|
|
3117
683
|
}
|
|
3118
684
|
|
|
@@ -3133,17 +699,17 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3133
699
|
others: []
|
|
3134
700
|
};
|
|
3135
701
|
|
|
3136
|
-
for (var _iterator9 = _createForOfIteratorHelperLoose(messages), _step9; !(_step9 = _iterator9()).done;) {
|
|
702
|
+
for (var _iterator9 = LiveObject._createForOfIteratorHelperLoose(messages), _step9; !(_step9 = _iterator9()).done;) {
|
|
3137
703
|
var message = _step9.value;
|
|
3138
704
|
|
|
3139
705
|
switch (message.type) {
|
|
3140
|
-
case ServerMessageType.UserJoined:
|
|
706
|
+
case LiveObject.ServerMessageType.UserJoined:
|
|
3141
707
|
{
|
|
3142
708
|
updates.others.push(onUserJoinedMessage(message));
|
|
3143
709
|
break;
|
|
3144
710
|
}
|
|
3145
711
|
|
|
3146
|
-
case ServerMessageType.UpdatePresence:
|
|
712
|
+
case LiveObject.ServerMessageType.UpdatePresence:
|
|
3147
713
|
{
|
|
3148
714
|
var othersPresenceUpdate = onUpdatePresenceMessage(message);
|
|
3149
715
|
|
|
@@ -3154,13 +720,13 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3154
720
|
break;
|
|
3155
721
|
}
|
|
3156
722
|
|
|
3157
|
-
case ServerMessageType.Event:
|
|
723
|
+
case LiveObject.ServerMessageType.Event:
|
|
3158
724
|
{
|
|
3159
725
|
onEvent(message);
|
|
3160
726
|
break;
|
|
3161
727
|
}
|
|
3162
728
|
|
|
3163
|
-
case ServerMessageType.UserLeft:
|
|
729
|
+
case LiveObject.ServerMessageType.UserLeft:
|
|
3164
730
|
{
|
|
3165
731
|
var _event = onUserLeftMessage(message);
|
|
3166
732
|
|
|
@@ -3171,13 +737,13 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3171
737
|
break;
|
|
3172
738
|
}
|
|
3173
739
|
|
|
3174
|
-
case ServerMessageType.RoomState:
|
|
740
|
+
case LiveObject.ServerMessageType.RoomState:
|
|
3175
741
|
{
|
|
3176
742
|
updates.others.push(onRoomStateMessage(message));
|
|
3177
743
|
break;
|
|
3178
744
|
}
|
|
3179
745
|
|
|
3180
|
-
case ServerMessageType.InitialStorageState:
|
|
746
|
+
case LiveObject.ServerMessageType.InitialStorageState:
|
|
3181
747
|
{
|
|
3182
748
|
var offlineOps = new Map(state.offlineOperations);
|
|
3183
749
|
createOrUpdateRootFromMessage(message);
|
|
@@ -3186,11 +752,11 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3186
752
|
break;
|
|
3187
753
|
}
|
|
3188
754
|
|
|
3189
|
-
case ServerMessageType.UpdateStorage:
|
|
755
|
+
case LiveObject.ServerMessageType.UpdateStorage:
|
|
3190
756
|
{
|
|
3191
757
|
var applyResult = apply(message.ops, false);
|
|
3192
758
|
applyResult.updates.storageUpdates.forEach(function (value, key) {
|
|
3193
|
-
updates.storageUpdates.set(key, mergeStorageUpdates(updates.storageUpdates.get(key), value));
|
|
759
|
+
updates.storageUpdates.set(key, LiveObject.mergeStorageUpdates(updates.storageUpdates.get(key), value));
|
|
3194
760
|
});
|
|
3195
761
|
break;
|
|
3196
762
|
}
|
|
@@ -3223,7 +789,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3223
789
|
});
|
|
3224
790
|
var error = new LiveblocksError(event.reason, event.code);
|
|
3225
791
|
|
|
3226
|
-
for (var _iterator10 = _createForOfIteratorHelperLoose(state.listeners.error), _step10; !(_step10 = _iterator10()).done;) {
|
|
792
|
+
for (var _iterator10 = LiveObject._createForOfIteratorHelperLoose(state.listeners.error), _step10; !(_step10 = _iterator10()).done;) {
|
|
3227
793
|
var _listener4 = _step10.value;
|
|
3228
794
|
|
|
3229
795
|
_listener4(error);
|
|
@@ -3241,7 +807,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3241
807
|
state: "unavailable"
|
|
3242
808
|
});
|
|
3243
809
|
state.timeoutHandles.reconnect = effects.scheduleReconnect(_delay);
|
|
3244
|
-
} else if (event.code === WebsocketCloseCodes.CLOSE_WITHOUT_RETRY) {
|
|
810
|
+
} else if (event.code === LiveObject.WebsocketCloseCodes.CLOSE_WITHOUT_RETRY) {
|
|
3245
811
|
updateConnection({
|
|
3246
812
|
state: "closed"
|
|
3247
813
|
});
|
|
@@ -3264,7 +830,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3264
830
|
function updateConnection(connection) {
|
|
3265
831
|
state.connection = connection;
|
|
3266
832
|
|
|
3267
|
-
for (var _iterator11 = _createForOfIteratorHelperLoose(state.listeners.connection), _step11; !(_step11 = _iterator11()).done;) {
|
|
833
|
+
for (var _iterator11 = LiveObject._createForOfIteratorHelperLoose(state.listeners.connection), _step11; !(_step11 = _iterator11()).done;) {
|
|
3268
834
|
var _listener5 = _step11.value;
|
|
3269
835
|
|
|
3270
836
|
_listener5(connection.state);
|
|
@@ -3290,7 +856,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3290
856
|
state.intervalHandles.heartbeat = effects.startHeartbeatInterval();
|
|
3291
857
|
|
|
3292
858
|
if (state.connection.state === "connecting") {
|
|
3293
|
-
updateConnection(_extends({}, state.connection, {
|
|
859
|
+
updateConnection(LiveObject._extends({}, state.connection, {
|
|
3294
860
|
state: "open"
|
|
3295
861
|
}));
|
|
3296
862
|
state.numberOfRetry = 0;
|
|
@@ -3304,7 +870,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3304
870
|
|
|
3305
871
|
if (state.root) {
|
|
3306
872
|
state.buffer.messages.push({
|
|
3307
|
-
type: ClientMessageType.FetchStorage
|
|
873
|
+
type: LiveObject.ClientMessageType.FetchStorage
|
|
3308
874
|
});
|
|
3309
875
|
}
|
|
3310
876
|
|
|
@@ -3362,7 +928,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3362
928
|
var ops = Array.from(offlineOps.values());
|
|
3363
929
|
var result = apply(ops, true);
|
|
3364
930
|
messages.push({
|
|
3365
|
-
type: ClientMessageType.UpdateStorage,
|
|
931
|
+
type: LiveObject.ClientMessageType.UpdateStorage,
|
|
3366
932
|
ops: ops
|
|
3367
933
|
});
|
|
3368
934
|
notify(result.updates);
|
|
@@ -3414,19 +980,19 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3414
980
|
|
|
3415
981
|
if (state.buffer.presence) {
|
|
3416
982
|
messages.push({
|
|
3417
|
-
type: ClientMessageType.UpdatePresence,
|
|
983
|
+
type: LiveObject.ClientMessageType.UpdatePresence,
|
|
3418
984
|
data: state.buffer.presence
|
|
3419
985
|
});
|
|
3420
986
|
}
|
|
3421
987
|
|
|
3422
|
-
for (var _iterator12 = _createForOfIteratorHelperLoose(state.buffer.messages), _step12; !(_step12 = _iterator12()).done;) {
|
|
988
|
+
for (var _iterator12 = LiveObject._createForOfIteratorHelperLoose(state.buffer.messages), _step12; !(_step12 = _iterator12()).done;) {
|
|
3423
989
|
var event = _step12.value;
|
|
3424
990
|
messages.push(event);
|
|
3425
991
|
}
|
|
3426
992
|
|
|
3427
993
|
if (state.buffer.storageOperations.length > 0) {
|
|
3428
994
|
messages.push({
|
|
3429
|
-
type: ClientMessageType.UpdateStorage,
|
|
995
|
+
type: LiveObject.ClientMessageType.UpdateStorage,
|
|
3430
996
|
ops: state.buffer.storageOperations
|
|
3431
997
|
});
|
|
3432
998
|
}
|
|
@@ -3490,7 +1056,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3490
1056
|
}
|
|
3491
1057
|
|
|
3492
1058
|
state.buffer.messages.push({
|
|
3493
|
-
type: ClientMessageType.ClientEvent,
|
|
1059
|
+
type: LiveObject.ClientMessageType.ClientEvent,
|
|
3494
1060
|
event: event
|
|
3495
1061
|
});
|
|
3496
1062
|
tryFlushing();
|
|
@@ -3518,7 +1084,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3518
1084
|
|
|
3519
1085
|
if (_getInitialStatePromise == null) {
|
|
3520
1086
|
state.buffer.messages.push({
|
|
3521
|
-
type: ClientMessageType.FetchStorage
|
|
1087
|
+
type: LiveObject.ClientMessageType.FetchStorage
|
|
3522
1088
|
});
|
|
3523
1089
|
tryFlushing();
|
|
3524
1090
|
_getInitialStatePromise = new Promise(function (resolve) {
|
|
@@ -3549,7 +1115,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3549
1115
|
notify(result.updates);
|
|
3550
1116
|
state.redoStack.push(result.reverse);
|
|
3551
1117
|
|
|
3552
|
-
for (var _iterator13 = _createForOfIteratorHelperLoose(historyItem), _step13; !(_step13 = _iterator13()).done;) {
|
|
1118
|
+
for (var _iterator13 = LiveObject._createForOfIteratorHelperLoose(historyItem), _step13; !(_step13 = _iterator13()).done;) {
|
|
3553
1119
|
var op = _step13.value;
|
|
3554
1120
|
|
|
3555
1121
|
if (op.type !== "presence") {
|
|
@@ -3576,7 +1142,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3576
1142
|
notify(result.updates);
|
|
3577
1143
|
state.undoStack.push(result.reverse);
|
|
3578
1144
|
|
|
3579
|
-
for (var _iterator14 = _createForOfIteratorHelperLoose(historyItem), _step14; !(_step14 = _iterator14()).done;) {
|
|
1145
|
+
for (var _iterator14 = LiveObject._createForOfIteratorHelperLoose(historyItem), _step14; !(_step14 = _iterator14()).done;) {
|
|
3580
1146
|
var op = _step14.value;
|
|
3581
1147
|
|
|
3582
1148
|
if (op.type !== "presence") {
|
|
@@ -3687,7 +1253,7 @@ function makeStateMachine(state, context, mockedEffects) {
|
|
|
3687
1253
|
}
|
|
3688
1254
|
};
|
|
3689
1255
|
}
|
|
3690
|
-
function defaultState(
|
|
1256
|
+
function defaultState(initialPresence, initialStorage) {
|
|
3691
1257
|
return {
|
|
3692
1258
|
connection: {
|
|
3693
1259
|
state: "closed"
|
|
@@ -3711,17 +1277,17 @@ function defaultState(me, defaultStorageRoot) {
|
|
|
3711
1277
|
pongTimeout: 0
|
|
3712
1278
|
},
|
|
3713
1279
|
buffer: {
|
|
3714
|
-
presence:
|
|
1280
|
+
presence: initialPresence == null ? {} : initialPresence,
|
|
3715
1281
|
messages: [],
|
|
3716
1282
|
storageOperations: []
|
|
3717
1283
|
},
|
|
3718
1284
|
intervalHandles: {
|
|
3719
1285
|
heartbeat: 0
|
|
3720
1286
|
},
|
|
3721
|
-
me:
|
|
1287
|
+
me: initialPresence == null ? {} : initialPresence,
|
|
3722
1288
|
users: {},
|
|
3723
1289
|
others: makeOthers({}),
|
|
3724
|
-
defaultStorageRoot:
|
|
1290
|
+
defaultStorageRoot: initialStorage,
|
|
3725
1291
|
idFactory: null,
|
|
3726
1292
|
clock: 0,
|
|
3727
1293
|
opClock: 0,
|
|
@@ -3745,7 +1311,11 @@ function defaultState(me, defaultStorageRoot) {
|
|
|
3745
1311
|
};
|
|
3746
1312
|
}
|
|
3747
1313
|
function createRoom(options, context) {
|
|
3748
|
-
var
|
|
1314
|
+
var _options$initialPrese, _options$initialStora;
|
|
1315
|
+
|
|
1316
|
+
var initialPresence = (_options$initialPrese = options.initialPresence) != null ? _options$initialPrese : options.defaultPresence;
|
|
1317
|
+
var initialStorage = (_options$initialStora = options.initialStorage) != null ? _options$initialStora : options.defaultStorageRoot;
|
|
1318
|
+
var state = defaultState(typeof initialPresence === "function" ? initialPresence(context.roomId) : initialPresence, typeof initialStorage === "function" ? initialStorage(context.roomId) : initialStorage);
|
|
3749
1319
|
var machine = makeStateMachine(state, context);
|
|
3750
1320
|
var room = {
|
|
3751
1321
|
id: context.roomId,
|
|
@@ -3780,7 +1350,7 @@ function createRoom(options, context) {
|
|
|
3780
1350
|
}
|
|
3781
1351
|
|
|
3782
1352
|
var LiveblocksError = function (_Error) {
|
|
3783
|
-
_inheritsLoose(LiveblocksError, _Error);
|
|
1353
|
+
LiveObject._inheritsLoose(LiveblocksError, _Error);
|
|
3784
1354
|
|
|
3785
1355
|
function LiveblocksError(message, code) {
|
|
3786
1356
|
var _this;
|
|
@@ -3791,7 +1361,7 @@ var LiveblocksError = function (_Error) {
|
|
|
3791
1361
|
}
|
|
3792
1362
|
|
|
3793
1363
|
return LiveblocksError;
|
|
3794
|
-
}(_wrapNativeSuper(Error));
|
|
1364
|
+
}(LiveObject._wrapNativeSuper(Error));
|
|
3795
1365
|
|
|
3796
1366
|
function parseToken(token) {
|
|
3797
1367
|
var tokenParts = token.split(".");
|
|
@@ -3800,9 +1370,9 @@ function parseToken(token) {
|
|
|
3800
1370
|
throw new Error("Authentication error. Liveblocks could not parse the response of your authentication endpoint");
|
|
3801
1371
|
}
|
|
3802
1372
|
|
|
3803
|
-
var data = parseJson(atob(tokenParts[1]));
|
|
1373
|
+
var data = LiveObject.parseJson(atob(tokenParts[1]));
|
|
3804
1374
|
|
|
3805
|
-
if (data !== undefined && isJsonObject(data) && typeof data.actor === "number" && (data.id === undefined || typeof data.id === "string")) {
|
|
1375
|
+
if (data !== undefined && LiveObject.isJsonObject(data) && typeof data.actor === "number" && (data.id === undefined || typeof data.id === "string")) {
|
|
3806
1376
|
return {
|
|
3807
1377
|
actor: data.actor,
|
|
3808
1378
|
id: data.id,
|
|
@@ -3882,14 +1452,14 @@ function fetchAuthEndpoint(fetch, endpoint, body) {
|
|
|
3882
1452
|
}
|
|
3883
1453
|
|
|
3884
1454
|
var AuthenticationError = function (_Error2) {
|
|
3885
|
-
_inheritsLoose(AuthenticationError, _Error2);
|
|
1455
|
+
LiveObject._inheritsLoose(AuthenticationError, _Error2);
|
|
3886
1456
|
|
|
3887
1457
|
function AuthenticationError(message) {
|
|
3888
1458
|
return _Error2.call(this, message) || this;
|
|
3889
1459
|
}
|
|
3890
1460
|
|
|
3891
1461
|
return AuthenticationError;
|
|
3892
|
-
}(_wrapNativeSuper(Error));
|
|
1462
|
+
}(LiveObject._wrapNativeSuper(Error));
|
|
3893
1463
|
|
|
3894
1464
|
function createClient(options) {
|
|
3895
1465
|
var clientOptions = options;
|
|
@@ -3912,7 +1482,11 @@ function createClient(options) {
|
|
|
3912
1482
|
return internalRoom.room;
|
|
3913
1483
|
}
|
|
3914
1484
|
|
|
1485
|
+
LiveObject.deprecateIf(options.defaultPresence, "Argument `defaultPresence` will be removed in @liveblocks/client 0.18. Please use `initialPresence` instead. For more info, see https://bit.ly/3Niy5aP", "defaultPresence");
|
|
1486
|
+
LiveObject.deprecateIf(options.defaultStorageRoot, "Argument `defaultStorageRoot` will be removed in @liveblocks/client 0.18. Please use `initialStorage` instead. For more info, see https://bit.ly/3Niy5aP", "defaultStorageRoot");
|
|
3915
1487
|
internalRoom = createRoom({
|
|
1488
|
+
initialPresence: options.initialPresence,
|
|
1489
|
+
initialStorage: options.initialStorage,
|
|
3916
1490
|
defaultPresence: options.defaultPresence,
|
|
3917
1491
|
defaultStorageRoot: options.defaultStorageRoot
|
|
3918
1492
|
}, {
|
|
@@ -3943,7 +1517,7 @@ function createClient(options) {
|
|
|
3943
1517
|
|
|
3944
1518
|
if (typeof window !== "undefined") {
|
|
3945
1519
|
window.addEventListener("online", function () {
|
|
3946
|
-
for (var _iterator = _createForOfIteratorHelperLoose(rooms), _step; !(_step = _iterator()).done;) {
|
|
1520
|
+
for (var _iterator = LiveObject._createForOfIteratorHelperLoose(rooms), _step; !(_step = _iterator()).done;) {
|
|
3947
1521
|
var _step$value = _step.value,
|
|
3948
1522
|
room = _step$value[1];
|
|
3949
1523
|
room.onNavigatorOnline();
|
|
@@ -3953,7 +1527,7 @@ function createClient(options) {
|
|
|
3953
1527
|
|
|
3954
1528
|
if (typeof document !== "undefined") {
|
|
3955
1529
|
document.addEventListener("visibilitychange", function () {
|
|
3956
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(rooms), _step2; !(_step2 = _iterator2()).done;) {
|
|
1530
|
+
for (var _iterator2 = LiveObject._createForOfIteratorHelperLoose(rooms), _step2; !(_step2 = _iterator2()).done;) {
|
|
3957
1531
|
var _step2$value = _step2.value,
|
|
3958
1532
|
room = _step2$value[1];
|
|
3959
1533
|
room.onVisibilityChange(document.visibilityState);
|
|
@@ -4002,357 +1576,7 @@ function prepareAuthentication(clientOptions) {
|
|
|
4002
1576
|
throw new Error("Invalid Liveblocks client options. For more information: https://liveblocks.io/docs/api-reference/liveblocks-client#createClient");
|
|
4003
1577
|
}
|
|
4004
1578
|
|
|
4005
|
-
|
|
4006
|
-
|
|
4007
|
-
|
|
4008
|
-
for (var _key in obj) {
|
|
4009
|
-
var val = obj[_key];
|
|
4010
|
-
|
|
4011
|
-
if (val !== undefined) {
|
|
4012
|
-
result[_key] = lsonToJson(val);
|
|
4013
|
-
}
|
|
4014
|
-
}
|
|
4015
|
-
|
|
4016
|
-
return result;
|
|
4017
|
-
}
|
|
4018
|
-
|
|
4019
|
-
function liveObjectToJson(liveObject) {
|
|
4020
|
-
return lsonObjectToJson(liveObject.toObject());
|
|
4021
|
-
}
|
|
4022
|
-
|
|
4023
|
-
function liveMapToJson(map) {
|
|
4024
|
-
var result = {};
|
|
4025
|
-
|
|
4026
|
-
for (var _iterator = _createForOfIteratorHelperLoose(map.entries()), _step; !(_step = _iterator()).done;) {
|
|
4027
|
-
var _step$value = _step.value,
|
|
4028
|
-
_key2 = _step$value[0],
|
|
4029
|
-
value = _step$value[1];
|
|
4030
|
-
result[_key2] = lsonToJson(value);
|
|
4031
|
-
}
|
|
4032
|
-
|
|
4033
|
-
return result;
|
|
4034
|
-
}
|
|
4035
|
-
|
|
4036
|
-
function lsonListToJson(value) {
|
|
4037
|
-
return value.map(lsonToJson);
|
|
4038
|
-
}
|
|
4039
|
-
|
|
4040
|
-
function liveListToJson(value) {
|
|
4041
|
-
return lsonListToJson(value.toArray());
|
|
4042
|
-
}
|
|
4043
|
-
|
|
4044
|
-
function lsonToJson(value) {
|
|
4045
|
-
if (value instanceof LiveObject) {
|
|
4046
|
-
return liveObjectToJson(value);
|
|
4047
|
-
} else if (value instanceof LiveList) {
|
|
4048
|
-
return liveListToJson(value);
|
|
4049
|
-
} else if (value instanceof LiveMap) {
|
|
4050
|
-
return liveMapToJson(value);
|
|
4051
|
-
} else if (value instanceof LiveRegister) {
|
|
4052
|
-
return value.data;
|
|
4053
|
-
} else if (value instanceof AbstractCrdt) {
|
|
4054
|
-
throw new Error("Unhandled subclass of AbstractCrdt encountered");
|
|
4055
|
-
}
|
|
4056
|
-
|
|
4057
|
-
if (Array.isArray(value)) {
|
|
4058
|
-
return lsonListToJson(value);
|
|
4059
|
-
} else if (isPlainObject(value)) {
|
|
4060
|
-
return lsonObjectToJson(value);
|
|
4061
|
-
}
|
|
4062
|
-
|
|
4063
|
-
return value;
|
|
4064
|
-
}
|
|
4065
|
-
|
|
4066
|
-
function isPlainObject(obj) {
|
|
4067
|
-
return obj !== null && Object.prototype.toString.call(obj) === "[object Object]";
|
|
4068
|
-
}
|
|
4069
|
-
|
|
4070
|
-
function anyToCrdt(obj) {
|
|
4071
|
-
if (obj == null) {
|
|
4072
|
-
return obj;
|
|
4073
|
-
}
|
|
4074
|
-
|
|
4075
|
-
if (Array.isArray(obj)) {
|
|
4076
|
-
return new LiveList(obj.map(anyToCrdt));
|
|
4077
|
-
}
|
|
4078
|
-
|
|
4079
|
-
if (isPlainObject(obj)) {
|
|
4080
|
-
var init = {};
|
|
4081
|
-
|
|
4082
|
-
for (var _key3 in obj) {
|
|
4083
|
-
init[_key3] = anyToCrdt(obj[_key3]);
|
|
4084
|
-
}
|
|
4085
|
-
|
|
4086
|
-
return new LiveObject(init);
|
|
4087
|
-
}
|
|
4088
|
-
|
|
4089
|
-
return obj;
|
|
4090
|
-
}
|
|
4091
|
-
|
|
4092
|
-
function patchLiveList(liveList, prev, next) {
|
|
4093
|
-
var i = 0;
|
|
4094
|
-
var prevEnd = prev.length - 1;
|
|
4095
|
-
var nextEnd = next.length - 1;
|
|
4096
|
-
var prevNode = prev[0];
|
|
4097
|
-
var nextNode = next[0];
|
|
4098
|
-
|
|
4099
|
-
outer: {
|
|
4100
|
-
while (prevNode === nextNode) {
|
|
4101
|
-
++i;
|
|
4102
|
-
|
|
4103
|
-
if (i > prevEnd || i > nextEnd) {
|
|
4104
|
-
break outer;
|
|
4105
|
-
}
|
|
4106
|
-
|
|
4107
|
-
prevNode = prev[i];
|
|
4108
|
-
nextNode = next[i];
|
|
4109
|
-
}
|
|
4110
|
-
|
|
4111
|
-
prevNode = prev[prevEnd];
|
|
4112
|
-
nextNode = next[nextEnd];
|
|
4113
|
-
|
|
4114
|
-
while (prevNode === nextNode) {
|
|
4115
|
-
prevEnd--;
|
|
4116
|
-
nextEnd--;
|
|
4117
|
-
|
|
4118
|
-
if (i > prevEnd || i > nextEnd) {
|
|
4119
|
-
break outer;
|
|
4120
|
-
}
|
|
4121
|
-
|
|
4122
|
-
prevNode = prev[prevEnd];
|
|
4123
|
-
nextNode = next[nextEnd];
|
|
4124
|
-
}
|
|
4125
|
-
}
|
|
4126
|
-
|
|
4127
|
-
if (i > prevEnd) {
|
|
4128
|
-
if (i <= nextEnd) {
|
|
4129
|
-
while (i <= nextEnd) {
|
|
4130
|
-
liveList.insert(anyToCrdt(next[i]), i);
|
|
4131
|
-
i++;
|
|
4132
|
-
}
|
|
4133
|
-
}
|
|
4134
|
-
} else if (i > nextEnd) {
|
|
4135
|
-
var localI = i;
|
|
4136
|
-
|
|
4137
|
-
while (localI <= prevEnd) {
|
|
4138
|
-
liveList.delete(i);
|
|
4139
|
-
localI++;
|
|
4140
|
-
}
|
|
4141
|
-
} else {
|
|
4142
|
-
while (i <= prevEnd && i <= nextEnd) {
|
|
4143
|
-
prevNode = prev[i];
|
|
4144
|
-
nextNode = next[i];
|
|
4145
|
-
var liveListNode = liveList.get(i);
|
|
4146
|
-
|
|
4147
|
-
if (liveListNode instanceof LiveObject && isPlainObject(prevNode) && isPlainObject(nextNode)) {
|
|
4148
|
-
patchLiveObject(liveListNode, prevNode, nextNode);
|
|
4149
|
-
} else {
|
|
4150
|
-
liveList.set(i, anyToCrdt(nextNode));
|
|
4151
|
-
}
|
|
4152
|
-
|
|
4153
|
-
i++;
|
|
4154
|
-
}
|
|
4155
|
-
|
|
4156
|
-
while (i <= nextEnd) {
|
|
4157
|
-
liveList.insert(anyToCrdt(next[i]), i);
|
|
4158
|
-
i++;
|
|
4159
|
-
}
|
|
4160
|
-
|
|
4161
|
-
var _localI = i;
|
|
4162
|
-
|
|
4163
|
-
while (_localI <= prevEnd) {
|
|
4164
|
-
liveList.delete(i);
|
|
4165
|
-
_localI++;
|
|
4166
|
-
}
|
|
4167
|
-
}
|
|
4168
|
-
}
|
|
4169
|
-
function patchLiveObjectKey(liveObject, key, prev, next) {
|
|
4170
|
-
if (process.env.NODE_ENV !== "production") {
|
|
4171
|
-
var nonSerializableValue = findNonSerializableValue(next);
|
|
4172
|
-
|
|
4173
|
-
if (nonSerializableValue) {
|
|
4174
|
-
console.error("New state path: '" + nonSerializableValue.path + "' value: '" + nonSerializableValue.value + "' is not serializable.\nOnly serializable value can be synced with Liveblocks.");
|
|
4175
|
-
return;
|
|
4176
|
-
}
|
|
4177
|
-
}
|
|
4178
|
-
|
|
4179
|
-
var value = liveObject.get(key);
|
|
4180
|
-
|
|
4181
|
-
if (next === undefined) {
|
|
4182
|
-
liveObject.delete(key);
|
|
4183
|
-
} else if (value === undefined) {
|
|
4184
|
-
liveObject.set(key, anyToCrdt(next));
|
|
4185
|
-
} else if (prev === next) {
|
|
4186
|
-
return;
|
|
4187
|
-
} else if (value instanceof LiveList && Array.isArray(prev) && Array.isArray(next)) {
|
|
4188
|
-
patchLiveList(value, prev, next);
|
|
4189
|
-
} else if (value instanceof LiveObject && isPlainObject(prev) && isPlainObject(next)) {
|
|
4190
|
-
patchLiveObject(value, prev, next);
|
|
4191
|
-
} else {
|
|
4192
|
-
liveObject.set(key, anyToCrdt(next));
|
|
4193
|
-
}
|
|
4194
|
-
}
|
|
4195
|
-
function patchLiveObject(root, prev, next) {
|
|
4196
|
-
var updates = {};
|
|
4197
|
-
|
|
4198
|
-
for (var _key4 in next) {
|
|
4199
|
-
patchLiveObjectKey(root, _key4, prev[_key4], next[_key4]);
|
|
4200
|
-
}
|
|
4201
|
-
|
|
4202
|
-
for (var _key5 in prev) {
|
|
4203
|
-
if (next[_key5] === undefined) {
|
|
4204
|
-
root.delete(_key5);
|
|
4205
|
-
}
|
|
4206
|
-
}
|
|
4207
|
-
|
|
4208
|
-
if (Object.keys(updates).length > 0) {
|
|
4209
|
-
root.update(updates);
|
|
4210
|
-
}
|
|
4211
|
-
}
|
|
4212
|
-
|
|
4213
|
-
function getParentsPath(node) {
|
|
4214
|
-
var path = [];
|
|
4215
|
-
|
|
4216
|
-
while (node._parentKey != null && node._parent != null) {
|
|
4217
|
-
if (node._parent instanceof LiveList) {
|
|
4218
|
-
path.push(node._parent._indexOfPosition(node._parentKey));
|
|
4219
|
-
} else {
|
|
4220
|
-
path.push(node._parentKey);
|
|
4221
|
-
}
|
|
4222
|
-
|
|
4223
|
-
node = node._parent;
|
|
4224
|
-
}
|
|
4225
|
-
|
|
4226
|
-
return path;
|
|
4227
|
-
}
|
|
4228
|
-
|
|
4229
|
-
function patchImmutableObject(state, updates) {
|
|
4230
|
-
return updates.reduce(function (state, update) {
|
|
4231
|
-
return patchImmutableObjectWithUpdate(state, update);
|
|
4232
|
-
}, state);
|
|
4233
|
-
}
|
|
4234
|
-
|
|
4235
|
-
function patchImmutableObjectWithUpdate(state, update) {
|
|
4236
|
-
var path = getParentsPath(update.node);
|
|
4237
|
-
return patchImmutableNode(state, path, update);
|
|
4238
|
-
}
|
|
4239
|
-
|
|
4240
|
-
function patchImmutableNode(state, path, update) {
|
|
4241
|
-
var pathItem = path.pop();
|
|
4242
|
-
|
|
4243
|
-
if (pathItem === undefined) {
|
|
4244
|
-
switch (update.type) {
|
|
4245
|
-
case "LiveObject":
|
|
4246
|
-
{
|
|
4247
|
-
if (typeof state !== "object") {
|
|
4248
|
-
throw new Error("Internal: received update on LiveObject but state was not an object");
|
|
4249
|
-
}
|
|
4250
|
-
|
|
4251
|
-
var newState = Object.assign({}, state);
|
|
4252
|
-
|
|
4253
|
-
for (var _key6 in update.updates) {
|
|
4254
|
-
var _update$updates$_key, _update$updates$_key2;
|
|
4255
|
-
|
|
4256
|
-
if (((_update$updates$_key = update.updates[_key6]) == null ? void 0 : _update$updates$_key.type) === "update") {
|
|
4257
|
-
var val = update.node.get(_key6);
|
|
4258
|
-
|
|
4259
|
-
if (val !== undefined) {
|
|
4260
|
-
newState[_key6] = lsonToJson(val);
|
|
4261
|
-
}
|
|
4262
|
-
} else if (((_update$updates$_key2 = update.updates[_key6]) == null ? void 0 : _update$updates$_key2.type) === "delete") {
|
|
4263
|
-
delete newState[_key6];
|
|
4264
|
-
}
|
|
4265
|
-
}
|
|
4266
|
-
|
|
4267
|
-
return newState;
|
|
4268
|
-
}
|
|
4269
|
-
|
|
4270
|
-
case "LiveList":
|
|
4271
|
-
{
|
|
4272
|
-
if (Array.isArray(state) === false) {
|
|
4273
|
-
throw new Error("Internal: received update on LiveList but state was not an array");
|
|
4274
|
-
}
|
|
4275
|
-
|
|
4276
|
-
var _newState = state.map(function (x) {
|
|
4277
|
-
return x;
|
|
4278
|
-
});
|
|
4279
|
-
|
|
4280
|
-
var _loop = function _loop() {
|
|
4281
|
-
var listUpdate = _step2.value;
|
|
4282
|
-
|
|
4283
|
-
if (listUpdate.type === "set") {
|
|
4284
|
-
_newState = _newState.map(function (item, index) {
|
|
4285
|
-
return index === listUpdate.index ? listUpdate.item : item;
|
|
4286
|
-
});
|
|
4287
|
-
} else if (listUpdate.type === "insert") {
|
|
4288
|
-
if (listUpdate.index === _newState.length) {
|
|
4289
|
-
_newState.push(lsonToJson(listUpdate.item));
|
|
4290
|
-
} else {
|
|
4291
|
-
_newState = [].concat(_newState.slice(0, listUpdate.index), [lsonToJson(listUpdate.item)], _newState.slice(listUpdate.index));
|
|
4292
|
-
}
|
|
4293
|
-
} else if (listUpdate.type === "delete") {
|
|
4294
|
-
_newState.splice(listUpdate.index, 1);
|
|
4295
|
-
} else if (listUpdate.type === "move") {
|
|
4296
|
-
if (listUpdate.previousIndex > listUpdate.index) {
|
|
4297
|
-
_newState = [].concat(_newState.slice(0, listUpdate.index), [lsonToJson(listUpdate.item)], _newState.slice(listUpdate.index, listUpdate.previousIndex), _newState.slice(listUpdate.previousIndex + 1));
|
|
4298
|
-
} else {
|
|
4299
|
-
_newState = [].concat(_newState.slice(0, listUpdate.previousIndex), _newState.slice(listUpdate.previousIndex + 1, listUpdate.index + 1), [lsonToJson(listUpdate.item)], _newState.slice(listUpdate.index + 1));
|
|
4300
|
-
}
|
|
4301
|
-
}
|
|
4302
|
-
};
|
|
4303
|
-
|
|
4304
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(update.updates), _step2; !(_step2 = _iterator2()).done;) {
|
|
4305
|
-
_loop();
|
|
4306
|
-
}
|
|
4307
|
-
|
|
4308
|
-
return _newState;
|
|
4309
|
-
}
|
|
4310
|
-
|
|
4311
|
-
case "LiveMap":
|
|
4312
|
-
{
|
|
4313
|
-
if (typeof state !== "object") {
|
|
4314
|
-
throw new Error("Internal: received update on LiveMap but state was not an object");
|
|
4315
|
-
}
|
|
4316
|
-
|
|
4317
|
-
var _newState2 = Object.assign({}, state);
|
|
4318
|
-
|
|
4319
|
-
for (var _key7 in update.updates) {
|
|
4320
|
-
var _update$updates$_key3, _update$updates$_key4;
|
|
4321
|
-
|
|
4322
|
-
if (((_update$updates$_key3 = update.updates[_key7]) == null ? void 0 : _update$updates$_key3.type) === "update") {
|
|
4323
|
-
_newState2[_key7] = lsonToJson(update.node.get(_key7));
|
|
4324
|
-
} else if (((_update$updates$_key4 = update.updates[_key7]) == null ? void 0 : _update$updates$_key4.type) === "delete") {
|
|
4325
|
-
delete _newState2[_key7];
|
|
4326
|
-
}
|
|
4327
|
-
}
|
|
4328
|
-
|
|
4329
|
-
return _newState2;
|
|
4330
|
-
}
|
|
4331
|
-
}
|
|
4332
|
-
}
|
|
4333
|
-
|
|
4334
|
-
if (Array.isArray(state)) {
|
|
4335
|
-
var newArray = [].concat(state);
|
|
4336
|
-
newArray[pathItem] = patchImmutableNode(state[pathItem], path, update);
|
|
4337
|
-
return newArray;
|
|
4338
|
-
} else {
|
|
4339
|
-
var _extends2;
|
|
4340
|
-
|
|
4341
|
-
return _extends({}, state, (_extends2 = {}, _extends2[pathItem] = patchImmutableNode(state[pathItem], path, update), _extends2));
|
|
4342
|
-
}
|
|
4343
|
-
}
|
|
4344
|
-
|
|
4345
|
-
var internals = {
|
|
4346
|
-
liveObjectToJson: liveObjectToJson,
|
|
4347
|
-
lsonToJson: lsonToJson,
|
|
4348
|
-
patchLiveList: patchLiveList,
|
|
4349
|
-
patchImmutableObject: patchImmutableObject,
|
|
4350
|
-
patchLiveObject: patchLiveObject,
|
|
4351
|
-
patchLiveObjectKey: patchLiveObjectKey
|
|
4352
|
-
};
|
|
4353
|
-
|
|
4354
|
-
exports.LiveList = LiveList;
|
|
4355
|
-
exports.LiveMap = LiveMap;
|
|
4356
|
-
exports.LiveObject = LiveObject;
|
|
1579
|
+
exports.LiveList = LiveObject.LiveList;
|
|
1580
|
+
exports.LiveMap = LiveObject.LiveMap;
|
|
1581
|
+
exports.LiveObject = LiveObject.LiveObject;
|
|
4357
1582
|
exports.createClient = createClient;
|
|
4358
|
-
exports.internals = internals;
|