@symbo.ls/sdk 2.32.19 → 2.32.25
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/dist/cjs/services/AuthService.js +6 -0
- package/dist/cjs/services/BaseService.js +1 -1
- package/dist/cjs/services/CollabService.js +24 -6
- package/dist/cjs/utils/changePreprocessor.js +58 -2
- package/dist/cjs/utils/services.js +1 -0
- package/dist/esm/index.js +887 -806
- package/dist/esm/services/AdminService.js +1 -1
- package/dist/esm/services/AuthService.js +7 -1
- package/dist/esm/services/BaseService.js +1 -1
- package/dist/esm/services/BranchService.js +1 -1
- package/dist/esm/services/CollabService.js +180 -106
- package/dist/esm/services/DnsService.js +1 -1
- package/dist/esm/services/FileService.js +1 -1
- package/dist/esm/services/PaymentService.js +1 -1
- package/dist/esm/services/PlanService.js +1 -1
- package/dist/esm/services/ProjectService.js +59 -3
- package/dist/esm/services/PullRequestService.js +1 -1
- package/dist/esm/services/ScreenshotService.js +1 -1
- package/dist/esm/services/SubscriptionService.js +1 -1
- package/dist/esm/services/TrackingService.js +701 -701
- package/dist/esm/services/index.js +886 -806
- package/dist/esm/utils/CollabClient.js +95 -95
- package/dist/esm/utils/changePreprocessor.js +58 -2
- package/dist/esm/utils/jsonDiff.js +26 -26
- package/dist/esm/utils/services.js +1 -0
- package/dist/esm/utils/validation.js +2 -2
- package/dist/node/services/AuthService.js +6 -0
- package/dist/node/services/BaseService.js +1 -1
- package/dist/node/services/CollabService.js +24 -6
- package/dist/node/utils/changePreprocessor.js +58 -2
- package/dist/node/utils/services.js +1 -0
- package/package.json +6 -6
- package/src/services/AuthService.js +7 -0
- package/src/services/BaseService.js +1 -1
- package/src/services/CollabService.js +27 -6
- package/src/utils/changePreprocessor.js +76 -2
- package/src/utils/services.js +1 -0
|
@@ -340,6 +340,48 @@ function getByPathSafe(root, path) {
|
|
|
340
340
|
return null;
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
|
+
function resolveNextValueFromTuples(tuples, path) {
|
|
344
|
+
if (!Array.isArray(tuples) || !Array.isArray(path)) {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
for (let i = tuples.length - 1; i >= 0; i--) {
|
|
348
|
+
const t = tuples[i];
|
|
349
|
+
if (!Array.isArray(t) || t.length < 3) {
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
const [action, tuplePath, tupleValue] = t;
|
|
353
|
+
if (action !== "update" && action !== "set" || !Array.isArray(tuplePath)) {
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
if (tuplePath.length > path.length) {
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
let isPrefix = true;
|
|
360
|
+
for (let j = 0; j < tuplePath.length; j++) {
|
|
361
|
+
if (tuplePath[j] !== path[j]) {
|
|
362
|
+
isPrefix = false;
|
|
363
|
+
break;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (!isPrefix) {
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
if (tuplePath.length === path.length) {
|
|
370
|
+
return tupleValue;
|
|
371
|
+
}
|
|
372
|
+
let current = tupleValue;
|
|
373
|
+
for (let j = tuplePath.length; j < path.length; j++) {
|
|
374
|
+
if (current == null) {
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
current = current[path[j]];
|
|
378
|
+
}
|
|
379
|
+
if (current !== null) {
|
|
380
|
+
return current;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
343
385
|
function preprocessChanges(root, tuples = [], options = {}) {
|
|
344
386
|
const expandTuple = (t) => {
|
|
345
387
|
const [action, path, value] = t || [];
|
|
@@ -414,7 +456,21 @@ function preprocessChanges(root, tuples = [], options = {}) {
|
|
|
414
456
|
return Array.isArray(tuples) ? tuples.slice() : [];
|
|
415
457
|
}
|
|
416
458
|
})();
|
|
417
|
-
const
|
|
459
|
+
const hydratedGranularChanges = granularChanges.map((t) => {
|
|
460
|
+
if (!Array.isArray(t) || t.length < 3) {
|
|
461
|
+
return t;
|
|
462
|
+
}
|
|
463
|
+
const [action, path] = t;
|
|
464
|
+
if (action !== "update" && action !== "set" || !Array.isArray(path)) {
|
|
465
|
+
return t;
|
|
466
|
+
}
|
|
467
|
+
const nextValue = resolveNextValueFromTuples(tuples, path);
|
|
468
|
+
if (nextValue === null) {
|
|
469
|
+
return t;
|
|
470
|
+
}
|
|
471
|
+
return [action, path, nextValue];
|
|
472
|
+
});
|
|
473
|
+
const baseOrders = computeOrdersForTuples(root, hydratedGranularChanges);
|
|
418
474
|
const preferOrdersMap = /* @__PURE__ */ new Map();
|
|
419
475
|
for (let i = 0; i < tuples.length; i++) {
|
|
420
476
|
const t = tuples[i];
|
|
@@ -444,7 +500,7 @@ function preprocessChanges(root, tuples = [], options = {}) {
|
|
|
444
500
|
mergedOrders.push(v);
|
|
445
501
|
}
|
|
446
502
|
}
|
|
447
|
-
return { granularChanges, orders: mergedOrders };
|
|
503
|
+
return { granularChanges: hydratedGranularChanges, orders: mergedOrders };
|
|
448
504
|
}
|
|
449
505
|
export {
|
|
450
506
|
preprocessChanges
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// ../../../node_modules/lib0/map.js
|
|
2
2
|
var create = () => /* @__PURE__ */ new Map();
|
|
3
3
|
var copy = (m) => {
|
|
4
4
|
const r = create();
|
|
@@ -30,15 +30,15 @@ var any = (m, f) => {
|
|
|
30
30
|
return false;
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
//
|
|
33
|
+
// ../../../node_modules/lib0/set.js
|
|
34
34
|
var create2 = () => /* @__PURE__ */ new Set();
|
|
35
35
|
|
|
36
|
-
//
|
|
36
|
+
// ../../../node_modules/lib0/array.js
|
|
37
37
|
var last = (arr) => arr[arr.length - 1];
|
|
38
38
|
var from = Array.from;
|
|
39
39
|
var isArray = Array.isArray;
|
|
40
40
|
|
|
41
|
-
//
|
|
41
|
+
// ../../../node_modules/lib0/observable.js
|
|
42
42
|
var ObservableV2 = class {
|
|
43
43
|
constructor() {
|
|
44
44
|
this._observers = create();
|
|
@@ -109,7 +109,7 @@ var ObservableV2 = class {
|
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
111
|
|
|
112
|
-
//
|
|
112
|
+
// ../../../node_modules/lib0/math.js
|
|
113
113
|
var floor = Math.floor;
|
|
114
114
|
var abs = Math.abs;
|
|
115
115
|
var min = (a, b) => a < b ? a : b;
|
|
@@ -117,7 +117,7 @@ var max = (a, b) => a > b ? a : b;
|
|
|
117
117
|
var isNaN = Number.isNaN;
|
|
118
118
|
var isNegativeZero = (n) => n !== 0 ? n < 0 : 1 / n < 0;
|
|
119
119
|
|
|
120
|
-
//
|
|
120
|
+
// ../../../node_modules/lib0/binary.js
|
|
121
121
|
var BIT1 = 1;
|
|
122
122
|
var BIT2 = 2;
|
|
123
123
|
var BIT3 = 4;
|
|
@@ -159,7 +159,7 @@ var BITS29 = BIT30 - 1;
|
|
|
159
159
|
var BITS30 = BIT31 - 1;
|
|
160
160
|
var BITS31 = 2147483647;
|
|
161
161
|
|
|
162
|
-
//
|
|
162
|
+
// ../../../node_modules/lib0/number.js
|
|
163
163
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;
|
|
164
164
|
var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER;
|
|
165
165
|
var LOWEST_INT32 = 1 << 31;
|
|
@@ -167,7 +167,7 @@ var isInteger = Number.isInteger || ((num) => typeof num === "number" && isFinit
|
|
|
167
167
|
var isNaN2 = Number.isNaN;
|
|
168
168
|
var parseInt = Number.parseInt;
|
|
169
169
|
|
|
170
|
-
//
|
|
170
|
+
// ../../../node_modules/lib0/string.js
|
|
171
171
|
var fromCharCode = String.fromCharCode;
|
|
172
172
|
var fromCodePoint = String.fromCodePoint;
|
|
173
173
|
var MAX_UTF16_CHARACTER = fromCharCode(65535);
|
|
@@ -197,7 +197,7 @@ if (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {
|
|
|
197
197
|
utf8TextDecoder = null;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
//
|
|
200
|
+
// ../../../node_modules/lib0/encoding.js
|
|
201
201
|
var Encoder = class {
|
|
202
202
|
constructor() {
|
|
203
203
|
this.cpos = 0;
|
|
@@ -504,7 +504,7 @@ var StringEncoder = class {
|
|
|
504
504
|
}
|
|
505
505
|
};
|
|
506
506
|
|
|
507
|
-
//
|
|
507
|
+
// ../../../node_modules/lib0/error.js
|
|
508
508
|
var create3 = (s) => new Error(s);
|
|
509
509
|
var methodUnimplemented = () => {
|
|
510
510
|
throw create3("Method unimplemented");
|
|
@@ -513,11 +513,11 @@ var unexpectedCase = () => {
|
|
|
513
513
|
throw create3("Unexpected case");
|
|
514
514
|
};
|
|
515
515
|
|
|
516
|
-
//
|
|
516
|
+
// ../../../node_modules/lib0/webcrypto.js
|
|
517
517
|
var subtle = crypto.subtle;
|
|
518
518
|
var getRandomValues = crypto.getRandomValues.bind(crypto);
|
|
519
519
|
|
|
520
|
-
//
|
|
520
|
+
// ../../../node_modules/lib0/random.js
|
|
521
521
|
var uint32 = () => getRandomValues(new Uint32Array(1))[0];
|
|
522
522
|
var uuidv4Template = "10000000-1000-4000-8000" + -1e11;
|
|
523
523
|
var uuidv4 = () => uuidv4Template.replace(
|
|
@@ -526,20 +526,20 @@ var uuidv4 = () => uuidv4Template.replace(
|
|
|
526
526
|
(c) => (c ^ uint32() & 15 >> c / 4).toString(16)
|
|
527
527
|
);
|
|
528
528
|
|
|
529
|
-
//
|
|
529
|
+
// ../../../node_modules/lib0/time.js
|
|
530
530
|
var getUnixTime = Date.now;
|
|
531
531
|
|
|
532
|
-
//
|
|
532
|
+
// ../../../node_modules/lib0/promise.js
|
|
533
533
|
var create4 = (f) => (
|
|
534
534
|
/** @type {Promise<T>} */
|
|
535
535
|
new Promise(f)
|
|
536
536
|
);
|
|
537
537
|
var all = Promise.all.bind(Promise);
|
|
538
538
|
|
|
539
|
-
//
|
|
539
|
+
// ../../../node_modules/lib0/conditions.js
|
|
540
540
|
var undefinedToNull = (v) => v === void 0 ? null : v;
|
|
541
541
|
|
|
542
|
-
//
|
|
542
|
+
// ../../../node_modules/lib0/storage.js
|
|
543
543
|
var VarStoragePolyfill = class {
|
|
544
544
|
constructor() {
|
|
545
545
|
this.map = /* @__PURE__ */ new Map();
|
|
@@ -569,7 +569,7 @@ try {
|
|
|
569
569
|
}
|
|
570
570
|
var varStorage = _localStorage;
|
|
571
571
|
|
|
572
|
-
//
|
|
572
|
+
// ../../../node_modules/lib0/object.js
|
|
573
573
|
var assign = Object.assign;
|
|
574
574
|
var keys = Object.keys;
|
|
575
575
|
var forEach = (obj, f) => {
|
|
@@ -605,7 +605,7 @@ var deepFreeze = (o) => {
|
|
|
605
605
|
return freeze(o);
|
|
606
606
|
};
|
|
607
607
|
|
|
608
|
-
//
|
|
608
|
+
// ../../../node_modules/lib0/function.js
|
|
609
609
|
var callAll = (fs, args2, i = 0) => {
|
|
610
610
|
try {
|
|
611
611
|
for (; i < fs.length; i++) {
|
|
@@ -619,7 +619,7 @@ var callAll = (fs, args2, i = 0) => {
|
|
|
619
619
|
};
|
|
620
620
|
var isOneOf = (value, options) => options.includes(value);
|
|
621
621
|
|
|
622
|
-
//
|
|
622
|
+
// ../../../node_modules/lib0/environment.js
|
|
623
623
|
var isNode = typeof process !== "undefined" && process.release && /node|io\.js/.test(process.release.name) && Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]";
|
|
624
624
|
var isMac = typeof navigator !== "undefined" ? /Mac/.test(navigator.platform) : false;
|
|
625
625
|
var params;
|
|
@@ -672,7 +672,7 @@ var forceColor = isNode && isOneOf(process.env.FORCE_COLOR, ["true", "1", "2"]);
|
|
|
672
672
|
var supportsColor = forceColor || !hasParam("--no-colors") && // @todo deprecate --no-colors
|
|
673
673
|
!hasConf("no-color") && (!isNode || process.stdout.isTTY) && (!isNode || hasParam("--color") || getVariable("COLORTERM") !== null || (getVariable("TERM") || "").includes("color"));
|
|
674
674
|
|
|
675
|
-
//
|
|
675
|
+
// ../../../node_modules/lib0/pair.js
|
|
676
676
|
var Pair = class {
|
|
677
677
|
/**
|
|
678
678
|
* @param {L} left
|
|
@@ -685,7 +685,7 @@ var Pair = class {
|
|
|
685
685
|
};
|
|
686
686
|
var create5 = (left, right) => new Pair(left, right);
|
|
687
687
|
|
|
688
|
-
//
|
|
688
|
+
// ../../../node_modules/lib0/dom.js
|
|
689
689
|
var doc = (
|
|
690
690
|
/** @type {Document} */
|
|
691
691
|
typeof document !== "undefined" ? document : {}
|
|
@@ -703,10 +703,10 @@ var DOCUMENT_NODE = doc.DOCUMENT_NODE;
|
|
|
703
703
|
var DOCUMENT_TYPE_NODE = doc.DOCUMENT_TYPE_NODE;
|
|
704
704
|
var DOCUMENT_FRAGMENT_NODE = doc.DOCUMENT_FRAGMENT_NODE;
|
|
705
705
|
|
|
706
|
-
//
|
|
706
|
+
// ../../../node_modules/lib0/symbol.js
|
|
707
707
|
var create6 = Symbol;
|
|
708
708
|
|
|
709
|
-
//
|
|
709
|
+
// ../../../node_modules/lib0/logging.common.js
|
|
710
710
|
var BOLD = create6();
|
|
711
711
|
var UNBOLD = create6();
|
|
712
712
|
var BLUE = create6();
|
|
@@ -749,7 +749,7 @@ var computeNoColorLoggingArgs = (args2) => {
|
|
|
749
749
|
};
|
|
750
750
|
var lastLoggingTime = getUnixTime();
|
|
751
751
|
|
|
752
|
-
//
|
|
752
|
+
// ../../../node_modules/lib0/logging.js
|
|
753
753
|
var _browserStyleMap = {
|
|
754
754
|
[BOLD]: create5("font-weight", "bold"),
|
|
755
755
|
[UNBOLD]: create5("font-weight", "normal"),
|
|
@@ -820,7 +820,7 @@ var warn = (...args2) => {
|
|
|
820
820
|
};
|
|
821
821
|
var vconsoles = create2();
|
|
822
822
|
|
|
823
|
-
//
|
|
823
|
+
// ../../../node_modules/lib0/iterator.js
|
|
824
824
|
var createIterator = (next) => ({
|
|
825
825
|
/**
|
|
826
826
|
* @return {IterableIterator<T>}
|
|
@@ -843,7 +843,7 @@ var iteratorMap = (iterator, fmap) => createIterator(() => {
|
|
|
843
843
|
return { done, value: done ? void 0 : fmap(value) };
|
|
844
844
|
});
|
|
845
845
|
|
|
846
|
-
//
|
|
846
|
+
// ../../../node_modules/yjs/dist/yjs.mjs
|
|
847
847
|
var DeleteItem = class {
|
|
848
848
|
/**
|
|
849
849
|
* @param {number} clock
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// ../../../node_modules/acorn/dist/acorn.mjs
|
|
2
2
|
var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
|
|
3
3
|
var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
|
|
4
4
|
var nonASCIIidentifierChars = "\u200C\u200D\xB7\u0300-\u036F\u0387\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0897-\u089F\u08CA-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09E6-\u09EF\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AE6-\u0AEF\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CE6-\u0CEF\u0CF3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D66-\u0D6F\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECE\u0ED0-\u0ED9\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19DA\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u200C\u200D\u203F\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\u30FB\uA620-\uA629\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F1\uA8FF-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F\uFF65";
|
|
@@ -5610,7 +5610,7 @@ function parse3(input, options) {
|
|
|
5610
5610
|
return Parser.parse(input, options);
|
|
5611
5611
|
}
|
|
5612
5612
|
|
|
5613
|
-
//
|
|
5613
|
+
// ../../../node_modules/acorn-walk/dist/walk.mjs
|
|
5614
5614
|
function full(node, callback, baseVisitor, state, override) {
|
|
5615
5615
|
if (!baseVisitor) {
|
|
5616
5616
|
baseVisitor = base;
|
|
@@ -319,6 +319,12 @@ class AuthService extends BaseService {
|
|
|
319
319
|
throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
|
+
getAuthToken() {
|
|
323
|
+
if (!this._tokenManager) {
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
return this._tokenManager.getAccessToken();
|
|
327
|
+
}
|
|
322
328
|
/**
|
|
323
329
|
* Get stored authentication state (backward compatibility method)
|
|
324
330
|
* Replaces AuthService.getStoredAuthState()
|
|
@@ -221,8 +221,19 @@ class CollabService extends BaseService {
|
|
|
221
221
|
console.log(
|
|
222
222
|
`[CollabService] Flushing ${this._pendingOps.length} offline operation batch(es)`
|
|
223
223
|
);
|
|
224
|
-
this._pendingOps.forEach(({ changes, granularChanges, orders }) => {
|
|
225
|
-
|
|
224
|
+
this._pendingOps.forEach(({ changes, granularChanges, orders, options: opOptions }) => {
|
|
225
|
+
const { message } = opOptions || {};
|
|
226
|
+
const ts = Date.now();
|
|
227
|
+
const payload = {
|
|
228
|
+
changes,
|
|
229
|
+
granularChanges,
|
|
230
|
+
orders,
|
|
231
|
+
ts
|
|
232
|
+
};
|
|
233
|
+
if (message) {
|
|
234
|
+
payload.message = message;
|
|
235
|
+
}
|
|
236
|
+
this.socket.emit("ops", payload);
|
|
226
237
|
});
|
|
227
238
|
this._pendingOps.length = 0;
|
|
228
239
|
}
|
|
@@ -333,6 +344,7 @@ class CollabService extends BaseService {
|
|
|
333
344
|
tuples,
|
|
334
345
|
Array.isArray(tuples) ? [] : {}
|
|
335
346
|
) : deepStringifyFunctions(tuples, Array.isArray(tuples) ? [] : {});
|
|
347
|
+
const { message } = options;
|
|
336
348
|
if (!this.isConnected()) {
|
|
337
349
|
console.warn("[CollabService] Not connected, queuing real-time update");
|
|
338
350
|
this._pendingOps.push({
|
|
@@ -344,18 +356,24 @@ class CollabService extends BaseService {
|
|
|
344
356
|
return;
|
|
345
357
|
}
|
|
346
358
|
if ((_c = this.socket) == null ? void 0 : _c.connected) {
|
|
359
|
+
const ts = Date.now();
|
|
347
360
|
console.log("[CollabService] Sending operations to the backend", {
|
|
348
361
|
changes: stringifiedTuples,
|
|
349
362
|
granularChanges: stringifiedGranularTuples,
|
|
350
363
|
orders,
|
|
351
|
-
ts
|
|
364
|
+
ts,
|
|
365
|
+
message
|
|
352
366
|
});
|
|
353
|
-
|
|
367
|
+
const payload = {
|
|
354
368
|
changes: stringifiedTuples,
|
|
355
369
|
granularChanges: stringifiedGranularTuples,
|
|
356
370
|
orders,
|
|
357
|
-
ts
|
|
358
|
-
}
|
|
371
|
+
ts
|
|
372
|
+
};
|
|
373
|
+
if (message) {
|
|
374
|
+
payload.message = message;
|
|
375
|
+
}
|
|
376
|
+
this.socket.emit("ops", payload);
|
|
359
377
|
}
|
|
360
378
|
return { success: true };
|
|
361
379
|
}
|
|
@@ -13,6 +13,48 @@ function getByPathSafe(root, path) {
|
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
function resolveNextValueFromTuples(tuples, path) {
|
|
17
|
+
if (!Array.isArray(tuples) || !Array.isArray(path)) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
for (let i = tuples.length - 1; i >= 0; i--) {
|
|
21
|
+
const t = tuples[i];
|
|
22
|
+
if (!Array.isArray(t) || t.length < 3) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const [action, tuplePath, tupleValue] = t;
|
|
26
|
+
if (action !== "update" && action !== "set" || !Array.isArray(tuplePath)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (tuplePath.length > path.length) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
let isPrefix = true;
|
|
33
|
+
for (let j = 0; j < tuplePath.length; j++) {
|
|
34
|
+
if (tuplePath[j] !== path[j]) {
|
|
35
|
+
isPrefix = false;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!isPrefix) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (tuplePath.length === path.length) {
|
|
43
|
+
return tupleValue;
|
|
44
|
+
}
|
|
45
|
+
let current = tupleValue;
|
|
46
|
+
for (let j = tuplePath.length; j < path.length; j++) {
|
|
47
|
+
if (current == null) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
current = current[path[j]];
|
|
51
|
+
}
|
|
52
|
+
if (current !== null) {
|
|
53
|
+
return current;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
16
58
|
function preprocessChanges(root, tuples = [], options = {}) {
|
|
17
59
|
const expandTuple = (t) => {
|
|
18
60
|
const [action, path, value] = t || [];
|
|
@@ -87,7 +129,21 @@ function preprocessChanges(root, tuples = [], options = {}) {
|
|
|
87
129
|
return Array.isArray(tuples) ? tuples.slice() : [];
|
|
88
130
|
}
|
|
89
131
|
})();
|
|
90
|
-
const
|
|
132
|
+
const hydratedGranularChanges = granularChanges.map((t) => {
|
|
133
|
+
if (!Array.isArray(t) || t.length < 3) {
|
|
134
|
+
return t;
|
|
135
|
+
}
|
|
136
|
+
const [action, path] = t;
|
|
137
|
+
if (action !== "update" && action !== "set" || !Array.isArray(path)) {
|
|
138
|
+
return t;
|
|
139
|
+
}
|
|
140
|
+
const nextValue = resolveNextValueFromTuples(tuples, path);
|
|
141
|
+
if (nextValue === null) {
|
|
142
|
+
return t;
|
|
143
|
+
}
|
|
144
|
+
return [action, path, nextValue];
|
|
145
|
+
});
|
|
146
|
+
const baseOrders = computeOrdersForTuples(root, hydratedGranularChanges);
|
|
91
147
|
const preferOrdersMap = /* @__PURE__ */ new Map();
|
|
92
148
|
for (let i = 0; i < tuples.length; i++) {
|
|
93
149
|
const t = tuples[i];
|
|
@@ -117,7 +173,7 @@ function preprocessChanges(root, tuples = [], options = {}) {
|
|
|
117
173
|
mergedOrders.push(v);
|
|
118
174
|
}
|
|
119
175
|
}
|
|
120
|
-
return { granularChanges, orders: mergedOrders };
|
|
176
|
+
return { granularChanges: hydratedGranularChanges, orders: mergedOrders };
|
|
121
177
|
}
|
|
122
178
|
export {
|
|
123
179
|
preprocessChanges
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@symbo.ls/sdk",
|
|
3
|
-
"version": "2.32.
|
|
3
|
+
"version": "2.32.25",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/esm/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
"test:user": "cross-env NODE_ENV=$NODE_ENV npx tape integration-tests/index.js integration-tests/user/*.test.js | tap-spec"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@domql/element": "^2.32.
|
|
50
|
-
"@domql/utils": "^2.32.
|
|
49
|
+
"@domql/element": "^2.32.25",
|
|
50
|
+
"@domql/utils": "^2.32.25",
|
|
51
51
|
"@grafana/faro-web-sdk": "^1.19.0",
|
|
52
52
|
"@grafana/faro-web-tracing": "^1.19.0",
|
|
53
|
-
"@symbo.ls/router": "^2.32.
|
|
54
|
-
"@symbo.ls/socket": "^2.32.
|
|
53
|
+
"@symbo.ls/router": "^2.32.25",
|
|
54
|
+
"@symbo.ls/socket": "^2.32.25",
|
|
55
55
|
"acorn": "^8.14.0",
|
|
56
56
|
"acorn-walk": "^8.3.4",
|
|
57
57
|
"dexie": "^4.0.11",
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"tap-spec": "^5.0.0",
|
|
74
74
|
"tape": "^5.9.0"
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "325683c8553a64ee952c8a36f4e823257d1e81bb"
|
|
77
77
|
}
|
|
@@ -370,6 +370,13 @@ export class AuthService extends BaseService {
|
|
|
370
370
|
}
|
|
371
371
|
}
|
|
372
372
|
|
|
373
|
+
getAuthToken() {
|
|
374
|
+
if (!this._tokenManager) {
|
|
375
|
+
return null
|
|
376
|
+
}
|
|
377
|
+
return this._tokenManager.getAccessToken()
|
|
378
|
+
}
|
|
379
|
+
|
|
373
380
|
/**
|
|
374
381
|
* Get stored authentication state (backward compatibility method)
|
|
375
382
|
* Replaces AuthService.getStoredAuthState()
|
|
@@ -290,8 +290,19 @@ export class CollabService extends BaseService {
|
|
|
290
290
|
console.log(
|
|
291
291
|
`[CollabService] Flushing ${this._pendingOps.length} offline operation batch(es)`
|
|
292
292
|
)
|
|
293
|
-
this._pendingOps.forEach(({ changes, granularChanges, orders }) => {
|
|
294
|
-
|
|
293
|
+
this._pendingOps.forEach(({ changes, granularChanges, orders, options: opOptions }) => {
|
|
294
|
+
const { message } = opOptions || {}
|
|
295
|
+
const ts = Date.now()
|
|
296
|
+
const payload = {
|
|
297
|
+
changes,
|
|
298
|
+
granularChanges,
|
|
299
|
+
orders,
|
|
300
|
+
ts
|
|
301
|
+
}
|
|
302
|
+
if (message) {
|
|
303
|
+
payload.message = message
|
|
304
|
+
}
|
|
305
|
+
this.socket.emit('ops', payload)
|
|
295
306
|
})
|
|
296
307
|
this._pendingOps.length = 0
|
|
297
308
|
}
|
|
@@ -423,6 +434,8 @@ export class CollabService extends BaseService {
|
|
|
423
434
|
)
|
|
424
435
|
: deepStringifyFunctions(tuples, Array.isArray(tuples) ? [] : {})
|
|
425
436
|
|
|
437
|
+
const { message } = options
|
|
438
|
+
|
|
426
439
|
// If not connected yet, queue the operations for later synchronisation.
|
|
427
440
|
if (!this.isConnected()) {
|
|
428
441
|
console.warn('[CollabService] Not connected, queuing real-time update')
|
|
@@ -437,18 +450,26 @@ export class CollabService extends BaseService {
|
|
|
437
450
|
|
|
438
451
|
// When connected, send the operations to the backend.
|
|
439
452
|
if (this.socket?.connected) {
|
|
453
|
+
const ts = Date.now()
|
|
440
454
|
console.log('[CollabService] Sending operations to the backend', {
|
|
441
455
|
changes: stringifiedTuples,
|
|
442
456
|
granularChanges: stringifiedGranularTuples,
|
|
443
457
|
orders,
|
|
444
|
-
ts
|
|
458
|
+
ts,
|
|
459
|
+
message
|
|
445
460
|
})
|
|
446
|
-
|
|
461
|
+
const payload = {
|
|
447
462
|
changes: stringifiedTuples,
|
|
448
463
|
granularChanges: stringifiedGranularTuples,
|
|
449
464
|
orders,
|
|
450
|
-
ts
|
|
451
|
-
}
|
|
465
|
+
ts
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
if (message) {
|
|
469
|
+
payload.message = message
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
this.socket.emit('ops', payload)
|
|
452
473
|
}
|
|
453
474
|
|
|
454
475
|
return { success: true }
|