@alwaysmeticulous/cli 2.306.0 → 2.308.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/dist/command-utils/common-options.js +4 -1
- package/dist/command-utils/common-options.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.js +4 -1
- package/dist/command-utils/detect-upload-mode.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.spec.js +4 -1
- package/dist/command-utils/detect-upload-mode.spec.js.map +1 -1
- package/dist/command-utils/download-session.utils.js +4 -1
- package/dist/command-utils/download-session.utils.js.map +1 -1
- package/dist/command-utils/json-args.js +4 -1
- package/dist/command-utils/json-args.js.map +1 -1
- package/dist/command-utils/json-args.spec.js +4 -1
- package/dist/command-utils/json-args.spec.js.map +1 -1
- package/dist/command-utils/parse-container-env.js +4 -1
- package/dist/command-utils/parse-container-env.js.map +1 -1
- package/dist/command-utils/parse-rewrites.js +4 -1
- package/dist/command-utils/parse-rewrites.js.map +1 -1
- package/dist/command-utils/print-json.js +4 -1
- package/dist/command-utils/print-json.js.map +1 -1
- package/dist/command-utils/sentry.utils.js +4 -1
- package/dist/command-utils/sentry.utils.js.map +1 -1
- package/dist/commands/agent/build-git-options.js +4 -1
- package/dist/commands/agent/build-git-options.js.map +1 -1
- package/dist/commands/agent/build-git-options.spec.js +4 -1
- package/dist/commands/agent/build-git-options.spec.js.map +1 -1
- package/dist/commands/agent/index.js +10 -7
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/js-coverage-diff.command.js +4 -1
- package/dist/commands/agent/js-coverage-diff.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.d.ts +5 -0
- package/dist/commands/agent/js-coverage.command.d.ts.map +1 -1
- package/dist/commands/agent/js-coverage.command.js +122 -23
- package/dist/commands/agent/js-coverage.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.spec.js +50 -1
- package/dist/commands/agent/js-coverage.command.spec.js.map +1 -1
- package/dist/commands/agent/screenshot-dom-diff.command.d.ts.map +1 -1
- package/dist/commands/agent/screenshot-dom-diff.command.js +5 -2
- package/dist/commands/agent/screenshot-dom-diff.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image-files.command.d.ts.map +1 -1
- package/dist/commands/agent/screenshot-image-files.command.js +5 -2
- package/dist/commands/agent/screenshot-image-files.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image.command.d.ts.map +1 -1
- package/dist/commands/agent/screenshot-image.command.js +5 -2
- package/dist/commands/agent/screenshot-image.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.d.ts +4 -1
- package/dist/commands/agent/test-run-diffs.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.js +88 -30
- package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.spec.js +95 -3
- package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.d.ts +19 -27
- package/dist/commands/agent/test-run-diffs.utils.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.js +42 -34
- package/dist/commands/agent/test-run-diffs.utils.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.spec.js +96 -66
- package/dist/commands/agent/test-run-diffs.utils.spec.js.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.d.ts +1 -0
- package/dist/commands/agent/test-run-for-commit.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.js +13 -11
- package/dist/commands/agent/test-run-for-commit.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.js +4 -1
- package/dist/commands/agent/timeline.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.spec.js +4 -1
- package/dist/commands/agent/timeline.command.spec.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.d.ts +1 -0
- package/dist/commands/agent/trigger-test-run.command.d.ts.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.js +10 -5
- package/dist/commands/agent/trigger-test-run.command.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.spec.js +4 -1
- package/dist/commands/agent/trigger-test-run.command.spec.js.map +1 -1
- package/dist/commands/agent/upload-build.command.js +5 -2
- package/dist/commands/agent/upload-build.command.js.map +1 -1
- package/dist/commands/all-commands.js +4 -1
- package/dist/commands/all-commands.js.map +1 -1
- package/dist/commands/auth/__tests__/get-project.command.spec.d.ts +2 -0
- package/dist/commands/auth/__tests__/get-project.command.spec.d.ts.map +1 -0
- package/dist/commands/auth/__tests__/get-project.command.spec.js +72 -0
- package/dist/commands/auth/__tests__/get-project.command.spec.js.map +1 -0
- package/dist/commands/auth/__tests__/list-projects.command.spec.js +4 -1
- package/dist/commands/auth/__tests__/list-projects.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/login.command.spec.js +15 -28
- package/dist/commands/auth/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/logout.command.spec.js +5 -5
- package/dist/commands/auth/__tests__/logout.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/set-project.command.spec.d.ts +2 -0
- package/dist/commands/auth/__tests__/set-project.command.spec.d.ts.map +1 -0
- package/dist/commands/auth/__tests__/set-project.command.spec.js +60 -0
- package/dist/commands/auth/__tests__/set-project.command.spec.js.map +1 -0
- package/dist/commands/auth/__tests__/whoami.command.spec.js +18 -7
- package/dist/commands/auth/__tests__/whoami.command.spec.js.map +1 -1
- package/dist/commands/auth/get-project.command.d.ts +10 -0
- package/dist/commands/auth/get-project.command.d.ts.map +1 -0
- package/dist/commands/auth/get-project.command.js +49 -0
- package/dist/commands/auth/get-project.command.js.map +1 -0
- package/dist/commands/auth/index.js +6 -3
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/list-projects.command.js +4 -1
- package/dist/commands/auth/list-projects.command.js.map +1 -1
- package/dist/commands/auth/login.command.d.ts.map +1 -1
- package/dist/commands/auth/login.command.js +11 -23
- package/dist/commands/auth/login.command.js.map +1 -1
- package/dist/commands/auth/logout.command.d.ts.map +1 -1
- package/dist/commands/auth/logout.command.js +8 -3
- package/dist/commands/auth/logout.command.js.map +1 -1
- package/dist/commands/auth/set-project.command.js +4 -1
- package/dist/commands/auth/set-project.command.js.map +1 -1
- package/dist/commands/auth/whoami.command.d.ts.map +1 -1
- package/dist/commands/auth/whoami.command.js +12 -21
- package/dist/commands/auth/whoami.command.js.map +1 -1
- package/dist/commands/ci/__tests__/session-filter.utils.spec.d.ts +2 -0
- package/dist/commands/ci/__tests__/session-filter.utils.spec.d.ts.map +1 -0
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js +66 -0
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js.map +1 -0
- package/dist/commands/ci/deprecated-trigger-options.js +4 -1
- package/dist/commands/ci/deprecated-trigger-options.js.map +1 -1
- package/dist/commands/ci/index.js +4 -1
- package/dist/commands/ci/index.js.map +1 -1
- package/dist/commands/ci/prepare.command.js +4 -1
- package/dist/commands/ci/prepare.command.js.map +1 -1
- package/dist/commands/ci/resolve-git-options.js +4 -1
- package/dist/commands/ci/resolve-git-options.js.map +1 -1
- package/dist/commands/ci/run-local.command.js +4 -1
- package/dist/commands/ci/run-local.command.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.d.ts +1 -0
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.d.ts.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js +31 -3
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
- package/dist/commands/ci/run.command.js +4 -1
- package/dist/commands/ci/run.command.js.map +1 -1
- package/dist/commands/ci/session-filter.utils.d.ts +25 -0
- package/dist/commands/ci/session-filter.utils.d.ts.map +1 -0
- package/dist/commands/ci/session-filter.utils.js +80 -0
- package/dist/commands/ci/session-filter.utils.js.map +1 -0
- package/dist/commands/ci/start-tunnel.command.js +4 -1
- package/dist/commands/ci/start-tunnel.command.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.core.js +5 -2
- package/dist/commands/ci/trigger-test-run.core.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.types.js +4 -1
- package/dist/commands/ci/trigger-test-run.types.js.map +1 -1
- package/dist/commands/ci/upload-asset-chunk.command.js +5 -2
- package/dist/commands/ci/upload-asset-chunk.command.js.map +1 -1
- package/dist/commands/ci/upload-assets.command.js +4 -1
- package/dist/commands/ci/upload-assets.command.js.map +1 -1
- package/dist/commands/ci/upload-container.command.js +4 -1
- package/dist/commands/ci/upload-container.command.js.map +1 -1
- package/dist/commands/debug/clean-workspaces.js +4 -1
- package/dist/commands/debug/clean-workspaces.js.map +1 -1
- package/dist/commands/debug/index.d.ts.map +1 -1
- package/dist/commands/debug/index.js +8 -8
- package/dist/commands/debug/index.js.map +1 -1
- package/dist/commands/debug/present-workspace.js +4 -1
- package/dist/commands/debug/present-workspace.js.map +1 -1
- package/dist/commands/debug/project-worktree.js +4 -1
- package/dist/commands/debug/project-worktree.js.map +1 -1
- package/dist/commands/deprecated-aliases.js +4 -1
- package/dist/commands/deprecated-aliases.js.map +1 -1
- package/dist/commands/download/index.js +4 -1
- package/dist/commands/download/index.js.map +1 -1
- package/dist/commands/download/replay.command.js +4 -1
- package/dist/commands/download/replay.command.js.map +1 -1
- package/dist/commands/download/session.command.js +4 -1
- package/dist/commands/download/session.command.js.map +1 -1
- package/dist/commands/download/test-run.command.js +4 -1
- package/dist/commands/download/test-run.command.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.js +4 -1
- package/dist/commands/local/get-edited-files.utils.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.spec.js +4 -1
- package/dist/commands/local/get-edited-files.utils.spec.js.map +1 -1
- package/dist/commands/local/index.js +4 -1
- package/dist/commands/local/index.js.map +1 -1
- package/dist/commands/local/relevant-sessions.command.js +5 -2
- package/dist/commands/local/relevant-sessions.command.js.map +1 -1
- package/dist/commands/project/index.js +4 -1
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/show.command.js +5 -2
- package/dist/commands/project/show.command.js.map +1 -1
- package/dist/commands/project/upload-source.command.js +4 -1
- package/dist/commands/project/upload-source.command.js.map +1 -1
- package/dist/commands/record/__tests__/login.command.spec.js +7 -2
- package/dist/commands/record/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/record/__tests__/session.command.spec.js +7 -2
- package/dist/commands/record/__tests__/session.command.spec.js.map +1 -1
- package/dist/commands/record/index.js +4 -1
- package/dist/commands/record/index.js.map +1 -1
- package/dist/commands/record/login.command.js +5 -2
- package/dist/commands/record/login.command.js.map +1 -1
- package/dist/commands/record/session.command.js +5 -2
- package/dist/commands/record/session.command.js.map +1 -1
- package/dist/commands/replay-debugger.ui.js +4 -1
- package/dist/commands/replay-debugger.ui.js.map +1 -1
- package/dist/commands/replay.command.js +4 -1
- package/dist/commands/replay.command.js.map +1 -1
- package/dist/commands/schema.command.js +4 -1
- package/dist/commands/schema.command.js.map +1 -1
- package/dist/commands/schema.command.spec.js +4 -1
- package/dist/commands/schema.command.spec.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/main.js +4 -1
- package/dist/main.js.map +1 -1
- package/dist/utils/__tests__/handle-auth-failure.spec.js +4 -1
- package/dist/utils/__tests__/handle-auth-failure.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-project-identifier.spec.js +38 -31
- package/dist/utils/__tests__/resolve-project-identifier.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +4 -1
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
- package/dist/utils/__tests__/select-project.spec.js +137 -46
- package/dist/utils/__tests__/select-project.spec.js.map +1 -1
- package/dist/utils/cli-user-error.js +4 -1
- package/dist/utils/cli-user-error.js.map +1 -1
- package/dist/utils/constants.js +4 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/environment.utils.js +4 -1
- package/dist/utils/environment.utils.js.map +1 -1
- package/dist/utils/format-coverage-ranges.js +4 -1
- package/dist/utils/format-coverage-ranges.js.map +1 -1
- package/dist/utils/handle-auth-failure.d.ts +1 -0
- package/dist/utils/handle-auth-failure.d.ts.map +1 -1
- package/dist/utils/handle-auth-failure.js +7 -3
- package/dist/utils/handle-auth-failure.js.map +1 -1
- package/dist/utils/out-of-date-client-error.js +4 -1
- package/dist/utils/out-of-date-client-error.js.map +1 -1
- package/dist/utils/resolve-project-identifier.d.ts +12 -10
- package/dist/utils/resolve-project-identifier.d.ts.map +1 -1
- package/dist/utils/resolve-project-identifier.js +31 -17
- package/dist/utils/resolve-project-identifier.js.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.d.ts +6 -2
- package/dist/utils/resolve-test-run-from-commit.d.ts.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.js +12 -8
- package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
- package/dist/utils/select-project.d.ts +37 -13
- package/dist/utils/select-project.d.ts.map +1 -1
- package/dist/utils/select-project.js +113 -40
- package/dist/utils/select-project.js.map +1 -1
- package/package.json +10 -10
- package/dist/commands/auth/unset-project.command.d.ts +0 -3
- package/dist/commands/auth/unset-project.command.d.ts.map +0 -1
- package/dist/commands/auth/unset-project.command.js +0 -24
- package/dist/commands/auth/unset-project.command.js.map +0 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="240c9b67-5598-5789-8c69-bac6fbb662aa")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
exports.testRunDiffsCommand = void 0;
|
|
4
6
|
const client_1 = require("@alwaysmeticulous/client");
|
|
@@ -11,14 +13,42 @@ const test_run_diffs_utils_1 = require("./test-run-diffs.utils");
|
|
|
11
13
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
12
14
|
/** Give up polling the diffs summary after this long, rather than forever. */
|
|
13
15
|
const SUMMARY_POLL_TIMEOUT_MS = 10 * 60_000;
|
|
14
|
-
const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToComplete, includeReplayIds, includeDomDiffIds, includeAllDiffs,
|
|
16
|
+
const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToComplete, includeReplayIds, includeReviewDecisions, includeDomDiffIds, includeAllDiffs, onlyUnreviewed, orderByReplayDiffs, counts, json, project, }) => {
|
|
15
17
|
if (testRunId != null && commitSha != null) {
|
|
16
18
|
throw new cli_user_error_1.CliUserError("Pass either --testRunId or --commitSha, not both.");
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// --counts reports fixed aggregate totals from a dedicated endpoint that takes
|
|
21
|
+
// no list/filter options, so combining it with any of them is meaningless —
|
|
22
|
+
// reject it rather than silently ignoring them. Only --json (output format) and
|
|
23
|
+
// --dontWaitForTestRunToComplete (in-progress handling) remain compatible.
|
|
24
|
+
if (counts) {
|
|
25
|
+
const incompatible = [
|
|
26
|
+
[includeReplayIds, "--includeReplayIds"],
|
|
27
|
+
[includeDomDiffIds, "--includeDomDiffIds"],
|
|
28
|
+
[includeAllDiffs, "--includeAllDiffs"],
|
|
29
|
+
[orderByReplayDiffs, "--orderByReplayDiffs"],
|
|
30
|
+
[includeReviewDecisions, "--includeReviewDecisions"],
|
|
31
|
+
[onlyUnreviewed, "--onlyUnreviewed"],
|
|
32
|
+
]
|
|
33
|
+
.filter(([enabled]) => enabled)
|
|
34
|
+
.map(([, name]) => name);
|
|
35
|
+
if (incompatible.length > 0) {
|
|
36
|
+
throw new cli_user_error_1.CliUserError(`--counts cannot be combined with: ${incompatible.join(", ")}. ` +
|
|
37
|
+
`It reports fixed aggregate totals; use it on its own (optionally with --json).`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// `--counts` reports only aggregate totals (no per-row list); the same numbers
|
|
41
|
+
// whether or not `--json` is set, just as an object vs `key\tvalue` lines.
|
|
42
|
+
const emitCounts = (summaryCounts) => {
|
|
43
|
+
if (json) {
|
|
44
|
+
(0, print_json_1.printJson)(summaryCounts);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
for (const line of (0, test_run_diffs_utils_1.formatDiffsSummaryCounts)(summaryCounts)) {
|
|
48
|
+
console.log(line);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
22
52
|
const client = await (0, client_1.createClientWithOAuth)({
|
|
23
53
|
apiToken,
|
|
24
54
|
enableOAuthLogin: true,
|
|
@@ -32,34 +62,39 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
32
62
|
status = (await (0, client_1.getTestRun)({ client, testRunId })).status;
|
|
33
63
|
}
|
|
34
64
|
else {
|
|
35
|
-
const run = await (0, resolve_test_run_from_commit_1.resolveTestRunForCommitOrThrow)(client,
|
|
65
|
+
const run = await (0, resolve_test_run_from_commit_1.resolveTestRunForCommitOrThrow)(client, commitSha, project);
|
|
36
66
|
resolvedTestRunId = run.testRunId;
|
|
37
67
|
status = run.status;
|
|
38
68
|
}
|
|
39
|
-
// --
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
const allDiffs = (0, test_run_diffs_utils_1.resolveIncludeAllDiffs)({ includeAllDiffs, includeMatches });
|
|
69
|
+
// --onlyUnreviewed spans every unreviewed difference (selected or not), so it
|
|
70
|
+
// implies --includeAllDiffs: the isSelected column is included to tell them
|
|
71
|
+
// apart, matching the backend, which resolves the same implication.
|
|
72
|
+
const includeAllDiffsResolved = includeAllDiffs || onlyUnreviewed;
|
|
44
73
|
const columns = {
|
|
45
74
|
orderByReplayDiffs,
|
|
46
75
|
includeDomDiffIds,
|
|
47
|
-
includeAllDiffs:
|
|
76
|
+
includeAllDiffs: includeAllDiffsResolved,
|
|
48
77
|
includeReplayIds,
|
|
78
|
+
includeReviewDecisions,
|
|
49
79
|
};
|
|
50
80
|
// Diffs are only meaningful once the run has finished with a verdict
|
|
51
81
|
// (Success/Failure). Block until it finishes (default) or, with
|
|
52
82
|
// --dontWaitForTestRunToComplete, report the in-progress run and stop.
|
|
53
83
|
const finishedStatus = await (0, resolve_test_run_from_commit_1.ensureTestRunFinished)(client, resolvedTestRunId, status, { dontWait: dontWaitForTestRunToComplete });
|
|
54
84
|
if (finishedStatus == null) {
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
85
|
+
// The in-progress notice already went to stderr (ensureTestRunFinished).
|
|
86
|
+
// For the list, keep stdout's shape stable — an unfinished run has no diffs
|
|
87
|
+
// yet, so emit an empty JSON array / header-only TSV (matching a finished run
|
|
88
|
+
// with zero diffs). --counts has no such empty shape: it reports live totals,
|
|
89
|
+
// so emit nothing rather than a row of zeros that would read as a real,
|
|
90
|
+
// fully-reviewed result.
|
|
91
|
+
if (!counts) {
|
|
92
|
+
if (json) {
|
|
93
|
+
console.log("[]");
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log((0, test_run_diffs_utils_1.buildDiffsSummaryHeader)(columns).join("\t"));
|
|
97
|
+
}
|
|
63
98
|
}
|
|
64
99
|
return;
|
|
65
100
|
}
|
|
@@ -68,14 +103,21 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
68
103
|
(0, resolve_test_run_from_commit_1.assertTestRunComplete)(resolvedTestRunId, finishedStatus, {
|
|
69
104
|
resultName: "diffs",
|
|
70
105
|
});
|
|
106
|
+
// `--counts` comes from a dedicated endpoint computed live from the DB, so it
|
|
107
|
+
// needs neither the (potentially large) diffs list nor the summary poll below.
|
|
108
|
+
if (counts) {
|
|
109
|
+
emitCounts(await (0, client_1.getTestRunDiffsSummaryCounts)(client, resolvedTestRunId));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
71
112
|
const t0 = performance.now();
|
|
72
113
|
(0, common_1.logProgress)(`Fetching diffs summary for test run ${resolvedTestRunId}...`);
|
|
73
114
|
const diffsSummaryOptions = {
|
|
74
115
|
includeReplayIds,
|
|
75
116
|
includeDomDiffIds,
|
|
76
|
-
includeAllDiffs:
|
|
77
|
-
includeMatches,
|
|
117
|
+
includeAllDiffs: includeAllDiffsResolved,
|
|
78
118
|
orderByReplayDiffs,
|
|
119
|
+
includeReviewDecisions,
|
|
120
|
+
onlyUnreviewed,
|
|
79
121
|
};
|
|
80
122
|
let response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, diffsSummaryOptions);
|
|
81
123
|
// A cold start finding the last computation already `failed` retriggers
|
|
@@ -116,9 +158,9 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
116
158
|
response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, diffsSummaryOptions);
|
|
117
159
|
}
|
|
118
160
|
const data = response.data ?? [];
|
|
119
|
-
// The backend sets `index` to
|
|
120
|
-
//
|
|
121
|
-
const rows = (0, test_run_diffs_utils_1.flattenDiffRows)(data
|
|
161
|
+
// The backend sets `index` to a global rank — a flat priority rank by default,
|
|
162
|
+
// or a replayDiff-grouped rank under orderByReplayDiffs; rows sort by it.
|
|
163
|
+
const rows = (0, test_run_diffs_utils_1.flattenDiffRows)(data);
|
|
122
164
|
if (json) {
|
|
123
165
|
(0, print_json_1.printJson)((0, test_run_diffs_utils_1.buildDiffsSummaryJson)(data, columns));
|
|
124
166
|
}
|
|
@@ -141,7 +183,7 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
141
183
|
};
|
|
142
184
|
exports.testRunDiffsCommand = {
|
|
143
185
|
command: "test-run-diffs",
|
|
144
|
-
describe: "List replay diffs for a test run. Outputs TSV, one row per screenshot: replayDiffId, screenshotName, outcome, mismatch (plus optional columns depending on flags), or the same data with --json (nested by replay diff under --orderByReplayDiffs).",
|
|
186
|
+
describe: "List replay diffs for a test run. Outputs TSV, one row per screenshot diff: replayDiffId, screenshotName, index, outcome, mismatch (plus optional columns depending on flags), or the same data with --json (nested by replay diff under --orderByReplayDiffs). Pass --counts to print just the totals instead of the list.",
|
|
145
187
|
builder: {
|
|
146
188
|
apiToken: { string: true, description: "Meticulous API token" },
|
|
147
189
|
testRunId: {
|
|
@@ -162,6 +204,11 @@ exports.testRunDiffsCommand = {
|
|
|
162
204
|
description: "Include base and head replay IDs per replay diff",
|
|
163
205
|
default: false,
|
|
164
206
|
},
|
|
207
|
+
includeReviewDecisions: {
|
|
208
|
+
boolean: true,
|
|
209
|
+
description: "Add a decision column with the PR review decision per diff (accepted/rejected/ignored/unreviewed; unreviewed when undecided or no PR)",
|
|
210
|
+
default: false,
|
|
211
|
+
},
|
|
165
212
|
includeDomDiffIds: {
|
|
166
213
|
boolean: true,
|
|
167
214
|
description: "Add a domDiffIds column grouping screenshots by structural DOM change",
|
|
@@ -172,17 +219,28 @@ exports.testRunDiffsCommand = {
|
|
|
172
219
|
description: "Return every diff instead of only the selected representative subset; adds an isSelected column",
|
|
173
220
|
default: false,
|
|
174
221
|
},
|
|
175
|
-
|
|
222
|
+
onlyUnreviewed: {
|
|
176
223
|
boolean: true,
|
|
177
|
-
description: "
|
|
224
|
+
description: "Return only diffs still awaiting review (decision unreviewed), across every difference rather than just the selected subset — i.e. everything left to review. Implies --includeAllDiffs, so the isSelected column is included to tell selected from unselected differences.",
|
|
178
225
|
default: false,
|
|
179
226
|
},
|
|
180
227
|
orderByReplayDiffs: {
|
|
181
228
|
boolean: true,
|
|
182
|
-
description: "
|
|
229
|
+
description: "With --json, group screenshots by replay diff instead of a flat list; the index is then a replayDiff-grouped rank rather than a flat priority rank",
|
|
230
|
+
default: false,
|
|
231
|
+
},
|
|
232
|
+
project: {
|
|
233
|
+
string: true,
|
|
234
|
+
description: "Project to resolve --commitSha against (id, 'organization/name', or a bare name unique among your accessible projects). Cannot be combined with --testRunId (the run already determines the project). One-off override for this call only; when omitted, uses the token's project or the default set via `auth set-project`.",
|
|
235
|
+
conflicts: "testRunId",
|
|
236
|
+
},
|
|
237
|
+
counts: {
|
|
238
|
+
boolean: true,
|
|
239
|
+
description: "Print only aggregate totals (num replays, num diffs, and the review-decision breakdown) instead of the per-diff list. Cannot be combined with the list/filter flags (--includeReplayIds, --includeDomDiffIds, --includeAllDiffs, --orderByReplayDiffs, --includeReviewDecisions, --onlyUnreviewed); may be combined with --json.",
|
|
183
240
|
default: false,
|
|
184
241
|
},
|
|
185
242
|
},
|
|
186
243
|
handler: (0, sentry_utils_1.wrapHandler)(handler),
|
|
187
244
|
};
|
|
188
|
-
//# sourceMappingURL=test-run-diffs.command.js.map
|
|
245
|
+
//# sourceMappingURL=test-run-diffs.command.js.map
|
|
246
|
+
//# debugId=240c9b67-5598-5789-8c69-bac6fbb662aa
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-run-diffs.command.js","
|
|
1
|
+
{"version":3,"file":"test-run-diffs.command.js","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"240c9b67-5598-5789-8c69-bac6fbb662aa"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9fe20f72-fcfb-550f-b1d3-92580629a3a1")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
const vitest_1 = require("vitest");
|
|
6
|
+
const cli_user_error_1 = require("../../utils/cli-user-error");
|
|
4
7
|
const test_run_diffs_command_1 = require("./test-run-diffs.command");
|
|
5
8
|
// Make wrapHandler a passthrough so handler errors propagate directly to tests
|
|
6
9
|
// rather than being swallowed by process.exit().
|
|
@@ -12,6 +15,7 @@ const mocks = vitest_1.vi.hoisted(() => ({
|
|
|
12
15
|
resolveApiTokenWithOAuth: vitest_1.vi.fn(),
|
|
13
16
|
getTestRun: vitest_1.vi.fn(),
|
|
14
17
|
getTestRunDiffsSummary: vitest_1.vi.fn(),
|
|
18
|
+
getTestRunDiffsSummaryCounts: vitest_1.vi.fn(),
|
|
15
19
|
ensureTestRunFinished: vitest_1.vi.fn(),
|
|
16
20
|
assertTestRunComplete: vitest_1.vi.fn(),
|
|
17
21
|
resolveTestRunForCommitOrThrow: vitest_1.vi.fn(),
|
|
@@ -23,6 +27,7 @@ vitest_1.vi.mock("@alwaysmeticulous/client", () => ({
|
|
|
23
27
|
resolveApiTokenWithOAuth: mocks.resolveApiTokenWithOAuth,
|
|
24
28
|
getTestRun: mocks.getTestRun,
|
|
25
29
|
getTestRunDiffsSummary: mocks.getTestRunDiffsSummary,
|
|
30
|
+
getTestRunDiffsSummaryCounts: mocks.getTestRunDiffsSummaryCounts,
|
|
26
31
|
}));
|
|
27
32
|
vitest_1.vi.mock("@alwaysmeticulous/common", () => ({
|
|
28
33
|
logNotice: mocks.logNotice,
|
|
@@ -40,7 +45,7 @@ class ProcessExitError extends Error {
|
|
|
40
45
|
this.code = code;
|
|
41
46
|
}
|
|
42
47
|
}
|
|
43
|
-
const runHandler = () => test_run_diffs_command_1.testRunDiffsCommand.handler({
|
|
48
|
+
const runHandler = (overrides = {}) => test_run_diffs_command_1.testRunDiffsCommand.handler({
|
|
44
49
|
apiToken: undefined,
|
|
45
50
|
testRunId: "tr-1",
|
|
46
51
|
commitSha: undefined,
|
|
@@ -48,9 +53,12 @@ const runHandler = () => test_run_diffs_command_1.testRunDiffsCommand.handler({
|
|
|
48
53
|
includeReplayIds: false,
|
|
49
54
|
includeDomDiffIds: false,
|
|
50
55
|
includeAllDiffs: false,
|
|
51
|
-
includeMatches: false,
|
|
52
56
|
orderByReplayDiffs: false,
|
|
57
|
+
includeReviewDecisions: false,
|
|
58
|
+
onlyUnreviewed: false,
|
|
59
|
+
counts: false,
|
|
53
60
|
json: false,
|
|
61
|
+
...overrides,
|
|
54
62
|
});
|
|
55
63
|
let logSpy;
|
|
56
64
|
let exitSpy;
|
|
@@ -142,5 +150,89 @@ let exitSpy;
|
|
|
142
150
|
const stdout = logSpy.mock.calls.flat().join("\n");
|
|
143
151
|
(0, vitest_1.expect)(stdout.split("\n")[0]).toContain("replayDiffId");
|
|
144
152
|
});
|
|
153
|
+
(0, vitest_1.it)("treats --onlyUnreviewed as implying --includeAllDiffs (isSelected column + backend flag)", async () => {
|
|
154
|
+
mocks.getTestRunDiffsSummary.mockResolvedValue({
|
|
155
|
+
status: "complete",
|
|
156
|
+
data: [],
|
|
157
|
+
});
|
|
158
|
+
await runHandler({ onlyUnreviewed: true });
|
|
159
|
+
(0, vitest_1.expect)(exitSpy).not.toHaveBeenCalled();
|
|
160
|
+
// The request carries includeAllDiffs so the backend returns isSelected.
|
|
161
|
+
(0, vitest_1.expect)(mocks.getTestRunDiffsSummary).toHaveBeenCalledWith(vitest_1.expect.anything(), "tr-1", vitest_1.expect.objectContaining({ includeAllDiffs: true, onlyUnreviewed: true }));
|
|
162
|
+
// ...and the TSV header includes the isSelected column.
|
|
163
|
+
const stdout = logSpy.mock.calls.flat().join("\n");
|
|
164
|
+
(0, vitest_1.expect)(stdout.split("\n")[0].split("\t")).toContain("isSelected");
|
|
165
|
+
});
|
|
166
|
+
(0, vitest_1.it)("prints the counts from the dedicated endpoint (no summary poll) with --counts", async () => {
|
|
167
|
+
mocks.getTestRunDiffsSummaryCounts.mockResolvedValue({
|
|
168
|
+
numReplays: 5,
|
|
169
|
+
numDiffs: 2,
|
|
170
|
+
numApproved: 1,
|
|
171
|
+
numIgnored: 0,
|
|
172
|
+
numRejected: 0,
|
|
173
|
+
numUnreviewed: 1,
|
|
174
|
+
});
|
|
175
|
+
await runHandler({ counts: true });
|
|
176
|
+
(0, vitest_1.expect)(exitSpy).not.toHaveBeenCalled();
|
|
177
|
+
// Counts come from the dedicated endpoint; the diffs-summary list isn't fetched.
|
|
178
|
+
(0, vitest_1.expect)(mocks.getTestRunDiffsSummaryCounts).toHaveBeenCalledWith(vitest_1.expect.anything(), "tr-1");
|
|
179
|
+
(0, vitest_1.expect)(mocks.getTestRunDiffsSummary).not.toHaveBeenCalled();
|
|
180
|
+
const stdout = logSpy.mock.calls.flat().join("\n");
|
|
181
|
+
(0, vitest_1.expect)(stdout).toBe([
|
|
182
|
+
"numReplays\t5",
|
|
183
|
+
"numDiffs\t2",
|
|
184
|
+
"numApproved\t1",
|
|
185
|
+
"numIgnored\t0",
|
|
186
|
+
"numRejected\t0",
|
|
187
|
+
"numUnreviewed\t1",
|
|
188
|
+
].join("\n"));
|
|
189
|
+
});
|
|
190
|
+
(0, vitest_1.it)("prints the counts as JSON with --counts --json (still compatible)", async () => {
|
|
191
|
+
mocks.getTestRunDiffsSummaryCounts.mockResolvedValue({
|
|
192
|
+
numReplays: 5,
|
|
193
|
+
numDiffs: 2,
|
|
194
|
+
numApproved: 1,
|
|
195
|
+
numIgnored: 0,
|
|
196
|
+
numRejected: 0,
|
|
197
|
+
numUnreviewed: 1,
|
|
198
|
+
});
|
|
199
|
+
await runHandler({ counts: true, json: true });
|
|
200
|
+
(0, vitest_1.expect)(exitSpy).not.toHaveBeenCalled();
|
|
201
|
+
const stdout = logSpy.mock.calls.flat().join("\n");
|
|
202
|
+
(0, vitest_1.expect)(JSON.parse(stdout)).toEqual({
|
|
203
|
+
numReplays: 5,
|
|
204
|
+
numDiffs: 2,
|
|
205
|
+
numApproved: 1,
|
|
206
|
+
numIgnored: 0,
|
|
207
|
+
numRejected: 0,
|
|
208
|
+
numUnreviewed: 1,
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
(0, vitest_1.it)("emits nothing for --counts on an in-progress run reported without waiting", async () => {
|
|
212
|
+
// ensureTestRunFinished returns null (and logs the in-progress notice to
|
|
213
|
+
// stderr) when the run is unfinished and --dontWaitForTestRunToComplete.
|
|
214
|
+
mocks.ensureTestRunFinished.mockResolvedValue(null);
|
|
215
|
+
await runHandler({ counts: true, dontWaitForTestRunToComplete: true });
|
|
216
|
+
(0, vitest_1.expect)(exitSpy).not.toHaveBeenCalled();
|
|
217
|
+
// No live counts to report — emit nothing rather than a misleading row of
|
|
218
|
+
// zeros. The counts endpoint isn't hit either.
|
|
219
|
+
(0, vitest_1.expect)(mocks.getTestRunDiffsSummaryCounts).not.toHaveBeenCalled();
|
|
220
|
+
(0, vitest_1.expect)(logSpy).not.toHaveBeenCalled();
|
|
221
|
+
});
|
|
222
|
+
vitest_1.it.each([
|
|
223
|
+
"includeReplayIds",
|
|
224
|
+
"includeDomDiffIds",
|
|
225
|
+
"includeAllDiffs",
|
|
226
|
+
"orderByReplayDiffs",
|
|
227
|
+
"includeReviewDecisions",
|
|
228
|
+
"onlyUnreviewed",
|
|
229
|
+
])("rejects --counts combined with --%s before any network call", async (flag) => {
|
|
230
|
+
await (0, vitest_1.expect)(runHandler({ counts: true, [flag]: true })).rejects.toThrow(cli_user_error_1.CliUserError);
|
|
231
|
+
// Rejected up front: neither the run nor either diffs endpoint is touched.
|
|
232
|
+
(0, vitest_1.expect)(mocks.createClientWithOAuth).not.toHaveBeenCalled();
|
|
233
|
+
(0, vitest_1.expect)(mocks.getTestRunDiffsSummaryCounts).not.toHaveBeenCalled();
|
|
234
|
+
(0, vitest_1.expect)(mocks.getTestRunDiffsSummary).not.toHaveBeenCalled();
|
|
235
|
+
});
|
|
145
236
|
});
|
|
146
|
-
//# sourceMappingURL=test-run-diffs.command.spec.js.map
|
|
237
|
+
//# sourceMappingURL=test-run-diffs.command.spec.js.map
|
|
238
|
+
//# debugId=9fe20f72-fcfb-550f-b1d3-92580629a3a1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-run-diffs.command.spec.js","
|
|
1
|
+
{"version":3,"file":"test-run-diffs.command.spec.js","sources":["../../../src/commands/agent/test-run-diffs.command.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"9fe20f72-fcfb-550f-b1d3-92580629a3a1"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DiffsSummaryReplayDiff, DiffsSummaryScreenshot } from "@alwaysmeticulous/client";
|
|
1
|
+
import type { DiffsSummaryCountsResponse, DiffsSummaryReplayDiff, DiffsSummaryScreenshot } from "@alwaysmeticulous/client";
|
|
2
2
|
/** A single (replay diff, screenshot) pair — one row of the TSV output. */
|
|
3
3
|
export interface DiffRow {
|
|
4
4
|
replayDiff: DiffsSummaryReplayDiff;
|
|
@@ -6,44 +6,36 @@ export interface DiffRow {
|
|
|
6
6
|
}
|
|
7
7
|
/** Which optional columns the TSV output includes. */
|
|
8
8
|
export interface DiffsSummaryColumns {
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Group the JSON output by replay diff (screenshots nested underneath) instead
|
|
11
|
+
* of a flat list. Either way the global `index` gives the ordering.
|
|
12
|
+
*/
|
|
10
13
|
orderByReplayDiffs: boolean;
|
|
11
14
|
/** Add the domDiffIds column. */
|
|
12
15
|
includeDomDiffIds: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Effective "all diffs" — true when --includeAllDiffs or --includeMatches is
|
|
15
|
-
* set (see {@link resolveIncludeAllDiffs}); adds the isSelected column.
|
|
16
|
-
*/
|
|
16
|
+
/** Return every diff, not just the selected subset; adds the isSelected column. */
|
|
17
17
|
includeAllDiffs: boolean;
|
|
18
18
|
/** Add the base/head replay ID columns. */
|
|
19
19
|
includeReplayIds: boolean;
|
|
20
|
+
/** Add the `decision` column (the PR review decision per diff). */
|
|
21
|
+
includeReviewDecisions: boolean;
|
|
20
22
|
}
|
|
23
|
+
/** `key\tvalue` lines for the `--counts` output in the default (non-JSON) mode. */
|
|
24
|
+
export declare const formatDiffsSummaryCounts: (counts: DiffsSummaryCountsResponse) => string[];
|
|
21
25
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
|
|
26
|
-
export declare const resolveIncludeAllDiffs: ({ includeAllDiffs, includeMatches, }: {
|
|
27
|
-
includeAllDiffs: boolean;
|
|
28
|
-
includeMatches: boolean;
|
|
29
|
-
}) => boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Flattens replay diffs into one list of rows. By default the backend's `index`
|
|
32
|
-
* is a flat cross-replay-diff priority rank, so we sort by it (a flat order the
|
|
33
|
-
* grouped response can't express). With orderByReplayDiffs the backend already
|
|
34
|
-
* returns rows grouped by replay diff in event order, which we preserve.
|
|
35
|
-
*/
|
|
36
|
-
export declare const flattenDiffRows: (data: DiffsSummaryReplayDiff[], orderByReplayDiffs: boolean) => DiffRow[];
|
|
37
|
-
/**
|
|
38
|
-
* Builds the TSV header. index/total are only meaningful with orderByReplayDiffs;
|
|
39
|
-
* by default rows are already in priority order, so the index is omitted.
|
|
26
|
+
* Flattens replay diffs into one list of rows, sorted by the backend's global
|
|
27
|
+
* `index`. That index is a flat priority rank by default, or a replayDiff-grouped
|
|
28
|
+
* rank under orderByReplayDiffs — either way sorting by it yields the intended
|
|
29
|
+
* order (which the grouped response can't express positionally).
|
|
40
30
|
*/
|
|
31
|
+
export declare const flattenDiffRows: (data: DiffsSummaryReplayDiff[]) => DiffRow[];
|
|
32
|
+
/** Builds the TSV header. `index` is the global rank the rows are ordered by. */
|
|
41
33
|
export declare const buildDiffsSummaryHeader: (columns: DiffsSummaryColumns) => string[];
|
|
42
34
|
/**
|
|
43
35
|
* Builds the JSON equivalent of the TSV, gated by the same columns. By default
|
|
44
|
-
* it's a flat array (one object per screenshot, in
|
|
45
|
-
*
|
|
46
|
-
*
|
|
36
|
+
* it's a flat array (one object per screenshot, in global `index` order). With
|
|
37
|
+
* orderByReplayDiffs it nests one level — an array of replay diffs, each with its
|
|
38
|
+
* screenshots grouped underneath.
|
|
47
39
|
*/
|
|
48
40
|
export declare const buildDiffsSummaryJson: (data: DiffsSummaryReplayDiff[], columns: DiffsSummaryColumns) => unknown[];
|
|
49
41
|
/** Formats a single row's fields, gated by the same columns as the header. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-run-diffs.utils.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-diffs.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,2EAA2E;AAC3E,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,sBAAsB,CAAC;IACnC,UAAU,EAAE,sBAAsB,CAAC;CACpC;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC
|
|
1
|
+
{"version":3,"file":"test-run-diffs.utils.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-diffs.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,2EAA2E;AAC3E,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,sBAAsB,CAAC;IACnC,UAAU,EAAE,sBAAsB,CAAC;CACpC;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iCAAiC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,eAAe,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,WAC3B,0BAA0B,KACjC,MAAM,EAOR,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,SAAU,sBAAsB,EAAE,KAAG,OAAO,EAMvE,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,YACzB,mBAAmB,KAC3B,MAAM,EAaR,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,SAC1B,sBAAsB,EAAE,WACrB,mBAAmB,KAC3B,OAAO,EAyBT,CAAC;AAqBF,8EAA8E;AAC9E,eAAO,MAAM,aAAa,+BACI,OAAO,WAC1B,mBAAmB,KAC3B,CAAC,MAAM,GAAG,MAAM,CAAC,EAcnB,CAAC"}
|
|
@@ -1,41 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3f1c4920-c15b-5978-8bc9-69bf15f381f7")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatDiffRow = exports.buildDiffsSummaryJson = exports.buildDiffsSummaryHeader = exports.flattenDiffRows = exports.
|
|
5
|
+
exports.formatDiffRow = exports.buildDiffsSummaryJson = exports.buildDiffsSummaryHeader = exports.flattenDiffRows = exports.formatDiffsSummaryCounts = void 0;
|
|
6
|
+
/** `key\tvalue` lines for the `--counts` output in the default (non-JSON) mode. */
|
|
7
|
+
const formatDiffsSummaryCounts = (counts) => [
|
|
8
|
+
`numReplays\t${counts.numReplays}`,
|
|
9
|
+
`numDiffs\t${counts.numDiffs}`,
|
|
10
|
+
`numApproved\t${counts.numApproved}`,
|
|
11
|
+
`numIgnored\t${counts.numIgnored}`,
|
|
12
|
+
`numRejected\t${counts.numRejected}`,
|
|
13
|
+
`numUnreviewed\t${counts.numUnreviewed}`,
|
|
14
|
+
];
|
|
15
|
+
exports.formatDiffsSummaryCounts = formatDiffsSummaryCounts;
|
|
4
16
|
const fmtMismatch = (v) => v != null ? v.toFixed(5) : "";
|
|
5
17
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
18
|
+
* Flattens replay diffs into one list of rows, sorted by the backend's global
|
|
19
|
+
* `index`. That index is a flat priority rank by default, or a replayDiff-grouped
|
|
20
|
+
* rank under orderByReplayDiffs — either way sorting by it yields the intended
|
|
21
|
+
* order (which the grouped response can't express positionally).
|
|
9
22
|
*/
|
|
10
|
-
const
|
|
11
|
-
exports.resolveIncludeAllDiffs = resolveIncludeAllDiffs;
|
|
12
|
-
/**
|
|
13
|
-
* Flattens replay diffs into one list of rows. By default the backend's `index`
|
|
14
|
-
* is a flat cross-replay-diff priority rank, so we sort by it (a flat order the
|
|
15
|
-
* grouped response can't express). With orderByReplayDiffs the backend already
|
|
16
|
-
* returns rows grouped by replay diff in event order, which we preserve.
|
|
17
|
-
*/
|
|
18
|
-
const flattenDiffRows = (data, orderByReplayDiffs) => {
|
|
23
|
+
const flattenDiffRows = (data) => {
|
|
19
24
|
const rows = data.flatMap((replayDiff) => replayDiff.screenshots.map((screenshot) => ({ replayDiff, screenshot })));
|
|
20
|
-
|
|
21
|
-
rows.sort((a, b) => a.screenshot.index - b.screenshot.index);
|
|
22
|
-
}
|
|
25
|
+
rows.sort((a, b) => a.screenshot.index - b.screenshot.index);
|
|
23
26
|
return rows;
|
|
24
27
|
};
|
|
25
28
|
exports.flattenDiffRows = flattenDiffRows;
|
|
26
|
-
/**
|
|
27
|
-
* Builds the TSV header. index/total are only meaningful with orderByReplayDiffs;
|
|
28
|
-
* by default rows are already in priority order, so the index is omitted.
|
|
29
|
-
*/
|
|
29
|
+
/** Builds the TSV header. `index` is the global rank the rows are ordered by. */
|
|
30
30
|
const buildDiffsSummaryHeader = (columns) => {
|
|
31
|
-
const fields = [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
const fields = [
|
|
32
|
+
"replayDiffId",
|
|
33
|
+
"screenshotName",
|
|
34
|
+
"index",
|
|
35
|
+
"outcome",
|
|
36
|
+
"mismatch",
|
|
37
|
+
];
|
|
35
38
|
if (columns.includeDomDiffIds)
|
|
36
39
|
fields.push("domDiffIds");
|
|
37
40
|
if (columns.includeAllDiffs)
|
|
38
41
|
fields.push("isSelected");
|
|
42
|
+
if (columns.includeReviewDecisions)
|
|
43
|
+
fields.push("decision");
|
|
39
44
|
if (columns.includeReplayIds)
|
|
40
45
|
fields.push("baseReplayId", "headReplayId");
|
|
41
46
|
return fields;
|
|
@@ -43,9 +48,9 @@ const buildDiffsSummaryHeader = (columns) => {
|
|
|
43
48
|
exports.buildDiffsSummaryHeader = buildDiffsSummaryHeader;
|
|
44
49
|
/**
|
|
45
50
|
* Builds the JSON equivalent of the TSV, gated by the same columns. By default
|
|
46
|
-
* it's a flat array (one object per screenshot, in
|
|
47
|
-
*
|
|
48
|
-
*
|
|
51
|
+
* it's a flat array (one object per screenshot, in global `index` order). With
|
|
52
|
+
* orderByReplayDiffs it nests one level — an array of replay diffs, each with its
|
|
53
|
+
* screenshots grouped underneath.
|
|
49
54
|
*/
|
|
50
55
|
const buildDiffsSummaryJson = (data, columns) => {
|
|
51
56
|
if (columns.orderByReplayDiffs) {
|
|
@@ -60,7 +65,7 @@ const buildDiffsSummaryJson = (data, columns) => {
|
|
|
60
65
|
screenshots: replayDiff.screenshots.map((screenshot) => screenshotToJson(screenshot, columns)),
|
|
61
66
|
}));
|
|
62
67
|
}
|
|
63
|
-
return (0, exports.flattenDiffRows)(data
|
|
68
|
+
return (0, exports.flattenDiffRows)(data).map(({ replayDiff, screenshot }) => ({
|
|
64
69
|
replayDiffId: replayDiff.replayDiffId,
|
|
65
70
|
...screenshotToJson(screenshot, columns),
|
|
66
71
|
...(columns.includeReplayIds
|
|
@@ -74,9 +79,7 @@ const buildDiffsSummaryJson = (data, columns) => {
|
|
|
74
79
|
exports.buildDiffsSummaryJson = buildDiffsSummaryJson;
|
|
75
80
|
const screenshotToJson = (screenshot, columns) => ({
|
|
76
81
|
screenshotName: screenshot.screenshotName,
|
|
77
|
-
|
|
78
|
-
? { index: screenshot.index, total: screenshot.total ?? null }
|
|
79
|
-
: {}),
|
|
82
|
+
index: screenshot.index,
|
|
80
83
|
outcome: screenshot.outcome,
|
|
81
84
|
mismatch: screenshot.mismatchFraction ?? null,
|
|
82
85
|
...(columns.includeDomDiffIds
|
|
@@ -85,23 +88,28 @@ const screenshotToJson = (screenshot, columns) => ({
|
|
|
85
88
|
...(columns.includeAllDiffs
|
|
86
89
|
? { isSelected: screenshot.isSelected ?? false }
|
|
87
90
|
: {}),
|
|
91
|
+
...(columns.includeReviewDecisions
|
|
92
|
+
? { decision: screenshot.decision ?? null }
|
|
93
|
+
: {}),
|
|
88
94
|
});
|
|
89
95
|
/** Formats a single row's fields, gated by the same columns as the header. */
|
|
90
96
|
const formatDiffRow = ({ replayDiff, screenshot }, columns) => {
|
|
91
97
|
const fields = [
|
|
92
98
|
replayDiff.replayDiffId,
|
|
93
99
|
screenshot.screenshotName,
|
|
100
|
+
screenshot.index,
|
|
94
101
|
];
|
|
95
|
-
if (columns.orderByReplayDiffs)
|
|
96
|
-
fields.push(screenshot.index, screenshot.total ?? "");
|
|
97
102
|
fields.push(screenshot.outcome, fmtMismatch(screenshot.mismatchFraction));
|
|
98
103
|
if (columns.includeDomDiffIds)
|
|
99
104
|
fields.push(screenshot.domDiffIds ?? "");
|
|
100
105
|
if (columns.includeAllDiffs)
|
|
101
106
|
fields.push(String(screenshot.isSelected ?? false));
|
|
107
|
+
if (columns.includeReviewDecisions)
|
|
108
|
+
fields.push(screenshot.decision ?? "");
|
|
102
109
|
if (columns.includeReplayIds)
|
|
103
110
|
fields.push(replayDiff.baseReplayId ?? "", replayDiff.headReplayId ?? "");
|
|
104
111
|
return fields;
|
|
105
112
|
};
|
|
106
113
|
exports.formatDiffRow = formatDiffRow;
|
|
107
|
-
//# sourceMappingURL=test-run-diffs.utils.js.map
|
|
114
|
+
//# sourceMappingURL=test-run-diffs.utils.js.map
|
|
115
|
+
//# debugId=3f1c4920-c15b-5978-8bc9-69bf15f381f7
|