depfixer 1.0.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 +128 -0
- package/dist/commands/analyze.d.ts +18 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +404 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/fix.d.ts +14 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +82 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/graph.d.ts +12 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +58 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/login.d.ts +11 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +109 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +7 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +22 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -0
- package/dist/services/api-client.d.ts +89 -0
- package/dist/services/api-client.d.ts.map +1 -0
- package/dist/services/api-client.js +162 -0
- package/dist/services/api-client.js.map +1 -0
- package/dist/services/auth-manager.d.ts +30 -0
- package/dist/services/auth-manager.d.ts.map +1 -0
- package/dist/services/auth-manager.js +82 -0
- package/dist/services/auth-manager.js.map +1 -0
- package/dist/services/cache-manager.d.ts +52 -0
- package/dist/services/cache-manager.d.ts.map +1 -0
- package/dist/services/cache-manager.js +87 -0
- package/dist/services/cache-manager.js.map +1 -0
- package/dist/services/gitignore.d.ts +19 -0
- package/dist/services/gitignore.d.ts.map +1 -0
- package/dist/services/gitignore.js +64 -0
- package/dist/services/gitignore.js.map +1 -0
- package/dist/services/package-json.d.ts +39 -0
- package/dist/services/package-json.d.ts.map +1 -0
- package/dist/services/package-json.js +106 -0
- package/dist/services/package-json.js.map +1 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +9 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/output.d.ts +91 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +222 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# DepFixer CLI
|
|
2
|
+
|
|
3
|
+
Analyze and fix JavaScript/TypeScript dependency conflicts in your projects.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g depfixer
|
|
9
|
+
# or use directly with npx
|
|
10
|
+
npx depfixer
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Free audit - see issues and health score
|
|
17
|
+
npx depfixer analyze
|
|
18
|
+
|
|
19
|
+
# Full analysis with fix recommendations (requires login)
|
|
20
|
+
npx depfixer analyze --full
|
|
21
|
+
|
|
22
|
+
# Migration analysis to target framework version
|
|
23
|
+
npx depfixer analyze --migrate 19
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
### `analyze`
|
|
29
|
+
|
|
30
|
+
Analyze your project's package.json for dependency conflicts.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx depfixer analyze [options]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Options:**
|
|
37
|
+
- `--full` - Full analysis with specific version recommendations (requires auth, 1 credit)
|
|
38
|
+
- `--migrate <version>` - Migration analysis to target Angular/React version (requires auth, 1 credit)
|
|
39
|
+
- `--json` - Output results as JSON
|
|
40
|
+
- `--ci` - CI mode - exit code 1 if critical issues found
|
|
41
|
+
- `--path <dir>` - Path to project directory (default: current directory)
|
|
42
|
+
|
|
43
|
+
**Examples:**
|
|
44
|
+
```bash
|
|
45
|
+
npx depfixer analyze # Free audit
|
|
46
|
+
npx depfixer analyze --full # Full analysis
|
|
47
|
+
npx depfixer analyze --migrate 19 # Migrate to v19
|
|
48
|
+
npx depfixer analyze --path ./my-app # Analyze specific directory
|
|
49
|
+
npx depfixer analyze --json --ci # CI pipeline usage
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### `fix`
|
|
53
|
+
|
|
54
|
+
Apply fixes from a previous `--full` or `--migrate` analysis.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx depfixer fix [options]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Options:**
|
|
61
|
+
- `--path <dir>` - Path to project directory (default: current directory)
|
|
62
|
+
|
|
63
|
+
Creates a `package.json.fixed` file with recommended versions.
|
|
64
|
+
|
|
65
|
+
### `login`
|
|
66
|
+
|
|
67
|
+
Authenticate with your DepFixer account using device code flow.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx depfixer login
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### `logout`
|
|
74
|
+
|
|
75
|
+
Sign out and clear stored credentials.
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx depfixer logout
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### `graph`
|
|
82
|
+
|
|
83
|
+
Open dependency graph visualization in your browser.
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npx depfixer graph [options]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Options:**
|
|
90
|
+
- `--path <dir>` - Path to project directory
|
|
91
|
+
|
|
92
|
+
## Pricing
|
|
93
|
+
|
|
94
|
+
| Command | Cost |
|
|
95
|
+
|---------|------|
|
|
96
|
+
| `analyze` (audit mode) | FREE |
|
|
97
|
+
| `analyze --full` | 1 credit |
|
|
98
|
+
| `analyze --migrate` | 1 credit |
|
|
99
|
+
| `fix` | FREE (uses cached analysis) |
|
|
100
|
+
|
|
101
|
+
## Supported Frameworks
|
|
102
|
+
|
|
103
|
+
- Angular (9-19)
|
|
104
|
+
- React (16-19)
|
|
105
|
+
- Vue.js
|
|
106
|
+
- Next.js
|
|
107
|
+
- NestJS
|
|
108
|
+
|
|
109
|
+
## What It Detects
|
|
110
|
+
|
|
111
|
+
- Peer dependency conflicts
|
|
112
|
+
- Version mismatches between related packages
|
|
113
|
+
- Deprecated packages
|
|
114
|
+
- Breaking changes
|
|
115
|
+
- TypeScript version compatibility
|
|
116
|
+
- Framework-specific version alignment issues
|
|
117
|
+
|
|
118
|
+
## Requirements
|
|
119
|
+
|
|
120
|
+
- Node.js >= 18.0.0
|
|
121
|
+
|
|
122
|
+
## Links
|
|
123
|
+
|
|
124
|
+
- [Website](https://depfixer.com)
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
MIT
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface AnalyzeOptions {
|
|
2
|
+
full?: boolean;
|
|
3
|
+
migrate?: string;
|
|
4
|
+
json?: boolean;
|
|
5
|
+
ci?: boolean;
|
|
6
|
+
path?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Analyze command
|
|
10
|
+
*
|
|
11
|
+
* Modes:
|
|
12
|
+
* - default (audit): FREE, shows issues but hides recommendations
|
|
13
|
+
* - --full: PAID, shows full analysis with recommendations
|
|
14
|
+
* - --migrate <version>: PAID, shows migration plan
|
|
15
|
+
*/
|
|
16
|
+
export declare function analyzeCommand(options: AnalyzeOptions): Promise<void>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=analyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAsBA,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC3E"}
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { ApiClient } from '../services/api-client.js';
|
|
3
|
+
import { PackageJsonService } from '../services/package-json.js';
|
|
4
|
+
import { CacheManager } from '../services/cache-manager.js';
|
|
5
|
+
import { GitignoreService } from '../services/gitignore.js';
|
|
6
|
+
import { createSpinner, printHeader, printHealthScore, printSeveritySummary, createAuditTable, createFullTable, createMigrationTable, printUpgradeBox, printCacheInfo, printError, printInfo, printPrefetchProgress, clearLine, } from '../utils/output.js';
|
|
7
|
+
/**
|
|
8
|
+
* Analyze command
|
|
9
|
+
*
|
|
10
|
+
* Modes:
|
|
11
|
+
* - default (audit): FREE, shows issues but hides recommendations
|
|
12
|
+
* - --full: PAID, shows full analysis with recommendations
|
|
13
|
+
* - --migrate <version>: PAID, shows migration plan
|
|
14
|
+
*/
|
|
15
|
+
export async function analyzeCommand(options) {
|
|
16
|
+
const projectDir = options.path || process.cwd();
|
|
17
|
+
try {
|
|
18
|
+
const packageJsonService = new PackageJsonService();
|
|
19
|
+
const apiClient = new ApiClient();
|
|
20
|
+
// Read and sanitize package.json
|
|
21
|
+
const spinner = createSpinner('Reading package.json...').start();
|
|
22
|
+
const { content, parsed } = await packageJsonService.read(projectDir);
|
|
23
|
+
const sanitized = packageJsonService.sanitize(parsed);
|
|
24
|
+
spinner.succeed('Package.json loaded');
|
|
25
|
+
// Detect framework from package.json (client-side hint)
|
|
26
|
+
const framework = detectFramework(sanitized);
|
|
27
|
+
// Determine analysis mode
|
|
28
|
+
if (options.migrate) {
|
|
29
|
+
await runMigrateAnalysis(apiClient, sanitized, content, options.migrate, framework, options, projectDir);
|
|
30
|
+
}
|
|
31
|
+
else if (options.full) {
|
|
32
|
+
await runFullAnalysis(apiClient, sanitized, content, framework, options, projectDir);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
await runAuditAnalysis(apiClient, sanitized, framework, options);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (options.json) {
|
|
40
|
+
console.log(JSON.stringify({ error: error.message }, null, 2));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
printError(error.message);
|
|
44
|
+
}
|
|
45
|
+
process.exit(options.ci ? 2 : 1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run audit analysis (FREE)
|
|
50
|
+
* Now includes prefetch polling for complete package data
|
|
51
|
+
*/
|
|
52
|
+
async function runAuditAnalysis(apiClient, sanitized, framework, options) {
|
|
53
|
+
const spinner = createSpinner('Analyzing dependencies...').start();
|
|
54
|
+
try {
|
|
55
|
+
const response = await apiClient.analyzeAudit(sanitized, framework);
|
|
56
|
+
if (!response.success || !response.data) {
|
|
57
|
+
spinner.fail('Analysis failed');
|
|
58
|
+
throw new Error(response.error || 'Unknown error');
|
|
59
|
+
}
|
|
60
|
+
let data = response.data;
|
|
61
|
+
const { analysisId, prefetchId, hasPendingPackages } = data;
|
|
62
|
+
const debug = process.env.DEPFIXER_DEBUG === 'true';
|
|
63
|
+
if (debug) {
|
|
64
|
+
console.log('[DEBUG] hasPendingPackages:', hasPendingPackages);
|
|
65
|
+
console.log('[DEBUG] prefetchId:', prefetchId);
|
|
66
|
+
console.log('[DEBUG] analysisId:', analysisId);
|
|
67
|
+
}
|
|
68
|
+
// If there are pending packages, poll until prefetch + re-analysis completes
|
|
69
|
+
if (hasPendingPackages && prefetchId && analysisId) {
|
|
70
|
+
spinner.text = 'Fetching package data...';
|
|
71
|
+
spinner.stop();
|
|
72
|
+
console.log(chalk.dim(' Some packages need to be fetched. Please wait...'));
|
|
73
|
+
// Poll prefetch status with progress bar
|
|
74
|
+
let isComplete = false;
|
|
75
|
+
let pollCount = 0;
|
|
76
|
+
const maxPolls = 120; // 2 minutes max (1 second intervals)
|
|
77
|
+
while (!isComplete && pollCount < maxPolls) {
|
|
78
|
+
try {
|
|
79
|
+
const status = await apiClient.pollPrefetchStatus(prefetchId);
|
|
80
|
+
printPrefetchProgress(status.fetchedCount, status.totalPackages, status.percentage);
|
|
81
|
+
// Check if prefetch AND re-analysis are complete
|
|
82
|
+
if (status.isComplete && status.reanalysisStatus === 'completed') {
|
|
83
|
+
isComplete = true;
|
|
84
|
+
clearLine();
|
|
85
|
+
console.log(chalk.green(' ✓ Package data fetched successfully'));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Wait 1 second before next poll
|
|
89
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
90
|
+
pollCount++;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (pollError) {
|
|
94
|
+
// If polling fails, continue with partial results
|
|
95
|
+
clearLine();
|
|
96
|
+
console.log(chalk.yellow(' ⚠ Could not complete package fetch, using partial results'));
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (pollCount >= maxPolls) {
|
|
101
|
+
clearLine();
|
|
102
|
+
console.log(chalk.yellow(' ⚠ Package fetch timed out, using partial results'));
|
|
103
|
+
}
|
|
104
|
+
// Fetch updated analysis results if prefetch completed
|
|
105
|
+
if (isComplete) {
|
|
106
|
+
const updatedResponse = await apiClient.getAnalysisById(analysisId);
|
|
107
|
+
if (updatedResponse.success && updatedResponse.data) {
|
|
108
|
+
const updated = updatedResponse.data;
|
|
109
|
+
// Map the response structure
|
|
110
|
+
const analysisResult = updated.analysisResult || {};
|
|
111
|
+
data = {
|
|
112
|
+
healthScore: updated.healthScore || analysisResult.healthScore,
|
|
113
|
+
totalPackages: updated.totalPackages || analysisResult.totalPackages,
|
|
114
|
+
summary: analysisResult.summary || calculateSummary(analysisResult.conflicts || []),
|
|
115
|
+
conflicts: analysisResult.conflicts || [],
|
|
116
|
+
framework: analysisResult.frameworkContext?.detected
|
|
117
|
+
? { name: analysisResult.frameworkContext.detected.name, version: analysisResult.frameworkContext.detected.version }
|
|
118
|
+
: data.framework,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
spinner.start();
|
|
123
|
+
}
|
|
124
|
+
spinner.succeed('Analysis complete');
|
|
125
|
+
// JSON output mode
|
|
126
|
+
if (options.json) {
|
|
127
|
+
console.log(JSON.stringify({
|
|
128
|
+
mode: 'audit',
|
|
129
|
+
healthScore: data.healthScore,
|
|
130
|
+
totalPackages: data.totalPackages,
|
|
131
|
+
summary: data.summary,
|
|
132
|
+
conflicts: data.conflicts,
|
|
133
|
+
framework: data.framework,
|
|
134
|
+
}, null, 2));
|
|
135
|
+
// CI exit code
|
|
136
|
+
if (options.ci && (data.summary.critical > 0 || data.summary.high > 0)) {
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// Pretty output
|
|
142
|
+
printHeader(`Analysis Results - ${sanitized.name || 'unnamed'}`);
|
|
143
|
+
printHealthScore(data.healthScore);
|
|
144
|
+
console.log(`${chalk.bold('Packages analyzed:')} ${data.totalPackages}`);
|
|
145
|
+
console.log();
|
|
146
|
+
printSeveritySummary(data.summary);
|
|
147
|
+
if (data.conflicts && data.conflicts.length > 0) {
|
|
148
|
+
console.log();
|
|
149
|
+
console.log(chalk.bold('Issues Found:'));
|
|
150
|
+
console.log(createAuditTable(data.conflicts));
|
|
151
|
+
}
|
|
152
|
+
// Show upgrade CTA
|
|
153
|
+
const issueCount = data.summary.critical + data.summary.high + data.summary.medium + data.summary.low;
|
|
154
|
+
if (issueCount > 0) {
|
|
155
|
+
printUpgradeBox(issueCount);
|
|
156
|
+
}
|
|
157
|
+
// CI exit code
|
|
158
|
+
if (options.ci && (data.summary.critical > 0 || data.summary.high > 0)) {
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
spinner.fail('Analysis failed');
|
|
164
|
+
throw error;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Run full analysis (PAID)
|
|
169
|
+
*/
|
|
170
|
+
async function runFullAnalysis(apiClient, sanitized, packageJsonContent, framework, options, projectDir) {
|
|
171
|
+
const spinner = createSpinner('Analyzing dependencies (full mode)...').start();
|
|
172
|
+
try {
|
|
173
|
+
const response = await apiClient.analyzeFull(sanitized, framework);
|
|
174
|
+
if (!response.success || !response.data) {
|
|
175
|
+
spinner.fail('Analysis failed');
|
|
176
|
+
throw new Error(response.error || 'Unknown error');
|
|
177
|
+
}
|
|
178
|
+
let data = response.data;
|
|
179
|
+
const { analysisId, prefetchId, hasPendingPackages, creditsUsed, creditsRemaining } = data;
|
|
180
|
+
const debug = process.env.DEPFIXER_DEBUG === 'true';
|
|
181
|
+
if (debug) {
|
|
182
|
+
console.log('[DEBUG] hasPendingPackages:', hasPendingPackages);
|
|
183
|
+
console.log('[DEBUG] prefetchId:', prefetchId);
|
|
184
|
+
console.log('[DEBUG] analysisId:', analysisId);
|
|
185
|
+
}
|
|
186
|
+
// If there are pending packages, poll until prefetch + re-analysis completes
|
|
187
|
+
if (hasPendingPackages && prefetchId && analysisId) {
|
|
188
|
+
spinner.text = 'Fetching package data...';
|
|
189
|
+
spinner.stop();
|
|
190
|
+
console.log(chalk.dim(' Some packages need to be fetched. Please wait...'));
|
|
191
|
+
// Poll prefetch status with progress bar
|
|
192
|
+
let isComplete = false;
|
|
193
|
+
let pollCount = 0;
|
|
194
|
+
const maxPolls = 120; // 2 minutes max (1 second intervals)
|
|
195
|
+
while (!isComplete && pollCount < maxPolls) {
|
|
196
|
+
try {
|
|
197
|
+
const status = await apiClient.pollPrefetchStatus(prefetchId);
|
|
198
|
+
printPrefetchProgress(status.fetchedCount, status.totalPackages, status.percentage);
|
|
199
|
+
// Check if prefetch AND re-analysis are complete
|
|
200
|
+
if (status.isComplete && status.reanalysisStatus === 'completed') {
|
|
201
|
+
isComplete = true;
|
|
202
|
+
clearLine();
|
|
203
|
+
console.log(chalk.green(' ✓ Package data fetched successfully'));
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// Wait 1 second before next poll
|
|
207
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
208
|
+
pollCount++;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (pollError) {
|
|
212
|
+
// If polling fails, continue with partial results
|
|
213
|
+
clearLine();
|
|
214
|
+
console.log(chalk.yellow(' ⚠ Could not complete package fetch, using partial results'));
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (pollCount >= maxPolls) {
|
|
219
|
+
clearLine();
|
|
220
|
+
console.log(chalk.yellow(' ⚠ Package fetch timed out, using partial results'));
|
|
221
|
+
}
|
|
222
|
+
// Fetch updated analysis results if prefetch completed
|
|
223
|
+
if (isComplete) {
|
|
224
|
+
const updatedResponse = await apiClient.getAnalysisById(analysisId);
|
|
225
|
+
if (updatedResponse.success && updatedResponse.data) {
|
|
226
|
+
const updated = updatedResponse.data;
|
|
227
|
+
// Map the response structure: analysisResult contains conflicts, summary, etc.
|
|
228
|
+
const analysisResult = updated.analysisResult || {};
|
|
229
|
+
data = {
|
|
230
|
+
healthScore: updated.healthScore || analysisResult.healthScore,
|
|
231
|
+
totalPackages: updated.totalPackages || analysisResult.totalPackages,
|
|
232
|
+
summary: analysisResult.summary || calculateSummary(analysisResult.conflicts || []),
|
|
233
|
+
conflicts: analysisResult.conflicts || [],
|
|
234
|
+
solution: analysisResult.solution || buildSolutionFromConflicts(analysisResult.conflicts || []),
|
|
235
|
+
framework: analysisResult.frameworkContext?.detected
|
|
236
|
+
? { name: analysisResult.frameworkContext.detected.name, version: analysisResult.frameworkContext.detected.version }
|
|
237
|
+
: data.framework,
|
|
238
|
+
creditsUsed,
|
|
239
|
+
creditsRemaining,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
spinner.start();
|
|
244
|
+
}
|
|
245
|
+
spinner.succeed('Analysis complete');
|
|
246
|
+
// Save to cache for fix command
|
|
247
|
+
const cacheManager = new CacheManager(projectDir);
|
|
248
|
+
await cacheManager.saveCache(packageJsonContent, data.framework?.name, data.healthScore, data.solution);
|
|
249
|
+
// Add .depfixer/* to .gitignore
|
|
250
|
+
const gitignoreService = new GitignoreService(projectDir);
|
|
251
|
+
const addedToGitignore = await gitignoreService.addToGitignore();
|
|
252
|
+
// JSON output mode
|
|
253
|
+
if (options.json) {
|
|
254
|
+
console.log(JSON.stringify({
|
|
255
|
+
mode: 'full',
|
|
256
|
+
healthScore: data.healthScore,
|
|
257
|
+
totalPackages: data.totalPackages,
|
|
258
|
+
summary: data.summary,
|
|
259
|
+
conflicts: data.conflicts,
|
|
260
|
+
solution: data.solution,
|
|
261
|
+
framework: data.framework,
|
|
262
|
+
creditsUsed: data.creditsUsed,
|
|
263
|
+
creditsRemaining: data.creditsRemaining,
|
|
264
|
+
cached: true,
|
|
265
|
+
cacheFile: cacheManager.getCacheFilePath(),
|
|
266
|
+
}, null, 2));
|
|
267
|
+
if (options.ci && (data.summary.critical > 0 || data.summary.high > 0)) {
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
// Pretty output
|
|
273
|
+
printHeader(`Full Analysis - ${sanitized.name || 'unnamed'}`);
|
|
274
|
+
printHealthScore(data.healthScore);
|
|
275
|
+
console.log(`${chalk.bold('Packages analyzed:')} ${data.totalPackages}`);
|
|
276
|
+
console.log(`${chalk.bold('Credits used:')} ${data.creditsUsed} (${data.creditsRemaining} remaining)`);
|
|
277
|
+
console.log();
|
|
278
|
+
printSeveritySummary(data.summary);
|
|
279
|
+
if (data.conflicts && data.conflicts.length > 0) {
|
|
280
|
+
console.log();
|
|
281
|
+
console.log(chalk.bold('Issues Found:'));
|
|
282
|
+
console.log(createFullTable(data.conflicts));
|
|
283
|
+
}
|
|
284
|
+
// Show cache info
|
|
285
|
+
printCacheInfo(cacheManager.getCacheFilePath());
|
|
286
|
+
if (addedToGitignore) {
|
|
287
|
+
printInfo('Added .depfixer/* to .gitignore');
|
|
288
|
+
}
|
|
289
|
+
// CI exit code
|
|
290
|
+
if (options.ci && (data.summary.critical > 0 || data.summary.high > 0)) {
|
|
291
|
+
process.exit(1);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
spinner.fail('Analysis failed');
|
|
296
|
+
throw error;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Run migration analysis (PAID)
|
|
301
|
+
*/
|
|
302
|
+
async function runMigrateAnalysis(apiClient, sanitized, packageJsonContent, targetVersion, framework, options, projectDir) {
|
|
303
|
+
const spinner = createSpinner(`Analyzing migration to version ${targetVersion}...`).start();
|
|
304
|
+
try {
|
|
305
|
+
const response = await apiClient.analyzeMigrate(sanitized, targetVersion, framework);
|
|
306
|
+
if (!response.success || !response.data) {
|
|
307
|
+
spinner.fail('Migration analysis failed');
|
|
308
|
+
throw new Error(response.error || 'Unknown error');
|
|
309
|
+
}
|
|
310
|
+
spinner.succeed('Migration analysis complete');
|
|
311
|
+
const data = response.data;
|
|
312
|
+
// Save to cache for fix command
|
|
313
|
+
const cacheManager = new CacheManager(projectDir);
|
|
314
|
+
await cacheManager.saveCache(packageJsonContent, data.framework?.name, data.healthScore?.after || data.healthScore, data.solution);
|
|
315
|
+
// Add .depfixer/* to .gitignore
|
|
316
|
+
const gitignoreService = new GitignoreService(projectDir);
|
|
317
|
+
await gitignoreService.addToGitignore();
|
|
318
|
+
// JSON output mode
|
|
319
|
+
if (options.json) {
|
|
320
|
+
console.log(JSON.stringify({
|
|
321
|
+
mode: 'migrate',
|
|
322
|
+
framework: data.framework,
|
|
323
|
+
healthScore: data.healthScore,
|
|
324
|
+
corePackages: data.corePackages,
|
|
325
|
+
breakingChanges: data.breakingChanges,
|
|
326
|
+
solution: data.solution,
|
|
327
|
+
creditsUsed: data.creditsUsed,
|
|
328
|
+
creditsRemaining: data.creditsRemaining,
|
|
329
|
+
cached: true,
|
|
330
|
+
}, null, 2));
|
|
331
|
+
if (options.ci && data.breakingChanges > 0) {
|
|
332
|
+
process.exit(1);
|
|
333
|
+
}
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
// Pretty output
|
|
337
|
+
printHeader(`Migration Plan: ${data.framework.name} ${data.framework.currentVersion} → ${data.framework.targetVersion}`);
|
|
338
|
+
console.log();
|
|
339
|
+
console.log(chalk.bold('Health Score Projection:'));
|
|
340
|
+
console.log(` Before: ${chalk.yellow(data.healthScore.before)}/100`);
|
|
341
|
+
console.log(` After: ${chalk.green(data.healthScore.after)}/100`);
|
|
342
|
+
console.log();
|
|
343
|
+
console.log(`${chalk.bold('Breaking changes:')} ${data.breakingChanges}`);
|
|
344
|
+
console.log(`${chalk.bold('Credits used:')} ${data.creditsUsed} (${data.creditsRemaining} remaining)`);
|
|
345
|
+
if (data.corePackages && data.corePackages.length > 0) {
|
|
346
|
+
console.log();
|
|
347
|
+
console.log(chalk.bold('Core Package Updates:'));
|
|
348
|
+
console.log(createMigrationTable(data.corePackages));
|
|
349
|
+
}
|
|
350
|
+
printCacheInfo(cacheManager.getCacheFilePath());
|
|
351
|
+
// CI exit code
|
|
352
|
+
if (options.ci && data.breakingChanges > 0) {
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
spinner.fail('Migration analysis failed');
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Simple client-side framework detection for API hint
|
|
363
|
+
*/
|
|
364
|
+
function detectFramework(pkg) {
|
|
365
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
366
|
+
if (deps['@angular/core'])
|
|
367
|
+
return 'angular';
|
|
368
|
+
if (deps['react'])
|
|
369
|
+
return 'react';
|
|
370
|
+
if (deps['vue'])
|
|
371
|
+
return 'vue';
|
|
372
|
+
if (deps['svelte'])
|
|
373
|
+
return 'svelte';
|
|
374
|
+
if (deps['next'])
|
|
375
|
+
return 'react'; // Next.js is React-based
|
|
376
|
+
if (deps['nuxt'])
|
|
377
|
+
return 'vue'; // Nuxt is Vue-based
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Calculate severity summary from conflicts array
|
|
382
|
+
*/
|
|
383
|
+
function calculateSummary(conflicts) {
|
|
384
|
+
return {
|
|
385
|
+
critical: conflicts.filter(c => c.severity === 'critical').length,
|
|
386
|
+
high: conflicts.filter(c => c.severity === 'high').length,
|
|
387
|
+
medium: conflicts.filter(c => c.severity === 'medium').length,
|
|
388
|
+
low: conflicts.filter(c => c.severity === 'low').length,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Build solution object from conflicts (for fix command)
|
|
393
|
+
*/
|
|
394
|
+
function buildSolutionFromConflicts(conflicts) {
|
|
395
|
+
const dependencies = {};
|
|
396
|
+
const devDependencies = {};
|
|
397
|
+
for (const conflict of conflicts) {
|
|
398
|
+
if (conflict.recommendedVersion && conflict.recommendedVersion !== 'pending') {
|
|
399
|
+
dependencies[conflict.package] = conflict.recommendedVersion;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return { dependencies, devDependencies };
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface FixOptions {
|
|
2
|
+
path?: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Fix command
|
|
6
|
+
*
|
|
7
|
+
* Applies cached fixes from a previous --full analysis
|
|
8
|
+
* Creates package.json.fixed (does not modify original)
|
|
9
|
+
*
|
|
10
|
+
* This command is FREE - uses locally cached solution
|
|
11
|
+
*/
|
|
12
|
+
export declare function fixCommand(options: FixOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=fix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAWA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFnE"}
|