driftdetect 0.4.7 → 0.5.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 (71) hide show
  1. package/dist/bin/drift.js +27 -1
  2. package/dist/bin/drift.js.map +1 -1
  3. package/dist/commands/approve.d.ts +20 -0
  4. package/dist/commands/approve.d.ts.map +1 -1
  5. package/dist/commands/approve.js +38 -72
  6. package/dist/commands/approve.js.map +1 -1
  7. package/dist/commands/check.d.ts +41 -0
  8. package/dist/commands/check.d.ts.map +1 -1
  9. package/dist/commands/check.js +21 -11
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/coupling.d.ts +17 -0
  12. package/dist/commands/coupling.d.ts.map +1 -0
  13. package/dist/commands/coupling.js +726 -0
  14. package/dist/commands/coupling.js.map +1 -0
  15. package/dist/commands/error-handling.d.ts +15 -0
  16. package/dist/commands/error-handling.d.ts.map +1 -0
  17. package/dist/commands/error-handling.js +608 -0
  18. package/dist/commands/error-handling.js.map +1 -0
  19. package/dist/commands/export.d.ts +16 -0
  20. package/dist/commands/export.d.ts.map +1 -1
  21. package/dist/commands/export.js +46 -50
  22. package/dist/commands/export.js.map +1 -1
  23. package/dist/commands/files.d.ts +15 -0
  24. package/dist/commands/files.d.ts.map +1 -1
  25. package/dist/commands/files.js +27 -48
  26. package/dist/commands/files.js.map +1 -1
  27. package/dist/commands/ignore.d.ts +20 -0
  28. package/dist/commands/ignore.d.ts.map +1 -1
  29. package/dist/commands/ignore.js +25 -48
  30. package/dist/commands/ignore.js.map +1 -1
  31. package/dist/commands/index.d.ts +6 -0
  32. package/dist/commands/index.d.ts.map +1 -1
  33. package/dist/commands/index.js +7 -0
  34. package/dist/commands/index.js.map +1 -1
  35. package/dist/commands/migrate-storage.d.ts +23 -0
  36. package/dist/commands/migrate-storage.d.ts.map +1 -0
  37. package/dist/commands/migrate-storage.js +337 -0
  38. package/dist/commands/migrate-storage.js.map +1 -0
  39. package/dist/commands/report.d.ts +22 -0
  40. package/dist/commands/report.d.ts.map +1 -1
  41. package/dist/commands/report.js +19 -10
  42. package/dist/commands/report.js.map +1 -1
  43. package/dist/commands/scan.d.ts +2 -0
  44. package/dist/commands/scan.d.ts.map +1 -1
  45. package/dist/commands/scan.js +134 -3
  46. package/dist/commands/scan.js.map +1 -1
  47. package/dist/commands/skills.d.ts +16 -0
  48. package/dist/commands/skills.d.ts.map +1 -0
  49. package/dist/commands/skills.js +409 -0
  50. package/dist/commands/skills.js.map +1 -0
  51. package/dist/commands/status.d.ts +20 -0
  52. package/dist/commands/status.d.ts.map +1 -1
  53. package/dist/commands/status.js +74 -72
  54. package/dist/commands/status.js.map +1 -1
  55. package/dist/commands/test-topology.d.ts +15 -0
  56. package/dist/commands/test-topology.d.ts.map +1 -0
  57. package/dist/commands/test-topology.js +589 -0
  58. package/dist/commands/test-topology.js.map +1 -0
  59. package/dist/commands/where.d.ts +15 -0
  60. package/dist/commands/where.d.ts.map +1 -1
  61. package/dist/commands/where.js +41 -88
  62. package/dist/commands/where.js.map +1 -1
  63. package/dist/commands/wrappers.d.ts +16 -0
  64. package/dist/commands/wrappers.d.ts.map +1 -0
  65. package/dist/commands/wrappers.js +181 -0
  66. package/dist/commands/wrappers.js.map +1 -0
  67. package/dist/services/pattern-service-factory.d.ts +37 -0
  68. package/dist/services/pattern-service-factory.d.ts.map +1 -0
  69. package/dist/services/pattern-service-factory.js +41 -0
  70. package/dist/services/pattern-service-factory.js.map +1 -0
  71. package/package.json +4 -4
