@alwaysmeticulous/cli 2.300.0 → 2.303.1
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/detect-upload-mode.d.ts +12 -0
- package/dist/command-utils/detect-upload-mode.d.ts.map +1 -0
- package/dist/command-utils/detect-upload-mode.js +27 -0
- package/dist/command-utils/detect-upload-mode.js.map +1 -0
- package/dist/command-utils/detect-upload-mode.spec.d.ts +2 -0
- package/dist/command-utils/detect-upload-mode.spec.d.ts.map +1 -0
- package/dist/command-utils/detect-upload-mode.spec.js +30 -0
- package/dist/command-utils/detect-upload-mode.spec.js.map +1 -0
- package/dist/command-utils/parse-container-env.d.ts +9 -0
- package/dist/command-utils/parse-container-env.d.ts.map +1 -0
- package/dist/command-utils/parse-container-env.js +23 -0
- package/dist/command-utils/parse-container-env.js.map +1 -0
- package/dist/command-utils/parse-rewrites.d.ts +2 -2
- package/dist/command-utils/parse-rewrites.d.ts.map +1 -1
- package/dist/command-utils/parse-rewrites.js +11 -16
- package/dist/command-utils/parse-rewrites.js.map +1 -1
- package/dist/command-utils/sentry.utils.js +3 -4
- package/dist/command-utils/sentry.utils.js.map +1 -1
- package/dist/commands/agent/build-git-options.d.ts +69 -0
- package/dist/commands/agent/build-git-options.d.ts.map +1 -0
- package/dist/commands/agent/build-git-options.js +148 -0
- package/dist/commands/agent/build-git-options.js.map +1 -0
- package/dist/commands/agent/build-git-options.spec.d.ts +2 -0
- package/dist/commands/agent/build-git-options.spec.d.ts.map +1 -0
- package/dist/commands/agent/build-git-options.spec.js +226 -0
- package/dist/commands/agent/build-git-options.spec.js.map +1 -0
- package/dist/commands/agent/index.d.ts.map +1 -1
- package/dist/commands/agent/index.js +12 -3
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/js-coverage-diff.command.d.ts +2 -0
- package/dist/commands/agent/js-coverage-diff.command.d.ts.map +1 -1
- package/dist/commands/agent/js-coverage-diff.command.js +16 -4
- package/dist/commands/agent/js-coverage-diff.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.d.ts +13 -1
- package/dist/commands/agent/js-coverage.command.d.ts.map +1 -1
- package/dist/commands/agent/js-coverage.command.js +187 -38
- package/dist/commands/agent/js-coverage.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.spec.d.ts +2 -0
- package/dist/commands/agent/js-coverage.command.spec.d.ts.map +1 -0
- package/dist/commands/agent/js-coverage.command.spec.js +89 -0
- package/dist/commands/agent/js-coverage.command.spec.js.map +1 -0
- package/dist/commands/agent/test-run-diffs.command.d.ts +1 -2
- package/dist/commands/agent/test-run-diffs.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.js +27 -34
- package/dist/commands/agent/test-run-diffs.command.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 +40 -15
- package/dist/commands/agent/test-run-for-commit.command.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.d.ts +16 -0
- package/dist/commands/agent/trigger-test-run.command.d.ts.map +1 -0
- package/dist/commands/agent/trigger-test-run.command.js +219 -0
- package/dist/commands/agent/trigger-test-run.command.js.map +1 -0
- package/dist/commands/agent/upload-build.command.d.ts +19 -0
- package/dist/commands/agent/upload-build.command.d.ts.map +1 -0
- package/dist/commands/agent/upload-build.command.js +134 -0
- package/dist/commands/agent/upload-build.command.js.map +1 -0
- package/dist/commands/auth/__tests__/login.command.spec.js +39 -2
- package/dist/commands/auth/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/auth/login.command.d.ts +1 -0
- package/dist/commands/auth/login.command.d.ts.map +1 -1
- package/dist/commands/auth/login.command.js +40 -10
- package/dist/commands/auth/login.command.js.map +1 -1
- package/dist/commands/auth/set-project.command.d.ts.map +1 -1
- package/dist/commands/auth/set-project.command.js +10 -4
- package/dist/commands/auth/set-project.command.js.map +1 -1
- package/dist/commands/ci/deprecated-trigger-options.d.ts +19 -0
- package/dist/commands/ci/deprecated-trigger-options.d.ts.map +1 -0
- package/dist/commands/ci/deprecated-trigger-options.js +37 -0
- package/dist/commands/ci/deprecated-trigger-options.js.map +1 -0
- package/dist/commands/ci/resolve-git-options.d.ts +0 -1
- package/dist/commands/ci/resolve-git-options.d.ts.map +1 -1
- package/dist/commands/ci/resolve-git-options.js +3 -4
- package/dist/commands/ci/resolve-git-options.js.map +1 -1
- 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 +3 -4
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.core.d.ts +16 -0
- package/dist/commands/ci/trigger-test-run.core.d.ts.map +1 -0
- package/dist/commands/ci/trigger-test-run.core.js +194 -0
- package/dist/commands/ci/trigger-test-run.core.js.map +1 -0
- package/dist/commands/ci/trigger-test-run.types.d.ts +31 -0
- package/dist/commands/ci/trigger-test-run.types.d.ts.map +1 -0
- package/dist/commands/ci/trigger-test-run.types.js +6 -0
- package/dist/commands/ci/trigger-test-run.types.js.map +1 -0
- package/dist/commands/ci/upload-assets.command.d.ts +0 -1
- package/dist/commands/ci/upload-assets.command.d.ts.map +1 -1
- package/dist/commands/ci/upload-assets.command.js +16 -124
- package/dist/commands/ci/upload-assets.command.js.map +1 -1
- package/dist/commands/ci/upload-container.command.d.ts +0 -1
- package/dist/commands/ci/upload-container.command.d.ts.map +1 -1
- package/dist/commands/ci/upload-container.command.js +18 -131
- package/dist/commands/ci/upload-container.command.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +5 -3
- package/dist/main.js.map +1 -1
- package/dist/utils/__tests__/select-project.spec.js +47 -2
- package/dist/utils/__tests__/select-project.spec.js.map +1 -1
- package/dist/utils/cli-user-error.d.ts +3 -1
- package/dist/utils/cli-user-error.d.ts.map +1 -1
- package/dist/utils/cli-user-error.js +5 -14
- package/dist/utils/cli-user-error.js.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.d.ts +31 -5
- package/dist/utils/resolve-test-run-from-commit.d.ts.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.js +59 -19
- package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
- package/dist/utils/select-project.d.ts +9 -3
- package/dist/utils/select-project.d.ts.map +1 -1
- package/dist/utils/select-project.js +30 -7
- package/dist/utils/select-project.js.map +1 -1
- package/package.json +13 -13
|
@@ -1,25 +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]="
|
|
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]="4567ef7d-85b7-51ec-a88f-41a6c7312232")}catch(e){}}();
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.jsCoverageCommand = void 0;
|
|
5
|
+
exports.jsCoverageCommand = exports.isAmbiguousTestRunError = exports.determineColumns = exports.assertTestRunOnlyFlagsUnsetForReplay = void 0;
|
|
6
6
|
const client_1 = require("@alwaysmeticulous/client");
|
|
7
7
|
const common_1 = require("@alwaysmeticulous/common");
|
|
8
8
|
const sentry_utils_1 = require("../../command-utils/sentry.utils");
|
|
9
9
|
const cli_user_error_1 = require("../../utils/cli-user-error");
|
|
10
10
|
const format_coverage_ranges_1 = require("../../utils/format-coverage-ranges");
|
|
11
11
|
const resolve_test_run_from_commit_1 = require("../../utils/resolve-test-run-from-commit");
|
|
12
|
+
// Single source of truth mapping each column to the request flag that asks for
|
|
13
|
+
// it, so the printed columns and the request payload can't drift apart.
|
|
14
|
+
const COVERAGE_COLUMN_FLAG = {
|
|
15
|
+
executedRanges: "includeExecutedRanges",
|
|
16
|
+
executableRanges: "includeExecutableRanges",
|
|
17
|
+
uncoveredRanges: "includeUncoveredRanges",
|
|
18
|
+
coveragePercentage: "includeCoveragePercentage",
|
|
19
|
+
};
|
|
12
20
|
const log = (...args) => process.stderr.write(args.join(" ") + "\n");
|
|
13
|
-
const handler = async (
|
|
21
|
+
const handler = async (options) => {
|
|
22
|
+
const { apiToken, replayId, testRunId, commitSha, screenshotName, dontWaitForTestRunToComplete, globFilter, json, } = options;
|
|
14
23
|
(0, common_1.initLogger)();
|
|
15
24
|
if (screenshotName != null && replayId == null) {
|
|
16
25
|
throw new cli_user_error_1.CliUserError("--screenshotName only applies to --replayId.");
|
|
17
26
|
}
|
|
27
|
+
// --testRunId and --commitSha are two ways to name a run; passing both is
|
|
28
|
+
// ambiguous on both paths (whole-test-run and --replayId disambiguation).
|
|
29
|
+
if (testRunId != null && commitSha != null) {
|
|
30
|
+
throw new cli_user_error_1.CliUserError("Pass either --testRunId or --commitSha, not both.");
|
|
31
|
+
}
|
|
32
|
+
if (replayId != null) {
|
|
33
|
+
(0, exports.assertTestRunOnlyFlagsUnsetForReplay)(options);
|
|
34
|
+
}
|
|
35
|
+
const columns = (0, exports.determineColumns)(options);
|
|
18
36
|
const apiToken_ = await (0, client_1.resolveApiTokenWithOAuth)({
|
|
19
37
|
apiToken,
|
|
20
38
|
enableOAuthLogin: true,
|
|
21
39
|
});
|
|
22
|
-
const client = (0, client_1.
|
|
40
|
+
const client = await (0, client_1.createClientWithOAuth)({
|
|
41
|
+
apiToken,
|
|
42
|
+
enableOAuthLogin: true,
|
|
43
|
+
});
|
|
23
44
|
// --replayId takes precedence: repo file paths are resolved against the run
|
|
24
45
|
// that executed the replay, and a --testRunId / --commitSha passed alongside
|
|
25
46
|
// it acts as a membership gate / disambiguator (see below) rather than
|
|
@@ -30,49 +51,100 @@ const handler = async ({ apiToken, replayId, testRunId, commitSha, screenshotNam
|
|
|
30
51
|
screenshotName,
|
|
31
52
|
testRunId,
|
|
32
53
|
commitSha,
|
|
54
|
+
globFilter,
|
|
55
|
+
includeAllFiles: options.includeAllFiles,
|
|
33
56
|
json,
|
|
34
57
|
});
|
|
35
58
|
}
|
|
36
59
|
else {
|
|
37
|
-
if (testRunId != null && commitSha != null) {
|
|
38
|
-
throw new cli_user_error_1.CliUserError("Pass either --testRunId or --commitSha, not both.");
|
|
39
|
-
}
|
|
40
60
|
// Test-run coverage: use --testRunId, else resolve the run from --commitSha
|
|
41
|
-
// or, when neither is given, from the local checkout's HEAD.
|
|
42
|
-
// run
|
|
61
|
+
// or, when neither is given, from the local checkout's HEAD. Coverage only
|
|
62
|
+
// exists once the run has finished, so block until it does (default) or, with
|
|
63
|
+
// --dontWaitForTestRunToComplete, report the in-progress run and stop.
|
|
64
|
+
let resolvedTestRunId;
|
|
65
|
+
let status;
|
|
43
66
|
if (testRunId != null) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// a commit.
|
|
47
|
-
const { status } = await (0, client_1.getTestRun)({ client, testRunId });
|
|
48
|
-
(0, resolve_test_run_from_commit_1.assertTestRunComplete)(testRunId, status, { resultName: "coverage" });
|
|
49
|
-
await printTestRunCoverage(client, testRunId, json);
|
|
67
|
+
resolvedTestRunId = testRunId;
|
|
68
|
+
status = (await (0, client_1.getTestRun)({ client, testRunId })).status;
|
|
50
69
|
}
|
|
51
70
|
else {
|
|
52
|
-
|
|
53
|
-
|
|
71
|
+
({ testRunId: resolvedTestRunId, status } =
|
|
72
|
+
await (0, resolve_test_run_from_commit_1.resolveTestRunForCommitOrThrow)(client, apiToken_, commitSha));
|
|
73
|
+
}
|
|
74
|
+
const finishedStatus = await (0, resolve_test_run_from_commit_1.ensureTestRunFinished)(client, resolvedTestRunId, status, { dontWait: dontWaitForTestRunToComplete });
|
|
75
|
+
if (finishedStatus == null) {
|
|
76
|
+
return;
|
|
54
77
|
}
|
|
78
|
+
// Reject session-pool bases (Partial); fatal failures already threw.
|
|
79
|
+
(0, resolve_test_run_from_commit_1.assertTestRunComplete)(resolvedTestRunId, finishedStatus, {
|
|
80
|
+
resultName: "coverage",
|
|
81
|
+
});
|
|
82
|
+
await printTestRunCoverage(client, resolvedTestRunId, options, columns, json);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
// Executable / uncovered / percentage columns all need executable-line data we
|
|
86
|
+
// only have for whole test runs; --prDiffOnly reads a test-run-only artifact.
|
|
87
|
+
// Reject them for a single replay. (--globFilter and --includeAllFiles apply to
|
|
88
|
+
// replays too.)
|
|
89
|
+
const assertTestRunOnlyFlagsUnsetForReplay = (options) => {
|
|
90
|
+
const testRunOnly = [
|
|
91
|
+
["includeExecutableRanges", options.includeExecutableRanges],
|
|
92
|
+
["includeUncoveredRanges", options.includeUncoveredRanges],
|
|
93
|
+
["includeCoveragePercentage", options.includeCoveragePercentage],
|
|
94
|
+
["prDiffOnly", options.prDiffOnly],
|
|
95
|
+
]
|
|
96
|
+
.filter(([, enabled]) => enabled)
|
|
97
|
+
.map(([name]) => `--${name}`);
|
|
98
|
+
if (testRunOnly.length > 0) {
|
|
99
|
+
throw new cli_user_error_1.CliUserError(`${testRunOnly.join(", ")} only appl${testRunOnly.length === 1 ? "ies" : "y"} to whole-test-run coverage, not --replayId.`);
|
|
55
100
|
}
|
|
56
101
|
};
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
102
|
+
exports.assertTestRunOnlyFlagsUnsetForReplay = assertTestRunOnlyFlagsUnsetForReplay;
|
|
103
|
+
// The columns (after `repoFilePath`) to request and print, in fixed order.
|
|
104
|
+
// Defaults to executed ranges when no column flag is given, so a bare
|
|
105
|
+
// invocation matches the historical output.
|
|
106
|
+
const determineColumns = (options) => {
|
|
107
|
+
const includeExecuted = options.includeExecutedRanges ||
|
|
108
|
+
(!options.includeExecutableRanges &&
|
|
109
|
+
!options.includeUncoveredRanges &&
|
|
110
|
+
!options.includeCoveragePercentage);
|
|
111
|
+
const columns = [];
|
|
112
|
+
if (includeExecuted) {
|
|
113
|
+
columns.push("executedRanges");
|
|
114
|
+
}
|
|
115
|
+
if (options.includeExecutableRanges) {
|
|
116
|
+
columns.push("executableRanges");
|
|
117
|
+
}
|
|
118
|
+
if (options.includeUncoveredRanges) {
|
|
119
|
+
columns.push("uncoveredRanges");
|
|
120
|
+
}
|
|
121
|
+
if (options.includeCoveragePercentage) {
|
|
122
|
+
columns.push("coveragePercentage");
|
|
123
|
+
}
|
|
124
|
+
return columns;
|
|
125
|
+
};
|
|
126
|
+
exports.determineColumns = determineColumns;
|
|
127
|
+
// Resolves a commit to a test run id, used only to disambiguate which run a
|
|
128
|
+
// --replayId belongs to. The replay's own coverage exists once that replay has
|
|
129
|
+
// executed, independent of whole-run completion, so we don't require the run to
|
|
130
|
+
// be complete here (unlike the whole-test-run path) — getReplayJsCoverage
|
|
131
|
+
// surfaces an actionable error if the replay itself has no coverage yet.
|
|
132
|
+
const resolveTestRunIdForCommit = async (client, apiToken, commitSha) => {
|
|
133
|
+
const { testRunId } = await (0, resolve_test_run_from_commit_1.resolveTestRunForCommitOrThrow)(client, apiToken, commitSha);
|
|
63
134
|
return testRunId;
|
|
64
135
|
};
|
|
65
|
-
const printReplayCoverage = async (client, apiToken, { replayId, screenshotName, testRunId, commitSha, json, }) => {
|
|
136
|
+
const printReplayCoverage = async (client, apiToken, { replayId, screenshotName, testRunId, commitSha, globFilter, includeAllFiles, json, }) => {
|
|
66
137
|
// An explicit --commitSha selects the run client-side (the endpoint only
|
|
67
138
|
// understands testRunId); --testRunId is passed through as-is.
|
|
68
139
|
const effectiveTestRunId = testRunId ??
|
|
69
140
|
(commitSha != null
|
|
70
|
-
? await
|
|
141
|
+
? await resolveTestRunIdForCommit(client, apiToken, commitSha)
|
|
71
142
|
: undefined);
|
|
72
143
|
try {
|
|
73
|
-
const result = await (0, client_1.getReplayJsCoverage)(client, replayId, {
|
|
74
|
-
screenshotName,
|
|
144
|
+
const result = await (0, client_1.getReplayJsCoverage)(client, replayId, screenshotName, {
|
|
75
145
|
testRunId: effectiveTestRunId,
|
|
146
|
+
globFilter,
|
|
147
|
+
includeAllFiles,
|
|
76
148
|
});
|
|
77
149
|
printReplayResult(result, json);
|
|
78
150
|
}
|
|
@@ -81,15 +153,16 @@ const printReplayCoverage = async (client, apiToken, { replayId, screenshotName,
|
|
|
81
153
|
// several runs, the endpoint can't pick one. Fall back to the run for the
|
|
82
154
|
// local checkout's HEAD and retry; if that can't be resolved, surface the
|
|
83
155
|
// original (actionable "pass testRunId") error unchanged.
|
|
84
|
-
if (effectiveTestRunId == null && isAmbiguousTestRunError(error)) {
|
|
156
|
+
if (effectiveTestRunId == null && (0, exports.isAmbiguousTestRunError)(error)) {
|
|
85
157
|
const fallback = await (0, resolve_test_run_from_commit_1.tryResolveTestRunForCommit)(client, apiToken, undefined);
|
|
86
158
|
// Only retry against a run that finished with a verdict — an unfinished
|
|
87
159
|
// or failed one has no usable coverage.
|
|
88
160
|
if (fallback != null && (0, resolve_test_run_from_commit_1.isTestRunComplete)(fallback.status)) {
|
|
89
161
|
try {
|
|
90
|
-
const result = await (0, client_1.getReplayJsCoverage)(client, replayId, {
|
|
91
|
-
screenshotName,
|
|
162
|
+
const result = await (0, client_1.getReplayJsCoverage)(client, replayId, screenshotName, {
|
|
92
163
|
testRunId: fallback.testRunId,
|
|
164
|
+
globFilter,
|
|
165
|
+
includeAllFiles,
|
|
93
166
|
});
|
|
94
167
|
// Only announce the fallback once it has actually worked, so a doomed
|
|
95
168
|
// retry doesn't leave a misleading "retrying against run X" line.
|
|
@@ -122,22 +195,59 @@ const printReplayResult = (result, json) => {
|
|
|
122
195
|
}
|
|
123
196
|
log(`${files.length} file(s) with coverage`);
|
|
124
197
|
};
|
|
125
|
-
const printTestRunCoverage = async (client, testRunId, json) => {
|
|
126
|
-
|
|
198
|
+
const printTestRunCoverage = async (client, testRunId, options, columns, json) => {
|
|
199
|
+
// Send the resolved columns as explicit flags (the default-to-executed rule
|
|
200
|
+
// lives here in `determineColumns`, not the backend), so the backend never
|
|
201
|
+
// has to guess which columns a flagless request wants. Derive the flags from
|
|
202
|
+
// the same `columns` array the headers/formatting use, so they stay in sync.
|
|
203
|
+
const requestOptions = {
|
|
204
|
+
includeAllFiles: options.includeAllFiles,
|
|
205
|
+
prDiffOnly: options.prDiffOnly,
|
|
206
|
+
...(options.globFilter != null ? { globFilter: options.globFilter } : {}),
|
|
207
|
+
};
|
|
208
|
+
for (const column of columns) {
|
|
209
|
+
requestOptions[COVERAGE_COLUMN_FLAG[column]] = true;
|
|
210
|
+
}
|
|
211
|
+
const result = await (0, client_1.getTestRunJsCoverage)(client, testRunId, requestOptions);
|
|
127
212
|
if (json) {
|
|
128
213
|
console.log(JSON.stringify(result, null, 2));
|
|
129
214
|
return;
|
|
130
215
|
}
|
|
131
|
-
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
216
|
+
// Test-run coverage is the precomputed repo-mapped coverage, keyed by repo
|
|
217
|
+
// paths. Emit `repoFilePath` then the requested columns in fixed order.
|
|
218
|
+
console.log(["repoFilePath", ...columns].join("\t"));
|
|
219
|
+
for (const file of result.files) {
|
|
220
|
+
const fields = [
|
|
221
|
+
file.repoFilePath,
|
|
222
|
+
...columns.map((column) => formatCoverageColumn(file, column)),
|
|
223
|
+
];
|
|
224
|
+
console.log(fields.join("\t"));
|
|
225
|
+
}
|
|
226
|
+
log(`${result.files.length} file(s)`);
|
|
227
|
+
};
|
|
228
|
+
const formatCoverageColumn = (file, column) => {
|
|
229
|
+
switch (column) {
|
|
230
|
+
case "executedRanges":
|
|
231
|
+
return (0, format_coverage_ranges_1.formatCoverageRanges)(file.executedRanges ?? []);
|
|
232
|
+
case "executableRanges":
|
|
233
|
+
return (0, format_coverage_ranges_1.formatCoverageRanges)(file.executableRanges ?? []);
|
|
234
|
+
case "uncoveredRanges":
|
|
235
|
+
return (0, format_coverage_ranges_1.formatCoverageRanges)(file.uncoveredRanges ?? []);
|
|
236
|
+
case "coveragePercentage":
|
|
237
|
+
return file.coveragePercentage == null
|
|
238
|
+
? "n/a"
|
|
239
|
+
: file.coveragePercentage.toFixed(1);
|
|
240
|
+
default: {
|
|
241
|
+
// Exhaustiveness guard: a new CoverageColumn must be handled above.
|
|
242
|
+
const exhaustive = column;
|
|
243
|
+
throw new Error(`Unhandled coverage column: ${String(exhaustive)}`);
|
|
244
|
+
}
|
|
135
245
|
}
|
|
136
|
-
log(`${result.files.length} file(s) with coverage`);
|
|
137
246
|
};
|
|
138
247
|
const isAmbiguousTestRunError = (error) => (0, client_1.isFetchError)(error) &&
|
|
139
248
|
error.response?.data?.reason ===
|
|
140
249
|
"ambiguous-test-run";
|
|
250
|
+
exports.isAmbiguousTestRunError = isAmbiguousTestRunError;
|
|
141
251
|
exports.jsCoverageCommand = {
|
|
142
252
|
command: "js-coverage",
|
|
143
253
|
describe: "Get JS coverage for a single replay or a whole test run (use js-coverage-diff for base vs head)",
|
|
@@ -159,6 +269,45 @@ exports.jsCoverageCommand = {
|
|
|
159
269
|
string: true,
|
|
160
270
|
description: 'Screenshot name (e.g. "after-event-5" or "end-state"), for use with --replayId. Omit for the whole replay.',
|
|
161
271
|
},
|
|
272
|
+
dontWaitForTestRunToComplete: {
|
|
273
|
+
boolean: true,
|
|
274
|
+
default: false,
|
|
275
|
+
description: "For whole-test-run coverage, return immediately instead of the default of blocking until the run finishes; an unfinished run is then reported as not complete.",
|
|
276
|
+
},
|
|
277
|
+
includeExecutedRanges: {
|
|
278
|
+
boolean: true,
|
|
279
|
+
default: false,
|
|
280
|
+
description: "Include the executed line ranges column. This is the default column when no other --include* range/percentage flag is given.",
|
|
281
|
+
},
|
|
282
|
+
includeExecutableRanges: {
|
|
283
|
+
boolean: true,
|
|
284
|
+
default: false,
|
|
285
|
+
description: "Include the executable line ranges column (lines that could be executed). Whole-test-run coverage only.",
|
|
286
|
+
},
|
|
287
|
+
includeUncoveredRanges: {
|
|
288
|
+
boolean: true,
|
|
289
|
+
default: false,
|
|
290
|
+
description: "Include the uncovered line ranges column (executable minus executed). Whole-test-run coverage only.",
|
|
291
|
+
},
|
|
292
|
+
includeCoveragePercentage: {
|
|
293
|
+
boolean: true,
|
|
294
|
+
default: false,
|
|
295
|
+
description: "Include the coverage percentage column (0–100; executed / executable lines per file). Whole-test-run coverage only.",
|
|
296
|
+
},
|
|
297
|
+
includeAllFiles: {
|
|
298
|
+
boolean: true,
|
|
299
|
+
default: false,
|
|
300
|
+
description: "Return every file, regardless of the requested columns. By default a file is dropped unless at least one requested column has a value for it (e.g. with only executed ranges, files with no executed lines are dropped). Works for both replay and whole-test-run coverage.",
|
|
301
|
+
},
|
|
302
|
+
prDiffOnly: {
|
|
303
|
+
boolean: true,
|
|
304
|
+
default: false,
|
|
305
|
+
description: "Return only coverage for files changed in the PR diff (from coverage.pr.json). Whole-test-run coverage only.",
|
|
306
|
+
},
|
|
307
|
+
globFilter: {
|
|
308
|
+
string: true,
|
|
309
|
+
description: 'Keep only repo file paths matching this gitignore-style glob, e.g. "src/components/**".',
|
|
310
|
+
},
|
|
162
311
|
json: {
|
|
163
312
|
boolean: true,
|
|
164
313
|
description: "Output the raw coverage response as JSON",
|
|
@@ -168,4 +317,4 @@ exports.jsCoverageCommand = {
|
|
|
168
317
|
handler: (0, sentry_utils_1.wrapHandler)(handler),
|
|
169
318
|
};
|
|
170
319
|
//# sourceMappingURL=js-coverage.command.js.map
|
|
171
|
-
//# debugId=
|
|
320
|
+
//# debugId=4567ef7d-85b7-51ec-a88f-41a6c7312232
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-coverage.command.js","sources":["../../../src/commands/agent/js-coverage.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"js-coverage.command.js","sources":["../../../src/commands/agent/js-coverage.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"4567ef7d-85b7-51ec-a88f-41a6c7312232"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-coverage.command.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/js-coverage.command.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
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]="cf073f44-40d8-5583-ac32-28d6529a3bcd")}catch(e){}}();
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const vitest_1 = require("vitest");
|
|
6
|
+
const cli_user_error_1 = require("../../utils/cli-user-error");
|
|
7
|
+
const js_coverage_command_1 = require("./js-coverage.command");
|
|
8
|
+
const baseOptions = (overrides = {}) => ({
|
|
9
|
+
apiToken: undefined,
|
|
10
|
+
replayId: undefined,
|
|
11
|
+
testRunId: undefined,
|
|
12
|
+
commitSha: undefined,
|
|
13
|
+
screenshotName: undefined,
|
|
14
|
+
dontWaitForTestRunToComplete: false,
|
|
15
|
+
includeExecutedRanges: false,
|
|
16
|
+
includeExecutableRanges: false,
|
|
17
|
+
includeUncoveredRanges: false,
|
|
18
|
+
includeCoveragePercentage: false,
|
|
19
|
+
includeAllFiles: false,
|
|
20
|
+
prDiffOnly: false,
|
|
21
|
+
globFilter: undefined,
|
|
22
|
+
json: false,
|
|
23
|
+
...overrides,
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.describe)("determineColumns", () => {
|
|
26
|
+
(0, vitest_1.it)("defaults to executed ranges when no column flag is given", () => {
|
|
27
|
+
(0, vitest_1.expect)((0, js_coverage_command_1.determineColumns)(baseOptions())).toEqual(["executedRanges"]);
|
|
28
|
+
});
|
|
29
|
+
(0, vitest_1.it)("omits the executed default once another column is requested", () => {
|
|
30
|
+
(0, vitest_1.expect)((0, js_coverage_command_1.determineColumns)(baseOptions({ includeCoveragePercentage: true }))).toEqual(["coveragePercentage"]);
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)("keeps executed ranges when explicitly requested alongside others", () => {
|
|
33
|
+
(0, vitest_1.expect)((0, js_coverage_command_1.determineColumns)(baseOptions({
|
|
34
|
+
includeExecutedRanges: true,
|
|
35
|
+
includeUncoveredRanges: true,
|
|
36
|
+
}))).toEqual(["executedRanges", "uncoveredRanges"]);
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.it)("emits every column in the fixed order", () => {
|
|
39
|
+
(0, vitest_1.expect)((0, js_coverage_command_1.determineColumns)(baseOptions({
|
|
40
|
+
includeCoveragePercentage: true,
|
|
41
|
+
includeUncoveredRanges: true,
|
|
42
|
+
includeExecutableRanges: true,
|
|
43
|
+
includeExecutedRanges: true,
|
|
44
|
+
}))).toEqual([
|
|
45
|
+
"executedRanges",
|
|
46
|
+
"executableRanges",
|
|
47
|
+
"uncoveredRanges",
|
|
48
|
+
"coveragePercentage",
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.describe)("assertTestRunOnlyFlagsUnsetForReplay", () => {
|
|
53
|
+
(0, vitest_1.it)("rejects a whole-test-run-only column flag", () => {
|
|
54
|
+
(0, vitest_1.expect)(() => (0, js_coverage_command_1.assertTestRunOnlyFlagsUnsetForReplay)(baseOptions({ includeExecutableRanges: true }))).toThrow(cli_user_error_1.CliUserError);
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.it)("rejects --prDiffOnly", () => {
|
|
57
|
+
(0, vitest_1.expect)(() => (0, js_coverage_command_1.assertTestRunOnlyFlagsUnsetForReplay)(baseOptions({ prDiffOnly: true }))).toThrow(/--prDiffOnly only appl/);
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)("lists every offending flag", () => {
|
|
60
|
+
(0, vitest_1.expect)(() => (0, js_coverage_command_1.assertTestRunOnlyFlagsUnsetForReplay)(baseOptions({
|
|
61
|
+
includeUncoveredRanges: true,
|
|
62
|
+
includeCoveragePercentage: true,
|
|
63
|
+
}))).toThrow(/--includeUncoveredRanges, --includeCoveragePercentage/);
|
|
64
|
+
});
|
|
65
|
+
(0, vitest_1.it)("allows executed ranges, --globFilter and --includeAllFiles on a replay", () => {
|
|
66
|
+
(0, vitest_1.expect)(() => (0, js_coverage_command_1.assertTestRunOnlyFlagsUnsetForReplay)(baseOptions({
|
|
67
|
+
includeExecutedRanges: true,
|
|
68
|
+
includeAllFiles: true,
|
|
69
|
+
globFilter: "src/**",
|
|
70
|
+
}))).not.toThrow();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.describe)("isAmbiguousTestRunError", () => {
|
|
74
|
+
(0, vitest_1.it)("detects the ambiguous-test-run reason on a fetch error", () => {
|
|
75
|
+
(0, vitest_1.expect)((0, js_coverage_command_1.isAmbiguousTestRunError)({
|
|
76
|
+
response: { data: { reason: "ambiguous-test-run" } },
|
|
77
|
+
})).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.it)("is false for a fetch error with a different reason", () => {
|
|
80
|
+
(0, vitest_1.expect)((0, js_coverage_command_1.isAmbiguousTestRunError)({
|
|
81
|
+
response: { data: { reason: "no-coverage-indexed" } },
|
|
82
|
+
})).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)("is false for a non-fetch error", () => {
|
|
85
|
+
(0, vitest_1.expect)((0, js_coverage_command_1.isAmbiguousTestRunError)(new Error("boom"))).toBeFalsy();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=js-coverage.command.spec.js.map
|
|
89
|
+
//# debugId=cf073f44-40d8-5583-ac32-28d6529a3bcd
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-coverage.command.spec.js","sources":["../../../src/commands/agent/js-coverage.command.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"cf073f44-40d8-5583-ac32-28d6529a3bcd"}
|
|
@@ -3,13 +3,12 @@ interface Options {
|
|
|
3
3
|
apiToken?: string | null | undefined;
|
|
4
4
|
testRunId: string | undefined;
|
|
5
5
|
commitSha: string | undefined;
|
|
6
|
-
|
|
6
|
+
dontWaitForTestRunToComplete: boolean;
|
|
7
7
|
includeReplayIds: boolean;
|
|
8
8
|
includeDomDiffIds: boolean;
|
|
9
9
|
includeAllDiffs: boolean;
|
|
10
10
|
includeMatches: boolean;
|
|
11
11
|
orderByReplayDiffs: boolean;
|
|
12
|
-
verbose: boolean;
|
|
13
12
|
}
|
|
14
13
|
export declare const testRunDiffsCommand: CommandModule<unknown, Options>;
|
|
15
14
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-run-diffs.command.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"test-run-diffs.command.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAe3C,UAAU,OAAO;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,4BAA4B,EAAE,OAAO,CAAC;IACtC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AA0JD,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAoD/D,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
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]="
|
|
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]="3f2d4806-c07a-5b11-81a1-b22cc1229f10")}catch(e){}}();
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.testRunDiffsCommand = void 0;
|
|
@@ -12,9 +12,7 @@ const test_run_diffs_utils_1 = require("./test-run-diffs.utils");
|
|
|
12
12
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
13
|
/** Give up polling the diffs summary after this long, rather than forever. */
|
|
14
14
|
const SUMMARY_POLL_TIMEOUT_MS = 10 * 60_000;
|
|
15
|
-
const
|
|
16
|
-
const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplete, includeReplayIds, includeDomDiffIds, includeAllDiffs, includeMatches, orderByReplayDiffs, verbose, }) => {
|
|
17
|
-
(0, common_1.initLogger)();
|
|
15
|
+
const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToComplete, includeReplayIds, includeDomDiffIds, includeAllDiffs, includeMatches, orderByReplayDiffs, }) => {
|
|
18
16
|
if (testRunId != null && commitSha != null) {
|
|
19
17
|
throw new cli_user_error_1.CliUserError("Pass either --testRunId or --commitSha, not both.");
|
|
20
18
|
}
|
|
@@ -22,7 +20,10 @@ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplet
|
|
|
22
20
|
apiToken,
|
|
23
21
|
enableOAuthLogin: true,
|
|
24
22
|
});
|
|
25
|
-
const client = (0, client_1.
|
|
23
|
+
const client = await (0, client_1.createClientWithOAuth)({
|
|
24
|
+
apiToken,
|
|
25
|
+
enableOAuthLogin: true,
|
|
26
|
+
});
|
|
26
27
|
// Use --testRunId, else resolve the run from --commitSha or, when neither is
|
|
27
28
|
// given, from the local checkout's HEAD.
|
|
28
29
|
let resolvedTestRunId;
|
|
@@ -37,24 +38,19 @@ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplet
|
|
|
37
38
|
status = run.status;
|
|
38
39
|
}
|
|
39
40
|
// Diffs are only meaningful once the run has finished with a verdict
|
|
40
|
-
// (Success/Failure).
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
if ((0, resolve_test_run_from_commit_1.isTestRunInProgress)(status)) {
|
|
46
|
-
// Reached only when the caller didn't wait (waiting resolves in-progress
|
|
47
|
-
// above), so the hint is always worth showing. Diffs aren't available yet,
|
|
48
|
-
// so report and stop rather than error out.
|
|
49
|
-
log(`Test run ${resolvedTestRunId} is not complete (status: ${status}). ` +
|
|
50
|
-
"Pass --waitForTestRunToComplete to block until it finishes and then show diffs.");
|
|
41
|
+
// (Success/Failure). Block until it finishes (default) or, with
|
|
42
|
+
// --dontWaitForTestRunToComplete, report the in-progress run and stop.
|
|
43
|
+
const finishedStatus = await (0, resolve_test_run_from_commit_1.ensureTestRunFinished)(client, resolvedTestRunId, status, { dontWait: dontWaitForTestRunToComplete });
|
|
44
|
+
if (finishedStatus == null) {
|
|
51
45
|
return;
|
|
52
46
|
}
|
|
53
|
-
// Reject
|
|
54
|
-
//
|
|
55
|
-
(0, resolve_test_run_from_commit_1.assertTestRunComplete)(resolvedTestRunId,
|
|
47
|
+
// Reject session-pool bases (Partial, which never finish on their own and
|
|
48
|
+
// aren't tied to a change); fatal failures already threw while waiting.
|
|
49
|
+
(0, resolve_test_run_from_commit_1.assertTestRunComplete)(resolvedTestRunId, finishedStatus, {
|
|
50
|
+
resultName: "diffs",
|
|
51
|
+
});
|
|
56
52
|
const t0 = performance.now();
|
|
57
|
-
|
|
53
|
+
(0, common_1.logProgress)(`Fetching diffs summary for test run ${resolvedTestRunId}...`);
|
|
58
54
|
// --includeMatches implies --includeAllDiffs (matches are never part of the
|
|
59
55
|
// selected subset, so they only make sense alongside the full set). Use the
|
|
60
56
|
// effective value for both the request and the isSelected column.
|
|
@@ -68,12 +64,14 @@ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplet
|
|
|
68
64
|
};
|
|
69
65
|
let response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, diffsSummaryOptions);
|
|
70
66
|
// Poll until complete (or give up after the timeout, rather than forever).
|
|
67
|
+
// A single line when we start waiting — no per-poll output.
|
|
71
68
|
const summaryDeadline = performance.now() + SUMMARY_POLL_TIMEOUT_MS;
|
|
69
|
+
if (response.status === "pending" || response.status === "processing") {
|
|
70
|
+
(0, common_1.logProgress)(`Waiting for diff results for test run ${resolvedTestRunId}...`);
|
|
71
|
+
}
|
|
72
72
|
while (response.status === "pending" || response.status === "processing") {
|
|
73
|
-
if (verbose)
|
|
74
|
-
log(`Status: ${response.status}`);
|
|
75
73
|
if (performance.now() >= summaryDeadline) {
|
|
76
|
-
|
|
74
|
+
(0, common_1.logNotice)(`Diffs summary for test run ${resolvedTestRunId} did not complete within 10 minutes ` +
|
|
77
75
|
`(status: ${response.status}). Something may have gone wrong — try again later.`);
|
|
78
76
|
process.exit(1);
|
|
79
77
|
}
|
|
@@ -81,12 +79,12 @@ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplet
|
|
|
81
79
|
response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, diffsSummaryOptions);
|
|
82
80
|
}
|
|
83
81
|
if (response.status !== "complete") {
|
|
84
|
-
|
|
82
|
+
(0, common_1.logNotice)(`Error: unexpected status "${response.status}"`);
|
|
85
83
|
process.exit(1);
|
|
86
84
|
}
|
|
87
85
|
const data = response.data ?? [];
|
|
88
86
|
if (data.length === 0) {
|
|
89
|
-
|
|
87
|
+
(0, common_1.logNotice)(`Test run ${resolvedTestRunId} does not have diffs.`);
|
|
90
88
|
return;
|
|
91
89
|
}
|
|
92
90
|
// The backend sets `index` to the priority rank by default, or the
|
|
@@ -107,7 +105,7 @@ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplet
|
|
|
107
105
|
console.log((0, test_run_diffs_utils_1.formatDiffRow)(row, columns).join("\t"));
|
|
108
106
|
}
|
|
109
107
|
const tEnd = performance.now();
|
|
110
|
-
|
|
108
|
+
(0, common_1.logNotice)(`${data.length} replay diff(s), ${totalDiffScreenshots} screenshot diff(s), total ${((tEnd - t0) / 1000).toFixed(1)}s`);
|
|
111
109
|
};
|
|
112
110
|
exports.testRunDiffsCommand = {
|
|
113
111
|
command: "test-run-diffs",
|
|
@@ -122,10 +120,10 @@ exports.testRunDiffsCommand = {
|
|
|
122
120
|
string: true,
|
|
123
121
|
description: "A commit SHA, used as an alternative to --testRunId: the latest test run for the commit is resolved and used. Defaults to the local git HEAD when neither --testRunId nor --commitSha is given.",
|
|
124
122
|
},
|
|
125
|
-
|
|
123
|
+
dontWaitForTestRunToComplete: {
|
|
126
124
|
boolean: true,
|
|
127
125
|
default: false,
|
|
128
|
-
description: "
|
|
126
|
+
description: "By default, if the test run is still in progress the command blocks until it finishes before fetching diffs. Pass this to instead report the in-progress run and exit immediately.",
|
|
129
127
|
},
|
|
130
128
|
includeReplayIds: {
|
|
131
129
|
boolean: true,
|
|
@@ -152,13 +150,8 @@ exports.testRunDiffsCommand = {
|
|
|
152
150
|
description: "Order rows by replay diff then event index (instead of by selection priority) and include the index/total columns",
|
|
153
151
|
default: false,
|
|
154
152
|
},
|
|
155
|
-
verbose: {
|
|
156
|
-
boolean: true,
|
|
157
|
-
description: "Show polling status updates",
|
|
158
|
-
default: false,
|
|
159
|
-
},
|
|
160
153
|
},
|
|
161
154
|
handler: (0, sentry_utils_1.wrapHandler)(handler),
|
|
162
155
|
};
|
|
163
156
|
//# sourceMappingURL=test-run-diffs.command.js.map
|
|
164
|
-
//# debugId=
|
|
157
|
+
//# debugId=3f2d4806-c07a-5b11-81a1-b22cc1229f10
|