@mehmetsagir/git-ai 0.0.3 ā 0.0.5
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/README.md +8 -0
- package/dist/commit-processor.d.ts +1 -1
- package/dist/commit-processor.d.ts.map +1 -1
- package/dist/commit-processor.js +36 -19
- package/dist/commit-processor.js.map +1 -1
- package/dist/commit.d.ts.map +1 -1
- package/dist/commit.js +72 -60
- package/dist/commit.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -9
- package/dist/config.js.map +1 -1
- package/dist/git.d.ts +2 -2
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +48 -41
- package/dist/git.js.map +1 -1
- package/dist/index.js +41 -20
- package/dist/index.js.map +1 -1
- package/dist/openai.d.ts.map +1 -1
- package/dist/openai.js +7 -6
- package/dist/openai.js.map +1 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +8 -34
- package/dist/setup.js.map +1 -1
- package/dist/update.d.ts +9 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +114 -0
- package/dist/update.js.map +1 -0
- package/dist/user-management.d.ts.map +1 -1
- package/dist/user-management.js +8 -58
- package/dist/user-management.js.map +1 -1
- package/dist/utils/errors.d.ts +12 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +26 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/validation.d.ts +24 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +81 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +3 -2
package/dist/update.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.checkAndUpdate = checkAndUpdate;
|
|
40
|
+
exports.checkForUpdates = checkForUpdates;
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const child_process_1 = require("child_process");
|
|
43
|
+
const package_json_1 = __importDefault(require("../package.json"));
|
|
44
|
+
const errors_1 = require("./utils/errors");
|
|
45
|
+
/**
|
|
46
|
+
* Check for updates and update the package
|
|
47
|
+
*/
|
|
48
|
+
async function checkAndUpdate() {
|
|
49
|
+
console.log(chalk_1.default.blue.bold('\nš Checking for updates...\n'));
|
|
50
|
+
try {
|
|
51
|
+
// Check latest version from npm
|
|
52
|
+
const latestVersion = (0, child_process_1.execSync)(`npm view @mehmetsagir/git-ai version`, { encoding: 'utf-8' }).trim();
|
|
53
|
+
const currentVersion = package_json_1.default.version;
|
|
54
|
+
if (latestVersion === currentVersion) {
|
|
55
|
+
console.log(chalk_1.default.green(`ā You are using the latest version (${currentVersion})\n`));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log(chalk_1.default.yellow(`Current version: ${currentVersion}`));
|
|
59
|
+
console.log(chalk_1.default.yellow(`Latest version: ${latestVersion}\n`));
|
|
60
|
+
const { default: inquirer } = await Promise.resolve().then(() => __importStar(require('inquirer')));
|
|
61
|
+
const { confirm } = await inquirer.prompt([
|
|
62
|
+
{
|
|
63
|
+
type: 'confirm',
|
|
64
|
+
name: 'confirm',
|
|
65
|
+
message: `Would you like to update to version ${latestVersion}?`,
|
|
66
|
+
default: true
|
|
67
|
+
}
|
|
68
|
+
]);
|
|
69
|
+
if (!confirm) {
|
|
70
|
+
console.log(chalk_1.default.yellow('ā Update cancelled.\n'));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
console.log(chalk_1.default.blue('\nš¦ Updating package...\n'));
|
|
74
|
+
try {
|
|
75
|
+
// Update globally installed package
|
|
76
|
+
(0, child_process_1.execSync)('npm install -g @mehmetsagir/git-ai@latest', {
|
|
77
|
+
stdio: 'inherit'
|
|
78
|
+
});
|
|
79
|
+
console.log(chalk_1.default.green(`\nā Successfully updated to version ${latestVersion}!\n`));
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.log(chalk_1.default.red('\nā Update failed. Please run manually:\n'));
|
|
83
|
+
console.log(chalk_1.default.cyan(' npm install -g @mehmetsagir/git-ai@latest\n'));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.log(chalk_1.default.red(`ā Error checking for updates: ${(0, errors_1.getErrorMessage)(error)}\n`));
|
|
88
|
+
console.log(chalk_1.default.yellow('You can manually update with:\n'));
|
|
89
|
+
console.log(chalk_1.default.cyan(' npm install -g @mehmetsagir/git-ai@latest\n'));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check for updates silently (for update-notifier)
|
|
94
|
+
*/
|
|
95
|
+
function checkForUpdates() {
|
|
96
|
+
try {
|
|
97
|
+
// Use require to avoid TypeScript issues with update-notifier
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
99
|
+
const updateNotifier = require('update-notifier');
|
|
100
|
+
const notifier = updateNotifier({
|
|
101
|
+
pkg: package_json_1.default,
|
|
102
|
+
updateCheckInterval: 1000 * 60 * 60 * 24 // Check once per day
|
|
103
|
+
});
|
|
104
|
+
if (notifier.update) {
|
|
105
|
+
notifier.notify({
|
|
106
|
+
message: `Update available: ${notifier.update.current} ā ${notifier.update.latest}\nRun 'git-ai --update' to update.`
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
// Silently fail if update-notifier is not available
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-management.d.ts","sourceRoot":"","sources":["../src/user-management.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"user-management.d.ts","sourceRoot":"","sources":["../src/user-management.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAuClG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAsGnG"}
|
package/dist/user-management.js
CHANGED
|
@@ -41,6 +41,7 @@ exports.addMoreGitUsers = addMoreGitUsers;
|
|
|
41
41
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
42
|
const chalk_1 = __importDefault(require("chalk"));
|
|
43
43
|
const config = __importStar(require("./config"));
|
|
44
|
+
const validation_1 = require("./utils/validation");
|
|
44
45
|
/**
|
|
45
46
|
* Add shortcuts to each user profile
|
|
46
47
|
*/
|
|
@@ -63,25 +64,10 @@ async function addShortcutsToProfiles(profiles) {
|
|
|
63
64
|
type: 'input',
|
|
64
65
|
name: 'shortcutKey',
|
|
65
66
|
message: 'Enter shortcut key (e.g., g, my, work, personal) or "q" to skip:',
|
|
66
|
-
validate: (input) =>
|
|
67
|
-
const key = input.trim().toLowerCase();
|
|
68
|
-
if (key === 'q') {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
if (!key || key.length === 0) {
|
|
72
|
-
return 'Shortcut key is required!';
|
|
73
|
-
}
|
|
74
|
-
if (usedShortcuts.has(key)) {
|
|
75
|
-
return 'This shortcut is already in use!';
|
|
76
|
-
}
|
|
77
|
-
if (key.includes(' ')) {
|
|
78
|
-
return 'Shortcut cannot contain spaces!';
|
|
79
|
-
}
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
67
|
+
validate: (input) => (0, validation_1.validateShortcut)(input, usedShortcuts)
|
|
82
68
|
}
|
|
83
69
|
]);
|
|
84
|
-
if (
|
|
70
|
+
if (!(0, validation_1.isCancellation)(shortcutKey)) {
|
|
85
71
|
shortcut = shortcutKey.trim().toLowerCase();
|
|
86
72
|
usedShortcuts.add(shortcut);
|
|
87
73
|
console.log(chalk_1.default.green(`ā Shortcut added: ${shortcut} ā ${profile.label}\n`));
|
|
@@ -106,37 +92,16 @@ async function addMoreGitUsers(existingProfiles) {
|
|
|
106
92
|
type: 'input',
|
|
107
93
|
name: 'name',
|
|
108
94
|
message: 'Git user name (or "q" to cancel):',
|
|
109
|
-
validate:
|
|
110
|
-
const trimmed = input.trim();
|
|
111
|
-
if (trimmed.toLowerCase() === 'q') {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
return trimmed.length > 0 || 'Name is required!';
|
|
115
|
-
}
|
|
95
|
+
validate: validation_1.validateUserName
|
|
116
96
|
},
|
|
117
97
|
{
|
|
118
98
|
type: 'input',
|
|
119
99
|
name: 'email',
|
|
120
100
|
message: 'Git user email (or "q" to cancel):',
|
|
121
|
-
validate: (input) =>
|
|
122
|
-
const trimmed = input.trim();
|
|
123
|
-
if (trimmed.toLowerCase() === 'q') {
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
if (!trimmed || trimmed.length === 0) {
|
|
127
|
-
return 'Email is required!';
|
|
128
|
-
}
|
|
129
|
-
if (!trimmed.includes('@')) {
|
|
130
|
-
return 'Please enter a valid email address!';
|
|
131
|
-
}
|
|
132
|
-
if (newProfiles.some(p => p.email === trimmed)) {
|
|
133
|
-
return 'This email is already added!';
|
|
134
|
-
}
|
|
135
|
-
return true;
|
|
136
|
-
}
|
|
101
|
+
validate: (input) => (0, validation_1.validateUserEmail)(input, newProfiles.map(p => p.email))
|
|
137
102
|
}
|
|
138
103
|
]);
|
|
139
|
-
if (
|
|
104
|
+
if ((0, validation_1.isCancellation)(name) || (0, validation_1.isCancellation)(email)) {
|
|
140
105
|
config.setGitUsers(newProfiles);
|
|
141
106
|
console.log(chalk_1.default.yellow('ā User addition cancelled. Continuing with setup...\n'));
|
|
142
107
|
break;
|
|
@@ -178,25 +143,10 @@ async function addMoreGitUsers(existingProfiles) {
|
|
|
178
143
|
type: 'input',
|
|
179
144
|
name: 'shortcutKey',
|
|
180
145
|
message: 'Enter shortcut key (e.g., g, my, work, personal) or "q" to skip:',
|
|
181
|
-
validate: (input) =>
|
|
182
|
-
const key = input.trim().toLowerCase();
|
|
183
|
-
if (key === 'q') {
|
|
184
|
-
return true;
|
|
185
|
-
}
|
|
186
|
-
if (!key || key.length === 0) {
|
|
187
|
-
return 'Shortcut key is required!';
|
|
188
|
-
}
|
|
189
|
-
if (usedShortcuts.has(key)) {
|
|
190
|
-
return 'This shortcut is already in use!';
|
|
191
|
-
}
|
|
192
|
-
if (key.includes(' ')) {
|
|
193
|
-
return 'Shortcut cannot contain spaces!';
|
|
194
|
-
}
|
|
195
|
-
return true;
|
|
196
|
-
}
|
|
146
|
+
validate: (input) => (0, validation_1.validateShortcut)(input, usedShortcuts)
|
|
197
147
|
}
|
|
198
148
|
]);
|
|
199
|
-
if (
|
|
149
|
+
if (!(0, validation_1.isCancellation)(shortcutKey)) {
|
|
200
150
|
newProfile.shortcut = shortcutKey.trim().toLowerCase();
|
|
201
151
|
usedShortcuts.add(newProfile.shortcut);
|
|
202
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-management.js","sourceRoot":"","sources":["../src/user-management.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"user-management.js","sourceRoot":"","sources":["../src/user-management.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Safely convert unknown error to Error instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function toError(error: unknown): Error;
|
|
8
|
+
/**
|
|
9
|
+
* Extract error message from unknown error
|
|
10
|
+
*/
|
|
11
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
12
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAQ7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Error handling utilities
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.toError = toError;
|
|
7
|
+
exports.getErrorMessage = getErrorMessage;
|
|
8
|
+
/**
|
|
9
|
+
* Safely convert unknown error to Error instance
|
|
10
|
+
*/
|
|
11
|
+
function toError(error) {
|
|
12
|
+
if (error instanceof Error) {
|
|
13
|
+
return error;
|
|
14
|
+
}
|
|
15
|
+
if (typeof error === 'string') {
|
|
16
|
+
return new Error(error);
|
|
17
|
+
}
|
|
18
|
+
return new Error('Unknown error occurred');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract error message from unknown error
|
|
22
|
+
*/
|
|
23
|
+
function getErrorMessage(error) {
|
|
24
|
+
return toError(error).message;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAKH,0BAQC;AAKD,0CAEC;AAlBD;;GAEG;AACH,SAAgB,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation utilities for user input
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Validate OpenAI API key format
|
|
6
|
+
*/
|
|
7
|
+
export declare function validateOpenAIKey(input: string): string | true;
|
|
8
|
+
/**
|
|
9
|
+
* Validate git user name (allows "q" to cancel)
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateUserName(input: string): string | true;
|
|
12
|
+
/**
|
|
13
|
+
* Validate git user email (allows "q" to cancel)
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateUserEmail(input: string, existingEmails?: string[]): string | true;
|
|
16
|
+
/**
|
|
17
|
+
* Validate shortcut key
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateShortcut(input: string, usedShortcuts: Set<string>): string | true;
|
|
20
|
+
/**
|
|
21
|
+
* Check if input is cancellation ("q")
|
|
22
|
+
*/
|
|
23
|
+
export declare function isCancellation(input: string): boolean;
|
|
24
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,MAAM,EAAO,GAC5B,MAAM,GAAG,IAAI,CAef;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,MAAM,GAAG,IAAI,CAef;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validation utilities for user input
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateOpenAIKey = validateOpenAIKey;
|
|
7
|
+
exports.validateUserName = validateUserName;
|
|
8
|
+
exports.validateUserEmail = validateUserEmail;
|
|
9
|
+
exports.validateShortcut = validateShortcut;
|
|
10
|
+
exports.isCancellation = isCancellation;
|
|
11
|
+
/**
|
|
12
|
+
* Validate OpenAI API key format
|
|
13
|
+
*/
|
|
14
|
+
function validateOpenAIKey(input) {
|
|
15
|
+
const trimmed = input.trim();
|
|
16
|
+
if (trimmed.length === 0) {
|
|
17
|
+
return "OpenAI API Key is required!";
|
|
18
|
+
}
|
|
19
|
+
if (!trimmed.startsWith("sk-")) {
|
|
20
|
+
return 'OpenAI API Key must start with "sk-"!';
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate git user name (allows "q" to cancel)
|
|
26
|
+
*/
|
|
27
|
+
function validateUserName(input) {
|
|
28
|
+
const trimmed = input.trim();
|
|
29
|
+
if (trimmed.toLowerCase() === "q") {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (trimmed.length === 0) {
|
|
33
|
+
return "Name is required!";
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate git user email (allows "q" to cancel)
|
|
39
|
+
*/
|
|
40
|
+
function validateUserEmail(input, existingEmails = []) {
|
|
41
|
+
const trimmed = input.trim();
|
|
42
|
+
if (trimmed.toLowerCase() === "q") {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (trimmed.length === 0) {
|
|
46
|
+
return "Email is required!";
|
|
47
|
+
}
|
|
48
|
+
if (!trimmed.includes("@")) {
|
|
49
|
+
return "Please enter a valid email address!";
|
|
50
|
+
}
|
|
51
|
+
if (existingEmails.includes(trimmed)) {
|
|
52
|
+
return "This email is already added!";
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validate shortcut key
|
|
58
|
+
*/
|
|
59
|
+
function validateShortcut(input, usedShortcuts) {
|
|
60
|
+
const key = input.trim().toLowerCase();
|
|
61
|
+
if (key === "q") {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
if (key.length === 0) {
|
|
65
|
+
return "Shortcut key is required!";
|
|
66
|
+
}
|
|
67
|
+
if (usedShortcuts.has(key)) {
|
|
68
|
+
return "This shortcut is already in use!";
|
|
69
|
+
}
|
|
70
|
+
if (key.includes(" ")) {
|
|
71
|
+
return "Shortcut cannot contain spaces!";
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if input is cancellation ("q")
|
|
77
|
+
*/
|
|
78
|
+
function isCancellation(input) {
|
|
79
|
+
return input.trim().toLowerCase() === "q";
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAKH,8CASC;AAKD,4CASC;AAKD,8CAkBC;AAKD,4CAkBC;AAKD,wCAEC;AA/ED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,uCAAuC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,KAAa,EACb,iBAA2B,EAAE;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IACD,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,KAAa,EACb,aAA0B;IAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mehmetsagir/git-ai",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "AI-powered git commit tool that analyzes diffs and creates conventional commit messages",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
"inquirer": "^8.2.6",
|
|
34
34
|
"openai": "^4.20.1",
|
|
35
35
|
"ora": "^5.4.1",
|
|
36
|
-
"simple-git": "^3.20.0"
|
|
36
|
+
"simple-git": "^3.20.0",
|
|
37
|
+
"update-notifier": "^7.0.0"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
40
|
"@types/inquirer": "^8.2.10",
|