renderdiff 0.3.2 → 0.5.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.
@@ -0,0 +1,218 @@
1
+ import { name } from "./config.js";
2
+ import { PROPS } from "./locate.js";
3
+ const MAX_CHANGES = 500;
4
+ const MAX_UNMATCHED = 20;
5
+ const FIELDS = [...PROPS, "content"];
6
+ const INHERITED = new Set([
7
+ "font-family",
8
+ "font-size",
9
+ "font-weight",
10
+ "line-height",
11
+ "letter-spacing",
12
+ "text-align",
13
+ "text-transform",
14
+ "white-space",
15
+ "color",
16
+ "visibility",
17
+ ]);
18
+ const DISPLAY = FIELDS.indexOf("display");
19
+ const PSEUDO = /::(before|after)$/;
20
+ const isPseudo = (key) => PSEUDO.test(key);
21
+ const parentOf = (key) => {
22
+ if (isPseudo(key))
23
+ return key.replace(PSEUDO, "");
24
+ const i = key.lastIndexOf(" > ");
25
+ return i >= 0 ? key.slice(0, i) : "";
26
+ };
27
+ /** Letters and digits alternating at least twice: `3f9a8c1d`, not `banner2024` or `photo`. */
28
+ const hashy = (t) => (t.match(/\d+|[A-Za-z]+/g)?.length ?? 0) >= 4;
29
+ /** In URL attributes, bundler hashes in a file name (`main.3f9a8c1d.png`, `?v=…`) read the same on both sides. */
30
+ export const normalizeAssets = (html) =>
31
+ // ponytail: hex/base36 hashes between separators; add a framework's build-id path when one shows up
32
+ html.replace(/ (src|href|srcset|poster)="([^"]*)"/g, (_, n, v) => {
33
+ const u = v
34
+ .replace(/([.\-_])([A-Za-z0-9]{8,})(?=(?:[.\-_][A-Za-z0-9]+)*\.[A-Za-z0-9]{2,5}(?:$|[?#\s,]))/g, (m, sep, t) => (hashy(t) ? `${sep}#` : m))
35
+ .replace(/([?&](?:v|ver|version|hash)=)[\w.-]+/g, "$1#");
36
+ return ` ${n}="${u}"`;
37
+ });
38
+ /** A page's throw is its text after the first `Error: `, without the stack page.evaluate appends. */
39
+ export const pageError = (e) => {
40
+ const m = String(e instanceof Error ? e.message : e);
41
+ const i = m.indexOf("Error: ");
42
+ return i < 0 ? m : m.slice(i + 7).split("\n")[0];
43
+ };
44
+ /**
45
+ * Drops what a change elsewhere explains: an inherited property's change the parent has too,
46
+ * a width inside a parent whose width changed, a height around a child whose height changed.
47
+ * With the snapshots, a box whose own size is set in px on either side is kept, and a
48
+ * percentage height inside a px-height parent whose height changed is the one that follows.
49
+ */
50
+ export function collapseInherited(changes, snaps = []) {
51
+ const raw = new Set(changes.map((c) => `${c.key}\0${c.prop}\0${c.values.join("\0")}`));
52
+ const wide = new Set(changes.filter((c) => c.prop === "width").map((c) => c.key));
53
+ const tall = new Set(changes.filter((c) => c.prop === "height").map((c) => c.key));
54
+ const spec = (key, i) => snaps.map((s) => s[key]?.size?.[i] ?? "auto");
55
+ const set = (key, i) => spec(key, i).some((v) => v.endsWith("px"));
56
+ // A percentage of an auto height is auto, so only a px-height parent sizes it.
57
+ const follows = (key) => {
58
+ const vs = spec(key, 1);
59
+ const p = parentOf(key);
60
+ return tall.has(p) && set(p, 1) && vs.length > 0 && vs.every((v) => v.includes("%"));
61
+ };
62
+ const tallKid = new Set([...tall].filter((k) => !follows(k)).map(parentOf));
63
+ return changes.filter((c) => {
64
+ const p = parentOf(c.key);
65
+ if (INHERITED.has(c.prop))
66
+ return !raw.has(`${p}\0${c.prop}\0${c.values.join("\0")}`);
67
+ if (c.prop === "width")
68
+ return !wide.has(p) || set(c.key, 0);
69
+ if (c.prop === "height")
70
+ return (!tallKid.has(c.key) || set(c.key, 1)) && !follows(c.key);
71
+ return true;
72
+ });
73
+ }
74
+ export function diffSnapshots(left, right) {
75
+ const html = (s, k) => (s[k] ? normalizeAssets(s[k].html) : null);
76
+ // Under an element `b` has display:none, so `b` never walked it: a style change, not markup.
77
+ const hiddenIn = (b, k) => {
78
+ for (let p = parentOf(k); p; p = parentOf(p)) {
79
+ const e = b[p];
80
+ if (e)
81
+ return e.styles[DISPLAY] === "none";
82
+ }
83
+ return false;
84
+ };
85
+ const keys = new Set([...Object.keys(left), ...Object.keys(right)]);
86
+ let dom = 0;
87
+ for (const k of keys) {
88
+ if (isPseudo(k) || html(left, k) === html(right, k))
89
+ continue;
90
+ if (!left[k] && hiddenIn(left, k))
91
+ continue;
92
+ if (!right[k] && hiddenIn(right, k))
93
+ continue;
94
+ dom++;
95
+ }
96
+ const changes = [];
97
+ const content = FIELDS.length - 1;
98
+ for (const key of keys) {
99
+ const [l, r] = [left[key], right[key]];
100
+ if (l && r) {
101
+ // Styles of a box that isn't rendered are noise beside the display change itself.
102
+ const shown = [l, r].filter((x) => x.styles[DISPLAY] !== "none").length;
103
+ if (shown === 1) {
104
+ changes.push({ key, prop: "display", values: [l.styles[DISPLAY], r.styles[DISPLAY]] });
105
+ continue;
106
+ }
107
+ FIELDS.forEach((prop, i) => {
108
+ if (l.styles[i] !== r.styles[i])
109
+ changes.push({ key, prop, values: [l.styles[i], r.styles[i]] });
110
+ });
111
+ }
112
+ else if (isPseudo(key) &&
113
+ [left, right].every((s) => s[parentOf(key)] && s[parentOf(key)].styles[DISPLAY] !== "none")) {
114
+ // A pseudo-element one side no longer generates: the removed rule's own finding.
115
+ changes.push({
116
+ key,
117
+ prop: "content",
118
+ values: [l?.styles[content] ?? "none", r?.styles[content] ?? "none"],
119
+ });
120
+ }
121
+ }
122
+ const only = (a, b) => {
123
+ const ks = Object.keys(a).filter((k) => !isPseudo(k) && !b[k] && !hiddenIn(b, k));
124
+ const set = new Set(ks);
125
+ return ks.filter((k) => !set.has(parentOf(k))).slice(0, MAX_UNMATCHED);
126
+ };
127
+ const kept = collapseInherited(changes, [left, right]);
128
+ return {
129
+ dom,
130
+ changes: kept.slice(0, MAX_CHANGES),
131
+ truncated: Math.max(0, kept.length - MAX_CHANGES),
132
+ unmatched: { left: only(left, right), right: only(right, left) },
133
+ };
134
+ }
135
+ const computedOf = (rs) => rs.filter((r) => r.status === "compared" && !!r.computed);
136
+ /** Every change across routes and widths, one per (key, property, values), most widespread first. */
137
+ export function groupFindings(results) {
138
+ const out = new Map();
139
+ for (const r of computedOf(results)) {
140
+ for (const c of r.computed.changes) {
141
+ const id = `${c.key}\0${c.prop}\0${c.values.join("\0")}`;
142
+ const f = out.get(id) ?? { ...c, at: [] };
143
+ out.set(id, f);
144
+ const url = name(r);
145
+ const at = f.at.find((a) => a.url === url);
146
+ if (at)
147
+ at.widths.push(r.width);
148
+ else
149
+ f.at.push({ url, widths: [r.width] });
150
+ }
151
+ }
152
+ const shots = (f) => f.at.reduce((n, a) => n + a.widths.length, 0);
153
+ return [...out.values()].sort((a, b) => shots(b) - shots(a) || a.key.localeCompare(b.key));
154
+ }
155
+ /** Findings shown in the console summary; results.json has them all. */
156
+ const SHOWN = 20;
157
+ const AT_ROUTES = 3;
158
+ /** Unmatched routes, and keys per route, in the console summary. */
159
+ const UNMATCHED_SHOWN = 5;
160
+ /** The console block: dom per route, then one line per finding, `left→right` like `dom`. */
161
+ export function fmtComputed(results, routes) {
162
+ const rows = results.filter((r) => r.status === "compared" && "computed" in r);
163
+ if (!rows.length)
164
+ return [];
165
+ const findings = groupFindings(results);
166
+ const differs = [];
167
+ const failed = [];
168
+ let identical = 0;
169
+ for (const route of routes) {
170
+ const rs = rows.filter((r) => name(r) === route);
171
+ if (!rs.length)
172
+ continue;
173
+ const bad = rs.find((r) => !r.computed);
174
+ if (bad)
175
+ failed.push(`${route}@${bad.width} (${bad.computedError ?? "unknown"})`);
176
+ const dom = Math.max(...rs.map((r) => r.computed?.dom ?? 0));
177
+ if (dom)
178
+ differs.push(`${route} (${dom})`);
179
+ else if (rs.some((r) => r.computed))
180
+ identical++;
181
+ }
182
+ const out = [
183
+ `computed: ${findings.length} finding${findings.length === 1 ? "" : "s"}; ` +
184
+ `dom identical on ${identical} of ${identical + differs.length} route(s)` +
185
+ (differs.length ? `, differs ${differs.join(" ")}, so findings there are hints` : "") +
186
+ (failed.length ? `; snapshot failed on ${failed.join(" ")}` : ""),
187
+ ];
188
+ for (const f of findings.slice(0, SHOWN)) {
189
+ const at = f.at
190
+ .slice(0, AT_ROUTES)
191
+ .map((a) => `${a.url}@${a.widths.join(",")}`)
192
+ .join(" ");
193
+ const more = f.at.length > AT_ROUTES ? ` +${f.at.length - AT_ROUTES} routes` : "";
194
+ out.push(` ${f.key} ${f.prop} ${f.values.join("→")} ${at}${more}`);
195
+ }
196
+ if (findings.length > SHOWN)
197
+ out.push(` (+${findings.length - SHOWN} more in results.json)`);
198
+ const cut = computedOf(rows).filter((r) => r.computed.truncated);
199
+ if (cut.length)
200
+ out.push(` truncated: only the first ${MAX_CHANGES} changes kept on ` +
201
+ cut.map((r) => `${name(r)}@${r.width} (+${r.computed.truncated})`).join(" "));
202
+ const unmatched = routes.flatMap((route) => {
203
+ const r = computedOf(rows).find((x) => name(x) === route && x.computed.dom);
204
+ if (!r)
205
+ return [];
206
+ const { left, right } = r.computed.unmatched;
207
+ const keys = [...left.map((k) => `+${k}`), ...right.map((k) => `-${k}`)];
208
+ if (!keys.length)
209
+ return [];
210
+ const more = keys.length > UNMATCHED_SHOWN ? ` (+${keys.length - UNMATCHED_SHOWN} more)` : "";
211
+ return [` unmatched ${route}@${r.width} ${keys.slice(0, UNMATCHED_SHOWN).join(" ")}${more}`];
212
+ });
213
+ out.push(...unmatched.slice(0, UNMATCHED_SHOWN));
214
+ if (unmatched.length > UNMATCHED_SHOWN)
215
+ out.push(` (+${unmatched.length - UNMATCHED_SHOWN} more routes with unmatched elements)`);
216
+ return out;
217
+ }
218
+ //# sourceMappingURL=computed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computed.js","sourceRoot":"","sources":["../src/computed.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -137,6 +137,8 @@ export type Mask = {
137
137
  } | {
138
138
  locate: (page: Page) => Locator;
139
139
  });
