@testivai/witness 2.4.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 (106) hide show
  1. package/README.md +9 -2
  2. package/dist/baselines/store.d.ts +31 -0
  3. package/dist/baselines/store.d.ts.map +1 -1
  4. package/dist/baselines/store.js +38 -1
  5. package/dist/baselines/store.js.map +1 -1
  6. package/dist/bin/testivai.js +2 -0
  7. package/dist/bin/testivai.js.map +1 -1
  8. package/dist/capture/element-map.d.ts +23 -2
  9. package/dist/capture/element-map.d.ts.map +1 -1
  10. package/dist/capture/element-map.js +102 -4
  11. package/dist/capture/element-map.js.map +1 -1
  12. package/dist/capture/environment.d.ts +243 -0
  13. package/dist/capture/environment.d.ts.map +1 -0
  14. package/dist/capture/environment.js +403 -0
  15. package/dist/capture/environment.js.map +1 -0
  16. package/dist/capture/health-limits.d.ts +14 -0
  17. package/dist/capture/health-limits.d.ts.map +1 -0
  18. package/dist/capture/health-limits.js +17 -0
  19. package/dist/capture/health-limits.js.map +1 -0
  20. package/dist/capture/health.d.ts +124 -0
  21. package/dist/capture/health.d.ts.map +1 -0
  22. package/dist/capture/health.js +327 -0
  23. package/dist/capture/health.js.map +1 -0
  24. package/dist/capture/native-app.d.ts +77 -0
  25. package/dist/capture/native-app.d.ts.map +1 -0
  26. package/dist/capture/native-app.js +172 -0
  27. package/dist/capture/native-app.js.map +1 -0
  28. package/dist/capture/shard.d.ts +17 -0
  29. package/dist/capture/shard.d.ts.map +1 -1
  30. package/dist/capture/shard.js +8 -1
  31. package/dist/capture/shard.js.map +1 -1
  32. package/dist/commands/approve.d.ts.map +1 -1
  33. package/dist/commands/approve.js +20 -0
  34. package/dist/commands/approve.js.map +1 -1
  35. package/dist/commands/env.d.ts +37 -0
  36. package/dist/commands/env.d.ts.map +1 -0
  37. package/dist/commands/env.js +113 -0
  38. package/dist/commands/env.js.map +1 -0
  39. package/dist/commands/merge-captures.d.ts.map +1 -1
  40. package/dist/commands/merge-captures.js +10 -0
  41. package/dist/commands/merge-captures.js.map +1 -1
  42. package/dist/config/local-config.d.ts +27 -0
  43. package/dist/config/local-config.d.ts.map +1 -1
  44. package/dist/config/local-config.js +1 -0
  45. package/dist/config/local-config.js.map +1 -1
  46. package/dist/config/validate-config.d.ts.map +1 -1
  47. package/dist/config/validate-config.js +22 -0
  48. package/dist/config/validate-config.js.map +1 -1
  49. package/dist/diff/attribution.d.ts +16 -2
  50. package/dist/diff/attribution.d.ts.map +1 -1
  51. package/dist/diff/attribution.js +5 -4
  52. package/dist/diff/attribution.js.map +1 -1
  53. package/dist/diff/dom-diff.d.ts.map +1 -1
  54. package/dist/diff/dom-diff.js +7 -1
  55. package/dist/diff/dom-diff.js.map +1 -1
  56. package/dist/index.d.ts +10 -4
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +42 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/report/anchor.d.ts +18 -0
  61. package/dist/report/anchor.d.ts.map +1 -0
  62. package/dist/report/anchor.js +51 -0
  63. package/dist/report/anchor.js.map +1 -0
  64. package/dist/report/compare.d.ts +18 -1
  65. package/dist/report/compare.d.ts.map +1 -1
  66. package/dist/report/compare.js +107 -16
  67. package/dist/report/compare.js.map +1 -1
  68. package/dist/report/environment.d.ts +101 -0
  69. package/dist/report/environment.d.ts.map +1 -0
  70. package/dist/report/environment.js +354 -0
  71. package/dist/report/environment.js.map +1 -0
  72. package/dist/report/generator.d.ts +20 -2
  73. package/dist/report/generator.d.ts.map +1 -1
  74. package/dist/report/generator.js +46 -6
  75. package/dist/report/generator.js.map +1 -1
  76. package/dist/report/health.d.ts +115 -0
  77. package/dist/report/health.d.ts.map +1 -0
  78. package/dist/report/health.js +279 -0
  79. package/dist/report/health.js.map +1 -0
  80. package/dist/report/index.d.ts +9 -2
  81. package/dist/report/index.d.ts.map +1 -1
  82. package/dist/report/index.js +25 -1
  83. package/dist/report/index.js.map +1 -1
  84. package/dist/report/results.d.ts +73 -1
  85. package/dist/report/results.d.ts.map +1 -1
  86. package/dist/report/shift-check.d.ts +40 -0
  87. package/dist/report/shift-check.d.ts.map +1 -0
  88. package/dist/report/shift-check.js +109 -0
  89. package/dist/report/shift-check.js.map +1 -0
  90. package/dist/report/template.d.ts +28 -1
  91. package/dist/report/template.d.ts.map +1 -1
  92. package/dist/report/template.js +179 -16
  93. package/dist/report/template.js.map +1 -1
  94. package/dist/report/thumbnail.d.ts +76 -0
  95. package/dist/report/thumbnail.d.ts.map +1 -0
  96. package/dist/report/thumbnail.js +166 -0
  97. package/dist/report/thumbnail.js.map +1 -0
  98. package/dist/report/validate.d.ts +53 -0
  99. package/dist/report/validate.d.ts.map +1 -0
  100. package/dist/report/validate.js +383 -0
  101. package/dist/report/validate.js.map +1 -0
  102. package/dist/standalone/run.d.ts +39 -1
  103. package/dist/standalone/run.d.ts.map +1 -1
  104. package/dist/standalone/run.js +142 -3
  105. package/dist/standalone/run.js.map +1 -1
  106. package/package.json +1 -1
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ /**
3
+ * Read a results.json you did not produce.
4
+ *
5
+ * A published report is rebuilt from results.json, and that file can come
6
+ * from a CI run the reader does not control (a fork's pull request). The
7
+ * template escapes every string it shows; it does not check that numbers
8
+ * are numbers, that enums hold known values, or that the data has the
9
+ * expected shape. This does, for every field the report reads:
10
+ *
11
+ * - each field must have its type (a finite number, text, a known value),
12
+ * within size limits, or the whole file is rejected with the field's path;
13
+ * - fields it does not know are dropped, at every level;
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.
18
+ *
19
+ * Its own module with no Node dependencies, so the GitHub Action can bundle
20
+ * it without the rest of the report code.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.REPORT_DATA_LIMITS = exports.SUPPORTED_SCHEMA_MAJOR = void 0;
24
+ exports.parseReportData = parseReportData;
25
+ const health_1 = require("../capture/health");
26
+ /** The results.json major version this reads: the major of RESULTS_SCHEMA_VERSION (generator.ts). */
27
+ exports.SUPPORTED_SCHEMA_MAJOR = 2;
28
+ /** Size limits; a file over one is rejected. Far above what a real suite writes. */
29
+ exports.REPORT_DATA_LIMITS = {
30
+ snapshots: 5000,
31
+ nameLength: 300,
32
+ textLength: 2000,
33
+ regions: 1000,
34
+ elementsPerRegion: 10,
35
+ styleElements: 200,
36
+ masks: 500,
37
+ maskWarnings: 200,
38
+ maskSpecKeys: 50,
39
+ missingBaselines: 5000,
40
+ environmentKeys: 20,
41
+ environmentValueLength: 200,
42
+ environmentFields: 100,
43
+ healthLines: 100,
44
+ };
45
+ /**
46
+ * Check a parsed results.json and return only the typed data the report
47
+ * needs, or the reason it cannot be shown.
48
+ */
49
+ function parseReportData(json) {
50
+ try {
51
+ return { ok: true, data: readReport(json) };
52
+ }
53
+ catch (error) {
54
+ if (error instanceof Invalid)
55
+ return { ok: false, reason: error.message };
56
+ throw error;
57
+ }
58
+ }
59
+ class Invalid extends Error {
60
+ }
61
+ function fail(path, problem) {
62
+ throw new Invalid(`${path || 'results.json'}: ${problem}`);
63
+ }
64
+ function at(path, key) {
65
+ return path ? `${path}.${key}` : key;
66
+ }
67
+ function isRecord(value) {
68
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
69
+ }
70
+ function record(value, path) {
71
+ if (!isRecord(value))
72
+ fail(path, 'expected an object');
73
+ return value;
74
+ }
75
+ function num(value, path, opts = {}) {
76
+ if (typeof value !== 'number' || !Number.isFinite(value))
77
+ fail(path, 'expected a finite number');
78
+ if (opts.min !== undefined && value < opts.min)
79
+ fail(path, `expected at least ${opts.min}`);
80
+ if (opts.whole && !Number.isInteger(value))
81
+ fail(path, 'expected a whole number');
82
+ return value;
83
+ }
84
+ function count(value, path) {
85
+ return num(value, path, { min: 0, whole: true });
86
+ }
87
+ function text(value, path, max = exports.REPORT_DATA_LIMITS.textLength, min = 0) {
88
+ if (typeof value !== 'string')
89
+ fail(path, 'expected text');
90
+ if (value.length < min)
91
+ fail(path, 'expected non-empty text');
92
+ if (value.length > max)
93
+ fail(path, `longer than ${max} characters`);
94
+ return value;
95
+ }
96
+ function bool(value, path) {
97
+ if (typeof value !== 'boolean')
98
+ fail(path, 'expected true or false');
99
+ return value;
100
+ }
101
+ function oneOf(value, path, allowed) {
102
+ if (typeof value !== 'string' || !allowed.includes(value)) {
103
+ fail(path, `expected one of ${allowed.join(', ')}`);
104
+ }
105
+ return value;
106
+ }
107
+ function list(value, path, max, item) {
108
+ if (!Array.isArray(value))
109
+ fail(path, 'expected a list');
110
+ if (value.length > max)
111
+ fail(path, `more than ${max} items`);
112
+ return value.map((v, i) => item(v, `${path}[${i}]`));
113
+ }
114
+ /** Read `source[key]` when present; set it on `target` only when it is. */
115
+ function optional(target, key, source, path, read) {
116
+ const value = source[key];
117
+ if (value !== undefined)
118
+ target[key] = read(value, at(path, key));
119
+ }
120
+ function readReport(json) {
121
+ const root = record(json, '');
122
+ const version = text(root.version, 'version', 32);
123
+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
124
+ if (!match)
125
+ fail('version', 'expected a schema version like 2.4.0');
126
+ const major = Number(match[1]);
127
+ if (major > exports.SUPPORTED_SCHEMA_MAJOR) {
128
+ fail('version', `format ${version} is newer than this TestivAI can show (it reads ${exports.SUPPORTED_SCHEMA_MAJOR}.x); open the report ZIP, or update TestivAI`);
129
+ }
130
+ if (major < exports.SUPPORTED_SCHEMA_MAJOR) {
131
+ fail('version', `format ${version} is older than this TestivAI can show (it reads ${exports.SUPPORTED_SCHEMA_MAJOR}.x); open the report ZIP`);
132
+ }
133
+ const data = {
134
+ version,
135
+ timestamp: text(root.timestamp, 'timestamp', 64),
136
+ summary: readSummary(root.summary, 'summary'),
137
+ snapshots: list(root.snapshots, 'snapshots', exports.REPORT_DATA_LIMITS.snapshots, readSnapshot),
138
+ };
139
+ optional(data, 'missingBaselines', root, '', (v, p) => list(v, p, exports.REPORT_DATA_LIMITS.missingBaselines, (n, q) => text(n, q, exports.REPORT_DATA_LIMITS.nameLength, 1)));
140
+ optional(data, 'environment', root, '', (v, p) => readEnvironmentBlock(v, p));
141
+ return data;
142
+ }
143
+ function readSummary(value, path) {
144
+ const s = record(value, path);
145
+ const summary = {
146
+ total: count(s.total, at(path, 'total')),
147
+ passed: count(s.passed, at(path, 'passed')),
148
+ changed: count(s.changed, at(path, 'changed')),
149
+ newSnapshots: count(s.newSnapshots, at(path, 'newSnapshots')),
150
+ };
151
+ optional(summary, 'missing', s, path, count);
152
+ return summary;
153
+ }
154
+ const STATUSES = ['passed', 'changed', 'new'];
155
+ function readSnapshot(value, path) {
156
+ const s = record(value, path);
157
+ const snapshot = {
158
+ name: text(s.name, at(path, 'name'), exports.REPORT_DATA_LIMITS.nameLength, 1),
159
+ status: oneOf(s.status, at(path, 'status'), STATUSES),
160
+ diffPercent: num(s.diffPercent, at(path, 'diffPercent'), { min: 0 }),
161
+ diffCount: count(s.diffCount, at(path, 'diffCount')),
162
+ totalPixels: count(s.totalPixels, at(path, 'totalPixels')),
163
+ };
164
+ optional(snapshot, 'dom', s, path, readDom);
165
+ optional(snapshot, 'regions', s, path, (v, p) => list(v, p, exports.REPORT_DATA_LIMITS.regions, readRegion));
166
+ optional(snapshot, 'masks', s, path, (v, p) => list(v, p, exports.REPORT_DATA_LIMITS.masks, readMask));
167
+ optional(snapshot, 'maskWarnings', s, path, (v, p) => list(v, p, exports.REPORT_DATA_LIMITS.maskWarnings, (w, q) => text(w, q)));
168
+ optional(snapshot, 'pageShift', s, path, readPageShift);
169
+ optional(snapshot, 'autoPassed', s, path, (v, p) => oneOf(v, p, ['threshold', 'noise', 'shift']));
170
+ optional(snapshot, 'baselineApprovedAt', s, path, (v, p) => text(v, p, 64));
171
+ optional(snapshot, 'sizeMismatch', s, path, readSizeMismatch);
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'));
178
+ return snapshot;
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
+ }
211
+ /** A snapshot's capture provenance (schema 2.5.0). */
212
+ function readSnapshotEnvironment(value, path) {
213
+ const e = record(value, path);
214
+ const fields = (v, p) => list(v, p, exports.REPORT_DATA_LIMITS.environmentFields, (f, q) => text(f, q, 100, 1));
215
+ const env = {
216
+ delta: fields(e.delta, at(path, 'delta')),
217
+ renderingDelta: fields(e.renderingDelta, at(path, 'renderingDelta')),
218
+ };
219
+ optional(env, 'baseline', e, path, readCaptureEnvironment);
220
+ optional(env, 'candidate', e, path, readCaptureEnvironment);
221
+ optional(env, 'policy', e, path, (v, p) => oneOf(v, p, ['strict']));
222
+ return env;
223
+ }
224
+ /**
225
+ * One capture's recorded environment: the fields the report reads directly
226
+ * must be there (as readEnvironment in capture/environment.ts requires), and
227
+ * the rest has the plain shape readEnvironmentBlock allows.
228
+ */
229
+ function readCaptureEnvironment(value, path) {
230
+ const block = readEnvironmentBlock(value, path);
231
+ const section = (name) => record(block[name], at(path, name));
232
+ text(section('os').platform, at(path, 'os.platform'), exports.REPORT_DATA_LIMITS.environmentValueLength, 1);
233
+ text(section('browser').name, at(path, 'browser.name'), exports.REPORT_DATA_LIMITS.environmentValueLength, 1);
234
+ text(section('adapter').captureMethod, at(path, 'adapter.captureMethod'), exports.REPORT_DATA_LIMITS.environmentValueLength, 1);
235
+ return block;
236
+ }
237
+ const ENVIRONMENT_KEY = /^[A-Za-z][A-Za-z0-9_]{0,49}$/;
238
+ /**
239
+ * An environment block as the report reads it (report/environment.ts
240
+ * flattens it two levels deep): sections that are a plain value, or an
241
+ * object of plain values; `render.viewport` is the one nested object
242
+ * ({ width, height }). Plain values are short text, finite numbers, true or
243
+ * false, or null. Fields it does not know are kept when they have this
244
+ * shape, so a newer adapter's extra fields still show; anything deeper, a
245
+ * list, or over the size limits is rejected.
246
+ */
247
+ function readEnvironmentBlock(value, path) {
248
+ const plain = (v, p) => {
249
+ if (v === null || typeof v === 'boolean')
250
+ return v;
251
+ if (typeof v === 'number')
252
+ return num(v, p);
253
+ if (typeof v === 'string')
254
+ return text(v, p, exports.REPORT_DATA_LIMITS.environmentValueLength);
255
+ fail(p, 'expected text, a number, true/false or null');
256
+ };
257
+ const keys = (o, p) => {
258
+ const k = Object.keys(o);
259
+ if (k.length > exports.REPORT_DATA_LIMITS.environmentKeys)
260
+ fail(p, `more than ${exports.REPORT_DATA_LIMITS.environmentKeys} fields`);
261
+ for (const key of k)
262
+ if (!ENVIRONMENT_KEY.test(key))
263
+ fail(p, `field name ${JSON.stringify(key.slice(0, 50))} is not a plain name`);
264
+ return k;
265
+ };
266
+ const block = record(value, path);
267
+ const out = {};
268
+ for (const sectionName of keys(block, path)) {
269
+ const sectionPath = at(path, sectionName);
270
+ const section = block[sectionName];
271
+ if (!isRecord(section)) {
272
+ out[sectionName] = plain(section, sectionPath);
273
+ continue;
274
+ }
275
+ const inner = {};
276
+ for (const field of keys(section, sectionPath)) {
277
+ const fieldPath = at(sectionPath, field);
278
+ const v = section[field];
279
+ if (sectionName === 'render' && field === 'viewport') {
280
+ const vp = record(v, fieldPath);
281
+ inner[field] = { width: num(vp.width, at(fieldPath, 'width'), { min: 0 }), height: num(vp.height, at(fieldPath, 'height'), { min: 0 }) };
282
+ }
283
+ else {
284
+ inner[field] = plain(v, fieldPath);
285
+ }
286
+ }
287
+ out[sectionName] = inner;
288
+ }
289
+ return out;
290
+ }
291
+ function readDom(value, path) {
292
+ const d = record(value, path);
293
+ const dom = {
294
+ changed: bool(d.changed, at(path, 'changed')),
295
+ noiseHint: bool(d.noiseHint, at(path, 'noiseHint')),
296
+ summary: d.summary === undefined || d.summary === null ? null : readDomSummary(d.summary, at(path, 'summary')),
297
+ };
298
+ optional(dom, 'styleCheck', d, path, (v, p) => oneOf(v, p, ['match', 'mismatch', 'unavailable']));
299
+ optional(dom, 'styleChanges', d, path, (v, p) => {
300
+ const c = record(v, p);
301
+ return {
302
+ count: count(c.count, at(p, 'count')),
303
+ elements: list(c.elements, at(p, 'elements'), exports.REPORT_DATA_LIMITS.styleElements, (e, q) => text(e, q)),
304
+ };
305
+ });
306
+ return dom;
307
+ }
308
+ function readDomSummary(value, path) {
309
+ const s = record(value, path);
310
+ const summary = {
311
+ added: count(s.added, at(path, 'added')),
312
+ removed: count(s.removed, at(path, 'removed')),
313
+ attributeChanges: count(s.attributeChanges, at(path, 'attributeChanges')),
314
+ };
315
+ optional(summary, 'textChanges', s, path, count);
316
+ return summary;
317
+ }
318
+ function readRegion(value, path) {
319
+ const r = record(value, path);
320
+ const region = {
321
+ x: num(r.x, at(path, 'x')),
322
+ y: num(r.y, at(path, 'y')),
323
+ width: num(r.width, at(path, 'width'), { min: 0 }),
324
+ height: num(r.height, at(path, 'height'), { min: 0 }),
325
+ diffPixels: num(r.diffPixels, at(path, 'diffPixels'), { min: 0 }),
326
+ diffPercent: num(r.diffPercent, at(path, 'diffPercent'), { min: 0 }),
327
+ };
328
+ optional(region, 'classification', r, path, (v, p) => oneOf(v, p, ['shift', 'change']));
329
+ optional(region, 'shift', r, path, (v, p) => {
330
+ const s = record(v, p);
331
+ return { dx: num(s.dx, at(p, 'dx')), dy: num(s.dy, at(p, 'dy')) };
332
+ });
333
+ optional(region, 'elements', r, path, (v, p) => list(v, p, exports.REPORT_DATA_LIMITS.elementsPerRegion, (e, q) => {
334
+ const el = record(e, q);
335
+ return { selector: text(el.selector, at(q, 'selector')), role: oneOf(el.role, at(q, 'role'), ['shifted', 'changed']) };
336
+ }));
337
+ return region;
338
+ }
339
+ function readMask(value, path) {
340
+ const m = record(value, path);
341
+ const source = record(m.source, at(path, 'source'));
342
+ const sourcePath = at(path, 'source');
343
+ const mask = {
344
+ x: num(m.x, at(path, 'x')),
345
+ y: num(m.y, at(path, 'y')),
346
+ width: num(m.width, at(path, 'width'), { min: 0 }),
347
+ height: num(m.height, at(path, 'height'), { min: 0 }),
348
+ source: {
349
+ type: oneOf(source.type, at(sourcePath, 'type'), ['selector', 'region', 'edge']),
350
+ spec: readMaskSpec(source.spec, at(sourcePath, 'spec')),
351
+ origin: oneOf(source.origin, at(sourcePath, 'origin'), ['config', 'call']),
352
+ },
353
+ };
354
+ return mask;
355
+ }
356
+ function readMaskSpec(value, path) {
357
+ if (typeof value === 'string')
358
+ return text(value, path);
359
+ const spec = record(value, path);
360
+ const keys = Object.keys(spec);
361
+ if (keys.length > exports.REPORT_DATA_LIMITS.maskSpecKeys)
362
+ fail(path, `more than ${exports.REPORT_DATA_LIMITS.maskSpecKeys} keys`);
363
+ const out = {};
364
+ for (const key of keys) {
365
+ text(key, `${path} key`, 50, 1);
366
+ const v = spec[key];
367
+ out[key] = typeof v === 'number' ? num(v, at(path, key)) : text(v, at(path, key), 200);
368
+ }
369
+ return out;
370
+ }
371
+ function readPageShift(value, path) {
372
+ const p = record(value, path);
373
+ return { dy: num(p.dy, at(path, 'dy')), belowY: num(p.belowY, at(path, 'belowY')), count: count(p.count, at(path, 'count')) };
374
+ }
375
+ function readSizeMismatch(value, path) {
376
+ const s = record(value, path);
377
+ const size = (v, p) => {
378
+ const d = record(v, p);
379
+ return { width: num(d.width, at(p, 'width'), { min: 1 }), height: num(d.height, at(p, 'height'), { min: 1 }) };
380
+ };
381
+ return { baseline: size(s.baseline, at(path, 'baseline')), candidate: size(s.candidate, at(path, 'candidate')) };
382
+ }
383
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/report/validate.ts"],"names":[],"mappings":"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"}
@@ -13,7 +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
  */
