core/counters/report.counter.ts

core/counters/report.counter.ts is a file in GovLab Patterns. 21 lines of code and 4 definitions.

import type { MetricScope, ReportMetrics } from "#types/report.types";
import { maxOf, tally } from "#core/counters/base.counter";

const RATE_SCALE = 100;

export const resolutionRate = function resolutionRate(resolved: number, unresolved: number): number {
    const total = resolved + unresolved;
    return total === 0 ? 1 : Math.round((resolved / total) * RATE_SCALE) / RATE_SCALE;
};

export const metricsOf = function metricsOf(scope: MetricScope): ReportMetrics {
    return {
        callable: scope.symbols.filter((symbol) => symbol.callable).length,
        definitions: scope.symbols.length,
        edges: scope.edges.length,
        exported: scope.symbols.filter((symbol) => symbol.exported).length,
        findings: tally(scope.findings, (finding) => finding.kind),
        flows: tally(scope.symbols, (symbol) => symbol.flow),
        maxInDegree: maxOf(scope.symbols.map((symbol) => symbol.inDegree)),
        maxOutDegree: maxOf(scope.symbols.map((symbol) => symbol.outDegree)),
        resolutionRate: resolutionRate(scope.edges.length, scope.unresolved),
        unresolvedCalls: scope.unresolved,
    };
};