140
+ /** The `maskMedia` / `--mask-media` preset: embeds that differ per load. Video is frozen instead. */
141
+ export declare const MEDIA_MASK: Mask;
140
142
  /** The shape a `renderdiff.config.*` file default-exports. Every field is optional. */
141
143
  export interface RenderdiffConfig {
142
144
  /** Left origin, e.g. `http://localhost:3000`. A trailing slash is stripped. */
@@ -157,7 +159,7 @@ export interface RenderdiffConfig {
157
159
  };
158
160
  /** Viewport widths. Replaces {@link DEFAULT_WIDTHS} outright. */
159
161
  widths?: number[];
160
- /** Fail the run if any comparison scores below this, 0..1. */
162
+ /** Fail only when a comparison scores below this (0..1), instead of on any diff. */
161
163
  threshold?: number;
162
164
  /** Where to write screenshots and `report.html`. Relative paths resolve from cwd. */
163
165
  outDir?: string;
@@ -171,6 +173,12 @@ export interface RenderdiffConfig {
171
173
  extraCss?: string;
172
174
  /** Per-route regions painted over on both sides. */
173
175
  masks?: Mask[];
176
+ /** Also diff every element's computed style, and say whether the markup is identical. */
177
+ computed?: boolean;
178
+ /** Mask every `iframe` on every route. */
179
+ maskMedia?: boolean;
180
+ /** Keep every video from playing, so it shows its poster, and hide video.js overlays. Default true. */
181
+ freezeVideo?: boolean;
174
182
  }
175
183
  /** A fully merged config. Everything the run needs, nothing optional. */
176
184
  export interface ResolvedConfig {
@@ -191,6 +199,8 @@ export interface ResolvedConfig {
191
199
  left: string | null;
192
200
  right: string | null;
193
201
  };
202
+ computed: boolean;
203
+ freezeVideo: boolean;
194
204
  }
195
205
  /** package.json's version; the same relative path resolves from `src/` and `dist/`. */
196
206
  export declare function version(): string;
@@ -218,6 +228,11 @@ export interface CliOverrides {
218
228
  left?: string;
219
229
  right?: string;
220
230
  };
231
+ computed?: boolean;
232
+ /** From --mask, appended to the config's masks. */
233
+ masks?: string[];
234
+ maskMedia?: boolean;
235
+ freezeVideo?: boolean;
221
236
  }