21
+ import { type CaptureEnvironment, type HostEnvironment } from '../capture/environment';
22
+ import { type CaptureHealth, type ResourceFailure } from '../capture/health';
17
23
  export interface StandaloneOptions {
18
24
  /** Explicit page paths; disables crawling when provided. */
19
25
  pages?: string[];
@@ -41,15 +47,47 @@ interface PageClient {
41
47
  * about:blank and were lost, the font wait and reveal pass ran on it, and
42
48
  * the capture raced the real page's entry animations. The viewport is applied
43
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).
44
52
  *
45
53
  * Exported for testing.
46
54
  */
47
55
  export declare function openPage(port: number, url: string, viewport?: {
48
56
  width: number;
49
57
  height: number;
50
- }): Promise<PageClient>;
58
+ }, prepare?: (client: any) => void | Promise<void>): Promise<PageClient>;
51
59
  /** Full-page screenshot via layout metrics (same technique as the Playwright adapter's CDP path). Exported for testing. */
52
60
  export declare function captureFullPage(client: any): Promise<Buffer>;
61
+ /**
62
+ * Capture provenance for `testivai witness <url>`: its own headless Chrome,
63
+ * full-page CDP screenshots, no test framework. The version comes from CDP
64
+ * Browser.getVersion's product ("HeadlessChrome/141.0.7390.54"), else the
65
+ * probe's user agent; never guessed.
66
+ */
67
+ export declare function standaloneEnvironment(input: {
68
+ probe: unknown;
69
+ product: string | undefined;
70
+ host?: HostEnvironment;
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;
53
91
  export declare function runStandaloneWitness(startUrl: string, options: StandaloneOptions): Promise<void>;
54
92
  export {};
55
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;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"}
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"}