deepsource-mcp-server
Version:
Model Context Protocol server for DeepSource
179 lines (178 loc) • 5.04 kB
TypeScript
/**
* @fileoverview ComplianceReport aggregate root
*
* This module defines the ComplianceReport aggregate which represents security
* and code quality compliance reports for a project.
*/
import { AggregateRoot } from '../../shared/aggregate-root.js';
import { ProjectKey, GraphQLNodeId } from '../../../types/branded.js';
import { ReportType } from '../../../types/report-types.js';
import { ComplianceReportStatus, ComplianceCategory, ComplianceSummary, ReportTrend, CreateComplianceReportParams, UpdateCategoriesParams, UpdateTrendParams } from './compliance-report.types.js';
/**
* ComplianceReport aggregate root
*
* Represents compliance reports (OWASP, SANS, MISRA-C) for a project.
* Tracks compliance categories, issues, and trends over time.
*
* @example
* ```typescript
* const report = ComplianceReport.create({
* projectKey: asProjectKey('my-project'),
* repositoryId: asGraphQLNodeId('repo123'),
* reportType: ReportType.OWASP_TOP_10,
* categories: [
* {
* name: 'A1: Injection',
* compliant: IssueCount.create(45),
* nonCompliant: IssueCount.create(5),
* issueCount: IssueCount.create(50),
* severity: 'CRITICAL'
* }
* ]
* });
*
* console.log(report.summary.complianceScore.value); // 90
* console.log(report.isCompliant); // true
* ```
*/
export declare class ComplianceReport extends AggregateRoot<string> {
private _projectKey;
private _repositoryId;
private _reportType;
private _status;
private _categories;
private _summary;
private _trend;
private _generatedAt;
private _lastUpdated;
private constructor();
/**
* Creates a new ComplianceReport aggregate
*
* @param params - Creation parameters
* @returns A new ComplianceReport instance
*/
static create(params: CreateComplianceReportParams): ComplianceReport;
/**
* Creates a composite ID for the aggregate
*/
private static createId;
/**
* Calculates summary statistics from categories
*/
private static calculateSummary;
/**
* Determines compliance level based on score
*/
private static getComplianceLevel;
/**
* Gets the project key
*/
get projectKey(): ProjectKey;
/**
* Gets the repository ID
*/
get repositoryId(): GraphQLNodeId;
/**
* Gets the report type
*/
get reportType(): ReportType;
/**
* Gets the report status
*/
get status(): ComplianceReportStatus;
/**
* Gets the compliance categories
*/
get categories(): ReadonlyArray<ComplianceCategory>;
/**
* Gets the summary statistics
*/
get summary(): Readonly<ComplianceSummary>;
/**
* Gets the trend information
*/
get trend(): Readonly<ReportTrend> | null;
/**
* Gets the generation timestamp
*/
get generatedAt(): Date;
/**
* Gets the last update timestamp
*/
get lastUpdated(): Date;
/**
* Checks if the report meets compliance standards
*/
get isCompliant(): boolean;
/**
* Checks if the report has critical issues
*/
get hasCriticalIssues(): boolean;
/**
* Generates/regenerates the report
*/
generate(): void;
/**
* Completes report generation
*/
complete(): void;
/**
* Fails report generation
*
* @param reason - The reason for failure
*/
fail(reason: string): void;
/**
* Updates the report categories
*
* @param params - Category update parameters
*/
updateCategories(params: UpdateCategoriesParams): void;
/**
* Updates the report trend
*
* @param params - Trend update parameters
*/
updateTrend(params: UpdateTrendParams): void;
/**
* Compares this report with a previous report
*
* @param previous - The previous report to compare with
* @returns Trend information
*/
compareWithPrevious(previous: ComplianceReport): ReportTrend;
/**
* Reconstructs ComplianceReport from persisted data
*
* @param data - Persisted report data
* @returns A reconstructed ComplianceReport instance
*/
static fromPersistence(data: {
id: string;
projectKey: ProjectKey;
repositoryId: GraphQLNodeId;
reportType: ReportType;
status: ComplianceReportStatus;
categories: ComplianceCategory[];
summary: ComplianceSummary;
trend: ReportTrend | null;
generatedAt: Date;
lastUpdated: Date;
}): ComplianceReport;
/**
* Converts the report to a persistence-friendly format
*/
toPersistence(): {
id: string;
projectKey: ProjectKey;
repositoryId: GraphQLNodeId;
reportType: ReportType;
status: ComplianceReportStatus;
categories: ComplianceCategory[];
summary: ComplianceSummary;
trend: ReportTrend | null;
generatedAt: Date;
lastUpdated: Date;
};
}