UNPKG

deepsource-mcp-server

Version:
113 lines (112 loc) 3.98 kB
/** * @fileoverview Repository factory for dependency injection * * This factory provides a centralized way to create repository instances * with their required dependencies, following the dependency injection pattern. */ import { DeepSourceClient } from '../../deepsource.js'; import { ProjectsClient } from '../../client/projects-client.js'; import { IProjectRepository } from '../../domain/aggregates/project/project.repository.js'; import { IAnalysisRunRepository } from '../../domain/aggregates/analysis-run/analysis-run.repository.js'; import { IQualityMetricsRepository } from '../../domain/aggregates/quality-metrics/quality-metrics.repository.js'; import { IComplianceReportRepository } from '../../domain/aggregates/compliance-report/compliance-report.repository.js'; /** * Configuration for repository creation */ export interface RepositoryConfig { apiKey: string; baseUrl?: string; } /** * Repository instances container */ export interface RepositoryInstances { projectRepository: IProjectRepository; analysisRunRepository: IAnalysisRunRepository; qualityMetricsRepository: IQualityMetricsRepository; complianceReportRepository: IComplianceReportRepository; } /** * Factory for creating repository instances with dependency injection * * This factory ensures that all repositories are created with the proper * dependencies and configuration. It provides a single point of configuration * for all repository instances. * * @example * ```typescript * const factory = new RepositoryFactory({ apiKey: 'your-api-key' }); * const repositories = factory.createRepositories(); * * // Use repositories * const project = await repositories.projectRepository.findByKey(projectKey); * ``` */ export declare class RepositoryFactory { private readonly config; private cachedInstances; constructor(config: RepositoryConfig); /** * Creates all repository instances * * This method creates instances of all repositories with their required * dependencies. The instances are cached for subsequent calls. * * @returns Container with all repository instances */ createRepositories(): RepositoryInstances; /** * Creates a DeepSource client instance */ private createDeepSourceClient; /** * Creates a Projects client instance */ private createProjectsClient; /** * Creates a Project repository instance */ createProjectRepository(client?: ProjectsClient): IProjectRepository; /** * Creates an AnalysisRun repository instance */ createAnalysisRunRepository(client?: DeepSourceClient): IAnalysisRunRepository; /** * Creates a QualityMetrics repository instance */ createQualityMetricsRepository(client?: DeepSourceClient): IQualityMetricsRepository; /** * Creates a ComplianceReport repository instance */ createComplianceReportRepository(client?: DeepSourceClient): IComplianceReportRepository; /** * Clears cached instances * * This method is useful for testing or when you need to force * recreation of repository instances. */ clearCache(): void; /** * Gets the current configuration */ getConfig(): Readonly<RepositoryConfig>; } /** * Creates a repository factory with the given configuration * * This is a convenience function for creating a factory instance. * * @param config - Repository configuration * @returns A new repository factory instance */ export declare function createRepositoryFactory(config: RepositoryConfig): RepositoryFactory; /** * Creates all repositories with the given configuration * * This is a convenience function that creates a factory and immediately * returns all repository instances. * * @param config - Repository configuration * @returns Container with all repository instances */ export declare function createRepositories(config: RepositoryConfig): RepositoryInstances;