@behavioral-contracts/verify-cli 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 (80) hide show
  1. package/LICENSE +119 -0
  2. package/README.md +694 -0
  3. package/dist/analyze-results.js +253 -0
  4. package/dist/analyzer.d.ts +366 -0
  5. package/dist/analyzer.d.ts.map +1 -0
  6. package/dist/analyzer.js +2592 -0
  7. package/dist/analyzer.js.map +1 -0
  8. package/dist/analyzers/async-error-analyzer.d.ts +72 -0
  9. package/dist/analyzers/async-error-analyzer.d.ts.map +1 -0
  10. package/dist/analyzers/async-error-analyzer.js +243 -0
  11. package/dist/analyzers/async-error-analyzer.js.map +1 -0
  12. package/dist/analyzers/event-listener-analyzer.d.ts +102 -0
  13. package/dist/analyzers/event-listener-analyzer.d.ts.map +1 -0
  14. package/dist/analyzers/event-listener-analyzer.js +253 -0
  15. package/dist/analyzers/event-listener-analyzer.js.map +1 -0
  16. package/dist/analyzers/react-query-analyzer.d.ts +66 -0
  17. package/dist/analyzers/react-query-analyzer.d.ts.map +1 -0
  18. package/dist/analyzers/react-query-analyzer.js +341 -0
  19. package/dist/analyzers/react-query-analyzer.js.map +1 -0
  20. package/dist/analyzers/return-value-analyzer.d.ts +61 -0
  21. package/dist/analyzers/return-value-analyzer.d.ts.map +1 -0
  22. package/dist/analyzers/return-value-analyzer.js +225 -0
  23. package/dist/analyzers/return-value-analyzer.js.map +1 -0
  24. package/dist/code-snippet.d.ts +48 -0
  25. package/dist/code-snippet.d.ts.map +1 -0
  26. package/dist/code-snippet.js +84 -0
  27. package/dist/code-snippet.js.map +1 -0
  28. package/dist/corpus-loader.d.ts +33 -0
  29. package/dist/corpus-loader.d.ts.map +1 -0
  30. package/dist/corpus-loader.js +155 -0
  31. package/dist/corpus-loader.js.map +1 -0
  32. package/dist/fixture-tester.d.ts +28 -0
  33. package/dist/fixture-tester.d.ts.map +1 -0
  34. package/dist/fixture-tester.js +176 -0
  35. package/dist/fixture-tester.js.map +1 -0
  36. package/dist/index.d.ts +6 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +375 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/package-discovery.d.ts +62 -0
  41. package/dist/package-discovery.d.ts.map +1 -0
  42. package/dist/package-discovery.js +299 -0
  43. package/dist/package-discovery.js.map +1 -0
  44. package/dist/reporter.d.ts +43 -0
  45. package/dist/reporter.d.ts.map +1 -0
  46. package/dist/reporter.js +347 -0
  47. package/dist/reporter.js.map +1 -0
  48. package/dist/reporters/benchmarking.d.ts +70 -0
  49. package/dist/reporters/benchmarking.d.ts.map +1 -0
  50. package/dist/reporters/benchmarking.js +191 -0
  51. package/dist/reporters/benchmarking.js.map +1 -0
  52. package/dist/reporters/d3-visualizer.d.ts +40 -0
  53. package/dist/reporters/d3-visualizer.d.ts.map +1 -0
  54. package/dist/reporters/d3-visualizer.js +803 -0
  55. package/dist/reporters/d3-visualizer.js.map +1 -0
  56. package/dist/reporters/health-score.d.ts +33 -0
  57. package/dist/reporters/health-score.d.ts.map +1 -0
  58. package/dist/reporters/health-score.js +149 -0
  59. package/dist/reporters/health-score.js.map +1 -0
  60. package/dist/reporters/index.d.ts +11 -0
  61. package/dist/reporters/index.d.ts.map +1 -0
  62. package/dist/reporters/index.js +11 -0
  63. package/dist/reporters/index.js.map +1 -0
  64. package/dist/reporters/package-breakdown.d.ts +48 -0
  65. package/dist/reporters/package-breakdown.d.ts.map +1 -0
  66. package/dist/reporters/package-breakdown.js +185 -0
  67. package/dist/reporters/package-breakdown.js.map +1 -0
  68. package/dist/reporters/positive-evidence.d.ts +42 -0
  69. package/dist/reporters/positive-evidence.d.ts.map +1 -0
  70. package/dist/reporters/positive-evidence.js +436 -0
  71. package/dist/reporters/positive-evidence.js.map +1 -0
  72. package/dist/tsconfig-generator.d.ts +17 -0
  73. package/dist/tsconfig-generator.d.ts.map +1 -0
  74. package/dist/tsconfig-generator.js +107 -0
  75. package/dist/tsconfig-generator.js.map +1 -0
  76. package/dist/types.d.ts +298 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +5 -0
  79. package/dist/types.js.map +1 -0
  80. package/package.json +59 -0
