@dudousxd/nestjs-telescope-ui 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +771 -0
- package/README.md +35 -0
- package/dist/client/console-url.d.ts +11 -0
- package/dist/client/console-url.d.ts.map +1 -0
- package/dist/client/console-url.js +21 -0
- package/dist/client/console-url.js.map +1 -0
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +4 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/telescope-client.d.ts +82 -11
- package/dist/client/telescope-client.d.ts.map +1 -1
- package/dist/client/telescope-client.js +101 -54
- package/dist/client/telescope-client.js.map +1 -1
- package/dist/client/types.d.ts +431 -30
- package/dist/client/types.d.ts.map +1 -1
- package/dist/react/components/batch-timeline.js +2 -2
- package/dist/react/components/batch-timeline.js.map +1 -1
- package/dist/react/components/cache-badge.d.ts +14 -6
- package/dist/react/components/cache-badge.d.ts.map +1 -1
- package/dist/react/components/cache-badge.js +26 -12
- package/dist/react/components/cache-badge.js.map +1 -1
- package/dist/react/components/charts/area-chart-card.d.ts +11 -3
- package/dist/react/components/charts/area-chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/area-chart-card.js +33 -6
- package/dist/react/components/charts/area-chart-card.js.map +1 -1
- package/dist/react/components/charts/bar-chart-card.d.ts +18 -7
- package/dist/react/components/charts/bar-chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/bar-chart-card.js +18 -9
- package/dist/react/components/charts/bar-chart-card.js.map +1 -1
- package/dist/react/components/charts/breakdown-card.d.ts +17 -0
- package/dist/react/components/charts/breakdown-card.d.ts.map +1 -0
- package/dist/react/components/charts/breakdown-card.js +43 -0
- package/dist/react/components/charts/breakdown-card.js.map +1 -0
- package/dist/react/components/charts/chart-card.d.ts +7 -0
- package/dist/react/components/charts/chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/chart-card.js +10 -3
- package/dist/react/components/charts/chart-card.js.map +1 -1
- package/dist/react/components/charts/chart-selection.d.ts +44 -0
- package/dist/react/components/charts/chart-selection.d.ts.map +1 -0
- package/dist/react/components/charts/chart-selection.js +36 -0
- package/dist/react/components/charts/chart-selection.js.map +1 -0
- package/dist/react/components/charts/chart-theme.d.ts +62 -19
- package/dist/react/components/charts/chart-theme.d.ts.map +1 -1
- package/dist/react/components/charts/chart-theme.js +72 -13
- package/dist/react/components/charts/chart-theme.js.map +1 -1
- package/dist/react/components/charts/distribution-chart-card.d.ts +17 -0
- package/dist/react/components/charts/distribution-chart-card.d.ts.map +1 -0
- package/dist/react/components/charts/distribution-chart-card.js +46 -0
- package/dist/react/components/charts/distribution-chart-card.js.map +1 -0
- package/dist/react/components/charts/gauge-card.d.ts +12 -0
- package/dist/react/components/charts/gauge-card.d.ts.map +1 -0
- package/dist/react/components/charts/gauge-card.js +17 -0
- package/dist/react/components/charts/gauge-card.js.map +1 -0
- package/dist/react/components/charts/index.d.ts +1 -0
- package/dist/react/components/charts/index.d.ts.map +1 -1
- package/dist/react/components/charts/index.js +1 -0
- package/dist/react/components/charts/index.js.map +1 -1
- package/dist/react/components/charts/stacked-area-chart-card.d.ts +17 -3
- package/dist/react/components/charts/stacked-area-chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/stacked-area-chart-card.js +31 -8
- package/dist/react/components/charts/stacked-area-chart-card.js.map +1 -1
- package/dist/react/components/entries-table.d.ts.map +1 -1
- package/dist/react/components/entries-table.js +17 -3
- package/dist/react/components/entries-table.js.map +1 -1
- package/dist/react/components/entry-detail.d.ts +2 -0
- package/dist/react/components/entry-detail.d.ts.map +1 -1
- package/dist/react/components/entry-detail.js +186 -20
- package/dist/react/components/entry-detail.js.map +1 -1
- package/dist/react/components/entry-insights.d.ts.map +1 -1
- package/dist/react/components/entry-insights.js +28 -17
- package/dist/react/components/entry-insights.js.map +1 -1
- package/dist/react/components/entry-types.d.ts +29 -0
- package/dist/react/components/entry-types.d.ts.map +1 -1
- package/dist/react/components/entry-types.js +60 -0
- package/dist/react/components/entry-types.js.map +1 -1
- package/dist/react/components/export-json-toolbar.js +2 -2
- package/dist/react/components/export-json-toolbar.js.map +1 -1
- package/dist/react/components/extensions/panel-column-menu.d.ts +19 -0
- package/dist/react/components/extensions/panel-column-menu.d.ts.map +1 -0
- package/dist/react/components/extensions/panel-column-menu.js +47 -0
- package/dist/react/components/extensions/panel-column-menu.js.map +1 -0
- package/dist/react/components/extensions/panel-renderer.d.ts +46 -0
- package/dist/react/components/extensions/panel-renderer.d.ts.map +1 -0
- package/dist/react/components/extensions/panel-renderer.js +122 -0
- package/dist/react/components/extensions/panel-renderer.js.map +1 -0
- package/dist/react/components/extensions/panel-table-header.d.ts +18 -0
- package/dist/react/components/extensions/panel-table-header.d.ts.map +1 -0
- package/dist/react/components/extensions/panel-table-header.js +82 -0
- package/dist/react/components/extensions/panel-table-header.js.map +1 -0
- package/dist/react/components/extensions/panel-table.d.ts +27 -0
- package/dist/react/components/extensions/panel-table.d.ts.map +1 -0
- package/dist/react/components/extensions/panel-table.js +87 -0
- package/dist/react/components/extensions/panel-table.js.map +1 -0
- package/dist/react/components/extensions/stat-card.d.ts +18 -0
- package/dist/react/components/extensions/stat-card.d.ts.map +1 -0
- package/dist/react/components/extensions/stat-card.js +44 -0
- package/dist/react/components/extensions/stat-card.js.map +1 -0
- package/dist/react/components/extensions/table-columns.d.ts +32 -0
- package/dist/react/components/extensions/table-columns.d.ts.map +1 -0
- package/dist/react/components/extensions/table-columns.js +51 -0
- package/dist/react/components/extensions/table-columns.js.map +1 -0
- package/dist/react/components/extensions/table-features.d.ts +47 -0
- package/dist/react/components/extensions/table-features.d.ts.map +1 -0
- package/dist/react/components/extensions/table-features.js +45 -0
- package/dist/react/components/extensions/table-features.js.map +1 -0
- package/dist/react/components/extensions/table-query.d.ts +53 -0
- package/dist/react/components/extensions/table-query.d.ts.map +1 -0
- package/dist/react/components/extensions/table-query.js +51 -0
- package/dist/react/components/extensions/table-query.js.map +1 -0
- package/dist/react/components/flamegraph-view.d.ts +18 -0
- package/dist/react/components/flamegraph-view.d.ts.map +1 -0
- package/dist/react/components/flamegraph-view.js +48 -0
- package/dist/react/components/flamegraph-view.js.map +1 -0
- package/dist/react/components/flamegraph.d.ts +34 -0
- package/dist/react/components/flamegraph.d.ts.map +1 -0
- package/dist/react/components/flamegraph.js +54 -0
- package/dist/react/components/flamegraph.js.map +1 -0
- package/dist/react/components/inertia-badge.d.ts +33 -0
- package/dist/react/components/inertia-badge.d.ts.map +1 -0
- package/dist/react/components/inertia-badge.js +72 -0
- package/dist/react/components/inertia-badge.js.map +1 -0
- package/dist/react/components/inertia-body.d.ts +11 -0
- package/dist/react/components/inertia-body.d.ts.map +1 -0
- package/dist/react/components/inertia-body.js +127 -0
- package/dist/react/components/inertia-body.js.map +1 -0
- package/dist/react/components/official-event.d.ts +16 -0
- package/dist/react/components/official-event.d.ts.map +1 -0
- package/dist/react/components/official-event.js +88 -0
- package/dist/react/components/official-event.js.map +1 -0
- package/dist/react/components/pulse-panel.d.ts.map +1 -1
- package/dist/react/components/pulse-panel.js +6 -6
- package/dist/react/components/pulse-panel.js.map +1 -1
- package/dist/react/components/queues/EnqueueJobForm.d.ts.map +1 -1
- package/dist/react/components/queues/EnqueueJobForm.js +2 -1
- package/dist/react/components/queues/EnqueueJobForm.js.map +1 -1
- package/dist/react/components/queues/JobActions.d.ts.map +1 -1
- package/dist/react/components/queues/JobActions.js +11 -9
- package/dist/react/components/queues/JobActions.js.map +1 -1
- package/dist/react/components/queues/JobDetailDrawer.d.ts.map +1 -1
- package/dist/react/components/queues/JobDetailDrawer.js +8 -13
- package/dist/react/components/queues/JobDetailDrawer.js.map +1 -1
- package/dist/react/components/queues/JobTable.d.ts.map +1 -1
- package/dist/react/components/queues/JobTable.js +0 -0
- package/dist/react/components/queues/JobTable.js.map +1 -1
- package/dist/react/components/queues/QueueList.d.ts.map +1 -1
- package/dist/react/components/queues/QueueList.js +6 -6
- package/dist/react/components/queues/QueueList.js.map +1 -1
- package/dist/react/components/queues/QueueStateTabs.d.ts.map +1 -1
- package/dist/react/components/queues/QueueStateTabs.js +9 -7
- package/dist/react/components/queues/QueueStateTabs.js.map +1 -1
- package/dist/react/components/queues/queue-format.d.ts +5 -1
- package/dist/react/components/queues/queue-format.d.ts.map +1 -1
- package/dist/react/components/queues/queue-format.js +11 -7
- package/dist/react/components/queues/queue-format.js.map +1 -1
- package/dist/react/components/queues-panel.js +1 -1
- package/dist/react/components/queues-panel.js.map +1 -1
- package/dist/react/components/request-timeline.d.ts.map +1 -1
- package/dist/react/components/request-timeline.js +2 -2
- package/dist/react/components/request-timeline.js.map +1 -1
- package/dist/react/components/retention-indicator.d.ts.map +1 -1
- package/dist/react/components/retention-indicator.js +1 -1
- package/dist/react/components/retention-indicator.js.map +1 -1
- package/dist/react/components/sparkline.d.ts.map +1 -1
- package/dist/react/components/sparkline.js +1 -1
- package/dist/react/components/sparkline.js.map +1 -1
- package/dist/react/components/tag-autocomplete.d.ts +21 -4
- package/dist/react/components/tag-autocomplete.d.ts.map +1 -1
- package/dist/react/components/tag-autocomplete.js +57 -29
- package/dist/react/components/tag-autocomplete.js.map +1 -1
- package/dist/react/components/to-csv.d.ts +25 -0
- package/dist/react/components/to-csv.d.ts.map +1 -0
- package/dist/react/components/to-csv.js +78 -0
- package/dist/react/components/to-csv.js.map +1 -0
- package/dist/react/components/user-tag.d.ts +15 -0
- package/dist/react/components/user-tag.d.ts.map +1 -1
- package/dist/react/components/user-tag.js +19 -0
- package/dist/react/components/user-tag.js.map +1 -1
- package/dist/react/components/waterfall-view.d.ts +13 -0
- package/dist/react/components/waterfall-view.d.ts.map +1 -0
- package/dist/react/components/waterfall-view.js +58 -0
- package/dist/react/components/waterfall-view.js.map +1 -0
- package/dist/react/components/window-select.d.ts.map +1 -1
- package/dist/react/components/window-select.js +6 -2
- package/dist/react/components/window-select.js.map +1 -1
- package/dist/react/index.d.ts +7 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +11 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/ui/badge.d.ts +16 -0
- package/dist/react/ui/badge.d.ts.map +1 -0
- package/dist/react/ui/badge.js +28 -0
- package/dist/react/ui/badge.js.map +1 -0
- package/dist/react/ui/button.d.ts +17 -0
- package/dist/react/ui/button.d.ts.map +1 -0
- package/dist/react/ui/button.js +35 -0
- package/dist/react/ui/button.js.map +1 -0
- package/dist/react/ui/chart.d.ts +116 -0
- package/dist/react/ui/chart.d.ts.map +1 -0
- package/dist/react/ui/chart.js +191 -0
- package/dist/react/ui/chart.js.map +1 -0
- package/dist/react/ui/cn.d.ts +8 -0
- package/dist/react/ui/cn.d.ts.map +1 -0
- package/dist/react/ui/cn.js +11 -0
- package/dist/react/ui/cn.js.map +1 -0
- package/dist/react/ui/dialog.d.ts +26 -0
- package/dist/react/ui/dialog.d.ts.map +1 -0
- package/dist/react/ui/dialog.js +40 -0
- package/dist/react/ui/dialog.js.map +1 -0
- package/dist/react/ui/index.d.ts +24 -0
- package/dist/react/ui/index.d.ts.map +1 -0
- package/dist/react/ui/index.js +24 -0
- package/dist/react/ui/index.js.map +1 -0
- package/dist/react/ui/input.d.ts +3 -0
- package/dist/react/ui/input.d.ts.map +1 -0
- package/dist/react/ui/input.js +8 -0
- package/dist/react/ui/input.js.map +1 -0
- package/dist/react/ui/select.d.ts +20 -0
- package/dist/react/ui/select.d.ts.map +1 -0
- package/dist/react/ui/select.js +27 -0
- package/dist/react/ui/select.js.map +1 -0
- package/dist/react/ui/table.d.ts +27 -0
- package/dist/react/ui/table.d.ts.map +1 -0
- package/dist/react/ui/table.js +22 -0
- package/dist/react/ui/table.js.map +1 -0
- package/dist/react/ui/tabs.d.ts +12 -0
- package/dist/react/ui/tabs.d.ts.map +1 -0
- package/dist/react/ui/tabs.js +20 -0
- package/dist/react/ui/tabs.js.map +1 -0
- package/dist/react/ui/tooltip.d.ts +10 -0
- package/dist/react/ui/tooltip.d.ts.map +1 -0
- package/dist/react/ui/tooltip.js +12 -0
- package/dist/react/ui/tooltip.js.map +1 -0
- package/dist/react/use-telescope-queries.d.ts +129 -130
- package/dist/react/use-telescope-queries.d.ts.map +1 -1
- package/dist/react/use-telescope-queries.js +146 -1
- package/dist/react/use-telescope-queries.js.map +1 -1
- package/dist/react/use-telescope-stream.d.ts +10 -0
- package/dist/react/use-telescope-stream.d.ts.map +1 -0
- package/dist/react/use-telescope-stream.js +40 -0
- package/dist/react/use-telescope-stream.js.map +1 -0
- package/dist/server/index.d.ts +3 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/telescope-ui.controller.d.ts.map +1 -1
- package/dist/server/telescope-ui.controller.js +3 -1
- package/dist/server/telescope-ui.controller.js.map +1 -1
- package/dist/server/telescope-ui.module.d.ts +28 -1
- package/dist/server/telescope-ui.module.d.ts.map +1 -1
- package/dist/server/telescope-ui.module.js +48 -4
- package/dist/server/telescope-ui.module.js.map +1 -1
- package/dist/server/telescope-ui.options.d.ts +63 -0
- package/dist/server/telescope-ui.options.d.ts.map +1 -1
- package/dist/server/telescope-ui.options.js.map +1 -1
- package/dist/spa/assets/index-BfyQ_2IN.css +1 -0
- package/dist/spa/assets/index-EBJiTdQF.js +159 -0
- package/dist/spa/index.html +2 -2
- package/package.json +75 -36
- package/skills/telescope-ui-dashboard/SKILL.md +203 -0
- package/dist/react/components/type-tabs.d.ts +0 -5
- package/dist/react/components/type-tabs.d.ts.map +0 -1
- package/dist/react/components/type-tabs.js +0 -8
- package/dist/react/components/type-tabs.js.map +0 -1
- package/dist/spa/assets/index-CCzTpxj3.css +0 -1
- package/dist/spa/assets/index-w0XTI5OM.js +0 -135
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flattens a flame tree into positioned cells using the icicle layout (root at
|
|
3
|
+
* top, children below, each child's width proportional to its `totalMs` share of
|
|
4
|
+
* the parent). Children are laid out left-to-right widest-first so the hot path
|
|
5
|
+
* reads down the left edge — the convention Chrome DevTools / speedscope use.
|
|
6
|
+
*
|
|
7
|
+
* `minWidthFraction` prunes cells narrower than the given fraction of the root,
|
|
8
|
+
* so a 50k-node profile doesn't emit tens of thousands of sub-pixel divs.
|
|
9
|
+
*/
|
|
10
|
+
export function flattenFlame(root, minWidthFraction = 0.002) {
|
|
11
|
+
const totalMs = root.totalMs > 0 ? root.totalMs : 1;
|
|
12
|
+
const cells = [];
|
|
13
|
+
const walk = (node, depth, x, width, key) => {
|
|
14
|
+
if (width < minWidthFraction)
|
|
15
|
+
return;
|
|
16
|
+
cells.push({ key, node, depth, x, width });
|
|
17
|
+
const children = [...node.children].sort((a, b) => b.totalMs - a.totalMs);
|
|
18
|
+
let childX = x;
|
|
19
|
+
for (let i = 0; i < children.length; i++) {
|
|
20
|
+
const child = children[i];
|
|
21
|
+
if (child === undefined)
|
|
22
|
+
continue;
|
|
23
|
+
const childWidth = (child.totalMs / totalMs) * 1;
|
|
24
|
+
walk(child, depth + 1, childX, childWidth, `${key}.${i}`);
|
|
25
|
+
childX += childWidth;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
walk(root, 0, 0, 1, '0');
|
|
29
|
+
return cells;
|
|
30
|
+
}
|
|
31
|
+
/** Max depth (number of rows) in a flattened cell list. */
|
|
32
|
+
export function flameDepth(cells) {
|
|
33
|
+
return cells.reduce((max, c) => Math.max(max, c.depth), 0) + 1;
|
|
34
|
+
}
|
|
35
|
+
/** A stable color for a frame, hashed from its name so siblings differ but a
|
|
36
|
+
* frame keeps its hue across renders. Warm palette (flamegraph convention). */
|
|
37
|
+
export function flameColor(name) {
|
|
38
|
+
let hash = 0;
|
|
39
|
+
for (let i = 0; i < name.length; i++)
|
|
40
|
+
hash = (hash * 31 + name.charCodeAt(i)) | 0;
|
|
41
|
+
// Hue in the warm band (0–45deg: red→orange→yellow), varied saturation.
|
|
42
|
+
const hue = Math.abs(hash) % 46;
|
|
43
|
+
const sat = 55 + (Math.abs(hash >> 8) % 25);
|
|
44
|
+
const light = 45 + (Math.abs(hash >> 16) % 12);
|
|
45
|
+
return `hsl(${hue}, ${sat}%, ${light}%)`;
|
|
46
|
+
}
|
|
47
|
+
export function formatProfileMs(ms) {
|
|
48
|
+
if (ms < 1)
|
|
49
|
+
return '<1ms';
|
|
50
|
+
if (ms < 1000)
|
|
51
|
+
return `${Math.round(ms)}ms`;
|
|
52
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=flamegraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flamegraph.js","sourceRoot":"","sources":["../../../src/react/components/flamegraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inertia entries carry `content: { component, statusCode, isPartial,
|
|
3
|
+
* versionMismatch, props: { deferred }, pageBytes, ... }`. This module derives a
|
|
4
|
+
* small set of status pills from that content: a red `409` when the render was a
|
|
5
|
+
* forced version-mismatch reload, a `partial` chip for partial reloads, a
|
|
6
|
+
* `deferred` chip when there are deferred prop groups, and a human-readable
|
|
7
|
+
* page-size chip. Mirrors the semantic-variant style of `cache-badge.tsx`.
|
|
8
|
+
*/
|
|
9
|
+
import { type BadgeProps } from '../ui/index.js';
|
|
10
|
+
export interface InertiaBadgeInfo {
|
|
11
|
+
label: string;
|
|
12
|
+
/**
|
|
13
|
+
* Semantic role, not a colour: which `Badge` variant renders this pill.
|
|
14
|
+
* Prefer this over {@link InertiaBadgeInfo.className} in new code.
|
|
15
|
+
*/
|
|
16
|
+
variant: NonNullable<BadgeProps['variant']>;
|
|
17
|
+
/** Resolved class string for the variant, for callers rendering their own element. */
|
|
18
|
+
className: string;
|
|
19
|
+
}
|
|
20
|
+
/** Format a byte count as a short human-readable string (e.g. `1.2 KB`). */
|
|
21
|
+
export declare function humanBytes(bytes: number): string;
|
|
22
|
+
/**
|
|
23
|
+
* Pure mapping from entry content to the list of inertia pill descriptors;
|
|
24
|
+
* empty array for non-inertia / unrecognized content. The 409 version-mismatch
|
|
25
|
+
* chip comes first (it's the most diagnostic), then partial, then deferred, then
|
|
26
|
+
* the page-size chip.
|
|
27
|
+
*/
|
|
28
|
+
export declare function inertiaBadges(content: unknown): InertiaBadgeInfo[];
|
|
29
|
+
/** Inertia status pills; renders nothing for non-inertia content. */
|
|
30
|
+
export declare function InertiaBadge({ content }: {
|
|
31
|
+
content: unknown;
|
|
32
|
+
}): JSX.Element | null;
|
|
33
|
+
//# sourceMappingURL=inertia-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inertia-badge.d.ts","sourceRoot":"","sources":["../../../src/react/components/inertia-badge.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAS,KAAK,UAAU,EAAiB,MAAM,gBAAgB,CAAC;AA8BvE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,EAAE,CASlE;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAYlF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Inertia entries carry `content: { component, statusCode, isPartial,
|
|
4
|
+
* versionMismatch, props: { deferred }, pageBytes, ... }`. This module derives a
|
|
5
|
+
* small set of status pills from that content: a red `409` when the render was a
|
|
6
|
+
* forced version-mismatch reload, a `partial` chip for partial reloads, a
|
|
7
|
+
* `deferred` chip when there are deferred prop groups, and a human-readable
|
|
8
|
+
* page-size chip. Mirrors the semantic-variant style of `cache-badge.tsx`.
|
|
9
|
+
*/
|
|
10
|
+
import { Badge, badgeVariants } from '../ui/index.js';
|
|
11
|
+
/** Narrow unknown entry content to the (defensive) inertia badge shape. */
|
|
12
|
+
function readBadgeContent(content) {
|
|
13
|
+
if (typeof content !== 'object' || content === null)
|
|
14
|
+
return null;
|
|
15
|
+
const record = content;
|
|
16
|
+
if (typeof record.component !== 'string')
|
|
17
|
+
return null;
|
|
18
|
+
const props = typeof record.props === 'object' && record.props !== null
|
|
19
|
+
? record.props
|
|
20
|
+
: {};
|
|
21
|
+
const deferred = typeof props.deferred === 'object' && props.deferred !== null
|
|
22
|
+
? props.deferred
|
|
23
|
+
: {};
|
|
24
|
+
return {
|
|
25
|
+
isPartial: record.isPartial === true,
|
|
26
|
+
versionMismatch: record.versionMismatch === true,
|
|
27
|
+
pageBytes: typeof record.pageBytes === 'number' ? record.pageBytes : 0,
|
|
28
|
+
deferred,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function badge(label, variant) {
|
|
32
|
+
return { label, variant, className: badgeVariants({ variant }) };
|
|
33
|
+
}
|
|
34
|
+
/** Format a byte count as a short human-readable string (e.g. `1.2 KB`). */
|
|
35
|
+
export function humanBytes(bytes) {
|
|
36
|
+
if (!Number.isFinite(bytes) || bytes <= 0)
|
|
37
|
+
return '0 B';
|
|
38
|
+
if (bytes < 1024)
|
|
39
|
+
return `${bytes} B`;
|
|
40
|
+
const kb = bytes / 1024;
|
|
41
|
+
if (kb < 1024)
|
|
42
|
+
return `${kb.toFixed(1)} KB`;
|
|
43
|
+
return `${(kb / 1024).toFixed(1)} MB`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Pure mapping from entry content to the list of inertia pill descriptors;
|
|
47
|
+
* empty array for non-inertia / unrecognized content. The 409 version-mismatch
|
|
48
|
+
* chip comes first (it's the most diagnostic), then partial, then deferred, then
|
|
49
|
+
* the page-size chip.
|
|
50
|
+
*/
|
|
51
|
+
export function inertiaBadges(content) {
|
|
52
|
+
const info = readBadgeContent(content);
|
|
53
|
+
if (info === null)
|
|
54
|
+
return [];
|
|
55
|
+
const badges = [];
|
|
56
|
+
if (info.versionMismatch)
|
|
57
|
+
badges.push(badge('409', 'bad'));
|
|
58
|
+
if (info.isPartial)
|
|
59
|
+
badges.push(badge('partial', 'warn'));
|
|
60
|
+
if (Object.keys(info.deferred).length > 0)
|
|
61
|
+
badges.push(badge('deferred', 'brand'));
|
|
62
|
+
badges.push(badge(humanBytes(info.pageBytes), 'muted'));
|
|
63
|
+
return badges;
|
|
64
|
+
}
|
|
65
|
+
/** Inertia status pills; renders nothing for non-inertia content. */
|
|
66
|
+
export function InertiaBadge({ content }) {
|
|
67
|
+
const badges = inertiaBadges(content);
|
|
68
|
+
if (badges.length === 0)
|
|
69
|
+
return null;
|
|
70
|
+
return (_jsx("span", { className: "inline-flex items-center gap-1", children: badges.map((pill) => (_jsx(Badge, { variant: pill.variant, children: pill.label }, pill.label))) }));
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=inertia-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inertia-badge.js","sourceRoot":"","sources":["../../../src/react/components/inertia-badge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The detail body for an `inertia` entry. Renders the rendered component, the
|
|
3
|
+
* partial-reload decision, prop classification, deferred groups, the resolved
|
|
4
|
+
* props tree, history flags and response size. Every field is read defensively
|
|
5
|
+
* — the content may have been redacted/clipped by the Recorder, and an older
|
|
6
|
+
* producer may omit fields — so nothing is assumed beyond `component`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function InertiaBody({ content }: {
|
|
9
|
+
content: unknown;
|
|
10
|
+
}): JSX.Element;
|
|
11
|
+
//# sourceMappingURL=inertia-body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inertia-body.d.ts","sourceRoot":"","sources":["../../../src/react/components/inertia-body.tsx"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA+M1E"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { createElement as _createElement } from "react";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { prettyJson } from './entry-detail.js';
|
|
4
|
+
import { humanBytes } from './inertia-badge.js';
|
|
5
|
+
/**
|
|
6
|
+
* The detail body for an `inertia` entry. Renders the rendered component, the
|
|
7
|
+
* partial-reload decision, prop classification, deferred groups, the resolved
|
|
8
|
+
* props tree, history flags and response size. Every field is read defensively
|
|
9
|
+
* — the content may have been redacted/clipped by the Recorder, and an older
|
|
10
|
+
* producer may omit fields — so nothing is assumed beyond `component`.
|
|
11
|
+
*/
|
|
12
|
+
export function InertiaBody({ content }) {
|
|
13
|
+
const record = typeof content === 'object' && content !== null ? content : {};
|
|
14
|
+
const component = typeof record.component === 'string' ? record.component : '';
|
|
15
|
+
const method = typeof record.method === 'string' ? record.method : '';
|
|
16
|
+
const url = typeof record.url === 'string' ? record.url : '';
|
|
17
|
+
const statusCode = typeof record.statusCode === 'number' ? record.statusCode : null;
|
|
18
|
+
const isPartial = record.isPartial === true;
|
|
19
|
+
const versionMismatch = record.versionMismatch === true;
|
|
20
|
+
const assetVersion = typeof record.assetVersion === 'string' ? record.assetVersion : null;
|
|
21
|
+
const clientVersion = typeof record.clientVersion === 'string' ? record.clientVersion : null;
|
|
22
|
+
const encryptHistory = record.encryptHistory === true;
|
|
23
|
+
const clearHistory = record.clearHistory === true;
|
|
24
|
+
const pageBytes = typeof record.pageBytes === 'number' ? record.pageBytes : 0;
|
|
25
|
+
const ssr = record.ssr === true;
|
|
26
|
+
const partial = readPartial(record.partial);
|
|
27
|
+
const props = readProps(record.props);
|
|
28
|
+
const excluded = unique([...partial.except, ...props.excludedKeys]);
|
|
29
|
+
const propRows = [
|
|
30
|
+
{ label: 'Shared', keys: props.sharedKeys, accent: 'text-sky-300' },
|
|
31
|
+
{ label: 'Final', keys: props.finalKeys, accent: 'text-foreground' },
|
|
32
|
+
{ label: 'Optional', keys: props.optionalKeys, accent: 'text-indigo-300' },
|
|
33
|
+
{ label: 'Once', keys: props.onceKeys, accent: 'text-fuchsia-300' },
|
|
34
|
+
{ label: 'Merge', keys: props.merge, accent: 'text-teal-300', annotations: props.matchPropsOn },
|
|
35
|
+
{
|
|
36
|
+
label: 'Deep-merge',
|
|
37
|
+
keys: props.deepMerge,
|
|
38
|
+
accent: 'text-teal-300',
|
|
39
|
+
annotations: props.matchPropsOn,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: 'Prepend',
|
|
43
|
+
keys: props.prepend,
|
|
44
|
+
accent: 'text-teal-300',
|
|
45
|
+
annotations: props.matchPropsOn,
|
|
46
|
+
},
|
|
47
|
+
{ label: 'Rescued', keys: props.rescued, accent: 'text-bad' },
|
|
48
|
+
];
|
|
49
|
+
return (_jsxs("div", { children: [_jsxs("h3", { className: "mb-2 flex flex-wrap items-center gap-2 font-mono text-sm text-cyan-400", children: [method ? (_jsx("span", { className: "rounded bg-panel px-1.5 py-0.5 text-[10px] uppercase", children: method })) : null, url ? _jsx("span", { className: "text-muted-foreground", children: url }) : null, _jsx("span", { className: "text-muted-foreground", children: "\u2192" }), _jsx("span", { className: "text-foreground", children: component }), statusCode !== null ? (_jsx("span", { className: `rounded bg-panel px-1.5 py-0.5 text-[10px] ${statusCode === 409 ? 'text-bad' : 'text-muted-foreground'}`, children: statusCode })) : null, isPartial ? (_jsx("span", { className: "rounded bg-panel px-1.5 py-0.5 text-[10px] text-warn", children: "partial" })) : null, assetVersion ? (_jsxs("span", { className: "rounded bg-panel px-1.5 py-0.5 text-[10px] text-muted-foreground", children: ["asset ", assetVersion] })) : null] }), versionMismatch ? (_jsxs("div", { className: "mb-4 rounded border border-bad tint-bad p-3 text-xs text-bad", children: ["Version mismatch: client ", _jsx("code", { className: "font-mono", children: clientVersion ?? 'unknown' }), " \u2260 server ", _jsx("code", { className: "font-mono", children: assetVersion ?? 'unknown' }), " \u2192 409 forced full reload."] })) : null, isPartial ? (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: "Partial reload" }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsx(KeyColumn, { label: "Kept", keys: partial.only, accent: "text-brand" }), _jsx(KeyColumn, { label: "Excluded", keys: excluded, accent: "text-bad" })] }), partial.reset.length > 0 ||
|
|
50
|
+
partial.resetOnce.length > 0 ||
|
|
51
|
+
partial.exceptOnce.length > 0 ? (_jsxs("div", { className: "mt-2 flex flex-wrap gap-3", children: [_jsx(ChipRow, { label: "reset", keys: partial.reset, accent: "text-warn" }), _jsx(ChipRow, { label: "reset-once", keys: partial.resetOnce, accent: "text-warn" }), _jsx(ChipRow, { label: "except-once", keys: partial.exceptOnce, accent: "text-warn" })] })) : null] })) : null, _jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: "Props" }), _jsx("div", { className: "flex flex-col gap-1.5", children: propRows.map((r) => (_createElement(ChipRow, { ...r, key: r.label }))) })] }), Object.keys(props.deferred).length > 0 ? (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: "Deferred" }), _jsx("div", { className: "flex flex-col gap-1.5", children: Object.entries(props.deferred).map(([group, paths]) => (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsxs("span", { className: "font-mono text-[11px] text-violet-300", children: [group, ":"] }), paths.map((path) => (_jsx("span", { className: "rounded bg-panel px-1.5 py-0.5 font-mono text-[10px] text-foreground", children: path }, path)))] }, group))) })] })) : null, Object.keys(props.once).length > 0 ? (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: "Once cache" }), _jsx("div", { className: "flex flex-col gap-1.5", children: Object.entries(props.once).map(([cacheKey, meta]) => (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx("span", { className: "rounded bg-panel px-1.5 py-0.5 font-mono text-[10px] text-fuchsia-300", children: cacheKey }), _jsxs("span", { className: "text-[10px] text-muted-foreground", children: ["\u2192 ", meta.prop] }), _jsx("span", { className: "text-[10px] text-muted-foreground", children: meta.expiresAt == null ? 'no expiry' : `expires ${meta.expiresAt}` })] }, cacheKey))) })] })) : null, Object.keys(props.scroll).length > 0 ? (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: "Scroll" }), _jsx("div", { className: "flex flex-col gap-1.5", children: Object.entries(props.scroll).map(([path, cursor]) => (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx("span", { className: "rounded bg-panel px-1.5 py-0.5 font-mono text-[10px] text-teal-300", children: path }), _jsxs("span", { className: "text-[10px] text-muted-foreground", children: ["page \u00AB", cursor.pageName, "\u00BB"] }), _jsxs("span", { className: "text-[10px] text-muted-foreground", children: [fmtCursor(cursor.previousPage), " \u2190 ", fmtCursor(cursor.currentPage), " \u2192", ' ', fmtCursor(cursor.nextPage)] }), cursor.reset ? (_jsx("span", { className: "rounded bg-panel px-1.5 py-0.5 text-[10px] text-warn", children: "reset" })) : null] }, path))) })] })) : null, _jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: "Resolved props" }), _jsx("pre", { className: "overflow-auto rounded bg-panel p-3 text-xs text-foreground", children: prettyJson(record.resolvedProps) })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx(FlagChip, { label: "encryptHistory", on: encryptHistory }), _jsx(FlagChip, { label: "clearHistory", on: clearHistory }), _jsx("span", { className: "rounded bg-panel px-1.5 py-0.5 text-[10px] text-muted-foreground", children: humanBytes(pageBytes) }), _jsxs("span", { className: "rounded bg-panel px-1.5 py-0.5 text-[10px] text-muted-foreground", children: ["SSR: ", ssr ? 'yes' : 'no'] })] })] }));
|
|
52
|
+
}
|
|
53
|
+
function readPartial(value) {
|
|
54
|
+
const record = typeof value === 'object' && value !== null ? value : {};
|
|
55
|
+
return {
|
|
56
|
+
only: strArray(record.only),
|
|
57
|
+
except: strArray(record.except),
|
|
58
|
+
reset: strArray(record.reset),
|
|
59
|
+
resetOnce: strArray(record.resetOnce),
|
|
60
|
+
exceptOnce: strArray(record.exceptOnce),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function readProps(value) {
|
|
64
|
+
const record = typeof value === 'object' && value !== null ? value : {};
|
|
65
|
+
const deferred = typeof record.deferred === 'object' && record.deferred !== null
|
|
66
|
+
? record.deferred
|
|
67
|
+
: {};
|
|
68
|
+
// matchPropsOn values may be a string or string[] on the wire — normalize to a
|
|
69
|
+
// display string so it can annotate the merge/prepend chips.
|
|
70
|
+
const matchPropsOn = {};
|
|
71
|
+
if (typeof record.matchPropsOn === 'object' && record.matchPropsOn !== null) {
|
|
72
|
+
for (const [k, v] of Object.entries(record.matchPropsOn)) {
|
|
73
|
+
matchPropsOn[k] = Array.isArray(v) ? v.join(', ') : String(v);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const once = typeof record.once === 'object' && record.once !== null
|
|
77
|
+
? record.once
|
|
78
|
+
: {};
|
|
79
|
+
const scroll = typeof record.scroll === 'object' && record.scroll !== null
|
|
80
|
+
? record.scroll
|
|
81
|
+
: {};
|
|
82
|
+
return {
|
|
83
|
+
sharedKeys: strArray(record.sharedKeys),
|
|
84
|
+
finalKeys: strArray(record.finalKeys),
|
|
85
|
+
deferred,
|
|
86
|
+
merge: strArray(record.merge),
|
|
87
|
+
deepMerge: strArray(record.deepMerge),
|
|
88
|
+
prepend: strArray(record.prepend),
|
|
89
|
+
matchPropsOn,
|
|
90
|
+
optionalKeys: strArray(record.optionalKeys),
|
|
91
|
+
onceKeys: strArray(record.onceKeys),
|
|
92
|
+
once,
|
|
93
|
+
scroll,
|
|
94
|
+
rescued: strArray(record.rescued),
|
|
95
|
+
excludedKeys: strArray(record.excludedKeys),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function strArray(value) {
|
|
99
|
+
return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
|
|
100
|
+
}
|
|
101
|
+
/** Render a scroll cursor page identifier (number, opaque string, or absent). */
|
|
102
|
+
function fmtCursor(value) {
|
|
103
|
+
if (value === null || value === undefined)
|
|
104
|
+
return '∅';
|
|
105
|
+
return String(value);
|
|
106
|
+
}
|
|
107
|
+
function unique(values) {
|
|
108
|
+
return [...new Set(values)];
|
|
109
|
+
}
|
|
110
|
+
/** A labelled inline row of key chips; renders nothing when there are no keys. */
|
|
111
|
+
function ChipRow({ label, keys, accent, annotations, }) {
|
|
112
|
+
if (keys.length === 0)
|
|
113
|
+
return null;
|
|
114
|
+
return (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx("span", { className: "w-20 shrink-0 text-[11px] text-muted-foreground", children: label }), keys.map((key) => {
|
|
115
|
+
const match = annotations?.[key];
|
|
116
|
+
return (_jsxs("span", { className: `rounded bg-panel px-1.5 py-0.5 font-mono text-[10px] ${accent}`, children: [key, match ? _jsxs("span", { className: "text-muted-foreground", children: [" \u00B7 ", match] }) : null] }, key));
|
|
117
|
+
})] }));
|
|
118
|
+
}
|
|
119
|
+
/** A labelled column of key chips for the partial-reload Kept/Excluded panels. */
|
|
120
|
+
function KeyColumn({ label, keys, accent, }) {
|
|
121
|
+
return (_jsxs("div", { className: "rounded bg-panel p-2", children: [_jsx("div", { className: "mb-1.5 text-[10px] uppercase tracking-wide text-muted-foreground", children: label }), keys.length > 0 ? (_jsx("div", { className: "flex flex-wrap gap-1", children: keys.map((key) => (_jsx("span", { className: `font-mono text-[10px] ${accent}`, children: key }, key))) })) : (_jsx("span", { className: "text-[10px] text-muted-foreground", children: "\u2014" }))] }));
|
|
122
|
+
}
|
|
123
|
+
/** A boolean flag chip: green when on, neutral when off. */
|
|
124
|
+
function FlagChip({ label, on }) {
|
|
125
|
+
return (_jsxs("span", { className: `rounded bg-panel px-1.5 py-0.5 text-[10px] ${on ? 'text-brand' : 'text-muted-foreground'}`, children: [label, ": ", on ? 'on' : 'off'] }));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=inertia-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inertia-body.js","sourceRoot":"","sources":["../../../src/react/components/inertia-body.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cards for the entries `@dudousxd/nestjs-telescope-official` records from NestJS's first-party
|
|
3
|
+
* diagnostics channels: `resilience` (`@nestjs/resilience`), `workflow` (`@nestjs/workflows`) and
|
|
4
|
+
* `auth` (`@nestjs/authentication` + `@nestjs/authorization`). Their payloads are 0.x and read
|
|
5
|
+
* defensively: every field is optional, and the card shows whatever scalar fields an entry carries
|
|
6
|
+
* rather than a fixed list, so a field a later version adds still shows up.
|
|
7
|
+
*/
|
|
8
|
+
export declare const OFFICIAL_EVENT_TYPES: readonly ["resilience", "workflow", "auth"];
|
|
9
|
+
export declare function isOfficialEventType(type: string): boolean;
|
|
10
|
+
/** One-line label for the entries table. */
|
|
11
|
+
export declare function officialEventLabel(type: string, content: unknown): string;
|
|
12
|
+
export declare function OfficialEventBody({ type, content, }: {
|
|
13
|
+
type: string;
|
|
14
|
+
content: unknown;
|
|
15
|
+
}): JSX.Element;
|
|
16
|
+
//# sourceMappingURL=official-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"official-event.d.ts","sourceRoot":"","sources":["../../../src/react/components/official-event.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,oBAAoB,6CAA8C,CAAC;AAEhF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAqDD,4CAA4C;AAC5C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAKzE;AAWD,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,GAAG,CAAC,OAAO,CAyDd"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Cards for the entries `@dudousxd/nestjs-telescope-official` records from NestJS's first-party
|
|
4
|
+
* diagnostics channels: `resilience` (`@nestjs/resilience`), `workflow` (`@nestjs/workflows`) and
|
|
5
|
+
* `auth` (`@nestjs/authentication` + `@nestjs/authorization`). Their payloads are 0.x and read
|
|
6
|
+
* defensively: every field is optional, and the card shows whatever scalar fields an entry carries
|
|
7
|
+
* rather than a fixed list, so a field a later version adds still shows up.
|
|
8
|
+
*/
|
|
9
|
+
export const OFFICIAL_EVENT_TYPES = ['resilience', 'workflow', 'auth'];
|
|
10
|
+
export function isOfficialEventType(type) {
|
|
11
|
+
return OFFICIAL_EVENT_TYPES.includes(type);
|
|
12
|
+
}
|
|
13
|
+
function asRecord(content) {
|
|
14
|
+
return typeof content === 'object' && content !== null && !Array.isArray(content)
|
|
15
|
+
? content
|
|
16
|
+
: {};
|
|
17
|
+
}
|
|
18
|
+
function s(value) {
|
|
19
|
+
return typeof value === 'string' && value !== '' ? value : null;
|
|
20
|
+
}
|
|
21
|
+
/** Fields the header already shows, or that get their own block. */
|
|
22
|
+
const HEADER_KEYS = new Set(['event', 'source', 'error', 'output', 'waits', 'status']);
|
|
23
|
+
/** Events that read as a failure in the badge. */
|
|
24
|
+
const BAD_EVENTS = new Set([
|
|
25
|
+
'timeout',
|
|
26
|
+
'circuit-open',
|
|
27
|
+
'circuit-rejected',
|
|
28
|
+
'bulkhead-rejected',
|
|
29
|
+
'rate-limited',
|
|
30
|
+
'workflow-failed',
|
|
31
|
+
'workflow-compensation-failed',
|
|
32
|
+
'step-failed',
|
|
33
|
+
'signal-timed-out',
|
|
34
|
+
'mfa-failed',
|
|
35
|
+
'refresh-token-reused',
|
|
36
|
+
'magic-link-refused',
|
|
37
|
+
'session-touch-failed',
|
|
38
|
+
'denied',
|
|
39
|
+
]);
|
|
40
|
+
/** The subject of an official event: the policy, the workflow (and step), or who it concerns. */
|
|
41
|
+
function subjectOf(type, record) {
|
|
42
|
+
if (type === 'resilience') {
|
|
43
|
+
const source = s(record.source);
|
|
44
|
+
return `${s(record.policy) ?? 'unknown'}${source ? ` · ${source}` : ''}`;
|
|
45
|
+
}
|
|
46
|
+
if (type === 'workflow') {
|
|
47
|
+
const step = s(record.step);
|
|
48
|
+
return `${s(record.workflow) ?? 'unknown'}${step ? ` › ${step}` : ''}`;
|
|
49
|
+
}
|
|
50
|
+
if (record.source === 'authorization') {
|
|
51
|
+
const policy = s(record.policy);
|
|
52
|
+
const target = policy ? `${policy}.${s(record.ability) ?? '?'}` : 'no check declared';
|
|
53
|
+
return `${target}${s(record.reason) ? ` (${String(record.reason)})` : ''}`;
|
|
54
|
+
}
|
|
55
|
+
return s(record.userId) ?? s(record.email) ?? '';
|
|
56
|
+
}
|
|
57
|
+
/** One-line label for the entries table. */
|
|
58
|
+
export function officialEventLabel(type, content) {
|
|
59
|
+
const record = asRecord(content);
|
|
60
|
+
const event = s(record.event) ?? type;
|
|
61
|
+
const subject = subjectOf(type, record);
|
|
62
|
+
return subject ? `${event} ${subject}` : event;
|
|
63
|
+
}
|
|
64
|
+
function display(value) {
|
|
65
|
+
if (typeof value === 'number' && value > 1e12 && value < 1e14) {
|
|
66
|
+
// Epoch-millisecond fields (`at`, `wakeAt`, `retryAt`, schedule `from`/`to`).
|
|
67
|
+
return `${new Date(value).toISOString()} (${value})`;
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(value))
|
|
70
|
+
return value.map((v) => String(v)).join(', ');
|
|
71
|
+
return String(value);
|
|
72
|
+
}
|
|
73
|
+
export function OfficialEventBody({ type, content, }) {
|
|
74
|
+
const record = asRecord(content);
|
|
75
|
+
const event = s(record.event) ?? type;
|
|
76
|
+
const bad = BAD_EVENTS.has(event);
|
|
77
|
+
const fields = Object.entries(record).filter(([key, value]) => !HEADER_KEYS.has(key) &&
|
|
78
|
+
value !== null &&
|
|
79
|
+
value !== undefined &&
|
|
80
|
+
(typeof value !== 'object' ||
|
|
81
|
+
(Array.isArray(value) && value.every((v) => typeof v !== 'object'))));
|
|
82
|
+
const error = record.error;
|
|
83
|
+
const extra = ['output', 'status', 'waits']
|
|
84
|
+
.filter((key) => record[key] !== undefined)
|
|
85
|
+
.map((key) => [key, record[key]]);
|
|
86
|
+
return (_jsxs("div", { "data-testid": "official-event", children: [_jsxs("h3", { className: "mb-3 flex flex-wrap items-center gap-2 font-mono text-sm text-foreground", children: [_jsx("span", { className: `rounded bg-panel px-1.5 py-0.5 text-[10px] uppercase ${bad ? 'text-bad' : 'text-brand'}`, children: event }), _jsx("span", { children: subjectOf(type, record) }), s(record.source) ? (_jsxs("span", { className: "text-[10px] text-muted-foreground", children: ["@nestjs/", String(record.source)] })) : null] }), fields.length > 0 ? (_jsx("dl", { className: "mb-4 grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1 text-xs", children: fields.map(([key, value]) => (_jsxs("div", { className: "contents", children: [_jsx("dt", { className: "text-muted-foreground", children: key }), _jsx("dd", { className: "break-all font-mono text-foreground", children: display(value) })] }, key))) })) : null, error !== undefined && error !== null ? (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: "Error" }), _jsx("pre", { className: "overflow-auto rounded bg-panel p-3 text-xs text-bad", children: JSON.stringify(error, null, 2) })] })) : null, extra.map(([key, value]) => (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: key }), _jsx("pre", { className: "overflow-auto rounded bg-panel p-3 text-xs text-foreground", children: JSON.stringify(value, null, 2) })] }, key)))] }));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=official-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"official-event.js","sourceRoot":"","sources":["../../../src/react/components/official-event.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pulse-panel.d.ts","sourceRoot":"","sources":["../../../src/react/components/pulse-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWzD,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"pulse-panel.d.ts","sourceRoot":"","sources":["../../../src/react/components/pulse-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWzD,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,GAAG,GAAG,CAAC,OAAO,CAyKd"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
function Section({ title, children }) {
|
|
3
|
-
return (_jsxs("section", { className: "mb-6", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-
|
|
3
|
+
return (_jsxs("section", { className: "mb-6", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-muted-foreground", children: title }), children] }));
|
|
4
4
|
}
|
|
5
5
|
export function PulsePanel({ report, onSelectEntry, onSelectFamily, onSelectRoute, onSelectOutgoing, }) {
|
|
6
|
-
return (_jsxs("div", { className: "text-xs", children: [report.truncated && (_jsxs("p", { className: "mb-4 text-
|
|
6
|
+
return (_jsxs("div", { className: "text-xs", children: [report.truncated && (_jsxs("p", { className: "mb-4 text-warn", children: ["Scan truncated at ", report.scanned, " entries \u2014 widen the window with care."] })), _jsx(Section, { title: "Entries by type", children: _jsxs("div", { className: "flex flex-wrap gap-3", children: [Object.entries(report.counts).map(([type, count]) => (_jsxs("span", { className: "rounded bg-panel px-2 py-1", children: [_jsx("span", { className: "text-brand", children: type }), ' ', _jsx("span", { className: "text-foreground", children: count })] }, type))), Object.keys(report.counts).length === 0 && (_jsx("span", { className: "text-muted-foreground", children: "No entries in window." }))] }) }), _jsx(Section, { title: "Slowest", children: _jsx("table", { className: "w-full text-left", children: _jsxs("tbody", { children: [report.slowest.map((slow) => (_jsxs("tr", { tabIndex: 0, onClick: () => onSelectEntry?.(slow.id), onKeyDown: (event) => {
|
|
7
7
|
if (event.key === 'Enter' || event.key === ' ')
|
|
8
8
|
onSelectEntry?.(slow.id);
|
|
9
|
-
}, className: "cursor-pointer border-t border-
|
|
9
|
+
}, className: "cursor-pointer border-t border-line-soft hover:bg-panel", children: [_jsx("td", { className: "py-1 text-brand", children: slow.type }), _jsx("td", { className: "max-w-md truncate text-foreground", children: slow.label }), _jsxs("td", { className: "text-right text-muted-foreground", children: [slow.durationMs, "ms"] })] }, slow.id))), report.slowest.length === 0 && (_jsx("tr", { children: _jsx("td", { className: "py-1 text-muted-foreground", children: "\u2014" }) }))] }) }) }), _jsx(Section, { title: "Top exceptions", children: _jsx("table", { className: "w-full text-left", children: _jsxs("tbody", { children: [report.topExceptions.map((group) => (_jsxs("tr", { className: "border-t border-line-soft", children: [_jsx("td", { className: "py-1 text-bad", children: group.class }), _jsx("td", { className: "max-w-md truncate text-foreground", children: group.message }), _jsxs("td", { className: "text-right text-muted-foreground", children: ["\u00D7", group.count] })] }, group.familyHash))), report.topExceptions.length === 0 && (_jsx("tr", { children: _jsx("td", { className: "py-1 text-muted-foreground", children: "No exceptions \uD83C\uDF89" }) }))] }) }) }), _jsx(Section, { title: "N+1 query hotspots", children: _jsx("table", { className: "w-full text-left", children: _jsxs("tbody", { children: [report.nPlusOne.map((hotspot) => (_jsxs("tr", { tabIndex: 0, onClick: () => onSelectFamily?.(hotspot.familyHash), onKeyDown: (event) => {
|
|
10
10
|
if (event.key === 'Enter' || event.key === ' ')
|
|
11
11
|
onSelectFamily?.(hotspot.familyHash);
|
|
12
|
-
}, className: "cursor-pointer border-t border-
|
|
12
|
+
}, className: "cursor-pointer border-t border-line-soft hover:bg-panel", children: [_jsxs("td", { className: "whitespace-nowrap py-1 text-warn", children: ["\u00D7", hotspot.perRequest, _jsx("span", { className: "text-muted-foreground", children: " per request" })] }), _jsx("td", { className: "max-w-md truncate text-foreground", children: hotspot.sql }), _jsxs("td", { className: "whitespace-nowrap text-right text-muted-foreground", children: [hotspot.requests, " requests \u00B7 ", hotspot.total, " total"] })] }, hotspot.familyHash))), report.nPlusOne.length === 0 && (_jsx("tr", { children: _jsx("td", { className: "py-1 text-muted-foreground", children: "None detected" }) }))] }) }) }), _jsx(Section, { title: "Slow request hotspots", children: _jsx("table", { className: "w-full text-left", children: _jsxs("tbody", { children: [report.slowRoutes.map((route) => (_jsxs("tr", { tabIndex: 0, onClick: () => onSelectRoute?.(route.route), onKeyDown: (event) => {
|
|
13
13
|
if (event.key === 'Enter' || event.key === ' ')
|
|
14
14
|
onSelectRoute?.(route.route);
|
|
15
|
-
}, className: "cursor-pointer border-t border-
|
|
15
|
+
}, className: "cursor-pointer border-t border-line-soft hover:bg-panel", children: [_jsx("td", { className: "max-w-md truncate py-1 font-mono text-foreground", children: route.route }), _jsxs("td", { className: "whitespace-nowrap text-right text-warn", children: [route.p99, "ms", _jsx("span", { className: "text-muted-foreground", children: " p99" })] }), _jsxs("td", { className: "whitespace-nowrap text-right text-muted-foreground", children: ["\u00D7", route.count] })] }, route.route))), report.slowRoutes.length === 0 && (_jsx("tr", { children: _jsx("td", { className: "py-1 text-muted-foreground", children: "No routes over the slow threshold" }) }))] }) }) }), _jsx(Section, { title: "Slow outgoing HTTP", children: _jsx("table", { className: "w-full text-left", children: _jsxs("tbody", { children: [report.slowOutgoing.map((target) => (_jsxs("tr", { tabIndex: 0, onClick: () => onSelectOutgoing?.(target.route), onKeyDown: (event) => {
|
|
16
16
|
if (event.key === 'Enter' || event.key === ' ')
|
|
17
17
|
onSelectOutgoing?.(target.route);
|
|
18
|
-
}, className: "cursor-pointer border-t border-
|
|
18
|
+
}, className: "cursor-pointer border-t border-line-soft hover:bg-panel", children: [_jsx("td", { className: "max-w-md truncate py-1 font-mono text-foreground", children: target.route }), _jsxs("td", { className: "whitespace-nowrap text-right text-warn", children: [target.p99, "ms", _jsx("span", { className: "text-muted-foreground", children: " p99" })] }), _jsxs("td", { className: "whitespace-nowrap text-right text-muted-foreground", children: ["\u00D7", target.count] })] }, target.route))), report.slowOutgoing.length === 0 && (_jsx("tr", { children: _jsx("td", { className: "py-1 text-muted-foreground", children: "No outgoing calls over the slow threshold" }) }))] }) }) })] }));
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=pulse-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pulse-panel.js","sourceRoot":"","sources":["../../../src/react/components/pulse-panel.tsx"],"names":[],"mappings":";AAEA,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAgD;IAChF,OAAO,CACL,mBAAS,SAAS,EAAC,MAAM,aACvB,aAAI,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"pulse-panel.js","sourceRoot":"","sources":["../../../src/react/components/pulse-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnqueueJobForm.d.ts","sourceRoot":"","sources":["../../../../src/react/components/queues/EnqueueJobForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"EnqueueJobForm.d.ts","sourceRoot":"","sources":["../../../../src/react/components/queues/EnqueueJobForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAoBlE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,YAAY,EACZ,MAAM,EACN,KAAK,GACN,EAAE;IACD,YAAY,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAkErB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
+
import { Button } from '../../ui/index.js';
|
|
3
4
|
import { useQueueEnqueue } from '../../use-telescope-queries.js';
|
|
4
5
|
import { supportsAction } from './JobActions.js';
|
|
5
6
|
function isForbidden(error) {
|
|
@@ -56,6 +57,6 @@ export function EnqueueJobForm({ capabilities, driver, queue, }) {
|
|
|
56
57
|
// surfaced inline via mutation.error
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
|
-
return (_jsxs("form", { onSubmit: submit, className: "space-y-2 rounded-lg border border-
|
|
60
|
+
return (_jsxs("form", { onSubmit: submit, className: "space-y-2 rounded-lg border border-line p-3", children: [_jsx("h3", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: "Send message" }), _jsx("input", { type: "text", value: name, onChange: (event) => setName(event.target.value), placeholder: "Job name (optional)", "aria-label": "Job name", className: "w-full rounded border border-line bg-background px-2 py-1 text-xs text-foreground placeholder:text-muted-foreground" }), _jsx("textarea", { value: payload, onChange: (event) => setPayload(event.target.value), placeholder: '{"to": "a@b.c"}', "aria-label": "Payload (JSON)", rows: 4, className: "w-full rounded border border-line bg-background px-2 py-1 font-mono text-xs text-foreground placeholder:text-muted-foreground" }), jsonError && _jsx("p", { className: "text-[10px] text-bad", children: jsonError }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { type: "submit", variant: "good", disabled: mutation.isPending, children: mutation.isPending ? 'Sending…' : 'Send message' }), forbidden && _jsx("span", { className: "text-[10px] text-bad", children: "Not authorized" }), sentId !== undefined && !forbidden && (_jsx("span", { className: "text-[10px] text-good", children: sentId ? `Enqueued job ${sentId}` : 'Message enqueued' }))] })] }));
|
|
60
61
|
}
|
|
61
62
|
//# sourceMappingURL=EnqueueJobForm.js.map
|