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