@juangadm/pre-post 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -288
- package/dist/baseline.d.ts +26 -1
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +92 -19
- package/dist/baseline.js.map +1 -1
- package/dist/bin/cli.js +20 -16
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +31 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +119 -7
- package/dist/browser.js.map +1 -1
- package/dist/commands/compare.d.ts.map +1 -1
- package/dist/commands/compare.js +5 -5
- package/dist/commands/compare.js.map +1 -1
- package/dist/commands/detect.d.ts +5 -0
- package/dist/commands/detect.d.ts.map +1 -1
- package/dist/commands/detect.js +3 -0
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +7 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +119 -97
- package/dist/commands/pr.js.map +1 -1
- package/dist/comparison.d.ts +5 -0
- package/dist/comparison.d.ts.map +1 -1
- package/dist/comparison.js +5 -5
- package/dist/comparison.js.map +1 -1
- package/dist/diff-worker.d.ts +1 -0
- package/dist/diff-worker.d.ts.map +1 -1
- package/dist/diff-worker.js +1 -0
- package/dist/diff-worker.js.map +1 -1
- package/dist/diff.d.ts +42 -0
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +142 -24
- package/dist/diff.js.map +1 -1
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +5 -1
- package/dist/doctor.js.map +1 -1
- package/dist/drift.d.ts +29 -0
- package/dist/drift.d.ts.map +1 -0
- package/dist/drift.js +106 -0
- package/dist/drift.js.map +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/report.d.ts +20 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +118 -39
- package/dist/report.js.map +1 -1
- package/dist/routes/imports.d.ts +21 -1
- package/dist/routes/imports.d.ts.map +1 -1
- package/dist/routes/imports.js +32 -2
- package/dist/routes/imports.js.map +1 -1
- package/dist/routes.d.ts +18 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +110 -29
- package/dist/routes.js.map +1 -1
- package/dist/run.d.ts +46 -12
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +138 -17
- package/dist/run.js.map +1 -1
- package/dist/types.d.ts +61 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/skill/SKILL.md +18 -9
package/dist/routes.js
CHANGED
|
@@ -13,11 +13,43 @@ import fs from 'fs';
|
|
|
13
13
|
import path from 'path';
|
|
14
14
|
import { detectAppRouterRoutes, detectPagesRouterRoutes } from './routes/nextjs.js';
|
|
15
15
|
import { detectGenericRoutes } from './routes/generic.js';
|
|
16
|
-
import { buildImportGraph, findAffectedEntries, readAliases, walkSourceFiles, toPosix, SKIP_DIRS } from './routes/imports.js';
|
|
16
|
+
import { addContainment, buildImportGraph, findAffectedEntries, readAliases, walkSourceFiles, toPosix, SKIP_DIRS } from './routes/imports.js';
|
|
17
17
|
import { viteRouteEntries, isViteApp } from './routes/vite.js';
|
|
18
18
|
import { changedFiles as gitChangedFiles, repoRoot as gitRepoRoot, requireBase } from './git.js';
|
|
19
19
|
import { devScript, hasDependency, readPackage } from './pkg.js';
|
|
20
20
|
import { CONFIG_DEFAULTS, CONFIG_FILENAME } from './config.js';
|
|
21
|
+
/**
|
|
22
|
+
* Build tooling every stylesheet passes through. A change here restyles the
|
|
23
|
+
* whole app, which no import edge records, so it wraps every entry.
|
|
24
|
+
*/
|
|
25
|
+
const STYLE_TOOLING = /^(tailwind|postcss)\.config\.(ts|js|mjs|cjs|mts|cts)$/;
|
|
26
|
+
function styleTooling(appRoot, files, entries) {
|
|
27
|
+
const out = new Map();
|
|
28
|
+
const all = [...entries.keys()];
|
|
29
|
+
for (const file of files) {
|
|
30
|
+
if (path.dirname(file) === appRoot && STYLE_TOOLING.test(path.basename(file)))
|
|
31
|
+
out.set(file, all);
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Next.js nesting: an App Router `layout`/`template` wraps every page in its
|
|
37
|
+
* folder and below; a Pages Router `_app`/`_document` wraps every page.
|
|
38
|
+
*/
|
|
39
|
+
function nextContainers(appRoot, files, entries, dirName) {
|
|
40
|
+
const out = styleTooling(appRoot, files, entries);
|
|
41
|
+
const routerDir = path.join(routerBase(appRoot, dirName), dirName);
|
|
42
|
+
const wrapper = dirName === 'app' ? /^(layout|template)\.(tsx|ts|jsx|js|mdx)$/ : /^_(app|document)\.(tsx|ts|jsx|js)$/;
|
|
43
|
+
const pages = [...entries.keys()];
|
|
44
|
+
for (const file of files) {
|
|
45
|
+
if (!file.startsWith(routerDir + path.sep) || !wrapper.test(path.basename(file)))
|
|
46
|
+
continue;
|
|
47
|
+
// Pages Router wrappers sit at the top of pages/ and wrap everything.
|
|
48
|
+
const scope = dirName === 'app' ? path.dirname(file) + path.sep : routerDir + path.sep;
|
|
49
|
+
out.set(file, pages.filter(p => p.startsWith(scope)));
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
21
53
|
const NEXT_APP_PAGE = /^app\/(.+\/)?page\.(tsx|ts|jsx|js|mdx|md)$/;
|
|
22
54
|
const NEXT_PAGES_HIGH = /^pages\/(?!api\/|_)(.+)\.(tsx|ts|jsx|js|mdx|md)$/;
|
|
23
55
|
const NEXT_PAGE_FILE = /^(page|layout)\.(tsx|ts|jsx|js|mdx)$/;
|
|
@@ -55,10 +87,14 @@ function pagesDir(root) {
|
|
|
55
87
|
return d;
|
|
56
88
|
return null;
|
|
57
89
|
}
|
|
90
|
+
/** Where a Next.js router directory lives: under `src/` when the app puts it there. */
|
|
91
|
+
function routerBase(appRoot, dirName) {
|
|
92
|
+
return fs.existsSync(path.join(appRoot, 'src', dirName)) ? path.join(appRoot, 'src') : appRoot;
|
|
93
|
+
}
|
|
58
94
|
/** Entry files under a Next.js router directory, mapped by a regex-first filter. */
|
|
59
95
|
function nextEntries(appRoot, files, dirName, pattern, rule) {
|
|
60
96
|
const entries = new Map();
|
|
61
|
-
const base =
|
|
97
|
+
const base = routerBase(appRoot, dirName);
|
|
62
98
|
const prefix = path.join(base, dirName) + path.sep;
|
|
63
99
|
for (const file of files) {
|
|
64
100
|
if (!file.startsWith(prefix))
|
|
@@ -84,6 +120,7 @@ const FRAMEWORKS = [
|
|
|
84
120
|
normalize: stripSrc,
|
|
85
121
|
directRoutes: detectAppRouterRoutes,
|
|
86
122
|
routeEntries: (appRoot, files) => nextEntries(appRoot, files, 'app', NEXT_APP_PAGE, detectAppRouterRoutes),
|
|
123
|
+
containers: (appRoot, files, entries) => nextContainers(appRoot, files, entries, 'app'),
|
|
87
124
|
},
|
|
88
125
|
{
|
|
89
126
|
name: 'nextjs-pages',
|
|
@@ -96,6 +133,7 @@ const FRAMEWORKS = [
|
|
|
96
133
|
normalize: stripSrc,
|
|
97
134
|
directRoutes: detectPagesRouterRoutes,
|
|
98
135
|
routeEntries: (appRoot, files) => nextEntries(appRoot, files, 'pages', NEXT_PAGES_HIGH, detectPagesRouterRoutes),
|
|
136
|
+
containers: (appRoot, files, entries) => nextContainers(appRoot, files, entries, 'pages'),
|
|
99
137
|
},
|
|
100
138
|
{
|
|
101
139
|
name: 'vite',
|
|
@@ -103,6 +141,7 @@ const FRAMEWORKS = [
|
|
|
103
141
|
normalize: rel => rel,
|
|
104
142
|
directRoutes: detectGenericRoutes,
|
|
105
143
|
routeEntries: viteRouteEntries,
|
|
144
|
+
containers: styleTooling,
|
|
106
145
|
},
|
|
107
146
|
{
|
|
108
147
|
name: 'generic',
|
|
@@ -110,6 +149,7 @@ const FRAMEWORKS = [
|
|
|
110
149
|
normalize: rel => rel,
|
|
111
150
|
directRoutes: detectGenericRoutes,
|
|
112
151
|
routeEntries: () => new Map(),
|
|
152
|
+
containers: () => new Map(),
|
|
113
153
|
},
|
|
114
154
|
];
|
|
115
155
|
function adapterFor(name) {
|
|
@@ -197,15 +237,46 @@ export function deduplicateRoutes(routes) {
|
|
|
197
237
|
}
|
|
198
238
|
return Array.from(byPath.values());
|
|
199
239
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
240
|
+
/**
|
|
241
|
+
* Choose which routes to capture when there are more than the cap allows.
|
|
242
|
+
*
|
|
243
|
+
* Not a truncation of a sorted list. That sorted by confidence and then by
|
|
244
|
+
* name, so on a shared-nav change the same alphabetically-last page was cut
|
|
245
|
+
* on every run, and nothing recorded that it had been. Now each distinct
|
|
246
|
+
* cause (the changed file a route was reached from) gets a route before any
|
|
247
|
+
* cause gets a second, shallower paths first; and whatever does not fit is
|
|
248
|
+
* returned, so every renderer can say what was left out.
|
|
249
|
+
*/
|
|
250
|
+
export function selectRoutes(routes, maxRoutes) {
|
|
251
|
+
const unique = deduplicateRoutes(routes);
|
|
252
|
+
const byPath = (a, b) => a.path.length - b.path.length || a.path.localeCompare(b.path);
|
|
253
|
+
// Rank within each cause, so the first route of every cause precedes the
|
|
254
|
+
// second route of any.
|
|
255
|
+
const rankInCause = new Map();
|
|
256
|
+
const causes = new Map();
|
|
257
|
+
for (const r of unique) {
|
|
258
|
+
const group = causes.get(r.sourceFile);
|
|
259
|
+
if (group)
|
|
260
|
+
group.push(r);
|
|
261
|
+
else
|
|
262
|
+
causes.set(r.sourceFile, [r]);
|
|
207
263
|
}
|
|
208
|
-
|
|
264
|
+
for (const group of causes.values())
|
|
265
|
+
group.sort(byPath).forEach((r, i) => rankInCause.set(r, i));
|
|
266
|
+
const ordered = [...unique].sort((a, b) => CONFIDENCE_ORDER[a.confidence] - CONFIDENCE_ORDER[b.confidence]
|
|
267
|
+
|| rankInCause.get(a) - rankInCause.get(b)
|
|
268
|
+
|| byPath(a, b));
|
|
269
|
+
return { selected: ordered.slice(0, maxRoutes), omitted: ordered.slice(maxRoutes) };
|
|
270
|
+
}
|
|
271
|
+
function rankAndCap(routes, maxRoutes, warn) {
|
|
272
|
+
const { selected, omitted } = selectRoutes(routes, maxRoutes);
|
|
273
|
+
if (omitted.length)
|
|
274
|
+
warn?.(capNotice(omitted.map(r => r.path), maxRoutes));
|
|
275
|
+
return selected;
|
|
276
|
+
}
|
|
277
|
+
/** "Not captured (over the 6-route cap): /writing. Raise it with --max-routes." */
|
|
278
|
+
export function capNotice(routes, cap) {
|
|
279
|
+
return `Not captured (over the ${cap}-route cap): ${routes.join(', ')}. Raise it with --max-routes.`;
|
|
209
280
|
}
|
|
210
281
|
export function isDynamicRoute(route) {
|
|
211
282
|
return /[[\]:*]/.test(route);
|
|
@@ -317,17 +388,24 @@ export function detectRoutesForRepo(options = {}) {
|
|
|
317
388
|
for (const r of config.routes || []) {
|
|
318
389
|
routes.push({ path: r, sourceFile: '.pre-post.json', confidence: 'high', reason: 'Configured route' });
|
|
319
390
|
}
|
|
320
|
-
//
|
|
321
|
-
|
|
322
|
-
//
|
|
391
|
+
// The import graph places what it can: changed files → the pages that use
|
|
392
|
+
// them. The framework's own file rules only see what it could not place — a
|
|
393
|
+
// file outside the graph, or one no page reaches — so the two never answer
|
|
394
|
+
// the same question differently.
|
|
395
|
+
let unplaced = appRel;
|
|
396
|
+
let known = [];
|
|
323
397
|
if (appRel.length) {
|
|
324
398
|
const files = walkSourceFiles(appRoot);
|
|
325
399
|
const aliases = readAliases(appRoot);
|
|
326
400
|
const entries = adapter.routeEntries(appRoot, files, aliases);
|
|
327
401
|
if (entries.size) {
|
|
328
402
|
const graph = buildImportGraph(appRoot, { files, aliases });
|
|
403
|
+
addContainment(graph, adapter.containers(appRoot, files, entries));
|
|
329
404
|
const changedAbs = appRel.map(f => path.join(appRoot, f)).filter(f => graph.files.has(f));
|
|
330
|
-
const
|
|
405
|
+
const reached = new Set();
|
|
406
|
+
const affected = findAffectedEntries(graph, changedAbs, f => entries.has(f), undefined, reached);
|
|
407
|
+
unplaced = appRel.filter(f => !reached.has(path.join(appRoot, f)));
|
|
408
|
+
known = Array.from(new Set(entries.values())).sort((a, b) => a.length - b.length);
|
|
331
409
|
for (const [entry, { via, depth }] of affected) {
|
|
332
410
|
const viaRel = toPosix(path.relative(appRoot, via));
|
|
333
411
|
const entryRel = toPosix(path.relative(appRoot, entry));
|
|
@@ -335,24 +413,15 @@ export function detectRoutesForRepo(options = {}) {
|
|
|
335
413
|
path: entries.get(entry),
|
|
336
414
|
sourceFile: viaRel,
|
|
337
415
|
confidence: depth === 0 ? 'high' : depth <= 2 ? 'medium' : 'low',
|
|
338
|
-
reason: depth === 0 ? 'Page file changed' : `${entryRel}
|
|
416
|
+
reason: depth === 0 ? 'Page file changed' : `${entryRel} uses ${viaRel}${depth > 1 ? ' indirectly' : ''}`,
|
|
339
417
|
});
|
|
340
418
|
}
|
|
341
|
-
// Layout/special-file routes may not have a page of their own; snap them to the nearest page.
|
|
342
|
-
const known = Array.from(new Set(entries.values())).sort((a, b) => a.length - b.length);
|
|
343
|
-
const knownSet = new Set(known);
|
|
344
|
-
for (const r of routes) {
|
|
345
|
-
if (!knownSet.has(r.path)) {
|
|
346
|
-
const snapped = nearestPageRoute(r.path, known);
|
|
347
|
-
if (snapped)
|
|
348
|
-
r.path = snapped;
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
419
|
}
|
|
352
420
|
}
|
|
353
|
-
//
|
|
354
|
-
|
|
355
|
-
|
|
421
|
+
// A rule can name a folder with no page of its own (a loading or error
|
|
422
|
+
// file); snap it to the nearest page beneath.
|
|
423
|
+
for (const r of adapter.directRoutes(unplaced.map(adapter.normalize))) {
|
|
424
|
+
routes.push(known.includes(r.path) ? r : { ...r, path: nearestPageRoute(r.path, known) ?? r.path });
|
|
356
425
|
}
|
|
357
426
|
// Dynamic routes: use samples or skip.
|
|
358
427
|
const samples = config.samples || {};
|
|
@@ -366,11 +435,23 @@ export function detectRoutesForRepo(options = {}) {
|
|
|
366
435
|
else
|
|
367
436
|
skippedDynamic.add(r.path);
|
|
368
437
|
}
|
|
438
|
+
// The app changed but nothing mapped to a page: `/` is captured as a check.
|
|
439
|
+
// Not for an empty diff — nothing changed, so there is nothing to check —
|
|
440
|
+
// and not when the only pages affected are dynamic ones waiting for a
|
|
441
|
+
// sample: those were found, and `/` is a page the branch never touched.
|
|
442
|
+
if (appRel.length && !resolved.length && !skippedDynamic.size) {
|
|
443
|
+
resolved.push({ path: '/', sourceFile: appRel[0], confidence: 'low', reason: 'No page mapped from the diff; capturing / as a check' });
|
|
444
|
+
}
|
|
445
|
+
// Reported by the caller, beside the routes it did pick, rather than warned
|
|
446
|
+
// here: a warning printed before the dev servers' output was easy to miss,
|
|
447
|
+
// and `detect --json` never saw it at all.
|
|
448
|
+
const { selected, omitted } = selectRoutes(resolved, maxRoutes);
|
|
369
449
|
return {
|
|
370
450
|
framework: adapter.name,
|
|
371
451
|
appRoot,
|
|
372
452
|
changedFiles: allChanged,
|
|
373
|
-
routes:
|
|
453
|
+
routes: selected,
|
|
454
|
+
omitted,
|
|
374
455
|
skippedDynamic: Array.from(skippedDynamic),
|
|
375
456
|
base,
|
|
376
457
|
durationMs: Date.now() - started,
|
package/dist/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* The capture → diff pipeline shared by `pr` and the two-URL mode.
|
|
3
3
|
* Every route/viewport pair runs concurrently; the browser's page pool bounds it.
|
|
4
4
|
*/
|
|
5
|
-
import { AuthOptions, RouteCaptureOutcome, ViewportSize } from './types.js';
|
|
5
|
+
import { AuthOptions, BrokenSide, CaptureResult, PageError, RouteCaptureOutcome, RunVerdict, ViewportSize } from './types.js';
|
|
6
|
+
import { ChangeRule } from './diff.js';
|
|
6
7
|
export interface CaptureTask {
|
|
7
8
|
route: string;
|
|
8
9
|
resolvedRoute: string;
|
|
@@ -29,17 +30,6 @@ export interface RunSides {
|
|
|
29
30
|
*/
|
|
30
31
|
fix?: string;
|
|
31
32
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Why this run cannot be reported as a comparison.
|
|
34
|
-
*
|
|
35
|
-
* Two ways to reach the same conclusion, kept apart because they need
|
|
36
|
-
* different advice: a wall wants credentials, a wrong baseline wants a URL.
|
|
37
|
-
*/
|
|
38
|
-
export interface RunVerdict {
|
|
39
|
-
kind: 'walled' | 'different-sites';
|
|
40
|
-
/** The single actionable sentence a human needs. */
|
|
41
|
-
hint: string;
|
|
42
|
-
}
|
|
43
33
|
export interface RunResult {
|
|
44
34
|
outcomes: RouteCaptureOutcome[];
|
|
45
35
|
/** Non-null when the run did not compare what it claims to have compared. */
|
|
@@ -92,8 +82,28 @@ export declare function isChanged(diff: {
|
|
|
92
82
|
threshold: number;
|
|
93
83
|
scale: number;
|
|
94
84
|
}): boolean;
|
|
85
|
+
/** The same rule in device pixels, for the diff to draw its crop by. */
|
|
86
|
+
export declare function changeRule(opts: {
|
|
87
|
+
minChangedArea: number;
|
|
88
|
+
threshold: number;
|
|
89
|
+
scale: number;
|
|
90
|
+
}): ChangeRule;
|
|
95
91
|
/** "shifted down 48px" — the direction spelled out, because the sign is not. */
|
|
96
92
|
export declare function describeShift(px: number): string;
|
|
93
|
+
/**
|
|
94
|
+
* What this side shows instead of the page, or null when it rendered the page.
|
|
95
|
+
*
|
|
96
|
+
* Two signals, because neither covers both cases. A 5xx is a server's own
|
|
97
|
+
* statement that the page failed. A framework error overlay is the only
|
|
98
|
+
* statement a dev server makes when the failure happened elsewhere — a build
|
|
99
|
+
* error Turbopack pushes to every page, a client component throwing after a
|
|
100
|
+
* 200 — see `readErrorOverlay`.
|
|
101
|
+
*/
|
|
102
|
+
export declare function pageFailure(c: CaptureResult): PageError | null;
|
|
103
|
+
/** Which side, if any, rendered an error instead of the page. Post wins a tie: it is what the PR is about. */
|
|
104
|
+
export declare function brokenSide(before: CaptureResult, after: CaptureResult): BrokenSide | null;
|
|
105
|
+
/** "Build Error: Parsing ecmascript source code failed (app/work/page.tsx (8:5))" */
|
|
106
|
+
export declare function describePageError(e: PageError): string;
|
|
97
107
|
/**
|
|
98
108
|
* Did the baseline answer unrelated routes with the same page?
|
|
99
109
|
*
|
|
@@ -112,5 +122,29 @@ export declare function describeShift(px: number): string;
|
|
|
112
122
|
*/
|
|
113
123
|
export declare function softNotFoundWarning(outcomes: RouteCaptureOutcome[], beforeUrl: string): string | null;
|
|
114
124
|
export declare function verdictFor(outcomes: RouteCaptureOutcome[], sides: RunSides): RunVerdict | null;
|
|
125
|
+
/**
|
|
126
|
+
* Stop on a verdict a human must act on before anything is published: a wall,
|
|
127
|
+
* or two different sites. A broken page passes through; it is a finding the
|
|
128
|
+
* report states, not a setup problem.
|
|
129
|
+
*/
|
|
130
|
+
export declare function throwIfBlocked(verdict: RunVerdict | null): void;
|
|
131
|
+
/**
|
|
132
|
+
* Ask each local server for every page once before any screenshot.
|
|
133
|
+
*
|
|
134
|
+
* A dev server compiles a route on its first request. Doing that here, rather
|
|
135
|
+
* than inside the capture, keeps compile time out of the settle budget and
|
|
136
|
+
* lets a first-compile failure heal before it is judged: a 5xx is retried
|
|
137
|
+
* after a pause, and only what the capture then sees counts. Deployments are
|
|
138
|
+
* left alone — they are already built, and a production host is not ours to
|
|
139
|
+
* load.
|
|
140
|
+
*
|
|
141
|
+
* Every page starts warming at once, and each capture waits only for its own
|
|
142
|
+
* two, so a slow route never holds back one that is ready.
|
|
143
|
+
*/
|
|
144
|
+
export declare function warmUp(urls: string[], headers?: Record<string, string>, { attempts, pauseMs, timeoutMs }?: {
|
|
145
|
+
attempts?: number | undefined;
|
|
146
|
+
pauseMs?: number | undefined;
|
|
147
|
+
timeoutMs?: number | undefined;
|
|
148
|
+
}): Map<string, Promise<void>>;
|
|
115
149
|
export declare function runTasks(tasks: CaptureTask[], opts: PipelineOptions): Promise<RunResult>;
|
|
116
150
|
//# sourceMappingURL=run.d.ts.map
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAgC,WAAW,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
package/dist/run.js
CHANGED
|
@@ -5,14 +5,15 @@
|
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
import { createHash } from 'crypto';
|
|
7
7
|
import path from 'path';
|
|
8
|
-
import { artifactSuffix } from './types.js';
|
|
8
|
+
import { artifactSuffix, isBrokenVerdict, sideName } from './types.js';
|
|
9
9
|
import { captureScreenshot } from './browser.js';
|
|
10
10
|
import { checkLanding, signInHint } from './landing.js';
|
|
11
11
|
import { differentSitesHint, looksLikeDifferentSites, textOverlap, titleOverlap } from './sameness.js';
|
|
12
|
-
import { HttpStatusError, NavigationError } from './errors.js';
|
|
12
|
+
import { HttpStatusError, NavigationError, NeedsHumanError } from './errors.js';
|
|
13
13
|
import { DiffPool } from './diff-pool.js';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { meetsRule } from './diff.js';
|
|
15
|
+
import { authHint, probeUrl } from './doctor.js';
|
|
16
|
+
import { hostOf, isLocalUrl } from './url.js';
|
|
16
17
|
export function routeSlug(route) {
|
|
17
18
|
const slug = route.replace(/^\/+|\/+$/g, '').replace(/[^\w.-]+/g, '-').replace(/^-+|-+$/g, '');
|
|
18
19
|
return slug || 'home';
|
|
@@ -39,10 +40,11 @@ export function routeSlug(route) {
|
|
|
39
40
|
* makes a reviewer stop looking.
|
|
40
41
|
*/
|
|
41
42
|
export function isChanged(diff, opts) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
return meetsRule(diff.changedPixels, diff.changedRatio, changeRule(opts));
|
|
44
|
+
}
|
|
45
|
+
/** The same rule in device pixels, for the diff to draw its crop by. */
|
|
46
|
+
export function changeRule(opts) {
|
|
47
|
+
return { minPixels: opts.minChangedArea * opts.scale * opts.scale, minRatio: opts.threshold };
|
|
46
48
|
}
|
|
47
49
|
/** "shifted down 48px" — the direction spelled out, because the sign is not. */
|
|
48
50
|
export function describeShift(px) {
|
|
@@ -68,6 +70,36 @@ function blockedSide(requested, result, side) {
|
|
|
68
70
|
const landing = checkLanding(requested, result.finalUrl ?? requested, result.title ?? '');
|
|
69
71
|
return landing.blocked ? { side, finalUrl: landing.finalUrl, vercel: Boolean(result.vercel) } : null;
|
|
70
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* What this side shows instead of the page, or null when it rendered the page.
|
|
75
|
+
*
|
|
76
|
+
* Two signals, because neither covers both cases. A 5xx is a server's own
|
|
77
|
+
* statement that the page failed. A framework error overlay is the only
|
|
78
|
+
* statement a dev server makes when the failure happened elsewhere — a build
|
|
79
|
+
* error Turbopack pushes to every page, a client component throwing after a
|
|
80
|
+
* 200 — see `readErrorOverlay`.
|
|
81
|
+
*/
|
|
82
|
+
export function pageFailure(c) {
|
|
83
|
+
if (c.pageError)
|
|
84
|
+
return c.pageError;
|
|
85
|
+
if (c.status && c.status >= 500)
|
|
86
|
+
return { kind: `HTTP ${c.status}` };
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/** Which side, if any, rendered an error instead of the page. Post wins a tie: it is what the PR is about. */
|
|
90
|
+
export function brokenSide(before, after) {
|
|
91
|
+
const pre = pageFailure(before);
|
|
92
|
+
const post = pageFailure(after);
|
|
93
|
+
if (post)
|
|
94
|
+
return { side: 'after', error: post };
|
|
95
|
+
if (pre)
|
|
96
|
+
return { side: 'before', error: pre };
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
/** "Build Error: Parsing ecmascript source code failed (app/work/page.tsx (8:5))" */
|
|
100
|
+
export function describePageError(e) {
|
|
101
|
+
return [e.kind, e.message].filter(Boolean).join(': ') + (e.location ? ` in ${e.location}` : '');
|
|
102
|
+
}
|
|
71
103
|
async function runTask(task, opts, pool) {
|
|
72
104
|
const started = Date.now();
|
|
73
105
|
const base = { route: task.route, resolvedRoute: task.resolvedRoute, viewport: task.viewport, status: 'error' };
|
|
@@ -99,7 +131,7 @@ async function runTask(task, opts, pool) {
|
|
|
99
131
|
// walled.
|
|
100
132
|
const blocked = blockedSide(task.beforeUrl, before, 'before') ?? blockedSide(task.afterUrl, after, 'after');
|
|
101
133
|
if (blocked) {
|
|
102
|
-
const label = blocked.side
|
|
134
|
+
const label = sideName(blocked.side);
|
|
103
135
|
return {
|
|
104
136
|
...base,
|
|
105
137
|
blocked,
|
|
@@ -107,12 +139,30 @@ async function runTask(task, opts, pool) {
|
|
|
107
139
|
durationMs: Date.now() - started,
|
|
108
140
|
};
|
|
109
141
|
}
|
|
110
|
-
if (before.status === 404 && after.status === 404) {
|
|
111
|
-
return { ...base, error: `404 on both ${task.beforeUrl} and ${task.afterUrl} (wrong route or missing sample?)`, durationMs: Date.now() - started };
|
|
112
|
-
}
|
|
113
142
|
const prefix = `${routeSlug(task.route)}-${task.viewport}`;
|
|
114
143
|
const file = (kind) => path.join(opts.outputDir, `${prefix}-${artifactSuffix(kind)}.png`);
|
|
115
144
|
const outputs = { before: file('before'), after: file('after'), diff: file('diff'), cropBefore: file('cropBefore'), cropAfter: file('cropAfter') };
|
|
145
|
+
// An error page is not a design. Diffing it against the real page produced
|
|
146
|
+
// a confident "changed 10.88%" and published the Build Error panel to the PR
|
|
147
|
+
// as if it were the branch's new look, with exit 0. So a broken side ends the
|
|
148
|
+
// comparison here, before the diff, and is never published. Both images are
|
|
149
|
+
// still written locally: they are the evidence of what went wrong.
|
|
150
|
+
const broken = brokenSide(before, after);
|
|
151
|
+
if (broken) {
|
|
152
|
+
fs.writeFileSync(outputs.before, Buffer.from(before.image));
|
|
153
|
+
fs.writeFileSync(outputs.after, Buffer.from(after.image));
|
|
154
|
+
opts.log?.(` broken ${task.route} @ ${task.viewport} (${sideName(broken.side)}: ${describePageError(broken.error)}, ${Date.now() - started}ms)`);
|
|
155
|
+
return {
|
|
156
|
+
...base,
|
|
157
|
+
status: 'broken',
|
|
158
|
+
broken,
|
|
159
|
+
files: { before: outputs.before, after: outputs.after },
|
|
160
|
+
durationMs: Date.now() - started,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (before.status === 404 && after.status === 404) {
|
|
164
|
+
return { ...base, error: `404 on both ${task.beforeUrl} and ${task.afterUrl} (wrong route or missing sample?)`, durationMs: Date.now() - started };
|
|
165
|
+
}
|
|
116
166
|
// A route that exists on only one side is not a comparison, and the moment to
|
|
117
167
|
// notice is here — before the diff, not after it in a footnote.
|
|
118
168
|
//
|
|
@@ -157,15 +207,18 @@ async function runTask(task, opts, pool) {
|
|
|
157
207
|
minCrop: { width: 400 * opts.scale, height: 200 * opts.scale },
|
|
158
208
|
highlightDownscale: opts.scale >= 2 ? 2 : 1,
|
|
159
209
|
highlight: false,
|
|
210
|
+
rule: changeRule(opts),
|
|
211
|
+
clusterGap: 24 * opts.scale,
|
|
160
212
|
},
|
|
161
213
|
});
|
|
162
214
|
const notes = [];
|
|
163
|
-
//
|
|
164
|
-
//
|
|
215
|
+
// 5xx and the one-sided 404s returned above; what is left is a 4xx both
|
|
216
|
+
// sides rendered (a 410, a 429), still worth diffing and flagging. Named Pre
|
|
217
|
+
// and Post: either can be local, either can be a deployment.
|
|
165
218
|
if (before.status && before.status >= 400)
|
|
166
|
-
notes.push(`
|
|
219
|
+
notes.push(`Pre returned ${before.status}`);
|
|
167
220
|
if (after.status && after.status >= 400)
|
|
168
|
-
notes.push(`
|
|
221
|
+
notes.push(`Post returned ${after.status}`);
|
|
169
222
|
const changed = isChanged(diff, opts);
|
|
170
223
|
// Cheap fingerprint of the baseline, kept so the run can notice a host that
|
|
171
224
|
// answers every route with the same page. See softNotFoundWarning.
|
|
@@ -201,6 +254,7 @@ async function runTask(task, opts, pool) {
|
|
|
201
254
|
textOverlap: overlap,
|
|
202
255
|
titleOverlap: titles,
|
|
203
256
|
shift,
|
|
257
|
+
fingerprint: diff.fingerprint,
|
|
204
258
|
files: {
|
|
205
259
|
before: outputs.before,
|
|
206
260
|
after: outputs.after,
|
|
@@ -295,17 +349,84 @@ export function verdictFor(outcomes, sides) {
|
|
|
295
349
|
const { side, vercel } = walled[0].blocked;
|
|
296
350
|
return { kind: 'walled', hint: signInHint(side === 'before' ? sides.before.url : sides.after.url, vercel) };
|
|
297
351
|
}
|
|
352
|
+
// Before the different-sites check: an error page shares no words with the
|
|
353
|
+
// real one, so a broken branch would otherwise be diagnosed as a wrong URL.
|
|
354
|
+
//
|
|
355
|
+
// One broken Post page is enough. A branch that errors on any page is not
|
|
356
|
+
// ready to be judged on looks, and its other screenshots may be of a page
|
|
357
|
+
// mid-rebuild. The base failing is different: it is not this branch's fault,
|
|
358
|
+
// so it only stops the run when no route has a "before" at all; otherwise
|
|
359
|
+
// those routes are reported as not compared and the rest stand.
|
|
360
|
+
const postBroken = outcomes.filter(o => o.broken?.side === 'after');
|
|
361
|
+
if (postBroken.length)
|
|
362
|
+
return { kind: 'post-broken', hint: brokenHint(postBroken, 'Post', sides) };
|
|
363
|
+
const preBroken = outcomes.filter(o => o.broken?.side === 'before');
|
|
364
|
+
if (preBroken.length && preBroken.length === outcomes.length) {
|
|
365
|
+
return { kind: 'baseline-broken', hint: brokenHint(preBroken, 'Pre', sides) };
|
|
366
|
+
}
|
|
298
367
|
if (looksLikeDifferentSites(outcomes)) {
|
|
299
368
|
return { kind: 'different-sites', hint: differentSitesHint(sides.before.url, sides.before.detail, sides.after.url, sides.fix) };
|
|
300
369
|
}
|
|
301
370
|
return null;
|
|
302
371
|
}
|
|
372
|
+
/**
|
|
373
|
+
* Stop on a verdict a human must act on before anything is published: a wall,
|
|
374
|
+
* or two different sites. A broken page passes through; it is a finding the
|
|
375
|
+
* report states, not a setup problem.
|
|
376
|
+
*/
|
|
377
|
+
export function throwIfBlocked(verdict) {
|
|
378
|
+
if (verdict && !isBrokenVerdict(verdict))
|
|
379
|
+
throw new NeedsHumanError(verdict.hint);
|
|
380
|
+
}
|
|
381
|
+
/** One sentence: which side, which page, what it said, and what now. */
|
|
382
|
+
function brokenHint(broken, side, sides) {
|
|
383
|
+
const routes = [...new Set(broken.map(o => o.route))];
|
|
384
|
+
const where = routes.length === 1 ? `\`${routes[0]}\`` : `${routes.length} pages (${routes.slice(0, 3).map(r => `\`${r}\``).join(', ')}${routes.length > 3 ? ', …' : ''})`;
|
|
385
|
+
const what = describePageError(broken[0].broken.error);
|
|
386
|
+
if (side === 'Post') {
|
|
387
|
+
return `This branch doesn't render: ${where} shows ${what}. No screenshots were published; fix the error and re-run.`;
|
|
388
|
+
}
|
|
389
|
+
const base = sides.before.detail ? ` (${sides.before.detail})` : '';
|
|
390
|
+
return `Couldn't compare: the baseline${base} doesn't render ${where}; it shows ${what}. This is not caused by this branch.`;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Ask each local server for every page once before any screenshot.
|
|
394
|
+
*
|
|
395
|
+
* A dev server compiles a route on its first request. Doing that here, rather
|
|
396
|
+
* than inside the capture, keeps compile time out of the settle budget and
|
|
397
|
+
* lets a first-compile failure heal before it is judged: a 5xx is retried
|
|
398
|
+
* after a pause, and only what the capture then sees counts. Deployments are
|
|
399
|
+
* left alone — they are already built, and a production host is not ours to
|
|
400
|
+
* load.
|
|
401
|
+
*
|
|
402
|
+
* Every page starts warming at once, and each capture waits only for its own
|
|
403
|
+
* two, so a slow route never holds back one that is ready.
|
|
404
|
+
*/
|
|
405
|
+
export function warmUp(urls, headers = {}, { attempts = 3, pauseMs = 1500, timeoutMs = 60_000 } = {}) {
|
|
406
|
+
const warming = new Map();
|
|
407
|
+
for (const url of urls) {
|
|
408
|
+
if (warming.has(url) || !/^https?:/.test(url) || !isLocalUrl(url))
|
|
409
|
+
continue;
|
|
410
|
+
warming.set(url, (async () => {
|
|
411
|
+
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
412
|
+
const { status } = await probeUrl(url, headers, { timeoutMs, drain: true });
|
|
413
|
+
if (status !== null && status < 500)
|
|
414
|
+
return;
|
|
415
|
+
if (attempt < attempts)
|
|
416
|
+
await new Promise(resolve => setTimeout(resolve, pauseMs));
|
|
417
|
+
}
|
|
418
|
+
})());
|
|
419
|
+
}
|
|
420
|
+
return warming;
|
|
421
|
+
}
|
|
303
422
|
export async function runTasks(tasks, opts) {
|
|
304
423
|
fs.mkdirSync(opts.outputDir, { recursive: true });
|
|
424
|
+
const warming = warmUp(tasks.flatMap(t => [t.beforeUrl, t.afterUrl]), opts.auth?.headers);
|
|
425
|
+
const warmed = (t) => Promise.all([warming.get(t.beforeUrl), warming.get(t.afterUrl)]);
|
|
305
426
|
const pool = new DiffPool();
|
|
306
427
|
let outcomes;
|
|
307
428
|
try {
|
|
308
|
-
outcomes = await Promise.all(tasks.map(t => runTask(t, opts, pool)));
|
|
429
|
+
outcomes = await Promise.all(tasks.map(t => warmed(t).then(() => runTask(t, opts, pool))));
|
|
309
430
|
}
|
|
310
431
|
finally {
|
|
311
432
|
await pool.close();
|