@emaenriquez/projectmanager-cli 0.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 (174) hide show
  1. package/README.md +98 -0
  2. package/dist/application/ConfigManager.d.ts +73 -0
  3. package/dist/application/ConfigManager.d.ts.map +1 -0
  4. package/dist/application/ConfigManager.js +253 -0
  5. package/dist/application/ConfigManager.js.map +1 -0
  6. package/dist/application/errors/ErrorHandler.d.ts +27 -0
  7. package/dist/application/errors/ErrorHandler.d.ts.map +1 -0
  8. package/dist/application/errors/ErrorHandler.js +88 -0
  9. package/dist/application/errors/ErrorHandler.js.map +1 -0
  10. package/dist/application/state/StateManager.d.ts +26 -0
  11. package/dist/application/state/StateManager.d.ts.map +1 -0
  12. package/dist/application/state/StateManager.js +114 -0
  13. package/dist/application/state/StateManager.js.map +1 -0
  14. package/dist/application/use_cases/AddProjectUseCase.d.ts +9 -0
  15. package/dist/application/use_cases/AddProjectUseCase.d.ts.map +1 -0
  16. package/dist/application/use_cases/AddProjectUseCase.js +85 -0
  17. package/dist/application/use_cases/AddProjectUseCase.js.map +1 -0
  18. package/dist/application/use_cases/ListProjectsUseCase.d.ts +7 -0
  19. package/dist/application/use_cases/ListProjectsUseCase.d.ts.map +1 -0
  20. package/dist/application/use_cases/ListProjectsUseCase.js +14 -0
  21. package/dist/application/use_cases/ListProjectsUseCase.js.map +1 -0
  22. package/dist/application/use_cases/OpenProjectUseCase.d.ts +10 -0
  23. package/dist/application/use_cases/OpenProjectUseCase.d.ts.map +1 -0
  24. package/dist/application/use_cases/OpenProjectUseCase.js +168 -0
  25. package/dist/application/use_cases/OpenProjectUseCase.js.map +1 -0
  26. package/dist/application/use_cases/RemoveProjectUseCase.d.ts +7 -0
  27. package/dist/application/use_cases/RemoveProjectUseCase.d.ts.map +1 -0
  28. package/dist/application/use_cases/RemoveProjectUseCase.js +24 -0
  29. package/dist/application/use_cases/RemoveProjectUseCase.js.map +1 -0
  30. package/dist/application/use_cases/ScanProjectsUseCase.d.ts +13 -0
  31. package/dist/application/use_cases/ScanProjectsUseCase.d.ts.map +1 -0
  32. package/dist/application/use_cases/ScanProjectsUseCase.js +57 -0
  33. package/dist/application/use_cases/ScanProjectsUseCase.js.map +1 -0
  34. package/dist/application/use_cases/SyncProjectsUseCase.d.ts +12 -0
  35. package/dist/application/use_cases/SyncProjectsUseCase.d.ts.map +1 -0
  36. package/dist/application/use_cases/SyncProjectsUseCase.js +74 -0
  37. package/dist/application/use_cases/SyncProjectsUseCase.js.map +1 -0
  38. package/dist/application/use_cases/SystemDiagnostics.d.ts +16 -0
  39. package/dist/application/use_cases/SystemDiagnostics.d.ts.map +1 -0
  40. package/dist/application/use_cases/SystemDiagnostics.js +35 -0
  41. package/dist/application/use_cases/SystemDiagnostics.js.map +1 -0
  42. package/dist/application/use_cases/TagProjectUseCase.d.ts +9 -0
  43. package/dist/application/use_cases/TagProjectUseCase.d.ts.map +1 -0
  44. package/dist/application/use_cases/TagProjectUseCase.js +41 -0
  45. package/dist/application/use_cases/TagProjectUseCase.js.map +1 -0
  46. package/dist/domain/patterns/ProjectPatterns.d.ts +47 -0
  47. package/dist/domain/patterns/ProjectPatterns.d.ts.map +1 -0
  48. package/dist/domain/patterns/ProjectPatterns.js +200 -0
  49. package/dist/domain/patterns/ProjectPatterns.js.map +1 -0
  50. package/dist/domain/services/GitService.d.ts +23 -0
  51. package/dist/domain/services/GitService.d.ts.map +1 -0
  52. package/dist/domain/services/GitService.js +155 -0
  53. package/dist/domain/services/GitService.js.map +1 -0
  54. package/dist/domain/services/IgnoreFileParser.d.ts +55 -0
  55. package/dist/domain/services/IgnoreFileParser.d.ts.map +1 -0
  56. package/dist/domain/services/IgnoreFileParser.js +200 -0
  57. package/dist/domain/services/IgnoreFileParser.js.map +1 -0
  58. package/dist/domain/services/ProjectScanner.d.ts +65 -0
  59. package/dist/domain/services/ProjectScanner.d.ts.map +1 -0
  60. package/dist/domain/services/ProjectScanner.js +207 -0
  61. package/dist/domain/services/ProjectScanner.js.map +1 -0
  62. package/dist/domain/services/TechnologyDetector.d.ts +78 -0
  63. package/dist/domain/services/TechnologyDetector.d.ts.map +1 -0
  64. package/dist/domain/services/TechnologyDetector.js +633 -0
  65. package/dist/domain/services/TechnologyDetector.js.map +1 -0
  66. package/dist/domain/services/ToolDetector.d.ts +74 -0
  67. package/dist/domain/services/ToolDetector.d.ts.map +1 -0
  68. package/dist/domain/services/ToolDetector.js +344 -0
  69. package/dist/domain/services/ToolDetector.js.map +1 -0
  70. package/dist/domain/services/index.d.ts +5 -0
  71. package/dist/domain/services/index.d.ts.map +1 -0
  72. package/dist/domain/services/index.js +12 -0
  73. package/dist/domain/services/index.js.map +1 -0
  74. package/dist/domain/types/Config.d.ts +37 -0
  75. package/dist/domain/types/Config.d.ts.map +1 -0
  76. package/dist/domain/types/Config.js +6 -0
  77. package/dist/domain/types/Config.js.map +1 -0
  78. package/dist/index.d.ts +6 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +17 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/infrastructure/database/DatabaseConnection.d.ts +88 -0
  83. package/dist/infrastructure/database/DatabaseConnection.d.ts.map +1 -0
  84. package/dist/infrastructure/database/DatabaseConnection.js +318 -0
  85. package/dist/infrastructure/database/DatabaseConnection.js.map +1 -0
  86. package/dist/infrastructure/database/DatabaseValidator.d.ts +154 -0
  87. package/dist/infrastructure/database/DatabaseValidator.d.ts.map +1 -0
  88. package/dist/infrastructure/database/DatabaseValidator.js +583 -0
  89. package/dist/infrastructure/database/DatabaseValidator.js.map +1 -0
  90. package/dist/infrastructure/database/index.d.ts +8 -0
  91. package/dist/infrastructure/database/index.d.ts.map +1 -0
  92. package/dist/infrastructure/database/index.js +14 -0
  93. package/dist/infrastructure/database/index.js.map +1 -0
  94. package/dist/infrastructure/database/migrations/001_initial.d.ts +24 -0
  95. package/dist/infrastructure/database/migrations/001_initial.d.ts.map +1 -0
  96. package/dist/infrastructure/database/migrations/001_initial.js +109 -0
  97. package/dist/infrastructure/database/migrations/001_initial.js.map +1 -0
  98. package/dist/infrastructure/database/migrations/Migration.d.ts +27 -0
  99. package/dist/infrastructure/database/migrations/Migration.d.ts.map +1 -0
  100. package/dist/infrastructure/database/migrations/Migration.js +3 -0
  101. package/dist/infrastructure/database/migrations/Migration.js.map +1 -0
  102. package/dist/infrastructure/database/migrations/MigrationRunner.d.ts +52 -0
  103. package/dist/infrastructure/database/migrations/MigrationRunner.d.ts.map +1 -0
  104. package/dist/infrastructure/database/migrations/MigrationRunner.js +167 -0
  105. package/dist/infrastructure/database/migrations/MigrationRunner.js.map +1 -0
  106. package/dist/infrastructure/database/migrations/index.d.ts +10 -0
  107. package/dist/infrastructure/database/migrations/index.d.ts.map +1 -0
  108. package/dist/infrastructure/database/migrations/index.js +22 -0
  109. package/dist/infrastructure/database/migrations/index.js.map +1 -0
  110. package/dist/infrastructure/filesystem/DirectoryManager.d.ts +50 -0
  111. package/dist/infrastructure/filesystem/DirectoryManager.d.ts.map +1 -0
  112. package/dist/infrastructure/filesystem/DirectoryManager.js +143 -0
  113. package/dist/infrastructure/filesystem/DirectoryManager.js.map +1 -0
  114. package/dist/infrastructure/filesystem/index.d.ts +2 -0
  115. package/dist/infrastructure/filesystem/index.d.ts.map +1 -0
  116. package/dist/infrastructure/filesystem/index.js +6 -0
  117. package/dist/infrastructure/filesystem/index.js.map +1 -0
  118. package/dist/infrastructure/logging/LogRotator.d.ts +43 -0
  119. package/dist/infrastructure/logging/LogRotator.d.ts.map +1 -0
  120. package/dist/infrastructure/logging/LogRotator.js +172 -0
  121. package/dist/infrastructure/logging/LogRotator.js.map +1 -0
  122. package/dist/infrastructure/logging/Logger.d.ts +59 -0
  123. package/dist/infrastructure/logging/Logger.d.ts.map +1 -0
  124. package/dist/infrastructure/logging/Logger.js +182 -0
  125. package/dist/infrastructure/logging/Logger.js.map +1 -0
  126. package/dist/infrastructure/logging/index.d.ts +3 -0
  127. package/dist/infrastructure/logging/index.d.ts.map +1 -0
  128. package/dist/infrastructure/logging/index.js +8 -0
  129. package/dist/infrastructure/logging/index.js.map +1 -0
  130. package/dist/infrastructure/repositories/ProjectRepository.d.ts +20 -0
  131. package/dist/infrastructure/repositories/ProjectRepository.d.ts.map +1 -0
  132. package/dist/infrastructure/repositories/ProjectRepository.js +61 -0
  133. package/dist/infrastructure/repositories/ProjectRepository.js.map +1 -0
  134. package/dist/infrastructure/repositories/QueryBuilder.d.ts +24 -0
  135. package/dist/infrastructure/repositories/QueryBuilder.d.ts.map +1 -0
  136. package/dist/infrastructure/repositories/QueryBuilder.js +92 -0
  137. package/dist/infrastructure/repositories/QueryBuilder.js.map +1 -0
  138. package/dist/infrastructure/repositories/TagRepository.d.ts +18 -0
  139. package/dist/infrastructure/repositories/TagRepository.d.ts.map +1 -0
  140. package/dist/infrastructure/repositories/TagRepository.js +66 -0
  141. package/dist/infrastructure/repositories/TagRepository.js.map +1 -0
  142. package/dist/infrastructure/repositories/TechnologyRepository.d.ts +16 -0
  143. package/dist/infrastructure/repositories/TechnologyRepository.d.ts.map +1 -0
  144. package/dist/infrastructure/repositories/TechnologyRepository.js +46 -0
  145. package/dist/infrastructure/repositories/TechnologyRepository.js.map +1 -0
  146. package/dist/infrastructure/repositories/TransactionManager.d.ts +11 -0
  147. package/dist/infrastructure/repositories/TransactionManager.d.ts.map +1 -0
  148. package/dist/infrastructure/repositories/TransactionManager.js +21 -0
  149. package/dist/infrastructure/repositories/TransactionManager.js.map +1 -0
  150. package/dist/infrastructure/ui/ScreenManager.d.ts +11 -0
  151. package/dist/infrastructure/ui/ScreenManager.d.ts.map +1 -0
  152. package/dist/infrastructure/ui/ScreenManager.js +69 -0
  153. package/dist/infrastructure/ui/ScreenManager.js.map +1 -0
  154. package/dist/ui/cli/CLI.d.ts +9 -0
  155. package/dist/ui/cli/CLI.d.ts.map +1 -0
  156. package/dist/ui/cli/CLI.js +211 -0
  157. package/dist/ui/cli/CLI.js.map +1 -0
  158. package/dist/ui/components/DetailsPanel.d.ts +11 -0
  159. package/dist/ui/components/DetailsPanel.d.ts.map +1 -0
  160. package/dist/ui/components/DetailsPanel.js +181 -0
  161. package/dist/ui/components/DetailsPanel.js.map +1 -0
  162. package/dist/ui/components/ProjectListView.d.ts +15 -0
  163. package/dist/ui/components/ProjectListView.d.ts.map +1 -0
  164. package/dist/ui/components/ProjectListView.js +122 -0
  165. package/dist/ui/components/ProjectListView.js.map +1 -0
  166. package/dist/ui/tui/TUIApplication.d.ts +17 -0
  167. package/dist/ui/tui/TUIApplication.d.ts.map +1 -0
  168. package/dist/ui/tui/TUIApplication.js +532 -0
  169. package/dist/ui/tui/TUIApplication.js.map +1 -0
  170. package/dist/ui/tui/Theme.d.ts +25 -0
  171. package/dist/ui/tui/Theme.d.ts.map +1 -0
  172. package/dist/ui/tui/Theme.js +62 -0
  173. package/dist/ui/tui/Theme.js.map +1 -0
  174. package/package.json +56 -0
