@elsikora/commitizen-plugin-commitlint-ai
Version:
AI-powered Commitizen adapter with Commitlint integration
64 lines (61 loc) • 4.41 kB
JavaScript
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