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.
Files changed (54) hide show
  1. package/README.md +128 -0
  2. package/dist/commands/analyze.d.ts +18 -0
  3. package/dist/commands/analyze.d.ts.map +1 -0
  4. package/dist/commands/analyze.js +404 -0
  5. package/dist/commands/analyze.js.map +1 -0
  6. package/dist/commands/fix.d.ts +14 -0
  7. package/dist/commands/fix.d.ts.map +1 -0
  8. package/dist/commands/fix.js +82 -0
  9. package/dist/commands/fix.js.map +1 -0
  10. package/dist/commands/graph.d.ts +12 -0
  11. package/dist/commands/graph.d.ts.map +1 -0
  12. package/dist/commands/graph.js +58 -0
  13. package/dist/commands/graph.js.map +1 -0
  14. package/dist/commands/login.d.ts +11 -0
  15. package/dist/commands/login.d.ts.map +1 -0
  16. package/dist/commands/login.js +109 -0
  17. package/dist/commands/login.js.map +1 -0
  18. package/dist/commands/logout.d.ts +7 -0
  19. package/dist/commands/logout.d.ts.map +1 -0
  20. package/dist/commands/logout.js +22 -0
  21. package/dist/commands/logout.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +108 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/services/api-client.d.ts +89 -0
  27. package/dist/services/api-client.d.ts.map +1 -0
  28. package/dist/services/api-client.js +162 -0
  29. package/dist/services/api-client.js.map +1 -0
  30. package/dist/services/auth-manager.d.ts +30 -0
  31. package/dist/services/auth-manager.d.ts.map +1 -0
  32. package/dist/services/auth-manager.js +82 -0
  33. package/dist/services/auth-manager.js.map +1 -0
  34. package/dist/services/cache-manager.d.ts +52 -0
  35. package/dist/services/cache-manager.d.ts.map +1 -0
  36. package/dist/services/cache-manager.js +87 -0
  37. package/dist/services/cache-manager.js.map +1 -0
  38. package/dist/services/gitignore.d.ts +19 -0
  39. package/dist/services/gitignore.d.ts.map +1 -0
  40. package/dist/services/gitignore.js +64 -0
  41. package/dist/services/gitignore.js.map +1 -0
  42. package/dist/services/package-json.d.ts +39 -0
  43. package/dist/services/package-json.d.ts.map +1 -0
  44. package/dist/services/package-json.js +106 -0
  45. package/dist/services/package-json.js.map +1 -0
  46. package/dist/utils/hash.d.ts +6 -0
  47. package/dist/utils/hash.d.ts.map +1 -0
  48. package/dist/utils/hash.js +9 -0
  49. package/dist/utils/hash.js.map +1 -0
  50. package/dist/utils/output.d.ts +91 -0
  51. package/dist/utils/output.d.ts.map +1 -0
  52. package/dist/utils/output.js +222 -0
  53. package/dist/utils/output.js.map +1 -0
  54. 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"}