@@ -2,8 +2,8 @@
2
2
  * Where Command - Find pattern locations
3
3
  *
4
4
  * Quickly find where patterns are located in the codebase.
5
- * Now reads from BOTH ManifestStore and PatternStore to ensure
6
- * all 15 categories are available.
5
+ *
6
+ * MIGRATION: Now uses IPatternService for pattern operations.
7
7
  *
8
8
  * Usage:
9
9
  * drift where auth # Find patterns matching "auth"
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import { Command } from 'commander';
14
14
  import chalk from 'chalk';
15
- import { ManifestStore, PatternStore, } from 'driftdetect-core';
15
+ import { createCLIPatternService } from '../services/pattern-service-factory.js';
16
16
  export const whereCommand = new Command('where')
17
17
  .description('Find pattern locations')
18
18
  .argument('<pattern>', 'Pattern name or ID (supports partial matching)')
@@ -23,105 +23,61 @@ export const whereCommand = new Command('where')
23
23
  .option('--json', 'Output as JSON')
24
24
  .action(async (pattern, options) => {
25
25
  const cwd = process.cwd();
26
- // Load manifest
27
- const manifestStore = new ManifestStore(cwd);
28
- const manifest = await manifestStore.load();
29
- // Also load from PatternStore to get ALL 15 categories
30
- const patternStore = new PatternStore({ rootDir: cwd });
31
- await patternStore.initialize();
32
- const allPatterns = patternStore.getAll();
33
- if (!manifest && allPatterns.length === 0) {
34
- console.error(chalk.red('No patterns found. Run `drift scan` first.'));
35
- process.exit(1);
36
- }
37
- // Build query
38
- const query = {
39
- pattern,
40
- limit: parseInt(options.limit, 10),
26
+ // Initialize pattern service
27
+ const service = createCLIPatternService(cwd);
28
+ // Search for patterns using the service
29
+ const searchOptions = {
30
+ limit: 100, // Get more results for filtering
41
31
  };
42
32
  if (options.category) {
43
- query.category = options.category;
33
+ searchOptions.categories = [options.category];
44
34
  }
45
35
  if (options.status) {
46
- query.status = options.status;
36
+ searchOptions.statuses = [options.status];
47
37
  }
48
38
  if (options.minConfidence) {
49
- query.minConfidence = parseFloat(options.minConfidence);
39
+ searchOptions.minConfidence = parseFloat(options.minConfidence);
50
40
  }
51
- // Query patterns from manifest
52
- const manifestResults = manifest ? manifestStore.queryPatterns(query) : [];
53
- // Also search in PatternStore for patterns matching the query
54
- // This ensures all 15 categories are searched
55
- const patternStoreResults = [];
56
- const searchTerm = pattern.toLowerCase();
57
- const limit = parseInt(options.limit, 10);
58
- for (const p of allPatterns) {
59
- // Filter by pattern name/id
60
- if (!p.id.toLowerCase().includes(searchTerm) &&
61
- !p.name.toLowerCase().includes(searchTerm) &&
62
- !p.category.toLowerCase().includes(searchTerm) &&
63
- !p.subcategory.toLowerCase().includes(searchTerm)) {
64
- continue;
65
- }
66
- // Filter by category
67
- if (options.category && p.category !== options.category) {
68
- continue;
69
- }
70
- // Filter by status
71
- if (options.status && p.status !== options.status) {
72
- continue;
73
- }
74
- // Filter by confidence
75
- if (options.minConfidence && p.confidence.score < parseFloat(options.minConfidence)) {
76
- continue;
77
- }
78
- const locations = p.locations.slice(0, limit).map(loc => ({
79
- file: loc.file,
80
- range: { start: loc.line, end: loc.endLine || loc.line },
81
- type: 'block',
82
- name: `line-${loc.line}`,
83
- }));
84
- patternStoreResults.push({
85
- patternId: p.id,
86
- patternName: p.name,
87
- category: p.category,
88
- locations,
89
- totalCount: p.locations.length,
90
- });
91
- }
92
- // Merge results (dedupe by pattern ID)
93
- const mergedResults = new Map();
94
- for (const r of manifestResults) {
95
- mergedResults.set(r.patternId, r);
96
- }
97
- for (const r of patternStoreResults) {
98
- if (!mergedResults.has(r.patternId)) {
99
- // Add required fields for SemanticLocation compatibility
100
- const locationsWithHash = r.locations.map(loc => ({
101
- ...loc,
102
- hash: '',
103
- confidence: 0.9,
104
- }));
105
- mergedResults.set(r.patternId, {
106
- ...r,
107
- locations: locationsWithHash,
108
- });
109
- }
110
- }
111
- const results = Array.from(mergedResults.values());
112
- if (results.length === 0) {
41
+ // Use the search method to find matching patterns
42
+ const searchResults = await service.search(pattern, searchOptions);
43
+ if (searchResults.length === 0) {
44
+ // Get all patterns to show available categories
45
+ const allPatternsResult = await service.listPatterns({ limit: 1000 });
113
46
  console.log(chalk.yellow(`No patterns found matching "${pattern}"`));
114
47
  // Show available categories
115
- const categories = new Set(allPatterns.map(p => p.category));
48
+ const categories = new Set(allPatternsResult.items.map(p => p.category));
116
49
  if (categories.size > 0) {
117
50
  console.log(chalk.dim('\nAvailable categories:'));
118
51
  for (const cat of categories) {
119
- const count = allPatterns.filter(p => p.category === cat).length;
52
+ const count = allPatternsResult.items.filter(p => p.category === cat).length;
120
53
  console.log(chalk.dim(` ${cat}: ${count} patterns`));
121
54
  }
122
55
  }
123
56
  process.exit(0);
124
57
  }
58
+ // Fetch full pattern details for results
59
+ const limit = parseInt(options.limit, 10);
60
+ const results = [];
61
+ for (const summary of searchResults) {
62
+ const fullPattern = await service.getPattern(summary.id);
63
+ if (!fullPattern)
64
+ continue;
65
+ const locations = fullPattern.locations.slice(0, limit).map(loc => ({
66
+ file: loc.file,
67
+ hash: '',
68
+ range: { start: loc.line, end: loc.endLine ?? loc.line },
69
+ type: 'block',
70
+ name: `line-${loc.line}`,
71
+ confidence: fullPattern.confidence,
72
+ }));
73
+ results.push({
74
+ patternId: fullPattern.id,
75
+ patternName: fullPattern.name,
76
+ category: fullPattern.category,
77
+ locations,
78
+ totalCount: fullPattern.locations.length,
79
+ });
80
+ }
125
81
  // Output
126
82
  if (options.json) {
127
83
  console.log(JSON.stringify(results, null, 2));
@@ -140,9 +96,6 @@ export const whereCommand = new Command('where')
140
96
  if (loc.type !== 'file' && loc.type !== 'block') {
141
97
  console.log(` ${chalk.dim(loc.type)}: ${chalk.white(loc.name)}`);
142
98
  }
143
- if (loc.signature) {
144
- console.log(` ${chalk.dim(loc.signature.substring(0, 60))}`);
145
- }
146
99
  }
147
100
  if (result.totalCount > result.locations.length) {
148
101
  console.log(chalk.dim(` ... and ${result.totalCount - result.locations.length} more`));
@@ -1 +1 @@
1
- {"version":3,"file":"where.js","sourceRoot":"","sources":["../../src/commands/where.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"where.js","sourceRoot":"","sources":["../../src/commands/where.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Wrappers Command
3
+ *
4
+ * Detect framework wrapper patterns in the codebase.
5
+ *
6
+ * Usage:
7
+ * drift wrappers # Scan current directory
8
+ * drift wrappers --json # Output as JSON
9
+ * drift wrappers --verbose # Show detailed output
10
+ * drift wrappers --include-tests # Include test files
11
+ * drift wrappers --min-confidence 0.8 # Filter by confidence
12
+ */
13
+ import { Command } from 'commander';
14
+ export declare const wrappersCommand: Command;
15
+ export default wrappersCommand;
16
+ //# sourceMappingURL=wrappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../src/commands/wrappers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,eAAe,SA0DxB,CAAC;AA6IL,eAAe,eAAe,CAAC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Wrappers Command
3
+ *
4
+ * Detect framework wrapper patterns in the codebase.
5
+ *
6
+ * Usage:
7
+ * drift wrappers # Scan current directory
8
+ * drift wrappers --json # Output as JSON
9
+ * drift wrappers --verbose # Show detailed output
10
+ * drift wrappers --include-tests # Include test files
11
+ * drift wrappers --min-confidence 0.8 # Filter by confidence
12
+ */
13
+ import { Command } from 'commander';
14
+ import * as path from 'node:path';
15
+ import chalk from 'chalk';
16
+ import { createWrapperScanner, } from 'driftdetect-core/wrappers';
17
+ // =============================================================================
18
+ // Command Definition
19
+ // =============================================================================
20
+ export const wrappersCommand = new Command('wrappers')
21
+ .description('Detect framework wrapper patterns in the codebase')
22
+ .option('-d, --dir <path>', 'Project directory', '.')
23
+ .option('-j, --json', 'Output as JSON')
24
+ .option('-v, --verbose', 'Show detailed output')
25
+ .option('--include-tests', 'Include test files in analysis')
26
+ .option('--min-confidence <number>', 'Minimum cluster confidence (0-1)', '0.5')
27
+ .option('--min-cluster-size <number>', 'Minimum cluster size', '2')
28
+ .option('--max-depth <number>', 'Maximum wrapper depth to traverse', '10')
29
+ .option('--category <category>', 'Filter by category')
30
+ .action(async (options) => {
31
+ const rootDir = path.resolve(options.dir);
32
+ const verbose = options.verbose || false;
33
+ const jsonOutput = options.json || false;
34
+ const includeTests = options.includeTests || false;
35
+ const minConfidence = parseFloat(options.minConfidence);
36
+ const minClusterSize = parseInt(options.minClusterSize, 10);
37
+ const maxDepth = parseInt(options.maxDepth, 10);
38
+ const categoryFilter = options.category;
39
+ if (!jsonOutput) {
40
+ console.log(chalk.cyan('\n🔍 Scanning for framework wrappers...\n'));
41
+ }
42
+ try {
43
+ const scanner = createWrapperScanner({
44
+ rootDir,
45
+ includeTestFiles: includeTests,
46
+ verbose,
47
+ });
48
+ const result = await scanner.scan({
49
+ minConfidence,
50
+ minClusterSize,
51
+ maxDepth,
52
+ includeTestFiles: includeTests,
53
+ });
54
+ // Filter by category if specified
55
+ if (categoryFilter) {
56
+ result.analysis.clusters = result.analysis.clusters.filter((c) => c.category === categoryFilter);
57
+ }
58
+ if (jsonOutput) {
59
+ console.log(JSON.stringify(result, null, 2));
60
+ }
61
+ else {
62
+ printResults(result, verbose);
63
+ }
64
+ }
65
+ catch (error) {
66
+ if (jsonOutput) {
67
+ console.log(JSON.stringify({ error: error.message }));
68
+ }
69
+ else {
70
+ console.error(chalk.red(`Error: ${error.message}`));
71
+ }
72
+ process.exit(1);
73
+ }
74
+ });
75
+ // =============================================================================
76
+ // Output Formatting
77
+ // =============================================================================
78
+ function printResults(result, verbose) {
79
+ const { analysis, stats, duration, errors } = result;
80
+ // Summary header
81
+ console.log(chalk.bold('📊 Wrapper Analysis Summary\n'));
82
+ console.log(` Files scanned: ${chalk.cyan(stats.totalFiles)}`);
83
+ console.log(` Functions found: ${chalk.cyan(stats.totalFunctions)}`);
84
+ console.log(` Wrappers detected: ${chalk.green(analysis.summary.totalWrappers)}`);
85
+ console.log(` Clusters found: ${chalk.green(analysis.summary.totalClusters)}`);
86
+ console.log(` Duration: ${chalk.gray(`${duration}ms`)}`);
87
+ console.log();
88
+ // Frameworks detected
89
+ if (analysis.frameworks.length > 0) {
90
+ console.log(chalk.bold('🔧 Frameworks Detected\n'));
91
+ for (const fw of analysis.frameworks) {
92
+ console.log(` ${chalk.cyan(fw.name)} - ${fw.primitiveCount} primitives`);
93
+ }
94
+ console.log();
95
+ }
96
+ // Clusters
97
+ if (analysis.clusters.length > 0) {
98
+ console.log(chalk.bold('📦 Wrapper Clusters\n'));
99
+ for (const cluster of analysis.clusters) {
100
+ printCluster(cluster, verbose);
101
+ }
102
+ }
103
+ else {
104
+ console.log(chalk.yellow(' No wrapper clusters found.\n'));
105
+ console.log(chalk.gray(' This could mean:'));
106
+ console.log(chalk.gray(' - No framework primitives are being wrapped'));
107
+ console.log(chalk.gray(' - The codebase uses primitives directly'));
108
+ console.log(chalk.gray(' - Try lowering --min-confidence or --min-cluster-size'));
109
+ console.log();
110
+ }
111
+ // Top wrappers by usage
112
+ if (analysis.wrappers.length > 0 && verbose) {
113
+ console.log(chalk.bold('🏆 Most Used Wrappers\n'));
114
+ const topWrappers = [...analysis.wrappers]
115
+ .sort((a, b) => b.calledBy.length - a.calledBy.length)
116
+ .slice(0, 10);
117
+ for (const wrapper of topWrappers) {
118
+ printWrapper(wrapper);
119
+ }
120
+ console.log();
121
+ }
122
+ // Errors
123
+ if (errors.length > 0) {
124
+ console.log(chalk.yellow(`⚠️ ${errors.length} errors during scan\n`));
125
+ if (verbose) {
126
+ for (const error of errors) {
127
+ console.log(chalk.gray(` ${error}`));
128
+ }
129
+ console.log();
130
+ }
131
+ }
132
+ // Category breakdown
133
+ const categoryBreakdown = Object.entries(analysis.summary.wrappersByCategory)
134
+ .filter(([, count]) => count > 0)
135
+ .sort((a, b) => b[1] - a[1]);
136
+ if (categoryBreakdown.length > 0) {
137
+ console.log(chalk.bold('📈 Wrappers by Category\n'));
138
+ for (const [category, count] of categoryBreakdown) {
139
+ const numCount = count;
140
+ const bar = '█'.repeat(Math.min(numCount, 30));
141
+ console.log(` ${chalk.cyan(category.padEnd(20))} ${bar} ${numCount}`);
142
+ }
143
+ console.log();
144
+ }
145
+ }
146
+ function printCluster(cluster, verbose) {
147
+ const confidenceColor = cluster.confidence >= 0.8
148
+ ? chalk.green
149
+ : cluster.confidence >= 0.5
150
+ ? chalk.yellow
151
+ : chalk.red;
152
+ console.log(` ${chalk.bold(cluster.name)} ${chalk.gray(`(${cluster.category})`)} ` +
153
+ `${confidenceColor(`${Math.round(cluster.confidence * 100)}%`)}`);
154
+ console.log(chalk.gray(` ${cluster.description}`));
155
+ console.log(chalk.gray(` Primitives: ${cluster.primitiveSignature.slice(0, 5).join(', ')}` +
156
+ (cluster.primitiveSignature.length > 5
157
+ ? ` +${cluster.primitiveSignature.length - 5} more`
158
+ : '')));
159
+ console.log(chalk.gray(` ${cluster.wrappers.length} wrappers, avg depth ${cluster.avgDepth.toFixed(1)}, ` +
160
+ `${cluster.totalUsages} usages`));
161
+ if (verbose && cluster.wrappers.length > 0) {
162
+ console.log(chalk.gray(' Members:'));
163
+ for (const wrapper of cluster.wrappers.slice(0, 5)) {
164
+ console.log(chalk.gray(` - ${wrapper.name} (${wrapper.file}:${wrapper.line})`));
165
+ }
166
+ if (cluster.wrappers.length > 5) {
167
+ console.log(chalk.gray(` ... +${cluster.wrappers.length - 5} more`));
168
+ }
169
+ }
170
+ console.log();
171
+ }
172
+ function printWrapper(wrapper) {
173
+ const usageCount = wrapper.calledBy.length;
174
+ const depthIndicator = '→'.repeat(wrapper.depth);
175
+ console.log(` ${chalk.cyan(wrapper.name)} ${chalk.gray(depthIndicator)} ` +
176
+ `${chalk.green(`${usageCount} usages`)}`);
177
+ console.log(chalk.gray(` ${wrapper.file}:${wrapper.line}`));
178
+ console.log(chalk.gray(` Wraps: ${wrapper.primitiveSignature.slice(0, 3).join(', ')}`));
179
+ }
180
+ export default wrappersCommand;
181
+ //# sourceMappingURL=wrappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.js","sourceRoot":"","sources":["../../src/commands/wrappers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,oBAAoB,GAIrB,MAAM,2BAA2B,CAAC;AAEnC,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACpD,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;KAC3D,MAAM,CAAC,2BAA2B,EAAE,kCAAkC,EAAE,KAAK,CAAC;KAC9E,MAAM,CAAC,6BAA6B,EAAE,sBAAsB,EAAE,GAAG,CAAC;KAClE,MAAM,CAAC,sBAAsB,EAAE,mCAAmC,EAAE,IAAI,CAAC;KACzE,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;IACnD,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IAExC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,oBAAoB,CAAC;YACnC,OAAO;YACP,gBAAgB,EAAE,YAAY;YAC9B,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,aAAa;YACb,cAAc;YACd,QAAQ;YACR,gBAAgB,EAAE,YAAY;SAC/B,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACxD,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CACrD,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,SAAS,YAAY,CAAC,MAAyB,EAAE,OAAgB;IAC/D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAErD,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,sBAAsB;IACtB,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,aAAa,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,WAAW;IACX,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,wBAAwB;IACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAEnD,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;aACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;aACrD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhB,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,SAAS;IACT,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,uBAAuB,CAAC,CAAC,CAAC;QACvE,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAC1E,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAE,KAAgB,GAAG,CAAC,CAAC;SAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,CAAC,CAAY,GAAI,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC;IAEvD,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,KAAe,CAAC;YACjC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAuB,EAAE,OAAgB;IAC7D,MAAM,eAAe,GACnB,OAAO,CAAC,UAAU,IAAI,GAAG;QACvB,CAAC,CAAC,KAAK,CAAC,KAAK;QACb,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG;YACzB,CAAC,CAAC,KAAK,CAAC,MAAM;YACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAElB,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,GAAG;QACrE,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CACnE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,mBAAmB,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACpE,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;YACpC,CAAC,CAAC,KAAK,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,OAAO;YACnD,CAAC,CAAC,EAAE,CAAC,CACV,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,wBAAwB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACnF,GAAG,OAAO,CAAC,WAAW,SAAS,CAClC,CACF,CAAC;IAEF,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,OAAwB;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC3C,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG;QAC5D,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,SAAS,CAAC,EAAE,CAC3C,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAC9E,CAAC;AACJ,CAAC;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Pattern Service Factory for CLI
3
+ *
4
+ * Provides a convenient way to create a PatternService from the CLI context.
5
+ * This enables CLI commands to use the new unified pattern system.
6
+ *
7
+ * @module services/pattern-service-factory
8
+ */
9
+ import { PatternStore, type IPatternService } from 'driftdetect-core';
10
+ /**
11
+ * Create a PatternService for CLI commands.
12
+ *
13
+ * The service auto-initializes on first use, so you don't need to
14
+ * call initialize() manually.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const service = createCLIPatternService(rootDir);
19
+ * const status = await service.getStatus();
20
+ * ```
21
+ *
22
+ * @param rootDir The project root directory
23
+ * @returns A PatternService instance
24
+ */
25
+ export declare function createCLIPatternService(rootDir: string): IPatternService;
26
+ /**
27
+ * Create both a PatternStore and PatternService for CLI commands
28
+ * that need access to both (for backward compatibility during migration).
29
+ *
30
+ * @param rootDir The project root directory
31
+ * @returns Both the store and service
32
+ */
33
+ export declare function createCLIPatternStoreAndService(rootDir: string): {
34
+ store: PatternStore;
35
+ service: IPatternService;
36
+ };
37
+ //# sourceMappingURL=pattern-service-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-service-factory.d.ts","sourceRoot":"","sources":["../../src/services/pattern-service-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,YAAY,EAEZ,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAGxE;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG;IAChE,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,eAAe,CAAC;CAC1B,CAIA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Pattern Service Factory for CLI
3
+ *
4
+ * Provides a convenient way to create a PatternService from the CLI context.
5
+ * This enables CLI commands to use the new unified pattern system.
6
+ *
7
+ * @module services/pattern-service-factory
8
+ */
9
+ import { PatternStore, createPatternServiceFromStore, } from 'driftdetect-core';
10
+ /**
11
+ * Create a PatternService for CLI commands.
12
+ *
13
+ * The service auto-initializes on first use, so you don't need to
14
+ * call initialize() manually.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const service = createCLIPatternService(rootDir);
19
+ * const status = await service.getStatus();
20
+ * ```
21
+ *
22
+ * @param rootDir The project root directory
23
+ * @returns A PatternService instance
24
+ */
25
+ export function createCLIPatternService(rootDir) {
26
+ const store = new PatternStore({ rootDir });
27
+ return createPatternServiceFromStore(store, rootDir);
28
+ }
29
+ /**
30
+ * Create both a PatternStore and PatternService for CLI commands
31
+ * that need access to both (for backward compatibility during migration).
32
+ *
33
+ * @param rootDir The project root directory
34
+ * @returns Both the store and service
35
+ */
36
+ export function createCLIPatternStoreAndService(rootDir) {
37
+ const store = new PatternStore({ rootDir });
38
+ const service = createPatternServiceFromStore(store, rootDir);
39
+ return { store, service };
40
+ }
41
+ //# sourceMappingURL=pattern-service-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-service-factory.js","sourceRoot":"","sources":["../../src/services/pattern-service-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,YAAY,EACZ,6BAA6B,GAE9B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,+BAA+B,CAAC,OAAe;IAI7D,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "driftdetect",
3
- "version": "0.4.7",
3
+ "version": "0.5.0",
4
4
  "description": "AI-augmented architectural drift detection - learn and enforce codebase patterns",
5
5
  "license": "MIT",
6
6
  "author": "Geoffrey Fernald",
@@ -43,9 +43,9 @@
43
43
  "cli-progress": "^3.12.0",
44
44
  "cli-table3": "^0.6.5",
45
45
  "commander": "^12.1.0",
46
- "driftdetect-core": "^0.4.5",
47
- "driftdetect-dashboard": "^0.4.5",
48
- "driftdetect-detectors": "^0.4.5",
46
+ "driftdetect-core": "^0.5.0",
47
+ "driftdetect-dashboard": "^0.5.0",
48
+ "driftdetect-detectors": "^0.5.0",
49
49
  "ora": "^8.1.0",
50
50
  "piscina": "^5.1.4"
51
51
  },