@flanksource/clicky-ui 0.3.47 → 0.3.48
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/README.md +49 -0
- package/dist/comments/CommentSidePanel.cjs +10 -4
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts +2 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +10 -4
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +2 -0
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +2 -1
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +2 -0
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +3 -0
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +3 -1
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +3 -0
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/data/CodeLine.cjs +4 -2
- package/dist/data/CodeLine.cjs.map +1 -1
- package/dist/data/CodeLine.d.ts.map +1 -1
- package/dist/data/CodeLine.js +4 -2
- package/dist/data/CodeLine.js.map +1 -1
- package/dist/data/SymbolBadge.cjs +61 -0
- package/dist/data/SymbolBadge.cjs.map +1 -0
- package/dist/data/SymbolBadge.d.ts +21 -0
- package/dist/data/SymbolBadge.d.ts.map +1 -0
- package/dist/data/SymbolBadge.js +61 -0
- package/dist/data/SymbolBadge.js.map +1 -0
- package/dist/data/test-runner/TestDetailPanel.cjs +26 -12
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +27 -13
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +6 -0
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +3 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +6 -0
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/TestTreeNode.cjs +2 -1
- package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
- package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
- package/dist/data/test-runner/TestTreeNode.js +2 -1
- package/dist/data/test-runner/TestTreeNode.js.map +1 -1
- package/dist/data/test-runner/adapter.cjs +4 -0
- package/dist/data/test-runner/adapter.cjs.map +1 -1
- package/dist/data/test-runner/adapter.d.ts +9 -0
- package/dist/data/test-runner/adapter.d.ts.map +1 -1
- package/dist/data/test-runner/adapter.js +4 -0
- package/dist/data/test-runner/adapter.js.map +1 -1
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +2 -0
- package/dist/data/test-runner/context.d.ts.map +1 -1
- package/dist/data/test-runner/context.js.map +1 -1
- package/dist/data/test-runner/index.d.ts +2 -2
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/marks.cjs +42 -1
- package/dist/data/test-runner/marks.cjs.map +1 -1
- package/dist/data/test-runner/marks.d.ts +10 -0
- package/dist/data/test-runner/marks.d.ts.map +1 -1
- package/dist/data/test-runner/marks.js +42 -1
- package/dist/data/test-runner/marks.js.map +1 -1
- package/dist/data/traces/TerminalCastPlayer.d.ts +21 -0
- package/dist/data/traces/TerminalCastPlayer.d.ts.map +1 -0
- package/dist/data/traces/TraceHarView.d.ts +13 -0
- package/dist/data/traces/TraceHarView.d.ts.map +1 -0
- package/dist/data/traces/cast.d.ts +9 -0
- package/dist/data/traces/cast.d.ts.map +1 -0
- package/dist/data/traces/fixtures.d.ts +8 -0
- package/dist/data/traces/fixtures.d.ts.map +1 -0
- package/dist/data/traces/har-adapter.d.ts +13 -0
- package/dist/data/traces/har-adapter.d.ts.map +1 -0
- package/dist/data/traces/terminal-screen.d.ts +45 -0
- package/dist/data/traces/terminal-screen.d.ts.map +1 -0
- package/dist/data/traces/terminal-timeline.d.ts +26 -0
- package/dist/data/traces/terminal-timeline.d.ts.map +1 -0
- package/dist/data/traces/types.d.ts +141 -0
- package/dist/data/traces/types.d.ts.map +1 -0
- package/dist/data/verification/VerificationResults.cjs +4 -0
- package/dist/data/verification/VerificationResults.cjs.map +1 -1
- package/dist/data/verification/VerificationResults.d.ts +3 -1
- package/dist/data/verification/VerificationResults.d.ts.map +1 -1
- package/dist/data/verification/VerificationResults.js +4 -0
- package/dist/data/verification/VerificationResults.js.map +1 -1
- package/dist/data/verification/adapterViews.cjs +12 -3
- package/dist/data/verification/adapterViews.cjs.map +1 -1
- package/dist/data/verification/adapterViews.d.ts +4 -1
- package/dist/data/verification/adapterViews.d.ts.map +1 -1
- package/dist/data/verification/adapterViews.js +12 -3
- package/dist/data/verification/adapterViews.js.map +1 -1
- package/dist/data/verification/adapters.cjs +53 -10
- package/dist/data/verification/adapters.cjs.map +1 -1
- package/dist/data/verification/adapters.d.ts +7 -1
- package/dist/data/verification/adapters.d.ts.map +1 -1
- package/dist/data/verification/adapters.js +53 -10
- package/dist/data/verification/adapters.js.map +1 -1
- package/dist/data/verification/index.d.ts +4 -2
- package/dist/data/verification/index.d.ts.map +1 -1
- package/dist/data/verification/stepKind.cjs +217 -0
- package/dist/data/verification/stepKind.cjs.map +1 -0
- package/dist/data/verification/stepKind.d.ts +87 -0
- package/dist/data/verification/stepKind.d.ts.map +1 -0
- package/dist/data/verification/stepKind.js +217 -0
- package/dist/data/verification/stepKind.js.map +1 -0
- package/dist/data/verification/stepKindViews.cjs +111 -0
- package/dist/data/verification/stepKindViews.cjs.map +1 -0
- package/dist/data/verification/stepKindViews.d.ts +18 -0
- package/dist/data/verification/stepKindViews.d.ts.map +1 -0
- package/dist/data/verification/stepKindViews.js +111 -0
- package/dist/data/verification/stepKindViews.js.map +1 -0
- package/dist/data/verification/verifyReportTests.cjs +1 -0
- package/dist/data/verification/verifyReportTests.cjs.map +1 -1
- package/dist/data/verification/verifyReportTests.d.ts +2 -1
- package/dist/data/verification/verifyReportTests.d.ts.map +1 -1
- package/dist/data/verification/verifyReportTests.js +1 -0
- package/dist/data/verification/verifyReportTests.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +14 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +1 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +16 -2
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +16 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +9 -0
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.d.ts +5 -1
- package/dist/rpc/FilterForm.d.ts.map +1 -1
- package/dist/rpc/FilterForm.js +9 -0
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/OperationArgsForm.cjs +153 -0
- package/dist/rpc/OperationArgsForm.cjs.map +1 -0
- package/dist/rpc/OperationArgsForm.d.ts +16 -0
- package/dist/rpc/OperationArgsForm.d.ts.map +1 -0
- package/dist/rpc/OperationArgsForm.js +153 -0
- package/dist/rpc/OperationArgsForm.js.map +1 -0
- package/dist/rpc/OperationScheduleDialog.cjs +61 -17
- package/dist/rpc/OperationScheduleDialog.cjs.map +1 -1
- package/dist/rpc/OperationScheduleDialog.d.ts +3 -0
- package/dist/rpc/OperationScheduleDialog.d.ts.map +1 -1
- package/dist/rpc/OperationScheduleDialog.js +62 -18
- package/dist/rpc/OperationScheduleDialog.js.map +1 -1
- package/dist/rpc/OperationSchedules.cjs +6 -1
- package/dist/rpc/OperationSchedules.cjs.map +1 -1
- package/dist/rpc/OperationSchedules.d.ts.map +1 -1
- package/dist/rpc/OperationSchedules.js +6 -1
- package/dist/rpc/OperationSchedules.js.map +1 -1
- package/dist/rpc/operation-schedule-model.cjs +0 -7
- package/dist/rpc/operation-schedule-model.cjs.map +1 -1
- package/dist/rpc/operation-schedule-model.d.ts +0 -2
- package/dist/rpc/operation-schedule-model.d.ts.map +1 -1
- package/dist/rpc/operation-schedule-model.js +0 -7
- package/dist/rpc/operation-schedule-model.js.map +1 -1
- package/dist/rpc/operation-schedule-types.d.ts +6 -1
- package/dist/rpc/operation-schedule-types.d.ts.map +1 -1
- package/dist/rpc.cjs +2 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const utils = require("../../lib/utils.cjs");
|
|
5
|
+
const Badge = require("../Badge.cjs");
|
|
6
|
+
const JsonView = require("../JsonView.cjs");
|
|
7
|
+
const stepKind = require("./stepKind.cjs");
|
|
8
|
+
function Section({ name, title, aside, children }) {
|
|
9
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "min-w-0 space-y-1.5", "data-step-section": name, children: [
|
|
10
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
11
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: title }),
|
|
12
|
+
aside
|
|
13
|
+
] }),
|
|
14
|
+
children
|
|
15
|
+
] });
|
|
16
|
+
}
|
|
17
|
+
const OUTCOME_BADGE = {
|
|
18
|
+
satisfied: { label: "Satisfied", tone: "success" },
|
|
19
|
+
failed: { label: "Failed", tone: "danger" },
|
|
20
|
+
timeout: { label: "Timed out", tone: "warning" }
|
|
21
|
+
};
|
|
22
|
+
function StepWait({ wait }) {
|
|
23
|
+
const { label, tone } = OUTCOME_BADGE[wait.outcome];
|
|
24
|
+
const { policy } = wait;
|
|
25
|
+
const schedule = stepKind.policySummary(policy);
|
|
26
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "min-w-0 text-[11px]", "data-step-section": "wait", children: [
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", "data-wait-summary": "", children: [
|
|
28
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-muted-foreground", children: "Wait" }),
|
|
29
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "min-w-0 shrink truncate font-mono", title: policy.until ?? "Service readiness", children: policy.until ?? "Service readiness" }),
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge.Badge, { size: "xs", clickToCopy: false, children: stepKind.formatDelay(wait.durationMs) }),
|
|
31
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge.Badge, { size: "xs", clickToCopy: false, tone, children: label }),
|
|
32
|
+
wait.outputs !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate font-mono text-muted-foreground", "data-wait-output": "", title: "Full value in Outputs", children: stepKind.formatExportValue(wait.outputs) })
|
|
33
|
+
] }),
|
|
34
|
+
(schedule || policy.failWhen || wait.error || wait.trace) && /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "mt-1 text-muted-foreground", children: [
|
|
35
|
+
/* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer", children: "Wait details" }),
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 space-y-1 break-words", children: [
|
|
37
|
+
schedule && /* @__PURE__ */ jsxRuntime.jsx("p", { children: schedule }),
|
|
38
|
+
policy.failWhen && /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
|
|
39
|
+
"failWhen: ",
|
|
40
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { children: policy.failWhen })
|
|
41
|
+
] }),
|
|
42
|
+
wait.error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-destructive", children: wait.error }),
|
|
43
|
+
wait.trace && /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "whitespace-pre-wrap", children: wait.trace })
|
|
44
|
+
] })
|
|
45
|
+
] })
|
|
46
|
+
] });
|
|
47
|
+
}
|
|
48
|
+
function ExportsTable({ exports: exports$1 }) {
|
|
49
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full table-fixed border-collapse text-left text-[11px]", children: [
|
|
50
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: "text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "w-[28%] py-1 pr-2 font-medium", children: "Name" }),
|
|
52
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "py-1 pr-2 font-medium", children: "Value" }),
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "w-[18%] py-1 font-medium", children: "Step" })
|
|
54
|
+
] }) }),
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "font-mono", children: exports$1.map((entry) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border/60 align-top last:border-0", children: [
|
|
56
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "break-words py-1 pr-2", children: entry.name }),
|
|
57
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "break-all py-1 pr-2", children: stepKind.formatExportValue(entry.value) }),
|
|
58
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "break-words py-1 text-muted-foreground", children: entry.step })
|
|
59
|
+
] }, entry.name)) })
|
|
60
|
+
] });
|
|
61
|
+
}
|
|
62
|
+
const ALERT_ROW = "border-red-500/60 bg-red-500/10 text-red-700 dark:text-red-400";
|
|
63
|
+
function isAlarming(event) {
|
|
64
|
+
return event.type === "alert" || event.type === "pageerror" || event.type === "response" && (event.status ?? 0) >= 400;
|
|
65
|
+
}
|
|
66
|
+
function EventRow({ event }) {
|
|
67
|
+
const alarming = isAlarming(event);
|
|
68
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
69
|
+
"li",
|
|
70
|
+
{
|
|
71
|
+
className: utils.cn("space-y-0.5 rounded border px-2 py-1 text-[11px]", alarming ? ALERT_ROW : "border-border"),
|
|
72
|
+
"data-event-type": event.type,
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge.Badge, { size: "xs", clickToCopy: false, tone: alarming ? "danger" : "neutral", children: event.type }),
|
|
76
|
+
event.status !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: event.status }),
|
|
77
|
+
event.text && /* @__PURE__ */ jsxRuntime.jsx("span", { className: utils.cn("min-w-0 break-words", event.type === "alert" && "font-medium"), children: event.text })
|
|
78
|
+
] }),
|
|
79
|
+
event.url && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-all font-mono text-[10px] opacity-80", children: event.url }),
|
|
80
|
+
event.detail && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "whitespace-pre-wrap break-words", children: event.detail })
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
function StepKindSections({ step, renderWait }) {
|
|
86
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", "data-step-ref": "", children: [
|
|
88
|
+
step.step.kind,
|
|
89
|
+
" · ",
|
|
90
|
+
step.step.id,
|
|
91
|
+
step.background && " · background"
|
|
92
|
+
] }),
|
|
93
|
+
step.wait && (renderWait ? renderWait(step.wait) : /* @__PURE__ */ jsxRuntime.jsx(StepWait, { wait: step.wait })),
|
|
94
|
+
step.events.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { name: "events", title: "Events", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-1", children: step.events.map((event, index) => /* @__PURE__ */ jsxRuntime.jsx(EventRow, { event }, index)) }) }),
|
|
95
|
+
step.exports.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { name: "exports", title: "Exports", children: /* @__PURE__ */ jsxRuntime.jsx(ExportsTable, { exports: step.exports }) })
|
|
96
|
+
] });
|
|
97
|
+
}
|
|
98
|
+
function StepOutputs({ outputs }) {
|
|
99
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 p-density-4", "data-step-section": "outputs", children: /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: outputs }) });
|
|
100
|
+
}
|
|
101
|
+
function MalformedStepDetail({ error }) {
|
|
102
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { role: "alert", className: "rounded border border-red-500/60 bg-red-500/10 px-2 py-1 text-xs text-red-700 dark:text-red-400", children: [
|
|
103
|
+
"Malformed step detail: ",
|
|
104
|
+
error
|
|
105
|
+
] });
|
|
106
|
+
}
|
|
107
|
+
exports.MalformedStepDetail = MalformedStepDetail;
|
|
108
|
+
exports.StepKindSections = StepKindSections;
|
|
109
|
+
exports.StepOutputs = StepOutputs;
|
|
110
|
+
exports.StepWait = StepWait;
|
|
111
|
+
//# sourceMappingURL=stepKindViews.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepKindViews.cjs","sources":["../../../src/data/verification/stepKindViews.tsx"],"sourcesContent":["// Detail sections for a typed fixture step (see stepKind.ts): the wait\n// timeline, retry attempts, exported variables, outputs and a background\n// watcher's events. Rendered inside FixtureDetail; split out so adapterViews.tsx\n// stays focused on the command/CEL body.\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge, type BadgeTone } from \"../Badge\";\nimport { JsonView } from \"../JsonView\";\nimport {\n formatDelay,\n formatExportValue,\n policySummary,\n type StepDetail,\n type StepExport,\n type WaitDetail,\n type WaitOutcome,\n type WatcherEvent,\n} from \"./stepKind\";\n\nfunction Section({ name, title, aside, children }: { name: string; title: string; aside?: ReactNode; children: ReactNode }) {\n return (\n <section className=\"min-w-0 space-y-1.5\" data-step-section={name}>\n <div className=\"flex items-center gap-2\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">{title}</div>\n {aside}\n </div>\n {children}\n </section>\n );\n}\n\n// ── Wait ────────────────────────────────────────────────────────────────────\n\nconst OUTCOME_BADGE: Record<WaitOutcome, { label: string; tone: BadgeTone }> = {\n satisfied: { label: \"Satisfied\", tone: \"success\" },\n failed: { label: \"Failed\", tone: \"danger\" },\n timeout: { label: \"Timed out\", tone: \"warning\" },\n};\n\nexport function StepWait({ wait }: { wait: WaitDetail }) {\n const { label, tone } = OUTCOME_BADGE[wait.outcome];\n const { policy } = wait;\n const schedule = policySummary(policy);\n return (\n <section className=\"min-w-0 text-[11px]\" data-step-section=\"wait\">\n <div className=\"flex min-w-0 items-center gap-2\" data-wait-summary=\"\">\n <span className=\"shrink-0 text-muted-foreground\">Wait</span>\n <code className=\"min-w-0 shrink truncate font-mono\" title={policy.until ?? \"Service readiness\"}>{policy.until ?? \"Service readiness\"}</code>\n <Badge size=\"xs\" clickToCopy={false}>{formatDelay(wait.durationMs)}</Badge>\n <Badge size=\"xs\" clickToCopy={false} tone={tone}>{label}</Badge>\n {wait.outputs !== undefined && <span className=\"min-w-0 flex-1 truncate font-mono text-muted-foreground\" data-wait-output=\"\" title=\"Full value in Outputs\">{formatExportValue(wait.outputs)}</span>}\n </div>\n {(schedule || policy.failWhen || wait.error || wait.trace) && (\n <details className=\"mt-1 text-muted-foreground\">\n <summary className=\"cursor-pointer\">Wait details</summary>\n <div className=\"mt-1 space-y-1 break-words\">\n {schedule && <p>{schedule}</p>}\n {policy.failWhen && <p>failWhen: <code>{policy.failWhen}</code></p>}\n {wait.error && <p className=\"text-destructive\">{wait.error}</p>}\n {wait.trace && <pre className=\"whitespace-pre-wrap\">{wait.trace}</pre>}\n </div>\n </details>\n )}\n </section>\n );\n}\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nfunction ExportsTable({ exports }: { exports: StepExport[] }) {\n return (\n <table className=\"w-full table-fixed border-collapse text-left text-[11px]\">\n <thead className=\"text-muted-foreground\">\n <tr className=\"border-b border-border\">\n <th className=\"w-[28%] py-1 pr-2 font-medium\">Name</th>\n <th className=\"py-1 pr-2 font-medium\">Value</th>\n <th className=\"w-[18%] py-1 font-medium\">Step</th>\n </tr>\n </thead>\n <tbody className=\"font-mono\">\n {exports.map((entry) => (\n <tr key={entry.name} className=\"border-b border-border/60 align-top last:border-0\">\n <td className=\"break-words py-1 pr-2\">{entry.name}</td>\n <td className=\"break-all py-1 pr-2\">{formatExportValue(entry.value)}</td>\n <td className=\"break-words py-1 text-muted-foreground\">{entry.step}</td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\n// ── Watcher events ──────────────────────────────────────────────────────────\n\nconst ALERT_ROW = \"border-red-500/60 bg-red-500/10 text-red-700 dark:text-red-400\";\n\nfunction isAlarming(event: WatcherEvent): boolean {\n return event.type === \"alert\" || event.type === \"pageerror\" || (event.type === \"response\" && (event.status ?? 0) >= 400);\n}\n\nfunction EventRow({ event }: { event: WatcherEvent }) {\n const alarming = isAlarming(event);\n return (\n <li\n className={cn(\"space-y-0.5 rounded border px-2 py-1 text-[11px]\", alarming ? ALERT_ROW : \"border-border\")}\n data-event-type={event.type}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge size=\"xs\" clickToCopy={false} tone={alarming ? \"danger\" : \"neutral\"}>{event.type}</Badge>\n {event.status !== undefined && <span className=\"font-mono\">{event.status}</span>}\n {event.text && <span className={cn(\"min-w-0 break-words\", event.type === \"alert\" && \"font-medium\")}>{event.text}</span>}\n </div>\n {event.url && <div className=\"break-all font-mono text-[10px] opacity-80\">{event.url}</div>}\n {event.detail && <p className=\"whitespace-pre-wrap break-words\">{event.detail}</p>}\n </li>\n );\n}\n\n// ── Whole step ──────────────────────────────────────────────────────────────\n\n/** Execution sections for a typed fixture step; final outputs render separately. */\nexport function StepKindSections({ step, renderWait }: { step: StepDetail; renderWait?: (wait: WaitDetail) => ReactNode }) {\n return (\n <>\n <div className=\"text-[11px] text-muted-foreground\" data-step-ref=\"\">\n {step.step.kind} · {step.step.id}\n {step.background && \" · background\"}\n </div>\n {step.wait && (renderWait ? renderWait(step.wait) : <StepWait wait={step.wait} />)}\n {step.events.length > 0 && (\n <Section name=\"events\" title=\"Events\">\n <ul className=\"space-y-1\">\n {step.events.map((event, index) => (\n <EventRow key={index} event={event} />\n ))}\n </ul>\n </Section>\n )}\n {step.exports.length > 0 && (\n <Section name=\"exports\" title=\"Exports\">\n <ExportsTable exports={step.exports} />\n </Section>\n )}\n </>\n );\n}\n\nexport function StepOutputs({ outputs }: { outputs: unknown }) {\n return (\n <div className=\"min-w-0 p-density-4\" data-step-section=\"outputs\">\n <JsonView data={outputs} />\n </div>\n );\n}\n\n/** Shown in place of the sections when `detail.step` is present but breaks the contract. */\nexport function MalformedStepDetail({ error }: { error: string }) {\n return (\n <div role=\"alert\" className=\"rounded border border-red-500/60 bg-red-500/10 px-2 py-1 text-xs text-red-700 dark:text-red-400\">\n Malformed step detail: {error}\n </div>\n );\n}\n"],"names":["jsxs","jsx","policySummary","Badge","formatDelay","formatExportValue","exports","cn","Fragment","JsonView"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { StepDetail, WaitDetail } from './stepKind.js';
|
|
3
|
+
export declare function StepWait({ wait }: {
|
|
4
|
+
wait: WaitDetail;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
6
|
+
/** Execution sections for a typed fixture step; final outputs render separately. */
|
|
7
|
+
export declare function StepKindSections({ step, renderWait }: {
|
|
8
|
+
step: StepDetail;
|
|
9
|
+
renderWait?: (wait: WaitDetail) => ReactNode;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
11
|
+
export declare function StepOutputs({ outputs }: {
|
|
12
|
+
outputs: unknown;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
14
|
+
/** Shown in place of the sections when `detail.step` is present but breaks the contract. */
|
|
15
|
+
export declare function MalformedStepDetail({ error }: {
|
|
16
|
+
error: string;
|
|
17
|
+
}): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=stepKindViews.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepKindViews.d.ts","sourceRoot":"","sources":["../../../src/data/verification/stepKindViews.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,EAIL,KAAK,UAAU,EAEf,KAAK,UAAU,EAGhB,MAAM,YAAY,CAAC;AAsBpB,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,+BA0BtD;AAuDD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,SAAS,CAAA;CAAE,+BAwBxH;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,+BAM5D;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,+BAM/D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { Badge } from "../Badge.js";
|
|
4
|
+
import { JsonView } from "../JsonView.js";
|
|
5
|
+
import { policySummary, formatDelay, formatExportValue } from "./stepKind.js";
|
|
6
|
+
function Section({ name, title, aside, children }) {
|
|
7
|
+
return /* @__PURE__ */ jsxs("section", { className: "min-w-0 space-y-1.5", "data-step-section": name, children: [
|
|
8
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
9
|
+
/* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: title }),
|
|
10
|
+
aside
|
|
11
|
+
] }),
|
|
12
|
+
children
|
|
13
|
+
] });
|
|
14
|
+
}
|
|
15
|
+
const OUTCOME_BADGE = {
|
|
16
|
+
satisfied: { label: "Satisfied", tone: "success" },
|
|
17
|
+
failed: { label: "Failed", tone: "danger" },
|
|
18
|
+
timeout: { label: "Timed out", tone: "warning" }
|
|
19
|
+
};
|
|
20
|
+
function StepWait({ wait }) {
|
|
21
|
+
const { label, tone } = OUTCOME_BADGE[wait.outcome];
|
|
22
|
+
const { policy } = wait;
|
|
23
|
+
const schedule = policySummary(policy);
|
|
24
|
+
return /* @__PURE__ */ jsxs("section", { className: "min-w-0 text-[11px]", "data-step-section": "wait", children: [
|
|
25
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", "data-wait-summary": "", children: [
|
|
26
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-muted-foreground", children: "Wait" }),
|
|
27
|
+
/* @__PURE__ */ jsx("code", { className: "min-w-0 shrink truncate font-mono", title: policy.until ?? "Service readiness", children: policy.until ?? "Service readiness" }),
|
|
28
|
+
/* @__PURE__ */ jsx(Badge, { size: "xs", clickToCopy: false, children: formatDelay(wait.durationMs) }),
|
|
29
|
+
/* @__PURE__ */ jsx(Badge, { size: "xs", clickToCopy: false, tone, children: label }),
|
|
30
|
+
wait.outputs !== void 0 && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-mono text-muted-foreground", "data-wait-output": "", title: "Full value in Outputs", children: formatExportValue(wait.outputs) })
|
|
31
|
+
] }),
|
|
32
|
+
(schedule || policy.failWhen || wait.error || wait.trace) && /* @__PURE__ */ jsxs("details", { className: "mt-1 text-muted-foreground", children: [
|
|
33
|
+
/* @__PURE__ */ jsx("summary", { className: "cursor-pointer", children: "Wait details" }),
|
|
34
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-1 space-y-1 break-words", children: [
|
|
35
|
+
schedule && /* @__PURE__ */ jsx("p", { children: schedule }),
|
|
36
|
+
policy.failWhen && /* @__PURE__ */ jsxs("p", { children: [
|
|
37
|
+
"failWhen: ",
|
|
38
|
+
/* @__PURE__ */ jsx("code", { children: policy.failWhen })
|
|
39
|
+
] }),
|
|
40
|
+
wait.error && /* @__PURE__ */ jsx("p", { className: "text-destructive", children: wait.error }),
|
|
41
|
+
wait.trace && /* @__PURE__ */ jsx("pre", { className: "whitespace-pre-wrap", children: wait.trace })
|
|
42
|
+
] })
|
|
43
|
+
] })
|
|
44
|
+
] });
|
|
45
|
+
}
|
|
46
|
+
function ExportsTable({ exports: exports$1 }) {
|
|
47
|
+
return /* @__PURE__ */ jsxs("table", { className: "w-full table-fixed border-collapse text-left text-[11px]", children: [
|
|
48
|
+
/* @__PURE__ */ jsx("thead", { className: "text-muted-foreground", children: /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
|
|
49
|
+
/* @__PURE__ */ jsx("th", { className: "w-[28%] py-1 pr-2 font-medium", children: "Name" }),
|
|
50
|
+
/* @__PURE__ */ jsx("th", { className: "py-1 pr-2 font-medium", children: "Value" }),
|
|
51
|
+
/* @__PURE__ */ jsx("th", { className: "w-[18%] py-1 font-medium", children: "Step" })
|
|
52
|
+
] }) }),
|
|
53
|
+
/* @__PURE__ */ jsx("tbody", { className: "font-mono", children: exports$1.map((entry) => /* @__PURE__ */ jsxs("tr", { className: "border-b border-border/60 align-top last:border-0", children: [
|
|
54
|
+
/* @__PURE__ */ jsx("td", { className: "break-words py-1 pr-2", children: entry.name }),
|
|
55
|
+
/* @__PURE__ */ jsx("td", { className: "break-all py-1 pr-2", children: formatExportValue(entry.value) }),
|
|
56
|
+
/* @__PURE__ */ jsx("td", { className: "break-words py-1 text-muted-foreground", children: entry.step })
|
|
57
|
+
] }, entry.name)) })
|
|
58
|
+
] });
|
|
59
|
+
}
|
|
60
|
+
const ALERT_ROW = "border-red-500/60 bg-red-500/10 text-red-700 dark:text-red-400";
|
|
61
|
+
function isAlarming(event) {
|
|
62
|
+
return event.type === "alert" || event.type === "pageerror" || event.type === "response" && (event.status ?? 0) >= 400;
|
|
63
|
+
}
|
|
64
|
+
function EventRow({ event }) {
|
|
65
|
+
const alarming = isAlarming(event);
|
|
66
|
+
return /* @__PURE__ */ jsxs(
|
|
67
|
+
"li",
|
|
68
|
+
{
|
|
69
|
+
className: cn("space-y-0.5 rounded border px-2 py-1 text-[11px]", alarming ? ALERT_ROW : "border-border"),
|
|
70
|
+
"data-event-type": event.type,
|
|
71
|
+
children: [
|
|
72
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
73
|
+
/* @__PURE__ */ jsx(Badge, { size: "xs", clickToCopy: false, tone: alarming ? "danger" : "neutral", children: event.type }),
|
|
74
|
+
event.status !== void 0 && /* @__PURE__ */ jsx("span", { className: "font-mono", children: event.status }),
|
|
75
|
+
event.text && /* @__PURE__ */ jsx("span", { className: cn("min-w-0 break-words", event.type === "alert" && "font-medium"), children: event.text })
|
|
76
|
+
] }),
|
|
77
|
+
event.url && /* @__PURE__ */ jsx("div", { className: "break-all font-mono text-[10px] opacity-80", children: event.url }),
|
|
78
|
+
event.detail && /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap break-words", children: event.detail })
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
function StepKindSections({ step, renderWait }) {
|
|
84
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
85
|
+
/* @__PURE__ */ jsxs("div", { className: "text-[11px] text-muted-foreground", "data-step-ref": "", children: [
|
|
86
|
+
step.step.kind,
|
|
87
|
+
" · ",
|
|
88
|
+
step.step.id,
|
|
89
|
+
step.background && " · background"
|
|
90
|
+
] }),
|
|
91
|
+
step.wait && (renderWait ? renderWait(step.wait) : /* @__PURE__ */ jsx(StepWait, { wait: step.wait })),
|
|
92
|
+
step.events.length > 0 && /* @__PURE__ */ jsx(Section, { name: "events", title: "Events", children: /* @__PURE__ */ jsx("ul", { className: "space-y-1", children: step.events.map((event, index) => /* @__PURE__ */ jsx(EventRow, { event }, index)) }) }),
|
|
93
|
+
step.exports.length > 0 && /* @__PURE__ */ jsx(Section, { name: "exports", title: "Exports", children: /* @__PURE__ */ jsx(ExportsTable, { exports: step.exports }) })
|
|
94
|
+
] });
|
|
95
|
+
}
|
|
96
|
+
function StepOutputs({ outputs }) {
|
|
97
|
+
return /* @__PURE__ */ jsx("div", { className: "min-w-0 p-density-4", "data-step-section": "outputs", children: /* @__PURE__ */ jsx(JsonView, { data: outputs }) });
|
|
98
|
+
}
|
|
99
|
+
function MalformedStepDetail({ error }) {
|
|
100
|
+
return /* @__PURE__ */ jsxs("div", { role: "alert", className: "rounded border border-red-500/60 bg-red-500/10 px-2 py-1 text-xs text-red-700 dark:text-red-400", children: [
|
|
101
|
+
"Malformed step detail: ",
|
|
102
|
+
error
|
|
103
|
+
] });
|
|
104
|
+
}
|
|
105
|
+
export {
|
|
106
|
+
MalformedStepDetail,
|
|
107
|
+
StepKindSections,
|
|
108
|
+
StepOutputs,
|
|
109
|
+
StepWait
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=stepKindViews.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepKindViews.js","sources":["../../../src/data/verification/stepKindViews.tsx"],"sourcesContent":["// Detail sections for a typed fixture step (see stepKind.ts): the wait\n// timeline, retry attempts, exported variables, outputs and a background\n// watcher's events. Rendered inside FixtureDetail; split out so adapterViews.tsx\n// stays focused on the command/CEL body.\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge, type BadgeTone } from \"../Badge\";\nimport { JsonView } from \"../JsonView\";\nimport {\n formatDelay,\n formatExportValue,\n policySummary,\n type StepDetail,\n type StepExport,\n type WaitDetail,\n type WaitOutcome,\n type WatcherEvent,\n} from \"./stepKind\";\n\nfunction Section({ name, title, aside, children }: { name: string; title: string; aside?: ReactNode; children: ReactNode }) {\n return (\n <section className=\"min-w-0 space-y-1.5\" data-step-section={name}>\n <div className=\"flex items-center gap-2\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">{title}</div>\n {aside}\n </div>\n {children}\n </section>\n );\n}\n\n// ── Wait ────────────────────────────────────────────────────────────────────\n\nconst OUTCOME_BADGE: Record<WaitOutcome, { label: string; tone: BadgeTone }> = {\n satisfied: { label: \"Satisfied\", tone: \"success\" },\n failed: { label: \"Failed\", tone: \"danger\" },\n timeout: { label: \"Timed out\", tone: \"warning\" },\n};\n\nexport function StepWait({ wait }: { wait: WaitDetail }) {\n const { label, tone } = OUTCOME_BADGE[wait.outcome];\n const { policy } = wait;\n const schedule = policySummary(policy);\n return (\n <section className=\"min-w-0 text-[11px]\" data-step-section=\"wait\">\n <div className=\"flex min-w-0 items-center gap-2\" data-wait-summary=\"\">\n <span className=\"shrink-0 text-muted-foreground\">Wait</span>\n <code className=\"min-w-0 shrink truncate font-mono\" title={policy.until ?? \"Service readiness\"}>{policy.until ?? \"Service readiness\"}</code>\n <Badge size=\"xs\" clickToCopy={false}>{formatDelay(wait.durationMs)}</Badge>\n <Badge size=\"xs\" clickToCopy={false} tone={tone}>{label}</Badge>\n {wait.outputs !== undefined && <span className=\"min-w-0 flex-1 truncate font-mono text-muted-foreground\" data-wait-output=\"\" title=\"Full value in Outputs\">{formatExportValue(wait.outputs)}</span>}\n </div>\n {(schedule || policy.failWhen || wait.error || wait.trace) && (\n <details className=\"mt-1 text-muted-foreground\">\n <summary className=\"cursor-pointer\">Wait details</summary>\n <div className=\"mt-1 space-y-1 break-words\">\n {schedule && <p>{schedule}</p>}\n {policy.failWhen && <p>failWhen: <code>{policy.failWhen}</code></p>}\n {wait.error && <p className=\"text-destructive\">{wait.error}</p>}\n {wait.trace && <pre className=\"whitespace-pre-wrap\">{wait.trace}</pre>}\n </div>\n </details>\n )}\n </section>\n );\n}\n\n// ── Exports ─────────────────────────────────────────────────────────────────\n\nfunction ExportsTable({ exports }: { exports: StepExport[] }) {\n return (\n <table className=\"w-full table-fixed border-collapse text-left text-[11px]\">\n <thead className=\"text-muted-foreground\">\n <tr className=\"border-b border-border\">\n <th className=\"w-[28%] py-1 pr-2 font-medium\">Name</th>\n <th className=\"py-1 pr-2 font-medium\">Value</th>\n <th className=\"w-[18%] py-1 font-medium\">Step</th>\n </tr>\n </thead>\n <tbody className=\"font-mono\">\n {exports.map((entry) => (\n <tr key={entry.name} className=\"border-b border-border/60 align-top last:border-0\">\n <td className=\"break-words py-1 pr-2\">{entry.name}</td>\n <td className=\"break-all py-1 pr-2\">{formatExportValue(entry.value)}</td>\n <td className=\"break-words py-1 text-muted-foreground\">{entry.step}</td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\n// ── Watcher events ──────────────────────────────────────────────────────────\n\nconst ALERT_ROW = \"border-red-500/60 bg-red-500/10 text-red-700 dark:text-red-400\";\n\nfunction isAlarming(event: WatcherEvent): boolean {\n return event.type === \"alert\" || event.type === \"pageerror\" || (event.type === \"response\" && (event.status ?? 0) >= 400);\n}\n\nfunction EventRow({ event }: { event: WatcherEvent }) {\n const alarming = isAlarming(event);\n return (\n <li\n className={cn(\"space-y-0.5 rounded border px-2 py-1 text-[11px]\", alarming ? ALERT_ROW : \"border-border\")}\n data-event-type={event.type}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge size=\"xs\" clickToCopy={false} tone={alarming ? \"danger\" : \"neutral\"}>{event.type}</Badge>\n {event.status !== undefined && <span className=\"font-mono\">{event.status}</span>}\n {event.text && <span className={cn(\"min-w-0 break-words\", event.type === \"alert\" && \"font-medium\")}>{event.text}</span>}\n </div>\n {event.url && <div className=\"break-all font-mono text-[10px] opacity-80\">{event.url}</div>}\n {event.detail && <p className=\"whitespace-pre-wrap break-words\">{event.detail}</p>}\n </li>\n );\n}\n\n// ── Whole step ──────────────────────────────────────────────────────────────\n\n/** Execution sections for a typed fixture step; final outputs render separately. */\nexport function StepKindSections({ step, renderWait }: { step: StepDetail; renderWait?: (wait: WaitDetail) => ReactNode }) {\n return (\n <>\n <div className=\"text-[11px] text-muted-foreground\" data-step-ref=\"\">\n {step.step.kind} · {step.step.id}\n {step.background && \" · background\"}\n </div>\n {step.wait && (renderWait ? renderWait(step.wait) : <StepWait wait={step.wait} />)}\n {step.events.length > 0 && (\n <Section name=\"events\" title=\"Events\">\n <ul className=\"space-y-1\">\n {step.events.map((event, index) => (\n <EventRow key={index} event={event} />\n ))}\n </ul>\n </Section>\n )}\n {step.exports.length > 0 && (\n <Section name=\"exports\" title=\"Exports\">\n <ExportsTable exports={step.exports} />\n </Section>\n )}\n </>\n );\n}\n\nexport function StepOutputs({ outputs }: { outputs: unknown }) {\n return (\n <div className=\"min-w-0 p-density-4\" data-step-section=\"outputs\">\n <JsonView data={outputs} />\n </div>\n );\n}\n\n/** Shown in place of the sections when `detail.step` is present but breaks the contract. */\nexport function MalformedStepDetail({ error }: { error: string }) {\n return (\n <div role=\"alert\" className=\"rounded border border-red-500/60 bg-red-500/10 px-2 py-1 text-xs text-red-700 dark:text-red-400\">\n Malformed step detail: {error}\n </div>\n );\n}\n"],"names":["exports"],"mappings":"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"}
|
|
@@ -79,6 +79,7 @@ function verifyReportTests(report) {
|
|
|
79
79
|
function verifyReportCounts(report) {
|
|
80
80
|
return status.aggregateStatusCounts(verifyReportTests(report));
|
|
81
81
|
}
|
|
82
|
+
exports.verifyNodeTest = verifyNodeTest;
|
|
82
83
|
exports.verifyReportCounts = verifyReportCounts;
|
|
83
84
|
exports.verifyReportTests = verifyReportTests;
|
|
84
85
|
//# sourceMappingURL=verifyReportTests.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyReportTests.cjs","sources":["../../../src/data/verification/verifyReportTests.ts"],"sourcesContent":["// Projects a captain VerifyReport onto the shared test-runner Test model, so\n// VerificationResults can render it with the same TestRunner every other\n// fixture/test surface uses. Ported from gavel's verificationAttempts.ts\n// (executionNodeTest / checklistTest), adapted to VerifyReport's node shape\n// (which already carries boolean status flags, unlike gavel's execution\n// snapshot which carried a single `state` string to translate).\n\nimport { aggregateStatusCounts, type StatusCounts, type Test, type TestSummary } from \"../test-runner\";\nimport type { VerifyChecklistItem, VerifyNode, VerifyReport, VerifySummary } from \"./verify-report\";\n\nconst ACCEPTANCE_CRITERIA_ID = \"acceptance-criteria\";\n\nfunction coerceDuration(duration: unknown): number | undefined {\n return typeof duration === \"number\" && Number.isFinite(duration) ? duration : undefined;\n}\n\n/**\n * Projects a `VerifySummary` onto the test-runner's `TestSummary` shape (see\n * `test-runner/types.ts`), so `sum()`/`aggregateStatusCounts` (test-runner\n * `status.ts`) read a summary-carrying node's counts directly instead of\n * recursing into (possibly elided) children.\n *\n * `Duration` is not carried by `VerifySummary`, so it is reported as 0.\n */\nfunction verifySummaryToTestSummary(summary: VerifySummary): TestSummary {\n return {\n Total: summary.total,\n Passed: summary.passed,\n Failed: summary.failed,\n Warned: summary.warned,\n Skipped: summary.skipped,\n Pending: summary.pending,\n Running: summary.running,\n Timedout: summary.timedout,\n Duration: 0,\n };\n}\n\n// Every field below is optional on both VerifyNode and Test, and the project\n// compiles with exactOptionalPropertyTypes — so an absent field must be an\n// absent key, not a key explicitly set to undefined. Each is assigned only\n// when present rather than copied through in one object literal.\
|
|
1
|
+
{"version":3,"file":"verifyReportTests.cjs","sources":["../../../src/data/verification/verifyReportTests.ts"],"sourcesContent":["// Projects a captain VerifyReport onto the shared test-runner Test model, so\n// VerificationResults can render it with the same TestRunner every other\n// fixture/test surface uses. Ported from gavel's verificationAttempts.ts\n// (executionNodeTest / checklistTest), adapted to VerifyReport's node shape\n// (which already carries boolean status flags, unlike gavel's execution\n// snapshot which carried a single `state` string to translate).\n\nimport { aggregateStatusCounts, type StatusCounts, type Test, type TestSummary } from \"../test-runner\";\nimport type { VerifyChecklistItem, VerifyNode, VerifyReport, VerifySummary } from \"./verify-report\";\n\nconst ACCEPTANCE_CRITERIA_ID = \"acceptance-criteria\";\n\nfunction coerceDuration(duration: unknown): number | undefined {\n return typeof duration === \"number\" && Number.isFinite(duration) ? duration : undefined;\n}\n\n/**\n * Projects a `VerifySummary` onto the test-runner's `TestSummary` shape (see\n * `test-runner/types.ts`), so `sum()`/`aggregateStatusCounts` (test-runner\n * `status.ts`) read a summary-carrying node's counts directly instead of\n * recursing into (possibly elided) children.\n *\n * `Duration` is not carried by `VerifySummary`, so it is reported as 0.\n */\nfunction verifySummaryToTestSummary(summary: VerifySummary): TestSummary {\n return {\n Total: summary.total,\n Passed: summary.passed,\n Failed: summary.failed,\n Warned: summary.warned,\n Skipped: summary.skipped,\n Pending: summary.pending,\n Running: summary.running,\n Timedout: summary.timedout,\n Duration: 0,\n };\n}\n\n// Every field below is optional on both VerifyNode and Test, and the project\n// compiles with exactOptionalPropertyTypes — so an absent field must be an\n// absent key, not a key explicitly set to undefined. Each is assigned only\n// when present rather than copied through in one object literal.\nexport function verifyNodeTest(node: VerifyNode): Test {\n const test: Test = { name: node.name };\n if (node.framework !== undefined) test.framework = node.framework;\n if (node.task_id !== undefined) test.task_id = node.task_id;\n if (node.file !== undefined) test.file = node.file;\n if (node.line !== undefined) test.line = node.line;\n if (node.message !== undefined) test.message = node.message;\n if (node.command !== undefined) test.command = node.command;\n if (node.work_dir !== undefined) test.work_dir = node.work_dir;\n if (node.stdout !== undefined) test.stdout = node.stdout;\n if (node.stderr !== undefined) test.stderr = node.stderr;\n const duration = coerceDuration(node.duration);\n if (duration !== undefined) test.duration = duration;\n if (node.passed !== undefined) test.passed = node.passed;\n if (node.failed !== undefined) test.failed = node.failed;\n if (node.warned !== undefined) test.warned = node.warned;\n if (node.skipped !== undefined) test.skipped = node.skipped;\n if (node.pending !== undefined) test.pending = node.pending;\n if (node.running !== undefined) test.running = node.running;\n if (node.timed_out !== undefined) test.timed_out = node.timed_out;\n if (node.progress !== undefined) test.progress = node.progress;\n if (node.context !== undefined) test.context = node.context;\n if (node.detail !== undefined) test.detail = node.detail;\n // A node carrying its own `summary` (elided children) contributes that\n // summary directly and is never recursed into, even if `children` is also\n // present — parity with Go's `SummarizeNodes` and `summarizeVerifyNodes`.\n if (node.summary !== undefined) {\n test.summary = verifySummaryToTestSummary(node.summary);\n } else if (node.children !== undefined) {\n test.children = node.children.map(verifyNodeTest);\n }\n return test;\n}\n\nfunction checklistItemTest(item: VerifyChecklistItem, index: number): Test {\n const test: Test = {\n name: item.item || `Criterion ${index + 1}`,\n framework: \"checklist\",\n task_id: `${ACCEPTANCE_CRITERIA_ID}:${index}`,\n passed: item.passed === true,\n failed: item.passed === false,\n pending: item.passed !== true && item.passed !== false,\n detail: item,\n };\n if (item.message !== undefined) test.message = item.message;\n return test;\n}\n\n/**\n * Synthesizes the \"Acceptance criteria\" parent node gavel's checklistTest\n * ports. Deliberately carries no status flags of its own — `status.ts`'s\n * `testStatus` checks `pending` before `failed`, so a container explicitly\n * flagged both `failed` and `pending` (one item failed, another is still\n * unjudged) would render as queued instead of failed. Leaving the container\n * status-less lets the shared roll-up (`outcomeFor`/`statusToneFor`: failed\n * → warned → running → pending → passed, via `sum()` over the children) decide\n * instead.\n */\nfunction checklistTest(checklist: VerifyChecklistItem[]): Test | null {\n if (checklist.length === 0) return null;\n const children = checklist.map(checklistItemTest);\n return {\n name: \"Acceptance criteria\",\n framework: \"checklist\",\n task_id: ACCEPTANCE_CRITERIA_ID,\n children,\n };\n}\n\n/** Maps a VerifyReport onto the TestRunner's Test forest, appending a\n * synthesized \"Acceptance criteria\" node for the checklist when present. */\nexport function verifyReportTests(report: VerifyReport): Test[] {\n const tests = (report.tests ?? []).map(verifyNodeTest);\n const checklist = checklistTest(report.checklist ?? []);\n return checklist ? [...tests, checklist] : tests;\n}\n\n/**\n * Status roll-up across the *rendered* forest: `report.tests` plus the\n * synthesized checklist leaves. This is **not** `report.summary` — the\n * producer's tests-only tally (see `summarizeVerifyNodes` in ./verify-report)\n * — since it also counts checklist items, which never appear in `tests`.\n */\nexport function verifyReportCounts(report: VerifyReport): StatusCounts {\n return aggregateStatusCounts(verifyReportTests(report));\n}\n"],"names":["aggregateStatusCounts"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StatusCounts, Test } from '../test-runner/index.js';
|
|
2
|
-
import { VerifyReport } from './verify-report.js';
|
|
2
|
+
import { VerifyNode, VerifyReport } from './verify-report.js';
|
|
3
|
+
export declare function verifyNodeTest(node: VerifyNode): Test;
|
|
3
4
|
/** Maps a VerifyReport onto the TestRunner's Test forest, appending a
|
|
4
5
|
* synthesized "Acceptance criteria" node for the checklist when present. */
|
|
5
6
|
export declare function verifyReportTests(report: VerifyReport): Test[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyReportTests.d.ts","sourceRoot":"","sources":["../../../src/data/verification/verifyReportTests.ts"],"names":[],"mappings":"AAOA,OAAO,EAAyB,KAAK,YAAY,EAAE,KAAK,IAAI,EAAoB,MAAM,gBAAgB,CAAC;AACvG,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"verifyReportTests.d.ts","sourceRoot":"","sources":["../../../src/data/verification/verifyReportTests.ts"],"names":[],"mappings":"AAOA,OAAO,EAAyB,KAAK,YAAY,EAAE,KAAK,IAAI,EAAoB,MAAM,gBAAgB,CAAC;AACvG,OAAO,KAAK,EAAuB,UAAU,EAAE,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AAkCpG,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAgCrD;AAqCD;6EAC6E;AAC7E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,CAI9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAErE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyReportTests.js","sources":["../../../src/data/verification/verifyReportTests.ts"],"sourcesContent":["// Projects a captain VerifyReport onto the shared test-runner Test model, so\n// VerificationResults can render it with the same TestRunner every other\n// fixture/test surface uses. Ported from gavel's verificationAttempts.ts\n// (executionNodeTest / checklistTest), adapted to VerifyReport's node shape\n// (which already carries boolean status flags, unlike gavel's execution\n// snapshot which carried a single `state` string to translate).\n\nimport { aggregateStatusCounts, type StatusCounts, type Test, type TestSummary } from \"../test-runner\";\nimport type { VerifyChecklistItem, VerifyNode, VerifyReport, VerifySummary } from \"./verify-report\";\n\nconst ACCEPTANCE_CRITERIA_ID = \"acceptance-criteria\";\n\nfunction coerceDuration(duration: unknown): number | undefined {\n return typeof duration === \"number\" && Number.isFinite(duration) ? duration : undefined;\n}\n\n/**\n * Projects a `VerifySummary` onto the test-runner's `TestSummary` shape (see\n * `test-runner/types.ts`), so `sum()`/`aggregateStatusCounts` (test-runner\n * `status.ts`) read a summary-carrying node's counts directly instead of\n * recursing into (possibly elided) children.\n *\n * `Duration` is not carried by `VerifySummary`, so it is reported as 0.\n */\nfunction verifySummaryToTestSummary(summary: VerifySummary): TestSummary {\n return {\n Total: summary.total,\n Passed: summary.passed,\n Failed: summary.failed,\n Warned: summary.warned,\n Skipped: summary.skipped,\n Pending: summary.pending,\n Running: summary.running,\n Timedout: summary.timedout,\n Duration: 0,\n };\n}\n\n// Every field below is optional on both VerifyNode and Test, and the project\n// compiles with exactOptionalPropertyTypes — so an absent field must be an\n// absent key, not a key explicitly set to undefined. Each is assigned only\n// when present rather than copied through in one object literal.\
|
|
1
|
+
{"version":3,"file":"verifyReportTests.js","sources":["../../../src/data/verification/verifyReportTests.ts"],"sourcesContent":["// Projects a captain VerifyReport onto the shared test-runner Test model, so\n// VerificationResults can render it with the same TestRunner every other\n// fixture/test surface uses. Ported from gavel's verificationAttempts.ts\n// (executionNodeTest / checklistTest), adapted to VerifyReport's node shape\n// (which already carries boolean status flags, unlike gavel's execution\n// snapshot which carried a single `state` string to translate).\n\nimport { aggregateStatusCounts, type StatusCounts, type Test, type TestSummary } from \"../test-runner\";\nimport type { VerifyChecklistItem, VerifyNode, VerifyReport, VerifySummary } from \"./verify-report\";\n\nconst ACCEPTANCE_CRITERIA_ID = \"acceptance-criteria\";\n\nfunction coerceDuration(duration: unknown): number | undefined {\n return typeof duration === \"number\" && Number.isFinite(duration) ? duration : undefined;\n}\n\n/**\n * Projects a `VerifySummary` onto the test-runner's `TestSummary` shape (see\n * `test-runner/types.ts`), so `sum()`/`aggregateStatusCounts` (test-runner\n * `status.ts`) read a summary-carrying node's counts directly instead of\n * recursing into (possibly elided) children.\n *\n * `Duration` is not carried by `VerifySummary`, so it is reported as 0.\n */\nfunction verifySummaryToTestSummary(summary: VerifySummary): TestSummary {\n return {\n Total: summary.total,\n Passed: summary.passed,\n Failed: summary.failed,\n Warned: summary.warned,\n Skipped: summary.skipped,\n Pending: summary.pending,\n Running: summary.running,\n Timedout: summary.timedout,\n Duration: 0,\n };\n}\n\n// Every field below is optional on both VerifyNode and Test, and the project\n// compiles with exactOptionalPropertyTypes — so an absent field must be an\n// absent key, not a key explicitly set to undefined. Each is assigned only\n// when present rather than copied through in one object literal.\nexport function verifyNodeTest(node: VerifyNode): Test {\n const test: Test = { name: node.name };\n if (node.framework !== undefined) test.framework = node.framework;\n if (node.task_id !== undefined) test.task_id = node.task_id;\n if (node.file !== undefined) test.file = node.file;\n if (node.line !== undefined) test.line = node.line;\n if (node.message !== undefined) test.message = node.message;\n if (node.command !== undefined) test.command = node.command;\n if (node.work_dir !== undefined) test.work_dir = node.work_dir;\n if (node.stdout !== undefined) test.stdout = node.stdout;\n if (node.stderr !== undefined) test.stderr = node.stderr;\n const duration = coerceDuration(node.duration);\n if (duration !== undefined) test.duration = duration;\n if (node.passed !== undefined) test.passed = node.passed;\n if (node.failed !== undefined) test.failed = node.failed;\n if (node.warned !== undefined) test.warned = node.warned;\n if (node.skipped !== undefined) test.skipped = node.skipped;\n if (node.pending !== undefined) test.pending = node.pending;\n if (node.running !== undefined) test.running = node.running;\n if (node.timed_out !== undefined) test.timed_out = node.timed_out;\n if (node.progress !== undefined) test.progress = node.progress;\n if (node.context !== undefined) test.context = node.context;\n if (node.detail !== undefined) test.detail = node.detail;\n // A node carrying its own `summary` (elided children) contributes that\n // summary directly and is never recursed into, even if `children` is also\n // present — parity with Go's `SummarizeNodes` and `summarizeVerifyNodes`.\n if (node.summary !== undefined) {\n test.summary = verifySummaryToTestSummary(node.summary);\n } else if (node.children !== undefined) {\n test.children = node.children.map(verifyNodeTest);\n }\n return test;\n}\n\nfunction checklistItemTest(item: VerifyChecklistItem, index: number): Test {\n const test: Test = {\n name: item.item || `Criterion ${index + 1}`,\n framework: \"checklist\",\n task_id: `${ACCEPTANCE_CRITERIA_ID}:${index}`,\n passed: item.passed === true,\n failed: item.passed === false,\n pending: item.passed !== true && item.passed !== false,\n detail: item,\n };\n if (item.message !== undefined) test.message = item.message;\n return test;\n}\n\n/**\n * Synthesizes the \"Acceptance criteria\" parent node gavel's checklistTest\n * ports. Deliberately carries no status flags of its own — `status.ts`'s\n * `testStatus` checks `pending` before `failed`, so a container explicitly\n * flagged both `failed` and `pending` (one item failed, another is still\n * unjudged) would render as queued instead of failed. Leaving the container\n * status-less lets the shared roll-up (`outcomeFor`/`statusToneFor`: failed\n * → warned → running → pending → passed, via `sum()` over the children) decide\n * instead.\n */\nfunction checklistTest(checklist: VerifyChecklistItem[]): Test | null {\n if (checklist.length === 0) return null;\n const children = checklist.map(checklistItemTest);\n return {\n name: \"Acceptance criteria\",\n framework: \"checklist\",\n task_id: ACCEPTANCE_CRITERIA_ID,\n children,\n };\n}\n\n/** Maps a VerifyReport onto the TestRunner's Test forest, appending a\n * synthesized \"Acceptance criteria\" node for the checklist when present. */\nexport function verifyReportTests(report: VerifyReport): Test[] {\n const tests = (report.tests ?? []).map(verifyNodeTest);\n const checklist = checklistTest(report.checklist ?? []);\n return checklist ? [...tests, checklist] : tests;\n}\n\n/**\n * Status roll-up across the *rendered* forest: `report.tests` plus the\n * synthesized checklist leaves. This is **not** `report.summary` — the\n * producer's tests-only tally (see `summarizeVerifyNodes` in ./verify-report)\n * — since it also counts checklist items, which never appear in `tests`.\n */\nexport function verifyReportCounts(report: VerifyReport): StatusCounts {\n return aggregateStatusCounts(verifyReportTests(report));\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,9 @@ function detectMode() {
|
|
|
15
15
|
}
|
|
16
16
|
function getVersionInfo() {
|
|
17
17
|
return {
|
|
18
|
-
commit: read(() => "
|
|
19
|
-
tag: read(() => "clicky-ui@0.3.
|
|
20
|
-
date: read(() => "2026-10-
|
|
18
|
+
commit: read(() => "f9879aa9", ""),
|
|
19
|
+
tag: read(() => "clicky-ui@0.3.47", ""),
|
|
20
|
+
date: read(() => "2026-10-15T09:20:40.620Z", ""),
|
|
21
21
|
dirty: read(() => true, false),
|
|
22
22
|
mode: detectMode()
|
|
23
23
|
};
|
|
@@ -13,9 +13,9 @@ function detectMode() {
|
|
|
13
13
|
}
|
|
14
14
|
function getVersionInfo() {
|
|
15
15
|
return {
|
|
16
|
-
commit: read(() => "
|
|
17
|
-
tag: read(() => "clicky-ui@0.3.
|
|
18
|
-
date: read(() => "2026-10-
|
|
16
|
+
commit: read(() => "f9879aa9", ""),
|
|
17
|
+
tag: read(() => "clicky-ui@0.3.47", ""),
|
|
18
|
+
date: read(() => "2026-10-15T09:19:57.913Z", ""),
|
|
19
19
|
dirty: read(() => true, false),
|
|
20
20
|
mode: detectMode()
|
|
21
21
|
};
|
package/dist/data.cjs
CHANGED
|
@@ -8,6 +8,7 @@ const Badge = require("./data/Badge.cjs");
|
|
|
8
8
|
const CodeBlock = require("./data/CodeBlock.cjs");
|
|
9
9
|
const CodeDiff = require("./data/CodeDiff.cjs");
|
|
10
10
|
const CodeLine = require("./data/CodeLine.cjs");
|
|
11
|
+
const SymbolBadge = require("./data/SymbolBadge.cjs");
|
|
11
12
|
const codeDiff = require("./data/code-diff.cjs");
|
|
12
13
|
const dataTableUtils = require("./data/data-table-utils.cjs");
|
|
13
14
|
const dataTableFilterValues = require("./data/data-table-filter-values.cjs");
|
|
@@ -135,6 +136,7 @@ const MarkIcons = require("./data/test-runner/MarkIcons.cjs");
|
|
|
135
136
|
const QueryBrowser = require("./data/query-browser/QueryBrowser.cjs");
|
|
136
137
|
const QueryBrowser_types = require("./data/query-browser/QueryBrowser.types.cjs");
|
|
137
138
|
const status = require("./data/test-runner/status.cjs");
|
|
139
|
+
const stepKindViews = require("./data/verification/stepKindViews.cjs");
|
|
138
140
|
const TestFailureDetail = require("./data/test-runner/TestFailureDetail.cjs");
|
|
139
141
|
const TestDetailPanel = require("./data/test-runner/TestDetailPanel.cjs");
|
|
140
142
|
const TestFilterBar = require("./data/test-runner/TestFilterBar.cjs");
|
|
@@ -732,6 +734,7 @@ const copy = require("./data/test-runner/copy.cjs");
|
|
|
732
734
|
const api = require("./data/cache-browser/api.cjs");
|
|
733
735
|
const changeIconAliases = require("./icons/changeIconAliases.cjs");
|
|
734
736
|
const registry = require("./icons/registry.cjs");
|
|
737
|
+
const stepKind = require("./data/verification/stepKind.cjs");
|
|
735
738
|
const fixtureBlocks = require("./data/FixtureEditor/fixture-blocks.cjs");
|
|
736
739
|
const filterState = require("./data/test-runner/filterState.cjs");
|
|
737
740
|
const verifyReport = require("./data/verification/verify-report.cjs");
|
|
@@ -750,6 +753,7 @@ exports.Badge = Badge.Badge;
|
|
|
750
753
|
exports.CodeBlock = CodeBlock.CodeBlock;
|
|
751
754
|
exports.CodeDiff = CodeDiff.CodeDiff;
|
|
752
755
|
exports.CodeLine = CodeLine.CodeLine;
|
|
756
|
+
exports.SymbolBadge = SymbolBadge.SymbolBadge;
|
|
753
757
|
exports.computeLineDiff = codeDiff.computeLineDiff;
|
|
754
758
|
exports.parseUnifiedDiff = codeDiff.parseUnifiedDiff;
|
|
755
759
|
exports.inferColumns = dataTableUtils.inferColumns;
|
|
@@ -1000,6 +1004,7 @@ exports.GitFileList = GitChangeList.GitFileList;
|
|
|
1000
1004
|
exports.LINT_SEVERITIES = marks.LINT_SEVERITIES;
|
|
1001
1005
|
exports.TEST_OUTCOMES = marks.TEST_OUTCOMES;
|
|
1002
1006
|
exports.TEST_TOOLS = marks.TEST_TOOLS;
|
|
1007
|
+
exports.toolKeyFor = marks.toolKeyFor;
|
|
1003
1008
|
exports.toolMark = marks.toolMark;
|
|
1004
1009
|
exports.LintSeverityIcon = MarkIcons.LintSeverityIcon;
|
|
1005
1010
|
exports.OutcomeIcon = MarkIcons.OutcomeIcon;
|
|
@@ -1022,6 +1027,9 @@ exports.sum = status.sum;
|
|
|
1022
1027
|
exports.sumNonTaskTests = status.sumNonTaskTests;
|
|
1023
1028
|
exports.testStatus = status.testStatus;
|
|
1024
1029
|
exports.totalDuration = status.totalDuration;
|
|
1030
|
+
exports.StepKindSections = stepKindViews.StepKindSections;
|
|
1031
|
+
exports.StepOutputs = stepKindViews.StepOutputs;
|
|
1032
|
+
exports.StepWait = stepKindViews.StepWait;
|
|
1025
1033
|
exports.TestAttempts = TestFailureDetail.TestAttempts;
|
|
1026
1034
|
exports.TestFailureDetail = TestFailureDetail.TestFailureDetail;
|
|
1027
1035
|
exports.TestOutput = TestFailureDetail.TestOutput;
|
|
@@ -2126,6 +2134,11 @@ exports.changeIconAliases = changeIconAliases.changeIconAliases;
|
|
|
2126
2134
|
exports.getChangeIcon = changeIconAliases.getChangeIcon;
|
|
2127
2135
|
exports.clickyIconProvider = registry.clickyIconProvider;
|
|
2128
2136
|
exports.iconsByConsumerName = registry.iconsByConsumerName;
|
|
2137
|
+
exports.clockTime = stepKind.clockTime;
|
|
2138
|
+
exports.formatDelay = stepKind.formatDelay;
|
|
2139
|
+
exports.formatExportValue = stepKind.formatExportValue;
|
|
2140
|
+
exports.policySummary = stepKind.policySummary;
|
|
2141
|
+
exports.readStepDetail = stepKind.readStepDetail;
|
|
2129
2142
|
exports.createChecklistMarkdown = fixtureBlocks.createChecklistMarkdown;
|
|
2130
2143
|
exports.createFenceMarkdown = fixtureBlocks.createFenceMarkdown;
|
|
2131
2144
|
exports.fixtureFenceKind = fixtureBlocks.fixtureFenceKind;
|
|
@@ -2150,6 +2163,7 @@ exports.programmingIconCatalog = programmingCatalog.programmingIconCatalog;
|
|
|
2150
2163
|
exports.routeEdges = graphEdgeRouting.routeEdges;
|
|
2151
2164
|
exports.useClickyExport = useClickyExport.useClickyExport;
|
|
2152
2165
|
exports.verificationAdapters = adapters.verificationAdapters;
|
|
2166
|
+
exports.verifyNodeTest = verifyReportTests.verifyNodeTest;
|
|
2153
2167
|
exports.verifyReportCounts = verifyReportTests.verifyReportCounts;
|
|
2154
2168
|
exports.verifyReportTests = verifyReportTests.verifyReportTests;
|
|
2155
2169
|
//# sourceMappingURL=data.cjs.map
|
package/dist/data.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/data.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export { Badge, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeStat
|
|
|
6
6
|
export { CodeBlock, type CodeBlockProps } from './data/CodeBlock.js';
|
|
7
7
|
export { CodeDiff, type CodeDiffProps, type CodeDiffView, type DiffLineTarget, type DiffLineWidget, type DiffSide, } from './data/CodeDiff.js';
|
|
8
8
|
export { CodeLine, type CodeLineProps } from './data/CodeLine.js';
|
|
9
|
+
export { SymbolBadge, type SymbolBadgeProps, type SymbolBadgeStyle } from './data/SymbolBadge.js';
|
|
9
10
|
export { computeLineDiff, parseUnifiedDiff, type DiffHunk, type DiffLine, type DiffLineType, } from './data/code-diff.js';
|
|
10
11
|
export { inferColumns } from './data/data-table-utils.js';
|
|
11
12
|
export { parseBoundsValue, parseDurationBoundsValue, parseMultiFilterValue, serializeBoundsValue, serializeDurationBoundsValue, serializeMultiFilterValue, splitCommaValues, updateFilterSelection, type DataTableFilterSelection, type FilterDefaultOperator, } from './data/data-table-filter-values.js';
|