@bfra.me/workspace-analyzer 0.1.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 (73) hide show
  1. package/README.md +402 -0
  2. package/lib/chunk-4LSFAAZW.js +1 -0
  3. package/lib/chunk-JDF7DQ4V.js +27 -0
  4. package/lib/chunk-WOJ4C7N7.js +7122 -0
  5. package/lib/cli.d.ts +1 -0
  6. package/lib/cli.js +318 -0
  7. package/lib/index.d.ts +3701 -0
  8. package/lib/index.js +1262 -0
  9. package/lib/types/index.d.ts +146 -0
  10. package/lib/types/index.js +28 -0
  11. package/package.json +89 -0
  12. package/src/analyzers/analyzer.ts +201 -0
  13. package/src/analyzers/architectural-analyzer.ts +304 -0
  14. package/src/analyzers/build-config-analyzer.ts +334 -0
  15. package/src/analyzers/circular-import-analyzer.ts +463 -0
  16. package/src/analyzers/config-consistency-analyzer.ts +335 -0
  17. package/src/analyzers/dead-code-analyzer.ts +565 -0
  18. package/src/analyzers/duplicate-code-analyzer.ts +626 -0
  19. package/src/analyzers/duplicate-dependency-analyzer.ts +381 -0
  20. package/src/analyzers/eslint-config-analyzer.ts +281 -0
  21. package/src/analyzers/exports-field-analyzer.ts +324 -0
  22. package/src/analyzers/index.ts +388 -0
  23. package/src/analyzers/large-dependency-analyzer.ts +535 -0
  24. package/src/analyzers/package-json-analyzer.ts +349 -0
  25. package/src/analyzers/peer-dependency-analyzer.ts +275 -0
  26. package/src/analyzers/tree-shaking-analyzer.ts +623 -0
  27. package/src/analyzers/tsconfig-analyzer.ts +382 -0
  28. package/src/analyzers/unused-dependency-analyzer.ts +356 -0
  29. package/src/analyzers/version-alignment-analyzer.ts +308 -0
  30. package/src/api/analyze-workspace.ts +245 -0
  31. package/src/api/index.ts +11 -0
  32. package/src/cache/cache-manager.ts +495 -0
  33. package/src/cache/cache-schema.ts +247 -0
  34. package/src/cache/change-detector.ts +169 -0
  35. package/src/cache/file-hasher.ts +65 -0
  36. package/src/cache/index.ts +47 -0
  37. package/src/cli/commands/analyze.ts +240 -0
  38. package/src/cli/commands/index.ts +5 -0
  39. package/src/cli/index.ts +61 -0
  40. package/src/cli/types.ts +65 -0
  41. package/src/cli/ui.ts +213 -0
  42. package/src/cli.ts +9 -0
  43. package/src/config/defaults.ts +183 -0
  44. package/src/config/index.ts +81 -0
  45. package/src/config/loader.ts +270 -0
  46. package/src/config/merger.ts +229 -0
  47. package/src/config/schema.ts +263 -0
  48. package/src/core/incremental-analyzer.ts +462 -0
  49. package/src/core/index.ts +34 -0
  50. package/src/core/orchestrator.ts +416 -0
  51. package/src/graph/dependency-graph.ts +408 -0
  52. package/src/graph/index.ts +19 -0
  53. package/src/index.ts +417 -0
  54. package/src/parser/config-parser.ts +491 -0
  55. package/src/parser/import-extractor.ts +340 -0
  56. package/src/parser/index.ts +54 -0
  57. package/src/parser/typescript-parser.ts +95 -0
  58. package/src/performance/bundle-estimator.ts +444 -0
  59. package/src/performance/index.ts +27 -0
  60. package/src/reporters/console-reporter.ts +355 -0
  61. package/src/reporters/index.ts +49 -0
  62. package/src/reporters/json-reporter.ts +273 -0
  63. package/src/reporters/markdown-reporter.ts +349 -0
  64. package/src/reporters/reporter.ts +399 -0
  65. package/src/rules/builtin-rules.ts +709 -0
  66. package/src/rules/index.ts +52 -0
  67. package/src/rules/rule-engine.ts +409 -0
  68. package/src/scanner/index.ts +18 -0
  69. package/src/scanner/workspace-scanner.ts +403 -0
  70. package/src/types/index.ts +176 -0
  71. package/src/types/result.ts +19 -0
  72. package/src/utils/index.ts +7 -0
  73. package/src/utils/pattern-matcher.ts +48 -0
