@thanhvn14/csvibe 0.1.1 → 0.1.3
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/.csvibe/state/approaches.json +1 -0
- package/README.md +142 -3
- package/dist/commands/brainstorm.d.ts +16 -0
- package/dist/commands/brainstorm.d.ts.map +1 -0
- package/dist/commands/brainstorm.js +186 -0
- package/dist/commands/brainstorm.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +72 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +13 -7
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init/index.d.ts +7 -0
- package/dist/commands/init/index.d.ts.map +1 -0
- package/dist/commands/init/index.js +10 -0
- package/dist/commands/init/index.js.map +1 -0
- package/dist/commands/init/init-command.d.ts +10 -0
- package/dist/commands/init/init-command.d.ts.map +1 -0
- package/dist/commands/init/init-command.js +75 -0
- package/dist/commands/init/init-command.js.map +1 -0
- package/dist/commands/init/phases/config-handler.d.ts +10 -0
- package/dist/commands/init/phases/config-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/config-handler.js +21 -0
- package/dist/commands/init/phases/config-handler.js.map +1 -0
- package/dist/commands/init/phases/detection-handler.d.ts +10 -0
- package/dist/commands/init/phases/detection-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/detection-handler.js +80 -0
- package/dist/commands/init/phases/detection-handler.js.map +1 -0
- package/dist/commands/init/phases/download-handler.d.ts +9 -0
- package/dist/commands/init/phases/download-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/download-handler.js +16 -0
- package/dist/commands/init/phases/download-handler.js.map +1 -0
- package/dist/commands/init/phases/prompt-handler.d.ts +10 -0
- package/dist/commands/init/phases/prompt-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/prompt-handler.js +24 -0
- package/dist/commands/init/phases/prompt-handler.js.map +1 -0
- package/dist/commands/init/phases/scaffold-handler.d.ts +9 -0
- package/dist/commands/init/phases/scaffold-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/scaffold-handler.js +18 -0
- package/dist/commands/init/phases/scaffold-handler.js.map +1 -0
- package/dist/commands/init/phases/validation-handler.d.ts +14 -0
- package/dist/commands/init/phases/validation-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/validation-handler.js +50 -0
- package/dist/commands/init/phases/validation-handler.js.map +1 -0
- package/dist/commands/init/phases/vscode-handler.d.ts +9 -0
- package/dist/commands/init/phases/vscode-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/vscode-handler.js +16 -0
- package/dist/commands/init/phases/vscode-handler.js.map +1 -0
- package/dist/commands/init/types.d.ts +28 -0
- package/dist/commands/init/types.d.ts.map +1 -0
- package/dist/commands/init/types.js +6 -0
- package/dist/commands/init/types.js.map +1 -0
- package/dist/commands/scout.d.ts +30 -0
- package/dist/commands/scout.d.ts.map +1 -0
- package/dist/commands/scout.js +116 -0
- package/dist/commands/scout.js.map +1 -0
- package/dist/config/constants.d.ts +2 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -1
- package/dist/config/constants.js.map +1 -1
- package/dist/domains/config/generator.d.ts +17 -0
- package/dist/domains/config/generator.d.ts.map +1 -0
- package/dist/domains/config/generator.js +67 -0
- package/dist/domains/config/generator.js.map +1 -0
- package/dist/domains/config/index.d.ts +8 -0
- package/dist/domains/config/index.d.ts.map +1 -0
- package/dist/domains/config/index.js +15 -0
- package/dist/domains/config/index.js.map +1 -0
- package/dist/domains/config/types.d.ts +39 -0
- package/dist/domains/config/types.d.ts.map +1 -0
- package/dist/domains/config/types.js +6 -0
- package/dist/domains/config/types.js.map +1 -0
- package/dist/domains/config/validator.d.ts +17 -0
- package/dist/domains/config/validator.d.ts.map +1 -0
- package/dist/domains/config/validator.js +54 -0
- package/dist/domains/config/validator.js.map +1 -0
- package/dist/domains/github/auth-api.d.ts +19 -0
- package/dist/domains/github/auth-api.d.ts.map +1 -0
- package/dist/domains/github/auth-api.js +196 -0
- package/dist/domains/github/auth-api.js.map +1 -0
- package/dist/domains/github/github-client.d.ts +323 -0
- package/dist/domains/github/github-client.d.ts.map +1 -0
- package/dist/domains/github/github-client.js +192 -0
- package/dist/domains/github/github-client.js.map +1 -0
- package/dist/domains/github/index.d.ts +9 -0
- package/dist/domains/github/index.d.ts.map +1 -0
- package/dist/domains/github/index.js +23 -0
- package/dist/domains/github/index.js.map +1 -0
- package/dist/domains/github/keychain.d.ts +19 -0
- package/dist/domains/github/keychain.d.ts.map +1 -0
- package/dist/domains/github/keychain.js +132 -0
- package/dist/domains/github/keychain.js.map +1 -0
- package/dist/domains/github/types.d.ts +40 -0
- package/dist/domains/github/types.d.ts.map +1 -0
- package/dist/domains/github/types.js +6 -0
- package/dist/domains/github/types.js.map +1 -0
- package/dist/domains/health-checks/auto-healer.d.ts +14 -0
- package/dist/domains/health-checks/auto-healer.d.ts.map +1 -0
- package/dist/domains/health-checks/auto-healer.js +160 -0
- package/dist/domains/health-checks/auto-healer.js.map +1 -0
- package/dist/domains/health-checks/check-runner.d.ts +10 -0
- package/dist/domains/health-checks/check-runner.d.ts.map +1 -0
- package/dist/domains/health-checks/check-runner.js +31 -0
- package/dist/domains/health-checks/check-runner.js.map +1 -0
- package/dist/domains/health-checks/checkers/auth-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/auth-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/auth-checker.js +90 -0
- package/dist/domains/health-checks/checkers/auth-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/deps-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/deps-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/deps-checker.js +150 -0
- package/dist/domains/health-checks/checkers/deps-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/project-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/project-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/project-checker.js +124 -0
- package/dist/domains/health-checks/checkers/project-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/system-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/system-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/system-checker.js +135 -0
- package/dist/domains/health-checks/checkers/system-checker.js.map +1 -0
- package/dist/domains/health-checks/index.d.ts +9 -0
- package/dist/domains/health-checks/index.d.ts.map +1 -0
- package/dist/domains/health-checks/index.js +21 -0
- package/dist/domains/health-checks/index.js.map +1 -0
- package/dist/domains/health-checks/report-generator.d.ts +18 -0
- package/dist/domains/health-checks/report-generator.d.ts.map +1 -0
- package/dist/domains/health-checks/report-generator.js +117 -0
- package/dist/domains/health-checks/report-generator.js.map +1 -0
- package/dist/domains/health-checks/types.d.ts +35 -0
- package/dist/domains/health-checks/types.d.ts.map +1 -0
- package/dist/domains/health-checks/types.js +6 -0
- package/dist/domains/health-checks/types.js.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/approaches-validator.d.ts +40 -0
- package/dist/utils/approaches-validator.d.ts.map +1 -0
- package/dist/utils/approaches-validator.js +101 -0
- package/dist/utils/approaches-validator.js.map +1 -0
- package/dist/utils/dependency-analyzer.d.ts +31 -0
- package/dist/utils/dependency-analyzer.d.ts.map +1 -0
- package/dist/utils/dependency-analyzer.js +294 -0
- package/dist/utils/dependency-analyzer.js.map +1 -0
- package/dist/utils/directory-analyzer.d.ts +23 -0
- package/dist/utils/directory-analyzer.d.ts.map +1 -0
- package/dist/utils/directory-analyzer.js +81 -0
- package/dist/utils/directory-analyzer.js.map +1 -0
- package/dist/utils/downloader.d.ts +3 -3
- package/dist/utils/downloader.d.ts.map +1 -1
- package/dist/utils/downloader.js +35 -65
- package/dist/utils/downloader.js.map +1 -1
- package/dist/utils/errors.d.ts +64 -10
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +136 -22
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/gh-cli.d.ts +4 -2
- package/dist/utils/gh-cli.d.ts.map +1 -1
- package/dist/utils/gh-cli.js +33 -38
- package/dist/utils/gh-cli.js.map +1 -1
- package/dist/utils/progress.d.ts +37 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +121 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/prompts.d.ts +5 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +124 -64
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/scaffolder.d.ts.map +1 -1
- package/dist/utils/scaffolder.js +1 -3
- package/dist/utils/scaffolder.js.map +1 -1
- package/package.json +7 -3
- package/test-jira-prompt.js +32 -0
- package/dist/commands/init.d.ts +0 -6
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -147
- package/dist/commands/init.js.map +0 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health check types and interfaces
|
|
3
|
+
*/
|
|
4
|
+
export type CheckStatus = 'pass' | 'warn' | 'fail';
|
|
5
|
+
export interface Check {
|
|
6
|
+
name: string;
|
|
7
|
+
status: CheckStatus;
|
|
8
|
+
message: string;
|
|
9
|
+
fixable: boolean;
|
|
10
|
+
fix?: string;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface CheckResult {
|
|
14
|
+
category: string;
|
|
15
|
+
checks: Check[];
|
|
16
|
+
passed: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface HealthCheckReport {
|
|
19
|
+
results: CheckResult[];
|
|
20
|
+
passed: boolean;
|
|
21
|
+
fixable: number;
|
|
22
|
+
timestamp: string;
|
|
23
|
+
}
|
|
24
|
+
export interface FixResult {
|
|
25
|
+
success: boolean;
|
|
26
|
+
message: string;
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface DoctorOptions {
|
|
30
|
+
fix?: boolean;
|
|
31
|
+
report?: boolean;
|
|
32
|
+
json?: boolean;
|
|
33
|
+
checkOnly?: boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domains/health-checks/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/domains/health-checks/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/index.js
CHANGED
|
@@ -42,6 +42,39 @@ program
|
|
|
42
42
|
.action((0, errors_1.withErrorHandling)(async (options) => {
|
|
43
43
|
await (0, commands_1.initCommand)();
|
|
44
44
|
}));
|
|
45
|
+
/**
|
|
46
|
+
* Doctor command
|
|
47
|
+
*/
|
|
48
|
+
program
|
|
49
|
+
.command('doctor')
|
|
50
|
+
.description('Run health checks and diagnostics')
|
|
51
|
+
.option('--fix', 'Auto-fix fixable issues')
|
|
52
|
+
.option('--report', 'Upload report to GitHub Gist')
|
|
53
|
+
.option('--json', 'Output JSON format')
|
|
54
|
+
.option('--check-only', 'CI mode (exit 1 on failures)')
|
|
55
|
+
.action((0, errors_1.withErrorHandling)(async (options) => {
|
|
56
|
+
await (0, commands_1.doctorCommand)(options);
|
|
57
|
+
}));
|
|
58
|
+
/**
|
|
59
|
+
* Scout command (Story 4)
|
|
60
|
+
*/
|
|
61
|
+
program
|
|
62
|
+
.command('scout')
|
|
63
|
+
.description('Analyze project structure and gather context')
|
|
64
|
+
.option('-o, --output <path>', 'Output path for context JSON')
|
|
65
|
+
.action((0, errors_1.withErrorHandling)(async (options) => {
|
|
66
|
+
await (0, commands_1.scoutCommand)(options);
|
|
67
|
+
}));
|
|
68
|
+
/**
|
|
69
|
+
* Brainstorm command (Story 5)
|
|
70
|
+
*/
|
|
71
|
+
program
|
|
72
|
+
.command('brainstorm')
|
|
73
|
+
.description('Generate solution approaches with trade-off analysis')
|
|
74
|
+
.option('-o, --output <path>', 'Output path for approaches JSON')
|
|
75
|
+
.action((0, errors_1.withErrorHandling)(async (options) => {
|
|
76
|
+
await (0, commands_1.brainstormCommand)(options);
|
|
77
|
+
}));
|
|
45
78
|
// Default action (no subcommand)
|
|
46
79
|
program.action(() => {
|
|
47
80
|
(0, commands_1.helpCommand)();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,yCAAkI;AAClI,mDAAyD;AACzD,2CAAgE;AAEhE,2CAA2C;AAC3C,IAAI,CAAC;IACH,IAAA,gCAAmB,GAAE,CAAC;AACxB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,mBAAmB;AACnB,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,IAAA,qBAAU,GAAE,EAAE,eAAe,EAAE,wBAAwB,CAAC;KAChE,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAExD,oBAAoB;AAEpB;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,sBAAW,CAAC,CAAC;AAEvB;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,WAAW,EAAE,mCAAmC,CAAC;KACxD,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,sBAAW,GAAE,CAAC;AACtB,CAAC,CAAC,CAAC,CAAC;AAEN;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC;KAC1C,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;KAClD,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC;KACtC,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;KACtD,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC,CAAC;AAEN;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,uBAAY,EAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC,CAAC;AAEN;;GAEG;AACH,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,IAAA,4BAAiB,EAAC,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC,CAAC;AAEN,iCAAiC;AACjC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,IAAA,sBAAW,GAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,+BAA+B;AAC/B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,oBAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approaches validation utilities
|
|
3
|
+
* Validates approaches.json schema and content from brainstorm phase
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Approach interface
|
|
7
|
+
*/
|
|
8
|
+
export interface Approach {
|
|
9
|
+
name: string;
|
|
10
|
+
strategy: string;
|
|
11
|
+
technologies: string[];
|
|
12
|
+
pros: string[];
|
|
13
|
+
cons: string[];
|
|
14
|
+
effort: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Brainstorm context interface
|
|
18
|
+
*/
|
|
19
|
+
export interface BrainstormContext {
|
|
20
|
+
requirement: string;
|
|
21
|
+
approaches: Approach[];
|
|
22
|
+
recommendation: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate individual approach structure
|
|
26
|
+
*
|
|
27
|
+
* @param approach - Approach object to validate
|
|
28
|
+
* @param index - Approach index for error messages
|
|
29
|
+
* @throws Error if approach structure is invalid
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateApproach(approach: unknown, index: number): Approach;
|
|
32
|
+
/**
|
|
33
|
+
* Validate approaches.json schema
|
|
34
|
+
*
|
|
35
|
+
* @param data - Unknown data to validate
|
|
36
|
+
* @returns Validated BrainstormContext
|
|
37
|
+
* @throws Error if schema is invalid
|
|
38
|
+
*/
|
|
39
|
+
export declare function validateApproachesSchema(data: unknown): BrainstormContext;
|
|
40
|
+
//# sourceMappingURL=approaches-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approaches-validator.d.ts","sourceRoot":"","sources":["../../src/utils/approaches-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAyD3E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CAwCzE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Approaches validation utilities
|
|
4
|
+
* Validates approaches.json schema and content from brainstorm phase
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.validateApproach = validateApproach;
|
|
8
|
+
exports.validateApproachesSchema = validateApproachesSchema;
|
|
9
|
+
/**
|
|
10
|
+
* Validate individual approach structure
|
|
11
|
+
*
|
|
12
|
+
* @param approach - Approach object to validate
|
|
13
|
+
* @param index - Approach index for error messages
|
|
14
|
+
* @throws Error if approach structure is invalid
|
|
15
|
+
*/
|
|
16
|
+
function validateApproach(approach, index) {
|
|
17
|
+
if (!approach || typeof approach !== 'object') {
|
|
18
|
+
throw new Error(`Approach ${index + 1}: Must be an object`);
|
|
19
|
+
}
|
|
20
|
+
const app = approach;
|
|
21
|
+
// Validate name
|
|
22
|
+
if (!app.name || typeof app.name !== 'string' || app.name.trim().length === 0) {
|
|
23
|
+
throw new Error(`Approach ${index + 1}: Missing or invalid 'name' field`);
|
|
24
|
+
}
|
|
25
|
+
// Validate strategy
|
|
26
|
+
if (!app.strategy || typeof app.strategy !== 'string' || app.strategy.trim().length === 0) {
|
|
27
|
+
throw new Error(`Approach ${index + 1}: Missing or invalid 'strategy' field`);
|
|
28
|
+
}
|
|
29
|
+
// Validate technologies array
|
|
30
|
+
if (!Array.isArray(app.technologies) || app.technologies.length === 0) {
|
|
31
|
+
throw new Error(`Approach ${index + 1}: 'technologies' must be a non-empty array`);
|
|
32
|
+
}
|
|
33
|
+
if (!app.technologies.every((tech) => typeof tech === 'string' && tech.trim().length > 0)) {
|
|
34
|
+
throw new Error(`Approach ${index + 1}: All technologies must be non-empty strings`);
|
|
35
|
+
}
|
|
36
|
+
// Validate pros array
|
|
37
|
+
if (!Array.isArray(app.pros) || app.pros.length === 0) {
|
|
38
|
+
throw new Error(`Approach ${index + 1}: 'pros' must be a non-empty array`);
|
|
39
|
+
}
|
|
40
|
+
if (!app.pros.every((pro) => typeof pro === 'string' && pro.trim().length > 0)) {
|
|
41
|
+
throw new Error(`Approach ${index + 1}: All pros must be non-empty strings`);
|
|
42
|
+
}
|
|
43
|
+
// Validate cons array
|
|
44
|
+
if (!Array.isArray(app.cons) || app.cons.length === 0) {
|
|
45
|
+
throw new Error(`Approach ${index + 1}: 'cons' must be a non-empty array`);
|
|
46
|
+
}
|
|
47
|
+
if (!app.cons.every((con) => typeof con === 'string' && con.trim().length > 0)) {
|
|
48
|
+
throw new Error(`Approach ${index + 1}: All cons must be non-empty strings`);
|
|
49
|
+
}
|
|
50
|
+
// Validate effort
|
|
51
|
+
if (!app.effort || typeof app.effort !== 'string' || app.effort.trim().length === 0) {
|
|
52
|
+
throw new Error(`Approach ${index + 1}: Missing or invalid 'effort' field`);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
name: app.name,
|
|
56
|
+
strategy: app.strategy,
|
|
57
|
+
technologies: app.technologies,
|
|
58
|
+
pros: app.pros,
|
|
59
|
+
cons: app.cons,
|
|
60
|
+
effort: app.effort
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate approaches.json schema
|
|
65
|
+
*
|
|
66
|
+
* @param data - Unknown data to validate
|
|
67
|
+
* @returns Validated BrainstormContext
|
|
68
|
+
* @throws Error if schema is invalid
|
|
69
|
+
*/
|
|
70
|
+
function validateApproachesSchema(data) {
|
|
71
|
+
if (!data || typeof data !== 'object') {
|
|
72
|
+
throw new Error('Invalid approaches data: Must be an object');
|
|
73
|
+
}
|
|
74
|
+
const context = data;
|
|
75
|
+
// Validate requirement
|
|
76
|
+
if (!context.requirement || typeof context.requirement !== 'string' || context.requirement.trim().length === 0) {
|
|
77
|
+
throw new Error('Missing or invalid \'requirement\' field');
|
|
78
|
+
}
|
|
79
|
+
// Validate approaches array
|
|
80
|
+
if (!Array.isArray(context.approaches)) {
|
|
81
|
+
throw new Error('Missing or invalid \'approaches\' field: Must be an array');
|
|
82
|
+
}
|
|
83
|
+
if (context.approaches.length === 0) {
|
|
84
|
+
throw new Error('\'approaches\' array cannot be empty');
|
|
85
|
+
}
|
|
86
|
+
if (context.approaches.length < 2 || context.approaches.length > 3) {
|
|
87
|
+
throw new Error('Must have 2-3 approaches (got ' + context.approaches.length + ')');
|
|
88
|
+
}
|
|
89
|
+
// Validate each approach
|
|
90
|
+
const validatedApproaches = context.approaches.map((approach, index) => validateApproach(approach, index));
|
|
91
|
+
// Validate recommendation
|
|
92
|
+
if (!context.recommendation || typeof context.recommendation !== 'string' || context.recommendation.trim().length === 0) {
|
|
93
|
+
throw new Error('Missing or invalid \'recommendation\' field');
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
requirement: context.requirement,
|
|
97
|
+
approaches: validatedApproaches,
|
|
98
|
+
recommendation: context.recommendation
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=approaches-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approaches-validator.js","sourceRoot":"","sources":["../../src/utils/approaches-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency analysis utilities
|
|
3
|
+
* Extracts dependencies from manifest files and infers tech stack
|
|
4
|
+
*/
|
|
5
|
+
import { ProjectType } from './project-detector';
|
|
6
|
+
/**
|
|
7
|
+
* Extract dependencies from project manifest files
|
|
8
|
+
*
|
|
9
|
+
* @param projectRoot - Root directory of the project
|
|
10
|
+
* @param projectType - Detected project type
|
|
11
|
+
* @returns Record of dependency names to versions
|
|
12
|
+
*/
|
|
13
|
+
export declare function analyzeDependencies(projectRoot: string, projectType: ProjectType): Promise<Record<string, string>>;
|
|
14
|
+
/**
|
|
15
|
+
* Infer tech stack from dependencies
|
|
16
|
+
* Uses pattern matching on dependency names to identify frameworks and tools
|
|
17
|
+
*
|
|
18
|
+
* @param dependencies - Dependency map from analyzeDependencies
|
|
19
|
+
* @param projectType - Detected project type
|
|
20
|
+
* @returns Array of detected technologies
|
|
21
|
+
*/
|
|
22
|
+
export declare function inferTechStack(dependencies: Record<string, string>, projectType: ProjectType): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Detect build tool from lock files
|
|
25
|
+
*
|
|
26
|
+
* @param projectRoot - Root directory of the project
|
|
27
|
+
* @param projectType - Detected project type
|
|
28
|
+
* @returns Detected build tool name
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectBuildTool(projectRoot: string, projectType: ProjectType): Promise<string>;
|
|
31
|
+
//# sourceMappingURL=dependency-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/dependency-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAYjC;AAoED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,EAAE,WAAW,GACvB,MAAM,EAAE,CAyDV;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dependency analysis utilities
|
|
4
|
+
* Extracts dependencies from manifest files and infers tech stack
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.analyzeDependencies = analyzeDependencies;
|
|
11
|
+
exports.inferTechStack = inferTechStack;
|
|
12
|
+
exports.detectBuildTool = detectBuildTool;
|
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const project_detector_1 = require("./project-detector");
|
|
16
|
+
/**
|
|
17
|
+
* Extract dependencies from project manifest files
|
|
18
|
+
*
|
|
19
|
+
* @param projectRoot - Root directory of the project
|
|
20
|
+
* @param projectType - Detected project type
|
|
21
|
+
* @returns Record of dependency names to versions
|
|
22
|
+
*/
|
|
23
|
+
async function analyzeDependencies(projectRoot, projectType) {
|
|
24
|
+
switch (projectType) {
|
|
25
|
+
case project_detector_1.ProjectType.Node:
|
|
26
|
+
case project_detector_1.ProjectType.NodeMonorepo:
|
|
27
|
+
return analyzeNodeDependencies(projectRoot);
|
|
28
|
+
case project_detector_1.ProjectType.Python:
|
|
29
|
+
return analyzePythonDependencies(projectRoot);
|
|
30
|
+
case project_detector_1.ProjectType.Rust:
|
|
31
|
+
return analyzeRustDependencies(projectRoot);
|
|
32
|
+
default:
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Extract Node.js dependencies from package.json
|
|
38
|
+
*/
|
|
39
|
+
async function analyzeNodeDependencies(projectRoot) {
|
|
40
|
+
const packageJsonPath = path_1.default.join(projectRoot, 'package.json');
|
|
41
|
+
if (!await fs_extra_1.default.pathExists(packageJsonPath)) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const pkg = await fs_extra_1.default.readJson(packageJsonPath);
|
|
46
|
+
return {
|
|
47
|
+
...(pkg.dependencies || {}),
|
|
48
|
+
...(pkg.devDependencies || {})
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extract Python dependencies from requirements.txt or pyproject.toml
|
|
57
|
+
*/
|
|
58
|
+
async function analyzePythonDependencies(projectRoot) {
|
|
59
|
+
// Try requirements.txt first
|
|
60
|
+
const requirementsPath = path_1.default.join(projectRoot, 'requirements.txt');
|
|
61
|
+
if (await fs_extra_1.default.pathExists(requirementsPath)) {
|
|
62
|
+
try {
|
|
63
|
+
const content = await fs_extra_1.default.readFile(requirementsPath, 'utf-8');
|
|
64
|
+
return parseRequirementsTxt(content);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Continue to try pyproject.toml
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Try pyproject.toml
|
|
71
|
+
const pyprojectPath = path_1.default.join(projectRoot, 'pyproject.toml');
|
|
72
|
+
if (await fs_extra_1.default.pathExists(pyprojectPath)) {
|
|
73
|
+
try {
|
|
74
|
+
const content = await fs_extra_1.default.readFile(pyprojectPath, 'utf-8');
|
|
75
|
+
return parsePyprojectToml(content);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract Rust dependencies from Cargo.toml
|
|
85
|
+
*/
|
|
86
|
+
async function analyzeRustDependencies(projectRoot) {
|
|
87
|
+
const cargoPath = path_1.default.join(projectRoot, 'Cargo.toml');
|
|
88
|
+
if (!await fs_extra_1.default.pathExists(cargoPath)) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const content = await fs_extra_1.default.readFile(cargoPath, 'utf-8');
|
|
93
|
+
return parseCargoToml(content);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Infer tech stack from dependencies
|
|
101
|
+
* Uses pattern matching on dependency names to identify frameworks and tools
|
|
102
|
+
*
|
|
103
|
+
* @param dependencies - Dependency map from analyzeDependencies
|
|
104
|
+
* @param projectType - Detected project type
|
|
105
|
+
* @returns Array of detected technologies
|
|
106
|
+
*/
|
|
107
|
+
function inferTechStack(dependencies, projectType) {
|
|
108
|
+
const stack = [];
|
|
109
|
+
// Language/runtime
|
|
110
|
+
if (projectType === project_detector_1.ProjectType.Node || projectType === project_detector_1.ProjectType.NodeMonorepo) {
|
|
111
|
+
if (dependencies.typescript || dependencies['@types/node']) {
|
|
112
|
+
stack.push('TypeScript');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
stack.push('JavaScript');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else if (projectType === project_detector_1.ProjectType.Python) {
|
|
119
|
+
stack.push('Python');
|
|
120
|
+
}
|
|
121
|
+
else if (projectType === project_detector_1.ProjectType.Rust) {
|
|
122
|
+
stack.push('Rust');
|
|
123
|
+
}
|
|
124
|
+
// Frontend frameworks
|
|
125
|
+
if (dependencies.react)
|
|
126
|
+
stack.push('React');
|
|
127
|
+
if (dependencies.vue)
|
|
128
|
+
stack.push('Vue');
|
|
129
|
+
if (dependencies.angular || dependencies['@angular/core'])
|
|
130
|
+
stack.push('Angular');
|
|
131
|
+
if (dependencies.svelte)
|
|
132
|
+
stack.push('Svelte');
|
|
133
|
+
if (dependencies.next)
|
|
134
|
+
stack.push('Next.js');
|
|
135
|
+
if (dependencies.nuxt)
|
|
136
|
+
stack.push('Nuxt');
|
|
137
|
+
// Backend frameworks
|
|
138
|
+
if (dependencies.express)
|
|
139
|
+
stack.push('Express');
|
|
140
|
+
if (dependencies.fastify)
|
|
141
|
+
stack.push('Fastify');
|
|
142
|
+
if (dependencies.nestjs || dependencies['@nestjs/core'])
|
|
143
|
+
stack.push('NestJS');
|
|
144
|
+
if (dependencies.django)
|
|
145
|
+
stack.push('Django');
|
|
146
|
+
if (dependencies.fastapi)
|
|
147
|
+
stack.push('FastAPI');
|
|
148
|
+
if (dependencies.flask)
|
|
149
|
+
stack.push('Flask');
|
|
150
|
+
if (dependencies.actix || dependencies['actix-web'])
|
|
151
|
+
stack.push('Actix');
|
|
152
|
+
// CSS frameworks
|
|
153
|
+
if (dependencies.tailwindcss)
|
|
154
|
+
stack.push('Tailwind CSS');
|
|
155
|
+
if (dependencies['@mui/material'])
|
|
156
|
+
stack.push('MUI');
|
|
157
|
+
if (dependencies.bootstrap)
|
|
158
|
+
stack.push('Bootstrap');
|
|
159
|
+
// Databases
|
|
160
|
+
if (dependencies.pg || dependencies.postgres)
|
|
161
|
+
stack.push('PostgreSQL');
|
|
162
|
+
if (dependencies.mongodb || dependencies.mongoose)
|
|
163
|
+
stack.push('MongoDB');
|
|
164
|
+
if (dependencies.mysql || dependencies.mysql2)
|
|
165
|
+
stack.push('MySQL');
|
|
166
|
+
if (dependencies.redis)
|
|
167
|
+
stack.push('Redis');
|
|
168
|
+
// Build tools
|
|
169
|
+
if (dependencies.vite)
|
|
170
|
+
stack.push('Vite');
|
|
171
|
+
if (dependencies.webpack)
|
|
172
|
+
stack.push('Webpack');
|
|
173
|
+
if (dependencies.rollup)
|
|
174
|
+
stack.push('Rollup');
|
|
175
|
+
if (dependencies.turbopack)
|
|
176
|
+
stack.push('Turbopack');
|
|
177
|
+
// Testing frameworks
|
|
178
|
+
if (dependencies.vitest)
|
|
179
|
+
stack.push('Vitest');
|
|
180
|
+
if (dependencies.jest)
|
|
181
|
+
stack.push('Jest');
|
|
182
|
+
if (dependencies.pytest)
|
|
183
|
+
stack.push('Pytest');
|
|
184
|
+
if (dependencies.mocha)
|
|
185
|
+
stack.push('Mocha');
|
|
186
|
+
return stack;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Detect build tool from lock files
|
|
190
|
+
*
|
|
191
|
+
* @param projectRoot - Root directory of the project
|
|
192
|
+
* @param projectType - Detected project type
|
|
193
|
+
* @returns Detected build tool name
|
|
194
|
+
*/
|
|
195
|
+
async function detectBuildTool(projectRoot, projectType) {
|
|
196
|
+
switch (projectType) {
|
|
197
|
+
case project_detector_1.ProjectType.Node:
|
|
198
|
+
case project_detector_1.ProjectType.NodeMonorepo:
|
|
199
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'pnpm-lock.yaml')))
|
|
200
|
+
return 'pnpm';
|
|
201
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'yarn.lock')))
|
|
202
|
+
return 'yarn';
|
|
203
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'bun.lockb')))
|
|
204
|
+
return 'bun';
|
|
205
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'package-lock.json')))
|
|
206
|
+
return 'npm';
|
|
207
|
+
return 'npm'; // default
|
|
208
|
+
case project_detector_1.ProjectType.Python:
|
|
209
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'poetry.lock')))
|
|
210
|
+
return 'poetry';
|
|
211
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, 'Pipfile.lock')))
|
|
212
|
+
return 'pipenv';
|
|
213
|
+
return 'pip'; // default
|
|
214
|
+
case project_detector_1.ProjectType.Rust:
|
|
215
|
+
return 'cargo';
|
|
216
|
+
default:
|
|
217
|
+
return 'unknown';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// ===== Helper Parsers =====
|
|
221
|
+
/**
|
|
222
|
+
* Parse requirements.txt format
|
|
223
|
+
* Supports lines like: package==1.0.0, package>=1.0, package
|
|
224
|
+
*/
|
|
225
|
+
function parseRequirementsTxt(content) {
|
|
226
|
+
const deps = {};
|
|
227
|
+
const lines = content.split('\n');
|
|
228
|
+
for (const line of lines) {
|
|
229
|
+
const trimmed = line.trim();
|
|
230
|
+
// Skip empty lines and comments
|
|
231
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
232
|
+
continue;
|
|
233
|
+
// Match package name with optional version specifier
|
|
234
|
+
const match = trimmed.match(/^([a-zA-Z0-9_-]+)([>=<~!]=?.*)?$/);
|
|
235
|
+
if (match) {
|
|
236
|
+
const packageName = match[1];
|
|
237
|
+
const version = match[2]?.trim() || '*';
|
|
238
|
+
deps[packageName] = version;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return deps;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Parse pyproject.toml format (simple regex-based)
|
|
245
|
+
* Extracts dependencies from [tool.poetry.dependencies] section
|
|
246
|
+
*/
|
|
247
|
+
function parsePyprojectToml(content) {
|
|
248
|
+
const deps = {};
|
|
249
|
+
// Extract [tool.poetry.dependencies] section
|
|
250
|
+
const depSection = content.match(/\[tool\.poetry\.dependencies\]([\s\S]*?)(\[|$)/);
|
|
251
|
+
if (depSection) {
|
|
252
|
+
const lines = depSection[1].split('\n');
|
|
253
|
+
for (const line of lines) {
|
|
254
|
+
// Match: package = "^1.0.0" or package = { version = "^1.0.0" }
|
|
255
|
+
const match = line.match(/^(\w+)\s*=\s*["']([^"']+)["']/);
|
|
256
|
+
if (match) {
|
|
257
|
+
deps[match[1]] = match[2];
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return deps;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Parse Cargo.toml format (simple regex-based)
|
|
265
|
+
* Extracts dependencies from [dependencies] section
|
|
266
|
+
*/
|
|
267
|
+
function parseCargoToml(content) {
|
|
268
|
+
const deps = {};
|
|
269
|
+
// Extract [dependencies] section (until next section or end of file)
|
|
270
|
+
const depSection = content.match(/\[dependencies\]([\s\S]*?)(\n\[|$)/);
|
|
271
|
+
if (depSection) {
|
|
272
|
+
const lines = depSection[1].split('\n');
|
|
273
|
+
for (const line of lines) {
|
|
274
|
+
const trimmed = line.trim();
|
|
275
|
+
// Skip empty lines
|
|
276
|
+
if (!trimmed)
|
|
277
|
+
continue;
|
|
278
|
+
// Match: package = "1.0" or package = { version = "1.0" }
|
|
279
|
+
// Support hyphens in package names (e.g., actix-web)
|
|
280
|
+
const simpleMatch = trimmed.match(/^([\w-]+)\s*=\s*["']([^"']+)["']/);
|
|
281
|
+
if (simpleMatch) {
|
|
282
|
+
deps[simpleMatch[1]] = simpleMatch[2];
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
// Match object notation: package = { version = "1.0", ... }
|
|
286
|
+
const objectMatch = trimmed.match(/^([\w-]+)\s*=\s*\{.*version\s*=\s*["']([^"']+)["']/);
|
|
287
|
+
if (objectMatch) {
|
|
288
|
+
deps[objectMatch[1]] = objectMatch[2];
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return deps;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=dependency-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-analyzer.js","sourceRoot":"","sources":["../../src/utils/dependency-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory structure analysis
|
|
3
|
+
* Analyzes project directory structure to identify source, test, and config directories
|
|
4
|
+
*/
|
|
5
|
+
import { ProjectType } from './project-detector';
|
|
6
|
+
/**
|
|
7
|
+
* Directory structure result
|
|
8
|
+
*/
|
|
9
|
+
export interface DirectoryStructure {
|
|
10
|
+
source: string[];
|
|
11
|
+
tests: string[];
|
|
12
|
+
config: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Analyze project directory structure
|
|
16
|
+
* Uses predefined candidate lists to identify common directory patterns
|
|
17
|
+
*
|
|
18
|
+
* @param projectRoot - Root directory of the project
|
|
19
|
+
* @param projectType - Detected project type
|
|
20
|
+
* @returns Directory structure with source, test, and config directories
|
|
21
|
+
*/
|
|
22
|
+
export declare function analyzeDirectories(projectRoot: string, projectType: ProjectType): Promise<DirectoryStructure>;
|
|
23
|
+
//# sourceMappingURL=directory-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/directory-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,kBAAkB,CAAC,CA6D7B"}
|