render method

String render(
  1. ScanReport report
)

Renders report as Markdown.

Implementation

String render(ScanReport report) {
  final StringBuffer buffer = StringBuffer()
    ..writeln('# dep_sherpa Report')
    ..writeln()
    ..writeln('- Project: `${report.projectName}`')
    ..writeln('- Generated: `${report.generatedAt.toIso8601String()}`')
    ..writeln(
        '- Overall dependency risk: `${report.overallScore.toStringAsFixed(1)}`')
    ..writeln('- Include transitive: `${report.includeTransitive}`')
    ..writeln()
    ..writeln('## Graph Summary')
    ..writeln()
    ..writeln('| Metric | Value |')
    ..writeln('| --- | ---: |')
    ..writeln('| Max depth | ${report.graph.maxDepth} |')
    ..writeln('| Total nodes | ${report.graph.totalNodes} |')
    ..writeln(
        '| Direct dependencies | ${report.graph.directDependencyCount} |')
    ..writeln(
        '| Transitive dependencies | ${report.graph.transitiveDependencyCount} |')
    ..writeln()
    ..writeln('## Ranked Dependencies')
    ..writeln()
    ..writeln(
      '| Package | Score | Class | Trust | Depth | Transitive | Hard Triggers |',
    )
    ..writeln('| --- | ---: | --- | ---: | ---: | ---: | --- |');

  for (final DependencyRiskEntry entry in report.dependencies) {
    buffer.writeln(
      '| `${entry.dependency.node.name}` | '
      '${entry.riskScore.finalScore.toStringAsFixed(1)} | '
      '${entry.riskScore.classification.name} | '
      '${entry.riskScore.trustFactor.toStringAsFixed(1)} | '
      '${entry.dependency.metrics.maxDepth} | '
      '${entry.dependency.metrics.transitiveCount} | '
      '${entry.riskScore.hardRiskTriggers.join(", ")} |',
    );
  }

  buffer.writeln();
  buffer.writeln('## Transparency');
  buffer.writeln();
  for (final DependencyRiskEntry entry in report.dependencies) {
    buffer.writeln('### ${entry.dependency.node.name}');
    buffer.writeln();
    buffer.writeln('```json');
    buffer.writeln(
      const JsonEncoder.withIndent('  ').convert(entry.toJson()),
    );
    buffer.writeln('```');
    buffer.writeln();
  }
  return buffer.toString();
}