222
237
  /** Merge built-in defaults, the config file, and CLI flags into one resolved config. */
223
238
  export declare function resolveConfig(file: RenderdiffConfig, cli: CliOverrides): ResolvedConfig;
package/dist/config.js CHANGED
@@ -146,6 +146,11 @@ export const CONTEXT_OPTIONS = {
146
146
  };
147
147
  /** Fill colour for masks and for height/width padding. Loud on purpose. */
148
148
  export const MASK_COLOR = "#FF00FF";
149
+ /** The `maskMedia` / `--mask-media` preset: embeds that differ per load. Video is frozen instead. */
150
+ export const MEDIA_MASK = {
151
+ selector: "iframe",
152
+ reason: "iframes (--mask-media)",
153
+ };
149
154
  /** package.json's version; the same relative path resolves from `src/` and `dist/`. */
150
155
  export function version() {
151
156
  const pkg = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "package.json");
@@ -285,6 +290,8 @@ function validate(c, file) {
285
290
  bad("widths", "an array of positive numbers");
286
291
  }
287
292
  }
293
+ if (c.computed !== undefined && typeof c.computed !== "boolean")
294
+ bad("computed", "a boolean");
288
295
  if (c.threshold !== undefined) {
289
296
  const t = c.threshold;
290
297
  if (typeof t !== "number" || !Number.isFinite(t) || t < 0 || t > 1) {
@@ -322,6 +329,10 @@ function validate(c, file) {
322
329
  }
323
330
  });
