@korajs/devtools 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-N64DMGUU.js +856 -0
- package/dist/chunk-N64DMGUU.js.map +1 -0
- package/dist/embed-overlay-Dwys5PYM.d.cts +170 -0
- package/dist/embed-overlay-Dwys5PYM.d.ts +170 -0
- package/dist/extension/background.cjs.map +1 -1
- package/dist/extension/background.js.map +1 -1
- package/dist/extension/content-script.cjs.map +1 -1
- package/dist/extension/content-script.js.map +1 -1
- package/dist/extension/devtools.cjs.map +1 -1
- package/dist/extension/devtools.js.map +1 -1
- package/dist/extension/panel.cjs +224 -199
- package/dist/extension/panel.cjs.map +1 -1
- package/dist/extension/panel.js +224 -199
- package/dist/extension/panel.js.map +1 -1
- package/dist/index.cjs +125 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -161
- package/dist/index.d.ts +4 -161
- package/dist/index.js +19 -763
- package/dist/index.js.map +1 -1
- package/dist/overlay.cjs +884 -0
- package/dist/overlay.cjs.map +1 -0
- package/dist/overlay.d.cts +2 -0
- package/dist/overlay.d.ts +2 -0
- package/dist/overlay.js +7 -0
- package/dist/overlay.js.map +1 -0
- package/package.json +12 -2
package/dist/extension/panel.cjs
CHANGED
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
// ../../node_modules/.pnpm/htm@3.1.1/node_modules/htm/dist/htm.mjs
|
|
4
|
+
var n = function(t4, s3, r3, e3) {
|
|
5
|
+
var u3;
|
|
6
|
+
s3[0] = 0;
|
|
7
|
+
for (var h3 = 1; h3 < s3.length; h3++) {
|
|
8
|
+
var p3 = s3[h3++], a3 = s3[h3] ? (s3[0] |= p3 ? 1 : 2, r3[s3[h3++]]) : s3[++h3];
|
|
9
|
+
3 === p3 ? e3[0] = a3 : 4 === p3 ? e3[1] = Object.assign(e3[1] || {}, a3) : 5 === p3 ? (e3[1] = e3[1] || {})[s3[++h3]] = a3 : 6 === p3 ? e3[1][s3[++h3]] += a3 + "" : p3 ? (u3 = t4.apply(a3, n(t4, a3, r3, ["", null])), e3.push(u3), a3[0] ? s3[0] |= 2 : (s3[h3 - 2] = 0, s3[h3] = u3)) : e3.push(a3);
|
|
10
|
+
}
|
|
11
|
+
return e3;
|
|
12
|
+
};
|
|
13
|
+
var t = /* @__PURE__ */ new Map();
|
|
14
|
+
function htm_default(s3) {
|
|
15
|
+
var r3 = t.get(this);
|
|
16
|
+
return r3 || (r3 = /* @__PURE__ */ new Map(), t.set(this, r3)), (r3 = n(this, r3.get(s3) || (r3.set(s3, r3 = (function(n3) {
|
|
17
|
+
for (var t4, s4, r4 = 1, e3 = "", u3 = "", h3 = [0], p3 = function(n4) {
|
|
18
|
+
1 === r4 && (n4 || (e3 = e3.replace(/^\s*\n\s*|\s*\n\s*$/g, ""))) ? h3.push(0, n4, e3) : 3 === r4 && (n4 || e3) ? (h3.push(3, n4, e3), r4 = 2) : 2 === r4 && "..." === e3 && n4 ? h3.push(4, n4, 0) : 2 === r4 && e3 && !n4 ? h3.push(5, 0, true, e3) : r4 >= 5 && ((e3 || !n4 && 5 === r4) && (h3.push(r4, 0, e3, s4), r4 = 6), n4 && (h3.push(r4, n4, 0, s4), r4 = 6)), e3 = "";
|
|
19
|
+
}, a3 = 0; a3 < n3.length; a3++) {
|
|
20
|
+
a3 && (1 === r4 && p3(), p3(a3));
|
|
21
|
+
for (var l3 = 0; l3 < n3[a3].length; l3++) t4 = n3[a3][l3], 1 === r4 ? "<" === t4 ? (p3(), h3 = [h3], r4 = 3) : e3 += t4 : 4 === r4 ? "--" === e3 && ">" === t4 ? (r4 = 1, e3 = "") : e3 = t4 + e3[0] : u3 ? t4 === u3 ? u3 = "" : e3 += t4 : '"' === t4 || "'" === t4 ? u3 = t4 : ">" === t4 ? (p3(), r4 = 1) : r4 && ("=" === t4 ? (r4 = 5, s4 = e3, e3 = "") : "/" === t4 && (r4 < 5 || ">" === n3[a3][l3 + 1]) ? (p3(), 3 === r4 && (h3 = h3[0]), r4 = h3, (h3 = h3[0]).push(2, 0, r4), r4 = 0) : " " === t4 || " " === t4 || "\n" === t4 || "\r" === t4 ? (p3(), r4 = 2) : e3 += t4), 3 === r4 && "!--" === e3 && (r4 = 4, h3 = h3[0]);
|
|
22
|
+
}
|
|
23
|
+
return p3(), h3;
|
|
24
|
+
})(s3)), r3), arguments, [])).length > 1 ? r3 : r3[0];
|
|
25
|
+
}
|
|
26
|
+
|
|
3
27
|
// ../../node_modules/.pnpm/preact@10.29.1/node_modules/preact/dist/preact.mjs
|
|
4
|
-
var
|
|
28
|
+
var n2;
|
|
5
29
|
var l;
|
|
6
30
|
var u;
|
|
7
|
-
var
|
|
31
|
+
var t2;
|
|
8
32
|
var i;
|
|
9
33
|
var r;
|
|
10
34
|
var o;
|
|
@@ -31,7 +55,7 @@ function b(n3) {
|
|
|
31
55
|
function k(l3, u3, t4) {
|
|
32
56
|
var i3, r3, o3, e3 = {};
|
|
33
57
|
for (o3 in u3) "key" == o3 ? i3 = u3[o3] : "ref" == o3 ? r3 = u3[o3] : e3[o3] = u3[o3];
|
|
34
|
-
if (arguments.length > 2 && (e3.children = arguments.length > 3 ?
|
|
58
|
+
if (arguments.length > 2 && (e3.children = arguments.length > 3 ? n2.call(arguments, 2) : t4), "function" == typeof l3 && null != l3.defaultProps) for (o3 in l3.defaultProps) void 0 === e3[o3] && (e3[o3] = l3.defaultProps[o3]);
|
|
35
59
|
return x(l3, e3, i3, r3, null);
|
|
36
60
|
}
|
|
37
61
|
function x(n3, t4, i3, r3, o3) {
|
|
@@ -200,7 +224,7 @@ function G(u3, t4, i3, r3, o3, e3, f3, c3, s3) {
|
|
|
200
224
|
}
|
|
201
225
|
if (null == x2) m3 === k3 || c3 && u3.data == k3 || (u3.data = k3);
|
|
202
226
|
else {
|
|
203
|
-
if (e3 = e3 &&
|
|
227
|
+
if (e3 = e3 && n2.call(u3.childNodes), !c3 && null != e3) for (m3 = {}, a3 = 0; a3 < u3.attributes.length; a3++) m3[(y2 = u3.attributes[a3]).name] = y2.value;
|
|
204
228
|
for (a3 in m3) y2 = m3[a3], "dangerouslySetInnerHTML" == a3 ? p3 = y2 : "children" == a3 || a3 in k3 || "value" == a3 && "defaultValue" in k3 || "checked" == a3 && "defaultChecked" in k3 || N(u3, a3, null, y2, o3);
|
|
205
229
|
for (a3 in k3) y2 = k3[a3], "children" == a3 ? v3 = y2 : "dangerouslySetInnerHTML" == a3 ? h3 = y2 : "value" == a3 ? w3 = y2 : "checked" == a3 ? _2 = y2 : c3 && "function" != typeof y2 || m3[a3] === y2 || N(u3, a3, y2, m3[a3], o3);
|
|
206
230
|
if (h3) c3 || p3 && (h3.__html == p3.__html || h3.__html == u3.innerHTML) || (u3.innerHTML = h3.__html), t4.__k = [];
|
|
@@ -237,16 +261,16 @@ function Q(n3, l3, u3) {
|
|
|
237
261
|
}
|
|
238
262
|
function R(u3, t4, i3) {
|
|
239
263
|
var r3, o3, e3, f3;
|
|
240
|
-
t4 == document && (t4 = document.documentElement), l.__ && l.__(u3, t4), o3 = (r3 = "function" == typeof i3) ? null : i3 && i3.__k || t4.__k, e3 = [], f3 = [], q(t4, u3 = (!r3 && i3 || t4).__k = k(S, null, [u3]), o3 || d, d, t4.namespaceURI, !r3 && i3 ? [i3] : o3 ? null : t4.firstChild ?
|
|
264
|
+
t4 == document && (t4 = document.documentElement), l.__ && l.__(u3, t4), o3 = (r3 = "function" == typeof i3) ? null : i3 && i3.__k || t4.__k, e3 = [], f3 = [], q(t4, u3 = (!r3 && i3 || t4).__k = k(S, null, [u3]), o3 || d, d, t4.namespaceURI, !r3 && i3 ? [i3] : o3 ? null : t4.firstChild ? n2.call(t4.childNodes) : null, e3, !r3 && i3 ? i3 : o3 ? o3.__e : t4.firstChild, r3, f3), D(e3, u3, f3);
|
|
241
265
|
}
|
|
242
|
-
|
|
266
|
+
n2 = w.slice, l = { __e: function(n3, l3, u3, t4) {
|
|
243
267
|
for (var i3, r3, o3; l3 = l3.__; ) if ((i3 = l3.__c) && !i3.__) try {
|
|
244
268
|
if ((r3 = i3.constructor) && null != r3.getDerivedStateFromError && (i3.setState(r3.getDerivedStateFromError(n3)), o3 = i3.__d), null != i3.componentDidCatch && (i3.componentDidCatch(n3, t4 || {}), o3 = i3.__d), o3) return i3.__E = i3;
|
|
245
269
|
} catch (l4) {
|
|
246
270
|
n3 = l4;
|
|
247
271
|
}
|
|
248
272
|
throw n3;
|
|
249
|
-
} }, u = 0,
|
|
273
|
+
} }, u = 0, t2 = function(n3) {
|
|
250
274
|
return null != n3 && void 0 === n3.constructor;
|
|
251
275
|
}, C.prototype.setState = function(n3, l3) {
|
|
252
276
|
var u3;
|
|
@@ -258,7 +282,7 @@ n = w.slice, l = { __e: function(n3, l3, u3, t4) {
|
|
|
258
282
|
}, H.__r = 0, f = Math.random().toString(8), c = "__d" + f, s = "__a" + f, a = /(PointerCapture)$|Capture$/i, h = 0, p = V(false), v = V(true), y = 0;
|
|
259
283
|
|
|
260
284
|
// ../../node_modules/.pnpm/preact@10.29.1/node_modules/preact/hooks/dist/hooks.mjs
|
|
261
|
-
var
|
|
285
|
+
var t3;
|
|
262
286
|
var r2;
|
|
263
287
|
var u2;
|
|
264
288
|
var i2;
|
|
@@ -280,7 +304,7 @@ function d2(n3) {
|
|
|
280
304
|
return o2 = 1, h2(D2, n3);
|
|
281
305
|
}
|
|
282
306
|
function h2(n3, u3, i3) {
|
|
283
|
-
var o3 = p2(
|
|
307
|
+
var o3 = p2(t3++, 2);
|
|
284
308
|
if (o3.t = n3, !o3.__c && (o3.__ = [i3 ? i3(u3) : D2(void 0, u3), function(n4) {
|
|
285
309
|
var t4 = o3.__N ? o3.__N[0] : o3.__[0], r3 = o3.t(t4, n4);
|
|
286
310
|
t4 !== r3 && (o3.__N = [r3, o3.__[1]], o3.__c.setState({}));
|
|
@@ -314,7 +338,7 @@ function h2(n3, u3, i3) {
|
|
|
314
338
|
return o3.__N || o3.__;
|
|
315
339
|
}
|
|
316
340
|
function T2(n3, r3) {
|
|
317
|
-
var u3 = p2(
|
|
341
|
+
var u3 = p2(t3++, 7);
|
|
318
342
|
return C2(u3.__H, r3) && (u3.__ = n3(), u3.__H = r3, u3.__h = n3), u3.__;
|
|
319
343
|
}
|
|
320
344
|
function q2(n3, t4) {
|
|
@@ -337,11 +361,11 @@ c2.__b = function(n3) {
|
|
|
337
361
|
}, c2.__ = function(n3, t4) {
|
|
338
362
|
n3 && t4.__k && t4.__k.__m && (n3.__m = t4.__k.__m), s2 && s2(n3, t4);
|
|
339
363
|
}, c2.__r = function(n3) {
|
|
340
|
-
a2 && a2(n3),
|
|
364
|
+
a2 && a2(n3), t3 = 0;
|
|
341
365
|
var i3 = (r2 = n3.__c).__H;
|
|
342
366
|
i3 && (u2 === r2 ? (i3.__h = [], r2.__h = [], i3.__.some(function(n4) {
|
|
343
367
|
n4.__N && (n4.__ = n4.__N), n4.u = n4.__N = void 0;
|
|
344
|
-
})) : (i3.__h.some(z2), i3.__h.some(B2), i3.__h = [],
|
|
368
|
+
})) : (i3.__h.some(z2), i3.__h.some(B2), i3.__h = [], t3 = 0)), u2 = r2;
|
|
345
369
|
}, c2.diffed = function(n3) {
|
|
346
370
|
v2 && v2(n3);
|
|
347
371
|
var t4 = n3.__c;
|
|
@@ -395,30 +419,6 @@ function D2(n3, t4) {
|
|
|
395
419
|
return "function" == typeof t4 ? t4(n3) : t4;
|
|
396
420
|
}
|
|
397
421
|
|
|
398
|
-
// ../../node_modules/.pnpm/htm@3.1.1/node_modules/htm/dist/htm.mjs
|
|
399
|
-
var n2 = function(t4, s3, r3, e3) {
|
|
400
|
-
var u3;
|
|
401
|
-
s3[0] = 0;
|
|
402
|
-
for (var h3 = 1; h3 < s3.length; h3++) {
|
|
403
|
-
var p3 = s3[h3++], a3 = s3[h3] ? (s3[0] |= p3 ? 1 : 2, r3[s3[h3++]]) : s3[++h3];
|
|
404
|
-
3 === p3 ? e3[0] = a3 : 4 === p3 ? e3[1] = Object.assign(e3[1] || {}, a3) : 5 === p3 ? (e3[1] = e3[1] || {})[s3[++h3]] = a3 : 6 === p3 ? e3[1][s3[++h3]] += a3 + "" : p3 ? (u3 = t4.apply(a3, n2(t4, a3, r3, ["", null])), e3.push(u3), a3[0] ? s3[0] |= 2 : (s3[h3 - 2] = 0, s3[h3] = u3)) : e3.push(a3);
|
|
405
|
-
}
|
|
406
|
-
return e3;
|
|
407
|
-
};
|
|
408
|
-
var t3 = /* @__PURE__ */ new Map();
|
|
409
|
-
function htm_default(s3) {
|
|
410
|
-
var r3 = t3.get(this);
|
|
411
|
-
return r3 || (r3 = /* @__PURE__ */ new Map(), t3.set(this, r3)), (r3 = n2(this, r3.get(s3) || (r3.set(s3, r3 = (function(n3) {
|
|
412
|
-
for (var t4, s4, r4 = 1, e3 = "", u3 = "", h3 = [0], p3 = function(n4) {
|
|
413
|
-
1 === r4 && (n4 || (e3 = e3.replace(/^\s*\n\s*|\s*\n\s*$/g, ""))) ? h3.push(0, n4, e3) : 3 === r4 && (n4 || e3) ? (h3.push(3, n4, e3), r4 = 2) : 2 === r4 && "..." === e3 && n4 ? h3.push(4, n4, 0) : 2 === r4 && e3 && !n4 ? h3.push(5, 0, true, e3) : r4 >= 5 && ((e3 || !n4 && 5 === r4) && (h3.push(r4, 0, e3, s4), r4 = 6), n4 && (h3.push(r4, n4, 0, s4), r4 = 6)), e3 = "";
|
|
414
|
-
}, a3 = 0; a3 < n3.length; a3++) {
|
|
415
|
-
a3 && (1 === r4 && p3(), p3(a3));
|
|
416
|
-
for (var l3 = 0; l3 < n3[a3].length; l3++) t4 = n3[a3][l3], 1 === r4 ? "<" === t4 ? (p3(), h3 = [h3], r4 = 3) : e3 += t4 : 4 === r4 ? "--" === e3 && ">" === t4 ? (r4 = 1, e3 = "") : e3 = t4 + e3[0] : u3 ? t4 === u3 ? u3 = "" : e3 += t4 : '"' === t4 || "'" === t4 ? u3 = t4 : ">" === t4 ? (p3(), r4 = 1) : r4 && ("=" === t4 ? (r4 = 5, s4 = e3, e3 = "") : "/" === t4 && (r4 < 5 || ">" === n3[a3][l3 + 1]) ? (p3(), 3 === r4 && (h3 = h3[0]), r4 = h3, (h3 = h3[0]).push(2, 0, r4), r4 = 0) : " " === t4 || " " === t4 || "\n" === t4 || "\r" === t4 ? (p3(), r4 = 2) : e3 += t4), 3 === r4 && "!--" === e3 && (r4 = 4, h3 = h3[0]);
|
|
417
|
-
}
|
|
418
|
-
return p3(), h3;
|
|
419
|
-
})(s3)), r3), arguments, [])).length > 1 ? r3 : r3[0];
|
|
420
|
-
}
|
|
421
|
-
|
|
422
422
|
// src/types.ts
|
|
423
423
|
var EVENT_TYPE_CATEGORIES = {
|
|
424
424
|
"operation:created": "operation",
|
|
@@ -430,18 +430,164 @@ var EVENT_TYPE_CATEGORIES = {
|
|
|
430
430
|
"sync:connected": "sync",
|
|
431
431
|
"sync:disconnected": "sync",
|
|
432
432
|
"sync:auth-failed": "sync",
|
|
433
|
+
"sync:schema-mismatch": "sync",
|
|
434
|
+
"sync:apply-failed": "sync",
|
|
433
435
|
"sync:sent": "sync",
|
|
434
436
|
"sync:received": "sync",
|
|
435
437
|
"sync:acknowledged": "sync",
|
|
436
438
|
"query:subscribed": "query",
|
|
437
439
|
"query:invalidated": "query",
|
|
438
440
|
"query:executed": "query",
|
|
439
|
-
"connection:quality": "connection"
|
|
441
|
+
"connection:quality": "connection",
|
|
442
|
+
"sync:diagnostics": "sync",
|
|
443
|
+
"sync:bandwidth": "sync",
|
|
444
|
+
"sync:initial-sync-progress": "sync",
|
|
445
|
+
"awareness:updated": "sync",
|
|
446
|
+
"state-machine:transition": "operation",
|
|
447
|
+
"state-machine:rejected": "operation",
|
|
448
|
+
"store:persistence-error": "connection",
|
|
449
|
+
"store:quota-exceeded": "connection",
|
|
450
|
+
"replay:completed": "operation"
|
|
440
451
|
};
|
|
441
452
|
function eventTypeToCategory(type) {
|
|
442
453
|
return EVENT_TYPE_CATEGORIES[type];
|
|
443
454
|
}
|
|
444
455
|
|
|
456
|
+
// src/filter/event-filter.ts
|
|
457
|
+
function extractCollection(event) {
|
|
458
|
+
const e3 = event.event;
|
|
459
|
+
switch (e3.type) {
|
|
460
|
+
case "operation:created":
|
|
461
|
+
case "operation:applied":
|
|
462
|
+
return e3.operation.collection;
|
|
463
|
+
case "merge:started":
|
|
464
|
+
return e3.operationA.collection;
|
|
465
|
+
case "merge:completed":
|
|
466
|
+
case "merge:conflict":
|
|
467
|
+
return e3.trace.operationA.collection;
|
|
468
|
+
case "constraint:violated":
|
|
469
|
+
return e3.trace.operationA.collection;
|
|
470
|
+
case "query:subscribed":
|
|
471
|
+
return e3.collection;
|
|
472
|
+
case "query:invalidated":
|
|
473
|
+
return e3.trigger.collection;
|
|
474
|
+
case "sync:sent":
|
|
475
|
+
return e3.operations[0]?.collection ?? null;
|
|
476
|
+
case "sync:received":
|
|
477
|
+
return e3.operations[0]?.collection ?? null;
|
|
478
|
+
default:
|
|
479
|
+
return null;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
function filterEvents(events2, criteria) {
|
|
483
|
+
const { categories, types, timeRange, collection } = criteria;
|
|
484
|
+
if (!categories && !types && !timeRange && !collection) {
|
|
485
|
+
return events2;
|
|
486
|
+
}
|
|
487
|
+
const categorySet = categories ? new Set(categories) : null;
|
|
488
|
+
const typeSet = types ? new Set(types) : null;
|
|
489
|
+
return events2.filter((event) => {
|
|
490
|
+
if (categorySet) {
|
|
491
|
+
const cat = eventTypeToCategory(event.event.type);
|
|
492
|
+
if (!categorySet.has(cat)) return false;
|
|
493
|
+
}
|
|
494
|
+
if (typeSet) {
|
|
495
|
+
if (!typeSet.has(event.event.type)) return false;
|
|
496
|
+
}
|
|
497
|
+
if (timeRange) {
|
|
498
|
+
if (event.receivedAt < timeRange.start || event.receivedAt > timeRange.end) {
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
if (collection) {
|
|
503
|
+
const eventCollection = extractCollection(event);
|
|
504
|
+
if (eventCollection !== collection) return false;
|
|
505
|
+
}
|
|
506
|
+
return true;
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// src/stats/event-stats.ts
|
|
511
|
+
function computeStatistics(events2) {
|
|
512
|
+
const eventsByCategory = {
|
|
513
|
+
operation: 0,
|
|
514
|
+
merge: 0,
|
|
515
|
+
sync: 0,
|
|
516
|
+
query: 0,
|
|
517
|
+
connection: 0
|
|
518
|
+
};
|
|
519
|
+
const eventsByType = {};
|
|
520
|
+
let mergeConflicts = 0;
|
|
521
|
+
let constraintViolations = 0;
|
|
522
|
+
let mergeDurationSum = 0;
|
|
523
|
+
let mergeDurationCount = 0;
|
|
524
|
+
let queryDurationSum = 0;
|
|
525
|
+
let queryDurationCount = 0;
|
|
526
|
+
let syncOperationsSent = 0;
|
|
527
|
+
let syncOperationsReceived = 0;
|
|
528
|
+
for (const timestamped of events2) {
|
|
529
|
+
const e3 = timestamped.event;
|
|
530
|
+
const category = eventTypeToCategory(e3.type);
|
|
531
|
+
eventsByCategory[category]++;
|
|
532
|
+
eventsByType[e3.type] = (eventsByType[e3.type] ?? 0) + 1;
|
|
533
|
+
switch (e3.type) {
|
|
534
|
+
case "merge:completed":
|
|
535
|
+
mergeDurationSum += e3.trace.duration;
|
|
536
|
+
mergeDurationCount++;
|
|
537
|
+
break;
|
|
538
|
+
case "merge:conflict":
|
|
539
|
+
mergeConflicts++;
|
|
540
|
+
mergeDurationSum += e3.trace.duration;
|
|
541
|
+
mergeDurationCount++;
|
|
542
|
+
break;
|
|
543
|
+
case "constraint:violated":
|
|
544
|
+
constraintViolations++;
|
|
545
|
+
break;
|
|
546
|
+
case "query:executed":
|
|
547
|
+
queryDurationSum += e3.duration;
|
|
548
|
+
queryDurationCount++;
|
|
549
|
+
break;
|
|
550
|
+
case "sync:sent":
|
|
551
|
+
syncOperationsSent += e3.batchSize;
|
|
552
|
+
break;
|
|
553
|
+
case "sync:received":
|
|
554
|
+
syncOperationsReceived += e3.batchSize;
|
|
555
|
+
break;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return {
|
|
559
|
+
totalEvents: events2.length,
|
|
560
|
+
eventsByCategory,
|
|
561
|
+
eventsByType,
|
|
562
|
+
mergeConflicts,
|
|
563
|
+
constraintViolations,
|
|
564
|
+
avgMergeDuration: mergeDurationCount > 0 ? mergeDurationSum / mergeDurationCount : null,
|
|
565
|
+
avgQueryDuration: queryDurationCount > 0 ? queryDurationSum / queryDurationCount : null,
|
|
566
|
+
syncOperationsSent,
|
|
567
|
+
syncOperationsReceived
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// src/ui/components.ts
|
|
572
|
+
function formatTime(timestamp) {
|
|
573
|
+
const d3 = new Date(timestamp);
|
|
574
|
+
const h3 = String(d3.getHours()).padStart(2, "0");
|
|
575
|
+
const m3 = String(d3.getMinutes()).padStart(2, "0");
|
|
576
|
+
const s3 = String(d3.getSeconds()).padStart(2, "0");
|
|
577
|
+
const ms = String(d3.getMilliseconds()).padStart(3, "0");
|
|
578
|
+
return `${h3}:${m3}:${s3}.${ms}`;
|
|
579
|
+
}
|
|
580
|
+
function truncate(str, max) {
|
|
581
|
+
if (str.length <= max) return str;
|
|
582
|
+
return `${str.slice(0, max - 1)}\u2026`;
|
|
583
|
+
}
|
|
584
|
+
function formatValue(value) {
|
|
585
|
+
if (value === null || value === void 0) return "null";
|
|
586
|
+
if (typeof value === "string") return `"${value}"`;
|
|
587
|
+
if (typeof value === "object") return JSON.stringify(value, null, 2);
|
|
588
|
+
return String(value);
|
|
589
|
+
}
|
|
590
|
+
|
|
445
591
|
// src/ui/panel-state.ts
|
|
446
592
|
function buildPanelModel(events2) {
|
|
447
593
|
const timeline = events2.map((entry) => ({
|
|
@@ -563,9 +709,13 @@ function timelineLabel(event) {
|
|
|
563
709
|
case "sync:connected":
|
|
564
710
|
return `sync connected ${event.nodeId}`;
|
|
565
711
|
case "sync:disconnected":
|
|
566
|
-
return
|
|
712
|
+
return "sync disconnected";
|
|
567
713
|
case "sync:auth-failed":
|
|
568
|
-
return
|
|
714
|
+
return "sync auth failed";
|
|
715
|
+
case "sync:schema-mismatch":
|
|
716
|
+
return `schema mismatch client ${event.clientSchemaVersion} server ${event.serverSchemaVersion}`;
|
|
717
|
+
case "sync:apply-failed":
|
|
718
|
+
return `sync apply failed ${event.operationId}`;
|
|
569
719
|
case "sync:sent":
|
|
570
720
|
return `sync sent ${event.batchSize}`;
|
|
571
721
|
case "sync:received":
|
|
@@ -580,6 +730,24 @@ function timelineLabel(event) {
|
|
|
580
730
|
return `query executed ${event.queryId}`;
|
|
581
731
|
case "connection:quality":
|
|
582
732
|
return `connection ${event.quality}`;
|
|
733
|
+
case "sync:diagnostics":
|
|
734
|
+
return `sync diagnostics ${event.diagnostics.quality}`;
|
|
735
|
+
case "sync:bandwidth":
|
|
736
|
+
return `bandwidth ${event.direction} ${event.bytesPerSecond}B/s`;
|
|
737
|
+
case "sync:initial-sync-progress":
|
|
738
|
+
return `initial sync ${Math.round(event.progress * 100)}%`;
|
|
739
|
+
case "awareness:updated":
|
|
740
|
+
return `awareness ${event.states.size} peers`;
|
|
741
|
+
case "state-machine:transition":
|
|
742
|
+
return `transition ${event.collection} ${event.from} \u2192 ${event.to}`;
|
|
743
|
+
case "state-machine:rejected":
|
|
744
|
+
return `transition rejected ${event.collection} ${event.from} \u2192 ${event.to}`;
|
|
745
|
+
case "store:persistence-error":
|
|
746
|
+
return `store persistence error ${event.message}`;
|
|
747
|
+
case "store:quota-exceeded":
|
|
748
|
+
return "store quota exceeded";
|
|
749
|
+
case "replay:completed":
|
|
750
|
+
return `replay ${event.operationsApplied} ops`;
|
|
583
751
|
}
|
|
584
752
|
}
|
|
585
753
|
function timelineColor(type) {
|
|
@@ -605,174 +773,31 @@ function extractOperation(event) {
|
|
|
605
773
|
}
|
|
606
774
|
}
|
|
607
775
|
|
|
608
|
-
// src/stats/event-stats.ts
|
|
609
|
-
function computeStatistics(events2) {
|
|
610
|
-
const eventsByCategory = {
|
|
611
|
-
operation: 0,
|
|
612
|
-
merge: 0,
|
|
613
|
-
sync: 0,
|
|
614
|
-
query: 0,
|
|
615
|
-
connection: 0
|
|
616
|
-
};
|
|
617
|
-
const eventsByType = {};
|
|
618
|
-
let mergeConflicts = 0;
|
|
619
|
-
let constraintViolations = 0;
|
|
620
|
-
let mergeDurationSum = 0;
|
|
621
|
-
let mergeDurationCount = 0;
|
|
622
|
-
let queryDurationSum = 0;
|
|
623
|
-
let queryDurationCount = 0;
|
|
624
|
-
let syncOperationsSent = 0;
|
|
625
|
-
let syncOperationsReceived = 0;
|
|
626
|
-
for (const timestamped of events2) {
|
|
627
|
-
const e3 = timestamped.event;
|
|
628
|
-
const category = eventTypeToCategory(e3.type);
|
|
629
|
-
eventsByCategory[category]++;
|
|
630
|
-
eventsByType[e3.type] = (eventsByType[e3.type] ?? 0) + 1;
|
|
631
|
-
switch (e3.type) {
|
|
632
|
-
case "merge:completed":
|
|
633
|
-
mergeDurationSum += e3.trace.duration;
|
|
634
|
-
mergeDurationCount++;
|
|
635
|
-
break;
|
|
636
|
-
case "merge:conflict":
|
|
637
|
-
mergeConflicts++;
|
|
638
|
-
mergeDurationSum += e3.trace.duration;
|
|
639
|
-
mergeDurationCount++;
|
|
640
|
-
break;
|
|
641
|
-
case "constraint:violated":
|
|
642
|
-
constraintViolations++;
|
|
643
|
-
break;
|
|
644
|
-
case "query:executed":
|
|
645
|
-
queryDurationSum += e3.duration;
|
|
646
|
-
queryDurationCount++;
|
|
647
|
-
break;
|
|
648
|
-
case "sync:sent":
|
|
649
|
-
syncOperationsSent += e3.batchSize;
|
|
650
|
-
break;
|
|
651
|
-
case "sync:received":
|
|
652
|
-
syncOperationsReceived += e3.batchSize;
|
|
653
|
-
break;
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
return {
|
|
657
|
-
totalEvents: events2.length,
|
|
658
|
-
eventsByCategory,
|
|
659
|
-
eventsByType,
|
|
660
|
-
mergeConflicts,
|
|
661
|
-
constraintViolations,
|
|
662
|
-
avgMergeDuration: mergeDurationCount > 0 ? mergeDurationSum / mergeDurationCount : null,
|
|
663
|
-
avgQueryDuration: queryDurationCount > 0 ? queryDurationSum / queryDurationCount : null,
|
|
664
|
-
syncOperationsSent,
|
|
665
|
-
syncOperationsReceived
|
|
666
|
-
};
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
// src/filter/event-filter.ts
|
|
670
|
-
function extractCollection(event) {
|
|
671
|
-
const e3 = event.event;
|
|
672
|
-
switch (e3.type) {
|
|
673
|
-
case "operation:created":
|
|
674
|
-
case "operation:applied":
|
|
675
|
-
return e3.operation.collection;
|
|
676
|
-
case "merge:started":
|
|
677
|
-
return e3.operationA.collection;
|
|
678
|
-
case "merge:completed":
|
|
679
|
-
case "merge:conflict":
|
|
680
|
-
return e3.trace.operationA.collection;
|
|
681
|
-
case "constraint:violated":
|
|
682
|
-
return e3.trace.operationA.collection;
|
|
683
|
-
case "query:subscribed":
|
|
684
|
-
return e3.collection;
|
|
685
|
-
case "query:invalidated":
|
|
686
|
-
return e3.trigger.collection;
|
|
687
|
-
case "sync:sent":
|
|
688
|
-
return e3.operations[0]?.collection ?? null;
|
|
689
|
-
case "sync:received":
|
|
690
|
-
return e3.operations[0]?.collection ?? null;
|
|
691
|
-
default:
|
|
692
|
-
return null;
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
function filterEvents(events2, criteria) {
|
|
696
|
-
const { categories, types, timeRange, collection } = criteria;
|
|
697
|
-
if (!categories && !types && !timeRange && !collection) {
|
|
698
|
-
return events2;
|
|
699
|
-
}
|
|
700
|
-
const categorySet = categories ? new Set(categories) : null;
|
|
701
|
-
const typeSet = types ? new Set(types) : null;
|
|
702
|
-
return events2.filter((event) => {
|
|
703
|
-
if (categorySet) {
|
|
704
|
-
const cat = eventTypeToCategory(event.event.type);
|
|
705
|
-
if (!categorySet.has(cat)) return false;
|
|
706
|
-
}
|
|
707
|
-
if (typeSet) {
|
|
708
|
-
if (!typeSet.has(event.event.type)) return false;
|
|
709
|
-
}
|
|
710
|
-
if (timeRange) {
|
|
711
|
-
if (event.receivedAt < timeRange.start || event.receivedAt > timeRange.end) {
|
|
712
|
-
return false;
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
if (collection) {
|
|
716
|
-
const eventCollection = extractCollection(event);
|
|
717
|
-
if (eventCollection !== collection) return false;
|
|
718
|
-
}
|
|
719
|
-
return true;
|
|
720
|
-
});
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
// src/ui/components.ts
|
|
724
|
-
function formatTime(timestamp) {
|
|
725
|
-
const d3 = new Date(timestamp);
|
|
726
|
-
const h3 = String(d3.getHours()).padStart(2, "0");
|
|
727
|
-
const m3 = String(d3.getMinutes()).padStart(2, "0");
|
|
728
|
-
const s3 = String(d3.getSeconds()).padStart(2, "0");
|
|
729
|
-
const ms = String(d3.getMilliseconds()).padStart(3, "0");
|
|
730
|
-
return `${h3}:${m3}:${s3}.${ms}`;
|
|
731
|
-
}
|
|
732
|
-
function truncate(str, max) {
|
|
733
|
-
if (str.length <= max) return str;
|
|
734
|
-
return str.slice(0, max - 1) + "\u2026";
|
|
735
|
-
}
|
|
736
|
-
function formatValue(value) {
|
|
737
|
-
if (value === null || value === void 0) return "null";
|
|
738
|
-
if (typeof value === "string") return `"${value}"`;
|
|
739
|
-
if (typeof value === "object") return JSON.stringify(value, null, 2);
|
|
740
|
-
return String(value);
|
|
741
|
-
}
|
|
742
|
-
|
|
743
776
|
// src/ui/panel.ts
|
|
744
777
|
var html = htm_default.bind(k);
|
|
745
778
|
var ALL_CATEGORIES = ["operation", "merge", "sync", "query", "connection"];
|
|
746
779
|
function DevToolsPanel({ events: events2 }) {
|
|
747
780
|
const [activeTab, setActiveTab] = d2("timeline");
|
|
748
781
|
const [search, setSearch] = d2("");
|
|
749
|
-
const [categories, setCategories] = d2(
|
|
750
|
-
() => new Set(ALL_CATEGORIES)
|
|
751
|
-
);
|
|
782
|
+
const [categories, setCategories] = d2(() => new Set(ALL_CATEGORIES));
|
|
752
783
|
const [expanded, setExpanded] = d2(() => /* @__PURE__ */ new Set());
|
|
753
784
|
const [paused, setPaused] = d2(false);
|
|
754
|
-
const toggleCategory = q2(
|
|
755
|
-
(
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
else next.add(id);
|
|
771
|
-
return next;
|
|
772
|
-
});
|
|
773
|
-
},
|
|
774
|
-
[]
|
|
775
|
-
);
|
|
785
|
+
const toggleCategory = q2((cat) => {
|
|
786
|
+
setCategories((prev) => {
|
|
787
|
+
const next = new Set(prev);
|
|
788
|
+
if (next.has(cat)) next.delete(cat);
|
|
789
|
+
else next.add(cat);
|
|
790
|
+
return next;
|
|
791
|
+
});
|
|
792
|
+
}, []);
|
|
793
|
+
const toggleExpand = q2((id) => {
|
|
794
|
+
setExpanded((prev) => {
|
|
795
|
+
const next = new Set(prev);
|
|
796
|
+
if (next.has(id)) next.delete(id);
|
|
797
|
+
else next.add(id);
|
|
798
|
+
return next;
|
|
799
|
+
});
|
|
800
|
+
}, []);
|
|
776
801
|
const filtered = T2(
|
|
777
802
|
() => filterEvents(events2, { categories: [...categories] }),
|
|
778
803
|
[events2, categories]
|