depfixer 1.0.0 → 1.1.1
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/dist/commands/audit.d.ts +19 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +170 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/fix.d.ts +10 -3
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +407 -41
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/graph.d.ts +1 -1
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +17 -12
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +120 -19
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +6 -0
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/migrate.d.ts +22 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +874 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/smart.d.ts +23 -0
- package/dist/commands/smart.d.ts.map +1 -0
- package/dist/commands/smart.js +1024 -0
- package/dist/commands/smart.js.map +1 -0
- package/dist/commands/whoami.d.ts +14 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +65 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.js +165 -40
- package/dist/index.js.map +1 -1
- package/dist/services/analytics.d.ts +108 -0
- package/dist/services/analytics.d.ts.map +1 -0
- package/dist/services/analytics.js +305 -0
- package/dist/services/analytics.js.map +1 -0
- package/dist/services/api-client.d.ts +159 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +192 -10
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/auth-manager.d.ts +14 -0
- package/dist/services/auth-manager.d.ts.map +1 -1
- package/dist/services/auth-manager.js +30 -0
- package/dist/services/auth-manager.js.map +1 -1
- package/dist/services/cache-manager.d.ts +62 -22
- package/dist/services/cache-manager.d.ts.map +1 -1
- package/dist/services/cache-manager.js +116 -30
- package/dist/services/cache-manager.js.map +1 -1
- package/dist/services/device-id.d.ts +20 -0
- package/dist/services/device-id.d.ts.map +1 -0
- package/dist/services/device-id.js +70 -0
- package/dist/services/device-id.js.map +1 -0
- package/dist/services/package-json.d.ts +44 -5
- package/dist/services/package-json.d.ts.map +1 -1
- package/dist/services/package-json.js +273 -20
- package/dist/services/package-json.js.map +1 -1
- package/dist/services/payment-flow.d.ts +108 -0
- package/dist/services/payment-flow.d.ts.map +1 -0
- package/dist/services/payment-flow.js +476 -0
- package/dist/services/payment-flow.js.map +1 -0
- package/dist/services/session-manager.d.ts +92 -0
- package/dist/services/session-manager.d.ts.map +1 -0
- package/dist/services/session-manager.js +218 -0
- package/dist/services/session-manager.js.map +1 -0
- package/dist/utils/design-system.d.ts +90 -0
- package/dist/utils/design-system.d.ts.map +1 -0
- package/dist/utils/design-system.js +338 -0
- package/dist/utils/design-system.js.map +1 -0
- package/dist/utils/output.d.ts +48 -1
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +180 -17
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/print.d.ts +116 -0
- package/dist/utils/print.d.ts.map +1 -0
- package/dist/utils/print.js +190 -0
- package/dist/utils/print.js.map +1 -0
- package/package.json +13 -2
- package/dist/commands/analyze.d.ts +0 -18
- package/dist/commands/analyze.d.ts.map +0 -1
- package/dist/commands/analyze.js +0 -404
- package/dist/commands/analyze.js.map +0 -1
- package/dist/services/gitignore.d.ts +0 -19
- package/dist/services/gitignore.d.ts.map +0 -1
- package/dist/services/gitignore.js +0 -64
- package/dist/services/gitignore.js.map +0 -1
package/dist/commands/fix.js
CHANGED
|
@@ -1,82 +1,448 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { PackageJsonService } from '../services/package-json.js';
|
|
3
3
|
import { CacheManager } from '../services/cache-manager.js';
|
|
4
|
-
import {
|
|
4
|
+
import { SessionManager } from '../services/session-manager.js';
|
|
5
|
+
import { PaymentFlowService } from '../services/payment-flow.js';
|
|
6
|
+
import { ApiClient, NetworkError } from '../services/api-client.js';
|
|
7
|
+
import { analytics } from '../services/analytics.js';
|
|
8
|
+
import { createSpinner, printHeader, printSuccess, printError, printWarning, printInfo, runStepSequence, } from '../utils/output.js';
|
|
9
|
+
import { printCliHeader } from '../utils/design-system.js';
|
|
5
10
|
/**
|
|
6
11
|
* Fix command
|
|
7
12
|
*
|
|
8
|
-
* Applies
|
|
9
|
-
*
|
|
13
|
+
* Applies fixes from a previous analysis:
|
|
14
|
+
* - NEW FLOW: Uses session.json with payment flow
|
|
15
|
+
* - LEGACY FLOW: Uses analysis-history.json (backward compat)
|
|
10
16
|
*
|
|
11
|
-
*
|
|
17
|
+
* Steps:
|
|
18
|
+
* 1. Load session (new) or cache (legacy)
|
|
19
|
+
* 2. Verify package.json hash
|
|
20
|
+
* 3. Check payment status
|
|
21
|
+
* 4. Run payment flow if needed
|
|
22
|
+
* 5. Fetch solution and apply
|
|
12
23
|
*/
|
|
13
24
|
export async function fixCommand(options) {
|
|
14
25
|
const projectDir = options.path || process.cwd();
|
|
26
|
+
// Print CLI header
|
|
27
|
+
printCliHeader();
|
|
28
|
+
// Track: fix_started
|
|
29
|
+
analytics.fixStarted({ command: 'fix' });
|
|
15
30
|
try {
|
|
31
|
+
const sessionManager = new SessionManager(projectDir);
|
|
16
32
|
const cacheManager = new CacheManager(projectDir);
|
|
17
33
|
const packageJsonService = new PackageJsonService();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
34
|
+
const apiClient = new ApiClient();
|
|
35
|
+
// Try to migrate from old cache format if needed
|
|
36
|
+
await sessionManager.migrateFromOldCache();
|
|
37
|
+
// Check for session (new flow) or cache (legacy)
|
|
38
|
+
const hasSession = await sessionManager.hasSession();
|
|
39
|
+
const hasLegacyCache = await cacheManager.cacheExists();
|
|
40
|
+
if (!hasSession && !hasLegacyCache) {
|
|
41
|
+
// Track: fix_cache_missing
|
|
42
|
+
analytics.fixCacheMissing({ reason: 'no_session_or_cache' });
|
|
21
43
|
printError('No cached analysis found.');
|
|
22
44
|
console.log();
|
|
23
45
|
console.log('Run one of these commands first:');
|
|
24
|
-
console.log(` ${chalk.cyan('npx depfixer
|
|
25
|
-
console.log(` ${chalk.cyan('npx depfixer
|
|
46
|
+
console.log(` ${chalk.cyan('npx depfixer')}`);
|
|
47
|
+
console.log(` ${chalk.cyan('npx depfixer migrate <version>')}`);
|
|
26
48
|
process.exit(1);
|
|
27
49
|
}
|
|
28
50
|
// Read current package.json
|
|
29
51
|
const spinner = createSpinner('Reading package.json...').start();
|
|
30
52
|
const { content, parsed } = await packageJsonService.read(projectDir);
|
|
31
53
|
spinner.succeed('Package.json loaded');
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (
|
|
36
|
-
|
|
54
|
+
// Track: fix_cache_found
|
|
55
|
+
analytics.fixCacheFound({ isSession: hasSession, isLegacy: hasLegacyCache });
|
|
56
|
+
// Use new session flow if available
|
|
57
|
+
if (hasSession) {
|
|
58
|
+
await handleNewSessionFlow(sessionManager, packageJsonService, apiClient, content, parsed, projectDir, options);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Fallback to legacy flow
|
|
62
|
+
await handleLegacyFlow(cacheManager, packageJsonService, apiClient, content, parsed, projectDir);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// Track: session_ended (error)
|
|
67
|
+
await analytics.sessionEnded({
|
|
68
|
+
outcome: 'error',
|
|
69
|
+
error: error.message,
|
|
70
|
+
});
|
|
71
|
+
if (error instanceof NetworkError || error.name === 'NetworkError') {
|
|
37
72
|
console.log();
|
|
38
|
-
|
|
39
|
-
console.log('
|
|
73
|
+
printError('Network Error');
|
|
74
|
+
console.log(chalk.yellow('Unable to connect to DepFixer server.'));
|
|
40
75
|
console.log();
|
|
41
|
-
console.log(
|
|
76
|
+
console.log('Please check your internet connection and try again.');
|
|
42
77
|
process.exit(1);
|
|
43
78
|
}
|
|
79
|
+
printError(error.message);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Handle new session-based flow with payment
|
|
85
|
+
*/
|
|
86
|
+
async function handleNewSessionFlow(sessionManager, packageJsonService, apiClient, packageJsonContent, parsed, projectDir, options) {
|
|
87
|
+
const session = await sessionManager.loadSession();
|
|
88
|
+
if (!session) {
|
|
89
|
+
printError('Failed to load session');
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
// Show session info
|
|
93
|
+
const timeAgo = sessionManager.getTimeSinceAnalysis(session);
|
|
94
|
+
console.log(chalk.dim(`Found analysis from ${timeAgo}`));
|
|
95
|
+
if (session.intent === 'MIGRATE' && session.args?.target) {
|
|
96
|
+
console.log(chalk.dim(`Migration target: v${session.args.target}`));
|
|
97
|
+
}
|
|
98
|
+
console.log();
|
|
99
|
+
// Verify hash
|
|
100
|
+
const hashSpinner = createSpinner('Verifying package.json...').start();
|
|
101
|
+
const hashValid = await sessionManager.verifyHash(packageJsonContent);
|
|
102
|
+
if (!hashValid) {
|
|
103
|
+
hashSpinner.fail('Hash mismatch');
|
|
104
|
+
console.log();
|
|
105
|
+
printWarning('package.json has changed since analysis.');
|
|
106
|
+
const shouldContinue = options.yes || await promptYesNo('Apply anyway?');
|
|
107
|
+
if (!shouldContinue) {
|
|
108
|
+
console.log();
|
|
109
|
+
printInfo('Run `npx depfixer` to re-analyze with current package.json.');
|
|
110
|
+
process.exit(0);
|
|
111
|
+
}
|
|
112
|
+
console.log();
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
44
115
|
hashSpinner.succeed('Package.json verified');
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
116
|
+
}
|
|
117
|
+
// Check payment status
|
|
118
|
+
if (session.status === 'UNPAID') {
|
|
119
|
+
console.log();
|
|
120
|
+
console.log(chalk.yellow(`💰 Cost: ${session.cost} credit${session.cost > 1 ? 's' : ''} (${session.tierName})`));
|
|
121
|
+
console.log();
|
|
122
|
+
const shouldPay = options.yes || await promptYesNo(`Pay ${session.cost} credit${session.cost > 1 ? 's' : ''} and apply fix?`);
|
|
123
|
+
if (!shouldPay) {
|
|
124
|
+
console.log();
|
|
125
|
+
printInfo('Run `npx depfixer fix` when ready.');
|
|
126
|
+
process.exit(0);
|
|
50
127
|
}
|
|
51
|
-
//
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
128
|
+
// Payment flow
|
|
129
|
+
const paymentFlow = new PaymentFlowService();
|
|
130
|
+
const paymentResult = await paymentFlow.ensureReadyToPay(session.cost);
|
|
131
|
+
if (!paymentResult.ready) {
|
|
132
|
+
console.log();
|
|
133
|
+
printInfo('Run `npx depfixer fix` when ready.');
|
|
134
|
+
process.exit(0);
|
|
56
135
|
}
|
|
57
|
-
//
|
|
58
|
-
|
|
136
|
+
// Execute fix: deduct credits and get solution
|
|
137
|
+
showFixExplanation();
|
|
138
|
+
console.log();
|
|
139
|
+
console.log(chalk.bold('🔧 Applying fixes...'));
|
|
59
140
|
console.log();
|
|
60
|
-
|
|
61
|
-
|
|
141
|
+
const fixResult = await paymentFlow.deductCredits(session.analysisId, paymentResult.hasActivePass);
|
|
142
|
+
if (!fixResult.success || !fixResult.solution) {
|
|
143
|
+
printError('Failed to apply fixes');
|
|
144
|
+
throw new Error(fixResult.error || 'Unknown error');
|
|
145
|
+
}
|
|
146
|
+
// Apply solution
|
|
147
|
+
const solution = fixResult.solution;
|
|
148
|
+
const changes = packageJsonService.getChanges(parsed, solution);
|
|
149
|
+
const removals = solution.removals || [];
|
|
150
|
+
if (changes.length === 0 && removals.length === 0) {
|
|
151
|
+
printSuccess('No changes needed - package.json is already up to date!');
|
|
152
|
+
await sessionManager.updateStatus('PAID');
|
|
153
|
+
return;
|
|
62
154
|
}
|
|
155
|
+
// Fix steps
|
|
156
|
+
const fixSteps = [
|
|
157
|
+
'Reading package.json...',
|
|
158
|
+
'Calculating safe versions...',
|
|
159
|
+
'Updating dependencies...',
|
|
160
|
+
'Updating devDependencies...',
|
|
161
|
+
'Validating changes...',
|
|
162
|
+
'Writing package.json...',
|
|
163
|
+
];
|
|
164
|
+
let applyResult;
|
|
165
|
+
await runStepSequence(fixSteps, async () => {
|
|
166
|
+
applyResult = await packageJsonService.applySurgicalFixes(projectDir, changes, removals, solution.engines);
|
|
167
|
+
}, { successMessage: 'Fix complete', minStepDuration: 100 });
|
|
168
|
+
const { backupPath, applied, removed, enginesUpdated } = applyResult;
|
|
169
|
+
// Update session
|
|
170
|
+
await sessionManager.updateStatus('PAID');
|
|
171
|
+
// Track: fix_applied
|
|
172
|
+
analytics.fixApplied({
|
|
173
|
+
updatedCount: applied,
|
|
174
|
+
removedCount: removed,
|
|
175
|
+
enginesUpdated,
|
|
176
|
+
});
|
|
177
|
+
// Track: session_ended (successful fix)
|
|
178
|
+
await analytics.sessionEnded({
|
|
179
|
+
outcome: 'fix_applied',
|
|
180
|
+
});
|
|
181
|
+
showSuccessMessage(changes, removals, backupPath, enginesUpdated);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Already paid - just fetch and apply solution
|
|
185
|
+
const solutionSpinner = createSpinner('Fetching solution...').start();
|
|
186
|
+
try {
|
|
187
|
+
const response = await apiClient.getSolution(session.analysisId);
|
|
188
|
+
if (!response.success || !response.data?.solution) {
|
|
189
|
+
solutionSpinner.fail('Failed to fetch solution');
|
|
190
|
+
printError('Could not retrieve solution. The analysis may have expired.');
|
|
191
|
+
console.log();
|
|
192
|
+
console.log(`Run ${chalk.cyan('npx depfixer')} to create a new analysis.`);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
const solution = response.data.solution;
|
|
196
|
+
if (!solution.removals)
|
|
197
|
+
solution.removals = [];
|
|
198
|
+
solutionSpinner.succeed('Solution fetched');
|
|
199
|
+
// Apply solution
|
|
200
|
+
const changes = packageJsonService.getChanges(parsed, solution);
|
|
201
|
+
const removals = solution.removals || [];
|
|
202
|
+
if (changes.length === 0 && removals.length === 0) {
|
|
203
|
+
printSuccess('No changes needed - package.json is already up to date!');
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
showChangesPreview(changes, removals);
|
|
207
|
+
showFixExplanation();
|
|
208
|
+
console.log();
|
|
209
|
+
console.log(chalk.bold('🔧 Applying fixes...'));
|
|
210
|
+
console.log();
|
|
211
|
+
// Fix steps
|
|
212
|
+
const fixSteps = [
|
|
213
|
+
'Reading package.json...',
|
|
214
|
+
'Calculating safe versions...',
|
|
215
|
+
'Updating dependencies...',
|
|
216
|
+
'Updating devDependencies...',
|
|
217
|
+
'Validating changes...',
|
|
218
|
+
'Writing package.json...',
|
|
219
|
+
];
|
|
220
|
+
let applyResult;
|
|
221
|
+
await runStepSequence(fixSteps, async () => {
|
|
222
|
+
applyResult = await packageJsonService.applySurgicalFixes(projectDir, changes, removals, solution.engines);
|
|
223
|
+
}, { successMessage: 'Fix complete', minStepDuration: 100 });
|
|
224
|
+
const { backupPath, applied, removed, enginesUpdated } = applyResult;
|
|
225
|
+
// Track: fix_applied
|
|
226
|
+
analytics.fixApplied({
|
|
227
|
+
updatedCount: applied,
|
|
228
|
+
removedCount: removed,
|
|
229
|
+
enginesUpdated,
|
|
230
|
+
});
|
|
231
|
+
// Track: session_ended (successful fix)
|
|
232
|
+
await analytics.sessionEnded({
|
|
233
|
+
outcome: 'fix_applied',
|
|
234
|
+
});
|
|
235
|
+
showSuccessMessage(changes, removals, backupPath, enginesUpdated);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
if (error instanceof NetworkError || error.name === 'NetworkError') {
|
|
239
|
+
throw error;
|
|
240
|
+
}
|
|
241
|
+
printError(error.message);
|
|
242
|
+
process.exit(1);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Handle legacy cache-based flow (backward compatibility)
|
|
248
|
+
*/
|
|
249
|
+
async function handleLegacyFlow(cacheManager, packageJsonService, apiClient, packageJsonContent, parsed, projectDir) {
|
|
250
|
+
const cache = await cacheManager.loadCache();
|
|
251
|
+
if (!cache) {
|
|
252
|
+
printError('Failed to load cache');
|
|
253
|
+
process.exit(1);
|
|
254
|
+
}
|
|
255
|
+
console.log(chalk.dim('Using legacy cache format...'));
|
|
256
|
+
console.log();
|
|
257
|
+
// Verify hash
|
|
258
|
+
const hashSpinner = createSpinner('Verifying package.json unchanged...').start();
|
|
259
|
+
const hashValid = await cacheManager.verifyHash(packageJsonContent);
|
|
260
|
+
if (!hashValid) {
|
|
261
|
+
hashSpinner.fail('Hash mismatch');
|
|
63
262
|
console.log();
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const fixedPath = await packageJsonService.applyFixes(projectDir, cache.solution);
|
|
67
|
-
applySpinner.succeed('Fixes applied');
|
|
68
|
-
// Success message
|
|
263
|
+
printWarning('package.json has changed since your last analysis.');
|
|
264
|
+
console.log('The cached fix may be unsafe to apply.');
|
|
69
265
|
console.log();
|
|
70
|
-
|
|
266
|
+
console.log(`Run ${chalk.cyan('npx depfixer')} to get updated recommendations.`);
|
|
267
|
+
process.exit(1);
|
|
268
|
+
}
|
|
269
|
+
hashSpinner.succeed('Package.json verified');
|
|
270
|
+
// Fetch solution from server
|
|
271
|
+
const solutionSpinner = createSpinner('Fetching solution from server...').start();
|
|
272
|
+
try {
|
|
273
|
+
const response = await apiClient.getSolution(cache.analysisId);
|
|
274
|
+
if (!response.success || !response.data?.solution) {
|
|
275
|
+
solutionSpinner.fail('Failed to fetch solution');
|
|
276
|
+
printError('Could not retrieve solution from server. The analysis may have expired.');
|
|
277
|
+
console.log();
|
|
278
|
+
console.log(`Run ${chalk.cyan('npx depfixer')} to create a new analysis.`);
|
|
279
|
+
process.exit(1);
|
|
280
|
+
}
|
|
281
|
+
const solution = response.data.solution;
|
|
282
|
+
if (!solution.removals)
|
|
283
|
+
solution.removals = [];
|
|
284
|
+
solutionSpinner.succeed('Solution fetched');
|
|
285
|
+
// Calculate and show changes
|
|
286
|
+
const changes = packageJsonService.getChanges(parsed, solution);
|
|
287
|
+
const removals = solution.removals || [];
|
|
288
|
+
if (changes.length === 0 && removals.length === 0) {
|
|
289
|
+
printSuccess('No changes to apply - package.json is already up to date!');
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
showChangesPreview(changes, removals);
|
|
293
|
+
showFixExplanation();
|
|
294
|
+
console.log();
|
|
295
|
+
console.log(chalk.bold('🔧 Applying fixes...'));
|
|
71
296
|
console.log();
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
297
|
+
// Fix steps
|
|
298
|
+
const fixSteps = [
|
|
299
|
+
'Reading package.json...',
|
|
300
|
+
'Calculating safe versions...',
|
|
301
|
+
'Updating dependencies...',
|
|
302
|
+
'Updating devDependencies...',
|
|
303
|
+
'Validating changes...',
|
|
304
|
+
'Writing package.json...',
|
|
305
|
+
];
|
|
306
|
+
let applyResult;
|
|
307
|
+
await runStepSequence(fixSteps, async () => {
|
|
308
|
+
applyResult = await packageJsonService.applySurgicalFixes(projectDir, changes, removals, solution.engines);
|
|
309
|
+
}, { successMessage: 'Fix complete', minStepDuration: 100 });
|
|
310
|
+
const { backupPath, applied, removed, enginesUpdated } = applyResult;
|
|
311
|
+
// Track: fix_applied
|
|
312
|
+
analytics.fixApplied({
|
|
313
|
+
updatedCount: applied,
|
|
314
|
+
removedCount: removed,
|
|
315
|
+
enginesUpdated,
|
|
316
|
+
isLegacy: true,
|
|
317
|
+
});
|
|
318
|
+
// Track: session_ended (successful fix)
|
|
319
|
+
await analytics.sessionEnded({
|
|
320
|
+
outcome: 'fix_applied',
|
|
321
|
+
isLegacy: true,
|
|
322
|
+
});
|
|
323
|
+
showSuccessMessage(changes, removals, backupPath, enginesUpdated);
|
|
76
324
|
}
|
|
77
325
|
catch (error) {
|
|
326
|
+
solutionSpinner.fail('Failed to fetch solution');
|
|
327
|
+
if (error instanceof NetworkError || error.name === 'NetworkError') {
|
|
328
|
+
throw error;
|
|
329
|
+
}
|
|
78
330
|
printError(error.message);
|
|
79
331
|
process.exit(1);
|
|
80
332
|
}
|
|
81
333
|
}
|
|
334
|
+
/**
|
|
335
|
+
* Show explanation of what will be changed
|
|
336
|
+
*/
|
|
337
|
+
function showFixExplanation() {
|
|
338
|
+
console.log();
|
|
339
|
+
console.log(chalk.dim('────────────────────────────────────────'));
|
|
340
|
+
console.log(chalk.dim(' 📝 Only ') + chalk.white('package.json') + chalk.dim(' will be modified'));
|
|
341
|
+
console.log(chalk.dim(' 💾 A backup (') + chalk.white('package.json.bak') + chalk.dim(') will be created'));
|
|
342
|
+
console.log(chalk.dim('────────────────────────────────────────'));
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Show preview of changes
|
|
346
|
+
*/
|
|
347
|
+
function showChangesPreview(changes, removals) {
|
|
348
|
+
const totalOperations = changes.length + removals.length;
|
|
349
|
+
printHeader(`Applying ${totalOperations} fixes`);
|
|
350
|
+
console.log();
|
|
351
|
+
const depChanges = changes.filter(c => c.type === 'dependency');
|
|
352
|
+
const devDepChanges = changes.filter(c => c.type === 'devDependency');
|
|
353
|
+
if (depChanges.length > 0) {
|
|
354
|
+
console.log(chalk.bold(' dependencies:'));
|
|
355
|
+
for (const change of depChanges) {
|
|
356
|
+
console.log(` ${change.package}: ${chalk.red(change.from)} → ${chalk.green(change.to)}`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (devDepChanges.length > 0) {
|
|
360
|
+
if (depChanges.length > 0)
|
|
361
|
+
console.log();
|
|
362
|
+
console.log(chalk.bold(' devDependencies:'));
|
|
363
|
+
for (const change of devDepChanges) {
|
|
364
|
+
console.log(` ${change.package}: ${chalk.red(change.from)} → ${chalk.green(change.to)}`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (removals.length > 0) {
|
|
368
|
+
if (depChanges.length > 0 || devDepChanges.length > 0)
|
|
369
|
+
console.log();
|
|
370
|
+
console.log(chalk.bold(' Packages to remove (deprecated):'));
|
|
371
|
+
for (const removal of removals) {
|
|
372
|
+
const typeLabel = removal.type === 'devDependency' ? 'dev' : 'dep';
|
|
373
|
+
console.log(` ${chalk.red('✗')} ${removal.package} ${chalk.dim(`(${typeLabel})`)} - ${chalk.yellow(removal.reason)}`);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
console.log();
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Show success message
|
|
380
|
+
*/
|
|
381
|
+
function showSuccessMessage(changes, removals, backupPath, enginesUpdated) {
|
|
382
|
+
console.log();
|
|
383
|
+
printSuccess('Fixes applied successfully!');
|
|
384
|
+
console.log();
|
|
385
|
+
console.log(` ${chalk.green('✓')} ${changes.length} package${changes.length === 1 ? '' : 's'} updated`);
|
|
386
|
+
if (removals.length > 0) {
|
|
387
|
+
console.log(` ${chalk.green('✓')} ${removals.length} package${removals.length === 1 ? '' : 's'} removed`);
|
|
388
|
+
}
|
|
389
|
+
if (enginesUpdated && enginesUpdated > 0) {
|
|
390
|
+
console.log(` ${chalk.green('✓')} ${enginesUpdated} engine${enginesUpdated === 1 ? '' : 's'} updated (Node.js/npm)`);
|
|
391
|
+
}
|
|
392
|
+
console.log();
|
|
393
|
+
printInfo(`Backup created: ${chalk.cyan(backupPath)}`);
|
|
394
|
+
console.log();
|
|
395
|
+
console.log('Next steps:');
|
|
396
|
+
console.log(` 1. Review changes in ${chalk.cyan('package.json')}`);
|
|
397
|
+
console.log(` 2. Run ${chalk.cyan('npm install')} to update node_modules`);
|
|
398
|
+
console.log();
|
|
399
|
+
console.log(`To restore the original: ${chalk.cyan('mv package.json.bak package.json')}`);
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Simple Enter/Esc prompt (Enter = Yes, Esc = No)
|
|
403
|
+
*/
|
|
404
|
+
async function promptYesNo(question) {
|
|
405
|
+
return new Promise((resolve) => {
|
|
406
|
+
process.stdout.write(`${question} ${chalk.dim('(Enter/Esc)')} `);
|
|
407
|
+
if (process.stdin.isTTY) {
|
|
408
|
+
process.stdin.setRawMode(true);
|
|
409
|
+
}
|
|
410
|
+
process.stdin.resume();
|
|
411
|
+
const onKeyPress = (key) => {
|
|
412
|
+
const char = key.toString();
|
|
413
|
+
if (char === '\r' || char === '\n') {
|
|
414
|
+
cleanup();
|
|
415
|
+
console.log(chalk.green('Yes'));
|
|
416
|
+
resolve(true);
|
|
417
|
+
}
|
|
418
|
+
else if (char === '\x1b') {
|
|
419
|
+
cleanup();
|
|
420
|
+
console.log(chalk.red('No'));
|
|
421
|
+
resolve(false);
|
|
422
|
+
}
|
|
423
|
+
else if (char.toLowerCase() === 'y') {
|
|
424
|
+
cleanup();
|
|
425
|
+
console.log(chalk.green('Yes'));
|
|
426
|
+
resolve(true);
|
|
427
|
+
}
|
|
428
|
+
else if (char.toLowerCase() === 'n') {
|
|
429
|
+
cleanup();
|
|
430
|
+
console.log(chalk.red('No'));
|
|
431
|
+
resolve(false);
|
|
432
|
+
}
|
|
433
|
+
else if (char === '\x03') {
|
|
434
|
+
cleanup();
|
|
435
|
+
process.exit(0);
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
const cleanup = () => {
|
|
439
|
+
process.stdin.removeListener('data', onKeyPress);
|
|
440
|
+
if (process.stdin.isTTY) {
|
|
441
|
+
process.stdin.setRawMode(false);
|
|
442
|
+
}
|
|
443
|
+
process.stdin.pause();
|
|
444
|
+
};
|
|
445
|
+
process.stdin.on('data', onKeyPress);
|
|
446
|
+
});
|
|
447
|
+
}
|
|
82
448
|
//# sourceMappingURL=fix.js.map
|
package/dist/commands/fix.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/graph.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ interface GraphOptions {
|
|
|
5
5
|
* Graph command
|
|
6
6
|
*
|
|
7
7
|
* Opens web visualization in browser
|
|
8
|
-
* Requires prior
|
|
8
|
+
* Requires prior analysis (uses cached session)
|
|
9
9
|
*/
|
|
10
10
|
export declare function graphCommand(options: GraphOptions): Promise<void>;
|
|
11
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAWA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDvE"}
|
package/dist/commands/graph.js
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import open from 'open';
|
|
3
|
-
import {
|
|
3
|
+
import { SessionManager } from '../services/session-manager.js';
|
|
4
4
|
import { AuthManager } from '../services/auth-manager.js';
|
|
5
|
+
import { analytics } from '../services/analytics.js';
|
|
5
6
|
import { printError, printInfo, printSuccess, } from '../utils/output.js';
|
|
6
7
|
/**
|
|
7
8
|
* Graph command
|
|
8
9
|
*
|
|
9
10
|
* Opens web visualization in browser
|
|
10
|
-
* Requires prior
|
|
11
|
+
* Requires prior analysis (uses cached session)
|
|
11
12
|
*/
|
|
12
13
|
export async function graphCommand(options) {
|
|
13
14
|
const projectDir = options.path || process.cwd();
|
|
14
|
-
const
|
|
15
|
+
const sessionManager = new SessionManager(projectDir);
|
|
15
16
|
const authManager = new AuthManager();
|
|
17
|
+
// Track: graph_started
|
|
18
|
+
analytics.graphStarted({ command: 'graph' });
|
|
16
19
|
try {
|
|
17
20
|
// Check if logged in
|
|
18
21
|
if (!await authManager.isAuthenticated()) {
|
|
@@ -20,19 +23,19 @@ export async function graphCommand(options) {
|
|
|
20
23
|
console.log(`Run ${chalk.cyan('npx depfixer login')} first.`);
|
|
21
24
|
process.exit(1);
|
|
22
25
|
}
|
|
23
|
-
// Check if
|
|
24
|
-
const
|
|
25
|
-
if (!
|
|
26
|
+
// Check if session exists
|
|
27
|
+
const hasSession = await sessionManager.hasSession();
|
|
28
|
+
if (!hasSession) {
|
|
26
29
|
printError('No cached analysis found.');
|
|
27
30
|
console.log();
|
|
28
|
-
console.log('Run
|
|
29
|
-
console.log(` ${chalk.cyan('npx depfixer
|
|
31
|
+
console.log('Run an analysis first:');
|
|
32
|
+
console.log(` ${chalk.cyan('npx depfixer')}`);
|
|
30
33
|
process.exit(1);
|
|
31
34
|
}
|
|
32
|
-
// Load
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
35
|
-
printError('Failed to load
|
|
35
|
+
// Load session to get analysis info
|
|
36
|
+
const session = await sessionManager.loadSession();
|
|
37
|
+
if (!session) {
|
|
38
|
+
printError('Failed to load session');
|
|
36
39
|
process.exit(1);
|
|
37
40
|
}
|
|
38
41
|
// Build graph URL
|
|
@@ -43,6 +46,8 @@ export async function graphCommand(options) {
|
|
|
43
46
|
console.log();
|
|
44
47
|
try {
|
|
45
48
|
await open(graphUrl);
|
|
49
|
+
// Track: graph_opened
|
|
50
|
+
analytics.graphOpened({ url: graphUrl });
|
|
46
51
|
printSuccess('Browser opened!');
|
|
47
52
|
}
|
|
48
53
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,oBAAoB,CAAC;AAM5B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,uBAAuB;IACvB,SAAS,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,qBAAqB;QACrB,IAAI,CAAC,MAAM,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC;YACzC,UAAU,CAAC,0BAA0B,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,CAAC,2BAA2B,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oCAAoC;QACpC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,UAAU,CAAC,wBAAwB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;QAC3E,MAAM,QAAQ,GAAG,GAAG,OAAO,YAAY,CAAC;QAExC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,sBAAsB;YACtB,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA+JlD"}
|