@apisurf/wireui 0.1.2

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.
Files changed (38) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +157 -0
  3. package/bin/wireui.mjs +233 -0
  4. package/dist/nitro.json +17 -0
  5. package/dist/public/assets/collections-CLHcfRfi.js +1 -0
  6. package/dist/public/assets/globals-CZiNFGaK.css +1 -0
  7. package/dist/public/assets/index-D5VFd_3H.js +14 -0
  8. package/dist/public/assets/kv-table-oB5gcq0i.js +2 -0
  9. package/dist/public/assets/query-BKAhHNIi.js +19 -0
  10. package/dist/public/assets/requests._requestId-Bu7E2eoI.js +1 -0
  11. package/dist/public/assets/routes-DDY2CfzA.js +1 -0
  12. package/dist/public/assets/runs._runId-CzwtVjYq.js +1 -0
  13. package/dist/public/assets/scoped-DB8raIWx.js +1 -0
  14. package/dist/public/assets/split-Br1RX2I4.js +1 -0
  15. package/dist/public/favicon.svg +1 -0
  16. package/dist/server/_chunks/ssr-renderer.mjs +26 -0
  17. package/dist/server/_libs/@tanstack/react-router+[...].mjs +15246 -0
  18. package/dist/server/_libs/h3+rou3+srvx.mjs +2086 -0
  19. package/dist/server/_libs/hookable.mjs +41 -0
  20. package/dist/server/_libs/tanstack__history.mjs +369 -0
  21. package/dist/server/_libs/ufo.mjs +64 -0
  22. package/dist/server/_runtime.mjs +35 -0
  23. package/dist/server/_ssr/api-Dw1Zb_PK.mjs +931 -0
  24. package/dist/server/_ssr/collections-CqidTQpw.mjs +495 -0
  25. package/dist/server/_ssr/empty-plugin-adapters-CCuiUfKt.mjs +5 -0
  26. package/dist/server/_ssr/kv-table-DQUkoItO.mjs +458 -0
  27. package/dist/server/_ssr/query-D4so9xiY.mjs +416 -0
  28. package/dist/server/_ssr/requests._requestId-BFukRwqL.mjs +942 -0
  29. package/dist/server/_ssr/router-CPcgc_kh.mjs +3176 -0
  30. package/dist/server/_ssr/routes-DaV9vGHn.mjs +375 -0
  31. package/dist/server/_ssr/runs._runId-Df_LmPHa.mjs +836 -0
  32. package/dist/server/_ssr/scoped-CnQ56K8h.mjs +42 -0
  33. package/dist/server/_ssr/split-DWrMIs7K.mjs +115 -0
  34. package/dist/server/_ssr/ssr.mjs +6827 -0
  35. package/dist/server/_ssr/start-zk_ZfrWl.mjs +4 -0
  36. package/dist/server/_tanstack-start-manifest_v-CARKjHfs.mjs +50 -0
  37. package/dist/server/index.mjs +368 -0
  38. package/package.json +71 -0
