@aqa-pulse/cli 0.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 +43 -0
- package/bin/aqa-pulse.js +49 -0
- package/dist/backend/generate-source-facts.d.ts +2 -0
- package/dist/backend/generate-source-facts.js +607 -0
- package/dist/backend/merge-reports.d.ts +19 -0
- package/dist/backend/merge-reports.js +314 -0
- package/dist/backend/upload-report-artifacts.d.ts +9 -0
- package/dist/backend/upload-report-artifacts.js +772 -0
- package/dist/backend/upload-report.d.ts +13 -0
- package/dist/backend/upload-report.js +338 -0
- package/dist/dashboard-utils.d.ts +437 -0
- package/dist/dashboard-utils.js +2627 -0
- package/dist/history-utils.d.ts +72 -0
- package/dist/history-utils.js +267 -0
- package/dist/shared/business-assumptions.d.ts +14 -0
- package/dist/shared/business-assumptions.js +61 -0
- package/dist/shared/dashboard-helpers.d.ts +63 -0
- package/dist/shared/dashboard-helpers.js +429 -0
- package/dist/shared/dashboard-metric-info.d.ts +61 -0
- package/dist/shared/dashboard-metric-info.js +15 -0
- package/dist/shared/error-utils.d.ts +1 -0
- package/dist/shared/error-utils.js +6 -0
- package/dist/shared/formatting.d.ts +3 -0
- package/dist/shared/formatting.js +42 -0
- package/dist/shared/i18n/ru.d.ts +558 -0
- package/dist/shared/i18n/ru.js +577 -0
- package/dist/shared/metric-info.d.ts +5 -0
- package/dist/shared/metric-info.js +210 -0
- package/dist/shared/navigation.d.ts +31 -0
- package/dist/shared/navigation.js +99 -0
- package/dist/shared/test-history-helpers.d.ts +51 -0
- package/dist/shared/test-history-helpers.js +294 -0
- package/dist/shared/test-history-metric-info.d.ts +17 -0
- package/dist/shared/test-history-metric-info.js +20 -0
- package/dist/shared/text-utils.d.ts +2 -0
- package/dist/shared/text-utils.js +15 -0
- package/package.json +37 -0
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
import { type DashboardBusinessAssumptions } from './shared/business-assumptions';
|
|
2
|
+
import { type DashboardHistoryEntry } from './history-utils';
|
|
3
|
+
export { formatDate, formatDuration, formatPercent } from './shared/formatting';
|
|
4
|
+
export { applyBusinessAssumptionsToSummary, normalizeDashboardBusinessAssumptions, type DashboardBusinessAssumptions, } from './shared/business-assumptions';
|
|
5
|
+
export interface DashboardRunMetadata {
|
|
6
|
+
branch: string | null;
|
|
7
|
+
commit: string | null;
|
|
8
|
+
author: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface DashboardFilters {
|
|
11
|
+
branch: string | null;
|
|
12
|
+
project: string | null;
|
|
13
|
+
file: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface DashboardAvailableFilters {
|
|
16
|
+
branches: string[];
|
|
17
|
+
projects: string[];
|
|
18
|
+
files: string[];
|
|
19
|
+
projectsByBranch: Record<string, string[]>;
|
|
20
|
+
filesByBranch: Record<string, string[]>;
|
|
21
|
+
filesByProject: Record<string, string[]>;
|
|
22
|
+
filesByBranchProject: Record<string, Record<string, string[]>>;
|
|
23
|
+
}
|
|
24
|
+
export interface ReporterSummary {
|
|
25
|
+
total?: number;
|
|
26
|
+
passed?: number;
|
|
27
|
+
failed?: number;
|
|
28
|
+
flaky?: number;
|
|
29
|
+
skipped?: number;
|
|
30
|
+
timedOut?: number;
|
|
31
|
+
interrupted?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ReporterLocation {
|
|
34
|
+
file?: string;
|
|
35
|
+
line?: number;
|
|
36
|
+
column?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface ReporterErrorObject {
|
|
39
|
+
message?: string;
|
|
40
|
+
stack?: string;
|
|
41
|
+
}
|
|
42
|
+
export type ReporterError = ReporterErrorObject | string;
|
|
43
|
+
export interface ReporterAttachment {
|
|
44
|
+
name?: string;
|
|
45
|
+
contentType?: string;
|
|
46
|
+
path?: string;
|
|
47
|
+
url?: string;
|
|
48
|
+
inlineContentBase64?: string;
|
|
49
|
+
inlineContentEncoding?: 'base64' | string;
|
|
50
|
+
inlineContentSizeBytes?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface ReporterStep {
|
|
53
|
+
title?: string;
|
|
54
|
+
category?: string;
|
|
55
|
+
depth?: number;
|
|
56
|
+
offsetMs?: number;
|
|
57
|
+
durationMs?: number;
|
|
58
|
+
status?: string;
|
|
59
|
+
failed?: boolean;
|
|
60
|
+
error?: ReporterError;
|
|
61
|
+
}
|
|
62
|
+
export interface ReporterAttempt {
|
|
63
|
+
attempt?: number;
|
|
64
|
+
status?: string;
|
|
65
|
+
durationMs?: number;
|
|
66
|
+
startTime?: string;
|
|
67
|
+
error?: ReporterError;
|
|
68
|
+
attachments?: ReporterAttachment[];
|
|
69
|
+
steps?: ReporterStep[];
|
|
70
|
+
failedStepIndex?: number;
|
|
71
|
+
failedStepTitle?: string;
|
|
72
|
+
}
|
|
73
|
+
export interface ReporterTest {
|
|
74
|
+
id?: string;
|
|
75
|
+
title?: string;
|
|
76
|
+
status?: string;
|
|
77
|
+
flaky?: boolean;
|
|
78
|
+
durationMs?: number;
|
|
79
|
+
location?: ReporterLocation;
|
|
80
|
+
project?: string;
|
|
81
|
+
browser?: string;
|
|
82
|
+
retries?: number;
|
|
83
|
+
errors?: ReporterError[];
|
|
84
|
+
attempts?: ReporterAttempt[];
|
|
85
|
+
}
|
|
86
|
+
export interface ReporterEnvironment {
|
|
87
|
+
playwrightVersion?: string;
|
|
88
|
+
nodeVersion?: string;
|
|
89
|
+
os?: string;
|
|
90
|
+
workers?: number;
|
|
91
|
+
retries?: number;
|
|
92
|
+
projects?: string[];
|
|
93
|
+
}
|
|
94
|
+
export interface ReporterRoot {
|
|
95
|
+
schemaVersion?: number;
|
|
96
|
+
timestamp?: string;
|
|
97
|
+
durationMs?: number;
|
|
98
|
+
summary?: ReporterSummary;
|
|
99
|
+
environment?: ReporterEnvironment;
|
|
100
|
+
tests?: ReporterTest[];
|
|
101
|
+
aqaPulseSourceFacts?: PrecomputedCodeQualitySourceFacts;
|
|
102
|
+
}
|
|
103
|
+
export interface PrecomputedCodeQualityTestFacts {
|
|
104
|
+
startLine: number;
|
|
105
|
+
endLine: number;
|
|
106
|
+
title: string | null;
|
|
107
|
+
assertionCount: number;
|
|
108
|
+
smartWaitCount: number;
|
|
109
|
+
hardWaitCount: number;
|
|
110
|
+
stepCount: number;
|
|
111
|
+
directLocatorCount: number;
|
|
112
|
+
directPageActionCount: number;
|
|
113
|
+
stableSelectorCount: number;
|
|
114
|
+
textSelectorCount: number;
|
|
115
|
+
fragileSelectorCount: number;
|
|
116
|
+
pomReferenceCount: number;
|
|
117
|
+
pomFixtureReferenceCount: number;
|
|
118
|
+
sharedStateMutationCount: number;
|
|
119
|
+
usesPom: boolean;
|
|
120
|
+
}
|
|
121
|
+
export interface PrecomputedCodeQualityFileFacts {
|
|
122
|
+
file: string;
|
|
123
|
+
tests: PrecomputedCodeQualityTestFacts[];
|
|
124
|
+
hasPomImports: boolean;
|
|
125
|
+
beforeAllCount: number;
|
|
126
|
+
beforeEachCount: number;
|
|
127
|
+
serialModeCount: number;
|
|
128
|
+
topLevelMutableStateCount: number;
|
|
129
|
+
}
|
|
130
|
+
export interface PrecomputedCodeQualitySourceFacts {
|
|
131
|
+
schemaVersion: number;
|
|
132
|
+
analyzerVersion?: string;
|
|
133
|
+
files: PrecomputedCodeQualityFileFacts[];
|
|
134
|
+
}
|
|
135
|
+
export interface DashboardKpis {
|
|
136
|
+
totalTests: number;
|
|
137
|
+
passedTests: number;
|
|
138
|
+
failedTests: number;
|
|
139
|
+
flakyTests: number;
|
|
140
|
+
skippedTests: number;
|
|
141
|
+
timedOutTests: number;
|
|
142
|
+
interruptedTests: number;
|
|
143
|
+
passRate: number;
|
|
144
|
+
flakyRatio: number;
|
|
145
|
+
totalDurationMs: number;
|
|
146
|
+
medianDurationMs: number;
|
|
147
|
+
errorClusterCount: number;
|
|
148
|
+
}
|
|
149
|
+
export interface DashboardChartDataset {
|
|
150
|
+
labels: string[];
|
|
151
|
+
values: number[];
|
|
152
|
+
}
|
|
153
|
+
export interface DashboardCurrentRunTest {
|
|
154
|
+
title: string;
|
|
155
|
+
file: string;
|
|
156
|
+
project: string;
|
|
157
|
+
status: string;
|
|
158
|
+
flaky: boolean;
|
|
159
|
+
durationMs: number;
|
|
160
|
+
errorMessage: string | null;
|
|
161
|
+
errorDetails?: string | null;
|
|
162
|
+
}
|
|
163
|
+
export interface DashboardCurrentRunTests {
|
|
164
|
+
all: DashboardCurrentRunTest[];
|
|
165
|
+
passed: DashboardCurrentRunTest[];
|
|
166
|
+
failed: DashboardCurrentRunTest[];
|
|
167
|
+
flaky: DashboardCurrentRunTest[];
|
|
168
|
+
skipped: DashboardCurrentRunTest[];
|
|
169
|
+
timedOut: DashboardCurrentRunTest[];
|
|
170
|
+
interrupted: DashboardCurrentRunTest[];
|
|
171
|
+
}
|
|
172
|
+
export interface DashboardProblematicTest {
|
|
173
|
+
title: string;
|
|
174
|
+
file: string;
|
|
175
|
+
project: string;
|
|
176
|
+
status: string;
|
|
177
|
+
flaky: boolean;
|
|
178
|
+
durationMs: number;
|
|
179
|
+
retries: number;
|
|
180
|
+
attempts: number;
|
|
181
|
+
failureRate: number;
|
|
182
|
+
errorMessage: string;
|
|
183
|
+
errorDetails?: string | null;
|
|
184
|
+
}
|
|
185
|
+
export interface DashboardErrorCluster {
|
|
186
|
+
message: string;
|
|
187
|
+
sampleMessage?: string;
|
|
188
|
+
count: number;
|
|
189
|
+
tests: string[];
|
|
190
|
+
}
|
|
191
|
+
export interface DashboardSlowTest {
|
|
192
|
+
title: string;
|
|
193
|
+
file: string;
|
|
194
|
+
project: string;
|
|
195
|
+
status: string;
|
|
196
|
+
flaky: boolean;
|
|
197
|
+
durationMs: number;
|
|
198
|
+
errorMessage: string | null;
|
|
199
|
+
errorDetails?: string | null;
|
|
200
|
+
}
|
|
201
|
+
export interface DashboardFlakyTestMetric {
|
|
202
|
+
title: string;
|
|
203
|
+
file: string;
|
|
204
|
+
project: string;
|
|
205
|
+
flakyScore: number;
|
|
206
|
+
failRate: number;
|
|
207
|
+
mtbfDays: number | null;
|
|
208
|
+
unstableRuns: number;
|
|
209
|
+
totalRuns: number;
|
|
210
|
+
latestStatus: string;
|
|
211
|
+
latestErrorMessage: string | null;
|
|
212
|
+
}
|
|
213
|
+
export interface DashboardFlakyResolutionMetric {
|
|
214
|
+
days: number;
|
|
215
|
+
title: string;
|
|
216
|
+
file: string;
|
|
217
|
+
project: string;
|
|
218
|
+
detectedAt: string | null;
|
|
219
|
+
fixedAt: string | null;
|
|
220
|
+
}
|
|
221
|
+
export interface DashboardBusinessTimeToDetectMetric {
|
|
222
|
+
minutes: number | null;
|
|
223
|
+
source: 'pendingIntegration';
|
|
224
|
+
}
|
|
225
|
+
export interface DashboardBusinessTimeToFixMetric {
|
|
226
|
+
medianDays: number | null;
|
|
227
|
+
averageDays: number | null;
|
|
228
|
+
resolvedIncidents: number;
|
|
229
|
+
}
|
|
230
|
+
export interface DashboardBusinessAutomationRoiMetric {
|
|
231
|
+
percent: number | null;
|
|
232
|
+
source: 'pendingAssumptions';
|
|
233
|
+
}
|
|
234
|
+
export interface DashboardCodeQualityRiskDriver {
|
|
235
|
+
label: string;
|
|
236
|
+
count: number;
|
|
237
|
+
impact: 'low' | 'medium' | 'high';
|
|
238
|
+
hint: string;
|
|
239
|
+
}
|
|
240
|
+
export interface DashboardCodeQualityFileMetric {
|
|
241
|
+
file: string;
|
|
242
|
+
matchedTests: number;
|
|
243
|
+
declaredTests: number;
|
|
244
|
+
smellScore: number | null;
|
|
245
|
+
pomCompliancePercent: number | null;
|
|
246
|
+
assertionDensity: number | null;
|
|
247
|
+
waitStrategyScore: number | null;
|
|
248
|
+
stepGranularity: number | null;
|
|
249
|
+
isolationScore: number | null;
|
|
250
|
+
selectorStabilityPercent: number | null;
|
|
251
|
+
notableSignals: string[];
|
|
252
|
+
sourceResolved: boolean;
|
|
253
|
+
}
|
|
254
|
+
export interface DashboardCodeQualityMetrics {
|
|
255
|
+
analyzedFiles: number;
|
|
256
|
+
matchedTests: number;
|
|
257
|
+
analyzableTests: number;
|
|
258
|
+
sourceCoveragePercent: number;
|
|
259
|
+
testSmellScore: number | null;
|
|
260
|
+
pomCompliancePercent: number | null;
|
|
261
|
+
assertionDensity: number | null;
|
|
262
|
+
waitStrategyScore: number | null;
|
|
263
|
+
stepGranularity: number | null;
|
|
264
|
+
isolationScore: number | null;
|
|
265
|
+
selectorStabilityPercent: number | null;
|
|
266
|
+
drivers: DashboardCodeQualityRiskDriver[];
|
|
267
|
+
topRiskFiles: DashboardCodeQualityFileMetric[];
|
|
268
|
+
}
|
|
269
|
+
export interface DashboardPhaseBreakdownItem {
|
|
270
|
+
label: string;
|
|
271
|
+
durationMs: number;
|
|
272
|
+
sharePercent: number;
|
|
273
|
+
}
|
|
274
|
+
export interface DashboardDurationBreakdownItem {
|
|
275
|
+
label: string;
|
|
276
|
+
durationMs: number;
|
|
277
|
+
sharePercent: number;
|
|
278
|
+
tests: number;
|
|
279
|
+
}
|
|
280
|
+
export interface DashboardAdvancedMetrics {
|
|
281
|
+
performance: {
|
|
282
|
+
p95DurationMs: number;
|
|
283
|
+
p99DurationMs: number;
|
|
284
|
+
slowestTests: DashboardSlowTest[];
|
|
285
|
+
phaseBreakdown: DashboardPhaseBreakdownItem[];
|
|
286
|
+
suiteDuration: DashboardDurationBreakdownItem[];
|
|
287
|
+
durationPerBrowser: DashboardDurationBreakdownItem[];
|
|
288
|
+
durationTrend: {
|
|
289
|
+
currentDurationMs: number;
|
|
290
|
+
previousDurationMs: number | null;
|
|
291
|
+
deltaPercent: number | null;
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
flakyAnalytics: {
|
|
295
|
+
averageFlakyScore: number | null;
|
|
296
|
+
averageMtbfDays: number | null;
|
|
297
|
+
topFlakyTests: DashboardFlakyTestMetric[];
|
|
298
|
+
firstFlakeToFix: DashboardFlakyResolutionMetric | null;
|
|
299
|
+
flakyTrend: {
|
|
300
|
+
currentFlakyTests: number;
|
|
301
|
+
previousFlakyTests: number | null;
|
|
302
|
+
delta: number | null;
|
|
303
|
+
};
|
|
304
|
+
};
|
|
305
|
+
charts: {
|
|
306
|
+
durationTrend: DashboardChartDataset;
|
|
307
|
+
flakyTrend: DashboardChartDataset;
|
|
308
|
+
};
|
|
309
|
+
businessMetrics: {
|
|
310
|
+
timeToDetect: DashboardBusinessTimeToDetectMetric;
|
|
311
|
+
timeToFixFlaky: DashboardBusinessTimeToFixMetric;
|
|
312
|
+
costOfFlakiness: {
|
|
313
|
+
totalRub: number | null;
|
|
314
|
+
ciCostRub: number | null;
|
|
315
|
+
developerCostRub: number | null;
|
|
316
|
+
extraRetryMinutes: number;
|
|
317
|
+
extraRetries: number;
|
|
318
|
+
unstableRuns: number;
|
|
319
|
+
activeDays: number;
|
|
320
|
+
costPerActiveDayRub: number | null;
|
|
321
|
+
assumptions: DashboardBusinessAssumptions;
|
|
322
|
+
};
|
|
323
|
+
developerFriction: {
|
|
324
|
+
rerunProxyPerActiveDay: number;
|
|
325
|
+
rerunBurdenPer100Runs: number;
|
|
326
|
+
extraRetries: number;
|
|
327
|
+
unstableRuns: number;
|
|
328
|
+
activeDays: number;
|
|
329
|
+
observedRuns: number;
|
|
330
|
+
};
|
|
331
|
+
releaseConfidenceScore: number;
|
|
332
|
+
automationRoi: DashboardBusinessAutomationRoiMetric;
|
|
333
|
+
};
|
|
334
|
+
codeQuality: DashboardCodeQualityMetrics;
|
|
335
|
+
}
|
|
336
|
+
export interface DashboardManagerSignal {
|
|
337
|
+
score: number;
|
|
338
|
+
level: 'healthy' | 'warning' | 'critical';
|
|
339
|
+
}
|
|
340
|
+
export interface DashboardManagerBlocker {
|
|
341
|
+
kind: 'release-confidence' | 'problematic-test' | 'flaky' | 'duration' | 'error-cluster' | 'history-coverage';
|
|
342
|
+
severity: 'critical' | 'warning' | 'info';
|
|
343
|
+
title: string;
|
|
344
|
+
value: string;
|
|
345
|
+
details: string;
|
|
346
|
+
testTitle: string | null;
|
|
347
|
+
project: string | null;
|
|
348
|
+
file: string | null;
|
|
349
|
+
}
|
|
350
|
+
export interface DashboardManagerChange {
|
|
351
|
+
label: string;
|
|
352
|
+
value: string;
|
|
353
|
+
details: string;
|
|
354
|
+
direction: 'improving' | 'regressing' | 'stable';
|
|
355
|
+
}
|
|
356
|
+
export interface DashboardManagerSummary {
|
|
357
|
+
releaseReadiness: DashboardManagerSignal;
|
|
358
|
+
qualityRisk: DashboardManagerSignal;
|
|
359
|
+
deliveryRisk: DashboardManagerSignal;
|
|
360
|
+
blockers: DashboardManagerBlocker[];
|
|
361
|
+
changes: DashboardManagerChange[];
|
|
362
|
+
}
|
|
363
|
+
export type DashboardComparisonMode = 'adjacent' | 'comparable';
|
|
364
|
+
export interface DashboardRunComparisonIdentity {
|
|
365
|
+
key: string;
|
|
366
|
+
label: string | null;
|
|
367
|
+
}
|
|
368
|
+
export interface DashboardSummary {
|
|
369
|
+
generatedAt: string;
|
|
370
|
+
sourceFile: string;
|
|
371
|
+
schemaVersion: number | null;
|
|
372
|
+
reportTimestamp: string | null;
|
|
373
|
+
notes: string[];
|
|
374
|
+
runMetadata: DashboardRunMetadata;
|
|
375
|
+
filters: DashboardFilters;
|
|
376
|
+
availableFilters: DashboardAvailableFilters;
|
|
377
|
+
environment: {
|
|
378
|
+
playwrightVersion: string;
|
|
379
|
+
nodeVersion: string;
|
|
380
|
+
os: string;
|
|
381
|
+
workers: number;
|
|
382
|
+
retries: number;
|
|
383
|
+
projects: string[];
|
|
384
|
+
};
|
|
385
|
+
kpis: DashboardKpis;
|
|
386
|
+
charts: {
|
|
387
|
+
passRateTrend: DashboardChartDataset;
|
|
388
|
+
durationTrend: DashboardChartDataset;
|
|
389
|
+
flakyTrend: DashboardChartDataset;
|
|
390
|
+
statusDistribution: DashboardChartDataset;
|
|
391
|
+
errorClusters: DashboardChartDataset;
|
|
392
|
+
slowestTests: DashboardChartDataset;
|
|
393
|
+
};
|
|
394
|
+
trend: {
|
|
395
|
+
previousRun: DashboardHistoryEntry | null;
|
|
396
|
+
passRateDelta: number | null;
|
|
397
|
+
failedTestsDelta: number | null;
|
|
398
|
+
flakyTestsDelta: number | null;
|
|
399
|
+
durationMsDelta: number | null;
|
|
400
|
+
};
|
|
401
|
+
comparison: {
|
|
402
|
+
currentRun: DashboardHistoryEntry | null;
|
|
403
|
+
previousRun: DashboardHistoryEntry | null;
|
|
404
|
+
previousOverallRun: DashboardHistoryEntry | null;
|
|
405
|
+
mode: DashboardComparisonMode;
|
|
406
|
+
scopeLabel: string | null;
|
|
407
|
+
};
|
|
408
|
+
history: {
|
|
409
|
+
totalRuns: number;
|
|
410
|
+
recentRuns: DashboardHistoryEntry[];
|
|
411
|
+
};
|
|
412
|
+
performance: DashboardAdvancedMetrics['performance'];
|
|
413
|
+
flakyAnalytics: DashboardAdvancedMetrics['flakyAnalytics'];
|
|
414
|
+
businessMetrics: DashboardAdvancedMetrics['businessMetrics'];
|
|
415
|
+
codeQuality: DashboardAdvancedMetrics['codeQuality'];
|
|
416
|
+
managerSummary: DashboardManagerSummary;
|
|
417
|
+
currentRunTests: DashboardCurrentRunTests;
|
|
418
|
+
topProblematicTests: DashboardProblematicTest[];
|
|
419
|
+
errorClusters: DashboardErrorCluster[];
|
|
420
|
+
}
|
|
421
|
+
export declare function deriveDashboardRunComparisonIdentity(report: ReporterRoot, sourceFile: string): DashboardRunComparisonIdentity;
|
|
422
|
+
export declare function loadReporterReport(reportPath: string): ReporterRoot;
|
|
423
|
+
export declare function enrichReporterReport(report: ReporterRoot): ReporterRoot;
|
|
424
|
+
export declare function getReporterErrorMessage(error: ReporterError | undefined | null): string | null;
|
|
425
|
+
export declare function readDashboardSummary(summaryPath: string): DashboardSummary;
|
|
426
|
+
export declare function normalizeDashboardSummary(summary: DashboardSummary): DashboardSummary;
|
|
427
|
+
export declare function ensureDirectoryForFile(filePath: string): void;
|
|
428
|
+
export declare function writeJsonFile(filePath: string, payload: unknown): void;
|
|
429
|
+
export declare function writeTextFile(filePath: string, payload: string): void;
|
|
430
|
+
export declare function buildDashboardSummary(report: ReporterRoot, sourceFile: string, historyRuns?: DashboardHistoryEntry[], runMetadata?: DashboardRunMetadata, advancedMetrics?: DashboardAdvancedMetrics | null, filters?: DashboardFilters, availableFilters?: DashboardAvailableFilters | null): DashboardSummary;
|
|
431
|
+
export declare function buildAdvancedMetrics(report: ReporterRoot, historyRuns: DashboardHistoryEntry[], archiveRootPath: string, sourceFile?: string | null): DashboardAdvancedMetrics;
|
|
432
|
+
export declare function buildAdvancedMetricsFromArchivedRuns(report: ReporterRoot, historyRuns: DashboardHistoryEntry[], archivedRuns: Array<{
|
|
433
|
+
run: DashboardHistoryEntry;
|
|
434
|
+
report: ReporterRoot;
|
|
435
|
+
}>, sourceFile?: string | null): DashboardAdvancedMetrics;
|
|
436
|
+
export declare function normalizePrecomputedSourceFacts(value: unknown): PrecomputedCodeQualitySourceFacts | null;
|
|
437
|
+
export declare function collectCurrentRunTests(tests: ReporterTest[]): DashboardCurrentRunTests;
|