@polishd/next 0.2.3-dev.1 → 0.2.3-dev.3
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 +52 -0
- package/README.md +7 -5
- package/bin/init.mjs +4 -1
- package/dist/dashboard/chrome.d.ts +15 -0
- package/dist/dashboard/chrome.d.ts.map +1 -1
- package/dist/dashboard/chrome.js +5 -1
- package/dist/dashboard/chrome.js.map +1 -1
- package/dist/dashboard/data.d.ts +18 -0
- package/dist/dashboard/data.d.ts.map +1 -0
- package/dist/dashboard/data.js +70 -0
- package/dist/dashboard/data.js.map +1 -0
- package/dist/dashboard/index.d.ts +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +209 -85
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/snapshot-actions.d.ts +15 -5
- package/dist/dashboard/snapshot-actions.d.ts.map +1 -1
- package/dist/dashboard/snapshot-actions.js +64 -24
- package/dist/dashboard/snapshot-actions.js.map +1 -1
- package/dist/dashboard/snapshots.d.ts.map +1 -1
- package/dist/dashboard/snapshots.js +58 -8
- package/dist/dashboard/snapshots.js.map +1 -1
- package/dist/dashboard.css +4 -0
- package/dist/server/snapshots.d.ts +44 -11
- package/dist/server/snapshots.d.ts.map +1 -1
- package/dist/server/snapshots.js +288 -142
- package/dist/server/snapshots.js.map +1 -1
- package/docs/SETUP.md +10 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
### Snapshot capture survives serverless time limits
|
|
6
|
+
|
|
7
|
+
Capturing a site snapshot on Vercel could fail with no error box at all — the
|
|
8
|
+
whole Design tab crashed into Next's error boundary. The cause: the capture ran
|
|
9
|
+
as **one long server action**, and a serverless host that hits its function
|
|
10
|
+
time limit kills the function mid-shoot, so the action rejects with no result
|
|
11
|
+
and the client had no catch for it. A connected Blob store couldn't help; the
|
|
12
|
+
request itself was the problem.
|
|
13
|
+
|
|
14
|
+
- **Capture is now chunked into one short server call per page**: begin → one
|
|
15
|
+
call per route (both devices, both themes) → finish. No single request has
|
|
16
|
+
to outlive a function time limit, so upgrading the package is the whole fix
|
|
17
|
+
— no host configuration required. In-flight state is parked in the store
|
|
18
|
+
between calls; the client contributes nothing but ids, and a new capture
|
|
19
|
+
sweeps an unfinished predecessor, images included.
|
|
20
|
+
- **Failures degrade to messages everywhere.** Every action call is caught on
|
|
21
|
+
the client (a page whose call fails is reported and skipped, not fatal),
|
|
22
|
+
and every server path returns a diagnosis instead of throwing — including
|
|
23
|
+
the previously uncaught `playwright-core` load.
|
|
24
|
+
- The capture button shows **per-page progress** ("Shooting page 3 of 7…").
|
|
25
|
+
- `polishd init` now writes `export const maxDuration = 300` into the
|
|
26
|
+
dashboard page it generates, and the docs recommend it — headroom for heavy
|
|
27
|
+
pages on hosts with strict limits, no longer a requirement.
|
|
28
|
+
|
|
29
|
+
### The dashboard streams instead of loading all at once
|
|
30
|
+
|
|
31
|
+
Every tab used to wait for its slowest query before sending a single byte —
|
|
32
|
+
click Analytics and the whole page arrived at the speed of the journeys
|
|
33
|
+
sampler. The page is now built on React Suspense streaming:
|
|
34
|
+
|
|
35
|
+
- The **chrome, header, and section titles render immediately**; each card
|
|
36
|
+
shows a skeleton and fills in the moment its own data resolves, in whatever
|
|
37
|
+
order the queries finish.
|
|
38
|
+
- Each Analytics section is its own async server component awaiting **only
|
|
39
|
+
the queries it renders**, so a slow aggregate can't hold back a fast one.
|
|
40
|
+
A per-request cache (`src/dashboard/data.ts`, React `cache()`) keeps
|
|
41
|
+
sections that share inputs — the AI summary hashes the whole dataset for
|
|
42
|
+
its staleness check — from re-running any query.
|
|
43
|
+
- The other tabs (Design, Issues, Installs, Settings) load behind the same
|
|
44
|
+
skeleton the tab rail already shows while navigating, so the handoff from
|
|
45
|
+
"navigating" to "loading data" is seamless.
|
|
46
|
+
- `PolishdDashboard` is unchanged for hosts that render it themselves from
|
|
47
|
+
preloaded data; `createPolishdPage()` is what streams.
|
|
48
|
+
|
|
5
49
|
### Every Overview tile opens its own graph
|
|
6
50
|
|
|
7
51
|
The six numbers at the top of the Analytics tab were all-time totals, which
|
|
@@ -93,6 +137,14 @@ Blob store to the project:
|
|
|
93
137
|
`@sparticuz/chromium`), the gallery says so up front and disables the
|
|
94
138
|
capture button, instead of failing a minute into a doomed run. Failures
|
|
95
139
|
that can only surface at capture time name the missing piece precisely.
|
|
140
|
+
- A deployment with **no Blob store connected at all** gets the same
|
|
141
|
+
treatment. Without the token, storage falls back to disk — which on a
|
|
142
|
+
serverless host is read-only and gone by the next invocation, so every
|
|
143
|
+
capture was doomed before it started and said only "is the filesystem
|
|
144
|
+
writable?" a minute later. The gallery now names the actual gap and the
|
|
145
|
+
one-time fix (connect a Blob store, redeploy) before the button is pressed,
|
|
146
|
+
and the capture action refuses the same way for callers that never rendered
|
|
147
|
+
the dashboard.
|
|
96
148
|
- Local development is unchanged: your own Chrome first, images on disk,
|
|
97
149
|
same index, same gallery.
|
|
98
150
|
|
package/README.md
CHANGED
|
@@ -466,11 +466,13 @@ the whole setup: the `BLOB_READ_WRITE_TOKEN` it injects switches image storage
|
|
|
466
466
|
from disk to Blob, and the browser comes from `@sparticuz/chromium` (a
|
|
467
467
|
Chromium built for serverless sandboxes, installed automatically as an
|
|
468
468
|
optional dependency). The snapshot index rides in the same database the rest
|
|
469
|
-
of Polishd already requires in production, so no other wiring changes.
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
469
|
+
of Polishd already requires in production, so no other wiring changes. Capture
|
|
470
|
+
runs as one short server call per page, so it fits inside serverless function
|
|
471
|
+
time limits; if a single heavy page still brushes against a strict limit,
|
|
472
|
+
`export const maxDuration = 300` in the dashboard's `page.tsx` adds headroom
|
|
473
|
+
(`polishd init` writes it for you). On hosts with neither a writable
|
|
474
|
+
filesystem nor a Blob token, the button explains what's missing rather than
|
|
475
|
+
failing silently.
|
|
474
476
|
|
|
475
477
|
## Component-level tracking
|
|
476
478
|
|
package/bin/init.mjs
CHANGED
|
@@ -140,7 +140,10 @@ export function runInit(argv, cwd) {
|
|
|
140
140
|
`import { createPolishdPage } from "@polishd/next/dashboard";\n\n` +
|
|
141
141
|
`// Next requires these to be declared inline in the page module.\n` +
|
|
142
142
|
`export const runtime = "nodejs";\n` +
|
|
143
|
-
`export const dynamic = "force-dynamic";\n
|
|
143
|
+
`export const dynamic = "force-dynamic";\n` +
|
|
144
|
+
`// Server actions inherit this page's time limit; 300s gives\n` +
|
|
145
|
+
`// site-snapshot capture headroom on hosts with strict function limits.\n` +
|
|
146
|
+
`export const maxDuration = 300;\n\n` +
|
|
144
147
|
`// In production the dashboard refuses to render until you either set\n` +
|
|
145
148
|
`// POLISHD_DASHBOARD_TOKEN, pass your own \`authenticate\`, or opt out\n` +
|
|
146
149
|
`// explicitly with POLISHD_DASHBOARD_PUBLIC=true. It can change your AI\n` +
|
|
@@ -23,4 +23,19 @@ export default function DashboardChrome({ active, showInstalls, showIssues, chil
|
|
|
23
23
|
showIssues?: boolean;
|
|
24
24
|
children: ReactNode;
|
|
25
25
|
}): import("react").JSX.Element;
|
|
26
|
+
/**
|
|
27
|
+
* Stand-in for the tab being fetched.
|
|
28
|
+
*
|
|
29
|
+
* Deliberately the *shape* every tab shares — a title block, a wide card, a
|
|
30
|
+
* grid, a list — rather than a per-tab replica. A skeleton that mirrors the
|
|
31
|
+
* real layout too closely reads as a broken render when the real thing lands
|
|
32
|
+
* slightly different; this one reads as "loading" and gets out of the way.
|
|
33
|
+
*
|
|
34
|
+
* Exported so the server page can reuse it as the Suspense fallback while a
|
|
35
|
+
* tab's data streams in — the same skeleton the client shows on click, so the
|
|
36
|
+
* handoff from "navigating" to "loading data" is invisible.
|
|
37
|
+
*/
|
|
38
|
+
export declare function TabSkeleton({ name }: {
|
|
39
|
+
name: string;
|
|
40
|
+
}): import("react").JSX.Element;
|
|
26
41
|
//# sourceMappingURL=chrome.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/dashboard/chrome.tsx"],"names":[],"mappings":"AA4BA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,UAAU,CAAC;AAsBf;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,SAAS,EACT,KAAK,EACL,OAAe,EACf,IAAY,EACZ,YAAY,EAAE,SAAS,EACvB,QAAQ,GACT,EAAE;IACD,GAAG,EAAE,mBAAmB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAoBA;AAkBD,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,MAAM,EACN,YAAoB,EACpB,UAAkB,EAClB,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA8EA"}
|
|
1
|
+
{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/dashboard/chrome.tsx"],"names":[],"mappings":"AA4BA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,UAAU,CAAC;AAsBf;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,SAAS,EACT,KAAK,EACL,OAAe,EACf,IAAY,EACZ,YAAY,EAAE,SAAS,EACvB,QAAQ,GACT,EAAE;IACD,GAAG,EAAE,mBAAmB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAoBA;AAkBD,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,MAAM,EACN,YAAoB,EACpB,UAAkB,EAClB,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA8EA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAiDrD"}
|
package/dist/dashboard/chrome.js
CHANGED
|
@@ -116,8 +116,12 @@ export default function DashboardChrome({ active, showInstalls = false, showIssu
|
|
|
116
116
|
* grid, a list — rather than a per-tab replica. A skeleton that mirrors the
|
|
117
117
|
* real layout too closely reads as a broken render when the real thing lands
|
|
118
118
|
* slightly different; this one reads as "loading" and gets out of the way.
|
|
119
|
+
*
|
|
120
|
+
* Exported so the server page can reuse it as the Suspense fallback while a
|
|
121
|
+
* tab's data streams in — the same skeleton the client shows on click, so the
|
|
122
|
+
* handoff from "navigating" to "loading data" is invisible.
|
|
119
123
|
*/
|
|
120
|
-
function TabSkeleton({ name }) {
|
|
124
|
+
export function TabSkeleton({ name }) {
|
|
121
125
|
return (_jsxs("div", { className: "animate-pulse text-white", children: [_jsxs("span", { className: "sr-only", role: "status", children: ["Loading ", name] }), _jsxs("div", { className: "mb-8 flex items-start justify-between gap-3 border-b border-[#2e2e2e] pb-6", children: [_jsxs("div", { children: [_jsx("div", { className: "h-[22px] w-40 rounded bg-[#1a1a1a]" }), _jsx("div", { className: "mt-2.5 h-3 w-64 max-w-full rounded bg-[#141414]" })] }), _jsx("div", { className: "h-6 w-28 shrink-0 rounded-full bg-[#141414]" })] }), _jsxs("div", { className: `mb-8 ${card} px-4 py-5 sm:px-5`, children: [_jsx("div", { className: "h-3 w-32 rounded bg-[#1a1a1a]" }), _jsxs("div", { className: "mt-4 space-y-2", children: [_jsx("div", { className: "h-3 w-full rounded bg-[#141414]" }), _jsx("div", { className: "h-3 w-[92%] rounded bg-[#141414]" }), _jsx("div", { className: "h-3 w-[68%] rounded bg-[#141414]" })] })] }), _jsx("div", { className: "mb-8 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6", children: Array.from({ length: 6 }, (_, i) => (_jsxs("div", { className: `${card} px-4 py-4`, children: [_jsx("div", { className: "h-6 w-14 rounded bg-[#1a1a1a]" }), _jsx("div", { className: "mt-3 h-2.5 w-16 rounded bg-[#141414]" })] }, i))) }), _jsx("div", { className: `${card} overflow-hidden`, children: Array.from({ length: 4 }, (_, i) => (_jsxs("div", { className: "flex items-center justify-between gap-4 border-t border-[#2e2e2e] px-5 py-3.5 first:border-t-0", children: [_jsx("div", { className: "h-3 flex-1 rounded bg-[#141414]", style: { maxWidth: `${70 - i * 12}%` } }), _jsx("div", { className: "h-3 w-12 shrink-0 rounded bg-[#141414]" })] }, i))) })] }));
|
|
122
126
|
}
|
|
123
127
|
//# sourceMappingURL=chrome.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/dashboard/chrome.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/dashboard/chrome.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,EACN,QAAQ,EACR,aAAa,GAGd,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,SAAS,EACT,WAAW,EACX,IAAI,EACJ,QAAQ,GACT,MAAM,MAAM,CAAC;AASd,MAAM,IAAI,GAAiE;IACzE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAC,SAAS,KAAG,EAAE;IAC3D,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAC,WAAW,KAAG,EAAE;IACvD,4EAA4E;IAC5E,0DAA0D;IAC1D,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAC,SAAS,KAAG,EAAE;IACrD,yEAAyE;IACzE,sEAAsE;IACtE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAC,SAAS,KAAG,EAAE;IACzD,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAC,QAAQ,KAAG,EAAE;CACzD,CAAC;AAEF,0EAA0E;AAC1E,MAAM,aAAa,GAAG,aAAa,CAA8C,IAAI,CAAC,CAAC;AAEvF,kFAAkF;AAClF,SAAS,UAAU,CAAC,CAAa;IAC/B,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,GAAG,EACH,SAAS,EACT,KAAK,EACL,OAAO,GAAG,KAAK,EACf,IAAI,GAAG,KAAK,EACZ,YAAY,EAAE,SAAS,EACvB,QAAQ,GAWT;IACC,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3C,OAAO,CACL,KAAC,IAAI,IACH,IAAI,EAAE,QAAQ,GAAG,EAAE,EACnB,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,KAAK,gBACA,SAAS,kBACP,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,eAC/B,IAAI,IAAI,SAAS,EAC5B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACvC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,YAEA,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAwB;IAC7C,KAAK,IAAI,EAAE,GAAG,IAAI,EAAE,aAAa,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;QACrE,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;YAC1F,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,MAAM,EACN,YAAY,GAAG,KAAK,EACpB,UAAU,GAAG,KAAK,EAClB,QAAQ,GAQT;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,aAAa,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA6B,IAAI,CAAC,CAAC;IAEvE,0EAA0E;IAC1E,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,MAAM,IAAI,MAAM,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,IAAI,MAAM,KAAK,IAAI,CAAC;IAE3C,0EAA0E;IAC1E,gBAAgB;IAChB,MAAM,MAAM,GAAkD;QAC5D,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,YAAY;KACvB,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAwB,EAAE,EAAE;QAC5C,IAAI,GAAG,KAAK,QAAQ;YAAE,OAAO;QAC7B,SAAS,CAAC,GAAG,CAAC,CAAC;QACf,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,YACrC,cAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,yDAAyD,YACpF,eAAK,SAAS,EAAC,2CAA2C,aACxD,gBAAO,SAAS,EAAC,kBAAkB,YACjC,eAAK,SAAS,EAAC,oBAAoB,aACjC,YAAG,SAAS,EAAE,QAAQ,wBAAa,EACnC,YAAG,SAAS,EAAC,2DAA2D,iDAEpE,EACJ,4BACa,oBAAoB,EAC/B,SAAS,EAAC,uCAAuC,YAEhD,IAAI,CAAC,MAAM;oCACV,wDAAwD;oCACxD,6DAA6D;oCAC7D,sBAAsB;oCACtB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,MAAM,KAAK,GAAG,CAAC,EAAE,CACvD,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;wCACZ,MAAM,UAAU,GAAG,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;wCACvC,OAAO,CACL,MAAC,OAAO,IAEN,GAAG,EAAE,GAAG,CAAC,EAAE,EACX,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,OAAO,IAAI,UAAU,EAC3B,SAAS,EAAE,uFACT,UAAU;gDACR,CAAC,CAAC,sDAAsD;gDACxD,CAAC,CAAC,oEACN,EAAE,aAED,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,KAAC,WAAW,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAClD,GAAG,CAAC,IAAI,KAXJ,GAAG,CAAC,EAAE,CAYH,CACX,CAAC;oCACJ,CAAC,CAAC,GACE,IACF,GACA,EACR,cAAK,SAAS,EAAC,gBAAgB,YAC5B,OAAO,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAE,CAAC,IAAI,GAAI,CAAC,CAAC,CAAC,QAAQ,GAChF,IACF,GACF,GACiB,CAC1B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAoB;IACpD,OAAO,CACL,eAAK,SAAS,EAAC,0BAA0B,aACvC,gBAAM,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,QAAQ,yBAC5B,IAAI,IACR,EAEP,eAAK,SAAS,EAAC,4EAA4E,aACzF,0BACE,cAAK,SAAS,EAAC,oCAAoC,GAAG,EACtD,cAAK,SAAS,EAAC,iDAAiD,GAAG,IAC/D,EACN,cAAK,SAAS,EAAC,6CAA6C,GAAG,IAC3D,EAEN,eAAK,SAAS,EAAE,QAAQ,IAAI,oBAAoB,aAC9C,cAAK,SAAS,EAAC,+BAA+B,GAAG,EACjD,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,iCAAiC,GAAG,EACnD,cAAK,SAAS,EAAC,kCAAkC,GAAG,EACpD,cAAK,SAAS,EAAC,kCAAkC,GAAG,IAChD,IACF,EAEN,cAAK,SAAS,EAAC,2DAA2D,YACvE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnC,eAAa,SAAS,EAAE,GAAG,IAAI,YAAY,aACzC,cAAK,SAAS,EAAC,+BAA+B,GAAG,EACjD,cAAK,SAAS,EAAC,sCAAsC,GAAG,KAFhD,CAAC,CAGL,CACP,CAAC,GACE,EAEN,cAAK,SAAS,EAAE,GAAG,IAAI,kBAAkB,YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnC,eAEE,SAAS,EAAC,gGAAgG,aAE1G,cACE,SAAS,EAAC,iCAAiC,EAC3C,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GACtC,EACF,cAAK,SAAS,EAAC,wCAAwC,GAAG,KAPrD,CAAC,CAQF,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type PolishdDashboardData } from "../server/queries";
|
|
2
|
+
export declare const loadOverview: () => Promise<import("../server").OverviewStats>;
|
|
3
|
+
export declare const loadHealth: () => Promise<import("../server").CaptureHealth>;
|
|
4
|
+
export declare const loadPages: () => Promise<import("../server").TopPage[]>;
|
|
5
|
+
export declare const loadTrends: () => Promise<import("../server").MetricTrends>;
|
|
6
|
+
export declare const loadElements: () => Promise<import("../server").ElementStat[]>;
|
|
7
|
+
export declare const loadDevices: () => Promise<import("../server").DeviceBucket[]>;
|
|
8
|
+
export declare const loadTopUsed: () => Promise<import("../server").TopInteraction[]>;
|
|
9
|
+
export declare const loadJourneys: () => Promise<import("../server").SessionJourney[]>;
|
|
10
|
+
export declare const loadErrors: () => Promise<import("../server").RecentError[]>;
|
|
11
|
+
export declare const loadMonitored: () => Promise<import("../server").MonitoredComponent[]>;
|
|
12
|
+
/**
|
|
13
|
+
* The full analytics payload, assembled from the same cached parts the
|
|
14
|
+
* sections use — so the summary card asking for everything costs nothing
|
|
15
|
+
* beyond what the sections are already fetching for themselves.
|
|
16
|
+
*/
|
|
17
|
+
export declare const loadDashboardData: () => Promise<PolishdDashboardData>;
|
|
18
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/dashboard/data.ts"],"names":[],"mappings":"AAgBA,OAAO,EAWL,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAe3B,eAAO,MAAM,YAAY,kDAAqB,CAAC;AAC/C,eAAO,MAAM,UAAU,kDAA0B,CAAC;AAClD,eAAO,MAAM,SAAS,8CAA8B,CAAC;AACrD,eAAO,MAAM,UAAU,iDAAyB,CAAC;AACjD,eAAO,MAAM,YAAY,kDAAmC,CAAC;AAC7D,eAAO,MAAM,WAAW,mDAA4B,CAAC;AACrD,eAAO,MAAM,WAAW,qDAAsC,CAAC;AAC/D,eAAO,MAAM,YAAY,qDAAqC,CAAC;AAC/D,eAAO,MAAM,UAAU,kDAAkC,CAAC;AAC1D,eAAO,MAAM,aAAa,yDAAgC,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAmB,OAAO,CAAC,oBAAoB,CAoC3E,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-request cached loaders for the dashboard's streamed sections.
|
|
3
|
+
*
|
|
4
|
+
* Each section of the analytics tab is an async server component that awaits
|
|
5
|
+
* only the queries it actually renders, so a slow aggregate (journeys, metric
|
|
6
|
+
* trends) can't hold back a fast one (devices). React's `cache()` scopes the
|
|
7
|
+
* memoization to the request, so sections that share an input — the summary
|
|
8
|
+
* card wants everything, the capture banner wants overview + health — still
|
|
9
|
+
* run each underlying query exactly once per render.
|
|
10
|
+
*
|
|
11
|
+
* Lives here rather than in server/queries.ts because that module is shared
|
|
12
|
+
* with the AI summary layer, which deliberately doesn't import React.
|
|
13
|
+
*/
|
|
14
|
+
import { cache } from "react";
|
|
15
|
+
import { ensureReclassifiedHistory } from "../server/reclassify";
|
|
16
|
+
import { getCaptureHealth, getDeviceBreakdown, getElementStats, getMetricTrends, getMonitoredComponents, getOverview, getRecentErrors, getSessionJourneys, getTopInteractions, getTopPages, } from "../server/queries";
|
|
17
|
+
/**
|
|
18
|
+
* Wrap a query so it (a) waits for the one-time history reclassification that
|
|
19
|
+
* the batch loader used to run up front — the sweep is module-memoized, so
|
|
20
|
+
* concurrent sections join a single pass — and (b) runs once per request no
|
|
21
|
+
* matter how many sections await it.
|
|
22
|
+
*/
|
|
23
|
+
function swept(fn) {
|
|
24
|
+
return cache(async () => {
|
|
25
|
+
await ensureReclassifiedHistory();
|
|
26
|
+
return fn();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export const loadOverview = swept(getOverview);
|
|
30
|
+
export const loadHealth = swept(getCaptureHealth);
|
|
31
|
+
export const loadPages = swept(() => getTopPages(8));
|
|
32
|
+
export const loadTrends = swept(getMetricTrends);
|
|
33
|
+
export const loadElements = swept(() => getElementStats(12));
|
|
34
|
+
export const loadDevices = swept(getDeviceBreakdown);
|
|
35
|
+
export const loadTopUsed = swept(() => getTopInteractions(12));
|
|
36
|
+
export const loadJourneys = swept(() => getSessionJourneys(6));
|
|
37
|
+
export const loadErrors = swept(() => getRecentErrors(8));
|
|
38
|
+
export const loadMonitored = swept(getMonitoredComponents);
|
|
39
|
+
/**
|
|
40
|
+
* The full analytics payload, assembled from the same cached parts the
|
|
41
|
+
* sections use — so the summary card asking for everything costs nothing
|
|
42
|
+
* beyond what the sections are already fetching for themselves.
|
|
43
|
+
*/
|
|
44
|
+
export const loadDashboardData = cache(async () => {
|
|
45
|
+
const [overview, health, pages, trends, elements, devices, topUsed, journeys, errors, monitored,] = await Promise.all([
|
|
46
|
+
loadOverview(),
|
|
47
|
+
loadHealth(),
|
|
48
|
+
loadPages(),
|
|
49
|
+
loadTrends(),
|
|
50
|
+
loadElements(),
|
|
51
|
+
loadDevices(),
|
|
52
|
+
loadTopUsed(),
|
|
53
|
+
loadJourneys(),
|
|
54
|
+
loadErrors(),
|
|
55
|
+
loadMonitored(),
|
|
56
|
+
]);
|
|
57
|
+
return {
|
|
58
|
+
overview,
|
|
59
|
+
health,
|
|
60
|
+
pages,
|
|
61
|
+
trends,
|
|
62
|
+
elements,
|
|
63
|
+
devices,
|
|
64
|
+
topUsed,
|
|
65
|
+
journeys,
|
|
66
|
+
errors,
|
|
67
|
+
monitored,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/dashboard/data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GAEZ,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,SAAS,KAAK,CAAI,EAAoB;IACpC,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE;QACtB,MAAM,yBAAyB,EAAE,CAAC;QAClC,OAAO,EAAE,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,IAAmC,EAAE;IAC/E,MAAM,CACJ,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACV,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,YAAY,EAAE;QACd,UAAU,EAAE;QACZ,SAAS,EAAE;QACX,UAAU,EAAE;QACZ,YAAY,EAAE;QACd,WAAW,EAAE;QACb,WAAW,EAAE;QACb,YAAY,EAAE;QACd,UAAU,EAAE;QACZ,aAAa,EAAE;KAChB,CAAC,CAAC;IACH,OAAO;QACL,QAAQ;QACR,MAAM;QACN,KAAK;QACL,MAAM;QACN,QAAQ;QACR,OAAO;QACP,OAAO;QACP,QAAQ;QACR,MAAM;QACN,SAAS;KACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* });
|
|
16
16
|
*/
|
|
17
17
|
import type { Metadata } from "next";
|
|
18
|
-
import type
|
|
18
|
+
import { type ReactNode } from "react";
|
|
19
19
|
import { type PolishdConfig } from "../config";
|
|
20
20
|
import { type PolishdDashboardData } from "../server/queries";
|
|
21
21
|
import { type PolishdAuthenticate } from "../ai/guard";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAG9E,OAAO,EAIL,KAAK,oBAAoB,EAO1B,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,cAAc,CAAC;AAWtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACf,MAAM,aAAa,CAAC;AAcrB,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,QAGtB,CAAC;AA0HF,OAAO,EAAE,wBAAwB,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIxF,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AAEtB,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtC,iEAAiE;IACjE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAgXpD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,EAAE,EACF,YAAoB,EACpB,UAAkB,GACnB,EAAE;IACD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,eAAe,CAAC;IACpB,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,+BA0CA;AA6VD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,iEAAiE;IACjE,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0ID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,wBAA6B,IA4BjC,QAAO,gBAAqB,0CAqF/D"}
|