324
331
  }
332
+ if (c.maskMedia !== undefined && typeof c.maskMedia !== "boolean")
333
+ bad("maskMedia", "a boolean");
334
+ if (c.freezeVideo !== undefined && typeof c.freezeVideo !== "boolean")
335
+ bad("freezeVideo", "a boolean");
325
336
  }
326
337
  /** Merge built-in defaults, the config file, and CLI flags into one resolved config. */
327
338
  export function resolveConfig(file, cli) {
@@ -339,6 +350,7 @@ export function resolveConfig(file, cli) {
339
350
  ? { left: file.storageState, right: file.storageState }
340
351
  : file.storageState;
341
352
  const hideSelectors = [...DEFAULT_HIDE_SELECTORS, ...(file.hideSelectors ?? [])];
353
+ const freezeVideo = cli.freezeVideo ?? file.freezeVideo ?? true;
342
354
  return {
343
355
  left: left.replace(/\/+$/, ""),
344
356
  right: right.replace(/\/+$/, ""),
@@ -348,12 +360,24 @@ export function resolveConfig(file, cli) {
348
360
  concurrency: cli.concurrency ?? file.concurrency ?? DEFAULT_CONCURRENCY,
349
361
  blockUrlPatterns: [...DEFAULT_BLOCK_URL_PATTERNS, ...(file.blockUrlPatterns ?? [])],
350
362
  hideSelectors,
351
- neutralizeCss: STILL_CSS + `${hideSelectors.join(",")}{display:none!important}\n` + (file.extraCss ?? ""),
352
- masks: (file.masks ?? []).map((m) => m.urlPath === undefined ? m : { ...m, urlPath: normalize(m.urlPath) }),
363
+ neutralizeCss: STILL_CSS +
364
+ `${hideSelectors.join(",")}{display:none!important}\n` +
365
+ // visibility, not display, so the player keeps its layout.
366
+ (freezeVideo
367
+ ? ".vjs-text-track-display,.vjs-control-bar,.vjs-control-bar *{visibility:hidden!important}\n"
368
+ : "") +
369
+ (file.extraCss ?? ""),
370
+ masks: [
371
+ ...(file.masks ?? []).map((m) => m.urlPath === undefined ? m : { ...m, urlPath: normalize(m.urlPath) }),
372
+ ...(cli.masks ?? []).map((selector) => ({ selector, reason: `${selector} (--mask)` })),
373
+ ...(cli.maskMedia || file.maskMedia ? [MEDIA_MASK] : []),
374
+ ],
353
375
  storageState: {
354
376
  left: storageFile(cli.storageState?.left ?? fileState?.left),
355
377
  right: storageFile(cli.storageState?.right ?? fileState?.right),
356
378
  },
379
+ computed: cli.computed ?? file.computed ?? false,
380
+ freezeVideo,
357
381
  };
358
382
  }
359
383
  /** Absolute path to a storage state file that parses as a JSON object. Never echoes its contents. */
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/format.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { Line } from "./compare.ts";
1
2
  import type { ElementDiff } from "./locate.ts";
2
3
  /** Number formatting shared by the console summary (`run.ts`) and the HTML report. */
3
4
  /** Down to 4 decimals, so a shot that differs never reads as 100% or clears a threshold it missed. The epsilon absorbs float error like 0.29 * 1e4 = 2899.99…. */
@@ -21,5 +22,7 @@ export declare const fmtBand: (b: {
21
22
  y: number;
22
23
  h: number;
23
24
  }) => string;
25
+ /** `line -1px@y812`: signed like a band, − when only the reference draws it; `~` when approximate. */
26
+ export declare const fmtLine: (l: Line, approx?: boolean) => string;
24
27
  /** `+sel "text"` / `-sel "text"` for one side only, `sel prop l→r`, else its box deltas (left − right). */
25
28
  export declare const fmtElements: (els: ElementDiff[], props?: number) => string;
package/dist/format.js CHANGED
@@ -10,6 +10,8 @@ export const fmtFailed = (f) => ["left", "right"]
10
10
  export const fmtRegion = (r) => `${r.w}×${r.h} at (${r.x},${r.y})`;
11
11
  /** Signed like the height delta: + when left has the extra rows, − when right does. */
12
12
  export const fmtBand = (b) => `${b.side === "left" ? "+" : "-"}${b.h}px at y=${b.y} (${b.side})`;
13
+ /** `line -1px@y812`: signed like a band, − when only the reference draws it; `~` when approximate. */
14
+ export const fmtLine = (l, approx = false) => `line ${l.side === "left" ? "+" : l.side === "right" ? "-" : ""}${l.h}px@y${approx ? "~" : ""}${l.y}`;
13
15
  /** `+sel "text"` / `-sel "text"` for one side only, `sel prop l→r`, else its box deltas (left − right). */
14
16
  export const fmtElements = (els, props = 2) => els
15
17
  .map((e) => {
@@ -18,13 +20,14 @@ export const fmtElements = (els, props = 2) => els
18
20
  const changed = Object.entries(e.changed)
19
21
  .slice(0, props)
20
22
  .map(([p, [l, r]]) => (p === "text" ? `"${l}"→"${r}"` : `${p} ${l}→${r}`));
23
+ const re = e.reparented ? " (re-parented)" : "";
21
24
  if (changed.length)
22
- return `${e.selector} ${changed.join(", ")}`;
25
+ return `${e.selector} ${changed.join(", ")}${re}`;
23
26
  const moved = ["x", "y", "w", "h"].flatMap((k) => {
24
27
  const d = e.left[k] - e.right[k];
25
28
  return d ? [`${k}${signed(d)}`] : [];
26
29
  });
27
- return [e.selector, ...moved].join(" ");
30
+ return [e.selector, ...moved].join(" ") + re;
28
31
  })
29
32
  .join("; ");
30
33
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,4 +13,5 @@ export { defineConfig, DEFAULT_BLOCK_URL_PATTERNS, DEFAULT_CONCURRENCY, DEFAULT_
13
13
  export { type ComparedResult, type CropResult, type ErrorResult, type Results, type RouteResult, type RunMeta, type Summary, } from "./report.ts";
14
14
  export { type Band, type Box, type Region, type TextDiff } from "./compare.ts";
15
15
  export { type ElementDiff } from "./locate.ts";
16
+ export { type ComputedDiff, type Finding, type StyleChange } from "./computed.ts";
16
17
  export { type Accepted, type Fingerprint } from "./accept.ts";
package/dist/index.js CHANGED
@@ -13,5 +13,6 @@ export { defineConfig, DEFAULT_BLOCK_URL_PATTERNS, DEFAULT_CONCURRENCY, DEFAULT_
13
13
  export {} from "./report.js";
14
14
  export {} from "./compare.js";
15
15
  export {} from "./locate.js";
16
+ export {} from "./computed.js";
16
17
  export {} from "./accept.js";
17
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,UAAU,GAQX,MAAM,aAAa,CAAC;AAErB,OAAO,EAQN,MAAM,aAAa,CAAC;AAErB,OAAO,EAAmD,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAoB,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAmC,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,UAAU,GAQX,MAAM,aAAa,CAAC;AAErB,OAAO,EAQN,MAAM,aAAa,CAAC;AAErB,OAAO,EAAmD,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAoB,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAqD,MAAM,eAAe,CAAC;AAClF,OAAO,EAAmC,MAAM,aAAa,CAAC"}
package/dist/locate.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { Locator, Page } from "playwright";
2
2
  import type { Shot } from "./capture.ts";
3
3
  import type { Box, Spot } from "./compare.ts";
4
+ import type { Snapshot } from "./computed.ts";
4
5
  /** Names the DOM elements behind each change, from the pages still holding the shot's document. */
5
6
  /** A DOM element behind a change. Boxes in that side's page px (element px for a selector route). */
6
7
  export interface ElementDiff {
@@ -16,7 +17,17 @@ export interface ElementDiff {
16
17
  text: string;
17
18
  /** The right side's selector, when it was found by its text under a different one. */
18
19
  rightSelector?: string;
20
+ /** Paired although its parent's or grandparent's tags differ, so the props may not be the cause. */
21
+ reparented?: true;
19
22
  }
23
+ /** Layout first; width and height last, since they are usually a consequence. */
24
+ export declare const PROPS: string[];
25
+ /**
26
+ * Every rendered element's computed `PROPS` and `content`, and its `::before`/`::after` when
27
+ * generated, keyed by a selector path; masked and `display: none` subtrees are skipped.
28
+ * Finishes the page's animations, so it runs after `locate`.
29
+ */
30
+ export declare function snapshot(page: Page, masks: Locator[], budget: number, root: Locator | null): Promise<Snapshot>;
20
31
  /**
21
32
  * The elements behind each of the first `MAX_SPOTS` spots, in spot order. Each side picks the
22
33
  * elements that best fill its box, then the other side looks for each by selector.