driftdetect 0.8.1 → 0.8.2

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.
@@ -0,0 +1,422 @@
1
+ /**
2
+ * Python Command - drift py
3
+ *
4
+ * Analyze Python projects: routes, error handling, data access, async patterns.
5
+ *
6
+ * @requirements Python Language Support
7
+ */
8
+ import { Command } from 'commander';
9
+ import chalk from 'chalk';
10
+ import { createPythonAnalyzer, } from 'driftdetect-core';
11
+ import { createSpinner } from '../ui/spinner.js';
12
+ export function createPyCommand() {
13
+ const py = new Command('py')
14
+ .description('Python language analysis commands');
15
+ // drift py status
16
+ py
17
+ .command('status [path]')
18
+ .description('Show Python project analysis summary')
19
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
20
+ .option('-v, --verbose', 'Enable verbose output')
21
+ .action(async (targetPath, options) => {
22
+ await statusAction(targetPath, options);
23
+ });
24
+ // drift py routes
25
+ py
26
+ .command('routes [path]')
27
+ .description('List all HTTP routes (Flask, FastAPI, Django, Starlette)')
28
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
29
+ .option('-v, --verbose', 'Enable verbose output')
30
+ .option('--framework <framework>', 'Filter by framework')
31
+ .action(async (targetPath, options) => {
32
+ await routesAction(targetPath, options);
33
+ });
34
+ // drift py errors
35
+ py
36
+ .command('errors [path]')
37
+ .description('Analyze error handling patterns')
38
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
39
+ .option('-v, --verbose', 'Enable verbose output')
40
+ .action(async (targetPath, options) => {
41
+ await errorsAction(targetPath, options);
42
+ });
43
+ // drift py data-access
44
+ py
45
+ .command('data-access [path]')
46
+ .description('Analyze database access patterns (Django ORM, SQLAlchemy, Tortoise, Peewee)')
47
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
48
+ .option('-v, --verbose', 'Enable verbose output')
49
+ .action(async (targetPath, options) => {
50
+ await dataAccessAction(targetPath, options);
51
+ });
52
+ // drift py decorators
53
+ py
54
+ .command('decorators [path]')
55
+ .description('Analyze decorator usage')
56
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
57
+ .option('-v, --verbose', 'Enable verbose output')
58
+ .action(async (targetPath, options) => {
59
+ await decoratorsAction(targetPath, options);
60
+ });
61
+ // drift py async
62
+ py
63
+ .command('async [path]')
64
+ .description('Analyze async patterns')
65
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
66
+ .option('-v, --verbose', 'Enable verbose output')
67
+ .action(async (targetPath, options) => {
68
+ await asyncAction(targetPath, options);
69
+ });
70
+ return py;
71
+ }
72
+ async function statusAction(targetPath, options) {
73
+ const rootDir = targetPath ?? process.cwd();
74
+ const format = options.format ?? 'text';
75
+ const isTextFormat = format === 'text';
76
+ const spinner = isTextFormat ? createSpinner('Analyzing Python project...') : null;
77
+ spinner?.start();
78
+ try {
79
+ const analyzer = createPythonAnalyzer({ rootDir, verbose: options.verbose });
80
+ const result = await analyzer.analyze();
81
+ spinner?.stop();
82
+ if (format === 'json') {
83
+ console.log(JSON.stringify({
84
+ project: result.projectInfo,
85
+ frameworks: result.detectedFrameworks,
86
+ stats: result.stats,
87
+ }, null, 2));
88
+ return;
89
+ }
90
+ console.log();
91
+ console.log(chalk.bold('šŸ Python Project Status'));
92
+ console.log(chalk.gray('═'.repeat(60)));
93
+ console.log();
94
+ console.log(chalk.bold('Project'));
95
+ console.log(chalk.gray('─'.repeat(40)));
96
+ if (result.projectInfo.name) {
97
+ console.log(` Name: ${chalk.cyan(result.projectInfo.name)}`);
98
+ }
99
+ if (result.projectInfo.version) {
100
+ console.log(` Version: ${chalk.cyan(result.projectInfo.version)}`);
101
+ }
102
+ console.log(` Files: ${chalk.cyan(result.projectInfo.files)}`);
103
+ console.log();
104
+ if (result.detectedFrameworks.length > 0) {
105
+ console.log(chalk.bold('Detected Frameworks'));
106
+ console.log(chalk.gray('─'.repeat(40)));
107
+ for (const fw of result.detectedFrameworks) {
108
+ console.log(` • ${fw}`);
109
+ }
110
+ console.log();
111
+ }
112
+ console.log(chalk.bold('Statistics'));
113
+ console.log(chalk.gray('─'.repeat(40)));
114
+ console.log(` Functions: ${chalk.cyan(result.stats.functionCount)}`);
115
+ console.log(` Classes: ${chalk.cyan(result.stats.classCount)}`);
116
+ console.log(` Async Functions: ${chalk.cyan(result.stats.asyncFunctionCount)}`);
117
+ console.log(` Decorators: ${chalk.cyan(result.stats.decoratorCount)}`);
118
+ console.log(` Lines of Code: ${chalk.cyan(result.stats.linesOfCode.toLocaleString())}`);
119
+ console.log(` Test Files: ${chalk.cyan(result.stats.testFileCount)}`);
120
+ console.log(` Analysis Time: ${chalk.gray(`${result.stats.analysisTimeMs.toFixed(0)}ms`)}`);
121
+ console.log();
122
+ console.log(chalk.gray('─'.repeat(60)));
123
+ console.log(chalk.bold('šŸ“Œ Next Steps:'));
124
+ console.log(chalk.gray(` • drift py routes ${chalk.white('View HTTP routes')}`));
125
+ console.log(chalk.gray(` • drift py errors ${chalk.white('Analyze error handling')}`));
126
+ console.log(chalk.gray(` • drift py data-access ${chalk.white('View data access patterns')}`));
127
+ console.log(chalk.gray(` • drift py decorators ${chalk.white('View decorator usage')}`));
128
+ console.log(chalk.gray(` • drift py async ${chalk.white('Analyze async patterns')}`));
129
+ console.log();
130
+ }
131
+ catch (error) {
132
+ spinner?.stop();
133
+ if (format === 'json') {
134
+ console.log(JSON.stringify({ error: String(error) }));
135
+ }
136
+ else {
137
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
138
+ }
139
+ }
140
+ }
141
+ async function routesAction(targetPath, options) {
142
+ const rootDir = targetPath ?? process.cwd();
143
+ const format = options.format ?? 'text';
144
+ const isTextFormat = format === 'text';
145
+ const spinner = isTextFormat ? createSpinner('Analyzing routes...') : null;
146
+ spinner?.start();
147
+ try {
148
+ const analyzer = createPythonAnalyzer({ rootDir, verbose: options.verbose });
149
+ const result = await analyzer.analyzeRoutes();
150
+ spinner?.stop();
151
+ let routes = result.routes;
152
+ if (options.framework) {
153
+ routes = routes.filter((r) => r.framework === options.framework);
154
+ }
155
+ if (format === 'json') {
156
+ console.log(JSON.stringify({ total: routes.length, byFramework: result.byFramework, routes }, null, 2));
157
+ return;
158
+ }
159
+ console.log();
160
+ console.log(chalk.bold('šŸ›£ļø Python HTTP Routes'));
161
+ console.log(chalk.gray('─'.repeat(60)));
162
+ console.log();
163
+ if (routes.length === 0) {
164
+ console.log(chalk.gray('No routes found'));
165
+ console.log();
166
+ return;
167
+ }
168
+ const byFramework = new Map();
169
+ for (const route of routes) {
170
+ const existing = byFramework.get(route.framework) ?? [];
171
+ existing.push(route);
172
+ byFramework.set(route.framework, existing);
173
+ }
174
+ for (const [framework, frameworkRoutes] of byFramework) {
175
+ console.log(chalk.bold(`${framework} (${frameworkRoutes.length} routes)`));
176
+ for (const route of frameworkRoutes) {
177
+ const methodColor = getMethodColor(route.method);
178
+ console.log(` ${methodColor(route.method.padEnd(7))} ${route.path}`);
179
+ console.log(chalk.gray(` → ${route.handler} (${route.file}:${route.line})`));
180
+ }
181
+ console.log();
182
+ }
183
+ console.log(`Total: ${chalk.cyan(routes.length)} routes`);
184
+ console.log();
185
+ }
186
+ catch (error) {
187
+ spinner?.stop();
188
+ if (format === 'json') {
189
+ console.log(JSON.stringify({ error: String(error) }));
190
+ }
191
+ else {
192
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
193
+ }
194
+ }
195
+ }
196
+ async function errorsAction(targetPath, options) {
197
+ const rootDir = targetPath ?? process.cwd();
198
+ const format = options.format ?? 'text';
199
+ const isTextFormat = format === 'text';
200
+ const spinner = isTextFormat ? createSpinner('Analyzing error handling...') : null;
201
+ spinner?.start();
202
+ try {
203
+ const analyzer = createPythonAnalyzer({ rootDir, verbose: options.verbose });
204
+ const result = await analyzer.analyzeErrorHandling();
205
+ spinner?.stop();
206
+ if (format === 'json') {
207
+ console.log(JSON.stringify(result, null, 2));
208
+ return;
209
+ }
210
+ console.log();
211
+ console.log(chalk.bold('āš ļø Error Handling Analysis'));
212
+ console.log(chalk.gray('─'.repeat(60)));
213
+ console.log();
214
+ console.log(`Try-Except Blocks: ${chalk.cyan(result.stats.tryExceptBlocks)}`);
215
+ console.log(`Raise Statements: ${chalk.cyan(result.stats.raiseStatements)}`);
216
+ console.log(`Custom Exceptions: ${chalk.cyan(result.stats.customExceptions)}`);
217
+ console.log(`Context Managers: ${chalk.cyan(result.stats.contextManagers)}`);
218
+ console.log();
219
+ const patternCounts = {
220
+ 'try-except': result.patterns.filter((p) => p.type === 'try-except').length,
221
+ 'raise': result.patterns.filter((p) => p.type === 'raise').length,
222
+ 'custom-exception': result.patterns.filter((p) => p.type === 'custom-exception').length,
223
+ 'context-manager': result.patterns.filter((p) => p.type === 'context-manager').length,
224
+ };
225
+ console.log(chalk.bold('Pattern Breakdown:'));
226
+ console.log(` Try-Except: ${chalk.cyan(patternCounts['try-except'])}`);
227
+ console.log(` Raise: ${chalk.yellow(patternCounts['raise'])}`);
228
+ console.log(` Custom Exception: ${chalk.blue(patternCounts['custom-exception'])}`);
229
+ console.log(` Context Manager: ${chalk.green(patternCounts['context-manager'])}`);
230
+ console.log();
231
+ if (result.issues.length > 0) {
232
+ console.log(chalk.bold('Issues:'));
233
+ for (const issue of result.issues.slice(0, 10)) {
234
+ console.log(` ${chalk.yellow('⚠')} ${issue.file}:${issue.line}`);
235
+ console.log(chalk.gray(` ${issue.message}`));
236
+ if (issue.suggestion) {
237
+ console.log(chalk.gray(` → ${issue.suggestion}`));
238
+ }
239
+ }
240
+ if (result.issues.length > 10) {
241
+ console.log(chalk.gray(` ... and ${result.issues.length - 10} more`));
242
+ }
243
+ console.log();
244
+ }
245
+ }
246
+ catch (error) {
247
+ spinner?.stop();
248
+ if (format === 'json') {
249
+ console.log(JSON.stringify({ error: String(error) }));
250
+ }
251
+ else {
252
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
253
+ }
254
+ }
255
+ }
256
+ async function dataAccessAction(targetPath, options) {
257
+ const rootDir = targetPath ?? process.cwd();
258
+ const format = options.format ?? 'text';
259
+ const isTextFormat = format === 'text';
260
+ const spinner = isTextFormat ? createSpinner('Analyzing data access patterns...') : null;
261
+ spinner?.start();
262
+ try {
263
+ const analyzer = createPythonAnalyzer({ rootDir, verbose: options.verbose });
264
+ const result = await analyzer.analyzeDataAccess();
265
+ spinner?.stop();
266
+ if (format === 'json') {
267
+ console.log(JSON.stringify(result, null, 2));
268
+ return;
269
+ }
270
+ console.log();
271
+ console.log(chalk.bold('šŸ—„ļø Data Access Patterns'));
272
+ console.log(chalk.gray('─'.repeat(60)));
273
+ console.log();
274
+ console.log(`Total Access Points: ${chalk.cyan(result.accessPoints.length)}`);
275
+ console.log(`Models: ${chalk.cyan(result.models.length)}`);
276
+ console.log();
277
+ console.log(chalk.bold('By Framework:'));
278
+ for (const [framework, count] of Object.entries(result.byFramework)) {
279
+ console.log(` ${framework}: ${chalk.cyan(count)}`);
280
+ }
281
+ console.log();
282
+ console.log(chalk.bold('By Operation:'));
283
+ for (const [operation, count] of Object.entries(result.byOperation)) {
284
+ const opColor = operation === 'read' ? chalk.green :
285
+ operation === 'write' ? chalk.blue :
286
+ operation === 'update' ? chalk.yellow :
287
+ operation === 'delete' ? chalk.red : chalk.gray;
288
+ console.log(` ${opColor(operation)}: ${chalk.cyan(count)}`);
289
+ }
290
+ console.log();
291
+ if (result.models.length > 0) {
292
+ console.log(chalk.bold('Models Accessed:'));
293
+ for (const model of result.models) {
294
+ console.log(` • ${model}`);
295
+ }
296
+ console.log();
297
+ }
298
+ }
299
+ catch (error) {
300
+ spinner?.stop();
301
+ if (format === 'json') {
302
+ console.log(JSON.stringify({ error: String(error) }));
303
+ }
304
+ else {
305
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
306
+ }
307
+ }
308
+ }
309
+ async function decoratorsAction(targetPath, options) {
310
+ const rootDir = targetPath ?? process.cwd();
311
+ const format = options.format ?? 'text';
312
+ const isTextFormat = format === 'text';
313
+ const spinner = isTextFormat ? createSpinner('Analyzing decorators...') : null;
314
+ spinner?.start();
315
+ try {
316
+ const analyzer = createPythonAnalyzer({ rootDir, verbose: options.verbose });
317
+ const result = await analyzer.analyzeDecorators();
318
+ spinner?.stop();
319
+ if (format === 'json') {
320
+ console.log(JSON.stringify(result, null, 2));
321
+ return;
322
+ }
323
+ console.log();
324
+ console.log(chalk.bold('šŸŽ€ Decorator Analysis'));
325
+ console.log(chalk.gray('─'.repeat(60)));
326
+ console.log();
327
+ console.log(`Total Decorators: ${chalk.cyan(result.decorators.length)}`);
328
+ console.log();
329
+ if (result.decorators.length === 0) {
330
+ console.log(chalk.gray('No decorators found'));
331
+ console.log();
332
+ return;
333
+ }
334
+ console.log(chalk.bold('By Name:'));
335
+ const sortedByName = Object.entries(result.byName).sort((a, b) => b[1] - a[1]);
336
+ for (const [name, count] of sortedByName.slice(0, 15)) {
337
+ console.log(` @${name}: ${chalk.cyan(count)}`);
338
+ }
339
+ if (sortedByName.length > 15) {
340
+ console.log(chalk.gray(` ... and ${sortedByName.length - 15} more`));
341
+ }
342
+ console.log();
343
+ if (options.verbose) {
344
+ console.log(chalk.bold('Decorators:'));
345
+ for (const dec of result.decorators.slice(0, 20)) {
346
+ console.log(` @${chalk.cyan(dec.name)}`);
347
+ console.log(chalk.gray(` ${dec.file}:${dec.line}`));
348
+ }
349
+ if (result.decorators.length > 20) {
350
+ console.log(chalk.gray(` ... and ${result.decorators.length - 20} more`));
351
+ }
352
+ console.log();
353
+ }
354
+ }
355
+ catch (error) {
356
+ spinner?.stop();
357
+ if (format === 'json') {
358
+ console.log(JSON.stringify({ error: String(error) }));
359
+ }
360
+ else {
361
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
362
+ }
363
+ }
364
+ }
365
+ async function asyncAction(targetPath, options) {
366
+ const rootDir = targetPath ?? process.cwd();
367
+ const format = options.format ?? 'text';
368
+ const isTextFormat = format === 'text';
369
+ const spinner = isTextFormat ? createSpinner('Analyzing async patterns...') : null;
370
+ spinner?.start();
371
+ try {
372
+ const analyzer = createPythonAnalyzer({ rootDir, verbose: options.verbose });
373
+ const result = await analyzer.analyzeAsync();
374
+ spinner?.stop();
375
+ if (format === 'json') {
376
+ console.log(JSON.stringify(result, null, 2));
377
+ return;
378
+ }
379
+ console.log();
380
+ console.log(chalk.bold('⚔ Async Pattern Analysis'));
381
+ console.log(chalk.gray('─'.repeat(60)));
382
+ console.log();
383
+ console.log(`Async Functions: ${chalk.cyan(result.asyncFunctions.length)}`);
384
+ console.log(`Await Calls: ${chalk.cyan(result.awaitCalls)}`);
385
+ console.log(`Async Context Managers: ${chalk.cyan(result.asyncContextManagers)}`);
386
+ console.log();
387
+ if (result.asyncFunctions.length > 0) {
388
+ console.log(chalk.bold('Async Functions:'));
389
+ for (const func of result.asyncFunctions.slice(0, 20)) {
390
+ console.log(` ${chalk.cyan(func.name)} (${func.awaitCount} awaits)`);
391
+ console.log(chalk.gray(` ${func.file}:${func.line}`));
392
+ }
393
+ if (result.asyncFunctions.length > 20) {
394
+ console.log(chalk.gray(` ... and ${result.asyncFunctions.length - 20} more`));
395
+ }
396
+ console.log();
397
+ }
398
+ }
399
+ catch (error) {
400
+ spinner?.stop();
401
+ if (format === 'json') {
402
+ console.log(JSON.stringify({ error: String(error) }));
403
+ }
404
+ else {
405
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
406
+ }
407
+ }
408
+ }
409
+ function getMethodColor(method) {
410
+ const colors = {
411
+ GET: chalk.green,
412
+ POST: chalk.blue,
413
+ PUT: chalk.yellow,
414
+ DELETE: chalk.red,
415
+ PATCH: chalk.magenta,
416
+ HEAD: chalk.cyan,
417
+ OPTIONS: chalk.gray,
418
+ ALL: chalk.white,
419
+ };
420
+ return colors[method] ?? chalk.white;
421
+ }
422
+ //# sourceMappingURL=py.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"py.js","sourceRoot":"","sources":["../../src/commands/py.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * TypeScript Command - drift ts
3
+ *
4
+ * Analyze TypeScript/JavaScript projects: routes, components, hooks, error handling, data access.
5
+ *
6
+ * @requirements TypeScript Language Support
7
+ */
8
+ import { Command } from 'commander';
9
+ export interface TsOptions {
10
+ /** Output format */
11
+ format?: 'text' | 'json';
12
+ /** Enable verbose output */
13
+ verbose?: boolean;
14
+ /** Filter by framework */
15
+ framework?: string;
16
+ }
17
+ /**
18
+ * Create the TypeScript command
19
+ */
20
+ export declare function createTsCommand(): Command;
21
+ //# sourceMappingURL=ts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts.d.ts","sourceRoot":"","sources":["../../src/commands/ts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,WAAW,SAAS;IACxB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CA4EzC"}