in packages/cli/src/baseline/baseline-engine.ts [27:92]
public updateResultsInPlace(axeResults: AxeCoreResults, baselineOptions: BaselineOptions): BaselineEvaluation {
const oldBaselineResults: BaselineResult[] = baselineOptions.baselineContent?.results ?? [];
const newBaseline = this.baselineGenerator.generateBaseline(axeResults.violations, baselineOptions.urlNormalizer);
const newBaselineResults: BaselineResult[] = newBaseline.results;
const evaluation: BaselineEvaluation = {
suggestedBaselineUpdate: baselineOptions.baselineContent ? null : newBaseline,
fixedViolationsByRule: {},
newViolationsByRule: {},
totalFixedViolations: 0,
totalNewViolations: 0,
};
if (baselineOptions.baselineContent) {
evaluation.totalBaselineViolations = 0;
}
// Take advantage of the fact that baseline results are always sorted
let oldResultIndex = 0;
let newResultIndex = 0;
while (oldResultIndex < oldBaselineResults.length || newResultIndex < newBaselineResults.length) {
const oldBaselineResult = oldResultIndex < oldBaselineResults.length ? oldBaselineResults[oldResultIndex] : null;
const newBaselineResult = newResultIndex < newBaselineResults.length ? newBaselineResults[newResultIndex] : null;
const resultDetailComparison = this.compareResultDetails(oldBaselineResult, newBaselineResult);
if (resultDetailComparison < 0) {
// exists in oldBaselineResults but not newBaselineResults
this.addFixedViolationsToEvaluation(oldBaselineResult, evaluation);
oldResultIndex++;
} else if (resultDetailComparison > 0) {
// exists in newBaselineResults but not oldBaselineResults
this.addNewViolationsToEvaluation(newBaselineResult, evaluation);
this.updateAxeResults(axeResults, newBaselineResult);
newResultIndex++;
} else {
// exists in both oldBaselineResults and newBaselineResults, so compare urls
const urlComparison: UrlComparison = this.getUrlComparison(oldBaselineResult.urls, newBaselineResult.urls);
if (urlComparison.fixedCount) {
this.updateCountsByRule(evaluation.fixedViolationsByRule, oldBaselineResult.rule, urlComparison.fixedCount);
evaluation.totalFixedViolations += urlComparison.fixedCount;
}
if (urlComparison.newUrls.size) {
this.updateCountsByRule(evaluation.newViolationsByRule, oldBaselineResult.rule, urlComparison.newUrls.size);
evaluation.totalNewViolations += urlComparison.newUrls.size;
}
evaluation.totalBaselineViolations += oldBaselineResult.urls.length;
this.updateAxeResults(axeResults, newBaselineResult, urlComparison.newUrls);
oldResultIndex++;
newResultIndex++;
}
}
if (
evaluation.totalFixedViolations ||
evaluation.totalNewViolations ||
baselineOptions.baselineContent?.metadata?.fileFormatVersion !== newBaseline.metadata.fileFormatVersion
) {
evaluation.suggestedBaselineUpdate = newBaseline;
}
return evaluation;
}