@@ -0,0 +1,74 @@
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.SyncProjectsUseCase = void 0;
37
+ const ProjectRepository_1 = require("../../infrastructure/repositories/ProjectRepository");
38
+ const ScanProjectsUseCase_1 = require("./ScanProjectsUseCase");
39
+ const fs = __importStar(require("fs"));
40
+ class SyncProjectsUseCase {
41
+ constructor() {
42
+ this.projectRepo = new ProjectRepository_1.ProjectRepository();
43
+ this.scanUseCase = new ScanProjectsUseCase_1.ScanProjectsUseCase();
44
+ }
45
+ execute() {
46
+ let removed = 0;
47
+ let added = 0;
48
+ let updated = 0;
49
+ let scanned = 0;
50
+ const allProjects = this.projectRepo.findAll();
51
+ // First, remove missing projects
52
+ for (const project of allProjects) {
53
+ if (!fs.existsSync(project.path)) {
54
+ this.projectRepo.delete(project.id);
55
+ removed++;
56
+ }
57
+ else {
58
+ // Rescan existing project paths to update metadata/technologies
59
+ const result = this.scanUseCase.execute(project.path);
60
+ added += result.added;
61
+ updated += result.updated;
62
+ scanned += result.scanned;
63
+ }
64
+ }
65
+ return {
66
+ removed,
67
+ added,
68
+ updated,
69
+ scanned
70
+ };
71
+ }
72
+ }
73
+ exports.SyncProjectsUseCase = SyncProjectsUseCase;
74
+ //# sourceMappingURL=SyncProjectsUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncProjectsUseCase.js","sourceRoot":"","sources":["../../../src/application/use_cases/SyncProjectsUseCase.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2FAAwF;AACxF,+DAA4D;AAC5D,uCAAyB;AAEzB,MAAa,mBAAmB;IAI9B;QACE,IAAI,CAAC,WAAW,GAAG,IAAI,qCAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,yCAAmB,EAAE,CAAC;IAC/C,CAAC;IAEM,OAAO;QACZ,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE/C,iCAAiC;QACjC,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,gEAAgE;gBAChE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtD,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;gBACtB,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;gBAC1B,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO;YACP,KAAK;YACL,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;CACF;AAtCD,kDAsCC"}
@@ -0,0 +1,16 @@
1
+ import { ValidationReport } from '../../infrastructure/database/DatabaseValidator';
2
+ export interface DiagnosticReport {
3
+ tools: {
4
+ editors: string[];
5
+ runtimes: string[];
6
+ development: string[];
7
+ };
8
+ database: ValidationReport;
9
+ }
10
+ export declare class SystemDiagnostics {
11
+ private toolDetector;
12
+ private dbValidator;
13
+ constructor();
14
+ runDiagnostics(): DiagnosticReport;
15
+ }
16
+ //# sourceMappingURL=SystemDiagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemDiagnostics.d.ts","sourceRoot":"","sources":["../../../src/application/use_cases/SystemDiagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AAGtG,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAoB;;IAOhC,cAAc,IAAI,gBAAgB;CAwB1C"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SystemDiagnostics = void 0;
4
+ const ToolDetector_1 = require("../../domain/services/ToolDetector");
5
+ const DatabaseValidator_1 = require("../../infrastructure/database/DatabaseValidator");
6
+ const DatabaseConnection_1 = require("../../infrastructure/database/DatabaseConnection");
7
+ class SystemDiagnostics {
8
+ constructor() {
9
+ this.toolDetector = new ToolDetector_1.ToolDetector();
10
+ this.dbValidator = new DatabaseValidator_1.DatabaseValidator();
11
+ }
12
+ runDiagnostics() {
13
+ // Check tools
14
+ const editors = this.toolDetector.detectEditors().map(t => `${t.name} (v${t.version || 'unknown'})`);
15
+ const runtimes = this.toolDetector.detectRuntimes().map(t => `${t.name} (v${t.version || 'unknown'})`);
16
+ const devTools = this.toolDetector.detectDevelopmentTools().map(t => `${t.name} (v${t.version || 'unknown'})`);
17
+ // Ensure DB is open for validation
18
+ const db = DatabaseConnection_1.DatabaseConnection.getInstance();
19
+ if (!db.isConnected()) {
20
+ db.open();
21
+ }
22
+ // Check DB
23
+ const dbReport = this.dbValidator.validate();
24
+ return {
25
+ tools: {
26
+ editors,
27
+ runtimes,
28
+ development: devTools
29
+ },
30
+ database: dbReport
31
+ };
32
+ }
33
+ }
34
+ exports.SystemDiagnostics = SystemDiagnostics;
35
+ //# sourceMappingURL=SystemDiagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemDiagnostics.js","sourceRoot":"","sources":["../../../src/application/use_cases/SystemDiagnostics.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAClE,uFAAsG;AACtG,yFAAsF;AAWtF,MAAa,iBAAiB;IAI5B;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,2BAAY,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,qCAAiB,EAAE,CAAC;IAC7C,CAAC;IAEM,cAAc;QACnB,cAAc;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,CAAC;QACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,CAAC;QACvG,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,CAAC;QAE/G,mCAAmC;QACnC,MAAM,EAAE,GAAG,uCAAkB,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,EAAE,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAE7C,OAAO;YACL,KAAK,EAAE;gBACL,OAAO;gBACP,QAAQ;gBACR,WAAW,EAAE,QAAQ;aACtB;YACD,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;CACF;AAjCD,8CAiCC"}
@@ -0,0 +1,9 @@
1
+ export declare class TagProjectUseCase {
2
+ private tagRepo;
3
+ private projectRepo;
4
+ private transactionManager;
5
+ constructor();
6
+ addTag(projectId: string, tagName: string): void;
7
+ removeTag(projectId: string, tagName: string): void;
8
+ }
9
+ //# sourceMappingURL=TagProjectUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagProjectUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use_cases/TagProjectUseCase.ts"],"names":[],"mappings":"AAKA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,kBAAkB,CAAqB;;IAQxC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBhD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAQ3D"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TagProjectUseCase = void 0;
4
+ const TagRepository_1 = require("../../infrastructure/repositories/TagRepository");
5
+ const ProjectRepository_1 = require("../../infrastructure/repositories/ProjectRepository");
6
+ const TransactionManager_1 = require("../../infrastructure/repositories/TransactionManager");
7
+ const crypto_1 = require("crypto");
8
+ class TagProjectUseCase {
9
+ constructor() {
10
+ this.tagRepo = new TagRepository_1.TagRepository();
11
+ this.projectRepo = new ProjectRepository_1.ProjectRepository();
12
+ this.transactionManager = new TransactionManager_1.TransactionManager();
13
+ }
14
+ addTag(projectId, tagName) {
15
+ const project = this.projectRepo.findById(projectId);
16
+ if (!project) {
17
+ throw new Error(`Project not found: ${projectId}`);
18
+ }
19
+ this.transactionManager.executeTransaction(() => {
20
+ let tag = this.tagRepo.findByName(tagName);
21
+ if (!tag) {
22
+ tag = {
23
+ id: (0, crypto_1.randomUUID)(),
24
+ name: tagName,
25
+ created_at: new Date().toISOString()
26
+ };
27
+ this.tagRepo.create(tag);
28
+ }
29
+ this.tagRepo.addTagToProject(projectId, tag.id);
30
+ });
31
+ }
32
+ removeTag(projectId, tagName) {
33
+ const tag = this.tagRepo.findByName(tagName);
34
+ if (!tag) {
35
+ return; // Tag doesn't exist
36
+ }
37
+ this.tagRepo.removeTagFromProject(projectId, tag.id);
38
+ }
39
+ }
40
+ exports.TagProjectUseCase = TagProjectUseCase;
41
+ //# sourceMappingURL=TagProjectUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagProjectUseCase.js","sourceRoot":"","sources":["../../../src/application/use_cases/TagProjectUseCase.ts"],"names":[],"mappings":";;;AAAA,mFAAgF;AAChF,2FAAwF;AACxF,6FAA0F;AAC1F,mCAAoC;AAEpC,MAAa,iBAAiB;IAK5B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,6BAAa,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,qCAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,uCAAkB,EAAE,CAAC;IACrD,CAAC;IAEM,MAAM,CAAC,SAAiB,EAAE,OAAe;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG;oBACJ,EAAE,EAAE,IAAA,mBAAU,GAAE;oBAChB,IAAI,EAAE,OAAO;oBACb,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACrC,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,SAAiB,EAAE,OAAe;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,oBAAoB;QAC9B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAxCD,8CAwCC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Interfaz para un patrón de configuración de proyecto
3
+ */
4
+ export interface ProjectPattern {
5
+ filename: string;
6
+ language: string;
7
+ category: 'runtime' | 'framework' | 'build-tool' | 'dependency-manager' | 'config';
8
+ }
9
+ /**
10
+ * Registro de patrones de configuración para detectar proyectos
11
+ * Soporta: Node.js, Python, Rust, Go, Java, PHP, Ruby
12
+ */
13
+ export declare const PROJECT_PATTERNS: ProjectPattern[];
14
+ /**
15
+ * Obtiene todos los patrones de configuración disponibles
16
+ * @returns Array de todos los patrones
17
+ */
18
+ export declare function getAllPatterns(): ProjectPattern[];
19
+ /**
20
+ * Obtiene patrones para un lenguaje específico
21
+ * @param language Lenguaje a filtrar
22
+ * @returns Patrones que coinciden con el lenguaje
23
+ */
24
+ export declare function getPatternsByLanguage(language: string): ProjectPattern[];
25
+ /**
26
+ * Obtiene patrones por categoría
27
+ * @param category Categoría a filtrar
28
+ * @returns Patrones que coinciden con la categoría
29
+ */
30
+ export declare function getPatternsByCategory(category: 'runtime' | 'framework' | 'build-tool' | 'dependency-manager' | 'config'): ProjectPattern[];
31
+ /**
32
+ * Obtiene el patrón para un nombre de archivo específico
33
+ * @param filename Nombre del archivo
34
+ * @returns Patrón correspondiente o undefined
35
+ */
36
+ export declare function getPatternByFilename(filename: string): ProjectPattern | undefined;
37
+ /**
38
+ * Obtiene todos los lenguajes únicos soportados
39
+ * @returns Array de lenguajes únicos
40
+ */
41
+ export declare function getSupportedLanguages(): string[];
42
+ /**
43
+ * Obtiene todos los nombres de archivo que se usan para detectar proyectos
44
+ * @returns Array de nombres de archivo
45
+ */
46
+ export declare function getAllConfigFilenames(): string[];
47
+ //# sourceMappingURL=ProjectPatterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectPatterns.d.ts","sourceRoot":"","sources":["../../../src/domain/patterns/ProjectPatterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,oBAAoB,GAAG,QAAQ,CAAC;CACpF;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAkJ5C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAExE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,oBAAoB,GAAG,QAAQ,GACjF,cAAc,EAAE,CAElB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAGhD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROJECT_PATTERNS = void 0;
4
+ exports.getAllPatterns = getAllPatterns;
5
+ exports.getPatternsByLanguage = getPatternsByLanguage;
6
+ exports.getPatternsByCategory = getPatternsByCategory;
7
+ exports.getPatternByFilename = getPatternByFilename;
8
+ exports.getSupportedLanguages = getSupportedLanguages;
9
+ exports.getAllConfigFilenames = getAllConfigFilenames;
10
+ /**
11
+ * Registro de patrones de configuración para detectar proyectos
12
+ * Soporta: Node.js, Python, Rust, Go, Java, PHP, Ruby
13
+ */
14
+ exports.PROJECT_PATTERNS = [
15
+ // Node.js / JavaScript / TypeScript
16
+ {
17
+ filename: 'package.json',
18
+ language: 'Node.js',
19
+ category: 'runtime',
20
+ },
21
+ {
22
+ filename: 'package-lock.json',
23
+ language: 'Node.js',
24
+ category: 'dependency-manager',
25
+ },
26
+ {
27
+ filename: 'yarn.lock',
28
+ language: 'Node.js',
29
+ category: 'dependency-manager',
30
+ },
31
+ {
32
+ filename: 'pnpm-lock.yaml',
33
+ language: 'Node.js',
34
+ category: 'dependency-manager',
35
+ },
36
+ {
37
+ filename: 'tsconfig.json',
38
+ language: 'TypeScript',
39
+ category: 'config',
40
+ },
41
+ // Python
42
+ {
43
+ filename: 'requirements.txt',
44
+ language: 'Python',
45
+ category: 'dependency-manager',
46
+ },
47
+ {
48
+ filename: 'pyproject.toml',
49
+ language: 'Python',
50
+ category: 'config',
51
+ },
52
+ {
53
+ filename: 'setup.py',
54
+ language: 'Python',
55
+ category: 'build-tool',
56
+ },
57
+ {
58
+ filename: 'setup.cfg',
59
+ language: 'Python',
60
+ category: 'config',
61
+ },
62
+ {
63
+ filename: 'Pipfile',
64
+ language: 'Python',
65
+ category: 'dependency-manager',
66
+ },
67
+ {
68
+ filename: 'Pipfile.lock',
69
+ language: 'Python',
70
+ category: 'dependency-manager',
71
+ },
72
+ {
73
+ filename: 'poetry.lock',
74
+ language: 'Python',
75
+ category: 'dependency-manager',
76
+ },
77
+ // Rust
78
+ {
79
+ filename: 'Cargo.toml',
80
+ language: 'Rust',
81
+ category: 'config',
82
+ },
83
+ {
84
+ filename: 'Cargo.lock',
85
+ language: 'Rust',
86
+ category: 'dependency-manager',
87
+ },
88
+ // Go
89
+ {
90
+ filename: 'go.mod',
91
+ language: 'Go',
92
+ category: 'config',
93
+ },
94
+ {
95
+ filename: 'go.sum',
96
+ language: 'Go',
97
+ category: 'dependency-manager',
98
+ },
99
+ // Java
100
+ {
101
+ filename: 'pom.xml',
102
+ language: 'Java',
103
+ category: 'build-tool',
104
+ },
105
+ {
106
+ filename: 'build.gradle',
107
+ language: 'Java',
108
+ category: 'build-tool',
109
+ },
110
+ {
111
+ filename: 'build.gradle.kts',
112
+ language: 'Java',
113
+ category: 'build-tool',
114
+ },
115
+ // PHP
116
+ {
117
+ filename: 'composer.json',
118
+ language: 'PHP',
119
+ category: 'config',
120
+ },
121
+ {
122
+ filename: 'composer.lock',
123
+ language: 'PHP',
124
+ category: 'dependency-manager',
125
+ },
126
+ // Ruby
127
+ {
128
+ filename: 'Gemfile',
129
+ language: 'Ruby',
130
+ category: 'dependency-manager',
131
+ },
132
+ {
133
+ filename: 'Gemfile.lock',
134
+ language: 'Ruby',
135
+ category: 'dependency-manager',
136
+ },
137
+ // Generic
138
+ {
139
+ filename: 'Makefile',
140
+ language: 'Generic',
141
+ category: 'build-tool',
142
+ },
143
+ {
144
+ filename: 'CMakeLists.txt',
145
+ language: 'Generic',
146
+ category: 'build-tool',
147
+ },
148
+ {
149
+ filename: '.editorconfig',
150
+ language: 'Generic',
151
+ category: 'config',
152
+ },
153
+ ];
154
+ /**
155
+ * Obtiene todos los patrones de configuración disponibles
156
+ * @returns Array de todos los patrones
157
+ */
158
+ function getAllPatterns() {
159
+ return [...exports.PROJECT_PATTERNS];
160
+ }
161
+ /**
162
+ * Obtiene patrones para un lenguaje específico
163
+ * @param language Lenguaje a filtrar
164
+ * @returns Patrones que coinciden con el lenguaje
165
+ */
166
+ function getPatternsByLanguage(language) {
167
+ return exports.PROJECT_PATTERNS.filter((p) => p.language === language);
168
+ }
169
+ /**
170
+ * Obtiene patrones por categoría
171
+ * @param category Categoría a filtrar
172
+ * @returns Patrones que coinciden con la categoría
173
+ */
174
+ function getPatternsByCategory(category) {
175
+ return exports.PROJECT_PATTERNS.filter((p) => p.category === category);
176
+ }
177
+ /**
178
+ * Obtiene el patrón para un nombre de archivo específico
179
+ * @param filename Nombre del archivo
180
+ * @returns Patrón correspondiente o undefined
181
+ */
182
+ function getPatternByFilename(filename) {
183
+ return exports.PROJECT_PATTERNS.find((p) => p.filename === filename);
184
+ }
185
+ /**
186
+ * Obtiene todos los lenguajes únicos soportados
187
+ * @returns Array de lenguajes únicos
188
+ */
189
+ function getSupportedLanguages() {
190
+ const languages = new Set(exports.PROJECT_PATTERNS.map((p) => p.language));
191
+ return Array.from(languages).sort();
192
+ }
193
+ /**
194
+ * Obtiene todos los nombres de archivo que se usan para detectar proyectos
195
+ * @returns Array de nombres de archivo
196
+ */
197
+ function getAllConfigFilenames() {
198
+ return exports.PROJECT_PATTERNS.map((p) => p.filename).sort();
199
+ }
200
+ //# sourceMappingURL=ProjectPatterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectPatterns.js","sourceRoot":"","sources":["../../../src/domain/patterns/ProjectPatterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface GitStatus {
2
+ isGitRepo: boolean;
3
+ branch: string | null;
4
+ uncommittedChanges: number;
5
+ unpushedCommits: number;
6
+ hasRemote: boolean;
7
+ }
8
+ export declare class GitService {
9
+ /**
10
+ * Get git status for a project path
11
+ */
12
+ getStatus(projectPath: string): GitStatus;
13
+ private isGitRepository;
14
+ private getCurrentBranch;
15
+ private getUncommittedChangesCount;
16
+ private hasRemote;
17
+ private getUnpushedCommitsCount;
18
+ /**
19
+ * Format git status for display
20
+ */
21
+ formatStatus(status: GitStatus): string;
22
+ }
23
+ //# sourceMappingURL=GitService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitService.d.ts","sourceRoot":"","sources":["../../../src/domain/services/GitService.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB;;OAEG;IACI,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IA6BhD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;CAqB/C"}
@@ -0,0 +1,155 @@
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.GitService = void 0;
37
+ const child_process_1 = require("child_process");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ class GitService {
41
+ /**
42
+ * Get git status for a project path
43
+ */
44
+ getStatus(projectPath) {
45
+ const defaultStatus = {
46
+ isGitRepo: false,
47
+ branch: null,
48
+ uncommittedChanges: 0,
49
+ unpushedCommits: 0,
50
+ hasRemote: false
51
+ };
52
+ if (!this.isGitRepository(projectPath)) {
53
+ return defaultStatus;
54
+ }
55
+ defaultStatus.isGitRepo = true;
56
+ try {
57
+ defaultStatus.branch = this.getCurrentBranch(projectPath);
58
+ defaultStatus.uncommittedChanges = this.getUncommittedChangesCount(projectPath);
59
+ defaultStatus.hasRemote = this.hasRemote(projectPath);
60
+ if (defaultStatus.hasRemote) {
61
+ defaultStatus.unpushedCommits = this.getUnpushedCommitsCount(projectPath);
62
+ }
63
+ }
64
+ catch {
65
+ // If any git command fails, return what we have
66
+ }
67
+ return defaultStatus;
68
+ }
69
+ isGitRepository(projectPath) {
70
+ return fs.existsSync(path.join(projectPath, '.git'));
71
+ }
72
+ getCurrentBranch(projectPath) {
73
+ try {
74
+ const result = (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', {
75
+ cwd: projectPath,
76
+ encoding: 'utf-8',
77
+ timeout: 5000,
78
+ stdio: ['pipe', 'pipe', 'pipe']
79
+ });
80
+ return result.trim();
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ getUncommittedChangesCount(projectPath) {
87
+ try {
88
+ const result = (0, child_process_1.execSync)('git status --porcelain', {
89
+ cwd: projectPath,
90
+ encoding: 'utf-8',
91
+ timeout: 5000,
92
+ stdio: ['pipe', 'pipe', 'pipe']
93
+ });
94
+ const lines = result.trim().split('\n').filter(l => l.length > 0);
95
+ return lines.length;
96
+ }
97
+ catch {
98
+ return 0;
99
+ }
100
+ }
101
+ hasRemote(projectPath) {
102
+ try {
103
+ const result = (0, child_process_1.execSync)('git remote', {
104
+ cwd: projectPath,
105
+ encoding: 'utf-8',
106
+ timeout: 5000,
107
+ stdio: ['pipe', 'pipe', 'pipe']
108
+ });
109
+ return result.trim().length > 0;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ getUnpushedCommitsCount(projectPath) {
116
+ try {
117
+ const result = (0, child_process_1.execSync)('git log @{u}..HEAD --oneline 2>nul', {
118
+ cwd: projectPath,
119
+ encoding: 'utf-8',
120
+ timeout: 5000,
121
+ shell: true,
122
+ stdio: ['pipe', 'pipe', 'pipe']
123
+ });
124
+ const lines = result.trim().split('\n').filter(l => l.length > 0);
125
+ return lines.length;
126
+ }
127
+ catch {
128
+ return 0;
129
+ }
130
+ }
131
+ /**
132
+ * Format git status for display
133
+ */
134
+ formatStatus(status) {
135
+ if (!status.isGitRepo) {
136
+ return 'Not a git repository';
137
+ }
138
+ const parts = [];
139
+ if (status.branch) {
140
+ parts.push(`Branch: ${status.branch}`);
141
+ }
142
+ if (status.uncommittedChanges > 0) {
143
+ parts.push(`⚠ ${status.uncommittedChanges} uncommitted changes`);
144
+ }
145
+ if (status.unpushedCommits > 0) {
146
+ parts.push(`↑ ${status.unpushedCommits} unpushed commits`);
147
+ }
148
+ if (parts.length === 1 && status.branch) {
149
+ parts.push('✓ Clean');
150
+ }
151
+ return parts.join('\n');
152
+ }
153
+ }
154
+ exports.GitService = GitService;
155
+ //# sourceMappingURL=GitService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitService.js","sourceRoot":"","sources":["../../../src/domain/services/GitService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAU7B,MAAa,UAAU;IACrB;;OAEG;IACI,SAAS,CAAC,WAAmB;QAClC,MAAM,aAAa,GAAc;YAC/B,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,IAAI;YACZ,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,KAAK;SACjB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;QAE/B,IAAI,CAAC;YACH,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC1D,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;YAChF,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC5B,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,eAAe,CAAC,WAAmB;QACzC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,gBAAgB,CAAC,WAAmB;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,iCAAiC,EAAE;gBACzD,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,WAAmB;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,wBAAwB,EAAE;gBAChD,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,WAAmB;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,YAAY,EAAE;gBACpC,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,WAAmB;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,oCAAoC,EAAE;gBAC5D,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAW;gBAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,MAAiB;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,sBAAsB,CAAC;QAChC,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,MAAM,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,kBAAkB,sBAAsB,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,eAAe,mBAAmB,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AAxHD,gCAwHC"}