@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,318 @@
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.DatabaseConnection = void 0;
40
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
41
+ const path = __importStar(require("path"));
42
+ const fs = __importStar(require("fs"));
43
+ const os = __importStar(require("os"));
44
+ /**
45
+ * DatabaseConnection manages SQLite database connectivity for Project Hub
46
+ * Implements connection pooling and provides core database operations
47
+ */
48
+ class DatabaseConnection {
49
+ constructor() {
50
+ this.db = null;
51
+ this.connectionPool = [];
52
+ this.poolSize = 5;
53
+ this.isOpen = false;
54
+ // Expand home directory and create path to projects.db
55
+ const homeDir = os.homedir();
56
+ const projectHubDir = path.join(homeDir, '.project-hub');
57
+ this.dbPath = path.join(projectHubDir, 'projects.db');
58
+ }
59
+ /**
60
+ * Get singleton instance of DatabaseConnection
61
+ */
62
+ static getInstance() {
63
+ if (!DatabaseConnection.instance) {
64
+ DatabaseConnection.instance = new DatabaseConnection();
65
+ }
66
+ return DatabaseConnection.instance;
67
+ }
68
+ /**
69
+ * Reset instance for testing purposes
70
+ */
71
+ static resetInstanceForTesting() {
72
+ if (DatabaseConnection.instance && DatabaseConnection.instance.isOpen) {
73
+ DatabaseConnection.instance.close();
74
+ }
75
+ DatabaseConnection.instance = undefined;
76
+ }
77
+ /**
78
+ * Set database path for testing
79
+ */
80
+ setTestDatabasePath(dbPath) {
81
+ if (this.isOpen) {
82
+ this.close();
83
+ }
84
+ this.dbPath = dbPath;
85
+ }
86
+ /**
87
+ * Open database connection
88
+ * Creates directory structure if it doesn't exist
89
+ * Initializes connection pool
90
+ */
91
+ open() {
92
+ try {
93
+ if (this.isOpen && this.db) {
94
+ return;
95
+ }
96
+ // Ensure ~/.project-hub directory exists
97
+ const homeDir = os.homedir();
98
+ const projectHubDir = path.join(homeDir, '.project-hub');
99
+ if (!fs.existsSync(projectHubDir)) {
100
+ fs.mkdirSync(projectHubDir, { recursive: true });
101
+ }
102
+ // Create logs directory for future use
103
+ const logsDir = path.join(projectHubDir, 'logs');
104
+ if (!fs.existsSync(logsDir)) {
105
+ fs.mkdirSync(logsDir, { recursive: true });
106
+ }
107
+ // Open main database connection
108
+ this.db = new better_sqlite3_1.default(this.dbPath);
109
+ // Enable foreign keys
110
+ this.db.pragma('foreign_keys = ON');
111
+ // Set journal mode for better concurrent access
112
+ this.db.pragma('journal_mode = WAL');
113
+ // Initialize connection pool
114
+ this.initializeConnectionPool();
115
+ this.isOpen = true;
116
+ }
117
+ catch (error) {
118
+ throw new Error(`Failed to open database at ${this.dbPath}: ${error instanceof Error ? error.message : String(error)}`);
119
+ }
120
+ }
121
+ /**
122
+ * Initialize connection pool for concurrent operations
123
+ */
124
+ initializeConnectionPool() {
125
+ try {
126
+ for (let i = 0; i < this.poolSize; i++) {
127
+ const poolDb = new better_sqlite3_1.default(this.dbPath);
128
+ poolDb.pragma('foreign_keys = ON');
129
+ this.connectionPool.push(poolDb);
130
+ }
131
+ }
132
+ catch (error) {
133
+ throw new Error(`Failed to initialize connection pool: ${error instanceof Error ? error.message : String(error)}`);
134
+ }
135
+ }
136
+ /**
137
+ * Get a connection from the pool
138
+ */
139
+ getPoolConnection() {
140
+ if (this.connectionPool.length === 0) {
141
+ // Create a new connection if pool is exhausted
142
+ const newDb = new better_sqlite3_1.default(this.dbPath);
143
+ newDb.pragma('foreign_keys = ON');
144
+ return newDb;
145
+ }
146
+ const db = this.connectionPool.pop();
147
+ if (!db) {
148
+ throw new Error('Failed to retrieve connection from pool');
149
+ }
150
+ return db;
151
+ }
152
+ /**
153
+ * Return a connection to the pool
154
+ */
155
+ returnPoolConnection(db) {
156
+ if (this.connectionPool.length < this.poolSize) {
157
+ this.connectionPool.push(db);
158
+ }
159
+ else {
160
+ db.close();
161
+ }
162
+ }
163
+ /**
164
+ * Close database connection and clean up resources
165
+ */
166
+ close() {
167
+ try {
168
+ // Close all pooled connections
169
+ for (const poolDb of this.connectionPool) {
170
+ try {
171
+ poolDb.close();
172
+ }
173
+ catch (err) {
174
+ // Ignore errors during pool cleanup
175
+ }
176
+ }
177
+ this.connectionPool = [];
178
+ // Close main connection
179
+ if (this.db) {
180
+ this.db.close();
181
+ this.db = null;
182
+ }
183
+ this.isOpen = false;
184
+ }
185
+ catch (error) {
186
+ throw new Error(`Failed to close database: ${error instanceof Error ? error.message : String(error)}`);
187
+ }
188
+ }
189
+ /**
190
+ * Execute a SQL statement without returning results
191
+ * Used for INSERT, UPDATE, DELETE operations
192
+ */
193
+ execute(sql, params) {
194
+ this.ensureOpen();
195
+ try {
196
+ if (!this.db) {
197
+ throw new Error('Database connection is not initialized');
198
+ }
199
+ const stmt = this.db.prepare(sql);
200
+ if (params && params.length > 0) {
201
+ stmt.run(...params);
202
+ }
203
+ else {
204
+ stmt.run();
205
+ }
206
+ }
207
+ catch (error) {
208
+ throw new Error(`Failed to execute SQL: ${error instanceof Error ? error.message : String(error)}`);
209
+ }
210
+ }
211
+ /**
212
+ * Prepare a SQL statement for reuse
213
+ * Returns a prepared statement object
214
+ */
215
+ prepare(sql) {
216
+ this.ensureOpen();
217
+ try {
218
+ if (!this.db) {
219
+ throw new Error('Database connection is not initialized');
220
+ }
221
+ return this.db.prepare(sql);
222
+ }
223
+ catch (error) {
224
+ throw new Error(`Failed to prepare statement: ${error instanceof Error ? error.message : String(error)}`);
225
+ }
226
+ }
227
+ /**
228
+ * Execute a SELECT query and return all results
229
+ */
230
+ query(sql, params) {
231
+ this.ensureOpen();
232
+ try {
233
+ if (!this.db) {
234
+ throw new Error('Database connection is not initialized');
235
+ }
236
+ const stmt = this.db.prepare(sql);
237
+ if (params && params.length > 0) {
238
+ return stmt.all(...params);
239
+ }
240
+ else {
241
+ return stmt.all();
242
+ }
243
+ }
244
+ catch (error) {
245
+ throw new Error(`Failed to query: ${error instanceof Error ? error.message : String(error)}`);
246
+ }
247
+ }
248
+ /**
249
+ * Execute a SELECT query and return first result
250
+ */
251
+ queryOne(sql, params) {
252
+ this.ensureOpen();
253
+ try {
254
+ if (!this.db) {
255
+ throw new Error('Database connection is not initialized');
256
+ }
257
+ const stmt = this.db.prepare(sql);
258
+ if (params && params.length > 0) {
259
+ return stmt.get(...params);
260
+ }
261
+ else {
262
+ return stmt.get();
263
+ }
264
+ }
265
+ catch (error) {
266
+ throw new Error(`Failed to query one: ${error instanceof Error ? error.message : String(error)}`);
267
+ }
268
+ }
269
+ /**
270
+ * Execute a transaction
271
+ * All operations within the callback must succeed or all will rollback
272
+ */
273
+ transaction(callback) {
274
+ this.ensureOpen();
275
+ try {
276
+ if (!this.db) {
277
+ throw new Error('Database connection is not initialized');
278
+ }
279
+ const transaction = this.db.transaction(callback);
280
+ return transaction();
281
+ }
282
+ catch (error) {
283
+ throw new Error(`Transaction failed: ${error instanceof Error ? error.message : String(error)}`);
284
+ }
285
+ }
286
+ /**
287
+ * Verify database connection is open
288
+ */
289
+ ensureOpen() {
290
+ if (!this.isOpen || !this.db) {
291
+ throw new Error('Database connection is not open. Call open() first.');
292
+ }
293
+ }
294
+ /**
295
+ * Get the database path
296
+ */
297
+ getDbPath() {
298
+ return this.dbPath;
299
+ }
300
+ /**
301
+ * Check if database connection is open
302
+ */
303
+ isConnected() {
304
+ return this.isOpen;
305
+ }
306
+ /**
307
+ * Get raw database instance (use with caution)
308
+ */
309
+ getRawDatabase() {
310
+ this.ensureOpen();
311
+ if (!this.db) {
312
+ throw new Error('Database connection is not initialized');
313
+ }
314
+ return this.db;
315
+ }
316
+ }
317
+ exports.DatabaseConnection = DatabaseConnection;
318
+ //# sourceMappingURL=DatabaseConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseConnection.js","sourceRoot":"","sources":["../../../src/infrastructure/database/DatabaseConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Validation report structure
3
+ */
4
+ export interface ValidationReport {
5
+ isValid: boolean;
6
+ schema: SchemaValidationResult;
7
+ constraints: ConstraintValidationResult;
8
+ errors: string[];
9
+ warnings: string[];
10
+ repairAttempted: boolean;
11
+ repairSuccessful: boolean;
12
+ }
13
+ /**
14
+ * Schema validation result
15
+ */
16
+ export interface SchemaValidationResult {
17
+ isValid: boolean;
18
+ missingTables: string[];
19
+ invalidColumns: ColumnValidationResult[];
20
+ invalidIndexes: string[];
21
+ }
22
+ /**
23
+ * Column validation result
24
+ */
25
+ export interface ColumnValidationResult {
26
+ table: string;
27
+ column: string;
28
+ expectedType: string;
29
+ actualType: string;
30
+ issue: string;
31
+ }
32
+ /**
33
+ * Constraint validation result
34
+ */
35
+ export interface ConstraintValidationResult {
36
+ isValid: boolean;
37
+ orphanRecords: OrphanRecord[];
38
+ violatedConstraints: ConstraintViolation[];
39
+ }
40
+ /**
41
+ * Orphan record structure
42
+ */
43
+ export interface OrphanRecord {
44
+ table: string;
45
+ foreignKeyColumn: string;
46
+ recordCount: number;
47
+ referencedTable: string;
48
+ }
49
+ /**
50
+ * Constraint violation structure
51
+ */
52
+ export interface ConstraintViolation {
53
+ table: string;
54
+ constraint: string;
55
+ description: string;
56
+ severity: 'critical' | 'warning';
57
+ }
58
+ /**
59
+ * DatabaseValidator provides comprehensive database integrity checking and repair capabilities
60
+ * Validates schema consistency, foreign key constraints, and data integrity
61
+ */
62
+ export declare class DatabaseValidator {
63
+ private db;
64
+ /**
65
+ * Expected database schema definition
66
+ */
67
+ private expectedSchema;
68
+ /**
69
+ * Expected indexes
70
+ */
71
+ private expectedIndexes;
72
+ constructor();
73
+ /**
74
+ * Run comprehensive database validation
75
+ * @returns ValidationReport with complete validation results
76
+ */
77
+ validate(): ValidationReport;
78
+ /**
79
+ * Validate database schema
80
+ * Checks that all required tables exist with correct columns and structure
81
+ */
82
+ private validateSchema;
83
+ /**
84
+ * Validate database constraints
85
+ * Checks for orphan records and constraint violations
86
+ */
87
+ private validateConstraints;
88
+ /**
89
+ * Attempt to repair database integrity issues
90
+ * Returns report of repair attempts
91
+ */
92
+ repair(): ValidationReport;
93
+ /**
94
+ * Recreate missing tables
95
+ */
96
+ private repairMissingTables;
97
+ /**
98
+ * Add missing columns to tables
99
+ */
100
+ private repairInvalidColumns;
101
+ /**
102
+ * Recreate missing indexes
103
+ */
104
+ private repairMissingIndexes;
105
+ /**
106
+ * Remove orphan records
107
+ */
108
+ private repairOrphanRecords;
109
+ /**
110
+ * Repair constraint violations
111
+ */
112
+ private repairConstraintViolations;
113
+ /**
114
+ * Helper: Check if table exists
115
+ */
116
+ private tableExists;
117
+ /**
118
+ * Helper: Get table info (columns)
119
+ */
120
+ private getTableInfo;
121
+ /**
122
+ * Helper: Get existing indexes
123
+ */
124
+ private getExistingIndexes;
125
+ /**
126
+ * Helper: Check for orphan records
127
+ */
128
+ private checkOrphanRecords;
129
+ /**
130
+ * Helper: Check for duplicate unique constraint values
131
+ */
132
+ private checkDuplicateUniqueConstraint;
133
+ /**
134
+ * Helper: Check for NULL values in columns
135
+ */
136
+ private checkNullConstraints;
137
+ /**
138
+ * Helper: Get default value for a column type
139
+ */
140
+ private getDefaultValueForType;
141
+ /**
142
+ * Helper: Remove duplicate unique values (keep first, delete rest)
143
+ */
144
+ private removeDuplicateUniqueValues;
145
+ /**
146
+ * Helper: Remove records with NULL in specified column
147
+ */
148
+ private removeRecordsWithNullColumn;
149
+ /**
150
+ * Get a detailed validation summary as formatted string
151
+ */
152
+ getValidationSummary(report: ValidationReport): string;
153
+ }
154
+ //# sourceMappingURL=DatabaseValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseValidator.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/DatabaseValidator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,WAAW,EAAE,0BAA0B,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACzC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAqB;IAE/B;;OAEG;IACH,OAAO,CAAC,cAAc,CAgDpB;IAEF;;OAEG;IACH,OAAO,CAAC,eAAe,CAOrB;;IAMF;;;OAGG;IACI,QAAQ,IAAI,gBAAgB;IAmDnC;;;OAGG;IACH,OAAO,CAAC,cAAc;IAqDtB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuF3B;;;OAGG;IACI,MAAM,IAAI,gBAAgB;IA+CjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkD3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAatC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAUnC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAOnC;;OAEG;IACI,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;CA8B9D"}