@juangadm/pre-post 1.0.0 → 1.1.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 +99 -20
- package/dist/baseline.d.ts +119 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +316 -0
- package/dist/baseline.js.map +1 -0
- package/dist/bin/cli.js +80 -41
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +31 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +239 -97
- package/dist/browser.js.map +1 -1
- package/dist/commands/compare.d.ts.map +1 -1
- package/dist/commands/compare.js +21 -3
- 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 +4 -1
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/doctor.d.ts +32 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +90 -9
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/pr.d.ts +4 -0
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +150 -50
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/prune.js +1 -1
- package/dist/commands/prune.js.map +1 -1
- package/dist/comparison.d.ts +104 -0
- package/dist/comparison.d.ts.map +1 -0
- package/dist/comparison.js +236 -0
- package/dist/comparison.js.map +1 -0
- package/dist/config.d.ts +12 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -3
- package/dist/config.js.map +1 -1
- package/dist/deployments.d.ts +71 -0
- package/dist/deployments.d.ts.map +1 -0
- package/dist/deployments.js +204 -0
- package/dist/deployments.js.map +1 -0
- package/dist/diff-pool.d.ts.map +1 -1
- package/dist/diff-pool.js +5 -2
- package/dist/diff-pool.js.map +1 -1
- package/dist/diff-worker.d.ts +3 -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 +10 -0
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +117 -7
- package/dist/diff.js.map +1 -1
- package/dist/doctor.d.ts +42 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +73 -7
- package/dist/doctor.js.map +1 -1
- package/dist/git.d.ts +41 -3
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +103 -7
- package/dist/git.js.map +1 -1
- package/dist/github.d.ts +92 -2
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +191 -20
- package/dist/github.js.map +1 -1
- package/dist/landing.d.ts +48 -0
- package/dist/landing.d.ts.map +1 -0
- package/dist/landing.js +93 -0
- package/dist/landing.js.map +1 -0
- package/dist/pkg.d.ts +9 -0
- package/dist/pkg.d.ts.map +1 -1
- package/dist/pkg.js +14 -0
- package/dist/pkg.js.map +1 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +49 -26
- package/dist/report.js.map +1 -1
- package/dist/routes.d.ts +27 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +98 -23
- package/dist/routes.js.map +1 -1
- package/dist/run.d.ts +88 -8
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +214 -26
- package/dist/run.js.map +1 -1
- package/dist/sameness.d.ts +91 -0
- package/dist/sameness.d.ts.map +1 -0
- package/dist/sameness.js +157 -0
- package/dist/sameness.js.map +1 -0
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +7 -1
- package/dist/sessions.js.map +1 -1
- package/dist/shift.d.ts +67 -0
- package/dist/shift.d.ts.map +1 -0
- package/dist/shift.js +184 -0
- package/dist/shift.js.map +1 -0
- package/dist/types.d.ts +67 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/url.d.ts +12 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +30 -0
- package/dist/url.js.map +1 -0
- package/package.json +1 -1
- package/skill/SKILL.md +40 -7
|
@@ -6,10 +6,15 @@ export declare function runDetect(opts?: {
|
|
|
6
6
|
cwd?: string;
|
|
7
7
|
maxRoutes?: number;
|
|
8
8
|
framework?: Framework;
|
|
9
|
+
base?: string;
|
|
9
10
|
}): {
|
|
10
11
|
framework: Framework;
|
|
11
12
|
appRoot: string;
|
|
12
13
|
changedFiles: number;
|
|
14
|
+
base: {
|
|
15
|
+
sha: string;
|
|
16
|
+
source: "merge-base" | "explicit" | "fetched" | "head";
|
|
17
|
+
} | null;
|
|
13
18
|
routes: {
|
|
14
19
|
path: string;
|
|
15
20
|
confidence: "high" | "medium" | "low";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/commands/detect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,wBAAgB,SAAS,CAAC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAO
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/commands/detect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,wBAAgB,SAAS,CAAC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;;;;;;;;;;EAa9G"}
|
package/dist/commands/detect.js
CHANGED
|
@@ -7,11 +7,14 @@ import { repoRoot } from '../git.js';
|
|
|
7
7
|
import { detectRoutesForRepo } from '../routes.js';
|
|
8
8
|
export function runDetect(opts = {}) {
|
|
9
9
|
const root = repoRoot(opts.cwd);
|
|
10
|
-
const detection = detectRoutesForRepo({ cwd: root, config: loadConfig(root), maxRoutes: opts.maxRoutes, framework: opts.framework });
|
|
10
|
+
const detection = detectRoutesForRepo({ cwd: root, config: loadConfig(root), maxRoutes: opts.maxRoutes, framework: opts.framework, diffTarget: opts.base });
|
|
11
11
|
return {
|
|
12
12
|
framework: detection.framework,
|
|
13
13
|
appRoot: path.relative(root, detection.appRoot) || '.',
|
|
14
14
|
changedFiles: detection.changedFiles.length,
|
|
15
|
+
// Which commit the count is relative to. A reader who cannot see this
|
|
16
|
+
// cannot tell "nothing changed" from "compared against the wrong thing".
|
|
17
|
+
base: detection.base && { sha: detection.base.sha.slice(0, 7), source: detection.base.source },
|
|
15
18
|
routes: detection.routes.map(r => ({ path: r.path, confidence: r.confidence, reason: r.reason })),
|
|
16
19
|
skippedDynamic: detection.skippedDynamic,
|
|
17
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/commands/detect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/commands/detect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,OAAmF,EAAE;IAC7G,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5J,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,GAAG;QACtD,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM;QAC3C,sEAAsE;QACtE,yEAAyE;QACzE,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;QAC9F,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACjG,cAAc,EAAE,SAAS,CAAC,cAAc;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -5,6 +5,38 @@ export interface DoctorCheck {
|
|
|
5
5
|
name: string;
|
|
6
6
|
ok: boolean;
|
|
7
7
|
detail: string;
|
|
8
|
+
/**
|
|
9
|
+
* True when `pre-post pr` cannot run at all without this.
|
|
10
|
+
*
|
|
11
|
+
* The distinction is the whole exit-code contract. Most of what doctor
|
|
12
|
+
* reports narrows *which strategy* a run will pick — no dev server just
|
|
13
|
+
* means a deployment or the base commit will be served instead — and
|
|
14
|
+
* failing the command for those would make the check useless, because
|
|
15
|
+
* nearly every healthy machine trips one. Only the three things with no
|
|
16
|
+
* alternative are required.
|
|
17
|
+
*/
|
|
18
|
+
required?: boolean;
|
|
8
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* doctor's contract, relied on by anything that runs it before a run:
|
|
22
|
+
*
|
|
23
|
+
* exit 0 every required check passed; `pre-post pr` can run
|
|
24
|
+
* exit 1 a required check failed; it cannot
|
|
25
|
+
*
|
|
26
|
+
* Advisory failures never change the exit code — they are printed so a human
|
|
27
|
+
* can see what was narrowed, not to fail the command.
|
|
28
|
+
*/
|
|
29
|
+
export declare function doctorExitCode(checks: DoctorCheck[]): number;
|
|
30
|
+
/**
|
|
31
|
+
* Can `pr` name the repository it would publish to?
|
|
32
|
+
*
|
|
33
|
+
* Being inside a git repository is not enough: `runPr` calls
|
|
34
|
+
* `resolveOwnerRepo` unconditionally, which needs a parseable `origin` or
|
|
35
|
+
* `GH_REPO`/`GITHUB_REPOSITORY`. A checkout with neither — a clone from a
|
|
36
|
+
* mirror, a bare worktree, `origin` pointing at something that is not GitHub —
|
|
37
|
+
* passes the git check and then throws before the pipeline starts. Reporting
|
|
38
|
+
* "ready" there is exactly the lie the exit-code contract exists to prevent.
|
|
39
|
+
*/
|
|
40
|
+
export declare function repoIdentityCheck(root: string): DoctorCheck;
|
|
9
41
|
export declare function runDoctor(cwd?: string): Promise<DoctorCheck[]>;
|
|
10
42
|
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAE5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAM3D;AAkCD,wBAAsB,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAoCpE"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -2,36 +2,117 @@
|
|
|
2
2
|
* `pre-post doctor` — the same checks `pr` performs, reported instead of enforced.
|
|
3
3
|
*/
|
|
4
4
|
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
5
6
|
import { browserDescription } from '../browser.js';
|
|
6
7
|
import { configPath, CONFIG_FILENAME, loadConfig } from '../config.js';
|
|
7
|
-
import {
|
|
8
|
+
import { ensureBrowser, scanDevServers } from '../doctor.js';
|
|
8
9
|
import { GH_LOGIN_HINT } from '../errors.js';
|
|
9
|
-
import { repoRoot } from '../git.js';
|
|
10
|
-
import {
|
|
10
|
+
import { repoRoot, resolveOwnerRepo } from '../git.js';
|
|
11
|
+
import { servableDir } from '../baseline.js';
|
|
12
|
+
import { cannotPublishHint, checkWriteAccess, findToken, GitHub } from '../github.js';
|
|
11
13
|
import { closeBrowser } from '../browser.js';
|
|
14
|
+
/**
|
|
15
|
+
* doctor's contract, relied on by anything that runs it before a run:
|
|
16
|
+
*
|
|
17
|
+
* exit 0 every required check passed; `pre-post pr` can run
|
|
18
|
+
* exit 1 a required check failed; it cannot
|
|
19
|
+
*
|
|
20
|
+
* Advisory failures never change the exit code — they are printed so a human
|
|
21
|
+
* can see what was narrowed, not to fail the command.
|
|
22
|
+
*/
|
|
23
|
+
export function doctorExitCode(checks) {
|
|
24
|
+
return checks.some(c => c.required && !c.ok) ? 1 : 0;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Can `pr` name the repository it would publish to?
|
|
28
|
+
*
|
|
29
|
+
* Being inside a git repository is not enough: `runPr` calls
|
|
30
|
+
* `resolveOwnerRepo` unconditionally, which needs a parseable `origin` or
|
|
31
|
+
* `GH_REPO`/`GITHUB_REPOSITORY`. A checkout with neither — a clone from a
|
|
32
|
+
* mirror, a bare worktree, `origin` pointing at something that is not GitHub —
|
|
33
|
+
* passes the git check and then throws before the pipeline starts. Reporting
|
|
34
|
+
* "ready" there is exactly the lie the exit-code contract exists to prevent.
|
|
35
|
+
*/
|
|
36
|
+
export function repoIdentityCheck(root) {
|
|
37
|
+
try {
|
|
38
|
+
return { name: 'repo', ok: true, detail: resolveOwnerRepo(root), required: true };
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return { name: 'repo', ok: false, detail: err.message, required: true };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* "Token found" was an all-clear that a token cannot earn by existing. In a
|
|
46
|
+
* Claude Code web sandbox both `GH_TOKEN` and `GITHUB_TOKEN` are set to a
|
|
47
|
+
* placeholder the egress proxy substitutes on some paths and not others, and
|
|
48
|
+
* this check said `ok token found` while every call `pr` makes answered 401.
|
|
49
|
+
* So ask the API the question the run depends on, and report its answer.
|
|
50
|
+
*
|
|
51
|
+
* Which outcomes are `required` follows what `pr` actually enforces, or the
|
|
52
|
+
* contract would promise something the run does not keep: a missing or refused
|
|
53
|
+
* token stops it, while an API that cannot be reached only makes it say so and
|
|
54
|
+
* carry on, so that one is advisory.
|
|
55
|
+
*/
|
|
56
|
+
async function githubCheck(cwd) {
|
|
57
|
+
const found = findToken();
|
|
58
|
+
// Required because `pr` calls requireToken() on any run that is not a dry
|
|
59
|
+
// run, so without one the command stops before it captures anything.
|
|
60
|
+
if (!found)
|
|
61
|
+
return { name: 'github', ok: false, detail: GH_LOGIN_HINT, required: true };
|
|
62
|
+
let ownerRepo;
|
|
63
|
+
try {
|
|
64
|
+
ownerRepo = resolveOwnerRepo(repoRoot(cwd));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// There is nothing to ask the API about. The `repo` check below carries
|
|
68
|
+
// that as the required failure, so this one only records what went
|
|
69
|
+
// unchecked rather than reporting the same problem twice.
|
|
70
|
+
return { name: 'github', ok: false, detail: `${found.source} found, but no repository to check it against` };
|
|
71
|
+
}
|
|
72
|
+
const access = await checkWriteAccess(new GitHub(found.token), ownerRepo);
|
|
73
|
+
if (access.writable)
|
|
74
|
+
return { name: 'github', ok: true, detail: `token can publish to ${ownerRepo}`, required: true };
|
|
75
|
+
if (access.reason === 'rejected')
|
|
76
|
+
return { name: 'github', ok: false, detail: cannotPublishHint(ownerRepo, found.source), required: true };
|
|
77
|
+
return { name: 'github', ok: false, detail: `could not reach GitHub to check the token (${access.detail})` };
|
|
78
|
+
}
|
|
12
79
|
export async function runDoctor(cwd) {
|
|
13
80
|
const checks = [];
|
|
14
81
|
try {
|
|
15
82
|
await ensureBrowser();
|
|
16
|
-
checks.push({ name: 'browser', ok: true, detail: browserDescription() });
|
|
83
|
+
checks.push({ name: 'browser', ok: true, detail: browserDescription(), required: true });
|
|
17
84
|
}
|
|
18
85
|
catch (err) {
|
|
19
|
-
checks.push({ name: 'browser', ok: false, detail: err.message });
|
|
86
|
+
checks.push({ name: 'browser', ok: false, detail: err.message, required: true });
|
|
20
87
|
}
|
|
21
88
|
finally {
|
|
22
89
|
await closeBrowser();
|
|
23
90
|
}
|
|
24
|
-
checks.push(
|
|
25
|
-
|
|
26
|
-
|
|
91
|
+
checks.push(await githubCheck(cwd));
|
|
92
|
+
// Name the ports that answered but were passed over. "None found on the
|
|
93
|
+
// usual ports" reads as a lie to anyone who knows something is listening on
|
|
94
|
+
// one of them, and the usual something is a macOS system service on 5000.
|
|
95
|
+
const dev = await scanDevServers();
|
|
96
|
+
const ignored = dev.ignored.map(i => `${i.port} answered ${i.status}`).join(', ');
|
|
97
|
+
checks.push(dev.url
|
|
98
|
+
? { name: 'devserver', ok: true, detail: dev.url }
|
|
99
|
+
: { name: 'devserver', ok: false, detail: `none found on the usual ports${ignored ? ` (not a dev server: ${ignored})` : ''}` });
|
|
27
100
|
try {
|
|
28
101
|
const root = repoRoot(cwd);
|
|
102
|
+
checks.push(repoIdentityCheck(root));
|
|
29
103
|
const cfg = loadConfig(root);
|
|
30
104
|
checks.push(cfg.before ? { name: 'before', ok: true, detail: cfg.before } : { name: 'before', ok: false, detail: 'not set — pass --before once and it is saved' });
|
|
31
105
|
checks.push({ name: 'config', ok: true, detail: fs.existsSync(configPath(root)) ? CONFIG_FILENAME : 'none (defaults)' });
|
|
106
|
+
// The last-resort baseline serves the base commit itself, so knowing
|
|
107
|
+
// whether anything here *can* be served is worth reporting before a run
|
|
108
|
+
// needs it.
|
|
109
|
+
const app = servableDir(root);
|
|
110
|
+
checks.push(app
|
|
111
|
+
? { name: 'servable', ok: true, detail: `${path.relative(root, app.dir) || '.'} (${app.script})` }
|
|
112
|
+
: { name: 'servable', ok: false, detail: 'no dev/serve/start script found; the local baseline is unavailable' });
|
|
32
113
|
}
|
|
33
114
|
catch {
|
|
34
|
-
checks.push({ name: 'git', ok: false, detail: 'not a repository' });
|
|
115
|
+
checks.push({ name: 'git', ok: false, detail: 'not a repository', required: true });
|
|
35
116
|
}
|
|
36
117
|
return checks;
|
|
37
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import readline from 'readline';
|
|
6
6
|
import { launchHeadedBrowser } from '../doctor.js';
|
|
7
7
|
import { saveSession } from '../sessions.js';
|
|
8
|
-
import { normalizeUrl } from '../
|
|
8
|
+
import { normalizeUrl } from '../url.js';
|
|
9
9
|
function waitForEnter(prompt) {
|
|
10
10
|
return new Promise(resolve => {
|
|
11
11
|
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
package/dist/commands/pr.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface PrCommandOptions extends Partial<Settings> {
|
|
|
9
9
|
after?: string;
|
|
10
10
|
routes?: string[];
|
|
11
11
|
framework?: Framework;
|
|
12
|
+
/** Diff against this ref instead of the detected fork point. */
|
|
13
|
+
base?: string;
|
|
12
14
|
headers?: Record<string, string>;
|
|
13
15
|
cookies?: Array<{
|
|
14
16
|
name: string;
|
|
@@ -21,6 +23,8 @@ export interface PrCommandOptions extends Partial<Settings> {
|
|
|
21
23
|
/** Publish assets but do not touch the PR */
|
|
22
24
|
comment?: boolean;
|
|
23
25
|
pr?: number;
|
|
26
|
+
/** Rebuild the baseline from the base commit when no URL is reachable. Default true. */
|
|
27
|
+
localBaseline?: boolean;
|
|
24
28
|
version?: string;
|
|
25
29
|
log?: (msg: string) => void;
|
|
26
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,
|
|
1
|
+
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAe,SAAS,EAAiB,WAAW,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAA+B,QAAQ,EAAgB,MAAM,cAAc,CAAC;AAanF,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,QAAQ,CAAC;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wFAAwF;IACxF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAiBD,wBAAsB,KAAK,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoO7E"}
|
package/dist/commands/pr.js
CHANGED
|
@@ -4,21 +4,26 @@
|
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import os from 'os';
|
|
6
6
|
import path from 'path';
|
|
7
|
-
import { ARTIFACT_KINDS } from '../types.js';
|
|
8
7
|
import { loadConfig, resolveSettings, updateConfig } from '../config.js';
|
|
9
8
|
import { currentBranch, headSha, repoRoot, resolveOwnerRepo } from '../git.js';
|
|
10
9
|
import { detectRoutesForRepo, resolveSample } from '../routes.js';
|
|
11
10
|
import { closeBrowser } from '../browser.js';
|
|
12
11
|
import { parseViewport } from '../viewport.js';
|
|
13
12
|
import { authHint, detectDevServer, ensureBrowser, NeedsHumanError, probeUrl } from '../doctor.js';
|
|
14
|
-
import { findOpenPr, getPr, GitHub, publishAssets, requireToken, upsertStickyComment } from '../github.js';
|
|
13
|
+
import { cannotPublishHint, checkWriteAccess, findOpenPr, findToken, getPr, GitHub, publishAssets, requireToken, upsertPrDescription, upsertStickyComment } from '../github.js';
|
|
15
14
|
import { buildComment, STICKY_MARKER } from '../report.js';
|
|
16
15
|
import { resolveAuth } from '../sessions.js';
|
|
17
|
-
import {
|
|
18
|
-
import { joinUrl
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
import { routeSlug, runTasks } from '../run.js';
|
|
17
|
+
import { joinUrl } from '../url.js';
|
|
18
|
+
import { describeComparison, resolveComparison } from '../comparison.js';
|
|
19
|
+
/**
|
|
20
|
+
* What ends up on the assets branch. The diff overlay is an intermediate used
|
|
21
|
+
* to locate the changed region; Pre beside Post is the comparison a reviewer
|
|
22
|
+
* reads, so shipping the overlay is upload time and storage for nothing.
|
|
23
|
+
*/
|
|
24
|
+
const PUBLISHED_KINDS = ['before', 'after', 'cropBefore', 'cropAfter'];
|
|
25
|
+
function headersFor(config, opts) {
|
|
26
|
+
return resolveAuth({ configHeaders: config.headers, headers: opts.headers, urls: [] })?.headers ?? {};
|
|
22
27
|
}
|
|
23
28
|
function runId(now) {
|
|
24
29
|
return now.toISOString().replace(/[-:]/g, '').replace('T', '-').slice(0, 15);
|
|
@@ -31,27 +36,100 @@ export async function runPr(opts = {}) {
|
|
|
31
36
|
const settings = resolveSettings(config, opts);
|
|
32
37
|
const ownerRepo = resolveOwnerRepo(root);
|
|
33
38
|
const branch = currentBranch(root);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (!beforeRaw) {
|
|
37
|
-
throw new NeedsHumanError('No production URL known for the "before" state. Re-run with --before https://your-production-url (it is saved to .pre-post.json for next time).');
|
|
38
|
-
}
|
|
39
|
-
const before = normalizeUrl(beforeRaw);
|
|
40
|
-
if (opts.before && config.before !== before) {
|
|
41
|
-
updateConfig(root, { before });
|
|
42
|
-
log('Saved production URL to .pre-post.json');
|
|
43
|
-
}
|
|
39
|
+
/** Tears down anything resolution started (a local dev server). */
|
|
40
|
+
let cleanupComparison = async () => undefined;
|
|
44
41
|
// --- GitHub access (checked before any time is spent) -----------------------
|
|
45
|
-
|
|
42
|
+
// A dry run still has to *read* GitHub: the PR, and the deployments that
|
|
43
|
+
// decide what Pre and Post are. Only writing is off. Withholding the client
|
|
44
|
+
// entirely made --dry-run the one mode that could never use a deployment,
|
|
45
|
+
// so it always demanded a dev server — from the person least likely to have
|
|
46
|
+
// one. Reads use `gh`; publishing and commenting use `writeGh`.
|
|
47
|
+
const found = opts.dryRun ? findToken() : requireToken();
|
|
48
|
+
const gh = found ? new GitHub(found.token) : null;
|
|
49
|
+
const writeGh = opts.dryRun ? null : gh;
|
|
46
50
|
// --- Start the slow, independent things now; they overlap route detection ----
|
|
47
51
|
const browserReady = ensureBrowser();
|
|
48
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Everything this run started, in a form every early exit can call.
|
|
54
|
+
*
|
|
55
|
+
* The browser is launched from here rather than at the capture, so any throw
|
|
56
|
+
* before that block owns closing it: the CLI's `process.exit` hides the
|
|
57
|
+
* difference, but a caller using `runPr()` as a library catches the error and
|
|
58
|
+
* is left with a Chromium nothing references. Awaiting the launch first is
|
|
59
|
+
* what makes it work — `closeBrowser()` drops a pending launch and closes
|
|
60
|
+
* nothing, and the launch then resolves into an orphan.
|
|
61
|
+
*/
|
|
62
|
+
const stopEverything = async () => {
|
|
63
|
+
await browserReady.catch(() => undefined);
|
|
64
|
+
await closeBrowser();
|
|
65
|
+
await cleanupComparison();
|
|
66
|
+
};
|
|
67
|
+
// Whether the token may write, asked at the same time as the PR lookup so it
|
|
68
|
+
// costs no wall clock, and answered before anything expensive begins. A token
|
|
69
|
+
// that cannot read fails the lookup below and never reaches capture; one that
|
|
70
|
+
// reads but cannot write passes every check this run makes until the publish,
|
|
71
|
+
// which is a whole capture pass later — 22.7s for one route at one viewport,
|
|
72
|
+
// measured on a runner.
|
|
73
|
+
const writeAccess = writeGh && found
|
|
74
|
+
? checkWriteAccess(writeGh, ownerRepo).then(access => ({ access, source: found.source }))
|
|
75
|
+
: null;
|
|
76
|
+
const lookup = gh
|
|
49
77
|
? opts.pr ? getPr(gh, ownerRepo, opts.pr) : branch ? findOpenPr(gh, ownerRepo, branch) : Promise.resolve(null)
|
|
50
78
|
: Promise.resolve(null);
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
// A dry run used to touch GitHub not at all, and must still work when it
|
|
80
|
+
// cannot: it is what someone runs before anything is set up. A stale token or
|
|
81
|
+
// an unreachable API degrades it to "no PR", never ends the run. A real run
|
|
82
|
+
// needs the PR to publish against, so there the failure still surfaces.
|
|
83
|
+
const prLookup = opts.dryRun
|
|
84
|
+
? lookup.catch(err => { log(`GitHub lookup failed (${err instanceof Error ? err.message : err}); continuing without it.`); return null; })
|
|
85
|
+
: lookup;
|
|
86
|
+
// Local detection runs regardless: it is cheap, and it is the fallback when
|
|
87
|
+
// the PR has no preview deployment.
|
|
88
|
+
const explicitAfter = opts.after ?? config.after;
|
|
89
|
+
const devServer = explicitAfter ? Promise.resolve(explicitAfter) : detectDevServer();
|
|
90
|
+
// Detection is synchronous git + fs work, so run it while the PR lookup is in
|
|
91
|
+
// flight rather than after it.
|
|
92
|
+
const detection = detectRoutesForRepo({ cwd: root, config, maxRoutes: settings.maxRoutes, framework: opts.framework, diffTarget: opts.base, log });
|
|
93
|
+
const appPrefix = path.relative(root, detection.appRoot) || undefined;
|
|
94
|
+
const head = headSha(root);
|
|
95
|
+
const pr = await prLookup;
|
|
96
|
+
// Before the local baseline, which can install and build a whole app, and
|
|
97
|
+
// long before the captures. An answer that is not about access — a 500, a
|
|
98
|
+
// dropped connection — is not evidence of anything, so it says so and the run
|
|
99
|
+
// continues to fail wherever it really fails.
|
|
100
|
+
const write = await writeAccess;
|
|
101
|
+
if (write && !write.access.writable) {
|
|
102
|
+
if (write.access.reason === 'rejected') {
|
|
103
|
+
await stopEverything();
|
|
104
|
+
throw new NeedsHumanError(cannotPublishHint(ownerRepo, write.source));
|
|
105
|
+
}
|
|
106
|
+
log(`Could not check whether the token can publish (${write.access.detail}); continuing.`);
|
|
107
|
+
}
|
|
108
|
+
// --- What are we comparing? ---------------------------------------------------
|
|
109
|
+
const headers = headersFor(config, opts);
|
|
110
|
+
const comparison = await resolveComparison({
|
|
111
|
+
gh, ownerRepo, pr, repoRoot: root, appPrefix, config,
|
|
112
|
+
// Detection already established this; the baseline must be built from the
|
|
113
|
+
// same commit, or Pre and the route list disagree about what changed.
|
|
114
|
+
baseSha: detection.base?.sha,
|
|
115
|
+
// --base is a constraint on the baseline, not just on the route list.
|
|
116
|
+
baseExplicit: detection.base?.source === 'explicit',
|
|
117
|
+
// So a preview can be found for a branch that has been pushed but has no
|
|
118
|
+
// PR open yet — the host builds on push, not on PR.
|
|
119
|
+
headSha: head ?? undefined,
|
|
120
|
+
before: opts.before, after: explicitAfter,
|
|
121
|
+
devServer, probe: url => probeUrl(url, headers),
|
|
122
|
+
allowLocalBaseline: opts.localBaseline, log,
|
|
123
|
+
});
|
|
124
|
+
cleanupComparison = comparison.stop;
|
|
125
|
+
for (const line of describeComparison(comparison))
|
|
126
|
+
log(line);
|
|
127
|
+
const before = comparison.before.url;
|
|
128
|
+
const after = comparison.after.url;
|
|
129
|
+
if (opts.before && config.before !== before) {
|
|
130
|
+
updateConfig(root, { before });
|
|
131
|
+
log('Saved production URL to .pre-post.json');
|
|
132
|
+
}
|
|
55
133
|
// --- Routes (sync: git + import graph) ----------------------------------------
|
|
56
134
|
const samples = config.samples || {};
|
|
57
135
|
let routes;
|
|
@@ -60,7 +138,6 @@ export async function runPr(opts = {}) {
|
|
|
60
138
|
routes = opts.routes;
|
|
61
139
|
}
|
|
62
140
|
else {
|
|
63
|
-
const detection = detectRoutesForRepo({ cwd: root, config, maxRoutes: settings.maxRoutes, framework: opts.framework });
|
|
64
141
|
routes = detection.routes.map(r => r.path);
|
|
65
142
|
skippedDynamic = detection.skippedDynamic;
|
|
66
143
|
log(`Routes (${detection.framework}, ${detection.durationMs}ms): ${routes.length ? routes.join(', ') : 'none detected'}`);
|
|
@@ -71,21 +148,25 @@ export async function runPr(opts = {}) {
|
|
|
71
148
|
log('No routes detected from the diff; capturing / only.');
|
|
72
149
|
}
|
|
73
150
|
}
|
|
74
|
-
// ---
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
151
|
+
// --- Reachability ---------------------------------------------------------------
|
|
152
|
+
// Resolution already probed whatever it chose; this catches a side that died
|
|
153
|
+
// in between, and names which one so the message is actionable.
|
|
154
|
+
const fail = async (message) => {
|
|
155
|
+
await stopEverything();
|
|
156
|
+
throw new NeedsHumanError(message);
|
|
157
|
+
};
|
|
158
|
+
const [probe, afterProbe] = await Promise.all([
|
|
159
|
+
comparison.before.probe ?? probeUrl(before, headers),
|
|
160
|
+
comparison.after.probe ?? probeUrl(after, headers),
|
|
161
|
+
]);
|
|
83
162
|
if (probe.status === null)
|
|
84
|
-
|
|
163
|
+
await fail(`Cannot reach ${before} (Pre — ${comparison.before.detail}).`);
|
|
85
164
|
if (probe.status === 401 || probe.status === 403)
|
|
86
|
-
|
|
165
|
+
await fail(authHint({ url: before, vercel: probe.vercel }));
|
|
87
166
|
if (afterProbe.status === null)
|
|
88
|
-
|
|
167
|
+
await fail(`Cannot reach ${after} (Post — ${comparison.after.detail}).`);
|
|
168
|
+
if (afterProbe.status === 401 || afterProbe.status === 403)
|
|
169
|
+
await fail(authHint({ url: after, vercel: afterProbe.vercel }));
|
|
89
170
|
const auth = resolveAuth({ configHeaders: config.headers, headers: opts.headers, cookies: opts.cookies, cookieUrl: before, urls: [before, after] });
|
|
90
171
|
// --- Capture -------------------------------------------------------------------
|
|
91
172
|
const now = new Date();
|
|
@@ -101,32 +182,42 @@ export async function runPr(opts = {}) {
|
|
|
101
182
|
}
|
|
102
183
|
log(`Capturing ${tasks.length * 2} screenshots (${routes.length} route(s) × ${viewports.length} viewport(s)) ...`);
|
|
103
184
|
await browserReady;
|
|
104
|
-
let
|
|
185
|
+
let run;
|
|
105
186
|
try {
|
|
106
|
-
|
|
187
|
+
run = await runTasks(tasks, {
|
|
188
|
+
outputDir, ...settings, wait: opts.wait, auth, log,
|
|
189
|
+
// So the verdict can name how Pre was chosen, not just where it points.
|
|
190
|
+
sides: { before: comparison.before, after: comparison.after },
|
|
191
|
+
});
|
|
107
192
|
}
|
|
108
193
|
finally {
|
|
109
|
-
await
|
|
194
|
+
await stopEverything();
|
|
110
195
|
}
|
|
196
|
+
const { outcomes } = run;
|
|
197
|
+
// The pipeline judges whether it compared the two sites or something standing
|
|
198
|
+
// in front of them — a sign-in wall, or a baseline that is a different site
|
|
199
|
+
// altogether. Either way there is no honest result to publish, so stop with
|
|
200
|
+
// the one thing a human has to do.
|
|
201
|
+
if (run.verdict)
|
|
202
|
+
throw new NeedsHumanError(run.verdict.hint);
|
|
111
203
|
// --- Publish -------------------------------------------------------------------
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
if (gh && changed.length) {
|
|
204
|
+
const changed = outcomes.filter(o => (o.status === 'changed' || o.status === 'added' || o.status === 'removed') && o.files);
|
|
205
|
+
if (writeGh && changed.length) {
|
|
115
206
|
const folder = pr ? `pr-${pr.number}/${id}` : `branch/${routeSlug(branch || 'detached')}/${id}`;
|
|
116
207
|
const keyFor = (o, kind) => `${folder}/${routeSlug(o.route)}-${o.viewport}-${kind}.png`;
|
|
117
208
|
const files = [];
|
|
118
209
|
for (const o of changed) {
|
|
119
|
-
for (const kind of
|
|
210
|
+
for (const kind of PUBLISHED_KINDS) {
|
|
120
211
|
const local = o.files[kind];
|
|
121
212
|
if (local)
|
|
122
213
|
files.push({ path: keyFor(o, kind), content: fs.readFileSync(local) });
|
|
123
214
|
}
|
|
124
215
|
}
|
|
125
216
|
log(`Publishing ${files.length} image(s) to ${ownerRepo}@${settings.assetsBranch} ...`);
|
|
126
|
-
const published = await publishAssets(
|
|
217
|
+
const published = await publishAssets(writeGh, ownerRepo, settings.assetsBranch, files, pr ? `Screenshots for #${pr.number} (${id})` : `Screenshots for ${branch || 'detached'} (${id})`);
|
|
127
218
|
for (const o of changed) {
|
|
128
219
|
const urls = {};
|
|
129
|
-
for (const kind of
|
|
220
|
+
for (const kind of PUBLISHED_KINDS)
|
|
130
221
|
if (o.files[kind])
|
|
131
222
|
urls[kind] = published.urls.get(keyFor(o, kind));
|
|
132
223
|
o.urls = urls;
|
|
@@ -143,12 +234,21 @@ export async function runPr(opts = {}) {
|
|
|
143
234
|
markdown: '',
|
|
144
235
|
outputDir,
|
|
145
236
|
};
|
|
146
|
-
result.markdown = buildComment(result, { version: opts.version, headSha:
|
|
147
|
-
if (
|
|
237
|
+
result.markdown = buildComment(result, { version: opts.version, headSha: head, now });
|
|
238
|
+
if (writeGh && (opts.comment ?? true)) {
|
|
148
239
|
if (pr) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
240
|
+
// The description is what a reviewer reads first, so put the images there
|
|
241
|
+
// and fall back to a comment only when the PR cannot be edited.
|
|
242
|
+
const described = await upsertPrDescription(writeGh, ownerRepo, pr.number, result.markdown, 'pre-post');
|
|
243
|
+
if (described.updated) {
|
|
244
|
+
result.commentUrl = described.html_url;
|
|
245
|
+
log(`Updated PR description: ${described.html_url}`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
const comment = await upsertStickyComment(writeGh, ownerRepo, pr.number, result.markdown, STICKY_MARKER);
|
|
249
|
+
result.commentUrl = comment.html_url;
|
|
250
|
+
log(`Cannot edit the PR description; ${comment.created ? 'posted' : 'updated'} a comment instead: ${comment.html_url}`);
|
|
251
|
+
}
|
|
152
252
|
}
|
|
153
253
|
else {
|
|
154
254
|
log(`No open PR for branch "${branch}". Open one and re-run, or paste the markdown below.`);
|
package/dist/commands/pr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/prune.js
CHANGED
|
@@ -7,7 +7,7 @@ import { GitHub, pruneAssets, requireToken } from '../github.js';
|
|
|
7
7
|
export async function runPrune(opts = {}) {
|
|
8
8
|
const root = repoRoot(opts.cwd);
|
|
9
9
|
const settings = resolveSettings(loadConfig(root), { pruneDays: opts.days });
|
|
10
|
-
const gh = new GitHub(requireToken('prune screenshots'));
|
|
10
|
+
const gh = new GitHub(requireToken('prune screenshots').token);
|
|
11
11
|
return pruneAssets(gh, resolveOwnerRepo(root), settings.assetsBranch, settings.pruneDays, opts.dryRun);
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=prune.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/commands/prune.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA0D,EAAE;IACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/commands/prune.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA0D,EAAE;IACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,WAAW,CAAC,EAAE,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACzG,CAAC"}
|