deepsource-mcp-server
Version:
Model Context Protocol server for DeepSource
113 lines (112 loc) • 3.98 kB
TypeScript
/**
* @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;