@testivai/witness 2.5.0 → 2.6.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 +9 -2
- package/dist/baselines/store.d.ts +14 -0
- package/dist/baselines/store.d.ts.map +1 -1
- package/dist/baselines/store.js +12 -4
- package/dist/baselines/store.js.map +1 -1
- package/dist/capture/element-map.d.ts +23 -2
- package/dist/capture/element-map.d.ts.map +1 -1
- package/dist/capture/element-map.js +102 -4
- package/dist/capture/element-map.js.map +1 -1
- package/dist/capture/environment.d.ts +26 -0
- package/dist/capture/environment.d.ts.map +1 -1
- package/dist/capture/environment.js +4 -0
- package/dist/capture/environment.js.map +1 -1
- package/dist/capture/health-limits.d.ts +14 -0
- package/dist/capture/health-limits.d.ts.map +1 -0
- package/dist/capture/health-limits.js +17 -0
- package/dist/capture/health-limits.js.map +1 -0
- package/dist/capture/health.d.ts +124 -0
- package/dist/capture/health.d.ts.map +1 -0
- package/dist/capture/health.js +327 -0
- package/dist/capture/health.js.map +1 -0
- package/dist/capture/native-app.d.ts +77 -0
- package/dist/capture/native-app.d.ts.map +1 -0
- package/dist/capture/native-app.js +172 -0
- package/dist/capture/native-app.js.map +1 -0
- package/dist/capture/shard.d.ts +17 -0
- package/dist/capture/shard.d.ts.map +1 -1
- package/dist/capture/shard.js +8 -1
- package/dist/capture/shard.js.map +1 -1
- package/dist/commands/approve.d.ts.map +1 -1
- package/dist/commands/approve.js +20 -0
- package/dist/commands/approve.js.map +1 -1
- package/dist/commands/merge-captures.d.ts.map +1 -1
- package/dist/commands/merge-captures.js +10 -0
- package/dist/commands/merge-captures.js.map +1 -1
- package/dist/config/local-config.d.ts +13 -0
- package/dist/config/local-config.d.ts.map +1 -1
- package/dist/config/local-config.js.map +1 -1
- package/dist/config/validate-config.d.ts.map +1 -1
- package/dist/config/validate-config.js +10 -0
- package/dist/config/validate-config.js.map +1 -1
- package/dist/diff/attribution.d.ts +16 -2
- package/dist/diff/attribution.d.ts.map +1 -1
- package/dist/diff/attribution.js +5 -4
- package/dist/diff/attribution.js.map +1 -1
- package/dist/diff/dom-diff.d.ts.map +1 -1
- package/dist/diff/dom-diff.js +7 -1
- package/dist/diff/dom-diff.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -2
- package/dist/index.js.map +1 -1
- package/dist/report/compare.d.ts +11 -1
- package/dist/report/compare.d.ts.map +1 -1
- package/dist/report/compare.js +86 -15
- package/dist/report/compare.js.map +1 -1
- package/dist/report/environment.d.ts.map +1 -1
- package/dist/report/environment.js +25 -2
- package/dist/report/environment.js.map +1 -1
- package/dist/report/generator.d.ts +15 -2
- package/dist/report/generator.d.ts.map +1 -1
- package/dist/report/generator.js +15 -2
- package/dist/report/generator.js.map +1 -1
- package/dist/report/health.d.ts +115 -0
- package/dist/report/health.d.ts.map +1 -0
- package/dist/report/health.js +279 -0
- package/dist/report/health.js.map +1 -0
- package/dist/report/index.d.ts +5 -1
- package/dist/report/index.d.ts.map +1 -1
- package/dist/report/index.js +15 -1
- package/dist/report/index.js.map +1 -1
- package/dist/report/results.d.ts +40 -1
- package/dist/report/results.d.ts.map +1 -1
- package/dist/report/shift-check.d.ts +40 -0
- package/dist/report/shift-check.d.ts.map +1 -0
- package/dist/report/shift-check.js +109 -0
- package/dist/report/shift-check.js.map +1 -0
- package/dist/report/template.d.ts.map +1 -1
- package/dist/report/template.js +53 -2
- package/dist/report/template.js.map +1 -1
- package/dist/report/thumbnail.d.ts +76 -0
- package/dist/report/thumbnail.d.ts.map +1 -0
- package/dist/report/thumbnail.js +166 -0
- package/dist/report/thumbnail.js.map +1 -0
- package/dist/report/validate.d.ts +5 -2
- package/dist/report/validate.d.ts.map +1 -1
- package/dist/report/validate.js +42 -2
- package/dist/report/validate.js.map +1 -1
- package/dist/standalone/run.d.ts +27 -1
- package/dist/standalone/run.d.ts.map +1 -1
- package/dist/standalone/run.js +105 -2
- package/dist/standalone/run.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TestivAI Report — the thumbnail of a changed snapshot (thumb.png)
|
|
4
|
+
*
|
|
5
|
+
* A full-page diff is too tall to show inline where space is short (a pull
|
|
6
|
+
* request comment scales it to the column's width, and the change becomes a
|
|
7
|
+
* thin band). The thumbnail crops the changed area instead and puts the
|
|
8
|
+
* baseline, the current capture and the diff of it side by side:
|
|
9
|
+
*
|
|
10
|
+
* baseline | current | diff (2 px apart, at most 800×400 px)
|
|
11
|
+
*
|
|
12
|
+
* The area is on the diff canvas, which is the larger of the two sizes when
|
|
13
|
+
* they differ (witness pads both, anchored at the top left), so it is the
|
|
14
|
+
* same place in all three images; rows or columns a capture does not have
|
|
15
|
+
* are drawn as padding. Each panel is the area downscaled by area average,
|
|
16
|
+
* never upscaled. Plain RGBA arithmetic: no dependency beyond pngjs, which
|
|
17
|
+
* the caller encodes with.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.THUMBNAIL_PADDING_RGBA = exports.THUMBNAIL_LIMITS = void 0;
|
|
21
|
+
exports.thumbnailArea = thumbnailArea;
|
|
22
|
+
exports.renderThumbnail = renderThumbnail;
|
|
23
|
+
/** The bounds of a thumbnail. docs/extension-api.md quotes them. */
|
|
24
|
+
exports.THUMBNAIL_LIMITS = {
|
|
25
|
+
/** The widest strip, the three panels and both separators together. */
|
|
26
|
+
maxWidth: 800,
|
|
27
|
+
/** The tallest strip. */
|
|
28
|
+
maxHeight: 400,
|
|
29
|
+
/** Pixels of context around the changed regions, on every side. */
|
|
30
|
+
padding: 24,
|
|
31
|
+
/** How many of the largest regions (by area) the area covers. */
|
|
32
|
+
regions: 3,
|
|
33
|
+
/** Rows in the band shown when the diff has no regions. */
|
|
34
|
+
bandHeight: 400,
|
|
35
|
+
/** Pixels between two panels. */
|
|
36
|
+
separator: 2,
|
|
37
|
+
};
|
|
38
|
+
/** What a panel shows where its capture has no pixel (the padded part of the canvas). */
|
|
39
|
+
exports.THUMBNAIL_PADDING_RGBA = [175, 184, 193, 255];
|
|
40
|
+
/** The line between two panels. */
|
|
41
|
+
const SEPARATOR_RGBA = [87, 96, 106, 255];
|
|
42
|
+
/**
|
|
43
|
+
* The area of the diff canvas the thumbnail shows: the union of the up to
|
|
44
|
+
* three largest regions by area, padded and kept inside the canvas. Without
|
|
45
|
+
* a region (none detected, or none inside the canvas), a full-width band of
|
|
46
|
+
* 400 rows from the first row with a differing pixel, moved up when the
|
|
47
|
+
* canvas ends sooner so it keeps its height. Null when no pixel of the diff
|
|
48
|
+
* differs.
|
|
49
|
+
*
|
|
50
|
+
* @param regions The snapshot's `regions`, on the diff canvas.
|
|
51
|
+
* @param diff The diff image (the canvas): differing pixels are heat
|
|
52
|
+
* (yellow to red); the rest is a grey wash of the baseline,
|
|
53
|
+
* and masked areas are grey hatching.
|
|
54
|
+
*/
|
|
55
|
+
function thumbnailArea(regions, diff) {
|
|
56
|
+
const canvas = { x: 0, y: 0, width: diff.width, height: diff.height };
|
|
57
|
+
const inside = (regions ?? [])
|
|
58
|
+
.map((r) => intersect(r, canvas))
|
|
59
|
+
.filter((r) => r !== null)
|
|
60
|
+
.sort((a, b) => b.width * b.height - a.width * a.height)
|
|
61
|
+
.slice(0, exports.THUMBNAIL_LIMITS.regions);
|
|
62
|
+
if (inside.length > 0) {
|
|
63
|
+
const p = exports.THUMBNAIL_LIMITS.padding;
|
|
64
|
+
const box = inside.reduce(union);
|
|
65
|
+
return intersect({ x: box.x - p, y: box.y - p, width: box.width + 2 * p, height: box.height + 2 * p }, canvas);
|
|
66
|
+
}
|
|
67
|
+
const first = firstDifferingRow(diff);
|
|
68
|
+
if (first === null)
|
|
69
|
+
return null;
|
|
70
|
+
const height = Math.min(exports.THUMBNAIL_LIMITS.bandHeight, diff.height);
|
|
71
|
+
return { x: 0, y: Math.min(first, diff.height - height), width: diff.width, height };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The strip for `area`: baseline | current | diff, each panel the area
|
|
75
|
+
* downscaled by area average to fit the strip in 800×400 px (never
|
|
76
|
+
* upscaled), 2 px apart. `baseline` and `current` keep their own sizes:
|
|
77
|
+
* where the canvas is larger than a capture, its panel shows padding.
|
|
78
|
+
*/
|
|
79
|
+
function renderThumbnail(images, area) {
|
|
80
|
+
const { maxWidth, maxHeight, separator } = exports.THUMBNAIL_LIMITS;
|
|
81
|
+
const scale = Math.min(1, (maxWidth - 2 * separator) / (3 * area.width), maxHeight / area.height);
|
|
82
|
+
const panelWidth = Math.max(1, Math.round(area.width * scale));
|
|
83
|
+
const panelHeight = Math.max(1, Math.round(area.height * scale));
|
|
84
|
+
const width = 3 * panelWidth + 2 * separator;
|
|
85
|
+
const out = new Uint8ClampedArray(width * panelHeight * 4);
|
|
86
|
+
// Output column (row) i averages source columns (rows) [start(i), start(i + 1)):
|
|
87
|
+
// a partition of the area, since a panel is never larger than the area.
|
|
88
|
+
const starts = (size, n) => Int32Array.from({ length: n + 1 }, (_, i) => Math.floor((i * size) / n));
|
|
89
|
+
const colStart = starts(area.width, panelWidth);
|
|
90
|
+
const rowStart = starts(area.height, panelHeight);
|
|
91
|
+
const columnOf = new Int32Array(area.width);
|
|
92
|
+
for (let c = 0; c < panelWidth; c++)
|
|
93
|
+
columnOf.fill(c, colStart[c], colStart[c + 1]);
|
|
94
|
+
const sums = new Float64Array(panelWidth * 4);
|
|
95
|
+
const pad = exports.THUMBNAIL_PADDING_RGBA;
|
|
96
|
+
[images.baseline, images.current, images.diff].forEach((image, panel) => {
|
|
97
|
+
const left = panel * (panelWidth + separator);
|
|
98
|
+
// Columns of the area this capture has; the rest is padding.
|
|
99
|
+
const inWidth = Math.max(0, Math.min(area.width, image.width - area.x));
|
|
100
|
+
for (let oy = 0; oy < panelHeight; oy++) {
|
|
101
|
+
sums.fill(0);
|
|
102
|
+
// One pass over the source rows, adding each pixel to its output column.
|
|
103
|
+
for (let y = area.y + rowStart[oy]; y < area.y + rowStart[oy + 1]; y++) {
|
|
104
|
+
const hasRow = y < image.height;
|
|
105
|
+
const rowOffset = (y * image.width + area.x) * 4;
|
|
106
|
+
for (let xi = 0; xi < area.width; xi++) {
|
|
107
|
+
const s = columnOf[xi] * 4;
|
|
108
|
+
if (hasRow && xi < inWidth) {
|
|
109
|
+
const i = rowOffset + xi * 4;
|
|
110
|
+
sums[s] += image.data[i];
|
|
111
|
+
sums[s + 1] += image.data[i + 1];
|
|
112
|
+
sums[s + 2] += image.data[i + 2];
|
|
113
|
+
sums[s + 3] += image.data[i + 3];
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
sums[s] += pad[0];
|
|
117
|
+
sums[s + 1] += pad[1];
|
|
118
|
+
sums[s + 2] += pad[2];
|
|
119
|
+
sums[s + 3] += pad[3];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const rowsHere = rowStart[oy + 1] - rowStart[oy];
|
|
124
|
+
for (let ox = 0; ox < panelWidth; ox++) {
|
|
125
|
+
const n = rowsHere * (colStart[ox + 1] - colStart[ox]);
|
|
126
|
+
const o = (oy * width + left + ox) * 4;
|
|
127
|
+
for (let ch = 0; ch < 4; ch++)
|
|
128
|
+
out[o + ch] = Math.round(sums[ox * 4 + ch] / n);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
for (const left of [panelWidth, 2 * panelWidth + separator]) {
|
|
133
|
+
for (let y = 0; y < panelHeight; y++) {
|
|
134
|
+
for (let x = left; x < left + separator; x++)
|
|
135
|
+
out.set(SEPARATOR_RGBA, (y * width + x) * 4);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { data: out, width, height: panelHeight };
|
|
139
|
+
}
|
|
140
|
+
/** The first row with a heat pixel: the diff paints unchanged pixels grey (r = g = b), changed ones yellow to red. */
|
|
141
|
+
function firstDifferingRow(diff) {
|
|
142
|
+
const { data, width, height } = diff;
|
|
143
|
+
for (let y = 0; y < height; y++) {
|
|
144
|
+
for (let i = y * width * 4, end = i + width * 4; i < end; i += 4) {
|
|
145
|
+
if (data[i + 3] !== 0 && (data[i] !== data[i + 1] || data[i + 1] !== data[i + 2]))
|
|
146
|
+
return y;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
/** The overlap of two boxes in whole pixels (a fractional edge takes the pixel it touches), or null when they share none. */
|
|
152
|
+
function intersect(a, b) {
|
|
153
|
+
if (![a.x, a.y, a.width, a.height].every(Number.isFinite))
|
|
154
|
+
return null;
|
|
155
|
+
const x = Math.max(Math.floor(a.x), b.x);
|
|
156
|
+
const y = Math.max(Math.floor(a.y), b.y);
|
|
157
|
+
const right = Math.min(Math.ceil(a.x + a.width), b.x + b.width);
|
|
158
|
+
const bottom = Math.min(Math.ceil(a.y + a.height), b.y + b.height);
|
|
159
|
+
return right > x && bottom > y ? { x, y, width: right - x, height: bottom - y } : null;
|
|
160
|
+
}
|
|
161
|
+
function union(a, b) {
|
|
162
|
+
const x = Math.min(a.x, b.x);
|
|
163
|
+
const y = Math.min(a.y, b.y);
|
|
164
|
+
return { x, y, width: Math.max(a.x + a.width, b.x + b.width) - x, height: Math.max(a.y + a.height, b.y + b.height) - y };
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=thumbnail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbnail.js","sourceRoot":"","sources":["../../src/report/thumbnail.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,10 @@
|
|
|
10
10
|
* - each field must have its type (a finite number, text, a known value),
|
|
11
11
|
* within size limits, or the whole file is rejected with the field's path;
|
|
12
12
|
* - fields it does not know are dropped, at every level;
|
|
13
|
-
* - image paths (`baselinePath`, `currentPath`, `diffPath`) are
|
|
14
|
-
* from the file: the caller adds them for the images it
|
|
13
|
+
* - image paths (`baselinePath`, `currentPath`, `diffPath`, `thumbPath`) are
|
|
14
|
+
* never taken from the file: the caller adds them for the images it
|
|
15
|
+
* actually has. A `thumbPath` (schema 2.6.0) that is there must be text,
|
|
16
|
+
* or the file is rejected like for any other field.
|
|
15
17
|
*
|
|
16
18
|
* Its own module with no Node dependencies, so the GitHub Action can bundle
|
|
17
19
|
* it without the rest of the report code.
|
|
@@ -34,6 +36,7 @@ export declare const REPORT_DATA_LIMITS: {
|
|
|
34
36
|
readonly environmentKeys: 20;
|
|
35
37
|
readonly environmentValueLength: 200;
|
|
36
38
|
readonly environmentFields: 100;
|
|
39
|
+
readonly healthLines: 100;
|
|
37
40
|
};
|
|
38
41
|
export type ParsedReportData = {
|
|
39
42
|
ok: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/report/validate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/report/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EACV,UAAU,EAOX,MAAM,WAAW,CAAC;AAEnB,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,oFAAoF;AACpF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;CAerB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9F;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAO/D"}
|
package/dist/report/validate.js
CHANGED
|
@@ -11,8 +11,10 @@
|
|
|
11
11
|
* - each field must have its type (a finite number, text, a known value),
|
|
12
12
|
* within size limits, or the whole file is rejected with the field's path;
|
|
13
13
|
* - fields it does not know are dropped, at every level;
|
|
14
|
-
* - image paths (`baselinePath`, `currentPath`, `diffPath`) are
|
|
15
|
-
* from the file: the caller adds them for the images it
|
|
14
|
+
* - image paths (`baselinePath`, `currentPath`, `diffPath`, `thumbPath`) are
|
|
15
|
+
* never taken from the file: the caller adds them for the images it
|
|
16
|
+
* actually has. A `thumbPath` (schema 2.6.0) that is there must be text,
|
|
17
|
+
* or the file is rejected like for any other field.
|
|
16
18
|
*
|
|
17
19
|
* Its own module with no Node dependencies, so the GitHub Action can bundle
|
|
18
20
|
* it without the rest of the report code.
|
|
@@ -20,6 +22,7 @@
|
|
|
20
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
23
|
exports.REPORT_DATA_LIMITS = exports.SUPPORTED_SCHEMA_MAJOR = void 0;
|
|
22
24
|
exports.parseReportData = parseReportData;
|
|
25
|
+
const health_1 = require("../capture/health");
|
|
23
26
|
/** The results.json major version this reads: the major of RESULTS_SCHEMA_VERSION (generator.ts). */
|
|
24
27
|
exports.SUPPORTED_SCHEMA_MAJOR = 2;
|
|
25
28
|
/** Size limits; a file over one is rejected. Far above what a real suite writes. */
|
|
@@ -37,6 +40,7 @@ exports.REPORT_DATA_LIMITS = {
|
|
|
37
40
|
environmentKeys: 20,
|
|
38
41
|
environmentValueLength: 200,
|
|
39
42
|
environmentFields: 100,
|
|
43
|
+
healthLines: 100,
|
|
40
44
|
};
|
|
41
45
|
/**
|
|
42
46
|
* Check a parsed results.json and return only the typed data the report
|
|
@@ -166,8 +170,44 @@ function readSnapshot(value, path) {
|
|
|
166
170
|
optional(snapshot, 'baselineApprovedAt', s, path, (v, p) => text(v, p, 64));
|
|
167
171
|
optional(snapshot, 'sizeMismatch', s, path, readSizeMismatch);
|
|
168
172
|
optional(snapshot, 'environment', s, path, readSnapshotEnvironment);
|
|
173
|
+
optional(snapshot, 'captureHealth', s, path, readCaptureHealth);
|
|
174
|
+
// Checked, never kept: like the other image paths, the caller sets it for
|
|
175
|
+
// a thumbnail it actually has (schema 2.6.0).
|
|
176
|
+
if (s.thumbPath !== undefined)
|
|
177
|
+
text(s.thumbPath, at(path, 'thumbPath'));
|
|
169
178
|
return snapshot;
|
|
170
179
|
}
|
|
180
|
+
/** A snapshot's capture health (schema 2.7.0, sameOnBothSides 2.8.0); each recorded block goes through parseHealth. */
|
|
181
|
+
function readCaptureHealth(value, path) {
|
|
182
|
+
const h = record(value, path);
|
|
183
|
+
const block = (v, p) => (0, health_1.parseHealth)(v) ?? fail(p, 'expected a capture health block');
|
|
184
|
+
const lines = (v, p) => list(v, p, exports.REPORT_DATA_LIMITS.healthLines, (l, q) => text(l, q));
|
|
185
|
+
const unhealthyPath = at(path, 'unhealthy');
|
|
186
|
+
const health = {
|
|
187
|
+
unhealthy: h.unhealthy === null ? null : oneOf(h.unhealthy, unhealthyPath, ['candidate', 'baseline', 'both']),
|
|
188
|
+
reasons: lines(h.reasons, at(path, 'reasons')),
|
|
189
|
+
warnings: lines(h.warnings, at(path, 'warnings')),
|
|
190
|
+
};
|
|
191
|
+
optional(health, 'candidate', h, path, block);
|
|
192
|
+
optional(health, 'baseline', h, path, block);
|
|
193
|
+
// Schema 2.8.0: only ever true, and only when both sides are unhealthy.
|
|
194
|
+
const samePath = at(path, 'sameOnBothSides');
|
|
195
|
+
if (h.sameOnBothSides !== undefined) {
|
|
196
|
+
if (h.sameOnBothSides !== true)
|
|
197
|
+
fail(samePath, 'expected true when present');
|
|
198
|
+
if (health.unhealthy !== 'both')
|
|
199
|
+
fail(samePath, "only with unhealthy 'both'");
|
|
200
|
+
}
|
|
201
|
+
const { unhealthy, reasons, warnings } = health;
|
|
202
|
+
return {
|
|
203
|
+
...(health.candidate ? { candidate: health.candidate } : {}),
|
|
204
|
+
...(health.baseline ? { baseline: health.baseline } : {}),
|
|
205
|
+
unhealthy,
|
|
206
|
+
...(h.sameOnBothSides === true ? { sameOnBothSides: true } : {}),
|
|
207
|
+
reasons,
|
|
208
|
+
warnings,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
171
211
|
/** A snapshot's capture provenance (schema 2.5.0). */
|
|
172
212
|
function readSnapshotEnvironment(value, path) {
|
|
173
213
|
const e = record(value, path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/report/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/report/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/standalone/run.d.ts
CHANGED
|
@@ -13,8 +13,13 @@
|
|
|
13
13
|
* stay unattributed, no page shift is detected, and the computed-style check
|
|
14
14
|
* has nothing to compare (dom.styleCheck is 'unavailable', a stylesheet-only
|
|
15
15
|
* change is not ruled out, and noiseAutoPass never passes these snapshots).
|
|
16
|
+
* Capture health is recorded: the in-page probe after the capture, plus what
|
|
17
|
+
* the crawler saw on the network (failed requests, cross-origin ones
|
|
18
|
+
* included), so a page whose fonts or stylesheets failed reads as an
|
|
19
|
+
* unhealthy capture.
|
|
16
20
|
*/
|
|
17
21
|
import { type CaptureEnvironment, type HostEnvironment } from '../capture/environment';
|
|
22
|
+
import { type CaptureHealth, type ResourceFailure } from '../capture/health';
|
|
18
23
|
export interface StandaloneOptions {
|
|
19
24
|
/** Explicit page paths; disables crawling when provided. */
|
|
20
25
|
pages?: string[];
|
|
@@ -42,13 +47,15 @@ interface PageClient {
|
|
|
42
47
|
* about:blank and were lost, the font wait and reveal pass ran on it, and
|
|
43
48
|
* the capture raced the real page's entry animations. The viewport is applied
|
|
44
49
|
* before the page is requested, so the page never loads at another size.
|
|
50
|
+
* `prepare` runs before the page is requested too (watchNetwork, so every
|
|
51
|
+
* request the page makes is seen).
|
|
45
52
|
*
|
|
46
53
|
* Exported for testing.
|
|
47
54
|
*/
|
|
48
55
|
export declare function openPage(port: number, url: string, viewport?: {
|
|
49
56
|
width: number;
|
|
50
57
|
height: number;
|
|
51
|
-
}): Promise<PageClient>;
|
|
58
|
+
}, prepare?: (client: any) => void | Promise<void>): Promise<PageClient>;
|
|
52
59
|
/** Full-page screenshot via layout metrics (same technique as the Playwright adapter's CDP path). Exported for testing. */
|
|
53
60
|
export declare function captureFullPage(client: any): Promise<Buffer>;
|
|
54
61
|
/**
|
|
@@ -62,6 +69,25 @@ export declare function standaloneEnvironment(input: {
|
|
|
62
69
|
product: string | undefined;
|
|
63
70
|
host?: HostEnvironment;
|
|
64
71
|
}): CaptureEnvironment;
|
|
72
|
+
/** The failed requests a page made, as watchNetwork saw them. */
|
|
73
|
+
export interface NetworkWatch {
|
|
74
|
+
failures(): ResourceFailure[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Watch a tab's requests (CDP Network events) for capture health: each
|
|
78
|
+
* request that answered 400 or more, or failed without a response. Not the
|
|
79
|
+
* page itself (a Document), a request the page cancelled, or Chrome's
|
|
80
|
+
* net::ERR_ABORTED without a status (a 404'd stylesheet or font is reported
|
|
81
|
+
* both as a response and as aborted: the status wins). Call before the page is
|
|
82
|
+
* requested. Exported for testing.
|
|
83
|
+
*/
|
|
84
|
+
export declare function watchNetwork(client: any): Promise<NetworkWatch>;
|
|
85
|
+
/**
|
|
86
|
+
* A page's capture health: the probe's result, with the failed requests the
|
|
87
|
+
* network watch saw merged in (null when the network was not watched). Null
|
|
88
|
+
* without a valid probe result: not checked. Exported for testing.
|
|
89
|
+
*/
|
|
90
|
+
export declare function standaloneHealth(probe: unknown, failures: ResourceFailure[] | null): CaptureHealth | null;
|
|
65
91
|
export declare function runStandaloneWitness(startUrl: string, options: StandaloneOptions): Promise<void>;
|
|
66
92
|
export {};
|
|
67
93
|
//# sourceMappingURL=run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/standalone/run.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/standalone/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,EAQL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,aAAa,EAKlB,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAgB3B,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;;;;;;;;;;;;;;;GAeG;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,EAC5C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC9C,OAAO,CAAC,UAAU,CAAC,CAsBrB;AA+HD,2HAA2H;AAC3H,wBAAsB,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAmClE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,kBAAkB,CAcxI;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,IAAI,eAAe,EAAE,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAkDrE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,GAAG,aAAa,GAAG,IAAI,CAIzG;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAgIf"}
|
package/dist/standalone/run.js
CHANGED
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
* stay unattributed, no page shift is detected, and the computed-style check
|
|
15
15
|
* has nothing to compare (dom.styleCheck is 'unavailable', a stylesheet-only
|
|
16
16
|
* change is not ruled out, and noiseAutoPass never passes these snapshots).
|
|
17
|
+
* Capture health is recorded: the in-page probe after the capture, plus what
|
|
18
|
+
* the crawler saw on the network (failed requests, cross-origin ones
|
|
19
|
+
* included), so a page whose fonts or stylesheets failed reads as an
|
|
20
|
+
* unhealthy capture.
|
|
17
21
|
*/
|
|
18
22
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
19
23
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -22,11 +26,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
22
26
|
exports.openPage = openPage;
|
|
23
27
|
exports.captureFullPage = captureFullPage;
|
|
24
28
|
exports.standaloneEnvironment = standaloneEnvironment;
|
|
29
|
+
exports.watchNetwork = watchNetwork;
|
|
30
|
+
exports.standaloneHealth = standaloneHealth;
|
|
25
31
|
exports.runStandaloneWitness = runStandaloneWitness;
|
|
26
32
|
const chrome_remote_interface_1 = __importDefault(require("chrome-remote-interface"));
|
|
27
33
|
const chalk_1 = __importDefault(require("chalk"));
|
|
28
34
|
const store_1 = require("../baselines/store");
|
|
29
35
|
const environment_1 = require("../capture/environment");
|
|
36
|
+
const health_1 = require("../capture/health");
|
|
30
37
|
const local_config_1 = require("../config/local-config");
|
|
31
38
|
const generator_1 = require("../report/generator");
|
|
32
39
|
const logger_1 = require("../utils/logger");
|
|
@@ -76,15 +83,19 @@ const PAGE_LOADED = `location.href !== 'about:blank' && document.readyState ===
|
|
|
76
83
|
* about:blank and were lost, the font wait and reveal pass ran on it, and
|
|
77
84
|
* the capture raced the real page's entry animations. The viewport is applied
|
|
78
85
|
* before the page is requested, so the page never loads at another size.
|
|
86
|
+
* `prepare` runs before the page is requested too (watchNetwork, so every
|
|
87
|
+
* request the page makes is seen).
|
|
79
88
|
*
|
|
80
89
|
* Exported for testing.
|
|
81
90
|
*/
|
|
82
|
-
async function openPage(port, url, viewport) {
|
|
91
|
+
async function openPage(port, url, viewport, prepare) {
|
|
83
92
|
const target = await chrome_remote_interface_1.default.New({ port });
|
|
84
93
|
const page = { client: null, targetId: target.id };
|
|
85
94
|
try {
|
|
86
95
|
page.client = await (0, chrome_remote_interface_1.default)({ port, target: target.id });
|
|
87
96
|
await Promise.all([page.client.Page.enable(), page.client.Runtime.enable()]);
|
|
97
|
+
if (prepare)
|
|
98
|
+
await prepare(page.client);
|
|
88
99
|
if (viewport) {
|
|
89
100
|
await page.client.Emulation.setDeviceMetricsOverride({
|
|
90
101
|
width: viewport.width,
|
|
@@ -277,6 +288,79 @@ function standaloneEnvironment(input) {
|
|
|
277
288
|
render: probed?.render,
|
|
278
289
|
});
|
|
279
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Watch a tab's requests (CDP Network events) for capture health: each
|
|
293
|
+
* request that answered 400 or more, or failed without a response. Not the
|
|
294
|
+
* page itself (a Document), a request the page cancelled, or Chrome's
|
|
295
|
+
* net::ERR_ABORTED without a status (a 404'd stylesheet or font is reported
|
|
296
|
+
* both as a response and as aborted: the status wins). Call before the page is
|
|
297
|
+
* requested. Exported for testing.
|
|
298
|
+
*/
|
|
299
|
+
async function watchNetwork(client) {
|
|
300
|
+
const requests = new Map();
|
|
301
|
+
const seen = (id, url, type) => {
|
|
302
|
+
if (typeof id !== 'string')
|
|
303
|
+
return undefined;
|
|
304
|
+
let request = requests.get(id);
|
|
305
|
+
if (!request && typeof url === 'string') {
|
|
306
|
+
request = { url };
|
|
307
|
+
requests.set(id, request);
|
|
308
|
+
}
|
|
309
|
+
if (request && typeof type === 'string' && !request.type)
|
|
310
|
+
request.type = type;
|
|
311
|
+
return request;
|
|
312
|
+
};
|
|
313
|
+
client.on('Network.requestWillBeSent', (e) => {
|
|
314
|
+
const request = seen(e?.requestId, e?.request?.url, e?.type);
|
|
315
|
+
if (request && typeof e?.request?.url === 'string')
|
|
316
|
+
request.url = e.request.url; // a redirect's new address
|
|
317
|
+
});
|
|
318
|
+
client.on('Network.responseReceived', (e) => {
|
|
319
|
+
const request = seen(e?.requestId, e?.response?.url, e?.type);
|
|
320
|
+
if (request && typeof e?.response?.status === 'number')
|
|
321
|
+
request.status = e.response.status;
|
|
322
|
+
});
|
|
323
|
+
client.on('Network.loadingFailed', (e) => {
|
|
324
|
+
const request = seen(e?.requestId, undefined, e?.type);
|
|
325
|
+
if (!request)
|
|
326
|
+
return;
|
|
327
|
+
if (typeof e?.errorText === 'string')
|
|
328
|
+
request.error = e.errorText;
|
|
329
|
+
request.canceled = e?.canceled === true;
|
|
330
|
+
});
|
|
331
|
+
await client.Network.enable();
|
|
332
|
+
return {
|
|
333
|
+
failures() {
|
|
334
|
+
const out = [];
|
|
335
|
+
for (const r of requests.values()) {
|
|
336
|
+
if (r.type === 'Document' || !/^https?:/i.test(r.url))
|
|
337
|
+
continue;
|
|
338
|
+
if (r.type === 'Other' && (0, health_1.isBrowserFaviconRequest)(r.url))
|
|
339
|
+
continue;
|
|
340
|
+
const type = (0, health_1.resourceTypeFromCdp)(r.type);
|
|
341
|
+
if (r.status !== undefined) {
|
|
342
|
+
if (r.status >= 400)
|
|
343
|
+
out.push({ url: r.url, type, status: r.status });
|
|
344
|
+
}
|
|
345
|
+
else if (r.error && !r.canceled && r.error !== 'net::ERR_ABORTED') {
|
|
346
|
+
out.push({ url: r.url, type, status: 0, error: r.error });
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return out;
|
|
350
|
+
},
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* A page's capture health: the probe's result, with the failed requests the
|
|
355
|
+
* network watch saw merged in (null when the network was not watched). Null
|
|
356
|
+
* without a valid probe result: not checked. Exported for testing.
|
|
357
|
+
*/
|
|
358
|
+
function standaloneHealth(probe, failures) {
|
|
359
|
+
const health = (0, health_1.parseHealth)(probe);
|
|
360
|
+
if (!health)
|
|
361
|
+
return null;
|
|
362
|
+
return failures ? (0, health_1.mergeResourceFailures)(health, failures) : health;
|
|
363
|
+
}
|
|
280
364
|
async function runStandaloneWitness(startUrl, options) {
|
|
281
365
|
const projectRoot = process.cwd();
|
|
282
366
|
const config = (0, local_config_1.loadLocalConfig)(projectRoot);
|
|
@@ -315,8 +399,16 @@ async function runStandaloneWitness(startUrl, options) {
|
|
|
315
399
|
// This crawler only drives Chrome, so "separate" keys by chromium.
|
|
316
400
|
const name = (0, environment_1.applyEnvironmentPolicyToName)((0, crawl_1.pageNameFromUrl)(url), { browser: { name: 'chromium' }, os: { platform: process.platform } }, config.environmentPolicy);
|
|
317
401
|
let page;
|
|
402
|
+
let network = null;
|
|
318
403
|
try {
|
|
319
|
-
page = await openPage(port, url, viewport)
|
|
404
|
+
page = await openPage(port, url, viewport, async (client) => {
|
|
405
|
+
try {
|
|
406
|
+
network = await watchNetwork(client);
|
|
407
|
+
}
|
|
408
|
+
catch {
|
|
409
|
+
network = null; // the probe still records what the page can see
|
|
410
|
+
}
|
|
411
|
+
});
|
|
320
412
|
// Capture provenance: measured before anything is injected.
|
|
321
413
|
const probe = await evaluate(page.client, environment_1.RENDER_PROBE_EXPRESSION).catch(() => undefined);
|
|
322
414
|
const product = await Promise.resolve(page.client.Browser?.getVersion?.())
|
|
@@ -326,6 +418,8 @@ async function runStandaloneWitness(startUrl, options) {
|
|
|
326
418
|
await revealPage(page.client);
|
|
327
419
|
const screenshot = await captureFullPage(page.client);
|
|
328
420
|
const dom = await evaluate(page.client, domSnapshotExpression(config.ignoreSelectors ?? []));
|
|
421
|
+
// Capture health, read after the capture so it sees what loaded.
|
|
422
|
+
const healthProbe = await evaluate(page.client, health_1.HEALTH_PROBE_EXPRESSION).catch(() => undefined);
|
|
329
423
|
store.writeTemp(name, screenshot, typeof dom === 'string' ? dom : undefined);
|
|
330
424
|
try {
|
|
331
425
|
store.writeTempMetadata(name, { name, environment: standaloneEnvironment({ probe, product }) });
|
|
@@ -333,6 +427,15 @@ async function runStandaloneWitness(startUrl, options) {
|
|
|
333
427
|
catch {
|
|
334
428
|
// without it the compare cannot tell rendering drift from noise for this page
|
|
335
429
|
}
|
|
430
|
+
try {
|
|
431
|
+
const watched = network;
|
|
432
|
+
const health = standaloneHealth(healthProbe, watched ? watched.failures() : null);
|
|
433
|
+
if (health)
|
|
434
|
+
store.writeTempMetadata(name, { health });
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
// no health only means this page's capture health was not checked
|
|
438
|
+
}
|
|
336
439
|
captured.push(name);
|
|
337
440
|
console.log(chalk_1.default.gray(` ✓ ${name} (${url})`));
|
|
338
441
|
}
|