@@ -0,0 +1,436 @@
1
+ /**
2
+ * Positive Evidence Reporter
3
+ *
4
+ * Generates reports that show value even when zero violations are found.
5
+ * Focus: "Here's what we checked and validated" vs "Here's what broke"
6
+ */
7
+ import { calculateHealthScore } from './health-score.js';
8
+ import { buildPackageBreakdown, formatPackageBreakdown, getPassingPackages, } from './package-breakdown.js';
9
+ import { compareAgainstBenchmark, formatBenchmarkComparison, loadBenchmark, } from './benchmarking.js';
10
+ /**
11
+ * Generate complete positive evidence report
12
+ */
13
+ export async function generatePositiveEvidenceReport(audit, options = {
14
+ showHealthScore: true,
15
+ showPackageBreakdown: true,
16
+ showInsights: true,
17
+ showRecommendations: true,
18
+ showBenchmarking: false, // Phase 2
19
+ }) {
20
+ // Calculate metrics
21
+ const healthMetrics = calculateHealthScore(audit);
22
+ const packageBreakdown = buildPackageBreakdown(audit);
23
+ // Load and compare against benchmark (if enabled)
24
+ let benchmarking;
25
+ let benchmark;
26
+ if (options.showBenchmarking) {
27
+ try {
28
+ // Try to load benchmark from default location
29
+ const path = await import('path');
30
+ const url = await import('url');
31
+ const __filename = url.fileURLToPath(import.meta.url);
32
+ const __dirname = path.dirname(__filename);
33
+ const benchmarkPath = path.resolve(__dirname, '../../data/benchmarks.json');
34
+ const loadedBenchmark = await loadBenchmark(benchmarkPath);
35
+ if (loadedBenchmark) {
36
+ benchmark = loadedBenchmark;
37
+ benchmarking = compareAgainstBenchmark(audit, benchmark);
38
+ }
39
+ }
40
+ catch {
41
+ // Benchmark not available, skip
42
+ }
43
+ }
44
+ // Generate insights (with benchmarking data if available)
45
+ const insights = generateInsights(audit, healthMetrics, packageBreakdown, benchmarking);
46
+ // Generate recommendations
47
+ const recommendations = generateRecommendations(audit, healthMetrics, packageBreakdown);
48
+ // Format complete report
49
+ const formattedReport = formatPositiveEvidenceReport(audit, healthMetrics, packageBreakdown, insights, recommendations, options, benchmarking, benchmark);
50
+ return {
51
+ healthMetrics,
52
+ packageBreakdown,
53
+ benchmarking,
54
+ insights,
55
+ recommendations,
56
+ formattedReport,
57
+ };
58
+ }
59
+ /**
60
+ * Format the complete positive evidence report
61
+ */
62
+ function formatPositiveEvidenceReport(audit, health, breakdown, insights, recommendations, options, benchmarking, benchmark) {
63
+ const lines = [];
64
+ const green = '\x1b[32m';
65
+ const yellow = '\x1b[33m';
66
+ const cyan = '\x1b[36m';
67
+ const bold = '\x1b[1m';
68
+ const reset = '\x1b[0m';
69
+ // Header
70
+ lines.push('');
71
+ lines.push('╔═══════════════════════════════════════════════════════════════════════════════╗');
72
+ lines.push('║ Behavioral Contracts Analysis Report ║');
73
+ lines.push('╚═══════════════════════════════════════════════════════════════════════════════╝');
74
+ lines.push('');
75
+ // Get repository name from tsconfig path
76
+ const repoName = extractRepoName(audit.tsconfig);
77
+ lines.push(`${bold}Repository:${reset} ${repoName}`);
78
+ lines.push(`${bold}Analyzed:${reset} ${new Date(audit.timestamp).toLocaleString()}`);
79
+ if (audit.git_commit) {
80
+ lines.push(`${bold}Git Commit:${reset} ${audit.git_commit.substring(0, 8)}`);
81
+ }
82
+ if (audit.git_branch) {
83
+ lines.push(`${bold}Git Branch:${reset} ${audit.git_branch}`);
84
+ }
85
+ lines.push('');
86
+ // Health Score Section
87
+ if (options.showHealthScore) {
88
+ const scoreColor = getScoreColor(health.overallScore);
89
+ lines.push(`${green}✅ CODE HEALTH SCORE: ${scoreColor}${health.overallScore}/100${reset}`);
90
+ lines.push('');
91
+ // Coverage Summary
92
+ lines.push(`${cyan}📊 COVERAGE SUMMARY${reset}`);
93
+ lines.push('─'.repeat(80));
94
+ lines.push(` • Files Analyzed: ${audit.files_analyzed}`);
95
+ lines.push(` • Package Usages Detected: ${health.checksPerformed}`);
96
+ lines.push(` • Contracts Applied: ${audit.contracts_applied}`);
97
+ const violationColor = audit.violations.length === 0 ? green : yellow;
98
+ const violationIcon = audit.violations.length === 0 ? '✓' : '!';
99
+ lines.push(` • Violations Found: ${violationColor}${audit.violations.length} ${violationIcon}${reset}`);
100
+ lines.push(` • Checks Passed: ${green}${health.checksPassed} ✓${reset}`);
101
+ lines.push('');
102
+ // Health Metrics
103
+ lines.push(`${cyan}📈 REPOSITORY HEALTH METRICS${reset}`);
104
+ lines.push('─'.repeat(80));
105
+ lines.push(` • Error Handling Compliance: ${health.errorHandlingCompliance}%`);
106
+ lines.push(` • Package Coverage: ${health.packageCoverage}%`);
107
+ lines.push(` • Code Maturity: ${health.codeMaturity}`);
108
+ const riskColor = getRiskColor(health.riskLevel);
109
+ lines.push(` • Risk Level: ${riskColor}${health.riskLevel}${reset}`);
110
+ lines.push('');
111
+ }
112
+ // Package Breakdown Section
113
+ if (options.showPackageBreakdown) {
114
+ lines.push(formatPackageBreakdown(breakdown));
115
+ lines.push('');
116
+ }
117
+ // Benchmarking Section
118
+ if (options.showBenchmarking && benchmarking && benchmark) {
119
+ lines.push(formatBenchmarkComparison(benchmarking, benchmark));
120
+ lines.push('');
121
+ }
122
+ // Insights Section
123
+ if (options.showInsights && insights.length > 0) {
124
+ lines.push(`${cyan}💡 INSIGHTS${reset}`);
125
+ lines.push('─'.repeat(80));
126
+ insights.forEach(insight => {
127
+ lines.push(` ${insight}`);
128
+ });
129
+ lines.push('');
130
+ }
131
+ // Recommendations Section
132
+ if (options.showRecommendations && recommendations.length > 0) {
133
+ lines.push(`${cyan}🎯 RECOMMENDATIONS${reset}`);
134
+ lines.push('─'.repeat(80));
135
+ recommendations.forEach((rec, idx) => {
136
+ lines.push(` ${idx + 1}. ${rec}`);
137
+ });
138
+ lines.push('');
139
+ }
140
+ // Footer
141
+ lines.push('═'.repeat(80));
142
+ lines.push(` Report generated by Behavioral Contracts v${audit.tool_version}`);
143
+ lines.push(` Next scan: Enable CI integration for continuous monitoring`);
144
+ lines.push('═'.repeat(80));
145
+ lines.push('');
146
+ return lines.join('\n');
147
+ }
148
+ /**
149
+ * Generate insights based on analysis
150
+ */
151
+ function generateInsights(audit, health, breakdown, benchmarking) {
152
+ const insights = [];
153
+ const green = '\x1b[32m';
154
+ const yellow = '\x1b[33m';
155
+ const reset = '\x1b[0m';
156
+ // Perfect score insight
157
+ if (health.errorHandlingCompliance === 100) {
158
+ insights.push(`${green}✓${reset} Perfect score! All ${health.checksPerformed} package usage points follow best practices.`);
159
+ }
160
+ // High compliance insight
161
+ else if (health.errorHandlingCompliance >= 95) {
162
+ insights.push(`${green}✓${reset} Excellent compliance (${health.errorHandlingCompliance}%) - only ${audit.violations.length} issues found in ${health.checksPerformed} checks.`);
163
+ }
164
+ // Passing packages insight
165
+ const passingPackages = getPassingPackages(breakdown);
166
+ if (passingPackages.length > 0) {
167
+ const topPassing = passingPackages.slice(0, 3).map(p => p.packageName).join(', ');
168
+ insights.push(`${green}✓${reset} ${passingPackages.length} packages have zero violations (${topPassing}${passingPackages.length > 3 ? ', ...' : ''}).`);
169
+ }
170
+ // Global error handlers insight
171
+ if (health.hasGlobalErrorHandlers) {
172
+ insights.push(`${green}✓${reset} Global error handling patterns detected - shows architectural maturity.`);
173
+ }
174
+ // Consistent patterns insight
175
+ if (health.hasConsistentPatterns) {
176
+ insights.push(`${green}✓${reset} Consistent error handling patterns throughout codebase.`);
177
+ }
178
+ // Package coverage insight
179
+ const enhanced = audit;
180
+ if (enhanced.package_discovery) {
181
+ const uncoveredCount = enhanced.package_discovery.withoutContracts;
182
+ if (uncoveredCount > 0) {
183
+ insights.push(`${yellow}!${reset} ${uncoveredCount} packages don't have contracts yet - coverage opportunity for future scans.`);
184
+ }
185
+ }
186
+ // Add volume insight (shows we did real work)
187
+ if (health.checksPerformed > 100) {
188
+ insights.push(`${green}✓${reset} Analyzed ${health.checksPerformed} function calls across ${audit.files_analyzed} files - comprehensive coverage.`);
189
+ }
190
+ // Benchmarking insight
191
+ if (benchmarking) {
192
+ if (benchmarking.percentile_rank >= 75) {
193
+ insights.push(`${green}✓${reset} Your code is cleaner than ${benchmarking.percentile_rank}% of repos analyzed (${benchmarking.comparison.toLowerCase()}).`);
194
+ }
195
+ if (benchmarking.violations_avoided > 0) {
196
+ insights.push(`${green}✓${reset} Avoided ${benchmarking.violations_avoided} violations compared to average repo.`);
197
+ }
198
+ }
199
+ return insights;
200
+ }
201
+ /**
202
+ * Generate actionable recommendations
203
+ */
204
+ function generateRecommendations(audit, health, _breakdown) {
205
+ const recommendations = [];
206
+ // Perfect code recommendations
207
+ if (audit.violations.length === 0) {
208
+ recommendations.push('Add Behavioral Contracts badge to your README to showcase code quality');
209
+ recommendations.push('Integrate with CI/CD to maintain these standards as the team scales');
210
+ recommendations.push('Share this report with your team to celebrate excellent code quality');
211
+ }
212
+ // Some violations recommendations
213
+ else if (audit.violations.length < 10) {
214
+ recommendations.push(`Fix ${audit.violations.length} remaining violations to achieve 100% compliance`);
215
+ recommendations.push('Run scan after fixes to verify improvements');
216
+ recommendations.push('Add to CI to prevent future violations');
217
+ }
218
+ // Many violations recommendations
219
+ else {
220
+ recommendations.push('Prioritize fixing ERROR-level violations first (production risk)');
221
+ recommendations.push('Consider fixing violations package-by-package for manageable progress');
222
+ recommendations.push('Review error handling patterns with team to establish standards');
223
+ }
224
+ // Package coverage recommendations
225
+ const enhanced = audit;
226
+ if (enhanced.package_discovery && enhanced.package_discovery.withoutContracts > 5) {
227
+ recommendations.push(`Request contracts for your most-used packages (${enhanced.package_discovery.withoutContracts} uncovered)`);
228
+ }
229
+ // Growth recommendations
230
+ if (health.checksPerformed > 500) {
231
+ recommendations.push('Consider automated scanning on every PR for this large codebase');
232
+ }
233
+ return recommendations;
234
+ }
235
+ /**
236
+ * Extract repository name from tsconfig path
237
+ */
238
+ function extractRepoName(tsconfigPath) {
239
+ // Extract from path like: /Users/.../test-repos/Next-js-Boilerplate/tsconfig.json
240
+ const parts = tsconfigPath.split('/');
241
+ const repoIndex = parts.findIndex(p => p === 'test-repos') + 1;
242
+ if (repoIndex > 0 && repoIndex < parts.length) {
243
+ return parts[repoIndex];
244
+ }
245
+ // Fallback: get parent directory
246
+ return parts[parts.length - 2] || 'Unknown Repository';
247
+ }
248
+ /**
249
+ * Get color for score
250
+ */
251
+ function getScoreColor(score) {
252
+ if (score >= 90)
253
+ return '\x1b[32m'; // Green
254
+ if (score >= 70)
255
+ return '\x1b[33m'; // Yellow
256
+ return '\x1b[31m'; // Red
257
+ }
258
+ /**
259
+ * Get color for risk level
260
+ */
261
+ function getRiskColor(risk) {
262
+ if (risk === 'LOW')
263
+ return '\x1b[32m'; // Green
264
+ if (risk === 'MEDIUM')
265
+ return '\x1b[33m'; // Yellow
266
+ if (risk === 'HIGH')
267
+ return '\x1b[31m'; // Red
268
+ return '\x1b[35m'; // Magenta for CRITICAL
269
+ }
270
+ /**
271
+ * Print positive evidence report to console
272
+ */
273
+ export async function printPositiveEvidenceReport(audit, options) {
274
+ const report = await generatePositiveEvidenceReport(audit, options);
275
+ console.log(report.formattedReport);
276
+ }
277
+ /**
278
+ * Write positive evidence report to file
279
+ */
280
+ export async function writePositiveEvidenceReport(audit, outputPath, options) {
281
+ const { writeFile } = await import('fs/promises');
282
+ const report = await generatePositiveEvidenceReport(audit, options);
283
+ await writeFile(outputPath, report.formattedReport, 'utf-8');
284
+ }
285
+ /**
286
+ * Format positive evidence report as Markdown
287
+ */
288
+ function formatPositiveEvidenceReportMarkdown(audit, health, breakdown, insights, recommendations, options, benchmarking, benchmark) {
289
+ const lines = [];
290
+ // Header
291
+ lines.push('# Behavioral Contracts Analysis Report');
292
+ lines.push('');
293
+ // Get repository name from tsconfig path
294
+ const repoName = extractRepoName(audit.tsconfig);
295
+ lines.push(`**Repository:** ${repoName}`);
296
+ lines.push(`**Analyzed:** ${new Date(audit.timestamp).toLocaleString()}`);
297
+ if (audit.git_commit) {
298
+ lines.push(`**Git Commit:** \`${audit.git_commit.substring(0, 8)}\``);
299
+ }
300
+ if (audit.git_branch) {
301
+ lines.push(`**Git Branch:** ${audit.git_branch}`);
302
+ }
303
+ lines.push('');
304
+ // Health Score Section
305
+ if (options.showHealthScore) {
306
+ lines.push(`## ✅ Code Health Score: ${health.overallScore}/100`);
307
+ lines.push('');
308
+ // Coverage Summary
309
+ lines.push('### 📊 Coverage Summary');
310
+ lines.push('');
311
+ lines.push(`- **Files Analyzed:** ${audit.files_analyzed}`);
312
+ lines.push(`- **Package Usages Detected:** ${health.checksPerformed}`);
313
+ lines.push(`- **Contracts Applied:** ${audit.contracts_applied}`);
314
+ lines.push(`- **Violations Found:** ${audit.violations.length}`);
315
+ lines.push(`- **Checks Passed:** ${health.checksPassed} ✓`);
316
+ lines.push('');
317
+ // Health Metrics
318
+ lines.push('### 📈 Repository Health Metrics');
319
+ lines.push('');
320
+ lines.push(`- **Error Handling Compliance:** ${health.errorHandlingCompliance}%`);
321
+ lines.push(`- **Package Coverage:** ${health.packageCoverage}%`);
322
+ lines.push(`- **Code Maturity:** ${health.codeMaturity}`);
323
+ lines.push(`- **Risk Level:** ${health.riskLevel}`);
324
+ lines.push('');
325
+ }
326
+ // Package Breakdown Section
327
+ if (options.showPackageBreakdown) {
328
+ lines.push('## 📦 Package Breakdown');
329
+ lines.push('');
330
+ lines.push('| Package | Checks | Passed | Failed | Status | Compliance |');
331
+ lines.push('|---------|--------|--------|--------|--------|------------|');
332
+ breakdown.packages.forEach(pkg => {
333
+ const status = pkg.status === 'PASS' ? '✓ PASS' : '✗ FAIL';
334
+ lines.push(`| ${pkg.packageName} | ${pkg.contractsApplied} | ${pkg.checksPassedCount} | ${pkg.violationsFound} | ${status} | ${pkg.compliancePercent}% |`);
335
+ });
336
+ lines.push('');
337
+ lines.push(`**Summary:** ${breakdown.packagesFullyCompliant} passing, ${breakdown.packagesWithViolations} failing (${breakdown.totalPackagesAnalyzed} total)`);
338
+ lines.push('');
339
+ }
340
+ // Benchmarking Section
341
+ if (options.showBenchmarking && benchmarking && benchmark) {
342
+ lines.push('## 🏆 Benchmarking');
343
+ lines.push('');
344
+ lines.push(`**Sample Size:** ${benchmark.sample_size} repositories analyzed`);
345
+ lines.push('');
346
+ lines.push(`- **Your Violations:** ${benchmarking.your_violations}`);
347
+ lines.push(`- **Average Violations:** ${benchmarking.avg_violations}`);
348
+ lines.push('');
349
+ if (benchmarking.violations_avoided > 0) {
350
+ lines.push(`✓ You avoided **${benchmarking.violations_avoided} violations** vs typical repo`);
351
+ lines.push('');
352
+ }
353
+ lines.push(`**Your Ranking:** Top ${100 - benchmarking.percentile_rank}%`);
354
+ lines.push('');
355
+ lines.push(`Your repo is **${benchmarking.comparison.toLowerCase()}** than ${benchmarking.percentile_rank}% of repos scanned.`);
356
+ lines.push('');
357
+ // Show percentile distribution
358
+ lines.push('### Percentile Distribution');
359
+ lines.push('');
360
+ lines.push('| Percentile | Violations |');
361
+ lines.push('|------------|------------|');
362
+ lines.push(`| 25th | ${benchmark.percentiles.p25} |`);
363
+ lines.push(`| 50th (median) | ${benchmark.percentiles.p50} |`);
364
+ lines.push(`| 75th | ${benchmark.percentiles.p75} |`);
365
+ lines.push(`| 90th | ${benchmark.percentiles.p90} |`);
366
+ lines.push('');
367
+ }
368
+ // Insights Section
369
+ if (options.showInsights && insights.length > 0) {
370
+ lines.push('## 💡 Insights');
371
+ lines.push('');
372
+ // Strip ANSI codes from insights
373
+ insights.forEach(insight => {
374
+ const clean = insight.replace(/\x1b\[\d+m/g, '');
375
+ lines.push(`- ${clean}`);
376
+ });
377
+ lines.push('');
378
+ }
379
+ // Recommendations Section
380
+ if (options.showRecommendations && recommendations.length > 0) {
381
+ lines.push('## 🎯 Recommendations');
382
+ lines.push('');
383
+ recommendations.forEach((rec, idx) => {
384
+ lines.push(`${idx + 1}. ${rec}`);
385
+ });
386
+ lines.push('');
387
+ }
388
+ // Footer
389
+ lines.push('---');
390
+ lines.push('');
391
+ lines.push(`*Report generated by Behavioral Contracts v${audit.tool_version}*`);
392
+ lines.push('');
393
+ lines.push('*Next scan: Enable CI integration for continuous monitoring*');
394
+ lines.push('');
395
+ return lines.join('\n');
396
+ }
397
+ /**
398
+ * Write positive evidence report to file as Markdown
399
+ */
400
+ export async function writePositiveEvidenceReportMarkdown(audit, outputPath, options) {
401
+ const { writeFile } = await import('fs/promises');
402
+ // Generate the report data (includes loading benchmark if enabled)
403
+ const report = await generatePositiveEvidenceReport(audit, options);
404
+ // Load benchmark data separately for formatting (if benchmarking is enabled)
405
+ let benchmark;
406
+ if (options?.showBenchmarking !== false && report.benchmarking) {
407
+ benchmark = await loadBenchmarkForMarkdown();
408
+ }
409
+ // Format as markdown
410
+ const markdownContent = formatPositiveEvidenceReportMarkdown(audit, report.healthMetrics, report.packageBreakdown, report.insights, report.recommendations, options || {
411
+ showHealthScore: true,
412
+ showPackageBreakdown: true,
413
+ showInsights: true,
414
+ showRecommendations: true,
415
+ showBenchmarking: true,
416
+ }, report.benchmarking, benchmark);
417
+ await writeFile(outputPath, markdownContent, 'utf-8');
418
+ }
419
+ /**
420
+ * Helper to load benchmark for markdown formatting
421
+ */
422
+ async function loadBenchmarkForMarkdown() {
423
+ try {
424
+ const path = await import('path');
425
+ const url = await import('url');
426
+ const __filename = url.fileURLToPath(import.meta.url);
427
+ const __dirname = path.dirname(__filename);
428
+ const benchmarkPath = path.resolve(__dirname, '../../data/benchmarks.json');
429
+ const loadedBenchmark = await loadBenchmark(benchmarkPath);
430
+ return loadedBenchmark || undefined;
431
+ }
432
+ catch {
433
+ return undefined;
434
+ }
435
+ }
436
+ //# sourceMappingURL=positive-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positive-evidence.js","sourceRoot":"","sources":["../../src/reporters/positive-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Auto-generates minimal tsconfig.json for analysis
3
+ */
4
+ interface TsConfigOptions {
5
+ projectDir: string;
6
+ includeTests?: boolean;
7
+ }
8
+ /**
9
+ * Generates a minimal tsconfig.json suitable for analysis
10
+ */
11
+ export declare function generateMinimalTsconfig(tsconfigPath: string, options?: TsConfigOptions): void;
12
+ /**
13
+ * Ensures tsconfig.json exists, generating if necessary
14
+ */
15
+ export declare function ensureTsconfig(tsconfigPath: string): void;
16
+ export {};
17
+ //# sourceMappingURL=tsconfig-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig-generator.d.ts","sourceRoot":"","sources":["../src/tsconfig-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,UAAU,eAAe;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA2BD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAkF7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAMzD"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Auto-generates minimal tsconfig.json for analysis
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import chalk from 'chalk';
7
+ /**
8
+ * Detects project structure and generates appropriate include patterns
9
+ */
10
+ function detectIncludePatterns(projectDir) {
11
+ const patterns = [];
12
+ // Check for common monorepo structures
13
+ const possibleDirs = ['packages', 'apps', 'libs', 'src'];
14
+ for (const dir of possibleDirs) {
15
+ const fullPath = path.join(projectDir, dir);
16
+ if (fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory()) {
17
+ patterns.push(`${dir}/**/*.ts`);
18
+ patterns.push(`${dir}/**/*.tsx`);
19
+ }
20
+ }
21
+ // If no standard dirs found, include all TS files
22
+ if (patterns.length === 0) {
23
+ patterns.push('**/*.ts', '**/*.tsx');
24
+ }
25
+ return patterns;
26
+ }
27
+ /**
28
+ * Generates a minimal tsconfig.json suitable for analysis
29
+ */
30
+ export function generateMinimalTsconfig(tsconfigPath, options) {
31
+ const projectDir = options?.projectDir || path.dirname(tsconfigPath);
32
+ const includeTests = options?.includeTests || false;
33
+ // Detect include patterns based on project structure
34
+ const includePatterns = detectIncludePatterns(projectDir);
35
+ // Build exclude patterns
36
+ const excludePatterns = [
37
+ 'node_modules',
38
+ 'dist',
39
+ 'build',
40
+ 'out',
41
+ '**/node_modules',
42
+ '**/dist',
43
+ '**/build',
44
+ '**/out',
45
+ '**/.next',
46
+ '**/coverage',
47
+ ];
48
+ // Exclude test files unless explicitly requested
49
+ if (!includeTests) {
50
+ excludePatterns.push('**/*.test.ts', '**/*.test.tsx', '**/*.spec.ts', '**/*.spec.tsx', '**/__tests__', '**/__mocks__');
51
+ }
52
+ // Check if there's a base config to extend
53
+ const possibleBaseConfigs = [
54
+ '_tsconfig.base.json',
55
+ 'tsconfig.base.json',
56
+ 'tsconfig.settings.json',
57
+ ];
58
+ let extendsPath;
59
+ for (const baseConfig of possibleBaseConfigs) {
60
+ const fullPath = path.join(projectDir, baseConfig);
61
+ if (fs.existsSync(fullPath)) {
62
+ extendsPath = `./${baseConfig}`;
63
+ break;
64
+ }
65
+ }
66
+ // Build the config object
67
+ const config = {
68
+ compilerOptions: {
69
+ target: 'ES2020',
70
+ module: 'commonjs',
71
+ lib: ['ES2020'],
72
+ moduleResolution: 'node',
73
+ esModuleInterop: true,
74
+ skipLibCheck: true,
75
+ forceConsistentCasingInFileNames: true,
76
+ resolveJsonModule: true,
77
+ allowSyntheticDefaultImports: true,
78
+ strict: false, // Don't enforce strict mode for analysis
79
+ noEmit: true, // We're only analyzing, not compiling
80
+ },
81
+ include: includePatterns,
82
+ exclude: excludePatterns,
83
+ };
84
+ // Add extends if base config exists
85
+ if (extendsPath) {
86
+ config.extends = extendsPath;
87
+ }
88
+ // Write the config file
89
+ const configJson = JSON.stringify(config, null, 2);
90
+ fs.writeFileSync(tsconfigPath, configJson, 'utf-8');
91
+ console.log(chalk.dim(` Generated tsconfig.json with patterns:`));
92
+ console.log(chalk.dim(` include: ${includePatterns.join(', ')}`));
93
+ if (extendsPath) {
94
+ console.log(chalk.dim(` extends: ${extendsPath}`));
95
+ }
96
+ }
97
+ /**
98
+ * Ensures tsconfig.json exists, generating if necessary
99
+ */
100
+ export function ensureTsconfig(tsconfigPath) {
101
+ if (!fs.existsSync(tsconfigPath)) {
102
+ const projectDir = path.dirname(tsconfigPath);
103
+ console.log(chalk.yellow(` tsconfig.json not found, generating minimal config...`));
104
+ generateMinimalTsconfig(tsconfigPath, { projectDir });
105
+ }
106
+ }
107
+ //# sourceMappingURL=tsconfig-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig-generator.js","sourceRoot":"","sources":["../src/tsconfig-generator.ts"],"names":[],"mappings":"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"}