(config, context)
| 446 | } |
| 447 | |
| 448 | function resolveRule(config, context) { |
| 449 | const base = config.defaultRules.get(context.metric); |
| 450 | if (!base) return null; |
| 451 | |
| 452 | let resolved = { |
| 453 | metric: base.metric, |
| 454 | relativeRegression: base.relativeRegression, |
| 455 | absoluteRegression: base.absoluteRegression, |
| 456 | severity: base.severity, |
| 457 | direction: base.direction, |
| 458 | }; |
| 459 | let source = base.source; |
| 460 | let reason = null; |
| 461 | |
| 462 | for (const override of config.overrides) { |
| 463 | if (!overrideMatches(override, context)) continue; |
| 464 | resolved = { |
| 465 | metric: resolved.metric, |
| 466 | relativeRegression: override.rulePatch.relativeRegression ?? resolved.relativeRegression, |
| 467 | absoluteRegression: override.rulePatch.absoluteRegression ?? resolved.absoluteRegression, |
| 468 | severity: override.rulePatch.severity ?? resolved.severity, |
| 469 | direction: override.rulePatch.direction ?? resolved.direction, |
| 470 | }; |
| 471 | source = override.source; |
| 472 | reason = override.reason; |
| 473 | } |
| 474 | |
| 475 | return { rule: resolved, source, reason }; |
| 476 | } |
| 477 | |
| 478 | function computeDeltaStats(baselineValue, currentValue, rule) { |
| 479 | const delta = currentValue - baselineValue; |
no test coverage detected