UNPKG

@elsikora/commitizen-plugin-commitlint-ai

Version:
64 lines (61 loc) 4.41 kB
import { createContainer } from '@elsikora/cladi'; import { ConfigureLLMUseCase } from '../../application/use-case/configure-llm.use-case.js'; import { GenerateCommitMessageUseCase } from '../../application/use-case/generate-commit-message.use-case.js'; import { ManualCommitUseCase } from '../../application/use-case/manual-commit.use-case.js'; import { ValidateCommitMessageUseCase } from '../../application/use-case/validate-commit-message.use-case.js'; import { CommitlintValidatorService } from '../commit-validator/commitlint-validator.service.js'; import { GitCommitRepository } from '../git/git-commit.repository.js'; import { AnthropicLlmService } from '../llm/anthropic-llm.service.js'; import { AWSBedrockLlmService } from '../llm/aws-bedrock-llm.service.js'; import { AzureOpenAILlmService } from '../llm/azure-openai-llm.service.js'; import { GoogleLlmService } from '../llm/google-llm.service.js'; import { OllamaLlmService } from '../llm/ollama-llm.service.js'; import { OpenAILlmService } from '../llm/openai-llm.service.js'; import { CosmicConfigService } from '../service/cosmic-config.service.js'; import { NodeCommandService } from '../service/node-command.service.js'; import { NodeFileSystemService } from '../service/node-file-system.service.js'; import { PromptsCliInterface } from '../service/prompts-cli-interface.service.js'; // Service tokens const FileSystemServiceToken = Symbol("FileSystemService"); const CliInterfaceServiceToken = Symbol("CliInterfaceService"); const CommandServiceToken = Symbol("CommandService"); const ConfigServiceToken = Symbol("ConfigService"); const CommitValidatorToken = Symbol("CommitValidator"); const CommitRepositoryToken = Symbol("CommitRepository"); const LLMServicesToken = Symbol("LLMServices"); // Use case tokens const GenerateCommitMessageUseCaseToken = Symbol("GenerateCommitMessageUseCase"); const ValidateCommitMessageUseCaseToken = Symbol("ValidateCommitMessageUseCase"); const ConfigureLLMUseCaseToken = Symbol("ConfigureLLMUseCase"); const ManualCommitUseCaseToken = Symbol("ManualCommitUseCase"); /** * Create and configure the application DI container * @returns {IContainer} The configured DI container */ function createAppContainer() { const container = createContainer({}); // Register infrastructure services container.register(FileSystemServiceToken, new NodeFileSystemService()); container.register(CliInterfaceServiceToken, new PromptsCliInterface()); const cliInterface = container.get(CliInterfaceServiceToken) ?? new PromptsCliInterface(); const fileSystem = container.get(FileSystemServiceToken) ?? new NodeFileSystemService(); container.register(ConfigServiceToken, new CosmicConfigService(fileSystem)); container.register(CommandServiceToken, new NodeCommandService(cliInterface)); const commandService = container.get(CommandServiceToken) ?? new NodeCommandService(cliInterface); container.register(CommitRepositoryToken, new GitCommitRepository(commandService)); // Register LLM services const llmServices = [new OpenAILlmService(), new AnthropicLlmService(), new GoogleLlmService(), new AzureOpenAILlmService(), new AWSBedrockLlmService(), new OllamaLlmService()]; container.register(LLMServicesToken, llmServices); // Register commit validator with LLM services container.register(CommitValidatorToken, new CommitlintValidatorService(llmServices)); const validator = container.get(CommitValidatorToken) ?? new CommitlintValidatorService([]); const configService = container.get(ConfigServiceToken) ?? new CosmicConfigService(fileSystem); // Register use cases container.register(ConfigureLLMUseCaseToken, new ConfigureLLMUseCase(configService, cliInterface)); container.register(GenerateCommitMessageUseCaseToken, new GenerateCommitMessageUseCase(llmServices)); container.register(ValidateCommitMessageUseCaseToken, new ValidateCommitMessageUseCase(validator)); container.register(ManualCommitUseCaseToken, new ManualCommitUseCase(cliInterface)); return container; } export { CliInterfaceServiceToken, CommandServiceToken, CommitRepositoryToken, CommitValidatorToken, ConfigServiceToken, ConfigureLLMUseCaseToken, FileSystemServiceToken, GenerateCommitMessageUseCaseToken, LLMServicesToken, ManualCommitUseCaseToken, ValidateCommitMessageUseCaseToken, createAppContainer }; //# sourceMappingURL=container.js.map