UNPKG

deepsource-mcp-server

Version:
179 lines (178 loc) 5.04 kB
/** * @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; }; }