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,589 @@
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
+ import chalk from 'chalk';
10
+ import { createTypeScriptAnalyzer, } from 'driftdetect-core';
11
+ import { createSpinner } from '../ui/spinner.js';
12
+ /**
13
+ * Create the TypeScript command
14
+ */
15
+ export function createTsCommand() {
16
+ const ts = new Command('ts')
17
+ .description('TypeScript/JavaScript language analysis commands');
18
+ // drift ts status
19
+ ts
20
+ .command('status [path]')
21
+ .description('Show TypeScript/JavaScript project analysis summary')
22
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
23
+ .option('-v, --verbose', 'Enable verbose output')
24
+ .action(async (targetPath, options) => {
25
+ await statusAction(targetPath, options);
26
+ });
27
+ // drift ts routes
28
+ ts
29
+ .command('routes [path]')
30
+ .description('List all HTTP routes (Express, NestJS, Next.js, Fastify)')
31
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
32
+ .option('-v, --verbose', 'Enable verbose output')
33
+ .option('--framework <framework>', 'Filter by framework')
34
+ .action(async (targetPath, options) => {
35
+ await routesAction(targetPath, options);
36
+ });
37
+ // drift ts components
38
+ ts
39
+ .command('components [path]')
40
+ .description('List React components')
41
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
42
+ .option('-v, --verbose', 'Enable verbose output')
43
+ .action(async (targetPath, options) => {
44
+ await componentsAction(targetPath, options);
45
+ });
46
+ // drift ts hooks
47
+ ts
48
+ .command('hooks [path]')
49
+ .description('Analyze React hooks usage')
50
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
51
+ .option('-v, --verbose', 'Enable verbose output')
52
+ .action(async (targetPath, options) => {
53
+ await hooksAction(targetPath, options);
54
+ });
55
+ // drift ts errors
56
+ ts
57
+ .command('errors [path]')
58
+ .description('Analyze error handling patterns')
59
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
60
+ .option('-v, --verbose', 'Enable verbose output')
61
+ .action(async (targetPath, options) => {
62
+ await errorsAction(targetPath, options);
63
+ });
64
+ // drift ts data-access
65
+ ts
66
+ .command('data-access [path]')
67
+ .description('Analyze database access patterns (Prisma, TypeORM, Drizzle, Sequelize, Mongoose)')
68
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
69
+ .option('-v, --verbose', 'Enable verbose output')
70
+ .action(async (targetPath, options) => {
71
+ await dataAccessAction(targetPath, options);
72
+ });
73
+ // drift ts decorators
74
+ ts
75
+ .command('decorators [path]')
76
+ .description('Analyze decorator usage (NestJS, TypeORM, etc.)')
77
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
78
+ .option('-v, --verbose', 'Enable verbose output')
79
+ .action(async (targetPath, options) => {
80
+ await decoratorsAction(targetPath, options);
81
+ });
82
+ return ts;
83
+ }
84
+ /**
85
+ * Status subcommand
86
+ */
87
+ async function statusAction(targetPath, options) {
88
+ const rootDir = targetPath ?? process.cwd();
89
+ const format = options.format ?? 'text';
90
+ const isTextFormat = format === 'text';
91
+ const spinner = isTextFormat ? createSpinner('Analyzing TypeScript project...') : null;
92
+ spinner?.start();
93
+ try {
94
+ const analyzer = createTypeScriptAnalyzer({ rootDir, verbose: options.verbose });
95
+ const result = await analyzer.analyze();
96
+ spinner?.stop();
97
+ // JSON output
98
+ if (format === 'json') {
99
+ console.log(JSON.stringify({
100
+ project: result.projectInfo,
101
+ frameworks: result.detectedFrameworks,
102
+ stats: result.stats,
103
+ }, null, 2));
104
+ return;
105
+ }
106
+ // Text output
107
+ console.log();
108
+ console.log(chalk.bold('šŸ“Š TypeScript/JavaScript Project Status'));
109
+ console.log(chalk.gray('═'.repeat(60)));
110
+ console.log();
111
+ // Project info
112
+ console.log(chalk.bold('Project'));
113
+ console.log(chalk.gray('─'.repeat(40)));
114
+ if (result.projectInfo.name) {
115
+ console.log(` Name: ${chalk.cyan(result.projectInfo.name)}`);
116
+ }
117
+ if (result.projectInfo.version) {
118
+ console.log(` Version: ${chalk.cyan(result.projectInfo.version)}`);
119
+ }
120
+ console.log(` Files: ${chalk.cyan(result.projectInfo.files)} (${result.projectInfo.tsFiles} .ts, ${result.projectInfo.jsFiles} .js)`);
121
+ console.log(` TypeScript: ${result.projectInfo.hasTypeScript ? chalk.green('Yes') : chalk.gray('No')}`);
122
+ console.log(` JavaScript: ${result.projectInfo.hasJavaScript ? chalk.green('Yes') : chalk.gray('No')}`);
123
+ console.log();
124
+ // Detected frameworks
125
+ if (result.detectedFrameworks.length > 0) {
126
+ console.log(chalk.bold('Detected Frameworks'));
127
+ console.log(chalk.gray('─'.repeat(40)));
128
+ for (const fw of result.detectedFrameworks) {
129
+ console.log(` • ${fw}`);
130
+ }
131
+ console.log();
132
+ }
133
+ // Statistics
134
+ console.log(chalk.bold('Statistics'));
135
+ console.log(chalk.gray('─'.repeat(40)));
136
+ console.log(` Functions: ${chalk.cyan(result.stats.functionCount)}`);
137
+ console.log(` Classes: ${chalk.cyan(result.stats.classCount)}`);
138
+ console.log(` Components: ${chalk.cyan(result.stats.componentCount)}`);
139
+ console.log(` Hooks: ${chalk.cyan(result.stats.hookCount)}`);
140
+ console.log(` Async Functions: ${chalk.cyan(result.stats.asyncFunctionCount)}`);
141
+ console.log(` Decorators: ${chalk.cyan(result.stats.decoratorCount)}`);
142
+ console.log(` Lines of Code: ${chalk.cyan(result.stats.linesOfCode.toLocaleString())}`);
143
+ console.log(` Test Files: ${chalk.cyan(result.stats.testFileCount)}`);
144
+ console.log(` Analysis Time: ${chalk.gray(`${result.stats.analysisTimeMs.toFixed(0)}ms`)}`);
145
+ console.log();
146
+ // Next steps
147
+ console.log(chalk.gray('─'.repeat(60)));
148
+ console.log(chalk.bold('šŸ“Œ Next Steps:'));
149
+ console.log(chalk.gray(` • drift ts routes ${chalk.white('View HTTP routes')}`));
150
+ console.log(chalk.gray(` • drift ts components ${chalk.white('View React components')}`));
151
+ console.log(chalk.gray(` • drift ts hooks ${chalk.white('Analyze hooks usage')}`));
152
+ console.log(chalk.gray(` • drift ts errors ${chalk.white('Analyze error handling')}`));
153
+ console.log(chalk.gray(` • drift ts data-access ${chalk.white('View data access patterns')}`));
154
+ console.log(chalk.gray(` • drift ts decorators ${chalk.white('View decorator usage')}`));
155
+ console.log();
156
+ }
157
+ catch (error) {
158
+ spinner?.stop();
159
+ if (format === 'json') {
160
+ console.log(JSON.stringify({ error: String(error) }));
161
+ }
162
+ else {
163
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * Routes subcommand
169
+ */
170
+ async function routesAction(targetPath, options) {
171
+ const rootDir = targetPath ?? process.cwd();
172
+ const format = options.format ?? 'text';
173
+ const isTextFormat = format === 'text';
174
+ const spinner = isTextFormat ? createSpinner('Analyzing routes...') : null;
175
+ spinner?.start();
176
+ try {
177
+ const analyzer = createTypeScriptAnalyzer({ rootDir, verbose: options.verbose });
178
+ const result = await analyzer.analyzeRoutes();
179
+ spinner?.stop();
180
+ // Filter by framework if specified
181
+ let routes = result.routes;
182
+ if (options.framework) {
183
+ routes = routes.filter((r) => r.framework === options.framework);
184
+ }
185
+ // JSON output
186
+ if (format === 'json') {
187
+ console.log(JSON.stringify({
188
+ total: routes.length,
189
+ byFramework: result.byFramework,
190
+ routes,
191
+ }, null, 2));
192
+ return;
193
+ }
194
+ // Text output
195
+ console.log();
196
+ console.log(chalk.bold('šŸ›£ļø TypeScript HTTP Routes'));
197
+ console.log(chalk.gray('─'.repeat(60)));
198
+ console.log();
199
+ if (routes.length === 0) {
200
+ console.log(chalk.gray('No routes found'));
201
+ console.log();
202
+ return;
203
+ }
204
+ // Group by framework
205
+ const byFramework = new Map();
206
+ for (const route of routes) {
207
+ const existing = byFramework.get(route.framework) ?? [];
208
+ existing.push(route);
209
+ byFramework.set(route.framework, existing);
210
+ }
211
+ for (const [framework, frameworkRoutes] of byFramework) {
212
+ console.log(chalk.bold(`${framework} (${frameworkRoutes.length} routes)`));
213
+ for (const route of frameworkRoutes) {
214
+ const methodColor = getMethodColor(route.method);
215
+ console.log(` ${methodColor(route.method.padEnd(7))} ${route.path}`);
216
+ console.log(chalk.gray(` → ${route.handler} (${route.file}:${route.line})`));
217
+ }
218
+ console.log();
219
+ }
220
+ console.log(`Total: ${chalk.cyan(routes.length)} routes`);
221
+ console.log();
222
+ }
223
+ catch (error) {
224
+ spinner?.stop();
225
+ if (format === 'json') {
226
+ console.log(JSON.stringify({ error: String(error) }));
227
+ }
228
+ else {
229
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
230
+ }
231
+ }
232
+ }
233
+ /**
234
+ * Components subcommand
235
+ */
236
+ async function componentsAction(targetPath, options) {
237
+ const rootDir = targetPath ?? process.cwd();
238
+ const format = options.format ?? 'text';
239
+ const isTextFormat = format === 'text';
240
+ const spinner = isTextFormat ? createSpinner('Analyzing components...') : null;
241
+ spinner?.start();
242
+ try {
243
+ const analyzer = createTypeScriptAnalyzer({ rootDir, verbose: options.verbose });
244
+ const result = await analyzer.analyzeComponents();
245
+ spinner?.stop();
246
+ // JSON output
247
+ if (format === 'json') {
248
+ console.log(JSON.stringify(result, null, 2));
249
+ return;
250
+ }
251
+ // Text output
252
+ console.log();
253
+ console.log(chalk.bold('āš›ļø React Components'));
254
+ console.log(chalk.gray('─'.repeat(60)));
255
+ console.log();
256
+ console.log(`Total Components: ${chalk.cyan(result.components.length)}`);
257
+ console.log(` Functional: ${chalk.green(result.byType['functional'])}`);
258
+ console.log(` Class: ${chalk.blue(result.byType['class'])}`);
259
+ console.log();
260
+ if (result.components.length === 0) {
261
+ console.log(chalk.gray('No components found'));
262
+ console.log();
263
+ return;
264
+ }
265
+ for (const comp of result.components.slice(0, 20)) {
266
+ const typeIcon = comp.type === 'functional' ? chalk.green('ʒ') : chalk.blue('C');
267
+ const exportIcon = comp.isExported ? chalk.yellow('↗') : ' ';
268
+ console.log(` ${typeIcon} ${exportIcon} ${chalk.white(comp.name)}`);
269
+ if (comp.props.length > 0) {
270
+ console.log(chalk.gray(` Props: ${comp.props.join(', ')}`));
271
+ }
272
+ if (comp.hooks.length > 0) {
273
+ console.log(chalk.gray(` Hooks: ${comp.hooks.join(', ')}`));
274
+ }
275
+ console.log(chalk.gray(` ${comp.file}:${comp.line}`));
276
+ }
277
+ if (result.components.length > 20) {
278
+ console.log(chalk.gray(` ... and ${result.components.length - 20} more`));
279
+ }
280
+ console.log();
281
+ }
282
+ catch (error) {
283
+ spinner?.stop();
284
+ if (format === 'json') {
285
+ console.log(JSON.stringify({ error: String(error) }));
286
+ }
287
+ else {
288
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
289
+ }
290
+ }
291
+ }
292
+ /**
293
+ * Hooks subcommand
294
+ */
295
+ async function hooksAction(targetPath, options) {
296
+ const rootDir = targetPath ?? process.cwd();
297
+ const format = options.format ?? 'text';
298
+ const isTextFormat = format === 'text';
299
+ const spinner = isTextFormat ? createSpinner('Analyzing hooks...') : null;
300
+ spinner?.start();
301
+ try {
302
+ const analyzer = createTypeScriptAnalyzer({ rootDir, verbose: options.verbose });
303
+ const result = await analyzer.analyzeHooks();
304
+ spinner?.stop();
305
+ // JSON output
306
+ if (format === 'json') {
307
+ console.log(JSON.stringify(result, null, 2));
308
+ return;
309
+ }
310
+ // Text output
311
+ console.log();
312
+ console.log(chalk.bold('šŸŖ React Hooks Analysis'));
313
+ console.log(chalk.gray('─'.repeat(60)));
314
+ console.log();
315
+ console.log(`Total Hook Calls: ${chalk.cyan(result.hooks.length)}`);
316
+ console.log(` Built-in: ${chalk.green(result.byType['builtin'])}`);
317
+ console.log(` Custom: ${chalk.blue(result.byType['custom'])}`);
318
+ console.log();
319
+ // Custom hooks defined
320
+ if (result.customHooks.length > 0) {
321
+ console.log(chalk.bold('Custom Hooks Defined:'));
322
+ for (const hook of result.customHooks) {
323
+ console.log(` • ${chalk.cyan(hook)}`);
324
+ }
325
+ console.log();
326
+ }
327
+ // Hook usage breakdown
328
+ const hookCounts = new Map();
329
+ for (const hook of result.hooks) {
330
+ hookCounts.set(hook.name, (hookCounts.get(hook.name) ?? 0) + 1);
331
+ }
332
+ console.log(chalk.bold('Hook Usage:'));
333
+ const sortedHooks = Array.from(hookCounts.entries()).sort((a, b) => b[1] - a[1]);
334
+ for (const [name, count] of sortedHooks.slice(0, 15)) {
335
+ const typeIcon = result.customHooks.includes(name) ? chalk.blue('custom') : chalk.green('builtin');
336
+ console.log(` ${name}: ${chalk.cyan(count)} ${chalk.gray(`(${typeIcon})`)}`);
337
+ }
338
+ if (sortedHooks.length > 15) {
339
+ console.log(chalk.gray(` ... and ${sortedHooks.length - 15} more`));
340
+ }
341
+ console.log();
342
+ }
343
+ catch (error) {
344
+ spinner?.stop();
345
+ if (format === 'json') {
346
+ console.log(JSON.stringify({ error: String(error) }));
347
+ }
348
+ else {
349
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
350
+ }
351
+ }
352
+ }
353
+ /**
354
+ * Errors subcommand
355
+ */
356
+ async function errorsAction(targetPath, options) {
357
+ const rootDir = targetPath ?? process.cwd();
358
+ const format = options.format ?? 'text';
359
+ const isTextFormat = format === 'text';
360
+ const spinner = isTextFormat ? createSpinner('Analyzing error handling...') : null;
361
+ spinner?.start();
362
+ try {
363
+ const analyzer = createTypeScriptAnalyzer({ rootDir, verbose: options.verbose });
364
+ const result = await analyzer.analyzeErrorHandling();
365
+ spinner?.stop();
366
+ // JSON output
367
+ if (format === 'json') {
368
+ console.log(JSON.stringify(result, null, 2));
369
+ return;
370
+ }
371
+ // Text output
372
+ console.log();
373
+ console.log(chalk.bold('āš ļø Error Handling Analysis'));
374
+ console.log(chalk.gray('─'.repeat(60)));
375
+ console.log();
376
+ console.log(`Try-Catch Blocks: ${chalk.cyan(result.stats.tryCatchBlocks)}`);
377
+ console.log(`Promise .catch(): ${chalk.cyan(result.stats.promiseCatches)}`);
378
+ console.log(`Error Boundaries: ${chalk.cyan(result.stats.errorBoundaries)}`);
379
+ console.log(`Throw Statements: ${chalk.cyan(result.stats.throwStatements)}`);
380
+ console.log();
381
+ // Pattern breakdown
382
+ const patternCounts = {
383
+ 'try-catch': result.patterns.filter((p) => p.type === 'try-catch').length,
384
+ 'promise-catch': result.patterns.filter((p) => p.type === 'promise-catch').length,
385
+ 'error-boundary': result.patterns.filter((p) => p.type === 'error-boundary').length,
386
+ 'throw': result.patterns.filter((p) => p.type === 'throw').length,
387
+ };
388
+ console.log(chalk.bold('Pattern Breakdown:'));
389
+ console.log(` Try-Catch: ${chalk.cyan(patternCounts['try-catch'])}`);
390
+ console.log(` Promise Catch: ${chalk.green(patternCounts['promise-catch'])}`);
391
+ console.log(` Error Boundary: ${chalk.blue(patternCounts['error-boundary'])}`);
392
+ console.log(` Throw: ${chalk.yellow(patternCounts['throw'])}`);
393
+ console.log();
394
+ // Issues
395
+ if (result.issues.length > 0) {
396
+ console.log(chalk.bold('Issues:'));
397
+ for (const issue of result.issues.slice(0, 10)) {
398
+ console.log(` ${chalk.yellow('⚠')} ${issue.file}:${issue.line}`);
399
+ console.log(chalk.gray(` ${issue.message}`));
400
+ if (issue.suggestion) {
401
+ console.log(chalk.gray(` → ${issue.suggestion}`));
402
+ }
403
+ }
404
+ if (result.issues.length > 10) {
405
+ console.log(chalk.gray(` ... and ${result.issues.length - 10} more`));
406
+ }
407
+ console.log();
408
+ }
409
+ }
410
+ catch (error) {
411
+ spinner?.stop();
412
+ if (format === 'json') {
413
+ console.log(JSON.stringify({ error: String(error) }));
414
+ }
415
+ else {
416
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
417
+ }
418
+ }
419
+ }
420
+ /**
421
+ * Data access subcommand
422
+ */
423
+ async function dataAccessAction(targetPath, options) {
424
+ const rootDir = targetPath ?? process.cwd();
425
+ const format = options.format ?? 'text';
426
+ const isTextFormat = format === 'text';
427
+ const spinner = isTextFormat ? createSpinner('Analyzing data access patterns...') : null;
428
+ spinner?.start();
429
+ try {
430
+ const analyzer = createTypeScriptAnalyzer({ rootDir, verbose: options.verbose });
431
+ const result = await analyzer.analyzeDataAccess();
432
+ spinner?.stop();
433
+ // JSON output
434
+ if (format === 'json') {
435
+ console.log(JSON.stringify(result, null, 2));
436
+ return;
437
+ }
438
+ // Text output
439
+ console.log();
440
+ console.log(chalk.bold('šŸ—„ļø Data Access Patterns'));
441
+ console.log(chalk.gray('─'.repeat(60)));
442
+ console.log();
443
+ console.log(`Total Access Points: ${chalk.cyan(result.accessPoints.length)}`);
444
+ console.log(`Models: ${chalk.cyan(result.models.length)}`);
445
+ console.log();
446
+ // By framework
447
+ console.log(chalk.bold('By Framework:'));
448
+ for (const [framework, count] of Object.entries(result.byFramework)) {
449
+ console.log(` ${framework}: ${chalk.cyan(count)}`);
450
+ }
451
+ console.log();
452
+ // By operation
453
+ console.log(chalk.bold('By Operation:'));
454
+ for (const [operation, count] of Object.entries(result.byOperation)) {
455
+ const opColor = operation === 'read' ? chalk.green :
456
+ operation === 'write' ? chalk.blue :
457
+ operation === 'update' ? chalk.yellow :
458
+ operation === 'delete' ? chalk.red : chalk.gray;
459
+ console.log(` ${opColor(operation)}: ${chalk.cyan(count)}`);
460
+ }
461
+ console.log();
462
+ // Models
463
+ if (result.models.length > 0) {
464
+ console.log(chalk.bold('Models Accessed:'));
465
+ for (const model of result.models) {
466
+ console.log(` • ${model}`);
467
+ }
468
+ console.log();
469
+ }
470
+ // Access points (verbose)
471
+ if (options.verbose && result.accessPoints.length > 0) {
472
+ console.log(chalk.bold('Access Points:'));
473
+ for (const ap of result.accessPoints.slice(0, 20)) {
474
+ const opColor = ap.operation === 'read' ? chalk.green :
475
+ ap.operation === 'write' ? chalk.blue :
476
+ ap.operation === 'update' ? chalk.yellow :
477
+ ap.operation === 'delete' ? chalk.red : chalk.gray;
478
+ console.log(` ${opColor(ap.operation.padEnd(6))} ${ap.model} (${ap.framework})`);
479
+ console.log(chalk.gray(` ${ap.file}:${ap.line}`));
480
+ }
481
+ if (result.accessPoints.length > 20) {
482
+ console.log(chalk.gray(` ... and ${result.accessPoints.length - 20} more`));
483
+ }
484
+ console.log();
485
+ }
486
+ }
487
+ catch (error) {
488
+ spinner?.stop();
489
+ if (format === 'json') {
490
+ console.log(JSON.stringify({ error: String(error) }));
491
+ }
492
+ else {
493
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
494
+ }
495
+ }
496
+ }
497
+ /**
498
+ * Decorators subcommand
499
+ */
500
+ async function decoratorsAction(targetPath, options) {
501
+ const rootDir = targetPath ?? process.cwd();
502
+ const format = options.format ?? 'text';
503
+ const isTextFormat = format === 'text';
504
+ const spinner = isTextFormat ? createSpinner('Analyzing decorators...') : null;
505
+ spinner?.start();
506
+ try {
507
+ const analyzer = createTypeScriptAnalyzer({ rootDir, verbose: options.verbose });
508
+ const result = await analyzer.analyzeDecorators();
509
+ spinner?.stop();
510
+ // JSON output
511
+ if (format === 'json') {
512
+ console.log(JSON.stringify(result, null, 2));
513
+ return;
514
+ }
515
+ // Text output
516
+ console.log();
517
+ console.log(chalk.bold('šŸŽ€ Decorator Analysis'));
518
+ console.log(chalk.gray('─'.repeat(60)));
519
+ console.log();
520
+ console.log(`Total Decorators: ${chalk.cyan(result.decorators.length)}`);
521
+ console.log();
522
+ if (result.decorators.length === 0) {
523
+ console.log(chalk.gray('No decorators found'));
524
+ console.log();
525
+ return;
526
+ }
527
+ // By name
528
+ console.log(chalk.bold('By Name:'));
529
+ const sortedByName = Object.entries(result.byName).sort((a, b) => b[1] - a[1]);
530
+ for (const [name, count] of sortedByName.slice(0, 15)) {
531
+ console.log(` @${name}: ${chalk.cyan(count)}`);
532
+ }
533
+ if (sortedByName.length > 15) {
534
+ console.log(chalk.gray(` ... and ${sortedByName.length - 15} more`));
535
+ }
536
+ console.log();
537
+ // By target
538
+ const byTarget = {
539
+ class: result.decorators.filter((d) => d.target === 'class').length,
540
+ method: result.decorators.filter((d) => d.target === 'method').length,
541
+ property: result.decorators.filter((d) => d.target === 'property').length,
542
+ parameter: result.decorators.filter((d) => d.target === 'parameter').length,
543
+ };
544
+ console.log(chalk.bold('By Target:'));
545
+ console.log(` Class: ${chalk.cyan(byTarget.class)}`);
546
+ console.log(` Method: ${chalk.cyan(byTarget.method)}`);
547
+ console.log(` Property: ${chalk.cyan(byTarget.property)}`);
548
+ console.log(` Parameter: ${chalk.cyan(byTarget.parameter)}`);
549
+ console.log();
550
+ // Verbose: show individual decorators
551
+ if (options.verbose) {
552
+ console.log(chalk.bold('Decorators:'));
553
+ for (const dec of result.decorators.slice(0, 20)) {
554
+ console.log(` @${chalk.cyan(dec.name)} (${dec.target})`);
555
+ console.log(chalk.gray(` ${dec.file}:${dec.line}`));
556
+ }
557
+ if (result.decorators.length > 20) {
558
+ console.log(chalk.gray(` ... and ${result.decorators.length - 20} more`));
559
+ }
560
+ console.log();
561
+ }
562
+ }
563
+ catch (error) {
564
+ spinner?.stop();
565
+ if (format === 'json') {
566
+ console.log(JSON.stringify({ error: String(error) }));
567
+ }
568
+ else {
569
+ console.log(chalk.red(`\nāŒ Error: ${error}`));
570
+ }
571
+ }
572
+ }
573
+ /**
574
+ * Get color for HTTP method
575
+ */
576
+ function getMethodColor(method) {
577
+ const colors = {
578
+ GET: chalk.green,
579
+ POST: chalk.blue,
580
+ PUT: chalk.yellow,
581
+ DELETE: chalk.red,
582
+ PATCH: chalk.magenta,
583
+ HEAD: chalk.cyan,
584
+ OPTIONS: chalk.gray,
585
+ ALL: chalk.white,
586
+ };
587
+ return colors[method] ?? chalk.white;
588
+ }
589
+ //# sourceMappingURL=ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts.js","sourceRoot":"","sources":["../../src/commands/ts.ts"],"names":[],"mappings":"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"}