@ridiormf/version-control 1.1.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.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +708 -0
  3. package/bin/smart-commit.js +201 -0
  4. package/bin/version-control.js +4 -0
  5. package/dist/analyzer.d.ts +7 -0
  6. package/dist/analyzer.d.ts.map +1 -0
  7. package/dist/analyzer.js +109 -0
  8. package/dist/analyzer.js.map +1 -0
  9. package/dist/changelog.d.ts +49 -0
  10. package/dist/changelog.d.ts.map +1 -0
  11. package/dist/changelog.js +219 -0
  12. package/dist/changelog.js.map +1 -0
  13. package/dist/colors.d.ts +6 -0
  14. package/dist/colors.d.ts.map +1 -0
  15. package/dist/colors.js +16 -0
  16. package/dist/colors.js.map +1 -0
  17. package/dist/commitGenerator.d.ts +27 -0
  18. package/dist/commitGenerator.d.ts.map +1 -0
  19. package/dist/commitGenerator.js +272 -0
  20. package/dist/commitGenerator.js.map +1 -0
  21. package/dist/config.d.ts +36 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +116 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/git.d.ts +7 -0
  26. package/dist/git.d.ts.map +1 -0
  27. package/dist/git.js +18 -0
  28. package/dist/git.js.map +1 -0
  29. package/dist/gitCommands.d.ts +6 -0
  30. package/dist/gitCommands.d.ts.map +1 -0
  31. package/dist/gitCommands.js +55 -0
  32. package/dist/gitCommands.js.map +1 -0
  33. package/dist/i18n.d.ts +15 -0
  34. package/dist/i18n.d.ts.map +1 -0
  35. package/dist/i18n.js +452 -0
  36. package/dist/i18n.js.map +1 -0
  37. package/dist/index.d.ts +16 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +221 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/readline.d.ts +19 -0
  42. package/dist/readline.d.ts.map +1 -0
  43. package/dist/readline.js +129 -0
  44. package/dist/readline.js.map +1 -0
  45. package/dist/types.d.ts +28 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +6 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/updateChecker.d.ts +5 -0
  50. package/dist/updateChecker.d.ts.map +1 -0
  51. package/dist/updateChecker.js +117 -0
  52. package/dist/updateChecker.js.map +1 -0
  53. package/dist/updater.d.ts +22 -0
  54. package/dist/updater.d.ts.map +1 -0
  55. package/dist/updater.js +170 -0
  56. package/dist/updater.js.map +1 -0
  57. package/dist/version.d.ts +14 -0
  58. package/dist/version.d.ts.map +1 -0
  59. package/dist/version.js +69 -0
  60. package/dist/version.js.map +1 -0
  61. package/package.json +61 -0
