@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.
- package/README.md +98 -0
- package/dist/application/ConfigManager.d.ts +73 -0
- package/dist/application/ConfigManager.d.ts.map +1 -0
- package/dist/application/ConfigManager.js +253 -0
- package/dist/application/ConfigManager.js.map +1 -0
- package/dist/application/errors/ErrorHandler.d.ts +27 -0
- package/dist/application/errors/ErrorHandler.d.ts.map +1 -0
- package/dist/application/errors/ErrorHandler.js +88 -0
- package/dist/application/errors/ErrorHandler.js.map +1 -0
- package/dist/application/state/StateManager.d.ts +26 -0
- package/dist/application/state/StateManager.d.ts.map +1 -0
- package/dist/application/state/StateManager.js +114 -0
- package/dist/application/state/StateManager.js.map +1 -0
- package/dist/application/use_cases/AddProjectUseCase.d.ts +9 -0
- package/dist/application/use_cases/AddProjectUseCase.d.ts.map +1 -0
- package/dist/application/use_cases/AddProjectUseCase.js +85 -0
- package/dist/application/use_cases/AddProjectUseCase.js.map +1 -0
- package/dist/application/use_cases/ListProjectsUseCase.d.ts +7 -0
- package/dist/application/use_cases/ListProjectsUseCase.d.ts.map +1 -0
- package/dist/application/use_cases/ListProjectsUseCase.js +14 -0
- package/dist/application/use_cases/ListProjectsUseCase.js.map +1 -0
- package/dist/application/use_cases/OpenProjectUseCase.d.ts +10 -0
- package/dist/application/use_cases/OpenProjectUseCase.d.ts.map +1 -0
- package/dist/application/use_cases/OpenProjectUseCase.js +168 -0
- package/dist/application/use_cases/OpenProjectUseCase.js.map +1 -0
- package/dist/application/use_cases/RemoveProjectUseCase.d.ts +7 -0
- package/dist/application/use_cases/RemoveProjectUseCase.d.ts.map +1 -0
- package/dist/application/use_cases/RemoveProjectUseCase.js +24 -0
- package/dist/application/use_cases/RemoveProjectUseCase.js.map +1 -0
- package/dist/application/use_cases/ScanProjectsUseCase.d.ts +13 -0
- package/dist/application/use_cases/ScanProjectsUseCase.d.ts.map +1 -0
- package/dist/application/use_cases/ScanProjectsUseCase.js +57 -0
- package/dist/application/use_cases/ScanProjectsUseCase.js.map +1 -0
- package/dist/application/use_cases/SyncProjectsUseCase.d.ts +12 -0
- package/dist/application/use_cases/SyncProjectsUseCase.d.ts.map +1 -0
- package/dist/application/use_cases/SyncProjectsUseCase.js +74 -0
- package/dist/application/use_cases/SyncProjectsUseCase.js.map +1 -0
- package/dist/application/use_cases/SystemDiagnostics.d.ts +16 -0
- package/dist/application/use_cases/SystemDiagnostics.d.ts.map +1 -0
- package/dist/application/use_cases/SystemDiagnostics.js +35 -0
- package/dist/application/use_cases/SystemDiagnostics.js.map +1 -0
- package/dist/application/use_cases/TagProjectUseCase.d.ts +9 -0
- package/dist/application/use_cases/TagProjectUseCase.d.ts.map +1 -0
- package/dist/application/use_cases/TagProjectUseCase.js +41 -0
- package/dist/application/use_cases/TagProjectUseCase.js.map +1 -0
- package/dist/domain/patterns/ProjectPatterns.d.ts +47 -0
- package/dist/domain/patterns/ProjectPatterns.d.ts.map +1 -0
- package/dist/domain/patterns/ProjectPatterns.js +200 -0
- package/dist/domain/patterns/ProjectPatterns.js.map +1 -0
- package/dist/domain/services/GitService.d.ts +23 -0
- package/dist/domain/services/GitService.d.ts.map +1 -0
- package/dist/domain/services/GitService.js +155 -0
- package/dist/domain/services/GitService.js.map +1 -0
- package/dist/domain/services/IgnoreFileParser.d.ts +55 -0
- package/dist/domain/services/IgnoreFileParser.d.ts.map +1 -0
- package/dist/domain/services/IgnoreFileParser.js +200 -0
- package/dist/domain/services/IgnoreFileParser.js.map +1 -0
- package/dist/domain/services/ProjectScanner.d.ts +65 -0
- package/dist/domain/services/ProjectScanner.d.ts.map +1 -0
- package/dist/domain/services/ProjectScanner.js +207 -0
- package/dist/domain/services/ProjectScanner.js.map +1 -0
- package/dist/domain/services/TechnologyDetector.d.ts +78 -0
- package/dist/domain/services/TechnologyDetector.d.ts.map +1 -0
- package/dist/domain/services/TechnologyDetector.js +633 -0
- package/dist/domain/services/TechnologyDetector.js.map +1 -0
- package/dist/domain/services/ToolDetector.d.ts +74 -0
- package/dist/domain/services/ToolDetector.d.ts.map +1 -0
- package/dist/domain/services/ToolDetector.js +344 -0
- package/dist/domain/services/ToolDetector.js.map +1 -0
- package/dist/domain/services/index.d.ts +5 -0
- package/dist/domain/services/index.d.ts.map +1 -0
- package/dist/domain/services/index.js +12 -0
- package/dist/domain/services/index.js.map +1 -0
- package/dist/domain/types/Config.d.ts +37 -0
- package/dist/domain/types/Config.d.ts.map +1 -0
- package/dist/domain/types/Config.js +6 -0
- package/dist/domain/types/Config.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/database/DatabaseConnection.d.ts +88 -0
- package/dist/infrastructure/database/DatabaseConnection.d.ts.map +1 -0
- package/dist/infrastructure/database/DatabaseConnection.js +318 -0
- package/dist/infrastructure/database/DatabaseConnection.js.map +1 -0
- package/dist/infrastructure/database/DatabaseValidator.d.ts +154 -0
- package/dist/infrastructure/database/DatabaseValidator.d.ts.map +1 -0
- package/dist/infrastructure/database/DatabaseValidator.js +583 -0
- package/dist/infrastructure/database/DatabaseValidator.js.map +1 -0
- package/dist/infrastructure/database/index.d.ts +8 -0
- package/dist/infrastructure/database/index.d.ts.map +1 -0
- package/dist/infrastructure/database/index.js +14 -0
- package/dist/infrastructure/database/index.js.map +1 -0
- package/dist/infrastructure/database/migrations/001_initial.d.ts +24 -0
- package/dist/infrastructure/database/migrations/001_initial.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/001_initial.js +109 -0
- package/dist/infrastructure/database/migrations/001_initial.js.map +1 -0
- package/dist/infrastructure/database/migrations/Migration.d.ts +27 -0
- package/dist/infrastructure/database/migrations/Migration.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/Migration.js +3 -0
- package/dist/infrastructure/database/migrations/Migration.js.map +1 -0
- package/dist/infrastructure/database/migrations/MigrationRunner.d.ts +52 -0
- package/dist/infrastructure/database/migrations/MigrationRunner.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/MigrationRunner.js +167 -0
- package/dist/infrastructure/database/migrations/MigrationRunner.js.map +1 -0
- package/dist/infrastructure/database/migrations/index.d.ts +10 -0
- package/dist/infrastructure/database/migrations/index.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/index.js +22 -0
- package/dist/infrastructure/database/migrations/index.js.map +1 -0
- package/dist/infrastructure/filesystem/DirectoryManager.d.ts +50 -0
- package/dist/infrastructure/filesystem/DirectoryManager.d.ts.map +1 -0
- package/dist/infrastructure/filesystem/DirectoryManager.js +143 -0
- package/dist/infrastructure/filesystem/DirectoryManager.js.map +1 -0
- package/dist/infrastructure/filesystem/index.d.ts +2 -0
- package/dist/infrastructure/filesystem/index.d.ts.map +1 -0
- package/dist/infrastructure/filesystem/index.js +6 -0
- package/dist/infrastructure/filesystem/index.js.map +1 -0
- package/dist/infrastructure/logging/LogRotator.d.ts +43 -0
- package/dist/infrastructure/logging/LogRotator.d.ts.map +1 -0
- package/dist/infrastructure/logging/LogRotator.js +172 -0
- package/dist/infrastructure/logging/LogRotator.js.map +1 -0
- package/dist/infrastructure/logging/Logger.d.ts +59 -0
- package/dist/infrastructure/logging/Logger.d.ts.map +1 -0
- package/dist/infrastructure/logging/Logger.js +182 -0
- package/dist/infrastructure/logging/Logger.js.map +1 -0
- package/dist/infrastructure/logging/index.d.ts +3 -0
- package/dist/infrastructure/logging/index.d.ts.map +1 -0
- package/dist/infrastructure/logging/index.js +8 -0
- package/dist/infrastructure/logging/index.js.map +1 -0
- package/dist/infrastructure/repositories/ProjectRepository.d.ts +20 -0
- package/dist/infrastructure/repositories/ProjectRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/ProjectRepository.js +61 -0
- package/dist/infrastructure/repositories/ProjectRepository.js.map +1 -0
- package/dist/infrastructure/repositories/QueryBuilder.d.ts +24 -0
- package/dist/infrastructure/repositories/QueryBuilder.d.ts.map +1 -0
- package/dist/infrastructure/repositories/QueryBuilder.js +92 -0
- package/dist/infrastructure/repositories/QueryBuilder.js.map +1 -0
- package/dist/infrastructure/repositories/TagRepository.d.ts +18 -0
- package/dist/infrastructure/repositories/TagRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/TagRepository.js +66 -0
- package/dist/infrastructure/repositories/TagRepository.js.map +1 -0
- package/dist/infrastructure/repositories/TechnologyRepository.d.ts +16 -0
- package/dist/infrastructure/repositories/TechnologyRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/TechnologyRepository.js +46 -0
- package/dist/infrastructure/repositories/TechnologyRepository.js.map +1 -0
- package/dist/infrastructure/repositories/TransactionManager.d.ts +11 -0
- package/dist/infrastructure/repositories/TransactionManager.d.ts.map +1 -0
- package/dist/infrastructure/repositories/TransactionManager.js +21 -0
- package/dist/infrastructure/repositories/TransactionManager.js.map +1 -0
- package/dist/infrastructure/ui/ScreenManager.d.ts +11 -0
- package/dist/infrastructure/ui/ScreenManager.d.ts.map +1 -0
- package/dist/infrastructure/ui/ScreenManager.js +69 -0
- package/dist/infrastructure/ui/ScreenManager.js.map +1 -0
- package/dist/ui/cli/CLI.d.ts +9 -0
- package/dist/ui/cli/CLI.d.ts.map +1 -0
- package/dist/ui/cli/CLI.js +211 -0
- package/dist/ui/cli/CLI.js.map +1 -0
- package/dist/ui/components/DetailsPanel.d.ts +11 -0
- package/dist/ui/components/DetailsPanel.d.ts.map +1 -0
- package/dist/ui/components/DetailsPanel.js +181 -0
- package/dist/ui/components/DetailsPanel.js.map +1 -0
- package/dist/ui/components/ProjectListView.d.ts +15 -0
- package/dist/ui/components/ProjectListView.d.ts.map +1 -0
- package/dist/ui/components/ProjectListView.js +122 -0
- package/dist/ui/components/ProjectListView.js.map +1 -0
- package/dist/ui/tui/TUIApplication.d.ts +17 -0
- package/dist/ui/tui/TUIApplication.d.ts.map +1 -0
- package/dist/ui/tui/TUIApplication.js +532 -0
- package/dist/ui/tui/TUIApplication.js.map +1 -0
- package/dist/ui/tui/Theme.d.ts +25 -0
- package/dist/ui/tui/Theme.d.ts.map +1 -0
- package/dist/ui/tui/Theme.js +62 -0
- package/dist/ui/tui/Theme.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a detected tool on the system
|
|
3
|
+
*/
|
|
4
|
+
export interface DetectedTool {
|
|
5
|
+
name: string;
|
|
6
|
+
path?: string;
|
|
7
|
+
version?: string;
|
|
8
|
+
available: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* ToolDetector detects installed tools and development environments
|
|
12
|
+
* Supports Windows, Linux, and macOS
|
|
13
|
+
*/
|
|
14
|
+
export declare class ToolDetector {
|
|
15
|
+
private readonly TIMEOUT_MS;
|
|
16
|
+
/**
|
|
17
|
+
* Detect all tools on the system
|
|
18
|
+
* @returns Map of tool categories to detected tools
|
|
19
|
+
*/
|
|
20
|
+
detectAll(): Map<string, DetectedTool[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Detect installed code editors
|
|
23
|
+
* Checks PATH for: VS Code, Cursor, Sublime Text, Neovim, Vim,
|
|
24
|
+
* and scans the Windows LocalAppData Programs tree for Kiro,
|
|
25
|
+
* Antigravity, and Antigravity IDE executables.
|
|
26
|
+
*/
|
|
27
|
+
detectEditors(): DetectedTool[];
|
|
28
|
+
/**
|
|
29
|
+
* Detect installed runtimes
|
|
30
|
+
*/
|
|
31
|
+
detectRuntimes(): DetectedTool[];
|
|
32
|
+
/**
|
|
33
|
+
* Detect development tools
|
|
34
|
+
* Includes: Git, Docker, Kiro, Claude Code, npm, yarn
|
|
35
|
+
*/
|
|
36
|
+
detectDevelopmentTools(): DetectedTool[];
|
|
37
|
+
/**
|
|
38
|
+
* Detect a single tool by command name
|
|
39
|
+
* @param command Command name to check
|
|
40
|
+
* @param checkVersion Whether to query command version (default true)
|
|
41
|
+
* @returns Tool detection result
|
|
42
|
+
*/
|
|
43
|
+
private detectTool;
|
|
44
|
+
/**
|
|
45
|
+
* Detect installed editors present as local program folders rather than
|
|
46
|
+
* resolved globally via PATH.
|
|
47
|
+
*/
|
|
48
|
+
private detectEditorsFromLocalPrograms;
|
|
49
|
+
/**
|
|
50
|
+
* Resolve absolute path of command
|
|
51
|
+
* @param command Command name to check
|
|
52
|
+
* @returns Executable path or undefined
|
|
53
|
+
*/
|
|
54
|
+
private getCommandPath;
|
|
55
|
+
/**
|
|
56
|
+
* Check if a command exists on the system
|
|
57
|
+
* @param command Command name to check
|
|
58
|
+
* @returns true if command exists, false otherwise
|
|
59
|
+
*/
|
|
60
|
+
private checkCommandExists;
|
|
61
|
+
/**
|
|
62
|
+
* Get version of a command
|
|
63
|
+
* @param command Command name
|
|
64
|
+
* @returns Version string or undefined
|
|
65
|
+
*/
|
|
66
|
+
private getVersion;
|
|
67
|
+
/**
|
|
68
|
+
* Parse version from command output
|
|
69
|
+
* @param output Command output
|
|
70
|
+
* @returns Parsed version string
|
|
71
|
+
*/
|
|
72
|
+
private parseVersion;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=ToolDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolDetector.d.ts","sourceRoot":"","sources":["../../../src/domain/services/ToolDetector.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAEnC;;;OAGG;IACI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAe/C;;;;;OAKG;IACI,aAAa,IAAI,YAAY,EAAE;IAgFtC;;OAEG;IACI,cAAc,IAAI,YAAY,EAAE;IA6CvC;;;OAGG;IACI,sBAAsB,IAAI,YAAY,EAAE;IA0C/C;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAmBlB;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAoCtC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAUtB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAgClB;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAUrB"}
|
|
@@ -0,0 +1,344 @@
|
|
|
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.ToolDetector = void 0;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
/**
|
|
42
|
+
* ToolDetector detects installed tools and development environments
|
|
43
|
+
* Supports Windows, Linux, and macOS
|
|
44
|
+
*/
|
|
45
|
+
class ToolDetector {
|
|
46
|
+
constructor() {
|
|
47
|
+
this.TIMEOUT_MS = 2000;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Detect all tools on the system
|
|
51
|
+
* @returns Map of tool categories to detected tools
|
|
52
|
+
*/
|
|
53
|
+
detectAll() {
|
|
54
|
+
const tools = new Map();
|
|
55
|
+
// Detect editors
|
|
56
|
+
tools.set('editors', this.detectEditors());
|
|
57
|
+
// Detect runtimes
|
|
58
|
+
tools.set('runtimes', this.detectRuntimes());
|
|
59
|
+
// Detect development tools
|
|
60
|
+
tools.set('tools', this.detectDevelopmentTools());
|
|
61
|
+
return tools;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Detect installed code editors
|
|
65
|
+
* Checks PATH for: VS Code, Cursor, Sublime Text, Neovim, Vim,
|
|
66
|
+
* and scans the Windows LocalAppData Programs tree for Kiro,
|
|
67
|
+
* Antigravity, and Antigravity IDE executables.
|
|
68
|
+
*/
|
|
69
|
+
detectEditors() {
|
|
70
|
+
const editors = [];
|
|
71
|
+
// VS Code
|
|
72
|
+
const vsCode = this.detectTool('code', false);
|
|
73
|
+
if (vsCode.available) {
|
|
74
|
+
editors.push({ name: 'VS Code', ...vsCode, available: true });
|
|
75
|
+
}
|
|
76
|
+
// Cursor
|
|
77
|
+
const cursor = this.detectTool('cursor', false);
|
|
78
|
+
if (cursor.available) {
|
|
79
|
+
editors.push({ name: 'Cursor', ...cursor, available: true });
|
|
80
|
+
}
|
|
81
|
+
// Sublime Text
|
|
82
|
+
const sublime = this.detectTool('subl', false);
|
|
83
|
+
if (sublime.available) {
|
|
84
|
+
editors.push({ name: 'Sublime Text', ...sublime, available: true });
|
|
85
|
+
}
|
|
86
|
+
// Neovim
|
|
87
|
+
const neovim = this.detectTool('nvim', false);
|
|
88
|
+
if (neovim.available) {
|
|
89
|
+
editors.push({ name: 'Neovim', ...neovim, available: true });
|
|
90
|
+
}
|
|
91
|
+
// Vim
|
|
92
|
+
const vim = this.detectTool('vim', false);
|
|
93
|
+
if (vim.available) {
|
|
94
|
+
editors.push({ name: 'Vim', ...vim, available: true });
|
|
95
|
+
}
|
|
96
|
+
// Kiro
|
|
97
|
+
const kiro = this.detectTool('kiro', false);
|
|
98
|
+
if (kiro.available) {
|
|
99
|
+
editors.push({ name: 'Kiro', ...kiro, available: true });
|
|
100
|
+
}
|
|
101
|
+
// Kiro CLI
|
|
102
|
+
const kiroCli = this.detectTool('kiro-cli', false);
|
|
103
|
+
if (kiroCli.available) {
|
|
104
|
+
editors.push({ name: 'Kiro CLI', ...kiroCli, available: true });
|
|
105
|
+
}
|
|
106
|
+
// Antigravity
|
|
107
|
+
const antigravity = this.detectTool('antigravity', false);
|
|
108
|
+
if (antigravity.available) {
|
|
109
|
+
editors.push({ name: 'Antigravity', ...antigravity, available: true });
|
|
110
|
+
}
|
|
111
|
+
// Antigravity IDE
|
|
112
|
+
const antigravityIde = this.detectTool('antigravity-ide', false);
|
|
113
|
+
if (antigravityIde.available) {
|
|
114
|
+
editors.push({ name: 'Antigravity IDE', ...antigravityIde, available: true });
|
|
115
|
+
}
|
|
116
|
+
// Antigravy (alias/compatibility)
|
|
117
|
+
const antigravy = this.detectTool('antigravy', false);
|
|
118
|
+
if (antigravy.available) {
|
|
119
|
+
editors.push({ name: 'Antigravy', ...antigravy, available: true });
|
|
120
|
+
}
|
|
121
|
+
// Antigravy CLI (alias/compatibility)
|
|
122
|
+
const antigravyCli = this.detectTool('antigravy-cli', false);
|
|
123
|
+
if (antigravyCli.available) {
|
|
124
|
+
editors.push({ name: 'Antigravy CLI', ...antigravyCli, available: true });
|
|
125
|
+
}
|
|
126
|
+
const localEditors = this.detectEditorsFromLocalPrograms();
|
|
127
|
+
for (const editor of localEditors) {
|
|
128
|
+
const existing = editors.find(existingEditor => existingEditor.name === editor.name);
|
|
129
|
+
if (!existing) {
|
|
130
|
+
editors.push(editor);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return editors;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Detect installed runtimes
|
|
137
|
+
*/
|
|
138
|
+
detectRuntimes() {
|
|
139
|
+
const runtimes = [];
|
|
140
|
+
// Node.js
|
|
141
|
+
const node = this.detectTool('node');
|
|
142
|
+
if (node.available) {
|
|
143
|
+
runtimes.push({ name: 'Node.js', ...node, available: true });
|
|
144
|
+
}
|
|
145
|
+
// Python (try both python and python3)
|
|
146
|
+
let python = this.detectTool('python3');
|
|
147
|
+
if (!python.available) {
|
|
148
|
+
python = this.detectTool('python');
|
|
149
|
+
}
|
|
150
|
+
if (python.available) {
|
|
151
|
+
runtimes.push({ name: 'Python', ...python, available: true });
|
|
152
|
+
}
|
|
153
|
+
// Rust
|
|
154
|
+
const rustc = this.detectTool('rustc');
|
|
155
|
+
if (rustc.available) {
|
|
156
|
+
runtimes.push({ name: 'Rust', ...rustc, available: true });
|
|
157
|
+
}
|
|
158
|
+
// Go
|
|
159
|
+
const go = this.detectTool('go');
|
|
160
|
+
if (go.available) {
|
|
161
|
+
runtimes.push({ name: 'Go', ...go, available: true });
|
|
162
|
+
}
|
|
163
|
+
// Java
|
|
164
|
+
const java = this.detectTool('java');
|
|
165
|
+
if (java.available) {
|
|
166
|
+
runtimes.push({ name: 'Java', ...java, available: true });
|
|
167
|
+
}
|
|
168
|
+
// PHP
|
|
169
|
+
const php = this.detectTool('php');
|
|
170
|
+
if (php.available) {
|
|
171
|
+
runtimes.push({ name: 'PHP', ...php, available: true });
|
|
172
|
+
}
|
|
173
|
+
return runtimes;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Detect development tools
|
|
177
|
+
* Includes: Git, Docker, Kiro, Claude Code, npm, yarn
|
|
178
|
+
*/
|
|
179
|
+
detectDevelopmentTools() {
|
|
180
|
+
const tools = [];
|
|
181
|
+
// Git
|
|
182
|
+
const git = this.detectTool('git');
|
|
183
|
+
if (git.available) {
|
|
184
|
+
tools.push({ name: 'Git', ...git, available: true });
|
|
185
|
+
}
|
|
186
|
+
// Docker
|
|
187
|
+
const docker = this.detectTool('docker');
|
|
188
|
+
if (docker.available) {
|
|
189
|
+
tools.push({ name: 'Docker', ...docker, available: true });
|
|
190
|
+
}
|
|
191
|
+
// Kiro
|
|
192
|
+
const kiro = this.detectTool('kiro');
|
|
193
|
+
if (kiro.available) {
|
|
194
|
+
tools.push({ name: 'Kiro', ...kiro, available: true });
|
|
195
|
+
}
|
|
196
|
+
// Claude Code
|
|
197
|
+
const claude = this.detectTool('claude');
|
|
198
|
+
if (claude.available) {
|
|
199
|
+
tools.push({ name: 'Claude Code', ...claude, available: true });
|
|
200
|
+
}
|
|
201
|
+
// npm
|
|
202
|
+
const npm = this.detectTool('npm');
|
|
203
|
+
if (npm.available) {
|
|
204
|
+
tools.push({ name: 'npm', ...npm, available: true });
|
|
205
|
+
}
|
|
206
|
+
// yarn
|
|
207
|
+
const yarn = this.detectTool('yarn');
|
|
208
|
+
if (yarn.available) {
|
|
209
|
+
tools.push({ name: 'yarn', ...yarn, available: true });
|
|
210
|
+
}
|
|
211
|
+
return tools;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Detect a single tool by command name
|
|
215
|
+
* @param command Command name to check
|
|
216
|
+
* @param checkVersion Whether to query command version (default true)
|
|
217
|
+
* @returns Tool detection result
|
|
218
|
+
*/
|
|
219
|
+
detectTool(command, checkVersion = true) {
|
|
220
|
+
try {
|
|
221
|
+
const commandPath = this.getCommandPath(command);
|
|
222
|
+
if (!commandPath) {
|
|
223
|
+
return { available: false };
|
|
224
|
+
}
|
|
225
|
+
const version = checkVersion ? this.getVersion(command) : undefined;
|
|
226
|
+
return {
|
|
227
|
+
path: commandPath,
|
|
228
|
+
available: true,
|
|
229
|
+
version
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
return { available: false };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Detect installed editors present as local program folders rather than
|
|
238
|
+
* resolved globally via PATH.
|
|
239
|
+
*/
|
|
240
|
+
detectEditorsFromLocalPrograms() {
|
|
241
|
+
if (os.platform() !== 'win32') {
|
|
242
|
+
return [];
|
|
243
|
+
}
|
|
244
|
+
const programsRoot = path.join(process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local'), 'Programs');
|
|
245
|
+
if (!fs.existsSync(programsRoot)) {
|
|
246
|
+
return [];
|
|
247
|
+
}
|
|
248
|
+
const definitions = [
|
|
249
|
+
{ folder: 'Microsoft VS Code', name: 'VS Code', executable: 'Code.exe', command: 'code' },
|
|
250
|
+
{ folder: 'Cursor', name: 'Cursor', executable: 'Cursor.exe', command: 'cursor' },
|
|
251
|
+
{ folder: 'Sublime Text', name: 'Sublime Text', executable: 'sublime_text.exe', command: 'subl' },
|
|
252
|
+
{ folder: 'Kiro', name: 'Kiro', executable: 'Kiro.exe', command: 'kiro' },
|
|
253
|
+
{ folder: 'Antigravity', name: 'Antigravity', executable: 'Antigravity.exe', command: 'antigravity' },
|
|
254
|
+
{ folder: 'Antigravity IDE', name: 'Antigravity IDE', executable: 'Antigravity IDE.exe', command: 'antigravity-ide' },
|
|
255
|
+
];
|
|
256
|
+
const found = [];
|
|
257
|
+
for (const def of definitions) {
|
|
258
|
+
const folderPath = path.join(programsRoot, def.folder);
|
|
259
|
+
const exePath = path.join(folderPath, def.executable);
|
|
260
|
+
if (fs.existsSync(exePath)) {
|
|
261
|
+
found.push({
|
|
262
|
+
name: def.name,
|
|
263
|
+
path: exePath,
|
|
264
|
+
available: true
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return found;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Resolve absolute path of command
|
|
272
|
+
* @param command Command name to check
|
|
273
|
+
* @returns Executable path or undefined
|
|
274
|
+
*/
|
|
275
|
+
getCommandPath(command) {
|
|
276
|
+
try {
|
|
277
|
+
const checkCommand = os.platform() === 'win32' ? `where ${command}` : `which ${command}`;
|
|
278
|
+
const output = (0, child_process_1.execSync)(checkCommand, { timeout: this.TIMEOUT_MS, stdio: 'pipe', encoding: 'utf-8' }).trim();
|
|
279
|
+
return output ? output.split(/\r?\n/)[0].trim() : undefined;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Check if a command exists on the system
|
|
287
|
+
* @param command Command name to check
|
|
288
|
+
* @returns true if command exists, false otherwise
|
|
289
|
+
*/
|
|
290
|
+
checkCommandExists(command) {
|
|
291
|
+
return this.getCommandPath(command) !== undefined;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get version of a command
|
|
295
|
+
* @param command Command name
|
|
296
|
+
* @returns Version string or undefined
|
|
297
|
+
*/
|
|
298
|
+
getVersion(command) {
|
|
299
|
+
try {
|
|
300
|
+
// Try common version flags
|
|
301
|
+
const versionFlags = ['--version', '-v', '-V'];
|
|
302
|
+
for (const flag of versionFlags) {
|
|
303
|
+
try {
|
|
304
|
+
const output = (0, child_process_1.execSync)(`${command} ${flag}`, {
|
|
305
|
+
timeout: this.TIMEOUT_MS,
|
|
306
|
+
stdio: 'pipe',
|
|
307
|
+
encoding: 'utf-8'
|
|
308
|
+
}).trim();
|
|
309
|
+
if (output) {
|
|
310
|
+
// Extract version number from output
|
|
311
|
+
return this.parseVersion(output);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch (err) {
|
|
315
|
+
// If execution timed out, abort subsequent flags to prevent blocking
|
|
316
|
+
if (err && (err.code === 'ETIMEDOUT' || err.killed)) {
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
return undefined;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Parse version from command output
|
|
330
|
+
* @param output Command output
|
|
331
|
+
* @returns Parsed version string
|
|
332
|
+
*/
|
|
333
|
+
parseVersion(output) {
|
|
334
|
+
// Extract first version-like pattern (e.g., "1.0.0", "v1.0.0")
|
|
335
|
+
const versionMatch = output.match(/v?(\d+(?:\.\d+)*)/);
|
|
336
|
+
if (versionMatch) {
|
|
337
|
+
return versionMatch[1];
|
|
338
|
+
}
|
|
339
|
+
// Return first line if no version pattern found
|
|
340
|
+
return output.split('\n')[0];
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
exports.ToolDetector = ToolDetector;
|
|
344
|
+
//# sourceMappingURL=ToolDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolDetector.js","sourceRoot":"","sources":["../../../src/domain/services/ToolDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { TechnologyDetector, DetectedTechnology } from './TechnologyDetector';
|
|
2
|
+
export { ToolDetector, DetectedTool } from './ToolDetector';
|
|
3
|
+
export { ProjectScanner, ProjectMetadata, ScanResult, ScanError } from './ProjectScanner';
|
|
4
|
+
export { IgnoreFileParser, IgnorePattern } from './IgnoreFileParser';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IgnoreFileParser = exports.ProjectScanner = exports.ToolDetector = exports.TechnologyDetector = void 0;
|
|
4
|
+
var TechnologyDetector_1 = require("./TechnologyDetector");
|
|
5
|
+
Object.defineProperty(exports, "TechnologyDetector", { enumerable: true, get: function () { return TechnologyDetector_1.TechnologyDetector; } });
|
|
6
|
+
var ToolDetector_1 = require("./ToolDetector");
|
|
7
|
+
Object.defineProperty(exports, "ToolDetector", { enumerable: true, get: function () { return ToolDetector_1.ToolDetector; } });
|
|
8
|
+
var ProjectScanner_1 = require("./ProjectScanner");
|
|
9
|
+
Object.defineProperty(exports, "ProjectScanner", { enumerable: true, get: function () { return ProjectScanner_1.ProjectScanner; } });
|
|
10
|
+
var IgnoreFileParser_1 = require("./IgnoreFileParser");
|
|
11
|
+
Object.defineProperty(exports, "IgnoreFileParser", { enumerable: true, get: function () { return IgnoreFileParser_1.IgnoreFileParser; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/services/index.ts"],"names":[],"mappings":";;;AAAA,2DAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAC3B,+CAA4D;AAAnD,4GAAA,YAAY,OAAA;AACrB,mDAA0F;AAAjF,gHAAA,cAAc,OAAA;AACvB,uDAAqE;AAA5D,oHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for Project Hub application
|
|
3
|
+
*/
|
|
4
|
+
export interface AppConfig {
|
|
5
|
+
name: string;
|
|
6
|
+
version: string;
|
|
7
|
+
}
|
|
8
|
+
export interface DatabaseConfig {
|
|
9
|
+
filename: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ScannerConfig {
|
|
12
|
+
depth: number;
|
|
13
|
+
patterns: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface ToolsConfig {
|
|
16
|
+
defaultEditor: string;
|
|
17
|
+
editors: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface UIConfig {
|
|
20
|
+
theme: 'dark' | 'light';
|
|
21
|
+
itemsPerPage: number;
|
|
22
|
+
}
|
|
23
|
+
export interface LoggingConfig {
|
|
24
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
25
|
+
directory: string;
|
|
26
|
+
}
|
|
27
|
+
export interface Config {
|
|
28
|
+
app: AppConfig;
|
|
29
|
+
database: DatabaseConfig;
|
|
30
|
+
scanner: ScannerConfig;
|
|
31
|
+
tools: ToolsConfig;
|
|
32
|
+
ui: UIConfig;
|
|
33
|
+
logging: LoggingConfig;
|
|
34
|
+
}
|
|
35
|
+
export type ConfigKey = keyof Config;
|
|
36
|
+
export type DeepConfigKey = string;
|
|
37
|
+
//# sourceMappingURL=Config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/domain/types/Config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,SAAS,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,QAAQ,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC;AACrC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../../src/domain/types/Config.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Project Hub - CLI/TUI application for managing development projects
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const CLI_1 = require("./ui/cli/CLI");
|
|
8
|
+
const TUIApplication_1 = require("./ui/tui/TUIApplication");
|
|
9
|
+
if (process.argv.length <= 2) {
|
|
10
|
+
const tui = new TUIApplication_1.TUIApplication();
|
|
11
|
+
tui.run();
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const cli = new CLI_1.CLI();
|
|
15
|
+
cli.run(process.argv);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;GAEG;;AAEH,sCAAmC;AACnC,4DAAyD;AAEzD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,+BAAc,EAAE,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;KAAM,CAAC;IACN,MAAM,GAAG,GAAG,IAAI,SAAG,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
/**
|
|
3
|
+
* DatabaseConnection manages SQLite database connectivity for Project Hub
|
|
4
|
+
* Implements connection pooling and provides core database operations
|
|
5
|
+
*/
|
|
6
|
+
export declare class DatabaseConnection {
|
|
7
|
+
private static instance;
|
|
8
|
+
private db;
|
|
9
|
+
private dbPath;
|
|
10
|
+
private connectionPool;
|
|
11
|
+
private poolSize;
|
|
12
|
+
private isOpen;
|
|
13
|
+
private constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Get singleton instance of DatabaseConnection
|
|
16
|
+
*/
|
|
17
|
+
static getInstance(): DatabaseConnection;
|
|
18
|
+
/**
|
|
19
|
+
* Reset instance for testing purposes
|
|
20
|
+
*/
|
|
21
|
+
static resetInstanceForTesting(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Set database path for testing
|
|
24
|
+
*/
|
|
25
|
+
setTestDatabasePath(dbPath: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Open database connection
|
|
28
|
+
* Creates directory structure if it doesn't exist
|
|
29
|
+
* Initializes connection pool
|
|
30
|
+
*/
|
|
31
|
+
open(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Initialize connection pool for concurrent operations
|
|
34
|
+
*/
|
|
35
|
+
private initializeConnectionPool;
|
|
36
|
+
/**
|
|
37
|
+
* Get a connection from the pool
|
|
38
|
+
*/
|
|
39
|
+
private getPoolConnection;
|
|
40
|
+
/**
|
|
41
|
+
* Return a connection to the pool
|
|
42
|
+
*/
|
|
43
|
+
private returnPoolConnection;
|
|
44
|
+
/**
|
|
45
|
+
* Close database connection and clean up resources
|
|
46
|
+
*/
|
|
47
|
+
close(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Execute a SQL statement without returning results
|
|
50
|
+
* Used for INSERT, UPDATE, DELETE operations
|
|
51
|
+
*/
|
|
52
|
+
execute(sql: string, params?: any[]): void;
|
|
53
|
+
/**
|
|
54
|
+
* Prepare a SQL statement for reuse
|
|
55
|
+
* Returns a prepared statement object
|
|
56
|
+
*/
|
|
57
|
+
prepare(sql: string): Database.Statement;
|
|
58
|
+
/**
|
|
59
|
+
* Execute a SELECT query and return all results
|
|
60
|
+
*/
|
|
61
|
+
query<T = any>(sql: string, params?: any[]): T[];
|
|
62
|
+
/**
|
|
63
|
+
* Execute a SELECT query and return first result
|
|
64
|
+
*/
|
|
65
|
+
queryOne<T = any>(sql: string, params?: any[]): T | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Execute a transaction
|
|
68
|
+
* All operations within the callback must succeed or all will rollback
|
|
69
|
+
*/
|
|
70
|
+
transaction<T>(callback: () => T): T;
|
|
71
|
+
/**
|
|
72
|
+
* Verify database connection is open
|
|
73
|
+
*/
|
|
74
|
+
private ensureOpen;
|
|
75
|
+
/**
|
|
76
|
+
* Get the database path
|
|
77
|
+
*/
|
|
78
|
+
getDbPath(): string;
|
|
79
|
+
/**
|
|
80
|
+
* Check if database connection is open
|
|
81
|
+
*/
|
|
82
|
+
isConnected(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Get raw database instance (use with caution)
|
|
85
|
+
*/
|
|
86
|
+
getRawDatabase(): Database.Database;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=DatabaseConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseConnection.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/DatabaseConnection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO;IAOP;;OAEG;WACW,WAAW,IAAI,kBAAkB;IAO/C;;OAEG;WACW,uBAAuB,IAAI,IAAI;IAO7C;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOhD;;;;OAIG;IACI,IAAI,IAAI,IAAI;IAsCnB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACI,KAAK,IAAI,IAAI;IAwBpB;;;OAGG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI;IAmBjD;;;OAGG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,SAAS;IAc/C;;OAEG;IACI,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IAmBvD;;OAEG;IACI,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;IAmBpE;;;OAGG;IACI,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAe3C;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACI,cAAc,IAAI,QAAQ,CAAC,QAAQ;CAO3C"}
|