package/src/index.ts ADDED
@@ -0,0 +1,417 @@
1
+ /**
2
+ * @bfra.me/workspace-analyzer - Comprehensive monorepo static analysis
3
+ *
4
+ * This package provides workspace analysis through deep AST parsing and static analysis,
5
+ * detecting configuration inconsistencies, unused dependencies, circular imports,
6
+ * architectural violations, and performance optimization opportunities.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import {analyzeWorkspace} from '@bfra.me/workspace-analyzer'
11
+ *
12
+ * const result = await analyzeWorkspace('./my-monorepo', {
13
+ * categories: ['dependency', 'circular-import'],
14
+ * minSeverity: 'warning',
15
+ * })
16
+ *
17
+ * if (result.success) {
18
+ * console.log(`Found ${result.data.summary.totalIssues} issues`)
19
+ * }
20
+ * ```
21
+ */
22
+
23
+ // Analyzer utilities
24
+ export {
25
+ // Dependency analyzers (Phase 4)
26
+ aggregatePackageImports,
27
+ // Architectural analyzer (Phase 5)
28
+ architecturalAnalyzerMetadata,
29
+ buildConfigAnalyzerMetadata,
30
+ BUILTIN_ANALYZER_IDS,
31
+ builtinAnalyzers,
32
+ circularImportAnalyzerMetadata,
33
+ computeCycleStats,
34
+ // Performance analyzers (Phase 6)
35
+ computeDeadCodeStats,
36
+ computeDuplicateStats,
37
+ configConsistencyAnalyzerMetadata,
38
+ createAnalyzerRegistry,
39
+ createArchitecturalAnalyzer,
40
+ createBuildConfigAnalyzer,
41
+ createCircularImportAnalyzer,
42
+ createConfigConsistencyAnalyzer,
43
+ // Performance analyzer factories (Phase 6)
44
+ createDeadCodeAnalyzer,
45
+ createDefaultRegistry,
46
+ createDuplicateCodeAnalyzer,
47
+ createDuplicateDependencyAnalyzer,
48
+ createEslintConfigAnalyzer,
49
+ createExportsFieldAnalyzer,
50
+ createIssue,
51
+ createLargeDependencyAnalyzer,
52
+ createPackageJsonAnalyzer,
53
+ createPeerDependencyAnalyzer,
54
+ createTreeShakingBlockerAnalyzer,
55
+ createTsconfigAnalyzer,
56
+ createUnusedDependencyAnalyzer,
57
+ createVersionAlignmentAnalyzer,
58
+ // Performance analyzer metadata (Phase 6)
59
+ deadCodeAnalyzerMetadata,
60
+ duplicateCodeAnalyzerMetadata,
61
+ duplicateDependencyAnalyzerMetadata,
62
+ eslintConfigAnalyzerMetadata,
63
+ exportsFieldAnalyzerMetadata,
64
+ filterIssues,
65
+ generateCycleVisualization,
66
+ getKnownLargePackages,
67
+ getPackageInfo,
68
+ largeDependencyAnalyzerMetadata,
69
+ meetsMinSeverity,
70
+ packageJsonAnalyzerMetadata,
71
+ peerDependencyAnalyzerMetadata,
72
+ shouldAnalyzeCategory,
73
+ treeShakingBlockerAnalyzerMetadata,
74
+ tsconfigAnalyzerMetadata,
75
+ unusedDependencyAnalyzerMetadata,
76
+ versionAlignmentAnalyzerMetadata,
77
+ } from './analyzers/index'
78
+
79
+ export type {
80
+ AnalysisContext,
81
+ Analyzer,
82
+ AnalyzerError,
83
+ AnalyzerFactory,
84
+ AnalyzerMetadata,
85
+ AnalyzerOptions,
86
+ AnalyzerRegistration,
87
+ AnalyzerRegistry,
88
+ // Architectural analyzer types (Phase 5)
89
+ ArchitecturalAnalyzerOptions,
90
+ BuildConfigAnalyzerOptions,
91
+ // Dependency analyzer types (Phase 4)
92
+ CircularImportAnalyzerOptions,
93
+ CircularImportStats,
94
+ // Performance analyzer types (Phase 6)
95
+ CodeFingerprint,
96
+ ConfigConsistencyAnalyzerOptions,
97
+ CycleEdge,
98
+ CycleNode,
99
+ CycleVisualization,
100
+ DeadCodeAnalyzerOptions,
101
+ DeadCodeStats,
102
+ DuplicateCodeAnalyzerOptions,
103
+ DuplicateDependencyAnalyzerOptions,
104
+ DuplicateDependencyStats,
105
+ DuplicatePattern,
106
+ EslintConfigAnalyzerOptions,
107
+ ExportedSymbol,
108
+ ExportsFieldAnalyzerOptions,
109
+ LargeDependencyAnalyzerOptions,
110
+ PackageJsonAnalyzerOptions,
111
+ PeerDependencyAnalyzerOptions,
112
+ TreeShakingBlocker,
113
+ TreeShakingBlockerAnalyzerOptions,
114
+ TreeShakingBlockerType,
115
+ TsconfigAnalyzerOptions,
116
+ UnusedDependencyAnalyzerOptions,
117
+ VersionAlignmentAnalyzerOptions,
118
+ } from './analyzers/index'
119
+
120
+ // Main API entry point (Phase 9)
121
+ export {analyzePackages, analyzeWorkspace} from './api/index'
122
+
123
+ // Cache utilities (Phase 8)
124
+ export {
125
+ CACHE_SCHEMA_VERSION,
126
+ collectConfigFileStates,
127
+ CONFIG_FILE_PATTERNS,
128
+ createAnalysisChangeDetector,
129
+ createCacheManager,
130
+ createChangeDetector,
131
+ createEmptyCache,
132
+ createFileAnalysisEntry,
133
+ createFileHasher,
134
+ createPackageAnalysisEntry,
135
+ createWorkspaceHasher,
136
+ DEFAULT_CACHE_OPTIONS,
137
+ initializeCache,
138
+ } from './cache/index'
139
+
140
+ export type {
141
+ AnalysisCache,
142
+ AnalysisChangeDetector,
143
+ AnalysisChangeDetectorOptions,
144
+ CachedFileAnalysis,
145
+ CachedFileState,
146
+ CachedPackageAnalysis,
147
+ CacheError,
148
+ CacheErrorCode,
149
+ CacheManager,
150
+ CacheManagerOptions,
151
+ CacheMetadata,
152
+ CacheOptions,
153
+ CacheStatistics,
154
+ CacheValidationResult,
155
+ ChangeDetector,
156
+ ChangeDetectorOptions,
157
+ FileHasher,
158
+ WorkspaceFileHasher,
159
+ WorkspaceHasherOptions,
160
+ } from './cache/index'
161
+
162
+ // Configuration utilities (Phase 9)
163
+ export {
164
+ DEFAULT_ANALYZER_CONFIG,
165
+ DEFAULT_CONCURRENCY,
166
+ DEFAULT_EXCLUDE_PATTERNS,
167
+ DEFAULT_INCLUDE_PATTERNS,
168
+ DEFAULT_PACKAGE_PATTERNS,
169
+ DEFAULT_WORKSPACE_OPTIONS,
170
+ defineConfig,
171
+ findConfigFile,
172
+ getAnalyzerOptions,
173
+ getDefaultConfig,
174
+ loadConfig,
175
+ loadConfigFile,
176
+ mergeAnalyzerConfigs,
177
+ mergeConfig,
178
+ parseWorkspaceAnalyzerConfig,
179
+ safeParseAnalyzeOptions,
180
+ } from './config/index'
181
+
182
+ export type {
183
+ ConfigLoadError,
184
+ ConfigLoadErrorCode,
185
+ ConfigLoadResult,
186
+ MergedConfig,
187
+ SafeParseResult,
188
+ WorkspaceAnalyzerConfig,
189
+ } from './config/index'
190
+
191
+ // Core orchestration utilities (Phase 8 & 9)
192
+ export {
193
+ createConsoleProgressCallback,
194
+ createIncrementalAnalyzer,
195
+ createOrchestrator,
196
+ createSilentProgressCallback,
197
+ DEFAULT_INCREMENTAL_OPTIONS,
198
+ } from './core/index'
199
+
200
+ export type {
201
+ AnalysisOrchestrator,
202
+ IncrementalAnalysisContext,
203
+ IncrementalAnalysisError,
204
+ IncrementalAnalysisErrorCode,
205
+ IncrementalAnalysisOptions,
206
+ IncrementalAnalysisResult,
207
+ IncrementalAnalyzer,
208
+ OrchestratorOptions,
209
+ } from './core/index'
210
+
211
+ // Dependency graph utilities
212
+ export {
213
+ buildDependencyGraph,
214
+ computeGraphStatistics,
215
+ findCycles,
216
+ getTransitiveDependencies,
217
+ getTransitiveDependents,
218
+ } from './graph/index'
219
+
220
+ export type {
221
+ DependencyCycle,
222
+ DependencyEdge,
223
+ DependencyGraph,
224
+ DependencyGraphOptions,
225
+ DependencyNode,
226
+ GraphStatistics,
227
+ } from './graph/index'
228
+
229
+ // Parser utilities
230
+ export {
231
+ createProject,
232
+ extractImports,
233
+ getAllDependencies,
234
+ getAllSourceFiles,
235
+ getPackageNameFromSpecifier,
236
+ getSourceFile,
237
+ getUniqueDependencies,
238
+ isJavaScriptFile,
239
+ isRelativeImport,
240
+ isSourceFile,
241
+ isTypeScriptFile,
242
+ isWorkspacePackageImport,
243
+ parsePackageJson,
244
+ parsePackageJsonContent,
245
+ parseSourceContent,
246
+ parseSourceFile,
247
+ parseSourceFiles,
248
+ parseTsConfig,
249
+ parseTsConfigContent,
250
+ resolveRelativeImport,
251
+ resolveTsConfigExtends,
252
+ } from './parser/index'
253
+
254
+ export type {
255
+ ConfigError,
256
+ ConfigErrorCode,
257
+ ExtractedImport,
258
+ ImportExtractionResult,
259
+ ImportExtractorOptions,
260
+ ImportType,
261
+ ParsedPackageJson,
262
+ ParsedTsConfig,
263
+ ParseError,
264
+ ParseErrorCode,
265
+ TsCompilerOptions,
266
+ TsProjectReference,
267
+ TypeScriptParserOptions,
268
+ } from './parser/index'
269
+
270
+ // Performance utilities (Phase 6)
271
+ export {
272
+ estimateDependencySize,
273
+ estimateFileSize,
274
+ estimatePackageBundleSize,
275
+ estimateTreeShakingSavings,
276
+ findLargeDependencies,
277
+ findLargeFiles,
278
+ formatBytes,
279
+ } from './performance/index'
280
+
281
+ export type {
282
+ BundleEstimatorOptions,
283
+ BundleSizeEstimate,
284
+ DependencySizeEstimate,
285
+ OptimizableImport,
286
+ PackageBundleStats,
287
+ TreeShakingSavingsEstimate,
288
+ } from './performance/index'
289
+
290
+ // Reporter utilities (Phase 7)
291
+ export {
292
+ calculateSummary,
293
+ CATEGORY_CONFIG,
294
+ createConsoleReporter,
295
+ createJsonReporter,
296
+ createMarkdownReporter,
297
+ DEFAULT_REPORT_OPTIONS,
298
+ filterIssuesForReport,
299
+ formatDuration,
300
+ formatLocation,
301
+ getRelativePath,
302
+ groupIssues,
303
+ SEVERITY_CONFIG,
304
+ truncateText,
305
+ } from './reporters/index'
306
+
307
+ export type {
308
+ ConsoleReporterOptions,
309
+ GroupedIssues,
310
+ JsonReport,
311
+ JsonReporterOptions,
312
+ JsonReportGroup,
313
+ JsonReportIssue,
314
+ JsonReportLocation,
315
+ JsonReportMetadata,
316
+ MarkdownReporterOptions,
317
+ Reporter,
318
+ ReporterFactory,
319
+ ReportFormat,
320
+ ReportOptions,
321
+ ReportSummary,
322
+ } from './reporters/index'
323
+
324
+ // Rules engine and built-in rules (Phase 5)
325
+ export {
326
+ barrelExportRuleMetadata,
327
+ BUILTIN_RULE_IDS,
328
+ createBarrelExportRule,
329
+ createLayerViolationRule,
330
+ createPackageBoundaryRule,
331
+ createPathAliasRule,
332
+ createPublicApiRule,
333
+ createRuleEngine,
334
+ createSideEffectRule,
335
+ DEFAULT_LAYER_CONFIG,
336
+ getFileLayer,
337
+ isLayerImportAllowed,
338
+ layerViolationRuleMetadata,
339
+ packageBoundaryRuleMetadata,
340
+ pathAliasRuleMetadata,
341
+ publicApiRuleMetadata,
342
+ sideEffectRuleMetadata,
343
+ } from './rules/index'
344
+
345
+ export type {
346
+ BarrelExportRuleOptions,
347
+ LayerConfiguration,
348
+ LayerDefinition,
349
+ LayerPattern,
350
+ LayerViolationRuleOptions,
351
+ PackageBoundaryRuleOptions,
352
+ PathAliasRuleOptions,
353
+ PublicApiRuleOptions,
354
+ Rule,
355
+ RuleContext,
356
+ RuleEngine,
357
+ RuleEngineError,
358
+ RuleFactory,
359
+ RuleMetadata,
360
+ RuleOptions,
361
+ RuleRegistration,
362
+ RuleResult,
363
+ RuleViolation,
364
+ SideEffectRuleOptions,
365
+ } from './rules/index'
366
+
367
+ // Scanner utilities
368
+ export {
369
+ createWorkspaceScanner,
370
+ filterPackagesByPattern,
371
+ getPackageScope,
372
+ getUnscopedName,
373
+ groupPackagesByScope,
374
+ } from './scanner/index'
375
+
376
+ export type {
377
+ ScanError,
378
+ WorkspacePackage,
379
+ WorkspacePackageJson,
380
+ WorkspaceScannerOptions,
381
+ WorkspaceScanResult,
382
+ } from './scanner/index'
383
+
384
+ // Core types
385
+ export type {
386
+ AnalysisError,
387
+ AnalysisProgress,
388
+ AnalysisResult,
389
+ AnalysisResultType,
390
+ AnalysisSummary,
391
+ AnalyzerConfig,
392
+ AnalyzeWorkspaceOptions,
393
+ Issue,
394
+ IssueCategory,
395
+ IssueLocation,
396
+ Severity,
397
+ } from './types/index'
398
+
399
+ // Result type utilities
400
+ export {
401
+ err,
402
+ flatMap,
403
+ fromPromise,
404
+ fromThrowable,
405
+ isErr,
406
+ isOk,
407
+ map,
408
+ mapErr,
409
+ ok,
410
+ unwrap,
411
+ unwrapOr,
412
+ } from './types/index'
413
+
414
+ export type {Err, Ok, Result} from './types/index'
415
+
416
+ // Utility functions
417
+ export {matchAnyPattern, matchPattern, normalizePath} from './utils/index'