package/dist/index.js ADDED
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Version Control System - Main CLI
5
+ * @version 1.0.0
6
+ *
7
+ * Intelligent version control system that analyzes Git commits
8
+ * and automates semantic versioning (SemVer).
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getCurrentVersion = exports.bumpVersion = exports.analyzeChanges = void 0;
12
+ exports.main = main;
13
+ const colors_1 = require("./colors");
14
+ const git_1 = require("./git");
15
+ const version_1 = require("./version");
16
+ Object.defineProperty(exports, "getCurrentVersion", { enumerable: true, get: function () { return version_1.getCurrentVersion; } });
17
+ Object.defineProperty(exports, "bumpVersion", { enumerable: true, get: function () { return version_1.bumpVersion; } });
18
+ const analyzer_1 = require("./analyzer");
19
+ Object.defineProperty(exports, "analyzeChanges", { enumerable: true, get: function () { return analyzer_1.analyzeChanges; } });
20
+ const updater_1 = require("./updater");
21
+ const readline_1 = require("./readline");
22
+ const gitCommands_1 = require("./gitCommands");
23
+ const updateChecker_1 = require("./updateChecker");
24
+ const i18n_1 = require("./i18n");
25
+ const config_1 = require("./config");
26
+ /**
27
+ * Show language info
28
+ */
29
+ function showLanguageInfo() {
30
+ const source = i18n_1.isLanguageConfigured
31
+ ? (0, i18n_1.t)("configuredManually")
32
+ : (0, i18n_1.t)("detectedFromSystem");
33
+ console.log(`${colors_1.colors.cyan}ℹ${colors_1.colors.reset} ${(0, i18n_1.t)("currentLanguageIs")} ${colors_1.colors.bold}${i18n_1.currentLanguage.toUpperCase()}${colors_1.colors.reset} (${source})`);
34
+ console.log(` ${(0, i18n_1.t)("toChangeLanguage")} ${colors_1.colors.cyan}version-control config --lang <code>${colors_1.colors.reset}`);
35
+ console.log("");
36
+ }
37
+ /**
38
+ * Handle config commands
39
+ */
40
+ function handleConfigCommand(args) {
41
+ // version-control config --lang <code>
42
+ if (args[0] === "--lang" && args[1]) {
43
+ const lang = args[1].toLowerCase();
44
+ if (lang === "en" || lang === "pt" || lang === "es" || lang === "fr") {
45
+ (0, config_1.setLanguage)(lang);
46
+ console.log("");
47
+ console.log(`${colors_1.colors.green}✓${colors_1.colors.reset} ${(0, i18n_1.t)("languageSet")} ${colors_1.colors.bold}${lang.toUpperCase()}${colors_1.colors.reset}`);
48
+ console.log("");
49
+ console.log(`${(0, i18n_1.t)("availableLanguages")}`);
50
+ console.log("");
51
+ process.exit(0);
52
+ }
53
+ else {
54
+ console.log("");
55
+ console.log(`${colors_1.colors.red}✗${colors_1.colors.reset} ${(0, i18n_1.t)("invalidLanguage")}`);
56
+ console.log("");
57
+ process.exit(1);
58
+ }
59
+ }
60
+ // version-control config --clear
61
+ if (args[0] === "--clear") {
62
+ (0, config_1.clearLanguage)();
63
+ console.log("");
64
+ console.log(`${colors_1.colors.green}✓${colors_1.colors.reset} ${(0, i18n_1.t)("languageCleared")}`);
65
+ console.log("");
66
+ process.exit(0);
67
+ }
68
+ // Show current config
69
+ console.log("");
70
+ console.log(`${colors_1.colors.bold}${colors_1.colors.cyan}Configuration${colors_1.colors.reset}`);
71
+ console.log("");
72
+ showLanguageInfo();
73
+ console.log(`${colors_1.colors.bold}Commands:${colors_1.colors.reset}`);
74
+ console.log(` ${colors_1.colors.cyan}version-control config --lang <code>${colors_1.colors.reset} - Set language (en, pt, es, fr)`);
75
+ console.log(` ${colors_1.colors.cyan}version-control config --clear${colors_1.colors.reset} - Clear language config`);
76
+ console.log("");
77
+ process.exit(0);
78
+ }
79
+ /**
80
+ * Main function
81
+ */
82
+ async function main() {
83
+ // Check for config command
84
+ const args = process.argv.slice(2);
85
+ if (args[0] === "config") {
86
+ handleConfigCommand(args.slice(1));
87
+ return;
88
+ }
89
+ // Check for updates (non-blocking)
90
+ (0, updateChecker_1.checkForUpdates)().catch(() => {
91
+ // Silently ignore errors
92
+ });
93
+ console.log("");
94
+ console.log(`${colors_1.colors.bold}${colors_1.colors.cyan}═══════════════════════════════════════════════════════════${colors_1.colors.reset}`);
95
+ console.log(`${colors_1.colors.bold}${colors_1.colors.cyan} ${(0, i18n_1.t)("versionControl")}${colors_1.colors.reset}`);
96
+ console.log(`${colors_1.colors.bold}${colors_1.colors.cyan}═══════════════════════════════════════════════════════════${colors_1.colors.reset}`);
97
+ console.log("");
98
+ // Show language info
99
+ showLanguageInfo();
100
+ // Check if there's a commit
101
+ const hasCommit = (0, git_1.git)("rev-parse HEAD 2>/dev/null");
102
+ if (!hasCommit) {
103
+ console.log(`${colors_1.colors.yellow}⚠${colors_1.colors.reset} ${(0, i18n_1.t)("noCommitFound")}`);
104
+ process.exit(0);
105
+ }
106
+ // Current version
107
+ const currentVersion = (0, version_1.getCurrentVersion)();
108
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("currentVersion")}${colors_1.colors.reset} ${colors_1.colors.cyan}${currentVersion}${colors_1.colors.reset}`);
109
+ console.log("");
110
+ // Analyze changes
111
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("analyzingCommit")}${colors_1.colors.reset}`);
112
+ const analysis = (0, analyzer_1.analyzeChanges)();
113
+ console.log("");
114
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("commitMessage")}${colors_1.colors.reset}`);
115
+ console.log(` "${analysis.commitMsg}"`);
116
+ console.log("");
117
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("filesModified")}${colors_1.colors.reset} ${analysis.filesChanged.length}`);
118
+ analysis.filesChanged.slice(0, 5).forEach((file) => {
119
+ console.log(` - ${file}`);
120
+ });
121
+ if (analysis.filesChanged.length > 5) {
122
+ console.log(` ... ${(0, i18n_1.t)("andMore")} ${analysis.filesChanged.length - 5} arquivo(s)`);
123
+ }
124
+ console.log("");
125
+ // Show analysis
126
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("changeAnalysis")}${colors_1.colors.reset}`);
127
+ analysis.reason.forEach((reason) => console.log(` ${reason}`));
128
+ console.log("");
129
+ // Suggest version
130
+ const suggestedVersion = (0, version_1.bumpVersion)(currentVersion, analysis.type);
131
+ const typeColors = {
132
+ major: colors_1.colors.red,
133
+ minor: colors_1.colors.yellow,
134
+ patch: colors_1.colors.green,
135
+ };
136
+ const typeEmojis = {
137
+ major: "🔴",
138
+ minor: "🟡",
139
+ patch: "🟢",
140
+ };
141
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("suggestedType")}${colors_1.colors.reset} ${typeEmojis[analysis.type]} ${typeColors[analysis.type]}${analysis.type.toUpperCase()}${colors_1.colors.reset}`);
142
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("newVersion")}${colors_1.colors.reset} ${colors_1.colors.cyan}${currentVersion}${colors_1.colors.reset} → ${colors_1.colors.green}${colors_1.colors.bold}${suggestedVersion}${colors_1.colors.reset}`);
143
+ console.log("");
144
+ // Ask user with validation
145
+ const rl = (0, readline_1.createInterface)();
146
+ let shouldUpdate = "";
147
+ while (true) {
148
+ shouldUpdate = await (0, readline_1.question)(rl, `${colors_1.colors.bold}${(0, i18n_1.t)("updateVersion")}${colors_1.colors.reset} `);
149
+ const answer = shouldUpdate.toLowerCase();
150
+ if (!shouldUpdate) {
151
+ console.log(`${colors_1.colors.red}${(0, i18n_1.t)("pleaseEnterYesNo")}${colors_1.colors.reset}`);
152
+ continue;
153
+ }
154
+ const yesOptions = (0, i18n_1.getYesOptions)();
155
+ const noOptions = (0, i18n_1.getNoOptions)();
156
+ if (yesOptions.includes(answer) || noOptions.includes(answer)) {
157
+ break;
158
+ }
159
+ console.log(`${colors_1.colors.red}${(0, i18n_1.t)("invalidResponse")}${colors_1.colors.reset}`);
160
+ }
161
+ if (!(0, i18n_1.getYesOptions)().includes(shouldUpdate.toLowerCase())) {
162
+ console.log("");
163
+ console.log(`${colors_1.colors.yellow}${(0, i18n_1.t)("versionNotChanged")}${colors_1.colors.reset}`);
164
+ await (0, readline_1.closeInterface)(rl);
165
+ process.exit(0);
166
+ }
167
+ // Allow choosing a different type
168
+ console.log("");
169
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("confirmVersionType")}${colors_1.colors.reset}`);
170
+ console.log(` ${colors_1.colors.red}1${colors_1.colors.reset} - MAJOR (${(0, version_1.bumpVersion)(currentVersion, "major")}) - ${(0, i18n_1.t)("majorDesc")}`);
171
+ console.log(` ${colors_1.colors.yellow}2${colors_1.colors.reset} - MINOR (${(0, version_1.bumpVersion)(currentVersion, "minor")}) - ${(0, i18n_1.t)("minorDesc")}`);
172
+ console.log(` ${colors_1.colors.green}3${colors_1.colors.reset} - PATCH (${(0, version_1.bumpVersion)(currentVersion, "patch")}) - ${(0, i18n_1.t)("patchDesc")}`);
173
+ console.log("");
174
+ const defaultChoice = analysis.type === "major" ? "1" : analysis.type === "minor" ? "2" : "3";
175
+ let typeChoice = "";
176
+ while (true) {
177
+ typeChoice = await (0, readline_1.question)(rl, `${colors_1.colors.bold}${(0, i18n_1.t)("choose")} (1/2/3) [${(0, i18n_1.t)("defaultLabel")}: ${defaultChoice}]:${colors_1.colors.reset} `);
178
+ // If empty, use default
179
+ if (!typeChoice) {
180
+ typeChoice = defaultChoice;
181
+ break;
182
+ }
183
+ // Validate if it's 1, 2 or 3
184
+ if (typeChoice === "1" || typeChoice === "2" || typeChoice === "3") {
185
+ break;
186
+ }
187
+ console.log(`${colors_1.colors.red}${(0, i18n_1.t)("invalidOption")}${colors_1.colors.reset}`);
188
+ }
189
+ let finalType = analysis.type;
190
+ if (typeChoice === "1")
191
+ finalType = "major";
192
+ else if (typeChoice === "2")
193
+ finalType = "minor";
194
+ else if (typeChoice === "3")
195
+ finalType = "patch";
196
+ const finalVersion = (0, version_1.bumpVersion)(currentVersion, finalType);
197
+ // Update files
198
+ console.log("");
199
+ console.log(`${colors_1.colors.bold}${(0, i18n_1.t)("updatingFiles")}${colors_1.colors.reset}`);
200
+ console.log("");
201
+ (0, updater_1.updatePackageJson)(finalVersion);
202
+ (0, updater_1.updateIndexFile)(finalVersion);
203
+ (0, updater_1.updateChangelog)(finalVersion, finalType, analysis);
204
+ console.log("");
205
+ console.log(`${colors_1.colors.green}${colors_1.colors.bold}✓ ${(0, i18n_1.t)("versionUpdatedTo")} ${finalVersion}!${colors_1.colors.reset}`);
206
+ console.log("");
207
+ // Close readline interface
208
+ await (0, readline_1.closeInterface)(rl);
209
+ // Execute git commands automatically
210
+ (0, gitCommands_1.executeGitCommands)(finalVersion);
211
+ // Force immediate exit
212
+ process.exit(0);
213
+ }
214
+ // Run if executed directly
215
+ if (require.main === module) {
216
+ main().catch((error) => {
217
+ console.error(`${colors_1.colors.red}${(0, i18n_1.t)("error")}${colors_1.colors.reset}`, error.message);
218
+ process.exit(1);
219
+ });
220
+ }
221
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ReadlineInterface } from "./types";
2
+ /**
3
+ * Create readline interface that works in git hooks
4
+ * @returns Readline interface
5
+ */
6
+ export declare function createInterface(): ReadlineInterface;
7
+ /**
8
+ * Ask question to user
9
+ * @param rl - Readline interface
10
+ * @param query - Question to ask
11
+ * @returns User's answer
12
+ */
13
+ export declare function question(rl: ReadlineInterface, query: string): Promise<string>;
14
+ /**
15
+ * Close readline interface and TTY resources
16
+ * @param rl - Readline interface to close
17
+ */
18
+ export declare function closeInterface(rl: ReadlineInterface): Promise<void>;
19
+ //# sourceMappingURL=readline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readline.d.ts","sourceRoot":"","sources":["../src/readline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAiCnD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,iBAAiB,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCzE"}
@@ -0,0 +1,129 @@
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
+ exports.createInterface = createInterface;
37
+ exports.question = question;
38
+ exports.closeInterface = closeInterface;
39
+ const readline = __importStar(require("readline"));
40
+ const fs = __importStar(require("fs"));
41
+ /**
42
+ * Create readline interface that works in git hooks
43
+ * @returns Readline interface
44
+ */
45
+ function createInterface() {
46
+ // Try to use /dev/tty if available (necessary for git hooks)
47
+ let input = process.stdin;
48
+ let output = process.stdout;
49
+ let ttyFd = null;
50
+ try {
51
+ ttyFd = fs.openSync("/dev/tty", "r+");
52
+ // autoClose: false to manually control closing the FD
53
+ input = fs.createReadStream("", {
54
+ fd: ttyFd,
55
+ autoClose: false,
56
+ });
57
+ output = fs.createWriteStream("", {
58
+ fd: ttyFd,
59
+ autoClose: false,
60
+ });
61
+ }
62
+ catch (e) {
63
+ // If it fails, use default stdin/stdout
64
+ }
65
+ const rl = readline.createInterface({
66
+ input,
67
+ output,
68
+ terminal: true,
69
+ });
70
+ // Store FD and streams to close later
71
+ rl._ttyFd = ttyFd ?? undefined;
72
+ rl._ttyInput = input !== process.stdin ? input : null;
73
+ rl._ttyOutput = output !== process.stdout ? output : null;
74
+ return rl;
75
+ }
76
+ /**
77
+ * Ask question to user
78
+ * @param rl - Readline interface
79
+ * @param query - Question to ask
80
+ * @returns User's answer
81
+ */
82
+ function question(rl, query) {
83
+ return new Promise((resolve) => {
84
+ rl.question(query, (answer) => {
85
+ resolve(answer.trim());
86
+ });
87
+ });
88
+ }
89
+ /**
90
+ * Close readline interface and TTY resources
91
+ * @param rl - Readline interface to close
92
+ */
93
+ async function closeInterface(rl) {
94
+ const ttyFd = rl._ttyFd;
95
+ const ttyInput = rl._ttyInput;
96
+ const ttyOutput = rl._ttyOutput;
97
+ // 1. Close readline interface
98
+ rl.removeAllListeners();
99
+ rl.close();
100
+ // 2. Wait for readline to process closure
101
+ await new Promise((resolve) => setTimeout(resolve, 50));
102
+ // 3. Close streams (don't close FD because of autoClose: false)
103
+ if (ttyInput) {
104
+ try {
105
+ ttyInput.destroy();
106
+ }
107
+ catch (e) {
108
+ // Ignore error
109
+ }
110
+ }
111
+ if (ttyOutput) {
112
+ try {
113
+ ttyOutput.destroy();
114
+ }
115
+ catch (e) {
116
+ // Ignore error
117
+ }
118
+ }
119
+ // 4. Manually close file descriptor
120
+ if (ttyFd !== undefined) {
121
+ try {
122
+ fs.closeSync(ttyFd);
123
+ }
124
+ catch (e) {
125
+ // Ignore error
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=readline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readline.js","sourceRoot":"","sources":["../src/readline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Types for version control system
3
+ */
4
+ export type VersionType = "major" | "minor" | "patch";
5
+ export interface ChangeAnalysis {
6
+ type: VersionType;
7
+ reason: string[];
8
+ filesChanged: string[];
9
+ commitMsg: string;
10
+ }
11
+ export interface Colors {
12
+ reset: string;
13
+ bold: string;
14
+ red: string;
15
+ green: string;
16
+ yellow: string;
17
+ blue: string;
18
+ cyan: string;
19
+ }
20
+ export interface ReadlineInterface {
21
+ question(query: string, callback: (answer: string) => void): void;
22
+ close(): void;
23
+ removeAllListeners(): void;
24
+ _ttyFd?: number;
25
+ _ttyInput?: NodeJS.ReadStream | null;
26
+ _ttyOutput?: NodeJS.WriteStream | null;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAClE,KAAK,IAAI,IAAI,CAAC;IACd,kBAAkB,IAAI,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;CACxC"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Types for version control system
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Check if a new version is available on npm
3
+ */
4
+ export declare function checkForUpdates(): Promise<void>;
5
+ //# sourceMappingURL=updateChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateChecker.d.ts","sourceRoot":"","sources":["../src/updateChecker.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CrD"}
@@ -0,0 +1,117 @@
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
+ exports.checkForUpdates = checkForUpdates;
37
+ const https = __importStar(require("https"));
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const colors_1 = require("./colors");
41
+ /**
42
+ * Check if a new version is available on npm
43
+ */
44
+ async function checkForUpdates() {
45
+ try {
46
+ // Get current version
47
+ const packagePath = path.join(__dirname, "../package.json");
48
+ const packageJson = JSON.parse(fs.readFileSync(packagePath, "utf8"));
49
+ const currentVersion = packageJson.version;
50
+ const packageName = packageJson.name;
51
+ // Fetch latest version from npm
52
+ const latestVersion = await getLatestVersion(packageName);
53
+ if (!latestVersion) {
54
+ return; // Silently fail if can't fetch
55
+ }
56
+ // Compare versions
57
+ if (isNewerVersion(latestVersion, currentVersion)) {
58
+ console.log("");
59
+ console.log(`${colors_1.colors.yellow}╭${"─".repeat(57)}╮${colors_1.colors.reset}`);
60
+ console.log(`${colors_1.colors.yellow}│${colors_1.colors.reset} ${colors_1.colors.bold}Update available:${colors_1.colors.reset} ${colors_1.colors.cyan}${currentVersion}${colors_1.colors.reset} → ${colors_1.colors.green}${colors_1.colors.bold}${latestVersion}${colors_1.colors.reset}${" ".repeat(57 - 35 - currentVersion.length - latestVersion.length)}${colors_1.colors.yellow}│${colors_1.colors.reset}`);
61
+ console.log(`${colors_1.colors.yellow}│${colors_1.colors.reset} Run: ${colors_1.colors.cyan}yarn global add ${packageName}${colors_1.colors.reset}${" ".repeat(57 - 13 - packageName.length)}${colors_1.colors.yellow}│${colors_1.colors.reset}`);
62
+ console.log(`${colors_1.colors.yellow}╰${"─".repeat(57)}╯${colors_1.colors.reset}`);
63
+ console.log("");
64
+ }
65
+ }
66
+ catch (error) {
67
+ // Silently fail - don't interrupt user's workflow
68
+ return;
69
+ }
70
+ }
71
+ /**
72
+ * Fetch latest version from npm registry
73
+ */
74
+ function getLatestVersion(packageName) {
75
+ return new Promise((resolve) => {
76
+ const url = `https://registry.npmjs.org/${packageName}/latest`;
77
+ https
78
+ .get(url, (res) => {
79
+ let data = "";
80
+ res.on("data", (chunk) => {
81
+ data += chunk;
82
+ });
83
+ res.on("end", () => {
84
+ try {
85
+ const json = JSON.parse(data);
86
+ resolve(json.version || null);
87
+ }
88
+ catch {
89
+ resolve(null);
90
+ }
91
+ });
92
+ })
93
+ .on("error", () => {
94
+ resolve(null);
95
+ });
96
+ });
97
+ }
98
+ /**
99
+ * Compare two semantic versions
100
+ * @returns true if newVersion is greater than currentVersion
101
+ */
102
+ function isNewerVersion(newVersion, currentVersion) {
103
+ const newParts = newVersion.split(".").map(Number);
104
+ const currentParts = currentVersion.split(".").map(Number);
105
+ for (let i = 0; i < 3; i++) {
106
+ const newPart = newParts[i] || 0;
107
+ const currentPart = currentParts[i] || 0;
108
+ if (newPart > currentPart) {
109
+ return true;
110
+ }
111
+ else if (newPart < currentPart) {
112
+ return false;
113
+ }
114
+ }
115
+ return false;
116
+ }
117
+ //# sourceMappingURL=updateChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateChecker.js","sourceRoot":"","sources":["../src/updateChecker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ChangeAnalysis, VersionType } from "./types";
2
+ /**
3
+ * Update version in package.json
4
+ * @param newVersion - New version string
5
+ * @param projectRoot - Root directory of the project
6
+ */
7
+ export declare function updatePackageJson(newVersion: string, projectRoot?: string): void;
8
+ /**
9
+ * Update version in index file (if exists and has @version tag)
10
+ * @param newVersion - New version string
11
+ * @param projectRoot - Root directory of the project
12
+ */
13
+ export declare function updateIndexFile(newVersion: string, projectRoot?: string): void;
14
+ /**
15
+ * Add entry to CHANGELOG.md
16
+ * @param version - New version string
17
+ * @param _type - Version bump type (not used, kept for API compatibility)
18
+ * @param _analysis - Change analysis data (not used, kept for API compatibility)
19
+ * @param projectRoot - Root directory of the project
20
+ */
21
+ export declare function updateChangelog(version: string, _type: VersionType, _analysis: ChangeAnalysis, projectRoot?: string): void;
22
+ //# sourceMappingURL=updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAStD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAAsB,GAClC,IAAI,CAMN;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAAsB,GAClC,IAAI,CA0BN;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,cAAc,EACzB,WAAW,GAAE,MAAsB,GAClC,IAAI,CAuGN"}