@@ -0,0 +1,375 @@
1
+ import { Link, getRouteApi, require_jsx_runtime, useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
2
+ import { Card, Dot, Empty, IconCheckCircle, IconXCircle, MethodBadge, Pill, Route$4, SectionTitle, Stat, StatGrid, StatusBadge, css, cx, formatAgo, formatBytes, formatCount, formatMs, getOverview, mono, pagePad, plural, runTone, runVerdict, scrollPane, tabKey, table, truncate, useNow, usePrefs, useTab, useUnreadable } from "./router-CPcgc_kh.mjs";
3
+ import { useEnvScoped } from "./scoped-CnQ56K8h.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/routes-DaV9vGHn.js
5
+ var import_jsx_runtime = require_jsx_runtime();
6
+ var root = getRouteApi("__root__");
7
+ function OverviewPage() {
8
+ useTab({
9
+ key: tabKey.overview(),
10
+ title: "Overview",
11
+ icon: "overview"
12
+ });
13
+ const unreadable = useUnreadable();
14
+ const ws = root.useLoaderData();
15
+ const now = useNow(ws.now);
16
+ const { prefs } = usePrefs();
17
+ const navigate = useNavigate();
18
+ const { data } = useEnvScoped(Route$4.useLoaderData(), (env) => getOverview({ data: { env } }));
19
+ if (unreadable) return unreadable;
20
+ const c = ws.counts;
21
+ if (!c) return null;
22
+ const envName = prefs.env === "*" ? null : prefs.env === "" ? "No environment" : prefs.env;
23
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24
+ className: scrollPane,
25
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26
+ className: pagePad,
27
+ children: [
28
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
29
+ className: css({
30
+ fontSize: "18px",
31
+ fontWeight: "600",
32
+ m: "0"
33
+ }),
34
+ children: "Overview"
35
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
36
+ className: cx(mono, css({
37
+ color: "muted",
38
+ m: "0",
39
+ mt: "0.5"
40
+ })),
41
+ children: ws.path
42
+ })] }),
43
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WorkspaceStats, {
44
+ counts: c,
45
+ envCount: ws.envs.length,
46
+ fileBytes: ws.bytes
47
+ }),
48
+ envName ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
49
+ className: css({
50
+ color: "muted",
51
+ m: "0",
52
+ mt: "-2"
53
+ }),
54
+ children: [
55
+ "Totals cover the whole file; the lists below are scoped to ",
56
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("b", { children: envName }),
57
+ "."
58
+ ]
59
+ }) : null,
60
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
61
+ className: css({
62
+ display: "grid",
63
+ gridTemplateColumns: {
64
+ base: "1fr",
65
+ xl: "3fr 2fr"
66
+ },
67
+ gap: "5"
68
+ }),
69
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SectionTitle, { children: "Recent runs" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Card, { children: data.runs.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Empty, { title: "No runs in this environment" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("table", {
70
+ className: table,
71
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("tr", { children: [
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", { children: "Collection" }),
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", { children: "Result" }),
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", { children: "Env" }),
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
76
+ className: "num",
77
+ children: "Requests"
78
+ }),
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
80
+ className: "num",
81
+ children: "Wall"
82
+ }),
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
84
+ className: "num",
85
+ children: "When"
86
+ })
87
+ ] }) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", { children: data.runs.map((run) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("tr", {
88
+ "data-link": true,
89
+ onClick: () => void navigate({
90
+ to: "/runs/$runId",
91
+ params: { runId: String(run.id) }
92
+ }),
93
+ children: [
94
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
95
+ className: css({ maxW: "260px" }),
96
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
97
+ className: css({
98
+ display: "flex",
99
+ alignItems: "center",
100
+ gap: "2"
101
+ }),
102
+ children: [
103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dot, { tone: runTone(run) }),
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
105
+ className: cx(truncate, css({ fontWeight: "500" })),
106
+ title: run.rel,
107
+ children: run.file
108
+ }),
109
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
110
+ className: cx(mono, css({ color: "faint" })),
111
+ children: ["#", run.id]
112
+ })
113
+ ]
114
+ })
115
+ }),
116
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
117
+ className: css({
118
+ color: "muted",
119
+ whiteSpace: "nowrap"
120
+ }),
121
+ children: runVerdict(run)
122
+ }),
123
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", { children: run.env ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, { children: run.env }) : null }),
124
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
125
+ className: "num",
126
+ children: formatCount(run.request_count)
127
+ }),
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
129
+ className: cx("num", mono),
130
+ children: run.finished_at ? formatMs(run.finished_at - run.started_at) : "—"
131
+ }),
132
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
133
+ className: cx("num", css({ color: "muted" })),
134
+ children: formatAgo(now, run.started_at)
135
+ })
136
+ ]
137
+ }, run.id)) })]
138
+ }) })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
139
+ className: css({
140
+ display: "flex",
141
+ flexDir: "column",
142
+ gap: "5"
143
+ }),
144
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SectionTitle, { children: "Failing checks" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Card, { children: data.failedChecks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
145
+ className: css({
146
+ display: "flex",
147
+ gap: "2",
148
+ alignItems: "center",
149
+ p: "3",
150
+ color: "ok"
151
+ }),
152
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(IconCheckCircle, { size: 16 }), " No failed checks."]
153
+ }) : data.failedChecks.map((check) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
154
+ to: "/runs/$runId",
155
+ params: { runId: String(check.run_id) },
156
+ search: { tab: "checks" },
157
+ className: css({
158
+ display: "flex",
159
+ gap: "2",
160
+ px: "3",
161
+ py: "2",
162
+ borderBottom: "1px solid",
163
+ borderColor: "line",
164
+ color: "fg",
165
+ textDecoration: "none",
166
+ _hover: { bg: "hover" },
167
+ _last: { borderBottom: "none" }
168
+ }),
169
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
170
+ className: css({
171
+ color: "bad",
172
+ pt: "1px"
173
+ }),
174
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(IconXCircle, { size: 15 })
175
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
176
+ className: css({
177
+ minW: "0",
178
+ flex: "1"
179
+ }),
180
+ children: [
181
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
182
+ className: cx(truncate, css({
183
+ display: "block",
184
+ fontWeight: "500"
185
+ })),
186
+ children: check.name
187
+ }),
188
+ check.message ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
189
+ className: cx(truncate, css({
190
+ display: "block",
191
+ color: "bad",
192
+ fontSize: "12px"
193
+ })),
194
+ children: check.message
195
+ }) : null,
196
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
197
+ className: css({
198
+ display: "block",
199
+ color: "faint",
200
+ fontSize: "11px"
201
+ }),
202
+ children: [
203
+ check.file,
204
+ " · run #",
205
+ check.run_id,
206
+ " · ",
207
+ formatAgo(now, check.ts)
208
+ ]
209
+ })
210
+ ]
211
+ })]
212
+ }, check.id)) })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SectionTitle, { children: "Failed requests" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Card, { children: data.failedRequests.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
213
+ className: css({
214
+ display: "flex",
215
+ gap: "2",
216
+ alignItems: "center",
217
+ p: "3",
218
+ color: "ok"
219
+ }),
220
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(IconCheckCircle, { size: 16 }), " Every request succeeded."]
221
+ }) : data.failedRequests.map((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
222
+ to: "/requests/$requestId",
223
+ params: { requestId: String(row.id) },
224
+ className: css({
225
+ display: "flex",
226
+ alignItems: "center",
227
+ gap: "2",
228
+ px: "3",
229
+ py: "1.5",
230
+ borderBottom: "1px solid",
231
+ borderColor: "line",
232
+ color: "fg",
233
+ textDecoration: "none",
234
+ _hover: { bg: "hover" },
235
+ _last: { borderBottom: "none" }
236
+ }),
237
+ children: [
238
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MethodBadge, {
239
+ method: row.method,
240
+ kind: row.kind,
241
+ width: "list"
242
+ }),
243
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
244
+ className: cx(truncate, mono, css({ flex: "1" })),
245
+ title: `${row.host}${row.path}`,
246
+ children: row.path
247
+ }),
248
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
249
+ className: css({
250
+ color: "faint",
251
+ fontSize: "11px",
252
+ whiteSpace: "nowrap"
253
+ }),
254
+ children: formatAgo(now, row.ts)
255
+ }),
256
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusBadge, {
257
+ status: row.status,
258
+ error: row.error_name
259
+ })
260
+ ]
261
+ }, row.id)) })] })]
262
+ })]
263
+ }),
264
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SectionTitle, { children: "Slowest endpoints" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Card, { children: data.slowest.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Empty, { title: "No HTTP requests yet" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("table", {
265
+ className: table,
266
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("tr", { children: [
267
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", { children: "Endpoint" }),
268
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
269
+ className: "num",
270
+ children: "Calls"
271
+ }),
272
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
273
+ className: "num",
274
+ children: "Errors"
275
+ }),
276
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
277
+ className: "num",
278
+ children: "Avg"
279
+ }),
280
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
281
+ className: "num",
282
+ children: "Max"
283
+ })
284
+ ] }) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", { children: data.slowest.map((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("tr", {
285
+ "data-link": true,
286
+ onClick: () => void navigate({
287
+ to: "/requests/$requestId",
288
+ params: { requestId: String(row.slowest_request_id) }
289
+ }),
290
+ children: [
291
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
292
+ className: css({
293
+ maxW: "0",
294
+ w: "full"
295
+ }),
296
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
297
+ className: css({
298
+ display: "flex",
299
+ alignItems: "center",
300
+ gap: "2",
301
+ minW: "0"
302
+ }),
303
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(MethodBadge, {
304
+ method: row.method,
305
+ width: "list"
306
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
307
+ className: cx(truncate, mono),
308
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
309
+ className: css({ color: "faint" }),
310
+ children: row.host
311
+ }), row.path]
312
+ })]
313
+ })
314
+ }),
315
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
316
+ className: "num",
317
+ children: formatCount(row.count)
318
+ }),
319
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
320
+ className: cx("num", row.errors ? css({ color: "warn" }) : void 0),
321
+ children: formatCount(row.errors)
322
+ }),
323
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
324
+ className: cx("num", mono),
325
+ children: formatMs(row.avg_ms)
326
+ }),
327
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
328
+ className: cx("num", mono),
329
+ children: formatMs(row.max_ms)
330
+ })
331
+ ]
332
+ }, `${row.method} ${row.host}${row.path}`)) })]
333
+ }) })] })
334
+ ]
335
+ })
336
+ });
337
+ }
338
+ function WorkspaceStats({ counts: c, envCount, fileBytes }) {
339
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(StatGrid, { children: [
340
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Stat, {
341
+ label: "Collections",
342
+ value: formatCount(c.scripts),
343
+ sub: "scripts recorded"
344
+ }),
345
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Stat, {
346
+ label: "Runs",
347
+ value: formatCount(c.runs),
348
+ sub: `${plural(envCount, "environment")}`
349
+ }),
350
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Stat, {
351
+ label: "Requests",
352
+ value: formatCount(c.requests),
353
+ sub: c.connections ? `+ ${plural(c.connections, "connection")} · ${plural(c.messages, "message")}` : "HTTP"
354
+ }),
355
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Stat, {
356
+ label: "Failed requests",
357
+ value: formatCount(c.failedRequests),
358
+ tone: c.failedRequests ? "warn" : void 0,
359
+ sub: "errors and ≥ 400"
360
+ }),
361
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Stat, {
362
+ label: "Checks",
363
+ value: c.checks ? `${formatCount(c.checks - c.failedChecks)}/${formatCount(c.checks)}` : "—",
364
+ tone: c.failedChecks ? "bad" : c.checks ? "ok" : void 0,
365
+ sub: c.failedChecks ? `${formatCount(c.failedChecks)} failed` : "passing"
366
+ }),
367
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Stat, {
368
+ label: "Stored payloads",
369
+ value: formatBytes(c.storedBodyBytes),
370
+ sub: `${formatCount(c.bodies)} unique · ${formatBytes(fileBytes)} on disk`
371
+ })
372
+ ] });
373
+ }
374
+ //#endregion
375
+ export { OverviewPage as component };