renderdiff 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,8 +4,9 @@
4
4
 
5
5
  ![renderdiff output for a page missing a nav link, next to the crop it wrote](https://raw.githubusercontent.com/tmashara/renderdiff/main/docs/img/hero.png)
6
6
 
7
- renderdiff screenshots the same routes on two running copies of a site (your branch on
8
- localhost, and production) at five viewport widths and pixel-diffs each pair. For every
7
+ renderdiff screenshots the same routes on two running copies of a site (your change, and a
8
+ reference: a local build of the base commit, or production) at five viewport widths and
9
+ pixel-diffs each pair. For every
9
10
  change it tells you where on the page it is, which DOM element and CSS property is behind
10
11
  it, and what text differs. It also writes small crops sized for an LLM's context. It refuses
11
12
  to score what it can't trust: blank pages, error pages, pages still moving. A clean result
@@ -58,11 +59,13 @@ only the reference has (`band -24`) are missing at y=196. With those rows cut ou
58
59
  matches exactly (`aligned 100.00%`). The missing rows are the "Pricing" nav link, which
59
60
  exists only on the reference (`-`). Open `renderdiff-out/about.1440.c1.png` to see it.
60
61
 
61
- **Without `--threshold`, a diff still exits 0**, so read the summary.
62
+ **Any difference exits 1.** `--threshold <0..1>` relaxes that to scores below it
63
+ (`--threshold 0` never fails on a difference). Read the summary either way.
62
64
 
63
65
  ### For coding agents
64
66
 
65
- Install the skill so the agent runs the loop and reports a verdict, not a bare score:
67
+ Install the skill so the agent runs the loop (base build vs change build, a baseline before
68
+ the change, pixels plus `--computed` for CSS-only work) and reports a verdict, not a bare score:
66
69
 
67
70
  ```
68
71
  /plugin marketplace add tmashara/renderdiff # Claude Code
@@ -96,17 +99,21 @@ renderdiff <left-origin> <right-origin> <route…> [options]
96
99
  | `--left <url>` | Left origin, instead of the first positional one. Giving both is an error. |
97
100
  | `--right <url>` | Right origin, instead of the second positional one. |
98
101
  | `--width <n>` | Viewport width; repeatable. Replaces the defaults. |
99
- | `--threshold <0..1>` | Exit non-zero if any comparison scores below this. |
102
+ | `--threshold <0..1>` | Exit 1 only if a comparison scores below this, instead of on any difference. `0` never fails on one. |
100
103
  | `--out <dir>` | Output directory, wiped at the start of a run. Default `./renderdiff-out`. A directory holding files renderdiff didn't write is refused. |
101
104
  | `--concurrency <n>` | Parallel workers. Default half the CPU cores, between 2 and 8. Lower it when one side is someone's live site. |
102
105
  | `--config <path>` | Config file. Default: `renderdiff.config.{ts,mts,js,mjs}` in cwd. |
103
106
  | `--selector <sel>` | Compare the one element this Playwright selector matches, on both sides, instead of the whole page. Applies to every route, over the config's per-route `selector`. |
104
107
  | `--left-selector <sel>`, `--right-selector <sel>` | That side's selector, over `--selector`. One without the other side (or `--selector`) is an error. |
108
+ | `--mask <sel>` | Paint this Playwright selector over on both sides, on every route; repeatable. Added to the config's masks and listed in the report as coverage given up. |
109
+ | `--mask-media` | Mask every `iframe` on every route, as config `maskMedia: true` does. Video isn't masked: it is frozen by default, so the player's box is still compared. |
110
+ | `--no-freeze-video` | Leave videos playing and video.js overlays visible, as config `freezeVideo: false` does. By default every video shows its poster ([how it works](https://github.com/tmashara/renderdiff/blob/main/docs/how-it-works.md)); unfrozen, expect unstable pixels or `did not settle`. `--mask-media` doesn't mask them either. |
105
111
  | `--storage-state <file>` | Start both sides with this Playwright storage state (cookies, localStorage), e.g. signed in. Relative to cwd. Over the config's `storageState`. |
106
112
  | `--left-storage-state <file>`, `--right-storage-state <file>` | That side's storage state, over `--storage-state`. One side alone is fine. |
107
113
  | `--accept <reason>` | Record this run's differences as accepted, with a reason. See **Accepted differences and reruns**. |
108
114
  | `--rerun-failed` | Rerun only what the last run in `--out` didn't find clean or accepted, keeping the rest. |
109
115
  | `--cache-right` | Replay the right side's network traffic from the last `--cache-right` run in `--out`, when it's under an hour old and covers every shot; otherwise load it live and record it. Keeps `<out>/.cache/` when the out dir is wiped. See **Accepted differences and reruns**. |
116
+ | `--computed` | Also diff the computed style of every rendered element and its `::before`/`::after`, and say per route whether the markup is identical apart from asset hashes. Pixels still decide the score and exit code. See [docs/output.md](docs/output.md#computed-styles---computed). |
110
117
  | `--dry-run` | Print the URL pairs and exit. No browser. |
111
118
  | `--open` | Open the report when the run finishes. |
112
119
  | `--progress` | A line per shot as it finishes, then the worst scores. The default on a terminal; piped, renderdiff prints one compact summary at the end. |
@@ -121,9 +128,9 @@ range rather than on a boundary, so a layout switch never flaps between runs.
121
128
 
122
129
  | Exit | Meaning |
123
130
  | --- | --- |
124
- | `0` | No route errored and none scored below `--threshold`. Without one, a diff still exits 0. |
125
- | `1` | A route scored below `--threshold`. Wins over `3` when both happen. |
126
- | `2` | Bad arguments, bad config, or an origin that isn't responding. |
131
+ | `0` | No route errored and no shot differs (with `--threshold`: none scored below it). Accepted differences don't count; nor do unstable pixels or a failed asset alone, which still get their own row. |
132
+ | `1` | A shot differs, or with `--threshold` scored below it. Wins over `3` when both happen. A difference that can't be accepted (unstable pixels beside it, a width change, a height change whose rows don't align) exits 1 even on the `--accept` run. |
133
+ | `2` | Bad arguments or config, an origin that isn't responding, an unreadable storage state or `renderdiff.accepted.json`, an out dir holding files renderdiff didn't write, or a `--rerun-failed` that doesn't repeat the last run. |
127
134
  | `3` | A route errored, so it went unmeasured, or the run crashed (e.g. no Chromium). |
128
135
 
129
136
  ### Moved pages, components, interactions, sign-in
@@ -149,7 +156,7 @@ screenshots and text) out of git too. Details: [docs/scoping.md](https://github.
149
156
  ## Config file
150
157
 
151
158
  Flags cover a one-off run. A `renderdiff.config.{ts,mts,js,mjs}` in the working directory
152
- covers a repo you diff repeatedly, and expresses what flags can't: **masks** for content
159
+ covers a repo you diff repeatedly, and expresses what flags can't: **per-route masks** for content
153
160
  that legitimately drifts, extra selectors to hide, extra URLs to block, `before` hooks.
154
161
 
155
162
  ```ts
@@ -173,37 +180,21 @@ only.
173
180
  ## Reading the output
174
181
 
175
182
  **Signs always point at your change:** `+` = only in or more in the left (your change);
176
- `-` = only in or more in the right (the reference).
183
+ `-` = only in or more in the right (the reference). A row reads: score, `h`/`w` height and
184
+ width delta, `band`s (rows only one side has), `aligned` (the score without them), `line`s
185
+ (a 1–2px border or divider), `N reg` (regions), `unstable` pixels, `text` lines. Under it,
186
+ `failed` assets, the `dom` elements and properties behind the changes, and the `crops`.
177
187
 
178
- | Token | Meaning |
179
- | --- | --- |
180
- | `97.41%` | Share of measured pixels that match. A range (`99.12%–99.87%`) when one row covers several widths. A triage signal, not a verdict. |
181
- | `@1440,1152` | The widths a row covers. They agree on height and width delta, bands, aligned score and text; score and region count are ranges. |
182
- | `h-24` / `w+8` | Height / width delta, left − right. The smaller image is padded with magenta, and the padding counts against the score on purpose. |
183
- | `band -24@y196` | 24 rows only the reference has, at y=196 (`+`: only your change has them). `@y~196`: the row's widths put it at different y; the first width's is shown. |
184
- | `aligned 100.00%` | The score with the bands cut out. 100% means the band is the whole difference. |
185
- | `unaligned` | Heights differ but too few rows match to find bands. Use the height delta and regions. |
186
- | `3 reg` | Regions: connected patches of differing pixels. A missing link barely moves the score, but it is still a region. |
187
- | `unstable 1,204px` | Pixels that kept changing between shots of the same load (a ticker, a carousel). Excluded from the score, so the route is never clean. |
188
- | `failed left: font Inter 700` | A stylesheet or font face that side failed to load (blocked URLs aside). Fix that first: a fallback font changes every line of text. |
189
- | `text -"Pricing"` | A line of visible text only the reference has (`+`: only your change). Up to three, then `(+N more)`. |
190
- | `dom sel prop a→b` | Element on both sides whose computed `prop` differs, left value first. |
191
- | `dom +sel` / `-sel` | Element only on the left / only on the right. |
192
- | `dom sel x+8` | It moved without its own style changing; the neighbour or parent listed after it is the cause. |
193
- | `dom sel` | On both sides and unchanged in style or position, so its own pixels changed (an image or canvas). |
194
- | `crops …` | Up to 3 PNGs per comparison, bands first, relative to `results.json`. Left is on top or on the left, and the change is boxed in red. |
195
- | `ERROR …` | Unmeasured, which is neither a pass nor a fail. Exits 3. |
196
- | `accepted:` / `stale accepted:` | Shots whose every difference was accepted, and accepted entries the run no longer saw. See below. |
197
- | `rerun:` | With `--rerun-failed`: how many shots were rerun and how many reused. |
198
- | `right:` | With `--cache-right`: whether the right side was replayed, and from when, or loaded live and recorded. |
199
-
200
- Read text first, then `dom`, then the crops for anything `dom` doesn't explain. Full
201
- detail, including the `--progress` and report forms: [docs/output.md](https://github.com/tmashara/renderdiff/blob/main/docs/output.md).
188
+ Read text first, then `dom`, then the crops for anything `dom` doesn't explain. Every token,
189
+ the `--computed` block, the `--progress` and report forms and `results.json`:
190
+ [docs/output.md](https://github.com/tmashara/renderdiff/blob/main/docs/output.md).
202
191
 
203
192
  ## Accepted differences and reruns
204
193
 
205
- A migration starts with differences that already exist between the untouched local build
206
- and production. Record them once, then change code and re-check only what's red:
194
+ Run once before changing code. Against a local build of the base that is base vs base, so
195
+ whatever differs varies per load: mask it. Against production, the untouched build already
196
+ differs (deploy drift, one-sided embeds); look, record it once, then change code and re-check
197
+ only what's red:
207
198
 
208
199
  ```
209
200
  renderdiff http://localhost:3000 https://example.com / /about --accept "differs before the migration"
@@ -213,19 +204,13 @@ renderdiff http://localhost:3000 https://example.com / /about --rerun-failed
213
204
 
214
205
  `--accept "<reason>"` writes every difference the run saw to `renderdiff.accepted.json` (next
215
206
  to the config, or in cwd); commit it. Later, a shot whose every difference matches an entry is
216
- listed on an `accepted:` line and counts neither as differing nor toward `--threshold`;
217
- anything new on the same page still shows. `--rerun-failed` reruns only what the last run in
218
- `--out` didn't find clean or accepted and merges it back; it exits 2 if the run differs from
219
- the previous one. Matching rules, what can still hide, and stale entries:
207
+ listed on an `accepted:` line and doesn't count toward the exit code; anything new on the same
208
+ page still shows. `--rerun-failed` reruns only what the last run in `--out` didn't find clean
209
+ or accepted. Against a slow reference, `--cache-right` replays the right side's recorded
210
+ traffic for up to an hour; drop it for the final run. Matching rules, why to accept on the
211
+ platform that checks, and the cache:
220
212
  [docs/accepted.md](https://github.com/tmashara/renderdiff/blob/main/docs/accepted.md).
221
213
 
222
- Against a slow reference, add `--cache-right` while iterating: it records the right side's
223
- network traffic in `<out>/.cache/` and replays it for up to an hour. The page still renders
224
- and is shot fresh, so only the round trips are skipped. A replay can't see a deploy, so the run
225
- says `right: replayed from …`; drop the flag for the final run. With `--rerun-failed`, a new
226
- recording covers only the rerun shots. It holds a signed-in session's responses: keep the out
227
- dir out of git.
228
-
229
214
  ## Output
230
215
 
231
216
  Everything lands in the out dir (`./renderdiff-out` by default):
@@ -237,70 +222,15 @@ Everything lands in the out dir (`./renderdiff-out` by default):
237
222
  - `{slug}.{width}.c{n}.png`: up to three crops per comparison, left on top or on the left,
238
223
  change boxed in red.
239
224
  - `results.json`: everything above as data, written on every run, errors included, one
240
- result per line, scores rounded down to four decimals (so a shot that differs never
241
- reads as `1`). Its types (`Results` and friends) are exported from the package.
242
-
243
- ```jsonc
244
- {
245
- "meta": {
246
- "tool": "renderdiff", "version": "0.3.2", "generatedAt": "…",
247
- "left": "http://localhost:3000", "right": "https://example.com",
248
- "widths": [1440, 375], "threshold": null,
249
- "clock": "…", // the instant both sides' clocks start at
250
- "blockUrlPatterns": ["…"], "hideSelectors": ["…"],
251
- "masks": [{ "urlPath": "/pricing", "reason": "live star count" }], // no urlPath: every route
252
- "browser": { "name": "chromium", "version": "…" }, // "chrome" when it fell back
253
- "storageState": { "left": "auth.json", "right": null }, // file names only
254
- "rightReplayedFrom": null // --cache-right: when the replayed recording was made
255
- },
256
- "results": [
257
- {
258
- "url": "/about", "left": "/about", "right": "/about", // a pair: "/a::/b", "/a", "/b"
259
- "selector": null, "hook": false, // hook: a before hook ran
260
- "width": 1440, "status": "compared",
261
- "score": 0.9714, // share of measured pixels that match
262
- "alignedScore": 1, // score over the aligned rows; null unless there are bands
263
- "diffPixels": 33120, "totalPixels": 1158000, "unstablePixels": 0,
264
- "heightDelta": -24, "widthDelta": 0, // left − right
265
- "regions": [], // left-page px; with bands, from the realigned rows
266
- "bands": [{ "side": "right", "y": 196, "h": 24, // null: too different to align
267
- "elements": [{ // regions have them too; absent: not looked at
268
- "selector": "nav > a[href=\"/pricing\"]", "side": "right", // or "left", "both"
269
- "left": null, "right": { "x": 256, "y": 192, "w": 928, "h": 24 },
270
- "changed": {}, // "margin-left": ["24px", "16px"], left first; "text" too
271
- "text": "Pricing" // "rightSelector" when the right one differs
272
- }]
273
- }],
274
- "text": { "added": [], "removed": ["Pricing"] }, // added: left only; removed: right only
275
- "failed": { "left": [], "right": [] }, // stylesheets and font faces that didn't load: "font Inter 700", "stylesheet https://…"
276
- "images": { "left": "about.1440.left.png", "right": "about.1440.right.png", "diff": "about.1440.diff.png" },
277
- "crops": [{
278
- "path": "about.1440.c1.png", "kind": "band", // or "region"
279
- "left": { "x": 256, "y": 196, "w": 68, "h": 0 }, // h 0: where the rows would go
280
- "right": { "x": 256, "y": 196, "w": 68, "h": 24 },
281
- "layout": "stacked", "scale": 1, "clipped": false // left on top, or on the left ("side")
282
- }]
283
- },
284
- { "url": "/blank", "left": "/blank", "right": "/blank", "width": 1440, "status": "error", "error": "page did not render …" }
285
- ],
286
- "summary": {
287
- "compared": 1, "errors": 1, "mean": 0.9714,
288
- "worst": { "url": "/about", "width": 1440, "score": 0.9714 },
289
- "belowThreshold": 0, // accepted shots aside
290
- "accepted": 0, // shots whose every difference was accepted
291
- "stale": [] // accepted entries the run measured but didn't see
292
- }
293
- }
294
- ```
295
-
296
- Paths are relative to the out dir. Results are in route-then-width order.
225
+ result per line. Its types (`Results` and friends) are exported from the package; fields:
226
+ [docs/output.md](https://github.com/tmashara/renderdiff/blob/main/docs/output.md#resultsjson).
297
227
 
298
228
  ## Why a clean result is trustworthy
299
229
 
300
230
  - **Refuses to start** unless both origins answer: two error pages would score ~100%.
301
231
  - **Refuses a shot** with an HTTP status ≥ 400, or where both sides look blank.
302
232
  - **Blocks analytics, consent and A/B tooling** at the network layer, on both sides.
303
- - **Pins what varies between loads**: clock, `Math.random`, timezone, locale, colour scheme, reduced motion, video frames.
233
+ - **Pins what varies between loads**: clock, `Math.random`, timezone, locale, colour scheme, reduced motion, video frames and video.js overlays.
304
234
  - **Kills animation, transitions and caret blink**, and hides common consent banners and dev toolbars.
305
235
  - **Settles the page**: lazy images, fonts and network idle before the shot.
306
236
  - **Shoots until stable**, and excludes pixels still moving as `unstable`.
package/dist/accept.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { RouteResult } from "./report.ts";
1
+ import type { ComparedResult, RouteResult } from "./report.ts";
2
2
  export declare const ACCEPTED_FILE = "renderdiff.accepted.json";
3
3
  /**
4
4
  * One band or region, without its `y`: a change above it moves it down the page without
@@ -24,6 +24,8 @@ export interface Accepted {
24
24
  reason: string;
25
25
  fingerprint: Fingerprint;
26
26
  }
27
+ /** Why a shot can never be accepted, or null when it can. */
28
+ export declare const unacceptable: (r: ComparedResult) => "unstable" | "width change" | "unaligned height" | null;
27
29
  export declare function readAccepted(file: string): Accepted[];
28
30
  /**
29
31
  * Mark each change an accepted entry matches, one entry per change, and a result `accepted`
package/dist/accept.js CHANGED
@@ -27,7 +27,15 @@ const same = (a, b) => a.kind === b.kind &&
27
27
  * Padding no band or region covers: columns past the narrower page, or rows past the shorter
28
28
  * one when they didn't align. A shot with any, or with unstable pixels, is never accepted.
29
29
  */
30
- const acceptable = (r) => r.unstablePixels === 0 && r.widthDelta === 0 && (r.bands !== null || r.heightDelta === 0);
30
+ const acceptable = (r) => !unacceptable(r);
31
+ /** Why a shot can never be accepted, or null when it can. */
32
+ export const unacceptable = (r) => r.unstablePixels
33
+ ? "unstable"
34
+ : r.widthDelta
35
+ ? "width change"
36
+ : r.bands === null && r.heightDelta
37
+ ? "unaligned height"
38
+ : null;
31
39
  export function readAccepted(file) {
32
40
  if (!fs.existsSync(file))
33
41
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"accept.js","sourceRoot":"","sources":["../src/accept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accept.js","sourceRoot":"","sources":["../src/accept.ts"],"names":[],"mappings":"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"}
package/dist/cache.js CHANGED
@@ -11,7 +11,15 @@ export const shotId = (route, width) => JSON.stringify([route.right, width, rout
11
11
  export function cacheFile(cfg, browser) {
12
12
  const state = cfg.storageState.right && fs.readFileSync(cfg.storageState.right, "utf8");
13
13
  const key = createHash("sha256")
14
- .update(JSON.stringify([version(), browser, cfg.right, state, CONTEXT_OPTIONS, cfg.blockUrlPatterns]))
14
+ .update(JSON.stringify([
15
+ version(),
16
+ browser,
17
+ cfg.right,
18
+ state,
19
+ CONTEXT_OPTIONS,
20
+ cfg.blockUrlPatterns,
21
+ cfg.freezeVideo,
22
+ ]))
15
23
  .digest("hex")
16
24
  .slice(0, 16);
17
25
  return path.join(cfg.outDir, CACHE_DIR, `right-${key}.har`);
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
package/dist/capture.js CHANGED
@@ -1,6 +1,28 @@
1
1
  import { setTimeout as sleep } from "node:timers/promises";
2
2
  import sharp from "sharp";
3
3
  import { label, MASK_COLOR, masksFor } from "./config.js";
4
+ /**
5
+ * Runs in the page, behind `prepare`'s init script: pause every video, open shadow roots
6
+ * included. One that played anyway is rewound to frame 0; one that hasn't keeps its poster.
7
+ */
8
+ function freezeVideo() {
9
+ const videos = (root) => [
10
+ ...Array.from(root.querySelectorAll("video")),
11
+ ...Array.from(root.querySelectorAll("*")).flatMap((e) => e.shadowRoot ? videos(e.shadowRoot) : []),
12
+ ];
13
+ return Promise.all(videos(document).map((v) => {
14
+ v.autoplay = false;
15
+ v.pause();
16
+ if (!v.readyState || (!v.played.length && !v.currentTime))
17
+ return;
18
+ const seeked = new Promise((r) => {
19
+ v.addEventListener("seeked", r, { once: true });
20
+ setTimeout(r, 2_000);
21
+ });
22
+ v.currentTime = 0;
23
+ return seeked;
24
+ }));
25
+ }
4
26
  /**
5
27
  * Chromium's screenshot backing store caps at this in any dimension; a single
6
28
  * `fullPage` or clip shot past it can come out truncated or wrapped. Rather than refuse, a
@@ -11,10 +33,12 @@ const MAX_CAPTURE_HEIGHT = 16_384;
11
33
  /** Tile height for the stitched path. Under the cap, with margin. */
12
34
  const TILE_HEIGHT = 16_000;
13
35
  /**
14
- * Sanity ceiling. Past this a page is far likelier a broken/runaway layout than a real
15
- * one, and we would rather error than stitch a >100MB image. Named in the throw.
36
+ * Sanity ceiling on the shot's area, so a narrow page may be taller than a wide one; never
37
+ * under 40,000px tall, the old height ceiling, so a wide width loses nothing. Past
38
+ * this a page is far likelier a broken/runaway layout than a real one, and we would rather
39
+ * error than stitch a >200MB image. Named in the throw.
16
40
  */
17
- const MAX_PAGE_HEIGHT = 40_000;
41
+ const MAX_PAGE_AREA = 1440 * 40_000;
18
42
  /** Requests still open per page, when the last one opened or closed, and stylesheets that failed. */
19
43
  const network = new WeakMap();
20
44
  /** Never finish, so they would hold network idle open until its timeout. */
@@ -77,6 +101,15 @@ export async function prepare(page, cfg, now) {
77
101
  }
78
102
  // Time flows, so Date-based debounce and busy-waits work; `capture` rewinds it per load.
79
103
  await page.clock.install({ time: now });
104
+ // From the first script on, so no video starts and each keeps its poster however fast it loads.
105
+ if (cfg.freezeVideo)
106
+ await page.addInitScript(() => {
107
+ HTMLMediaElement.prototype.play = () => Promise.resolve();
108
+ document.addEventListener("loadstart", (e) => {
109
+ if (e.target instanceof HTMLMediaElement)
110
+ e.target.autoplay = false;
111
+ }, true);
112
+ });
80
113
  // mulberry32 with a fixed seed, re-seeded on every navigation.
81
114
  await page.addInitScript(() => {
82
115
  let s = 0x9e3779b9;
@@ -90,6 +123,7 @@ export async function prepare(page, cfg, now) {
90
123
  }
91
124
  export async function capture(page, url, route, side, width, cfg, now) {
92
125
  await page.setViewportSize({ width, height: 900 });
126
+ const maxHeight = Math.max(40_000, Math.floor(MAX_PAGE_AREA / width));
93
127
  await page.clock.setSystemTime(now);
94
128
  // Here, not on framenavigated, which a pushState during hydration fires too.
95
129
  network.get(page).failed.clear();
@@ -109,16 +143,15 @@ export async function capture(page, url, route, side, width, cfg, now) {
109
143
  }
110
144
  }
111
145
  await page.addStyleTag({ content: cfg.neutralizeCss });
146
+ // Before the scroll too, so autoplay never starts and page state driven by playback stays put.
147
+ if (cfg.freezeVideo)
148
+ await page.evaluate(freezeVideo);
112
149
  // Native lazy images go eager; JS lazy loaders see every viewport-height slice, one
113
150
  // frame each, since a scroll inside one synchronous loop never paints.
114
151
  await page.evaluate(async (maxHeight) => {
115
152
  // The fake clock drives rAF too, so add wall time for a real paint per slice.
116
153
  const frame = () => new Promise((r) => requestAnimationFrame(() => setTimeout(r, 32)));
117
154
  Array.from(document.images).forEach((img) => (img.loading = "eager"));
118
- document.querySelectorAll("video").forEach((v) => {
119
- v.pause();
120
- v.currentTime = 0;
121
- });
122
155
  const h = Math.min(document.documentElement.scrollHeight, maxHeight);
123
156
  for (let y = 0; y < h; y += window.innerHeight) {
124
157
  window.scrollTo(0, y);
@@ -129,7 +162,7 @@ export async function capture(page, url, route, side, width, cfg, now) {
129
162
  await new Promise((r) => setTimeout(r, 0));
130
163
  const decoded = Promise.all(Array.from(document.images).map((img) => img.decode().catch(() => { })));
131
164
  await Promise.race([decoded, new Promise((r) => setTimeout(r, 5_000))]);
132
- }, MAX_PAGE_HEIGHT);
165
+ }, maxHeight);
133
166
  // fonts.ready also resolves when a face fails, so the failures are read off it below.
134
167
  const fonts = await page.evaluate(async () => {
135
168
  await Promise.race([document.fonts.ready, new Promise((r) => setTimeout(r, 5_000))]);
@@ -143,6 +176,8 @@ export async function capture(page, url, route, side, width, cfg, now) {
143
176
  return failed;
144
177
  });
145
178
  await networkIdle(page, 250, 3_000);
179
+ if (cfg.freezeVideo)
180
+ await page.evaluate(freezeVideo);
146
181
  const failed = [...new Set([...network.get(page).failed, ...fonts])];
147
182
  await page.addStyleTag({ content: cfg.neutralizeCss }); // anything injected late
148
183
  const selector = route.selector?.[side];
@@ -184,8 +219,9 @@ export async function capture(page, url, route, side, width, cfg, now) {
184
219
  .map((line) => line.replace(/\s+/g, " ").trim())
185
220
  .filter(Boolean);
186
221
  const blank = pageText < 200 && !media ? `height=${scrollHeight}, text=${pageText} chars` : null;
187
- if (scrollHeight > MAX_PAGE_HEIGHT) {
188
- throw new Error(`page is ${scrollHeight}px tall, past the ${MAX_PAGE_HEIGHT}px sanity ceiling ` +
222
+ if (scrollHeight > maxHeight) {
223
+ throw new Error(`page is ${scrollHeight}px tall at ${width}px wide, past the ${maxHeight}px sanity ceiling ` +
224
+ `for that width (${MAX_PAGE_AREA.toLocaleString("en-US")} pixels) ` +
189
225
  `at ${url} — likely a broken layout, not a real page`);
190
226
  }
191
227
  const measure = async (l) => {
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAmC,MAAM,aAAa,CAAC;AAqB3F;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,qEAAqE;AACrE,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B;;;GAGG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,qGAAqG;AACrG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAmE,CAAC;AAE/F,4EAA4E;AAC5E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,6GAA6G;AAC7G,KAAK,UAAU,WAAW,CAAC,IAAU,EAAE,KAAa,EAAE,OAAe;IACnE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;QAAE,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,yFAAyF;AACzF,MAAM,OAAO,SAAU,SAAQ,KAAK;CAAG;AAEvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,GAAmB,EAAE,GAAW;IACxE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,EAAW,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAU,EAAE,CAAC;IACtF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAW,CAAC;IACvC,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,EAAE;QAC3B,IAAI,CAAC,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;YAAE,OAAO;QAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE;QAC1B,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,CAAC,CAAC;QACR,oFAAoF;QACpF,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,KAAK,kBAAkB;YAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,GAAG;YAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,gGAAgG;IAChG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACnC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,yFAAyF;IACzF,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,+DAA+D;IAC/D,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,GAAG,UAAU,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;YACjB,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAAU,EACV,GAAW,EACX,KAAY,EACZ,IAAsB,EACtB,KAAa,EACb,GAAmB,EACnB,GAAW;IAEX,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,6EAA6E;IAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAC/B,SAAS,EAAE,kBAAkB;QAC7B,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,SAAS,CACjB,yBAAyB,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IAEvD,oFAAoF;IACpF,uEAAuE;IACvE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QACtC,8EAA8E;QAC9E,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;QACtE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/C,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,KAAK,EAAE,CAAC;QACd,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CACzB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CACvE,CAAC;QACF,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,EAAE,eAAe,CAAC,CAAC;IACpB,sFAAsF;IACtF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC3C,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;gBAAE,OAAO;YACjC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;YACjF,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,yBAAyB;IAEjF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5C,uFAAuF;IACvF,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,aAAa,CAAC,aAAa,KAAK,cAAc,CAAC,CAAC;IACvF,CAAC;IAED,yFAAyF;IACzF,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,IAAI,GAAI,CAAiB,CAAC,KAAK,CAAC,UAAU,CAAC;YAChD,CAAiB,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAC/F,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,CAAC;QACvD,OAAO;YACL,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,YAAY;YACnD,SAAS,EACN,CAAC,IAAI,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAiB,CAAC,SAAS,IAAI,EAAE;YACpF,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;YACrC,KAAK,EAAE,KAAK,CAAC,IAAI,CACf,QAAQ,CAAC,gBAAgB,CAAC,0DAA0D,CAAC,CACtF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC;gBACpC,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;YACpC,CAAC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IACF,6EAA6E;IAC7E,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,CACzB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAE,CAAiB,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAC3F,MAAM,CAAC,CAAC,CAAE,CACX,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,SAAS;SACnB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;SAC/C,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,YAAY,UAAU,QAAQ,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,WAAW,YAAY,qBAAqB,eAAe,oBAAoB;YAC7E,MAAM,GAAG,4CAA4C,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EAAE,CAAU,EAAE,EAAE;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,gBAAgB,KAAK,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,IAAI,IAAqB,CAAC;IAC1B,2FAA2F;IAC3F,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,EAAE,CAAC,sBAAsB,EAAE,CAAC;IACpC,CAAC;IACD,qFAAqF;IACrF,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5F,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,qBAAqB,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CACZ,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAClF,CACF;SACE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE,CACvB,UAAU,CACR,KAAK;QACH,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;QAChC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAC3E,KAAK,CACN,CAAC;IAEJ,wDAAwD;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IACpD,IAAI,IAAI,GAAG,MAAM,KAAK,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAClF,IAAI,CAAC,KAAK,KAAK;YACb,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACpF,IAAI,GAAG,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAEvE,mGAAmG;AACnG,KAAK,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,gFAAgF;IAChF,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5E,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,KAAW;IAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACd,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACb,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAAE,SAAS;gBAChC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;YAC3B,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;SAC7D,CAAC;aACC,GAAG,EAAE;aACL,QAAQ,EAAE,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAID,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,KAAY;IACjD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;QAC5D,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACzC,OAAO;YACL;gBACE,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAU,EAAE,UAAU,EAAE,UAAU,EAAE;iBACxE;gBACD,IAAI;gBACJ,GAAG;aACJ;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,GAAQ;IAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBAC3D,MAAM,EAAE,KAAK;gBACb,qBAAqB,EAAE,IAAI;gBAC3B,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;aACrE,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,KAAK,CAAC;YACX,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,CAAC;gBACX,UAAU,EAAE,UAAU;aACvB;SACF,CAAC;aACC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;aAC9E,GAAG,EAAE;aACL,QAAQ,EAAE,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -68,6 +68,12 @@ function parseArgs(argv) {
68
68
  a.rerunFailed = true;
69
69
  else if (v === "--cache-right")
70
70
  a.cacheRight = true;
71
+ else if (v === "--computed")
72
+ a.computed = true;
73
+ else if (v === "--mask-media")
74
+ a.maskMedia = true;
75
+ else if (v === "--no-freeze-video")
76
+ a.freezeVideo = false;
71
77
  else if (v === "--accept") {
72
78
  a.accept = next().trim();
73
79
  if (!a.accept)
@@ -81,6 +87,12 @@ function parseArgs(argv) {
81
87
  a.outDir = next();
82
88
  else if (v === "--config")
83
89
  a.config = next();
90
+ else if (v === "--mask") {
91
+ const s = next().trim();
92
+ if (!s)
93
+ throw new Error("--mask needs a value");
94
+ (a.masks ??= []).push(s);
95
+ }
84
96
  else if (v === "--selector" || v === "--left-selector" || v === "--right-selector") {
85
97
  const s = next();
86
98
  if (!s)
@@ -174,21 +186,26 @@ const HELP = `
174
186
  the config, or in cwd); later runs report them as accepted, and anything new still shows.
175
187
  --rerun-failed reruns only what the previous run in --out didn't find clean or accepted.
176
188
 
177
- Writes report.html, results.json and crops of each change to --out. Exits 1 if a
178
- route falls below --threshold, 3 if one errored (unmeasured) or the run crashed, 2 on
179
- bad arguments, bad config or an origin that is down. A diff without --threshold exits 0.
189
+ Writes report.html, results.json and crops of each change to --out. Exits 1 if any
190
+ shot differs and isn't accepted (with --threshold, only if one scores below it;
191
+ --threshold 0 never fails on a diff), 3 if a route errored (unmeasured) or the run
192
+ crashed, 2 on bad arguments or config, an origin that is down, or an out dir it won't
193
+ wipe.
180
194
 
181
195
  Options
182
196
  --left <url> Left origin, instead of the first positional one.
183
197
  --right <url> Right origin, instead of the second positional one.
184
198
  --width <n> Viewport width; repeatable. Replaces the defaults.
185
- --threshold <0..1> Fail if any comparison scores below this.
199
+ --threshold <0..1> Fail only if a comparison scores below this, not on any diff.
186
200
  --out <dir> Output directory (default: ./renderdiff-out)
187
201
  --concurrency <n> Parallel workers (default: half the cores, 2–8)
188
202
  --config <path> Config file. Default: renderdiff.config.{ts,mts,js,mjs} in cwd.
189
203
  --selector <sel> Compare one element (a Playwright selector) on both sides.
190
204
  --left-selector <sel>, --right-selector <sel>
191
205
  That side's selector, over --selector.
206
+ --mask <sel> Paint this selector over on both sides, every route; repeatable.
207
+ --mask-media Mask every iframe on every route.
208
+ --no-freeze-video Leave videos playing and video.js overlays visible.
192
209
  --storage-state <file>
193
210
  Start both sides with this storage state JSON. Never commit it.
194
211
  --left-storage-state <file>, --right-storage-state <file>
@@ -199,6 +216,8 @@ const HELP = `
199
216
  --cache-right Replay the right side's network from the last --cache-right run
200
217
  in --out, if under an hour old and covering every shot; else load
201
218
  it live and record it. The page still renders and is shot fresh.
219
+ --computed Also diff every element's computed style and ::before/::after,
220
+ and say whether the markup is identical. Pixels still decide.
202
221
  --dry-run Print the URL pairs and exit. No browser.
203
222
  --open Open the report when the run finishes.
204
223
  --progress A line per shot as it finishes. The default on a terminal;
@@ -209,7 +228,7 @@ const HELP = `
209
228
 
210
229
  Default widths: 1440, 1152, 896, 704, 375
211
230
 
212
- Masks, hidden selectors, blocked URLs and route lists go in a config file; CLI flags
231
+ Per-route masks, hidden selectors, blocked URLs and route lists go in a config file; CLI flags
213
232
  win over it. See https://github.com/tmashara/renderdiff#readme
214
233
  `;
215
234
  const usage = () => {