@polishd/next 0.2.3-dev.5 → 0.2.3-dev.7
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/AGENTS.md +1 -1
- package/CHANGELOG.md +79 -14
- package/README.md +13 -3
- package/dist/ai/actions.d.ts +13 -1
- package/dist/ai/actions.d.ts.map +1 -1
- package/dist/ai/actions.js +20 -1
- package/dist/ai/actions.js.map +1 -1
- package/dist/ai/design.d.ts +5 -1
- package/dist/ai/design.d.ts.map +1 -1
- package/dist/ai/design.js +21 -4
- package/dist/ai/design.js.map +1 -1
- package/dist/ai/fix.d.ts +14 -0
- package/dist/ai/fix.d.ts.map +1 -0
- package/dist/ai/fix.js +254 -0
- package/dist/ai/fix.js.map +1 -0
- package/dist/ai/guard.d.ts.map +1 -1
- package/dist/ai/guard.js +8 -32
- package/dist/ai/guard.js.map +1 -1
- package/dist/ai/issues.d.ts +29 -6
- package/dist/ai/issues.d.ts.map +1 -1
- package/dist/ai/issues.js +113 -40
- package/dist/ai/issues.js.map +1 -1
- package/dist/ai/types.d.ts +52 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/dashboard/design-review-card.d.ts +3 -1
- package/dist/dashboard/design-review-card.d.ts.map +1 -1
- package/dist/dashboard/design-review-card.js +14 -6
- package/dist/dashboard/design-review-card.js.map +1 -1
- package/dist/dashboard/design.d.ts.map +1 -1
- package/dist/dashboard/design.js +75 -17
- package/dist/dashboard/design.js.map +1 -1
- package/dist/dashboard/file-bug-button.d.ts +14 -0
- package/dist/dashboard/file-bug-button.d.ts.map +1 -0
- package/dist/dashboard/file-bug-button.js +37 -0
- package/dist/dashboard/file-bug-button.js.map +1 -0
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +4 -2
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/issue-list.d.ts +11 -0
- package/dist/dashboard/issue-list.d.ts.map +1 -0
- package/dist/dashboard/issue-list.js +159 -0
- package/dist/dashboard/issue-list.js.map +1 -0
- package/dist/dashboard/issues.d.ts +31 -2
- package/dist/dashboard/issues.d.ts.map +1 -1
- package/dist/dashboard/issues.js +4 -71
- package/dist/dashboard/issues.js.map +1 -1
- package/dist/dashboard/markdown-parse.d.ts +87 -0
- package/dist/dashboard/markdown-parse.d.ts.map +1 -0
- package/dist/dashboard/markdown-parse.js +244 -0
- package/dist/dashboard/markdown-parse.js.map +1 -0
- package/dist/dashboard/markdown.d.ts +5 -0
- package/dist/dashboard/markdown.d.ts.map +1 -0
- package/dist/dashboard/markdown.js +65 -0
- package/dist/dashboard/markdown.js.map +1 -0
- package/dist/dashboard/snapshot-actions.d.ts.map +1 -1
- package/dist/dashboard/snapshot-actions.js +22 -54
- package/dist/dashboard/snapshot-actions.js.map +1 -1
- package/dist/dashboard/snapshots.d.ts.map +1 -1
- package/dist/dashboard/snapshots.js +7 -20
- package/dist/dashboard/snapshots.js.map +1 -1
- package/dist/dashboard/summary.d.ts.map +1 -1
- package/dist/dashboard/summary.js +8 -36
- package/dist/dashboard/summary.js.map +1 -1
- package/dist/dashboard/ui.d.ts +1 -0
- package/dist/dashboard/ui.d.ts.map +1 -1
- package/dist/dashboard/ui.js +1 -0
- package/dist/dashboard/ui.js.map +1 -1
- package/dist/dashboard/value-preview.d.ts +47 -0
- package/dist/dashboard/value-preview.d.ts.map +1 -0
- package/dist/dashboard/value-preview.js +138 -0
- package/dist/dashboard/value-preview.js.map +1 -0
- package/dist/dashboard.css +234 -62
- package/dist/server/snapshot-blob.d.ts +38 -0
- package/dist/server/snapshot-blob.d.ts.map +1 -0
- package/dist/server/snapshot-blob.js +75 -0
- package/dist/server/snapshot-blob.js.map +1 -0
- package/dist/server/snapshots.d.ts +32 -4
- package/dist/server/snapshots.d.ts.map +1 -1
- package/dist/server/snapshots.js +195 -55
- package/dist/server/snapshots.js.map +1 -1
- package/dist/server/value-previews.d.ts +47 -0
- package/dist/server/value-previews.d.ts.map +1 -0
- package/dist/server/value-previews.js +313 -0
- package/dist/server/value-previews.js.map +1 -0
- package/dist/shared/design-values.d.ts +71 -0
- package/dist/shared/design-values.d.ts.map +1 -0
- package/dist/shared/design-values.js +98 -0
- package/dist/shared/design-values.js.map +1 -0
- package/docs/SETUP.md +4 -2
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polishd — the Vercel Blob rules behind site snapshots (server only).
|
|
3
|
+
*
|
|
4
|
+
* Whether a store is connected, which access mode it accepts, and which
|
|
5
|
+
* recorded URLs need credentials to read back. Kept free of imports — the SDK
|
|
6
|
+
* call is handed in — so `node --test` can pin the rules down without a store
|
|
7
|
+
* or a network. `snapshots.ts` does the actual I/O.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* True when a Vercel Blob store is connected to the project, whichever way
|
|
11
|
+
* Vercel wired it. A store connected over OIDC injects `BLOB_STORE_ID`, which
|
|
12
|
+
* `@vercel/blob` pairs with the short-lived OIDC token Vercel issues to every
|
|
13
|
+
* function at runtime; the classic connection injects a static
|
|
14
|
+
* `BLOB_READ_WRITE_TOKEN`. The SDK resolves the credential itself (OIDC
|
|
15
|
+
* first), so presence of either variable is the whole signal — no
|
|
16
|
+
* Polishd-specific configuration on top. Blank values count as unset, as
|
|
17
|
+
* they do in the SDK.
|
|
18
|
+
*/
|
|
19
|
+
export function blobConfigured(env = process.env) {
|
|
20
|
+
return Boolean(env.BLOB_STORE_ID?.trim() || env.BLOB_READ_WRITE_TOKEN?.trim());
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* True for a blob in a private store —
|
|
24
|
+
* `https://<store>.private.blob.vercel-storage.com/…`. Those refuse anonymous
|
|
25
|
+
* reads, so they are read back through the SDK, which attaches the store's
|
|
26
|
+
* credential; a public store's URLs are a plain fetch.
|
|
27
|
+
*/
|
|
28
|
+
export function isPrivateBlobUrl(url) {
|
|
29
|
+
try {
|
|
30
|
+
return new URL(url).hostname.endsWith(".private.blob.vercel-storage.com");
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Upload with whichever access mode the connected store was created with.
|
|
38
|
+
* Nothing in the environment says which that is, so the first upload tries
|
|
39
|
+
* public (what every store was before private storage existed) and, when
|
|
40
|
+
* that's refused, private. The mode that worked is kept for the rest of the
|
|
41
|
+
* process. When both fail the error carries both reasons — only one of them
|
|
42
|
+
* is the real problem, and there's no telling which from here.
|
|
43
|
+
*/
|
|
44
|
+
export function createBlobUploader() {
|
|
45
|
+
let known = null;
|
|
46
|
+
return async (put) => {
|
|
47
|
+
if (known)
|
|
48
|
+
return put(known);
|
|
49
|
+
let publicError;
|
|
50
|
+
try {
|
|
51
|
+
const result = await put("public");
|
|
52
|
+
known = "public";
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
publicError = err;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const result = await put("private");
|
|
60
|
+
known = "private";
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
catch (privateError) {
|
|
64
|
+
const asPublic = messageOf(publicError);
|
|
65
|
+
const asPrivate = messageOf(privateError);
|
|
66
|
+
throw new Error(asPublic === asPrivate
|
|
67
|
+
? asPublic
|
|
68
|
+
: `${asPublic} (retried as a private upload: ${asPrivate})`);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function messageOf(err) {
|
|
73
|
+
return err instanceof Error ? err.message : "unknown error";
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=snapshot-blob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-blob.js","sourceRoot":"","sources":["../../src/server/snapshot-blob.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA0C,OAAO,CAAC,GAAG;IAErD,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,KAAK,GAAsB,IAAI,CAAC;IACpC,OAAO,KAAK,EAAK,GAAuC,EAAc,EAAE;QACtE,IAAI,KAAK;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,WAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,KAAK,GAAG,QAAQ,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,GAAG,GAAG,CAAC;QACpB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;YACpC,KAAK,GAAG,SAAS,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,GAAG,QAAQ,kCAAkC,SAAS,GAAG,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;AAC9D,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DesignPreviewTarget } from "../shared/design-values";
|
|
1
2
|
/** One captured (or deliberately skipped) screenshot within a snapshot. */
|
|
2
3
|
export interface PolishdSnapshotShot {
|
|
3
4
|
/** Route path, e.g. "/pricing". */
|
|
@@ -20,6 +21,23 @@ export interface PolishdSnapshotShot {
|
|
|
20
21
|
/** Why the cell has no image, when it doesn't. */
|
|
21
22
|
skipped?: string;
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* A cropped picture of one flagged design value in place — the element that
|
|
26
|
+
* carries a one-off type style, color, radius or off-grid padding, ringed,
|
|
27
|
+
* with the component around it. Shot during the capture, from the same
|
|
28
|
+
* rendering as the route's full shots.
|
|
29
|
+
*/
|
|
30
|
+
export interface PolishdSnapshotPreview {
|
|
31
|
+
/** The value pictured — `designValueKey` of its target. */
|
|
32
|
+
key: string;
|
|
33
|
+
route: string;
|
|
34
|
+
device: string;
|
|
35
|
+
theme: string;
|
|
36
|
+
/** Image filename inside the snapshot's `previews/` subdirectory. */
|
|
37
|
+
file: string;
|
|
38
|
+
/** Where the image uploaded, for Blob-stored previews. */
|
|
39
|
+
url?: string;
|
|
40
|
+
}
|
|
23
41
|
/** One capture run: every page of the site at one moment in time. */
|
|
24
42
|
export interface PolishdSnapshot {
|
|
25
43
|
id: string;
|
|
@@ -37,16 +55,24 @@ export interface PolishdSnapshot {
|
|
|
37
55
|
authWalled: string[];
|
|
38
56
|
/** True when the site rendered identically in light and dark. */
|
|
39
57
|
noDarkMode: boolean;
|
|
58
|
+
/** Pictures of the flagged values, where each one renders. Absent on older snapshots. */
|
|
59
|
+
previews?: PolishdSnapshotPreview[];
|
|
60
|
+
/**
|
|
61
|
+
* Values this capture looked for on their pages and never found on screen
|
|
62
|
+
* — rendered only after an interaction, or only at a width it didn't shoot.
|
|
63
|
+
*/
|
|
64
|
+
previewMisses?: string[];
|
|
40
65
|
}
|
|
41
66
|
/** Cap on routes shot per run, to bound how long the capture action holds. */
|
|
42
67
|
export declare const MAX_SNAPSHOT_ROUTES = 12;
|
|
43
68
|
/** Every recorded snapshot, newest first. Read-only; `[]` when none/no store. */
|
|
44
69
|
export declare function listSnapshots(): Promise<PolishdSnapshot[]>;
|
|
45
70
|
/**
|
|
46
|
-
* Read one shot's image as a data URL, or null
|
|
47
|
-
* filename is only accepted when the index lists it
|
|
48
|
-
* caller can never read outside a snapshot directory —
|
|
49
|
-
* are only ever fetched from the URL the index recorded
|
|
71
|
+
* Read one shot's — or one value preview's — image as a data URL, or null
|
|
72
|
+
* when it doesn't exist. The filename is only accepted when the index lists it
|
|
73
|
+
* for that snapshot, so a caller can never read outside a snapshot directory —
|
|
74
|
+
* and Blob-stored images are only ever fetched from the URL the index recorded
|
|
75
|
+
* at capture time.
|
|
50
76
|
*/
|
|
51
77
|
export declare function readSnapshotImage(snapshotId: string, file: string): Promise<string | null>;
|
|
52
78
|
export interface BeginSnapshotInput {
|
|
@@ -56,6 +82,8 @@ export interface BeginSnapshotInput {
|
|
|
56
82
|
routes: string[];
|
|
57
83
|
/** Design-metrics fingerprint at capture time, for later pairing. */
|
|
58
84
|
fingerprint: string | null;
|
|
85
|
+
/** Flagged values to picture in place, each on the pages it was measured on. */
|
|
86
|
+
targets?: DesignPreviewTarget[];
|
|
59
87
|
}
|
|
60
88
|
export type BeginSnapshotResult = {
|
|
61
89
|
ok: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"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"}
|
package/dist/server/snapshots.js
CHANGED
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
* `next dev` they sit on disk under `.polishd/snapshots/<id>/`. On Vercel —
|
|
13
13
|
* where the filesystem is read-only and gone by the next invocation — they
|
|
14
14
|
* upload to Vercel Blob instead, switched on by nothing more than the
|
|
15
|
-
*
|
|
15
|
+
* variable a connected Blob store injects: `BLOB_STORE_ID` for a store
|
|
16
|
+
* connected over OIDC, `BLOB_READ_WRITE_TOKEN` for the classic connection.
|
|
17
|
+
* Public and private stores both work. The browser follows
|
|
16
18
|
* the same split: the user's own Chrome or Playwright's Chromium locally,
|
|
17
19
|
* the `@sparticuz/chromium` build (a Chromium compiled to run inside
|
|
18
20
|
* Lambda-shaped Linux containers) as the serverless fallback. Both arrive as
|
|
@@ -20,6 +22,13 @@
|
|
|
20
22
|
* failure degrades to a message, never a crash — the same contract as the
|
|
21
23
|
* rest of the server layer.
|
|
22
24
|
*
|
|
25
|
+
* Alongside the full shots, each route call also pictures the Design tab's
|
|
26
|
+
* flagged values in place — a ringed crop of the element carrying a one-off
|
|
27
|
+
* type style, color, radius or off-grid padding (server/value-previews.ts) —
|
|
28
|
+
* stored beside the shots under the same disk-or-Blob rule, and listed in the
|
|
29
|
+
* snapshot as `previews` so hovering the value on the dashboard shows where
|
|
30
|
+
* it renders.
|
|
31
|
+
*
|
|
23
32
|
* Capture is chunked into one server call per route: begin → one
|
|
24
33
|
* `captureSnapshotRoute` per route → finish, with the in-flight state parked
|
|
25
34
|
* in the store between calls. A whole-site capture in a single request would
|
|
@@ -29,9 +38,11 @@
|
|
|
29
38
|
* result at all. One route per request keeps every call short enough to fit.
|
|
30
39
|
*/
|
|
31
40
|
import { isAbsolute, join } from "node:path";
|
|
32
|
-
import { copyFile, mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
|
|
41
|
+
import { copyFile, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
33
42
|
import { tmpdir } from "node:os";
|
|
43
|
+
import { blobConfigured, createBlobUploader, isPrivateBlobUrl } from "./snapshot-blob";
|
|
34
44
|
import { getMeta, setMeta, storeReady } from "./store";
|
|
45
|
+
import { captureValuePreviews } from "./value-previews";
|
|
35
46
|
const INDEX_KEY = "design_snapshots";
|
|
36
47
|
/** Snapshots kept before the oldest is pruned (files and index entry both). */
|
|
37
48
|
const MAX_SNAPSHOTS = 6;
|
|
@@ -41,14 +52,24 @@ export const MAX_SNAPSHOT_ROUTES = 12;
|
|
|
41
52
|
const SNAPSHOT_DEVICES = ["phone", "desktop"];
|
|
42
53
|
const SNAPSHOT_THEMES = ["light", "dark"];
|
|
43
54
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* connected to the project, so presence of the variable is the whole signal —
|
|
47
|
-
* no Polishd-specific configuration on top.
|
|
55
|
+
* Where a flagged value is looked for, in order: the gallery's default view
|
|
56
|
+
* first, so most pictures match the shot the user is already looking at.
|
|
48
57
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
58
|
+
const PREVIEW_RENDERINGS = [
|
|
59
|
+
{ device: "desktop", theme: "light" },
|
|
60
|
+
{ device: "desktop", theme: "dark" },
|
|
61
|
+
{ device: "phone", theme: "light" },
|
|
62
|
+
{ device: "phone", theme: "dark" },
|
|
63
|
+
];
|
|
64
|
+
/** Values pictured per route, and the time the pass may add to its call. */
|
|
65
|
+
const MAX_PREVIEWS_PER_ROUTE = 16;
|
|
66
|
+
const PREVIEW_BUDGET_MS = 15_000;
|
|
67
|
+
/**
|
|
68
|
+
* Every Blob upload — shots and value previews alike — goes through this, so
|
|
69
|
+
* the store's access mode is worked out once per process rather than once per
|
|
70
|
+
* image. See `createBlobUploader`.
|
|
71
|
+
*/
|
|
72
|
+
const uploadToBlob = createBlobUploader();
|
|
52
73
|
/** Where disk-stored snapshot directories live. Sits next to the dev SQLite file. */
|
|
53
74
|
function snapshotsRoot() {
|
|
54
75
|
const configured = process.env.POLISHD_SNAPSHOT_DIR;
|
|
@@ -76,42 +97,63 @@ export async function listSnapshots() {
|
|
|
76
97
|
return (await loadIndex()).snapshots;
|
|
77
98
|
}
|
|
78
99
|
/**
|
|
79
|
-
* Read one shot's image as a data URL, or null
|
|
80
|
-
* filename is only accepted when the index lists it
|
|
81
|
-
* caller can never read outside a snapshot directory —
|
|
82
|
-
* are only ever fetched from the URL the index recorded
|
|
100
|
+
* Read one shot's — or one value preview's — image as a data URL, or null
|
|
101
|
+
* when it doesn't exist. The filename is only accepted when the index lists it
|
|
102
|
+
* for that snapshot, so a caller can never read outside a snapshot directory —
|
|
103
|
+
* and Blob-stored images are only ever fetched from the URL the index recorded
|
|
104
|
+
* at capture time.
|
|
83
105
|
*/
|
|
84
106
|
export async function readSnapshotImage(snapshotId, file) {
|
|
85
107
|
const index = await loadIndex();
|
|
86
108
|
const snapshot = index.snapshots.find((s) => s.id === snapshotId);
|
|
87
|
-
|
|
88
|
-
|
|
109
|
+
if (!snapshot || file.length === 0)
|
|
110
|
+
return null;
|
|
111
|
+
const shot = snapshot.shots.find((s) => s.file === file);
|
|
112
|
+
const preview = shot ? undefined : snapshot.previews?.find((p) => p.file === file);
|
|
113
|
+
const image = shot ?? preview;
|
|
114
|
+
if (!image)
|
|
89
115
|
return null;
|
|
90
116
|
try {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return `data:image/png;base64,${bytes.toString("base64")}`;
|
|
97
|
-
}
|
|
98
|
-
const bytes = await readFile(join(snapshotsRoot(), snapshot.id, "shots", shot.file));
|
|
99
|
-
return `data:image/png;base64,${bytes.toString("base64")}`;
|
|
117
|
+
const dir = shot ? "shots" : "previews";
|
|
118
|
+
const bytes = image.url
|
|
119
|
+
? await readBlobImage(image.url)
|
|
120
|
+
: await readFile(join(snapshotsRoot(), snapshot.id, dir, image.file));
|
|
121
|
+
return bytes ? `data:image/png;base64,${bytes.toString("base64")}` : null;
|
|
100
122
|
}
|
|
101
123
|
catch {
|
|
102
124
|
return null; // Directory pruned or deleted by hand — the tile shows a blank.
|
|
103
125
|
}
|
|
104
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* A Blob-stored image's bytes, or null when it's gone. A public store's URL is
|
|
129
|
+
* a plain fetch. A private store's refuses anonymous reads, so it goes through
|
|
130
|
+
* the SDK's `get`, which attaches the deployment's credential (OIDC or token,
|
|
131
|
+
* whichever it has) and only ever sends it to a Vercel Blob host.
|
|
132
|
+
*/
|
|
133
|
+
async function readBlobImage(url) {
|
|
134
|
+
if (isPrivateBlobUrl(url)) {
|
|
135
|
+
const { get } = await import("@vercel/blob");
|
|
136
|
+
const result = await get(url, { access: "private" });
|
|
137
|
+
if (result?.statusCode !== 200)
|
|
138
|
+
return null;
|
|
139
|
+
return Buffer.from(await new Response(result.stream).arrayBuffer());
|
|
140
|
+
}
|
|
141
|
+
const res = await fetch(url);
|
|
142
|
+
if (!res.ok)
|
|
143
|
+
return null;
|
|
144
|
+
return Buffer.from(await res.arrayBuffer());
|
|
145
|
+
}
|
|
105
146
|
// ── Storage ──────────────────────────────────────────────────────────────────
|
|
106
147
|
/**
|
|
107
|
-
* Move one route's staged PNGs to their real home — Vercel Blob when a
|
|
108
|
-
* is
|
|
148
|
+
* Move one route's staged PNGs to their real home — Vercel Blob when a store
|
|
149
|
+
* is connected, the snapshots directory otherwise — under a per-route filename
|
|
109
150
|
* prefix: allpages slugs are only unique within a single run, and each route
|
|
110
|
-
* is its own run now. Blob pathnames get a random suffix on top
|
|
111
|
-
*
|
|
112
|
-
* dashboard
|
|
113
|
-
* handing these URLs to the browser. On a failed upload
|
|
114
|
-
* uploaded are deleted, so a half-stored route never
|
|
151
|
+
* is its own run now. Blob pathnames get a random suffix on top, so a public
|
|
152
|
+
* store's URLs are unguessable; a private store's refuse anonymous reads
|
|
153
|
+
* outright. Either way the dashboard serves images through the auth-gated
|
|
154
|
+
* action rather than handing these URLs to the browser. On a failed upload
|
|
155
|
+
* the pieces already uploaded are deleted, so a half-stored route never
|
|
156
|
+
* survives.
|
|
115
157
|
*/
|
|
116
158
|
async function storeRouteShots(id, routeIndex, stageDir, captured) {
|
|
117
159
|
const prefix = `r${routeIndex}-`;
|
|
@@ -137,17 +179,9 @@ async function storeRouteShots(id, routeIndex, stageDir, captured) {
|
|
|
137
179
|
}
|
|
138
180
|
return { shots };
|
|
139
181
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
return {
|
|
146
|
-
message: "Blob storage is configured (BLOB_READ_WRITE_TOKEN is set) but @vercel/blob " +
|
|
147
|
-
"isn't installed. It ships as an optional dependency of @polishd/next — " +
|
|
148
|
-
"reinstall without `--omit=optional`.",
|
|
149
|
-
};
|
|
150
|
-
}
|
|
182
|
+
const blob = await loadBlobSdk();
|
|
183
|
+
if ("message" in blob)
|
|
184
|
+
return blob;
|
|
151
185
|
const uploaded = [];
|
|
152
186
|
try {
|
|
153
187
|
for (const s of captured) {
|
|
@@ -156,11 +190,13 @@ async function storeRouteShots(id, routeIndex, stageDir, captured) {
|
|
|
156
190
|
continue;
|
|
157
191
|
}
|
|
158
192
|
const bytes = await readFile(join(stageDir, "shots", s.file));
|
|
159
|
-
|
|
160
|
-
|
|
193
|
+
// No `token` option: the SDK picks the credential itself — the OIDC
|
|
194
|
+
// token with BLOB_STORE_ID first, BLOB_READ_WRITE_TOKEN otherwise.
|
|
195
|
+
const { url } = await uploadToBlob((access) => blob.put(`polishd/snapshots/${id}/${prefix}${s.file}`, bytes, {
|
|
196
|
+
access,
|
|
161
197
|
contentType: "image/png",
|
|
162
198
|
addRandomSuffix: true,
|
|
163
|
-
});
|
|
199
|
+
}));
|
|
164
200
|
uploaded.push(url);
|
|
165
201
|
shots.push(toShot(s, prefix + s.file, url));
|
|
166
202
|
}
|
|
@@ -174,6 +210,69 @@ async function storeRouteShots(id, routeIndex, stageDir, captured) {
|
|
|
174
210
|
};
|
|
175
211
|
}
|
|
176
212
|
}
|
|
213
|
+
/** The Blob SDK, or why it couldn't load. */
|
|
214
|
+
async function loadBlobSdk() {
|
|
215
|
+
try {
|
|
216
|
+
return await import("@vercel/blob");
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return {
|
|
220
|
+
message: "Blob storage is configured (BLOB_STORE_ID or BLOB_READ_WRITE_TOKEN is set) " +
|
|
221
|
+
"but @vercel/blob isn't installed. It ships as an optional dependency of " +
|
|
222
|
+
"@polishd/next — reinstall without `--omit=optional`.",
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Store one route's value previews next to its shots — the snapshot's
|
|
228
|
+
* `previews/` directory, or Blob under the same rules as the shots. Names are
|
|
229
|
+
* `v-r<route>-<n>-<device>-<theme>.png`, unique within the snapshot and never
|
|
230
|
+
* mistakable for a shot's. All or nothing, like the shots: a failed upload
|
|
231
|
+
* deletes the pieces already sent.
|
|
232
|
+
*/
|
|
233
|
+
async function storeRoutePreviews(id, routeIndex, route, crops) {
|
|
234
|
+
const named = crops.map((c, n) => ({
|
|
235
|
+
...c,
|
|
236
|
+
file: `v-r${routeIndex}-${n}-${c.device}-${c.theme}.png`,
|
|
237
|
+
}));
|
|
238
|
+
const toPreview = (c, url) => ({
|
|
239
|
+
key: c.key,
|
|
240
|
+
route,
|
|
241
|
+
device: c.device,
|
|
242
|
+
theme: c.theme,
|
|
243
|
+
file: c.file,
|
|
244
|
+
...(url ? { url } : {}),
|
|
245
|
+
});
|
|
246
|
+
if (!blobConfigured()) {
|
|
247
|
+
const dir = join(snapshotsRoot(), id, "previews");
|
|
248
|
+
await mkdir(dir, { recursive: true });
|
|
249
|
+
for (const c of named)
|
|
250
|
+
await writeFile(join(dir, c.file), c.bytes);
|
|
251
|
+
return named.map((c) => toPreview(c));
|
|
252
|
+
}
|
|
253
|
+
const blob = await loadBlobSdk();
|
|
254
|
+
if ("message" in blob)
|
|
255
|
+
return [];
|
|
256
|
+
const uploaded = [];
|
|
257
|
+
try {
|
|
258
|
+
const previews = [];
|
|
259
|
+
for (const c of named) {
|
|
260
|
+
const { url } = await uploadToBlob((access) => blob.put(`polishd/snapshots/${id}/previews/${c.file}`, c.bytes, {
|
|
261
|
+
access,
|
|
262
|
+
contentType: "image/png",
|
|
263
|
+
addRandomSuffix: true,
|
|
264
|
+
}));
|
|
265
|
+
uploaded.push(url);
|
|
266
|
+
previews.push(toPreview(c, url));
|
|
267
|
+
}
|
|
268
|
+
return previews;
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
if (uploaded.length > 0)
|
|
272
|
+
await blob.del(uploaded).catch(() => { });
|
|
273
|
+
return [];
|
|
274
|
+
}
|
|
275
|
+
}
|
|
177
276
|
/**
|
|
178
277
|
* Best-effort removal of a snapshot's images, wherever they were stored.
|
|
179
278
|
* Blob-stored shots carry their URLs in the index; disk-stored ones sit in a
|
|
@@ -181,7 +280,7 @@ async function storeRouteShots(id, routeIndex, stageDir, captured) {
|
|
|
181
280
|
* blob costs cents, a prune that crashed the capture would cost the feature.
|
|
182
281
|
*/
|
|
183
282
|
async function deleteSnapshotImages(snapshot) {
|
|
184
|
-
const urls = snapshot.shots.flatMap((s) =>
|
|
283
|
+
const urls = [...snapshot.shots, ...(snapshot.previews ?? [])].flatMap((s) => s.url ? [s.url] : []);
|
|
185
284
|
if (urls.length > 0) {
|
|
186
285
|
try {
|
|
187
286
|
const { del } = await import("@vercel/blob");
|
|
@@ -200,8 +299,13 @@ async function loadPending() {
|
|
|
200
299
|
return null;
|
|
201
300
|
try {
|
|
202
301
|
const parsed = JSON.parse(raw);
|
|
203
|
-
if (parsed?.v === 1 && typeof parsed.id === "string")
|
|
302
|
+
if (parsed?.v === 1 && typeof parsed.id === "string") {
|
|
303
|
+
// Records parked by a version without value previews.
|
|
304
|
+
parsed.targets ??= [];
|
|
305
|
+
parsed.previews ??= [];
|
|
306
|
+
parsed.previewMisses ??= [];
|
|
204
307
|
return parsed;
|
|
308
|
+
}
|
|
205
309
|
}
|
|
206
310
|
catch {
|
|
207
311
|
// A corrupt pending record is simply abandoned.
|
|
@@ -252,6 +356,9 @@ export async function beginSnapshot(input) {
|
|
|
252
356
|
shots: [],
|
|
253
357
|
authWalled: [],
|
|
254
358
|
noDarkMode: true,
|
|
359
|
+
targets: input.targets ?? [],
|
|
360
|
+
previews: [],
|
|
361
|
+
previewMisses: [],
|
|
255
362
|
};
|
|
256
363
|
if (!(await savePending(pending))) {
|
|
257
364
|
return { ok: false, message: "The store refused to record the capture in progress." };
|
|
@@ -321,8 +428,11 @@ export async function captureSnapshotRoute(id, route) {
|
|
|
321
428
|
const stored = await storeRouteShots(id, pending.routes.indexOf(route), stageDir, result.shots);
|
|
322
429
|
if ("message" in stored)
|
|
323
430
|
return { ok: false, message: stored.message };
|
|
431
|
+
const pictured = await pictureRouteValues(launched.browser, pending, route, stored.shots);
|
|
324
432
|
pending.done.push(route);
|
|
325
433
|
pending.shots.push(...stored.shots);
|
|
434
|
+
pending.previews.push(...pictured.previews);
|
|
435
|
+
pending.previewMisses.push(...pictured.missed);
|
|
326
436
|
for (const walled of result.authWalled) {
|
|
327
437
|
if (!pending.authWalled.includes(walled))
|
|
328
438
|
pending.authWalled.push(walled);
|
|
@@ -332,7 +442,7 @@ export async function captureSnapshotRoute(id, route) {
|
|
|
332
442
|
pending.noDarkMode = pending.noDarkMode && result.noDarkMode;
|
|
333
443
|
}
|
|
334
444
|
if (!(await savePending(pending))) {
|
|
335
|
-
await deleteSnapshotImages({ id, shots: stored.shots });
|
|
445
|
+
await deleteSnapshotImages({ id, shots: stored.shots, previews: pictured.previews });
|
|
336
446
|
return { ok: false, message: "The route was shot but the store refused to record it." };
|
|
337
447
|
}
|
|
338
448
|
return { ok: true, shots: stored.shots };
|
|
@@ -348,6 +458,32 @@ export async function captureSnapshotRoute(id, route) {
|
|
|
348
458
|
await rm(stageDir, { recursive: true, force: true }).catch(() => { });
|
|
349
459
|
}
|
|
350
460
|
}
|
|
461
|
+
/**
|
|
462
|
+
* Picture the capture's flagged values that were measured on `route` and
|
|
463
|
+
* aren't pictured yet, in the renderings this route actually produced shots
|
|
464
|
+
* for (an auth-walled or failed route has none, so it's skipped). Never fails
|
|
465
|
+
* the route: any error leaves the route with its full shots and no previews.
|
|
466
|
+
*/
|
|
467
|
+
async function pictureRouteValues(browser, pending, route, shots) {
|
|
468
|
+
const none = { previews: [], missed: [] };
|
|
469
|
+
const pictured = new Set(pending.previews.map((p) => p.key));
|
|
470
|
+
const targets = pending.targets
|
|
471
|
+
.filter((t) => t.pages.includes(route) && !pictured.has(t.key))
|
|
472
|
+
.slice(0, MAX_PREVIEWS_PER_ROUTE);
|
|
473
|
+
const renderings = PREVIEW_RENDERINGS.filter((r) => shots.some((s) => s.file && s.device === r.device && s.theme === r.theme));
|
|
474
|
+
if (targets.length === 0 || renderings.length === 0)
|
|
475
|
+
return none;
|
|
476
|
+
try {
|
|
477
|
+
const result = await captureValuePreviews(browser, pending.origin, route, targets, renderings, PREVIEW_BUDGET_MS);
|
|
478
|
+
const previews = result.crops.length > 0
|
|
479
|
+
? await storeRoutePreviews(pending.id, pending.routes.indexOf(route), route, result.crops)
|
|
480
|
+
: [];
|
|
481
|
+
return { previews, missed: result.missed };
|
|
482
|
+
}
|
|
483
|
+
catch {
|
|
484
|
+
return none;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
351
487
|
/**
|
|
352
488
|
* Close out the capture: record the accumulated shots in the snapshot index
|
|
353
489
|
* and prune old snapshots past `MAX_SNAPSHOTS`, images included. Called once
|
|
@@ -370,6 +506,9 @@ export async function finishSnapshot(id) {
|
|
|
370
506
|
shots: pending.shots,
|
|
371
507
|
authWalled: pending.authWalled,
|
|
372
508
|
noDarkMode: pending.noDarkMode,
|
|
509
|
+
previews: pending.previews,
|
|
510
|
+
// A value missed on one of its pages may have been pictured on another.
|
|
511
|
+
previewMisses: [...new Set(pending.previewMisses)].filter((key) => !pending.previews.some((p) => p.key === key)),
|
|
373
512
|
};
|
|
374
513
|
if (snapshot.shots.every((s) => !s.file)) {
|
|
375
514
|
await deleteSnapshotImages(snapshot);
|
|
@@ -477,24 +616,25 @@ async function launchBrowser() {
|
|
|
477
616
|
*/
|
|
478
617
|
export async function snapshotCaptureIssue() {
|
|
479
618
|
// On Vercel the filesystem is read-only and reset between invocations, so
|
|
480
|
-
// disk storage — the fallback when no Blob
|
|
619
|
+
// disk storage — the fallback when no Blob store is connected — cannot work.
|
|
481
620
|
// Without a connected store every capture is doomed before it starts.
|
|
482
621
|
if (process.env.VERCEL && !blobConfigured()) {
|
|
483
622
|
return ("Snapshot images have nowhere to live on this deployment: the filesystem " +
|
|
484
623
|
"is read-only and no Blob store is connected. Connect a Vercel Blob store " +
|
|
485
624
|
"to the project (Storage → Blob in the Vercel dashboard) — the " +
|
|
486
|
-
"BLOB_READ_WRITE_TOKEN it injects switches snapshot
|
|
487
|
-
"automatically — then redeploy.");
|
|
625
|
+
"BLOB_STORE_ID or BLOB_READ_WRITE_TOKEN it injects switches snapshot " +
|
|
626
|
+
"storage over automatically — then redeploy.");
|
|
488
627
|
}
|
|
489
628
|
if (blobConfigured()) {
|
|
490
629
|
try {
|
|
491
630
|
await import("@vercel/blob");
|
|
492
631
|
}
|
|
493
632
|
catch {
|
|
494
|
-
return ("Snapshot images would upload to Vercel Blob (
|
|
495
|
-
"but @vercel/blob isn't installed. It
|
|
496
|
-
"@polishd/next, so this install was
|
|
497
|
-
"
|
|
633
|
+
return ("Snapshot images would upload to Vercel Blob (BLOB_STORE_ID or " +
|
|
634
|
+
"BLOB_READ_WRITE_TOKEN is set), but @vercel/blob isn't installed. It " +
|
|
635
|
+
"ships as an optional dependency of @polishd/next, so this install was " +
|
|
636
|
+
"likely run with `--omit=optional` — reinstall with optional " +
|
|
637
|
+
"dependencies included, then redeploy.");
|
|
498
638
|
}
|
|
499
639
|
}
|
|
500
640
|
// On Vercel there is never a system Chrome and never a Playwright download,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"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"}
|