@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.
Files changed (93) hide show
  1. package/README.md +9 -2
  2. package/dist/baselines/store.d.ts +14 -0
  3. package/dist/baselines/store.d.ts.map +1 -1
  4. package/dist/baselines/store.js +12 -4
  5. package/dist/baselines/store.js.map +1 -1
  6. package/dist/capture/element-map.d.ts +23 -2
  7. package/dist/capture/element-map.d.ts.map +1 -1
  8. package/dist/capture/element-map.js +102 -4
  9. package/dist/capture/element-map.js.map +1 -1
  10. package/dist/capture/environment.d.ts +26 -0
  11. package/dist/capture/environment.d.ts.map +1 -1
  12. package/dist/capture/environment.js +4 -0
  13. package/dist/capture/environment.js.map +1 -1
  14. package/dist/capture/health-limits.d.ts +14 -0
  15. package/dist/capture/health-limits.d.ts.map +1 -0
  16. package/dist/capture/health-limits.js +17 -0
  17. package/dist/capture/health-limits.js.map +1 -0
  18. package/dist/capture/health.d.ts +124 -0
  19. package/dist/capture/health.d.ts.map +1 -0
  20. package/dist/capture/health.js +327 -0
  21. package/dist/capture/health.js.map +1 -0
  22. package/dist/capture/native-app.d.ts +77 -0
  23. package/dist/capture/native-app.d.ts.map +1 -0
  24. package/dist/capture/native-app.js +172 -0
  25. package/dist/capture/native-app.js.map +1 -0
  26. package/dist/capture/shard.d.ts +17 -0
  27. package/dist/capture/shard.d.ts.map +1 -1
  28. package/dist/capture/shard.js +8 -1
  29. package/dist/capture/shard.js.map +1 -1
  30. package/dist/commands/approve.d.ts.map +1 -1
  31. package/dist/commands/approve.js +20 -0
  32. package/dist/commands/approve.js.map +1 -1
  33. package/dist/commands/merge-captures.d.ts.map +1 -1
  34. package/dist/commands/merge-captures.js +10 -0
  35. package/dist/commands/merge-captures.js.map +1 -1
  36. package/dist/config/local-config.d.ts +13 -0
  37. package/dist/config/local-config.d.ts.map +1 -1
  38. package/dist/config/local-config.js.map +1 -1
  39. package/dist/config/validate-config.d.ts.map +1 -1
  40. package/dist/config/validate-config.js +10 -0
  41. package/dist/config/validate-config.js.map +1 -1
  42. package/dist/diff/attribution.d.ts +16 -2
  43. package/dist/diff/attribution.d.ts.map +1 -1
  44. package/dist/diff/attribution.js +5 -4
  45. package/dist/diff/attribution.js.map +1 -1
  46. package/dist/diff/dom-diff.d.ts.map +1 -1
  47. package/dist/diff/dom-diff.js +7 -1
  48. package/dist/diff/dom-diff.js.map +1 -1
  49. package/dist/index.d.ts +8 -4
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +24 -2
  52. package/dist/index.js.map +1 -1
  53. package/dist/report/compare.d.ts +11 -1
  54. package/dist/report/compare.d.ts.map +1 -1
  55. package/dist/report/compare.js +86 -15
  56. package/dist/report/compare.js.map +1 -1
  57. package/dist/report/environment.d.ts.map +1 -1
  58. package/dist/report/environment.js +25 -2
  59. package/dist/report/environment.js.map +1 -1
  60. package/dist/report/generator.d.ts +15 -2
  61. package/dist/report/generator.d.ts.map +1 -1
  62. package/dist/report/generator.js +15 -2
  63. package/dist/report/generator.js.map +1 -1
  64. package/dist/report/health.d.ts +115 -0
  65. package/dist/report/health.d.ts.map +1 -0
  66. package/dist/report/health.js +279 -0
  67. package/dist/report/health.js.map +1 -0
  68. package/dist/report/index.d.ts +5 -1
  69. package/dist/report/index.d.ts.map +1 -1
  70. package/dist/report/index.js +15 -1
  71. package/dist/report/index.js.map +1 -1
  72. package/dist/report/results.d.ts +40 -1
  73. package/dist/report/results.d.ts.map +1 -1
  74. package/dist/report/shift-check.d.ts +40 -0
  75. package/dist/report/shift-check.d.ts.map +1 -0
  76. package/dist/report/shift-check.js +109 -0
  77. package/dist/report/shift-check.js.map +1 -0
  78. package/dist/report/template.d.ts.map +1 -1
  79. package/dist/report/template.js +53 -2
  80. package/dist/report/template.js.map +1 -1
  81. package/dist/report/thumbnail.d.ts +76 -0
  82. package/dist/report/thumbnail.d.ts.map +1 -0
  83. package/dist/report/thumbnail.js +166 -0
  84. package/dist/report/thumbnail.js.map +1 -0
  85. package/dist/report/validate.d.ts +5 -2
  86. package/dist/report/validate.d.ts.map +1 -1
  87. package/dist/report/validate.js +42 -2
  88. package/dist/report/validate.js.map +1 -1
  89. package/dist/standalone/run.d.ts +27 -1
  90. package/dist/standalone/run.d.ts.map +1 -1
  91. package/dist/standalone/run.js +105 -2
  92. package/dist/standalone/run.js.map +1 -1
  93. 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":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAmDH,sCAgBC;AAQD,0CA8DC;AAvID,oEAAoE;AACvD,QAAA,gBAAgB,GAAG;IAC9B,uEAAuE;IACvE,QAAQ,EAAE,GAAG;IACb,yBAAyB;IACzB,SAAS,EAAE,GAAG;IACd,mEAAmE;IACnE,OAAO,EAAE,EAAE;IACX,iEAAiE;IACjE,OAAO,EAAE,CAAC;IACV,2DAA2D;IAC3D,UAAU,EAAE,GAAG;IACf,iCAAiC;IACjC,SAAS,EAAE,CAAC;CACJ,CAAC;AAEX,yFAAyF;AAC5E,QAAA,sBAAsB,GAA8C,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEtG,mCAAmC;AACnC,MAAM,cAAc,GAA8C,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAgBrF;;;;;;;;;;;;GAYG;AACH,SAAgB,aAAa,CAAC,OAA4C,EAAE,IAAe;IACzF,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;SACvD,KAAK,CAAC,CAAC,EAAE,wBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,wBAAgB,CAAC,OAAO,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,SAAS,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACjH,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;AACvF,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAC7B,MAAoE,EACpE,IAAkB;IAElB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,wBAAgB,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;IAE3D,iFAAiF;IACjF,wEAAwE;IACxE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,8BAAsB,CAAC;IAEnC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACtE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QAC9C,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,yEAAyE;YACzE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBAChC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,MAAM,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;wBAC3B,MAAM,CAAC,GAAG,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC7B,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACzB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnC,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAClB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YACjD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvD,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACvC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE;oBAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,sHAAsH;AACtH,SAAS,iBAAiB,CAAC,IAAe;IACxC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6HAA6H;AAC7H,SAAS,SAAS,CAAC,CAAe,EAAE,CAAe;IACjD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACnE,OAAO,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC;AAED,SAAS,KAAK,CAAC,CAAe,EAAE,CAAe;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3H,CAAC"}
@@ -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 never taken
14
- * from the file: the caller adds them for the images it actually has.
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;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAyF,MAAM,WAAW,CAAC;AAEnI,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,oFAAoF;AACpF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAcrB,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"}
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"}
@@ -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 never taken
15
- * from the file: the caller adds them for the images it actually has.
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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"}
@@ -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;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAQL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAgBhC,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;;;;;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,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAgHf"}
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"}
@@ -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
  }