@m3hti/commit-genie 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +430 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +31 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/generate.d.ts +10 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +313 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/generate.test.d.ts +2 -0
- package/dist/commands/generate.test.d.ts.map +1 -0
- package/dist/commands/generate.test.js +168 -0
- package/dist/commands/generate.test.js.map +1 -0
- package/dist/commands/hook.d.ts +4 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +62 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/stats.d.ts +6 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +39 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/services/aiService.d.ts +38 -0
- package/dist/services/aiService.d.ts.map +1 -0
- package/dist/services/aiService.js +187 -0
- package/dist/services/aiService.js.map +1 -0
- package/dist/services/analyzerService.d.ts +60 -0
- package/dist/services/analyzerService.d.ts.map +1 -0
- package/dist/services/analyzerService.js +832 -0
- package/dist/services/analyzerService.js.map +1 -0
- package/dist/services/analyzerService.test.d.ts +2 -0
- package/dist/services/analyzerService.test.d.ts.map +1 -0
- package/dist/services/analyzerService.test.js +323 -0
- package/dist/services/analyzerService.test.js.map +1 -0
- package/dist/services/configService.d.ts +25 -0
- package/dist/services/configService.d.ts.map +1 -0
- package/dist/services/configService.js +207 -0
- package/dist/services/configService.js.map +1 -0
- package/dist/services/configService.test.d.ts +2 -0
- package/dist/services/configService.test.d.ts.map +1 -0
- package/dist/services/configService.test.js +165 -0
- package/dist/services/configService.test.js.map +1 -0
- package/dist/services/gitService.d.ts +44 -0
- package/dist/services/gitService.d.ts.map +1 -0
- package/dist/services/gitService.js +217 -0
- package/dist/services/gitService.js.map +1 -0
- package/dist/services/gitService.test.d.ts +2 -0
- package/dist/services/gitService.test.d.ts.map +1 -0
- package/dist/services/gitService.test.js +140 -0
- package/dist/services/gitService.test.js.map +1 -0
- package/dist/services/historyService.d.ts +39 -0
- package/dist/services/historyService.d.ts.map +1 -0
- package/dist/services/historyService.js +195 -0
- package/dist/services/historyService.js.map +1 -0
- package/dist/services/historyService.test.d.ts +2 -0
- package/dist/services/historyService.test.d.ts.map +1 -0
- package/dist/services/historyService.test.js +157 -0
- package/dist/services/historyService.test.js.map +1 -0
- package/dist/services/hookService.d.ts +29 -0
- package/dist/services/hookService.d.ts.map +1 -0
- package/dist/services/hookService.js +164 -0
- package/dist/services/hookService.js.map +1 -0
- package/dist/services/statsService.d.ts +28 -0
- package/dist/services/statsService.d.ts.map +1 -0
- package/dist/services/statsService.js +204 -0
- package/dist/services/statsService.js.map +1 -0
- package/dist/types/index.d.ts +134 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/filePatterns.d.ts +5 -0
- package/dist/utils/filePatterns.d.ts.map +1 -0
- package/dist/utils/filePatterns.js +77 -0
- package/dist/utils/filePatterns.js.map +1 -0
- package/dist/utils/filePatterns.test.d.ts +2 -0
- package/dist/utils/filePatterns.test.d.ts.map +1 -0
- package/dist/utils/filePatterns.test.js +51 -0
- package/dist/utils/filePatterns.test.js.map +1 -0
- package/dist/utils/prompt.d.ts +4 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +60 -0
- package/dist/utils/prompt.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateCommand = generateCommand;
|
|
4
|
+
const gitService_1 = require("../services/gitService");
|
|
5
|
+
const analyzerService_1 = require("../services/analyzerService");
|
|
6
|
+
const prompt_1 = require("../utils/prompt");
|
|
7
|
+
async function generateCommand(options = {}) {
|
|
8
|
+
try {
|
|
9
|
+
// Check if in a git repository
|
|
10
|
+
if (!gitService_1.GitService.isGitRepository()) {
|
|
11
|
+
console.error('Error: Not a git repository');
|
|
12
|
+
console.log('Please run this command inside a git repository.');
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
// Get git status
|
|
16
|
+
const status = gitService_1.GitService.getStatus();
|
|
17
|
+
// Check if there are staged changes
|
|
18
|
+
if (!status.hasStagedChanges) {
|
|
19
|
+
console.error('Error: No staged changes found');
|
|
20
|
+
console.log('\nPlease stage your changes first using:');
|
|
21
|
+
console.log(' git add <files>');
|
|
22
|
+
console.log('\nOr stage all changes:');
|
|
23
|
+
console.log(' git add .');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
// Generate suggestions (with optional AI enhancement)
|
|
27
|
+
let suggestions;
|
|
28
|
+
if (options.ai) {
|
|
29
|
+
console.log('\nUsing AI to enhance commit message...');
|
|
30
|
+
suggestions = await analyzerService_1.AnalyzerService.generateSuggestionsWithAI(true);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
suggestions = analyzerService_1.AnalyzerService.generateMultipleSuggestions();
|
|
34
|
+
}
|
|
35
|
+
const defaultMessage = suggestions[0].message;
|
|
36
|
+
// Message-only mode for scripts and hooks (silent, just output the message)
|
|
37
|
+
if (options.messageOnly) {
|
|
38
|
+
console.log(defaultMessage.full);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Dry run mode - show detailed preview without committing
|
|
42
|
+
if (options.dryRun) {
|
|
43
|
+
displayDryRun(status, suggestions, defaultMessage);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Show what files are being analyzed
|
|
47
|
+
console.log('\nAnalyzing staged changes...\n');
|
|
48
|
+
console.log('Staged files:');
|
|
49
|
+
for (const file of status.staged) {
|
|
50
|
+
const statusSymbol = getStatusSymbol(file.status);
|
|
51
|
+
console.log(` ${statusSymbol} ${file.path}`);
|
|
52
|
+
}
|
|
53
|
+
// Get diff statistics
|
|
54
|
+
const stats = gitService_1.GitService.getDiffStats();
|
|
55
|
+
console.log(`\n${stats.filesChanged} file(s) changed, ${stats.insertions} insertion(s)(+), ${stats.deletions} deletion(s)(-)\n`);
|
|
56
|
+
// Show suggestions
|
|
57
|
+
if (suggestions.length > 1 && !options.single) {
|
|
58
|
+
// Multiple suggestions mode
|
|
59
|
+
console.log('Suggested commit messages:');
|
|
60
|
+
console.log('─'.repeat(50));
|
|
61
|
+
for (const suggestion of suggestions) {
|
|
62
|
+
console.log(`\n [${suggestion.id}] ${suggestion.label}`);
|
|
63
|
+
displayMessage(suggestion.message, ' ');
|
|
64
|
+
}
|
|
65
|
+
console.log('\n' + '─'.repeat(50));
|
|
66
|
+
// Handle commit based on options
|
|
67
|
+
if (options.commit) {
|
|
68
|
+
// Auto-commit with first suggestion
|
|
69
|
+
await commitWithMessage(defaultMessage.full);
|
|
70
|
+
}
|
|
71
|
+
else if (options.interactive !== false) {
|
|
72
|
+
// Interactive mode with selection
|
|
73
|
+
console.log('\nOptions:');
|
|
74
|
+
console.log(` [1-${suggestions.length}] Select a message`);
|
|
75
|
+
console.log(' [e] Edit and write your own');
|
|
76
|
+
console.log(' [n] Cancel\n');
|
|
77
|
+
const choice = await (0, prompt_1.prompt)('Your choice: ');
|
|
78
|
+
await handleMultipleChoice(choice, suggestions);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Non-interactive mode
|
|
82
|
+
console.log('\nTo commit with the recommended message, run:');
|
|
83
|
+
console.log(` git commit -m "${escapeForShell(defaultMessage.full)}"`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Single suggestion mode
|
|
88
|
+
console.log('Suggested commit message:');
|
|
89
|
+
console.log('─'.repeat(50));
|
|
90
|
+
displayMessage(defaultMessage, '');
|
|
91
|
+
console.log('─'.repeat(50));
|
|
92
|
+
console.log('\nBreakdown:');
|
|
93
|
+
console.log(` Type: ${defaultMessage.type}`);
|
|
94
|
+
if (defaultMessage.scope) {
|
|
95
|
+
console.log(` Scope: ${defaultMessage.scope}`);
|
|
96
|
+
}
|
|
97
|
+
console.log(` Description: ${defaultMessage.description}`);
|
|
98
|
+
if (defaultMessage.body) {
|
|
99
|
+
console.log(' Body: (see above)');
|
|
100
|
+
}
|
|
101
|
+
// Handle commit based on options
|
|
102
|
+
if (options.commit) {
|
|
103
|
+
await commitWithMessage(defaultMessage.full);
|
|
104
|
+
}
|
|
105
|
+
else if (options.interactive !== false) {
|
|
106
|
+
// Interactive mode (default)
|
|
107
|
+
console.log('\nWhat would you like to do?');
|
|
108
|
+
console.log(' [c] Commit with this message');
|
|
109
|
+
console.log(' [e] Edit the message');
|
|
110
|
+
console.log(' [n] Cancel\n');
|
|
111
|
+
const choice = await (0, prompt_1.prompt)('Your choice (c/e/n): ');
|
|
112
|
+
await handleSingleChoice(choice, defaultMessage.full);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Non-interactive mode (just show the message)
|
|
116
|
+
console.log('\nTo commit with this message, run:');
|
|
117
|
+
console.log(` git commit -m "${escapeForShell(defaultMessage.full)}"`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (error instanceof Error) {
|
|
123
|
+
console.error(`Error: ${error.message}`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.error('An unexpected error occurred');
|
|
127
|
+
}
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function getStatusSymbol(status) {
|
|
132
|
+
switch (status) {
|
|
133
|
+
case 'A':
|
|
134
|
+
return '+';
|
|
135
|
+
case 'M':
|
|
136
|
+
return '~';
|
|
137
|
+
case 'D':
|
|
138
|
+
return '-';
|
|
139
|
+
case 'R':
|
|
140
|
+
return '→';
|
|
141
|
+
default:
|
|
142
|
+
return '?';
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function displayMessage(message, indent) {
|
|
146
|
+
const lines = message.full.split('\n');
|
|
147
|
+
const subject = lines[0];
|
|
148
|
+
console.log(`${indent}${subject}`);
|
|
149
|
+
// If there's a body, display it with proper indentation
|
|
150
|
+
if (message.body) {
|
|
151
|
+
console.log('');
|
|
152
|
+
const bodyLines = message.body.split('\n');
|
|
153
|
+
for (const line of bodyLines) {
|
|
154
|
+
console.log(`${indent}${line}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function escapeForShell(message) {
|
|
159
|
+
// For multi-line messages, suggest using -F flag
|
|
160
|
+
if (message.includes('\n')) {
|
|
161
|
+
return message.split('\n')[0] + '" (use -F for full body)';
|
|
162
|
+
}
|
|
163
|
+
return message.replace(/"/g, '\\"');
|
|
164
|
+
}
|
|
165
|
+
async function commitWithMessage(message) {
|
|
166
|
+
try {
|
|
167
|
+
gitService_1.GitService.commit(message);
|
|
168
|
+
console.log('\n✓ Changes committed successfully!');
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
console.error(`\nFailed to commit: ${err instanceof Error ? err.message : err}`);
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async function handleSingleChoice(choice, message) {
|
|
176
|
+
switch (choice.toLowerCase()) {
|
|
177
|
+
case 'c':
|
|
178
|
+
case 'commit':
|
|
179
|
+
await commitWithMessage(message);
|
|
180
|
+
break;
|
|
181
|
+
case 'e':
|
|
182
|
+
case 'edit':
|
|
183
|
+
const editedMessage = await (0, prompt_1.prompt)('\nEnter your commit message: ');
|
|
184
|
+
if (editedMessage) {
|
|
185
|
+
await commitWithMessage(editedMessage);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.log('\nCommit cancelled - empty message provided.');
|
|
189
|
+
}
|
|
190
|
+
break;
|
|
191
|
+
case 'n':
|
|
192
|
+
case 'no':
|
|
193
|
+
case 'cancel':
|
|
194
|
+
console.log('\nCommit cancelled.');
|
|
195
|
+
break;
|
|
196
|
+
default:
|
|
197
|
+
console.log('\nNo action taken. To commit manually, run:');
|
|
198
|
+
console.log(` git commit -m "${escapeForShell(message)}"`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function handleMultipleChoice(choice, suggestions) {
|
|
202
|
+
const choiceLower = choice.toLowerCase();
|
|
203
|
+
// Check if it's a number selection
|
|
204
|
+
const num = parseInt(choice, 10);
|
|
205
|
+
if (!isNaN(num) && num >= 1 && num <= suggestions.length) {
|
|
206
|
+
const selected = suggestions[num - 1];
|
|
207
|
+
console.log(`\nSelected: ${selected.label}`);
|
|
208
|
+
await commitWithMessage(selected.message.full);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// Handle other choices
|
|
212
|
+
switch (choiceLower) {
|
|
213
|
+
case 'e':
|
|
214
|
+
case 'edit':
|
|
215
|
+
const editedMessage = await (0, prompt_1.prompt)('\nEnter your commit message: ');
|
|
216
|
+
if (editedMessage) {
|
|
217
|
+
await commitWithMessage(editedMessage);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
console.log('\nCommit cancelled - empty message provided.');
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
case 'n':
|
|
224
|
+
case 'no':
|
|
225
|
+
case 'cancel':
|
|
226
|
+
console.log('\nCommit cancelled.');
|
|
227
|
+
break;
|
|
228
|
+
default:
|
|
229
|
+
console.log('\nInvalid choice. No action taken.');
|
|
230
|
+
console.log('\nTo commit with the recommended message, run:');
|
|
231
|
+
console.log(` git commit -m "${escapeForShell(suggestions[0].message.full)}"`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function displayDryRun(status, suggestions, defaultMessage) {
|
|
235
|
+
const stats = gitService_1.GitService.getDiffStats();
|
|
236
|
+
console.log('\n' + '═'.repeat(60));
|
|
237
|
+
console.log(' DRY RUN - No changes will be made');
|
|
238
|
+
console.log('═'.repeat(60));
|
|
239
|
+
// Show files that would be committed
|
|
240
|
+
console.log('\n📁 Files to be committed:');
|
|
241
|
+
console.log('─'.repeat(40));
|
|
242
|
+
for (const file of status.staged) {
|
|
243
|
+
const statusSymbol = getStatusSymbol(file.status);
|
|
244
|
+
const statusLabel = getStatusLabel(file.status);
|
|
245
|
+
console.log(` ${statusSymbol} ${file.path} (${statusLabel})`);
|
|
246
|
+
}
|
|
247
|
+
console.log(`\n Total: ${stats.filesChanged} file(s), +${stats.insertions}/-${stats.deletions} lines`);
|
|
248
|
+
// Show commit message details
|
|
249
|
+
console.log('\n📝 Commit message:');
|
|
250
|
+
console.log('─'.repeat(40));
|
|
251
|
+
const lines = defaultMessage.full.split('\n');
|
|
252
|
+
for (const line of lines) {
|
|
253
|
+
console.log(` ${line}`);
|
|
254
|
+
}
|
|
255
|
+
// Show message breakdown
|
|
256
|
+
console.log('\n🔍 Breakdown:');
|
|
257
|
+
console.log('─'.repeat(40));
|
|
258
|
+
console.log(` Type: ${defaultMessage.type}`);
|
|
259
|
+
if (defaultMessage.scope) {
|
|
260
|
+
console.log(` Scope: ${defaultMessage.scope}`);
|
|
261
|
+
}
|
|
262
|
+
console.log(` Description: ${defaultMessage.description}`);
|
|
263
|
+
if (defaultMessage.isBreaking) {
|
|
264
|
+
console.log(` Breaking: Yes`);
|
|
265
|
+
}
|
|
266
|
+
if (defaultMessage.body) {
|
|
267
|
+
console.log(` Body: Yes (multi-line)`);
|
|
268
|
+
}
|
|
269
|
+
// Show alternative suggestions if available
|
|
270
|
+
if (suggestions.length > 1) {
|
|
271
|
+
console.log('\n📋 Alternative suggestions available:');
|
|
272
|
+
console.log('─'.repeat(40));
|
|
273
|
+
for (let i = 1; i < suggestions.length; i++) {
|
|
274
|
+
const s = suggestions[i];
|
|
275
|
+
const subjectLine = s.message.full.split('\n')[0];
|
|
276
|
+
console.log(` [${s.id}] ${s.label}: ${subjectLine}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Show the command that would be executed
|
|
280
|
+
console.log('\n⚡ Command that would be executed:');
|
|
281
|
+
console.log('─'.repeat(40));
|
|
282
|
+
if (defaultMessage.full.includes('\n')) {
|
|
283
|
+
console.log(' git commit -m "...(multi-line message)"');
|
|
284
|
+
console.log('\n Message content:');
|
|
285
|
+
console.log(' ┌' + '─'.repeat(38));
|
|
286
|
+
for (const line of defaultMessage.full.split('\n')) {
|
|
287
|
+
console.log(` │ ${line}`);
|
|
288
|
+
}
|
|
289
|
+
console.log(' └' + '─'.repeat(38));
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
console.log(` git commit -m "${escapeForShell(defaultMessage.full)}"`);
|
|
293
|
+
}
|
|
294
|
+
console.log('\n' + '═'.repeat(60));
|
|
295
|
+
console.log(' To commit, run: commit-genie -c');
|
|
296
|
+
console.log(' Or interactively: commit-genie');
|
|
297
|
+
console.log('═'.repeat(60) + '\n');
|
|
298
|
+
}
|
|
299
|
+
function getStatusLabel(status) {
|
|
300
|
+
switch (status) {
|
|
301
|
+
case 'A':
|
|
302
|
+
return 'added';
|
|
303
|
+
case 'M':
|
|
304
|
+
return 'modified';
|
|
305
|
+
case 'D':
|
|
306
|
+
return 'deleted';
|
|
307
|
+
case 'R':
|
|
308
|
+
return 'renamed';
|
|
309
|
+
default:
|
|
310
|
+
return 'unknown';
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.test.d.ts","sourceRoot":"","sources":["../../src/commands/generate.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const gitService_1 = require("../services/gitService");
|
|
37
|
+
const analyzerService_1 = require("../services/analyzerService");
|
|
38
|
+
// Mock dependencies
|
|
39
|
+
jest.mock('../services/gitService');
|
|
40
|
+
jest.mock('../services/analyzerService');
|
|
41
|
+
jest.mock('../utils/prompt', () => ({
|
|
42
|
+
prompt: jest.fn(),
|
|
43
|
+
}));
|
|
44
|
+
const mockedGitService = gitService_1.GitService;
|
|
45
|
+
const mockedAnalyzerService = analyzerService_1.AnalyzerService;
|
|
46
|
+
describe('generate command', () => {
|
|
47
|
+
let consoleLogSpy;
|
|
48
|
+
let consoleErrorSpy;
|
|
49
|
+
let processExitSpy;
|
|
50
|
+
beforeEach(() => {
|
|
51
|
+
jest.clearAllMocks();
|
|
52
|
+
consoleLogSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
53
|
+
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
54
|
+
processExitSpy = jest.spyOn(process, 'exit').mockImplementation(() => undefined);
|
|
55
|
+
// Default mocks
|
|
56
|
+
mockedGitService.isGitRepository.mockReturnValue(true);
|
|
57
|
+
mockedGitService.getStatus.mockReturnValue({
|
|
58
|
+
hasStagedChanges: true,
|
|
59
|
+
staged: [{ status: 'A', path: 'src/newFile.ts' }],
|
|
60
|
+
unstaged: [],
|
|
61
|
+
});
|
|
62
|
+
mockedGitService.getDiffStats.mockReturnValue({
|
|
63
|
+
filesChanged: 1,
|
|
64
|
+
insertions: 10,
|
|
65
|
+
deletions: 0,
|
|
66
|
+
});
|
|
67
|
+
mockedAnalyzerService.generateMultipleSuggestions.mockReturnValue([
|
|
68
|
+
{
|
|
69
|
+
id: 1,
|
|
70
|
+
label: 'Recommended',
|
|
71
|
+
message: {
|
|
72
|
+
type: 'feat',
|
|
73
|
+
description: 'add newFile.ts',
|
|
74
|
+
full: '✨ feat: add newFile.ts',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
]);
|
|
78
|
+
});
|
|
79
|
+
afterEach(() => {
|
|
80
|
+
consoleLogSpy.mockRestore();
|
|
81
|
+
consoleErrorSpy.mockRestore();
|
|
82
|
+
processExitSpy.mockRestore();
|
|
83
|
+
});
|
|
84
|
+
describe('GenerateOptions interface', () => {
|
|
85
|
+
it('should have dryRun as optional property', () => {
|
|
86
|
+
const options = {
|
|
87
|
+
dryRun: true,
|
|
88
|
+
};
|
|
89
|
+
expect(options.dryRun).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
it('should have all optional properties', () => {
|
|
92
|
+
const options = {};
|
|
93
|
+
expect(options.commit).toBeUndefined();
|
|
94
|
+
expect(options.dryRun).toBeUndefined();
|
|
95
|
+
expect(options.interactive).toBeUndefined();
|
|
96
|
+
expect(options.messageOnly).toBeUndefined();
|
|
97
|
+
expect(options.single).toBeUndefined();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('dry run mode', () => {
|
|
101
|
+
it('should display DRY RUN header', async () => {
|
|
102
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
103
|
+
await generateCommand({ dryRun: true });
|
|
104
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('DRY RUN'));
|
|
105
|
+
});
|
|
106
|
+
it('should display files to be committed', async () => {
|
|
107
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
108
|
+
await generateCommand({ dryRun: true });
|
|
109
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Files to be committed'));
|
|
110
|
+
});
|
|
111
|
+
it('should display commit message', async () => {
|
|
112
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
113
|
+
await generateCommand({ dryRun: true });
|
|
114
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Commit message'));
|
|
115
|
+
});
|
|
116
|
+
it('should not call GitService.commit in dry run mode', async () => {
|
|
117
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
118
|
+
await generateCommand({ dryRun: true });
|
|
119
|
+
expect(mockedGitService.commit).not.toHaveBeenCalled();
|
|
120
|
+
});
|
|
121
|
+
it('should display next steps after dry run', async () => {
|
|
122
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
123
|
+
await generateCommand({ dryRun: true });
|
|
124
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('commit-genie -c'));
|
|
125
|
+
});
|
|
126
|
+
it('should show message breakdown in dry run', async () => {
|
|
127
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
128
|
+
await generateCommand({ dryRun: true });
|
|
129
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Breakdown'));
|
|
130
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Type:'));
|
|
131
|
+
});
|
|
132
|
+
it('should show command that would be executed', async () => {
|
|
133
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
134
|
+
await generateCommand({ dryRun: true });
|
|
135
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Command that would be executed'));
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('error handling', () => {
|
|
139
|
+
it('should exit when not in git repository', async () => {
|
|
140
|
+
mockedGitService.isGitRepository.mockReturnValue(false);
|
|
141
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
142
|
+
await generateCommand({});
|
|
143
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith('Error: Not a git repository');
|
|
144
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
145
|
+
});
|
|
146
|
+
it('should exit when no staged changes', async () => {
|
|
147
|
+
mockedGitService.getStatus.mockReturnValue({
|
|
148
|
+
hasStagedChanges: false,
|
|
149
|
+
staged: [],
|
|
150
|
+
unstaged: [],
|
|
151
|
+
});
|
|
152
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
153
|
+
await generateCommand({});
|
|
154
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith('Error: No staged changes found');
|
|
155
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('message-only mode', () => {
|
|
159
|
+
it('should output only the commit message', async () => {
|
|
160
|
+
const { generateCommand } = await Promise.resolve().then(() => __importStar(require('./generate')));
|
|
161
|
+
await generateCommand({ messageOnly: true });
|
|
162
|
+
expect(consoleLogSpy).toHaveBeenCalledWith('✨ feat: add newFile.ts');
|
|
163
|
+
// Should only be called once with just the message
|
|
164
|
+
expect(consoleLogSpy).toHaveBeenCalledTimes(1);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=generate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.test.js","sourceRoot":"","sources":["../../src/commands/generate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,SAoBjC;AAED,wBAAgB,oBAAoB,SAkBnC;AAED,wBAAgB,iBAAiB,SAkBhC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hookInstallCommand = hookInstallCommand;
|
|
4
|
+
exports.hookUninstallCommand = hookUninstallCommand;
|
|
5
|
+
exports.hookStatusCommand = hookStatusCommand;
|
|
6
|
+
const hookService_1 = require("../services/hookService");
|
|
7
|
+
const gitService_1 = require("../services/gitService");
|
|
8
|
+
function hookInstallCommand() {
|
|
9
|
+
// Check if in a git repository
|
|
10
|
+
if (!gitService_1.GitService.isGitRepository()) {
|
|
11
|
+
console.error('Error: Not a git repository');
|
|
12
|
+
console.log('Please run this command inside a git repository.');
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
console.log('Installing CommitGenie git hook...\n');
|
|
16
|
+
const result = hookService_1.HookService.install();
|
|
17
|
+
if (result.success) {
|
|
18
|
+
console.log(`✓ ${result.message}`);
|
|
19
|
+
console.log('\nThe hook will automatically suggest commit messages when you run:');
|
|
20
|
+
console.log(' git commit');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.error(`✗ ${result.message}`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function hookUninstallCommand() {
|
|
28
|
+
// Check if in a git repository
|
|
29
|
+
if (!gitService_1.GitService.isGitRepository()) {
|
|
30
|
+
console.error('Error: Not a git repository');
|
|
31
|
+
console.log('Please run this command inside a git repository.');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
console.log('Uninstalling CommitGenie git hook...\n');
|
|
35
|
+
const result = hookService_1.HookService.uninstall();
|
|
36
|
+
if (result.success) {
|
|
37
|
+
console.log(`✓ ${result.message}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.error(`✗ ${result.message}`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function hookStatusCommand() {
|
|
45
|
+
// Check if in a git repository
|
|
46
|
+
if (!gitService_1.GitService.isGitRepository()) {
|
|
47
|
+
console.error('Error: Not a git repository');
|
|
48
|
+
console.log('Please run this command inside a git repository.');
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
const isInstalled = hookService_1.HookService.isInstalled();
|
|
52
|
+
if (isInstalled) {
|
|
53
|
+
console.log('✓ CommitGenie hook is installed');
|
|
54
|
+
console.log(` Location: ${hookService_1.HookService.getHookPath()}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.log('✗ CommitGenie hook is not installed');
|
|
58
|
+
console.log('\nTo install, run:');
|
|
59
|
+
console.log(' commit-genie hook install');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":";;AAGA,gDAoBC;AAED,oDAkBC;AAED,8CAkBC;AA/DD,yDAAsD;AACtD,uDAAoD;AAEpD,SAAgB,kBAAkB;IAChC,+BAA+B;IAC/B,IAAI,CAAC,uBAAU,CAAC,eAAe,EAAE,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,yBAAW,CAAC,OAAO,EAAE,CAAC;IAErC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB;IAClC,+BAA+B;IAC/B,IAAI,CAAC,uBAAU,CAAC,eAAe,EAAE,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,yBAAW,CAAC,SAAS,EAAE,CAAC;IAEvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,+BAA+B;IAC/B,IAAI,CAAC,uBAAU,CAAC,eAAe,EAAE,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,yBAAW,CAAC,WAAW,EAAE,CAAC;IAE9C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,yBAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,YAAiB,QAkCtD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.statsCommand = statsCommand;
|
|
4
|
+
const gitService_1 = require("../services/gitService");
|
|
5
|
+
const statsService_1 = require("../services/statsService");
|
|
6
|
+
function statsCommand(options = {}) {
|
|
7
|
+
try {
|
|
8
|
+
// Check if in a git repository
|
|
9
|
+
if (!gitService_1.GitService.isGitRepository()) {
|
|
10
|
+
console.error('Error: Not a git repository');
|
|
11
|
+
console.log('Please run this command inside a git repository.');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const commitCount = options.count || 100;
|
|
15
|
+
console.log(`\nAnalyzing last ${commitCount} commits...`);
|
|
16
|
+
const stats = statsService_1.StatsService.getCommitStats(commitCount);
|
|
17
|
+
if (stats.totalCommits === 0) {
|
|
18
|
+
console.log('\nNo commits found in this repository.');
|
|
19
|
+
console.log('Make some commits first to see statistics.');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (options.json) {
|
|
23
|
+
console.log(JSON.stringify(stats, null, 2));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log(statsService_1.StatsService.formatStats(stats));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error instanceof Error) {
|
|
31
|
+
console.error(`Error: ${error.message}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.error('An unexpected error occurred');
|
|
35
|
+
}
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":";;AAQA,oCAkCC;AA1CD,uDAAoD;AACpD,2DAAwD;AAOxD,SAAgB,YAAY,CAAC,UAAwB,EAAE;IACrD,IAAI,CAAC;QACH,+BAA+B;QAC/B,IAAI,CAAC,uBAAU,CAAC,eAAe,EAAE,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;QAEzC,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,aAAa,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,2BAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEvD,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,2BAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|