@juangadm/pre-post 1.2.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 +52 -182
- package/dist/baseline.d.ts +122 -3
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +491 -46
- package/dist/baseline.js.map +1 -1
- package/dist/bin/cli.js +41 -17
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +38 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +132 -11
- 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 +9 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pr.d.ts +13 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +222 -107
- package/dist/commands/pr.js.map +1 -1
- package/dist/comparison.d.ts +14 -0
- package/dist/comparison.d.ts.map +1 -1
- package/dist/comparison.js +48 -25
- 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 +13 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -1
- package/dist/github.d.ts +34 -3
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +102 -11
- package/dist/github.js.map +1 -1
- package/dist/report.d.ts +27 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +144 -38
- 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/sheet.d.ts +24 -0
- package/dist/sheet.d.ts.map +1 -0
- package/dist/sheet.js +94 -0
- package/dist/sheet.js.map +1 -0
- package/dist/timings.d.ts +46 -0
- package/dist/timings.d.ts.map +1 -0
- package/dist/timings.js +108 -0
- package/dist/timings.js.map +1 -0
- package/dist/types.d.ts +86 -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 +34 -10
package/dist/comparison.js
CHANGED
|
@@ -17,7 +17,7 @@ import { NeedsHumanError } from './doctor.js';
|
|
|
17
17
|
import { isLocalUrl, normalizeUrl } from './url.js';
|
|
18
18
|
import { mergeBase } from './git.js';
|
|
19
19
|
const noop = async () => undefined;
|
|
20
|
-
const side = (url, detail, probe) => ({ url: normalizeUrl(url), detail, probe });
|
|
20
|
+
const side = (url, detail, probe, label) => ({ url: normalizeUrl(url), detail, probe, label });
|
|
21
21
|
/**
|
|
22
22
|
* The one place a Comparison is built, so `mixed` is derived rather than
|
|
23
23
|
* recomputed — a construction site that forgot it would report a production
|
|
@@ -135,39 +135,60 @@ async function localPair(ctx, deployed) {
|
|
|
135
135
|
const running = await ctx.devServer;
|
|
136
136
|
let after = ctx.after
|
|
137
137
|
? side(ctx.after, 'passed with --after')
|
|
138
|
-
: running ? side(running, 'local dev server') : null;
|
|
138
|
+
: running ? side(running, 'local dev server', undefined, 'this branch') : null;
|
|
139
139
|
// Nothing deployed and nothing running is not a reason to stop: this is the
|
|
140
140
|
// command you hit on the way out of a PR, so it starts the dev server itself
|
|
141
141
|
// rather than handing back a chore.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
142
|
+
const bootPost = !after && ctx.allowLocalBaseline !== false;
|
|
143
|
+
// git knows what this branch forked from, so a baseline does not depend on a
|
|
144
|
+
// PR existing yet — this often runs before one is opened. A baseline the
|
|
145
|
+
// caller named wins even if it is remote; they asked for it.
|
|
146
|
+
const baseSha = ctx.before ? undefined : ctx.baseSha ?? ctx.pr?.base.sha ?? mergeBase(ctx.repoRoot) ?? undefined;
|
|
147
|
+
const bootPre = ctx.allowLocalBaseline !== false && Boolean(baseSha);
|
|
148
|
+
const common = { repoRoot: ctx.repoRoot, appPrefix: ctx.appPrefix, setup: ctx.config.baselineSetup, log: ctx.log, timings: ctx.timings };
|
|
149
|
+
// Both sides boot at once: each is mostly waiting on its own install and
|
|
150
|
+
// compile, so running them one after the other doubled the wait for nothing.
|
|
151
|
+
// Only Pre can be cancelled: it lives in a throwaway worktree, while Post
|
|
152
|
+
// may be installing into the caller's own checkout, which must never be
|
|
153
|
+
// left half-written.
|
|
154
|
+
const cancelPre = new AbortController();
|
|
155
|
+
const postBoot = bootPost ? (ctx.servePost ?? serveWorkingTree)(common) : Promise.resolve(null);
|
|
156
|
+
const preBoot = bootPre ? (ctx.serveBaseline ?? serveBaseCommit)({ ...common, sha: baseSha, signal: cancelPre.signal }) : Promise.resolve(null);
|
|
157
|
+
// Without a Post there is nothing to compare, so a slow baseline must not
|
|
158
|
+
// hold that answer back for the length of its install.
|
|
159
|
+
postBoot.then(server => { if (!server && !after)
|
|
160
|
+
cancelPre.abort(); }, () => cancelPre.abort());
|
|
161
|
+
const [postResult, preResult] = await Promise.allSettled([postBoot, preBoot]);
|
|
162
|
+
const postServer = postResult.status === 'fulfilled' ? postResult.value : null;
|
|
163
|
+
const baseline = preResult.status === 'fulfilled' ? preResult.value : null;
|
|
164
|
+
const stopPost = postServer ? postServer.stop : noop;
|
|
165
|
+
const stopPre = baseline ? baseline.stop : noop;
|
|
166
|
+
// A side that failed loudly (an install that died) is the answer, not a
|
|
167
|
+
// "try the next option" — but whatever the other side started has to come
|
|
168
|
+
// down before the error escapes; nothing above this has a handle on it.
|
|
169
|
+
if (postResult.status === 'rejected') {
|
|
170
|
+
await stopPre();
|
|
171
|
+
throw postResult.reason;
|
|
147
172
|
}
|
|
148
|
-
if (
|
|
173
|
+
if (postServer)
|
|
174
|
+
after = side(postServer.url, 'working tree, served locally', undefined, 'this branch');
|
|
175
|
+
if (!after) {
|
|
176
|
+
await stopPre();
|
|
149
177
|
throw deployed.preview ? new NoDeployedBaselineError(deployed.preview.url, deployed.rejectedBaseline) : new NoPostError();
|
|
150
|
-
|
|
151
|
-
|
|
178
|
+
}
|
|
179
|
+
if (preResult.status === 'rejected') {
|
|
180
|
+
await stopPost();
|
|
181
|
+
throw preResult.reason;
|
|
182
|
+
}
|
|
152
183
|
if (ctx.before)
|
|
153
184
|
return pair('explicit', side(ctx.before, 'passed with --before'), after, stopPost);
|
|
154
|
-
// git knows what this branch forked from, so a baseline does not depend on a
|
|
155
|
-
// PR existing yet — this often runs before one is opened.
|
|
156
|
-
const baseSha = ctx.baseSha ?? ctx.pr?.base.sha ?? mergeBase(ctx.repoRoot) ?? undefined;
|
|
157
|
-
// Serving the base can now fail loudly rather than yielding — an install
|
|
158
|
-
// that died is not a "try the next option", it is the answer. The Post
|
|
159
|
-
// server is already up by then, so it has to come down before the throw
|
|
160
|
-
// escapes; nothing above this has a handle on it yet.
|
|
161
|
-
const baseline = ctx.allowLocalBaseline === false || !baseSha
|
|
162
|
-
? null
|
|
163
|
-
: await (ctx.serveBaseline ?? serveBaseCommit)({ repoRoot: ctx.repoRoot, sha: baseSha, appPrefix: ctx.appPrefix, log: ctx.log })
|
|
164
|
-
.catch(async (err) => { await stopPost(); throw err; });
|
|
165
185
|
if (baseline) {
|
|
166
|
-
const before = side(baseline.url, `base commit ${baseSha.slice(0, 7)}, served locally`);
|
|
167
|
-
return pair('local', before, after, async () => { await baseline.stop()
|
|
186
|
+
const before = side(baseline.url, `base commit ${baseSha.slice(0, 7)}, served locally`, undefined, `base \`${baseSha.slice(0, 7)}\``);
|
|
187
|
+
return pair('local', before, after, async () => { await Promise.all([baseline.stop(), stopPost()]); });
|
|
168
188
|
}
|
|
169
|
-
// Nothing local could be built; a configured URL beats no comparison at all
|
|
170
|
-
|
|
189
|
+
// Nothing local could be built; a configured URL beats no comparison at all,
|
|
190
|
+
// unless the caller asked for both sides to be local.
|
|
191
|
+
if (ctx.config.before && !ctx.localOnly)
|
|
171
192
|
return pair('explicit', side(ctx.config.before, 'from .pre-post.json'), after, stopPost);
|
|
172
193
|
await stopPost();
|
|
173
194
|
throw new NoBaselineError();
|
|
@@ -183,6 +204,8 @@ export async function resolveComparison(ctx) {
|
|
|
183
204
|
const explicit = explicitPair(ctx);
|
|
184
205
|
if (explicit)
|
|
185
206
|
return explicit;
|
|
207
|
+
if (ctx.localOnly)
|
|
208
|
+
return localPair(ctx, { comparison: null, preview: null });
|
|
186
209
|
const deployed = await deployedPair(ctx);
|
|
187
210
|
return deployed.comparison ?? localPair(ctx, deployed);
|
|
188
211
|
}
|
package/dist/comparison.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparison.js","sourceRoot":"","sources":["../src/comparison.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,
|
|
1
|
+
{"version":3,"file":"comparison.js","sourceRoot":"","sources":["../src/comparison.ts"],"names":[],"mappings":"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"}
|
package/dist/diff-worker.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export interface DiffJobResult {
|
|
|
26
26
|
hasHighlight: boolean;
|
|
27
27
|
/** Plain numbers, so the summary survives the structured clone back to the pool. */
|
|
28
28
|
shift?: ShiftSummary;
|
|
29
|
+
fingerprint?: string;
|
|
29
30
|
error?: string;
|
|
30
31
|
}
|
|
31
32
|
export declare function executeDiffJob(job: DiffJob): DiffJobResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-worker.d.ts","sourceRoot":"","sources":["../src/diff-worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAc,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,OAAO;IACtB,+EAA+E;IAC/E,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;IAClB,iEAAiE;IACjE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChG,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,oFAAoF;IACpF,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"diff-worker.d.ts","sourceRoot":"","sources":["../src/diff-worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAc,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,OAAO;IACtB,+EAA+E;IAC/E,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;IAClB,iEAAiE;IACjE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChG,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,oFAAoF;IACpF,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAoB1D"}
|
package/dist/diff-worker.js
CHANGED
package/dist/diff-worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-worker.js","sourceRoot":"","sources":["../src/diff-worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAe,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"diff-worker.js","sourceRoot":"","sources":["../src/diff-worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAe,MAAM,WAAW,CAAC;AAwBpD,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxF,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,SAAS;QAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7B,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC;AAED,IAAI,UAAU,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,UAAW,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAmB,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/diff.d.ts
CHANGED
|
@@ -27,10 +27,52 @@ export interface DiffOptions {
|
|
|
27
27
|
* Image mode still writes diff.png.
|
|
28
28
|
*/
|
|
29
29
|
highlight?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* What counts as a change, in device pixels and share of the canvas — the
|
|
32
|
+
* same rule the verdict uses (`isChanged`). Default: any pixel.
|
|
33
|
+
*
|
|
34
|
+
* The crop used to be drawn around every differing pixel while the verdict
|
|
35
|
+
* applied this rule, so the two disagreed: a pure move left a few pixels of
|
|
36
|
+
* animation noise, the report said "nothing else changed", and the crop
|
|
37
|
+
* showed the noise. Now a crop is only drawn around change the rule counts.
|
|
38
|
+
*/
|
|
39
|
+
rule?: ChangeRule;
|
|
40
|
+
/** Changed pixels closer than this (device px) belong to one patch. Default 48. */
|
|
41
|
+
clusterGap?: number;
|
|
30
42
|
}
|
|
43
|
+
export interface ChangeRule {
|
|
44
|
+
/** Smallest changed area that counts, in device pixels. */
|
|
45
|
+
minPixels: number;
|
|
46
|
+
/** Smallest changed share of the canvas that counts, 0..1. */
|
|
47
|
+
minRatio: number;
|
|
48
|
+
}
|
|
49
|
+
/** Do this many changed pixels, this share of the canvas, count under the rule? */
|
|
50
|
+
export declare function meetsRule(pixels: number, ratio: number, rule: ChangeRule): boolean;
|
|
31
51
|
/** Box-filter downscale by an integer factor. */
|
|
32
52
|
export declare function downscale(src: PNG, factor: number): PNG;
|
|
33
53
|
export declare function decodePng(buffer: Buffer): PNG;
|
|
54
|
+
/** A patch of change: nearby changed pixels, merged. */
|
|
55
|
+
export interface Cluster extends DiffRegion {
|
|
56
|
+
pixels: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Group changed pixels into patches, merging any closer than `gap`.
|
|
60
|
+
*
|
|
61
|
+
* One box around every changed pixel is what produced an 808x1356 crop for a
|
|
62
|
+
* header-link change: the link, plus a few pixels of an animated image far
|
|
63
|
+
* below it, made one box spanning both. As patches, the link is one and the
|
|
64
|
+
* specks are another, and each can be judged on its own.
|
|
65
|
+
*
|
|
66
|
+
* Works on a grid of `gap`-sized cells, joining neighbouring cells, so the
|
|
67
|
+
* cost is one pass over the pixels plus one over the occupied cells.
|
|
68
|
+
*/
|
|
69
|
+
export declare function findClusters(diff: PNG, gap: number): Cluster[];
|
|
70
|
+
/**
|
|
71
|
+
* The part of the page a crop should show: every patch that counts on its own,
|
|
72
|
+
* or, when none does but together they do, all of them. The second case is
|
|
73
|
+
* several small real edits — five recoloured icons — which must still be shown.
|
|
74
|
+
*/
|
|
75
|
+
export declare function regionOfInterest(clusters: Cluster[], rule: ChangeRule): DiffRegion | null;
|
|
34
76
|
/** Expand a region by padding and to a minimum size, clamped to the canvas. */
|
|
35
77
|
export declare function expandRegion(region: DiffRegion, canvas: {
|
|
36
78
|
width: number;
|
package/dist/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAGlE,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAGlF;AAkFD,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAoBvD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAE7C;AAkBD,wDAAwD;AACxD,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAkD9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAGzF;AAgCD,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACzC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC,UAAU,CAqBZ;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAuHrG"}
|
package/dist/diff.js
CHANGED
|
@@ -5,9 +5,17 @@
|
|
|
5
5
|
* CLI runs. Produces a change ratio, the bounding box of the change, a
|
|
6
6
|
* highlight image, and tight crops of before/after around the change.
|
|
7
7
|
*/
|
|
8
|
+
import { createHash } from 'crypto';
|
|
8
9
|
import pixelmatch from 'pixelmatch';
|
|
9
10
|
import { PNG } from 'pngjs';
|
|
10
11
|
import { alignBefore, detectShift, insertedBand } from './shift.js';
|
|
12
|
+
/** Do this many changed pixels, this share of the canvas, count under the rule? */
|
|
13
|
+
export function meetsRule(pixels, ratio, rule) {
|
|
14
|
+
if (pixels === 0)
|
|
15
|
+
return false;
|
|
16
|
+
return pixels >= rule.minPixels || ratio >= rule.minRatio;
|
|
17
|
+
}
|
|
18
|
+
const ANY_PIXEL = { minPixels: 1, minRatio: 0 };
|
|
11
19
|
const DIFF_COLOR = [255, 0, 0];
|
|
12
20
|
const AA_COLOR = [255, 200, 0];
|
|
13
21
|
/** Background used to pad images of different sizes. */
|
|
@@ -44,6 +52,8 @@ const PAD_COLOR = [255, 255, 255];
|
|
|
44
52
|
const PIXEL_THRESHOLD = 0.02;
|
|
45
53
|
/** No crop when the change covers more than this fraction of the canvas. */
|
|
46
54
|
const CROP_MAX_RATIO = 0.5;
|
|
55
|
+
/** A crop at least this share of the page's width is widened to all of it. */
|
|
56
|
+
const WIDE_SHARE = 0.6;
|
|
47
57
|
/**
|
|
48
58
|
* A shift is only worth reporting when putting the two sides back in register
|
|
49
59
|
* accounts for most of the difference. This is the whole test: an offset that
|
|
@@ -116,43 +126,133 @@ export function downscale(src, factor) {
|
|
|
116
126
|
export function decodePng(buffer) {
|
|
117
127
|
return PNG.sync.read(buffer);
|
|
118
128
|
}
|
|
129
|
+
/** Is the pixel at byte offset `i` of a diff image painted as changed? */
|
|
130
|
+
function isDiffPixel(data, i) {
|
|
131
|
+
return data[i] === DIFF_COLOR[0] && data[i + 1] === DIFF_COLOR[1] && data[i + 2] === DIFF_COLOR[2];
|
|
132
|
+
}
|
|
119
133
|
/** Diff-coloured pixels within a row range, for weighing one band against another. */
|
|
120
134
|
function countChangedRows(diff, y0, y1) {
|
|
121
135
|
const { width, data } = diff;
|
|
122
136
|
let count = 0;
|
|
123
137
|
for (let y = Math.max(0, y0); y < Math.min(diff.height, y1); y++) {
|
|
124
138
|
const row = y * width * 4;
|
|
125
|
-
for (let x = 0; x < width; x++)
|
|
126
|
-
|
|
127
|
-
if (data[i] === DIFF_COLOR[0] && data[i + 1] === DIFF_COLOR[1] && data[i + 2] === DIFF_COLOR[2])
|
|
139
|
+
for (let x = 0; x < width; x++)
|
|
140
|
+
if (isDiffPixel(data, row + x * 4))
|
|
128
141
|
count++;
|
|
129
|
-
}
|
|
130
142
|
}
|
|
131
143
|
return count;
|
|
132
144
|
}
|
|
133
|
-
/**
|
|
134
|
-
|
|
145
|
+
/**
|
|
146
|
+
* Group changed pixels into patches, merging any closer than `gap`.
|
|
147
|
+
*
|
|
148
|
+
* One box around every changed pixel is what produced an 808x1356 crop for a
|
|
149
|
+
* header-link change: the link, plus a few pixels of an animated image far
|
|
150
|
+
* below it, made one box spanning both. As patches, the link is one and the
|
|
151
|
+
* specks are another, and each can be judged on its own.
|
|
152
|
+
*
|
|
153
|
+
* Works on a grid of `gap`-sized cells, joining neighbouring cells, so the
|
|
154
|
+
* cost is one pass over the pixels plus one over the occupied cells.
|
|
155
|
+
*/
|
|
156
|
+
export function findClusters(diff, gap) {
|
|
135
157
|
const { width, height, data } = diff;
|
|
136
|
-
|
|
158
|
+
const cell = Math.max(1, Math.round(gap));
|
|
159
|
+
const cols = Math.ceil(width / cell);
|
|
160
|
+
const rows = Math.ceil(height / cell);
|
|
161
|
+
const count = new Int32Array(cols * rows);
|
|
162
|
+
const minX = new Int32Array(cols * rows).fill(width);
|
|
163
|
+
const minY = new Int32Array(cols * rows).fill(height);
|
|
164
|
+
const maxX = new Int32Array(cols * rows).fill(-1);
|
|
165
|
+
const maxY = new Int32Array(cols * rows).fill(-1);
|
|
137
166
|
for (let y = 0; y < height; y++) {
|
|
138
167
|
const row = y * width * 4;
|
|
168
|
+
const cy = Math.floor(y / cell) * cols;
|
|
139
169
|
for (let x = 0; x < width; x++) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
170
|
+
if (!isDiffPixel(data, row + x * 4))
|
|
171
|
+
continue;
|
|
172
|
+
const c = cy + Math.floor(x / cell);
|
|
173
|
+
count[c]++;
|
|
174
|
+
if (x < minX[c])
|
|
175
|
+
minX[c] = x;
|
|
176
|
+
if (x > maxX[c])
|
|
177
|
+
maxX[c] = x;
|
|
178
|
+
if (y < minY[c])
|
|
179
|
+
minY[c] = y;
|
|
180
|
+
if (y > maxY[c])
|
|
181
|
+
maxY[c] = y;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const seen = new Uint8Array(cols * rows);
|
|
185
|
+
const clusters = [];
|
|
186
|
+
for (let start = 0; start < count.length; start++) {
|
|
187
|
+
if (!count[start] || seen[start])
|
|
188
|
+
continue;
|
|
189
|
+
let x0 = width, y0 = height, x1 = -1, y1 = -1, pixels = 0;
|
|
190
|
+
const stack = [start];
|
|
191
|
+
seen[start] = 1;
|
|
192
|
+
while (stack.length) {
|
|
193
|
+
const c = stack.pop();
|
|
194
|
+
pixels += count[c];
|
|
195
|
+
x0 = Math.min(x0, minX[c]);
|
|
196
|
+
y0 = Math.min(y0, minY[c]);
|
|
197
|
+
x1 = Math.max(x1, maxX[c]);
|
|
198
|
+
y1 = Math.max(y1, maxY[c]);
|
|
199
|
+
const cx = c % cols;
|
|
200
|
+
const cy = (c - cx) / cols;
|
|
201
|
+
for (let dy = -1; dy <= 1; dy++) {
|
|
202
|
+
for (let dx = -1; dx <= 1; dx++) {
|
|
203
|
+
const nx = cx + dx;
|
|
204
|
+
const ny = cy + dy;
|
|
205
|
+
if (nx < 0 || ny < 0 || nx >= cols || ny >= rows)
|
|
206
|
+
continue;
|
|
207
|
+
const n = ny * cols + nx;
|
|
208
|
+
if (count[n] && !seen[n]) {
|
|
209
|
+
seen[n] = 1;
|
|
210
|
+
stack.push(n);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
150
213
|
}
|
|
151
214
|
}
|
|
215
|
+
clusters.push({ x: x0, y: y0, width: x1 - x0 + 1, height: y1 - y0 + 1, pixels });
|
|
152
216
|
}
|
|
153
|
-
|
|
217
|
+
return clusters;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* The part of the page a crop should show: every patch that counts on its own,
|
|
221
|
+
* or, when none does but together they do, all of them. The second case is
|
|
222
|
+
* several small real edits — five recoloured icons — which must still be shown.
|
|
223
|
+
*/
|
|
224
|
+
export function regionOfInterest(clusters, rule) {
|
|
225
|
+
const own = clusters.filter(c => c.pixels >= rule.minPixels);
|
|
226
|
+
return union(own.length ? own : clusters);
|
|
227
|
+
}
|
|
228
|
+
/** The box around every region given, or null for none. */
|
|
229
|
+
function union(regions) {
|
|
230
|
+
if (!regions.length)
|
|
154
231
|
return null;
|
|
155
|
-
|
|
232
|
+
const x0 = Math.min(...regions.map(r => r.x));
|
|
233
|
+
const y0 = Math.min(...regions.map(r => r.y));
|
|
234
|
+
const x1 = Math.max(...regions.map(r => r.x + r.width));
|
|
235
|
+
const y1 = Math.max(...regions.map(r => r.y + r.height));
|
|
236
|
+
return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* What changed, as a value: the exact pixels of both sides inside the changed
|
|
240
|
+
* region, not where on the page it sits.
|
|
241
|
+
*
|
|
242
|
+
* Two routes with the same fingerprint show the same change — one nav edit
|
|
243
|
+
* seen on six pages — so the report can show it once. Exact bytes, not a
|
|
244
|
+
* tolerance: merging two changes that merely look alike would hide one.
|
|
245
|
+
*/
|
|
246
|
+
function fingerprint(before, after, region) {
|
|
247
|
+
const hash = createHash('sha1').update(`${region.width}x${region.height}`);
|
|
248
|
+
const stride = before.width * 4;
|
|
249
|
+
for (const img of [before, after]) {
|
|
250
|
+
for (let y = region.y; y < region.y + region.height; y++) {
|
|
251
|
+
const start = y * stride + region.x * 4;
|
|
252
|
+
hash.update(img.data.subarray(start, start + region.width * 4));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return hash.digest('hex');
|
|
156
256
|
}
|
|
157
257
|
/** Expand a region by padding and to a minimum size, clamped to the canvas. */
|
|
158
258
|
export function expandRegion(region, canvas, padding, min) {
|
|
@@ -243,7 +343,10 @@ export function diffImages(beforePng, afterPng, options = {}) {
|
|
|
243
343
|
}
|
|
244
344
|
}
|
|
245
345
|
}
|
|
246
|
-
|
|
346
|
+
// One pass groups the changed pixels; their union is the bounding box.
|
|
347
|
+
const gap = options.clusterGap ?? 48;
|
|
348
|
+
const clusters = changedPixels > 0 ? findClusters(diff, gap) : [];
|
|
349
|
+
const region = union(clusters);
|
|
247
350
|
const result = {
|
|
248
351
|
changedRatio: changedPixels / (width * height),
|
|
249
352
|
changedPixels,
|
|
@@ -258,14 +361,29 @@ export function diffImages(beforePng, afterPng, options = {}) {
|
|
|
258
361
|
shift,
|
|
259
362
|
};
|
|
260
363
|
// With a shift, crop what is left once the move is undone; without one, crop
|
|
261
|
-
// the change itself. A pure shift leaves nothing
|
|
262
|
-
// sentence is the report, and the full pages are already
|
|
364
|
+
// the change itself. A pure shift leaves nothing that counts and gets no
|
|
365
|
+
// crop: the sentence is the report, and the full pages are already
|
|
366
|
+
// published. "Counts" is the verdict's own rule, so the crop can never show
|
|
367
|
+
// something the report just called unchanged.
|
|
368
|
+
const rule = options.rule ?? ANY_PIXEL;
|
|
263
369
|
const cropFrom = alignedBefore ?? before;
|
|
264
|
-
const
|
|
370
|
+
const leftOver = shift ? shift.alignedChangedPixels : changedPixels;
|
|
371
|
+
const cropRegion = meetsRule(leftOver, leftOver / (width * height), rule)
|
|
372
|
+
? regionOfInterest(alignedDiff ? findClusters(alignedDiff, gap) : clusters, rule)
|
|
373
|
+
: null;
|
|
265
374
|
if (cropRegion) {
|
|
266
375
|
const area = cropRegion.width * cropRegion.height;
|
|
267
376
|
if (area / (width * height) <= CROP_MAX_RATIO) {
|
|
268
|
-
|
|
377
|
+
// Only what can be grouped is fingerprinted: a localized change on an
|
|
378
|
+
// unmoved page. A move is grouped by its distance instead.
|
|
379
|
+
if (!shift)
|
|
380
|
+
result.fingerprint = fingerprint(before, after, cropRegion);
|
|
381
|
+
let expanded = expandRegion(cropRegion, { width, height }, options.padding ?? 80, options.minCrop ?? { width: 800, height: 400 });
|
|
382
|
+
// A change that spans most of the width is shown full width: cutting a
|
|
383
|
+
// row of content part way through, as a padded box did, reads as the
|
|
384
|
+
// page being clipped.
|
|
385
|
+
if (expanded.width >= width * WIDE_SHARE)
|
|
386
|
+
expanded = { ...expanded, x: 0, width };
|
|
269
387
|
// Only crop when it meaningfully zooms in.
|
|
270
388
|
if (expanded.width * expanded.height < width * height * 0.8) {
|
|
271
389
|
result.crop = {
|
package/dist/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
CHANGED
|
@@ -65,9 +65,12 @@ export interface ProbeResult {
|
|
|
65
65
|
/**
|
|
66
66
|
* Probe a base URL with the headers we will use for capture.
|
|
67
67
|
*/
|
|
68
|
-
export declare function probeUrl(url: string, headers?: Record<string, string>,
|
|
68
|
+
export declare function probeUrl(url: string, headers?: Record<string, string>,
|
|
69
|
+
/** `drain` reads the whole body, so a dev server has finished rendering when this resolves. */
|
|
70
|
+
options?: {
|
|
69
71
|
timeoutMs?: number;
|
|
70
72
|
redirect?: RequestRedirect;
|
|
73
|
+
drain?: boolean;
|
|
71
74
|
}): Promise<ProbeResult>;
|
|
72
75
|
/**
|
|
73
76
|
* Explain a 401/403 in one actionable sentence. Accepts a probe result or the typed capture error.
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAwB,eAAe,EAAqC,MAAM,aAAa,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAe9C;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAMnD;AAED,sEAAsE;AACtE,wBAAsB,mBAAmB,+CAMxC;AAoBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAM/D;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gFAAgF;IAChF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,GAAE,MAAM,EAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAWxF;AAED,qEAAqE;AACrE,wBAAsB,eAAe,CAAC,KAAK,GAAE,MAAM,EAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEzF;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAwB,eAAe,EAAqC,MAAM,aAAa,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAe9C;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAMnD;AAED,sEAAsE;AACtE,wBAAsB,mBAAmB,+CAMxC;AAoBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAM/D;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gFAAgF;IAChF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,GAAE,MAAM,EAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAWxF;AAED,qEAAqE;AACrE,wBAAsB,eAAe,CAAC,KAAK,GAAE,MAAM,EAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEzF;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;AACpC,+FAA+F;AAC/F,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChF,OAAO,CAAC,WAAW,CAAC,CAStB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAO3F"}
|
package/dist/doctor.js
CHANGED
|
@@ -114,9 +114,13 @@ export async function detectDevServer(ports = DEV_PORTS) {
|
|
|
114
114
|
/**
|
|
115
115
|
* Probe a base URL with the headers we will use for capture.
|
|
116
116
|
*/
|
|
117
|
-
export async function probeUrl(url, headers = {},
|
|
117
|
+
export async function probeUrl(url, headers = {},
|
|
118
|
+
/** `drain` reads the whole body, so a dev server has finished rendering when this resolves. */
|
|
119
|
+
options = {}) {
|
|
118
120
|
try {
|
|
119
121
|
const res = await fetch(url, { method: 'GET', headers, redirect: options.redirect ?? 'follow', signal: AbortSignal.timeout(options.timeoutMs ?? 10_000) });
|
|
122
|
+
if (options.drain)
|
|
123
|
+
await res.arrayBuffer();
|
|
120
124
|
const contentType = res.headers.get('content-type')?.split(';')[0].trim().toLowerCase();
|
|
121
125
|
return { status: res.status, vercel: isVercelResponse(res.headers), contentType: contentType || undefined };
|
|
122
126
|
}
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|