@testivai/witness 2.3.1 → 2.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.
@@ -22,6 +22,13 @@
22
22
  * content that had not *loaded* yet — which is a load question, not a pixel
23
23
  * question.
24
24
  *
25
+ * One pixel question remains, and it is Chrome's, not the page's: a
26
+ * beyond-viewport capture can return a frame painted for the wrong viewport
27
+ * while the measured page is unchanged. That is guarded at capture time in
28
+ * capture/stable-capture.ts (fresh frame, then capture until two in a row
29
+ * match), which costs one extra screenshot on a stable page. This probe still
30
+ * decides when to start capturing.
31
+ *
25
32
  * WHAT THIS DOES
26
33
  * --------------
27
34
  * A cheap synchronous probe the adapter polls from the host language, exactly
@@ -1 +1 @@
1
- {"version":3,"file":"settle.d.ts","sourceRoot":"","sources":["../../src/capture/settle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,SAAS,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,EACD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,IAAI,KAAK;QAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,EAC3H,OAAO,EAAE,MAAM,GACd,WAAW,CAoDb;AAED,8FAA8F;AAC9F,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,wDAAwD;AACxD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAErF;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,0SAMxB,CAAC"}
1
+ {"version":3,"file":"settle.d.ts","sourceRoot":"","sources":["../../src/capture/settle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,SAAS,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,EACD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,IAAI,KAAK;QAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,EAC3H,OAAO,EAAE,MAAM,GACd,WAAW,CAoDb;AAED,8FAA8F;AAC9F,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,wDAAwD;AACxD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAErF;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,0SAMxB,CAAC"}
@@ -23,6 +23,13 @@
23
23
  * content that had not *loaded* yet — which is a load question, not a pixel
24
24
  * question.
25
25
  *
26
+ * One pixel question remains, and it is Chrome's, not the page's: a
27
+ * beyond-viewport capture can return a frame painted for the wrong viewport
28
+ * while the measured page is unchanged. That is guarded at capture time in
29
+ * capture/stable-capture.ts (fresh frame, then capture until two in a row
30
+ * match), which costs one extra screenshot on a stable page. This probe still
31
+ * decides when to start capturing.
32
+ *
26
33
  * WHAT THIS DOES
27
34
  * --------------
28
35
  * A cheap synchronous probe the adapter polls from the host language, exactly
@@ -1 +1 @@
1
- {"version":3,"file":"settle.js","sourceRoot":"","sources":["../../src/capture/settle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settle.js","sourceRoot":"","sources":["../../src/capture/settle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Stable full-page capture — shared by every adapter that screenshots through
3
+ * CDP `Page.captureScreenshot` with `captureBeyondViewport`.
4
+ *
5
+ * THE PROBLEM
6
+ * -----------
7
+ * Chrome can hand back a frame painted with styles resolved against the wrong
8
+ * viewport while it sets up a beyond-viewport capture: narrow-viewport media
9
+ * rules, a collapsed `min-height: 100vh` hero, or text sized from a
10
+ * `@media (max-width: 480px)` body font. The page measures correctly (DOM,
11
+ * element map and computed styles all match the baseline) but the pixels do
12
+ * not, so an unchanged page flips between two renders from run to run and is
13
+ * reported as changed. Measured on the standalone CLI (an e2e fixture failed
14
+ * on nearly every attempt) and on a Playwright suite in CI (testivai-site's
15
+ * home page: 4.13% "changed" on one run, the same commit passing on re-run).
16
+ *
17
+ * THE GUARD
18
+ * ---------
19
+ * 1. Wait for a fresh frame — two animation frames, so every style and layout
20
+ * change made so far has been painted — before measuring and capturing.
21
+ * A forced layout alone does not prevent a stale frame; a rendered one does.
22
+ * 2. Capture until two captures in a row are identical, at most
23
+ * MAX_STABLE_CAPTURES. The capture after a wrong frame is almost always
24
+ * right. A stable page costs one extra screenshot; a page that never stops
25
+ * changing costs MAX_STABLE_CAPTURES, never an endless loop. The same wrong
26
+ * frame twice in a row would still be kept: rare, as it takes two misses.
27
+ *
28
+ * The helpers are transport-agnostic: the adapter supplies how to evaluate the
29
+ * frame wait in its page and how to take one capture.
30
+ */
31
+ /** How long the in-page frame wait waits for two frames before giving up. */
32
+ export declare const FRESH_FRAME_TIMEOUT_MS = 1000;
33
+ /**
34
+ * In-page expression an adapter awaits before capturing: resolves `true` once
35
+ * the page has rendered two animation frames (a frame produced after every
36
+ * style and layout change made so far has been painted), or `false` after
37
+ * FRESH_FRAME_TIMEOUT_MS for a page that renders no frames at all.
38
+ */
39
+ export declare const FRESH_FRAME_EXPRESSION = "new Promise((resolve) => {\n const timer = setTimeout(() => resolve(false), 1000);\n requestAnimationFrame(() => requestAnimationFrame(() => {\n clearTimeout(timer);\n resolve(true);\n }));\n})";
40
+ /**
41
+ * The most captures of one page while waiting for two in a row to match.
42
+ * Every stale-capture pattern measured settles within four (stale, good,
43
+ * good / good, stale, good, good).
44
+ */
45
+ export declare const MAX_STABLE_CAPTURES = 4;
46
+ /** Where the helpers report what they did; adapters route it to their debug output. */
47
+ export type CaptureLog = (message: string) => void;
48
+ /**
49
+ * Wait for a fresh frame, retrying once when none arrived in time (a loaded
50
+ * machine can stall a frame past the in-page timeout). Best-effort, never
51
+ * blocking and never throwing: if neither attempt sees a frame, the capture
52
+ * proceeds and the log says it may be stale.
53
+ *
54
+ * @param waitOnce Evaluates FRESH_FRAME_EXPRESSION in the page and resolves
55
+ * whether it saw two frames. A rejection (e.g. the page navigated away)
56
+ * counts as no frame.
57
+ * @param log Optional debug sink.
58
+ */
59
+ export declare function settleFreshFrame(waitOnce: () => Promise<boolean>, log?: CaptureLog): Promise<void>;
60
+ /** Options for {@link captureUntilStable}. */
61
+ export interface CaptureUntilStableOptions<T> {
62
+ /** Takes one capture of the page (e.g. base64 PNG data from CDP). */
63
+ capture: () => Promise<T>;
64
+ /** Runs before every recapture; typically `settleFreshFrame`. Not run before the first capture. */
65
+ settle: () => Promise<void>;
66
+ /** Whether two captures are the same pixels. Default: strict equality (right for base64 strings). */
67
+ same?: (a: T, b: T) => boolean;
68
+ /** Most captures to take. Default: MAX_STABLE_CAPTURES. */
69
+ maxCaptures?: number;
70
+ /** Optional debug sink. */
71
+ log?: CaptureLog;
72
+ }
73
+ /**
74
+ * Capture until two captures in a row match, at most `maxCaptures`, and return
75
+ * the matching capture (or the last one when none matched the one before it).
76
+ * The caller waits for a fresh frame before the first capture, usually before
77
+ * measuring the page; this settles again before every recapture.
78
+ */
79
+ export declare function captureUntilStable<T>(options: CaptureUntilStableOptions<T>): Promise<T>;
80
+ //# sourceMappingURL=stable-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-capture.d.ts","sourceRoot":"","sources":["../../src/capture/stable-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,+MAMhC,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,uFAAuF;AACvF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxG;AAED,8CAA8C;AAC9C,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC1C,qEAAqE;IACrE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,mGAAmG;IACnG,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,qGAAqG;IACrG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;IAC/B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAe7F"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Stable full-page capture — shared by every adapter that screenshots through
4
+ * CDP `Page.captureScreenshot` with `captureBeyondViewport`.
5
+ *
6
+ * THE PROBLEM
7
+ * -----------
8
+ * Chrome can hand back a frame painted with styles resolved against the wrong
9
+ * viewport while it sets up a beyond-viewport capture: narrow-viewport media
10
+ * rules, a collapsed `min-height: 100vh` hero, or text sized from a
11
+ * `@media (max-width: 480px)` body font. The page measures correctly (DOM,
12
+ * element map and computed styles all match the baseline) but the pixels do
13
+ * not, so an unchanged page flips between two renders from run to run and is
14
+ * reported as changed. Measured on the standalone CLI (an e2e fixture failed
15
+ * on nearly every attempt) and on a Playwright suite in CI (testivai-site's
16
+ * home page: 4.13% "changed" on one run, the same commit passing on re-run).
17
+ *
18
+ * THE GUARD
19
+ * ---------
20
+ * 1. Wait for a fresh frame — two animation frames, so every style and layout
21
+ * change made so far has been painted — before measuring and capturing.
22
+ * A forced layout alone does not prevent a stale frame; a rendered one does.
23
+ * 2. Capture until two captures in a row are identical, at most
24
+ * MAX_STABLE_CAPTURES. The capture after a wrong frame is almost always
25
+ * right. A stable page costs one extra screenshot; a page that never stops
26
+ * changing costs MAX_STABLE_CAPTURES, never an endless loop. The same wrong
27
+ * frame twice in a row would still be kept: rare, as it takes two misses.
28
+ *
29
+ * The helpers are transport-agnostic: the adapter supplies how to evaluate the
30
+ * frame wait in its page and how to take one capture.
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.MAX_STABLE_CAPTURES = exports.FRESH_FRAME_EXPRESSION = exports.FRESH_FRAME_TIMEOUT_MS = void 0;
34
+ exports.settleFreshFrame = settleFreshFrame;
35
+ exports.captureUntilStable = captureUntilStable;
36
+ /** How long the in-page frame wait waits for two frames before giving up. */
37
+ exports.FRESH_FRAME_TIMEOUT_MS = 1000;
38
+ /**
39
+ * In-page expression an adapter awaits before capturing: resolves `true` once
40
+ * the page has rendered two animation frames (a frame produced after every
41
+ * style and layout change made so far has been painted), or `false` after
42
+ * FRESH_FRAME_TIMEOUT_MS for a page that renders no frames at all.
43
+ */
44
+ exports.FRESH_FRAME_EXPRESSION = `new Promise((resolve) => {
45
+ const timer = setTimeout(() => resolve(false), ${exports.FRESH_FRAME_TIMEOUT_MS});
46
+ requestAnimationFrame(() => requestAnimationFrame(() => {
47
+ clearTimeout(timer);
48
+ resolve(true);
49
+ }));
50
+ })`;
51
+ /**
52
+ * The most captures of one page while waiting for two in a row to match.
53
+ * Every stale-capture pattern measured settles within four (stale, good,
54
+ * good / good, stale, good, good).
55
+ */
56
+ exports.MAX_STABLE_CAPTURES = 4;
57
+ /**
58
+ * Wait for a fresh frame, retrying once when none arrived in time (a loaded
59
+ * machine can stall a frame past the in-page timeout). Best-effort, never
60
+ * blocking and never throwing: if neither attempt sees a frame, the capture
61
+ * proceeds and the log says it may be stale.
62
+ *
63
+ * @param waitOnce Evaluates FRESH_FRAME_EXPRESSION in the page and resolves
64
+ * whether it saw two frames. A rejection (e.g. the page navigated away)
65
+ * counts as no frame.
66
+ * @param log Optional debug sink.
67
+ */
68
+ async function settleFreshFrame(waitOnce, log) {
69
+ const attempt = async () => {
70
+ try {
71
+ return (await waitOnce()) === true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ };
77
+ if (await attempt())
78
+ return;
79
+ log?.('no fresh frame within the wait; waiting once more');
80
+ if (await attempt())
81
+ return;
82
+ log?.('no fresh frame after a retry; capturing anyway, the screenshot may be stale');
83
+ }
84
+ /**
85
+ * Capture until two captures in a row match, at most `maxCaptures`, and return
86
+ * the matching capture (or the last one when none matched the one before it).
87
+ * The caller waits for a fresh frame before the first capture, usually before
88
+ * measuring the page; this settles again before every recapture.
89
+ */
90
+ async function captureUntilStable(options) {
91
+ const { capture, settle, log } = options;
92
+ const same = options.same ?? ((a, b) => a === b);
93
+ const maxCaptures = options.maxCaptures ?? exports.MAX_STABLE_CAPTURES;
94
+ let previous = await capture();
95
+ for (let captures = 1; captures < maxCaptures; captures++) {
96
+ await settle();
97
+ const current = await capture();
98
+ if (same(current, previous))
99
+ return current;
100
+ log?.('two captures in a row differed; capturing again');
101
+ previous = current;
102
+ }
103
+ log?.(`no two captures in a row matched in ${maxCaptures}; keeping the last`);
104
+ return previous;
105
+ }
106
+ //# sourceMappingURL=stable-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-capture.js","sourceRoot":"","sources":["../../src/capture/stable-capture.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;;AAwCH,4CAYC;AAsBD,gDAeC;AAvFD,6EAA6E;AAChE,QAAA,sBAAsB,GAAG,IAAI,CAAC;AAE3C;;;;;GAKG;AACU,QAAA,sBAAsB,GAAG;mDACa,8BAAsB;;;;;GAKtE,CAAC;AAEJ;;;;GAIG;AACU,QAAA,mBAAmB,GAAG,CAAC,CAAC;AAKrC;;;;;;;;;;GAUG;AACI,KAAK,UAAU,gBAAgB,CAAC,QAAgC,EAAE,GAAgB;IACvF,MAAM,OAAO,GAAG,KAAK,IAAsB,EAAE;QAC3C,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,IAAI,MAAM,OAAO,EAAE;QAAE,OAAO;IAC5B,GAAG,EAAE,CAAC,mDAAmD,CAAC,CAAC;IAC3D,IAAI,MAAM,OAAO,EAAE;QAAE,OAAO;IAC5B,GAAG,EAAE,CAAC,6EAA6E,CAAC,CAAC;AACvF,CAAC;AAgBD;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAI,OAAqC;IAC/E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,2BAAmB,CAAC;IAE/D,IAAI,QAAQ,GAAG,MAAM,OAAO,EAAE,CAAC;IAC/B,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC1D,MAAM,MAAM,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC;QAC5C,GAAG,EAAE,CAAC,iDAAiD,CAAC,CAAC;QACzD,QAAQ,GAAG,OAAO,CAAC;IACrB,CAAC;IACD,GAAG,EAAE,CAAC,uCAAuC,WAAW,oBAAoB,CAAC,CAAC;IAC9E,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,8 @@ export { parseShardEnv, resolveCaptureOnly, writeShardManifest, SHARD_MANIFEST }
18
18
  export type { ShardInfo, ShardManifest } from './capture/shard';
19
19
  export { settleProbe, buildSettleProbeExpression, SETTLE_STOP_EXPRESSION, SETTLE_STATE_KEY, DEFAULT_QUIET_MS, DEFAULT_SETTLE_TIMEOUT_MS, } from './capture/settle';
20
20
  export type { SettleState } from './capture/settle';
21
+ export { FRESH_FRAME_EXPRESSION, FRESH_FRAME_TIMEOUT_MS, MAX_STABLE_CAPTURES, settleFreshFrame, captureUntilStable, } from './capture/stable-capture';
22
+ export type { CaptureLog, CaptureUntilStableOptions } from './capture/stable-capture';
21
23
  export { BaselineStore } from './baselines';
22
24
  export type { BaselineMetadata } from './baselines';
23
25
  export { loadLocalConfig, createDefaultConfig, localConfigExists, getConfigPath, getDefaultConfig, } from './config';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnI,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,cAAc,QAAQ,CAAC;AAIvB,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC3G,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxG,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,EACL,WAAW,EACX,0BAA0B,EAC1B,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGjI,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,eAAO,MAAM,OAAO,KAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnI,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,cAAc,QAAQ,CAAC;AAIvB,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC3G,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxG,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,EACL,WAAW,EACX,0BAA0B,EAC1B,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGjI,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,eAAO,MAAM,OAAO,KAAqC,CAAC"}
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.VERSION = exports.approveCommand = exports.witnessCommand = exports.runCommand = exports.initCommand = exports.renderHtml = exports.compareAll = exports.generateReport = exports.getDefaultConfig = exports.getConfigPath = exports.localConfigExists = exports.createDefaultConfig = exports.loadLocalConfig = exports.BaselineStore = exports.DEFAULT_SETTLE_TIMEOUT_MS = exports.DEFAULT_QUIET_MS = exports.SETTLE_STATE_KEY = exports.SETTLE_STOP_EXPRESSION = exports.buildSettleProbeExpression = exports.settleProbe = exports.SHARD_MANIFEST = exports.writeShardManifest = exports.resolveCaptureOnly = exports.parseShardEnv = exports.DEFAULT_MAX_ELEMENTS = exports.buildElementMapExpression = exports.collectElementMap = exports.FrameworkDetector = exports.commandExists = exports.setupSignalHandlers = exports.spawnProcess = exports.ProcessManager = exports.isSafeFilename = exports.sanitizeTestName = exports.extractNameFromUrl = exports.generateUniqueFilename = exports.toSafeFilename = exports.createLogger = exports.logger = exports.BrowserDiscoveryError = exports.BrowserDiscovery = exports.BrowserBinding = exports.BrowserCapture = exports.BrowserClient = void 0;
21
+ exports.VERSION = exports.approveCommand = exports.witnessCommand = exports.runCommand = exports.initCommand = exports.renderHtml = exports.compareAll = exports.generateReport = exports.getDefaultConfig = exports.getConfigPath = exports.localConfigExists = exports.createDefaultConfig = exports.loadLocalConfig = exports.BaselineStore = exports.captureUntilStable = exports.settleFreshFrame = exports.MAX_STABLE_CAPTURES = exports.FRESH_FRAME_TIMEOUT_MS = exports.FRESH_FRAME_EXPRESSION = exports.DEFAULT_SETTLE_TIMEOUT_MS = exports.DEFAULT_QUIET_MS = exports.SETTLE_STATE_KEY = exports.SETTLE_STOP_EXPRESSION = exports.buildSettleProbeExpression = exports.settleProbe = exports.SHARD_MANIFEST = exports.writeShardManifest = exports.resolveCaptureOnly = exports.parseShardEnv = exports.DEFAULT_MAX_ELEMENTS = exports.buildElementMapExpression = exports.collectElementMap = exports.FrameworkDetector = exports.commandExists = exports.setupSignalHandlers = exports.spawnProcess = exports.ProcessManager = exports.isSafeFilename = exports.sanitizeTestName = exports.extractNameFromUrl = exports.generateUniqueFilename = exports.toSafeFilename = exports.createLogger = exports.logger = exports.BrowserDiscoveryError = exports.BrowserDiscovery = exports.BrowserBinding = exports.BrowserCapture = exports.BrowserClient = void 0;
22
22
  // Export types
23
23
  __exportStar(require("./types"), exports);
24
24
  // Export browser modules
@@ -70,6 +70,14 @@ Object.defineProperty(exports, "SETTLE_STOP_EXPRESSION", { enumerable: true, get
70
70
  Object.defineProperty(exports, "SETTLE_STATE_KEY", { enumerable: true, get: function () { return settle_1.SETTLE_STATE_KEY; } });
71
71
  Object.defineProperty(exports, "DEFAULT_QUIET_MS", { enumerable: true, get: function () { return settle_1.DEFAULT_QUIET_MS; } });
72
72
  Object.defineProperty(exports, "DEFAULT_SETTLE_TIMEOUT_MS", { enumerable: true, get: function () { return settle_1.DEFAULT_SETTLE_TIMEOUT_MS; } });
73
+ // Stable full-page capture (fresh frame + capture until two in a row match) —
74
+ // shared by every adapter that captures through CDP captureBeyondViewport.
75
+ var stable_capture_1 = require("./capture/stable-capture");
76
+ Object.defineProperty(exports, "FRESH_FRAME_EXPRESSION", { enumerable: true, get: function () { return stable_capture_1.FRESH_FRAME_EXPRESSION; } });
77
+ Object.defineProperty(exports, "FRESH_FRAME_TIMEOUT_MS", { enumerable: true, get: function () { return stable_capture_1.FRESH_FRAME_TIMEOUT_MS; } });
78
+ Object.defineProperty(exports, "MAX_STABLE_CAPTURES", { enumerable: true, get: function () { return stable_capture_1.MAX_STABLE_CAPTURES; } });
79
+ Object.defineProperty(exports, "settleFreshFrame", { enumerable: true, get: function () { return stable_capture_1.settleFreshFrame; } });
80
+ Object.defineProperty(exports, "captureUntilStable", { enumerable: true, get: function () { return stable_capture_1.captureUntilStable; } });
73
81
  var baselines_1 = require("./baselines");
74
82
  Object.defineProperty(exports, "BaselineStore", { enumerable: true, get: function () { return baselines_1.BaselineStore; } });
75
83
  // Export local config
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,eAAe;AACf,0CAAwB;AAExB,yBAAyB;AACzB,2CAAiD;AAAxC,uGAAA,aAAa,OAAA;AACtB,6CAAmD;AAA1C,yGAAA,cAAc,OAAA;AACvB,6CAAmD;AAA1C,yGAAA,cAAc,OAAA;AACvB,iDAA8E;AAArE,6GAAA,gBAAgB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAEhD,mBAAmB;AACnB,yCAAsD;AAA7C,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,mDAAmI;AAA1H,6GAAA,cAAc,OAAA;AAAE,qHAAA,sBAAsB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAAE,6GAAA,cAAc,OAAA;AACrG,2CAAmG;AAA1F,yGAAA,cAAc,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,wGAAA,aAAa,OAAA;AACzE,6DAA6D;AAApD,qHAAA,iBAAiB,OAAA;AAE1B,qBAAqB;AACrB,yCAAuB;AAEvB,mBAAmB;AACnB,yEAAyE;AACzE,qDAA2G;AAAlG,gHAAA,iBAAiB,OAAA;AAAE,wHAAA,yBAAyB,OAAA;AAAE,mHAAA,oBAAoB,OAAA;AAG3E,oEAAoE;AACpE,yCAAwG;AAA/F,sGAAA,aAAa,OAAA;AAAE,2GAAA,kBAAkB,OAAA;AAAE,2GAAA,kBAAkB,OAAA;AAAE,uGAAA,cAAc,OAAA;AAG9E,gDAAgD;AAChD,2CAO0B;AANxB,qGAAA,WAAW,OAAA;AACX,oHAAA,0BAA0B,OAAA;AAC1B,gHAAA,sBAAsB,OAAA;AACtB,0GAAA,gBAAgB,OAAA;AAChB,0GAAA,gBAAgB,OAAA;AAChB,mHAAA,yBAAyB,OAAA;AAI3B,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAGtB,sBAAsB;AACtB,mCAMkB;AALhB,yGAAA,eAAe,OAAA;AACf,6GAAA,mBAAmB,OAAA;AACnB,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AACb,0GAAA,gBAAgB,OAAA;AAIlB,0BAA0B;AAC1B,mCAAkE;AAAzD,wGAAA,cAAc,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAG/C,yCAAyC;AACzC,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AACpB,sCAA4C;AAAnC,iGAAA,UAAU,OAAA;AACnB,8CAAoD;AAA3C,yGAAA,cAAc,OAAA;AACvB,8CAAoD;AAA3C,yGAAA,cAAc,OAAA;AAEvB,UAAU;AACV,8DAA8D;AACjD,QAAA,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,eAAe;AACf,0CAAwB;AAExB,yBAAyB;AACzB,2CAAiD;AAAxC,uGAAA,aAAa,OAAA;AACtB,6CAAmD;AAA1C,yGAAA,cAAc,OAAA;AACvB,6CAAmD;AAA1C,yGAAA,cAAc,OAAA;AACvB,iDAA8E;AAArE,6GAAA,gBAAgB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAEhD,mBAAmB;AACnB,yCAAsD;AAA7C,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,mDAAmI;AAA1H,6GAAA,cAAc,OAAA;AAAE,qHAAA,sBAAsB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAAE,6GAAA,cAAc,OAAA;AACrG,2CAAmG;AAA1F,yGAAA,cAAc,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,wGAAA,aAAa,OAAA;AACzE,6DAA6D;AAApD,qHAAA,iBAAiB,OAAA;AAE1B,qBAAqB;AACrB,yCAAuB;AAEvB,mBAAmB;AACnB,yEAAyE;AACzE,qDAA2G;AAAlG,gHAAA,iBAAiB,OAAA;AAAE,wHAAA,yBAAyB,OAAA;AAAE,mHAAA,oBAAoB,OAAA;AAG3E,oEAAoE;AACpE,yCAAwG;AAA/F,sGAAA,aAAa,OAAA;AAAE,2GAAA,kBAAkB,OAAA;AAAE,2GAAA,kBAAkB,OAAA;AAAE,uGAAA,cAAc,OAAA;AAG9E,gDAAgD;AAChD,2CAO0B;AANxB,qGAAA,WAAW,OAAA;AACX,oHAAA,0BAA0B,OAAA;AAC1B,gHAAA,sBAAsB,OAAA;AACtB,0GAAA,gBAAgB,OAAA;AAChB,0GAAA,gBAAgB,OAAA;AAChB,mHAAA,yBAAyB,OAAA;AAI3B,8EAA8E;AAC9E,2EAA2E;AAC3E,2DAMkC;AALhC,wHAAA,sBAAsB,OAAA;AACtB,wHAAA,sBAAsB,OAAA;AACtB,qHAAA,mBAAmB,OAAA;AACnB,kHAAA,gBAAgB,OAAA;AAChB,oHAAA,kBAAkB,OAAA;AAIpB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAGtB,sBAAsB;AACtB,mCAMkB;AALhB,yGAAA,eAAe,OAAA;AACf,6GAAA,mBAAmB,OAAA;AACnB,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AACb,0GAAA,gBAAgB,OAAA;AAIlB,0BAA0B;AAC1B,mCAAkE;AAAzD,wGAAA,cAAc,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAG/C,yCAAyC;AACzC,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AACpB,sCAA4C;AAAnC,iGAAA,UAAU,OAAA;AACnB,8CAAoD;AAA3C,yGAAA,cAAc,OAAA;AACvB,8CAAoD;AAA3C,yGAAA,cAAc,OAAA;AAEvB,UAAU;AACV,8DAA8D;AACjD,QAAA,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/standalone/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAmBH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,UAAU,CAAC,CAqBrB;AA0JD,2HAA2H;AAC3H,wBAAsB,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAyClE;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/standalone/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoBH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,UAAU,CAAC,CAqBrB;AA+HD,2HAA2H;AAC3H,wBAAsB,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAmClE;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
@@ -28,6 +28,7 @@ const store_1 = require("../baselines/store");
28
28
  const local_config_1 = require("../config/local-config");
29
29
  const generator_1 = require("../report/generator");
30
30
  const logger_1 = require("../utils/logger");
31
+ const stable_capture_1 = require("../capture/stable-capture");
31
32
  const crawl_1 = require("./crawl");
32
33
  const launcher_1 = require("./launcher");
33
34
  /** Mirrors the adapters' stabilization CSS (see packages/playwright config/stabilize):
@@ -179,33 +180,17 @@ async function revealPage(client) {
179
180
  // best-effort: capture proceeds from the top either way
180
181
  }
181
182
  }
183
+ /** Debug sink for the shared capture helpers, prefixed for this mode. */
184
+ const captureLog = (message) => logger_1.logger.debug(`standalone capture: ${message}`);
182
185
  /**
183
- * Resolves once the page has rendered two animation frames, i.e. a frame
184
- * produced after every style and layout change made so far has been painted.
185
- * The timeout bounds the wait for a page that renders no frames at all.
186
- */
187
- const FRESH_FRAME_SCRIPT = `new Promise((resolve) => {
188
- const timer = setTimeout(() => resolve(false), 1000);
189
- requestAnimationFrame(() => requestAnimationFrame(() => {
190
- clearTimeout(timer);
191
- resolve(true);
192
- }));
193
- })`;
194
- /**
195
- * Wait for a freshly rendered frame before capturing. Without it,
196
- * Page.captureScreenshot could return a stale frame: the page measured
197
- * correctly, but the pixels showed styles resolved against an earlier
198
- * viewport (a collapsed 100vh hero, narrow-viewport media rules), so
199
- * identical pages flipped between two renders from run to run. A forced
200
- * layout alone does not prevent this; a rendered frame does.
201
- *
202
- * Returns whether two frames were rendered: false when the in-page wait
203
- * timed out, or failed because the page navigated.
186
+ * Evaluate the shared fresh-frame wait (FRESH_FRAME_EXPRESSION) in the page.
187
+ * Resolves whether two frames were rendered: false when the in-page wait timed
188
+ * out, or failed because the page navigated.
204
189
  */
205
190
  async function waitForFreshFrame(client) {
206
191
  try {
207
192
  const result = await client.Runtime.evaluate({
208
- expression: FRESH_FRAME_SCRIPT,
193
+ expression: stable_capture_1.FRESH_FRAME_EXPRESSION,
209
194
  awaitPromise: true,
210
195
  returnByValue: true,
211
196
  });
@@ -216,25 +201,13 @@ async function waitForFreshFrame(client) {
216
201
  }
217
202
  }
218
203
  /**
219
- * Wait for a fresh frame, retrying once when none arrived in time (a loaded
220
- * machine can stall a frame past the in-page timeout). If neither attempt
221
- * sees one, the capture still proceeds: best-effort, never blocking.
204
+ * Wait for a freshly rendered frame before capturing (retried once; see
205
+ * capture/stable-capture.ts for why a stale frame happens). Best-effort,
206
+ * never blocking.
222
207
  */
223
- async function settleFrame(client) {
224
- if (await waitForFreshFrame(client))
225
- return;
226
- logger_1.logger.debug('standalone capture: no fresh frame within the wait; waiting once more');
227
- if (await waitForFreshFrame(client))
228
- return;
229
- logger_1.logger.debug('standalone capture: no fresh frame after a retry; capturing anyway, the screenshot may be stale');
208
+ function settleFrame(client) {
209
+ return (0, stable_capture_1.settleFreshFrame)(() => waitForFreshFrame(client), captureLog);
230
210
  }
231
- /**
232
- * The most captures of one page while waiting for two in a row to match.
233
- * Every stale-capture pattern measured settles within four (stale, good,
234
- * good / good, stale, good, good); a page that never stops animating costs
235
- * four captures, not an endless loop.
236
- */
237
- const MAX_CAPTURES = 4;
238
211
  async function screenshot(client, width, height) {
239
212
  const shot = await client.Page.captureScreenshot({
240
213
  format: 'png',
@@ -273,19 +246,12 @@ async function captureFullPage(client) {
273
246
  // collapsed 100vh hero), most likely from the 1x1 view Chrome emulates for
274
247
  // a moment while it sets up a beyond-viewport capture. The capture after
275
248
  // it is almost always right, so capture until two captures in a row match.
276
- // That wrong frame is the same pixels every time, so two of them in a row
277
- // still match and are kept: rare, since it takes two misses, but possible.
278
- let previous = await screenshot(client, width, height);
279
- for (let captures = 1; captures < MAX_CAPTURES; captures++) {
280
- await settleFrame(client);
281
- const current = await screenshot(client, width, height);
282
- if (current === previous)
283
- return Buffer.from(current, 'base64');
284
- logger_1.logger.debug('standalone capture: two captures in a row differed; capturing again');
285
- previous = current;
286
- }
287
- logger_1.logger.debug(`standalone capture: no two captures in a row matched in ${MAX_CAPTURES}; keeping the last`);
288
- return Buffer.from(previous, 'base64');
249
+ const data = await (0, stable_capture_1.captureUntilStable)({
250
+ capture: () => screenshot(client, width, height),
251
+ settle: () => settleFrame(client),
252
+ log: captureLog,
253
+ });
254
+ return Buffer.from(data, 'base64');
289
255
  }
290
256
  async function runStandaloneWitness(startUrl, options) {
291
257
  const projectRoot = process.cwd();
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/standalone/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/standalone/run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testivai/witness",
3
- "version": "2.3.1",
3
+ "version": "2.4.0",
4
4
  "description": "Local-first visual regression testing: CLI, diff engine, baselines and self-contained HTML report. No account, nothing uploaded.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",