UNPKG

@dharshansr/gitgenius

Version:

AI-powered commit message generator with enhanced features

75 lines 2.81 kB
import { z } from 'zod'; // Zod schema for configuration validation export const configSchema = z.object({ provider: z.enum(['openai', 'gemini', 'anthropic']).default('openai'), model: z.string().min(1), apiKey: z.string().nullable().optional(), maxTokens: z.number().min(1).max(4096).default(150), temperature: z.number().min(0).max(2).default(0.7), commitTypes: z.array(z.string()).min(1).default([ 'feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'perf', 'ci', 'build' ]), // Allow additional properties for extensibility aliases: z.record(z.string(), z.string()).optional(), templates: z.array(z.any()).optional(), feedback: z.array(z.any()).optional() }).passthrough(); // Allow additional unknown keys // Configuration backup schema export const configBackupSchema = z.object({ version: z.string(), timestamp: z.string(), config: configSchema }); // Validation helper function export function validateConfig(config) { const result = configSchema.safeParse(config); if (result.success) { return { valid: true }; } return { valid: false, errors: result.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`) }; } // Migration helpers export const CONFIG_VERSION = '1.2.0'; export function needsMigration(configVersion) { if (!configVersion) return true; const [major, minor] = configVersion.split('.').map(Number); const [currentMajor, currentMinor] = CONFIG_VERSION.split('.').map(Number); return major < currentMajor || (major === currentMajor && minor < currentMinor); } export function migrateConfig(config, fromVersion) { const migratedConfig = { ...config }; // Migration from versions before 1.1.0 if (!fromVersion || fromVersion < '1.1.0') { // Ensure commitTypes array exists if (!migratedConfig.commitTypes) { migratedConfig.commitTypes = [ 'feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'perf', 'ci', 'build' ]; } } // Migration from versions before 1.2.0 if (!fromVersion || fromVersion < '1.2.0') { // Add default maxTokens if missing if (!migratedConfig.maxTokens) { migratedConfig.maxTokens = 150; } // Add default temperature if missing if (!migratedConfig.temperature) { migratedConfig.temperature = 0.7; } // Ensure provider is valid if (!['openai', 'gemini', 'anthropic'].includes(migratedConfig.provider)) { migratedConfig.provider = 'openai'; } } // Set the version migratedConfig.configVersion = CONFIG_VERSION; return migratedConfig; } //# sourceMappingURL=ConfigSchema.js.map