driftdetect 0.4.7 → 0.6.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.
- package/dist/bin/drift.js +37 -1
- package/dist/bin/drift.js.map +1 -1
- package/dist/commands/approve.d.ts +20 -0
- package/dist/commands/approve.d.ts.map +1 -1
- package/dist/commands/approve.js +38 -72
- package/dist/commands/approve.js.map +1 -1
- package/dist/commands/check.d.ts +41 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +21 -11
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/constraints.d.ts +17 -0
- package/dist/commands/constraints.d.ts.map +1 -0
- package/dist/commands/constraints.js +686 -0
- package/dist/commands/constraints.js.map +1 -0
- package/dist/commands/coupling.d.ts +17 -0
- package/dist/commands/coupling.d.ts.map +1 -0
- package/dist/commands/coupling.js +726 -0
- package/dist/commands/coupling.js.map +1 -0
- package/dist/commands/decisions.d.ts +19 -0
- package/dist/commands/decisions.d.ts.map +1 -0
- package/dist/commands/decisions.js +771 -0
- package/dist/commands/decisions.js.map +1 -0
- package/dist/commands/error-handling.d.ts +15 -0
- package/dist/commands/error-handling.d.ts.map +1 -0
- package/dist/commands/error-handling.js +608 -0
- package/dist/commands/error-handling.js.map +1 -0
- package/dist/commands/export.d.ts +16 -0
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +46 -50
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/files.d.ts +15 -0
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +27 -48
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/go.d.ts +21 -0
- package/dist/commands/go.d.ts.map +1 -0
- package/dist/commands/go.js +530 -0
- package/dist/commands/go.js.map +1 -0
- package/dist/commands/ignore.d.ts +20 -0
- package/dist/commands/ignore.d.ts.map +1 -1
- package/dist/commands/ignore.js +25 -48
- package/dist/commands/ignore.js.map +1 -1
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/migrate-storage.d.ts +23 -0
- package/dist/commands/migrate-storage.d.ts.map +1 -0
- package/dist/commands/migrate-storage.js +337 -0
- package/dist/commands/migrate-storage.js.map +1 -0
- package/dist/commands/report.d.ts +22 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +19 -10
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/scan.d.ts +2 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +134 -3
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/simulate.d.ts +17 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +253 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/commands/skills.d.ts +16 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +409 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +20 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +74 -72
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/test-topology.d.ts +15 -0
- package/dist/commands/test-topology.d.ts.map +1 -0
- package/dist/commands/test-topology.js +589 -0
- package/dist/commands/test-topology.js.map +1 -0
- package/dist/commands/where.d.ts +15 -0
- package/dist/commands/where.d.ts.map +1 -1
- package/dist/commands/where.js +41 -88
- package/dist/commands/where.js.map +1 -1
- package/dist/commands/wpf.d.ts +21 -0
- package/dist/commands/wpf.d.ts.map +1 -0
- package/dist/commands/wpf.js +632 -0
- package/dist/commands/wpf.js.map +1 -0
- package/dist/commands/wrappers.d.ts +16 -0
- package/dist/commands/wrappers.d.ts.map +1 -0
- package/dist/commands/wrappers.js +181 -0
- package/dist/commands/wrappers.js.map +1 -0
- package/dist/services/pattern-service-factory.d.ts +37 -0
- package/dist/services/pattern-service-factory.d.ts.map +1 -0
- package/dist/services/pattern-service-factory.js +41 -0
- package/dist/services/pattern-service-factory.js.map +1 -0
- package/package.json +35 -23
- package/LICENSE +0 -21
package/dist/commands/ignore.js
CHANGED
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Ignore a pattern to stop tracking it.
|
|
5
5
|
*
|
|
6
|
+
* MIGRATION: Now uses IPatternService for pattern operations.
|
|
7
|
+
*
|
|
6
8
|
* @requirements 29.6
|
|
7
9
|
*/
|
|
8
10
|
import { Command } from 'commander';
|
|
9
11
|
import * as fs from 'node:fs/promises';
|
|
10
12
|
import * as path from 'node:path';
|
|
11
13
|
import chalk from 'chalk';
|
|
12
|
-
import {
|
|
14
|
+
import { createCLIPatternService } from '../services/pattern-service-factory.js';
|
|
13
15
|
import { createSpinner, status } from '../ui/spinner.js';
|
|
14
16
|
import { confirmPrompt, promptIgnoreReason } from '../ui/prompts.js';
|
|
15
17
|
import { createPatternsTable } from '../ui/table.js';
|
|
@@ -40,28 +42,27 @@ async function ignoreAction(patternId, options) {
|
|
|
40
42
|
status.error('Drift is not initialized. Run `drift init` first.');
|
|
41
43
|
process.exit(1);
|
|
42
44
|
}
|
|
43
|
-
// Initialize pattern
|
|
45
|
+
// Initialize pattern service
|
|
44
46
|
const spinner = createSpinner('Loading patterns...');
|
|
45
47
|
spinner.start();
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
+
const service = createCLIPatternService(rootDir);
|
|
49
|
+
// Trigger initialization by getting status
|
|
50
|
+
await service.getStatus();
|
|
48
51
|
spinner.succeed('Patterns loaded');
|
|
49
52
|
// Find the pattern
|
|
50
|
-
const pattern =
|
|
53
|
+
const pattern = await service.getPattern(patternId);
|
|
51
54
|
if (!pattern) {
|
|
52
55
|
// Try to find by partial ID match
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
p.name.toLowerCase().includes(patternId.toLowerCase()));
|
|
56
|
-
if (matches.length === 0) {
|
|
56
|
+
const searchResult = await service.search(patternId, { limit: 20 });
|
|
57
|
+
if (searchResult.length === 0) {
|
|
57
58
|
status.error(`Pattern not found: ${patternId}`);
|
|
58
59
|
console.log();
|
|
59
60
|
console.log(chalk.gray('Use `drift status -d` to see available patterns'));
|
|
60
61
|
process.exit(1);
|
|
61
62
|
}
|
|
62
|
-
if (
|
|
63
|
+
if (searchResult.length === 1) {
|
|
63
64
|
// Single match, use it
|
|
64
|
-
const match =
|
|
65
|
+
const match = searchResult[0];
|
|
65
66
|
console.log(chalk.gray(`Found pattern: ${match.id}`));
|
|
66
67
|
console.log();
|
|
67
68
|
// Get reason if not provided
|
|
@@ -77,27 +78,16 @@ async function ignoreAction(patternId, options) {
|
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
try {
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
metadata: {
|
|
84
|
-
...match.metadata,
|
|
85
|
-
custom: {
|
|
86
|
-
...match.metadata.custom,
|
|
87
|
-
ignoreReason: reason,
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
store.ignore(match.id);
|
|
93
|
-
await store.saveAll();
|
|
81
|
+
// Note: reason is stored via the service's ignorePattern method
|
|
82
|
+
// The service handles metadata updates internally
|
|
83
|
+
await service.ignorePattern(match.id);
|
|
94
84
|
status.success(`Ignored pattern: ${match.name}`);
|
|
95
85
|
if (reason) {
|
|
96
86
|
console.log(chalk.gray(` Reason: ${reason}`));
|
|
97
87
|
}
|
|
98
88
|
}
|
|
99
89
|
catch (error) {
|
|
100
|
-
if (error instanceof
|
|
90
|
+
if (error instanceof Error && error.message.includes('already ignored')) {
|
|
101
91
|
status.warning(`Pattern is already ignored: ${match.name}`);
|
|
102
92
|
}
|
|
103
93
|
else {
|
|
@@ -110,17 +100,17 @@ async function ignoreAction(patternId, options) {
|
|
|
110
100
|
// Multiple matches, show them
|
|
111
101
|
console.log(chalk.yellow(`Multiple patterns match "${patternId}":`));
|
|
112
102
|
console.log();
|
|
113
|
-
const rows =
|
|
103
|
+
const rows = searchResult.slice(0, 10).map((p) => ({
|
|
114
104
|
id: p.id.slice(0, 13),
|
|
115
105
|
name: p.name.slice(0, 28),
|
|
116
106
|
category: p.category,
|
|
117
|
-
confidence: p.confidence
|
|
118
|
-
locations: p.
|
|
119
|
-
outliers: p.
|
|
107
|
+
confidence: p.confidence,
|
|
108
|
+
locations: p.locationCount,
|
|
109
|
+
outliers: p.outlierCount,
|
|
120
110
|
}));
|
|
121
111
|
console.log(createPatternsTable(rows));
|
|
122
|
-
if (
|
|
123
|
-
console.log(chalk.gray(` ... and ${
|
|
112
|
+
if (searchResult.length > 10) {
|
|
113
|
+
console.log(chalk.gray(` ... and ${searchResult.length - 10} more`));
|
|
124
114
|
}
|
|
125
115
|
console.log();
|
|
126
116
|
console.log(chalk.gray('Please specify a more specific pattern ID'));
|
|
@@ -133,7 +123,7 @@ async function ignoreAction(patternId, options) {
|
|
|
133
123
|
console.log(` Name: ${pattern.name}`);
|
|
134
124
|
console.log(` Category: ${pattern.category}`);
|
|
135
125
|
console.log(` Status: ${pattern.status}`);
|
|
136
|
-
console.log(` Confidence: ${(pattern.confidence
|
|
126
|
+
console.log(` Confidence: ${(pattern.confidence * 100).toFixed(0)}% (${pattern.confidenceLevel})`);
|
|
137
127
|
console.log(` Locations: ${pattern.locations.length}`);
|
|
138
128
|
console.log(` Outliers: ${pattern.outliers.length}`);
|
|
139
129
|
console.log();
|
|
@@ -161,27 +151,14 @@ async function ignoreAction(patternId, options) {
|
|
|
161
151
|
}
|
|
162
152
|
// Ignore the pattern
|
|
163
153
|
try {
|
|
164
|
-
|
|
165
|
-
if (reason) {
|
|
166
|
-
store.update(pattern.id, {
|
|
167
|
-
metadata: {
|
|
168
|
-
...pattern.metadata,
|
|
169
|
-
custom: {
|
|
170
|
-
...pattern.metadata.custom,
|
|
171
|
-
ignoreReason: reason,
|
|
172
|
-
},
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
store.ignore(patternId);
|
|
177
|
-
await store.saveAll();
|
|
154
|
+
await service.ignorePattern(patternId);
|
|
178
155
|
status.success(`Ignored pattern: ${pattern.name}`);
|
|
179
156
|
if (reason) {
|
|
180
157
|
console.log(chalk.gray(` Reason: ${reason}`));
|
|
181
158
|
}
|
|
182
159
|
}
|
|
183
160
|
catch (error) {
|
|
184
|
-
if (error instanceof
|
|
161
|
+
if (error instanceof Error && error.message.includes('Cannot transition')) {
|
|
185
162
|
status.error(`Cannot ignore pattern from status: ${pattern.status}`);
|
|
186
163
|
}
|
|
187
164
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/commands/ignore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/commands/ignore.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -21,4 +21,15 @@ export { dnaCommand } from './dna/index.js';
|
|
|
21
21
|
export { boundariesCommand } from './boundaries.js';
|
|
22
22
|
export { callgraphCommand } from './callgraph.js';
|
|
23
23
|
export { projectsCommand } from './projects.js';
|
|
24
|
+
export { skillsCommand } from './skills.js';
|
|
25
|
+
export { migrateStorageCommand } from './migrate-storage.js';
|
|
26
|
+
export { wrappersCommand } from './wrappers.js';
|
|
27
|
+
export { createTestTopologyCommand } from './test-topology.js';
|
|
28
|
+
export { createCouplingCommand } from './coupling.js';
|
|
29
|
+
export { createErrorHandlingCommand } from './error-handling.js';
|
|
30
|
+
export { createDecisionsCommand } from './decisions.js';
|
|
31
|
+
export { createConstraintsCommand } from './constraints.js';
|
|
32
|
+
export { createSimulateCommand } from './simulate.js';
|
|
33
|
+
export { createWpfCommand } from './wpf.js';
|
|
34
|
+
export { createGoCommand } from './go.js';
|
|
24
35
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -21,4 +21,19 @@ export { dnaCommand } from './dna/index.js';
|
|
|
21
21
|
export { boundariesCommand } from './boundaries.js';
|
|
22
22
|
export { callgraphCommand } from './callgraph.js';
|
|
23
23
|
export { projectsCommand } from './projects.js';
|
|
24
|
+
export { skillsCommand } from './skills.js';
|
|
25
|
+
export { migrateStorageCommand } from './migrate-storage.js';
|
|
26
|
+
export { wrappersCommand } from './wrappers.js';
|
|
27
|
+
// Analysis commands (L5-L7 layers)
|
|
28
|
+
export { createTestTopologyCommand } from './test-topology.js';
|
|
29
|
+
export { createCouplingCommand } from './coupling.js';
|
|
30
|
+
export { createErrorHandlingCommand } from './error-handling.js';
|
|
31
|
+
export { createDecisionsCommand } from './decisions.js';
|
|
32
|
+
export { createConstraintsCommand } from './constraints.js';
|
|
33
|
+
// Speculative Execution Engine
|
|
34
|
+
export { createSimulateCommand } from './simulate.js';
|
|
35
|
+
// WPF Framework Support
|
|
36
|
+
export { createWpfCommand } from './wpf.js';
|
|
37
|
+
// Go Language Support
|
|
38
|
+
export { createGoCommand } from './go.js';
|
|
24
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,mCAAmC;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,+BAA+B;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,wBAAwB;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrate Storage Command - drift migrate-storage
|
|
3
|
+
*
|
|
4
|
+
* Migrates pattern storage from legacy status-based format to unified
|
|
5
|
+
* category-based format (Phase 3 of Pattern System Consolidation).
|
|
6
|
+
*
|
|
7
|
+
* Legacy format:
|
|
8
|
+
* .drift/patterns/
|
|
9
|
+
* ├── discovered/
|
|
10
|
+
* │ ├── api.json
|
|
11
|
+
* │ └── security.json
|
|
12
|
+
* ├── approved/
|
|
13
|
+
* └── ignored/
|
|
14
|
+
*
|
|
15
|
+
* Unified format:
|
|
16
|
+
* .drift/patterns/
|
|
17
|
+
* ├── api.json # Contains all statuses
|
|
18
|
+
* ├── security.json
|
|
19
|
+
* └── ...
|
|
20
|
+
*/
|
|
21
|
+
import { Command } from 'commander';
|
|
22
|
+
export declare const migrateStorageCommand: Command;
|
|
23
|
+
//# sourceMappingURL=migrate-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-storage.d.ts","sourceRoot":"","sources":["../../src/commands/migrate-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgXpC,eAAO,MAAM,qBAAqB,SAMV,CAAC"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrate Storage Command - drift migrate-storage
|
|
3
|
+
*
|
|
4
|
+
* Migrates pattern storage from legacy status-based format to unified
|
|
5
|
+
* category-based format (Phase 3 of Pattern System Consolidation).
|
|
6
|
+
*
|
|
7
|
+
* Legacy format:
|
|
8
|
+
* .drift/patterns/
|
|
9
|
+
* ├── discovered/
|
|
10
|
+
* │ ├── api.json
|
|
11
|
+
* │ └── security.json
|
|
12
|
+
* ├── approved/
|
|
13
|
+
* └── ignored/
|
|
14
|
+
*
|
|
15
|
+
* Unified format:
|
|
16
|
+
* .drift/patterns/
|
|
17
|
+
* ├── api.json # Contains all statuses
|
|
18
|
+
* ├── security.json
|
|
19
|
+
* └── ...
|
|
20
|
+
*/
|
|
21
|
+
import { Command } from 'commander';
|
|
22
|
+
import chalk from 'chalk';
|
|
23
|
+
import * as fs from 'fs';
|
|
24
|
+
import * as path from 'path';
|
|
25
|
+
import { createSpinner, status } from '../ui/spinner.js';
|
|
26
|
+
import { confirmPrompt } from '../ui/prompts.js';
|
|
27
|
+
import { UnifiedFilePatternRepository } from 'driftdetect-core';
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Helpers
|
|
30
|
+
// ============================================================================
|
|
31
|
+
function hasLegacyFormat(rootDir) {
|
|
32
|
+
const patternsDir = path.join(rootDir, '.drift', 'patterns');
|
|
33
|
+
const legacyDirs = ['discovered', 'approved', 'ignored'];
|
|
34
|
+
for (const dir of legacyDirs) {
|
|
35
|
+
const statusDir = path.join(patternsDir, dir);
|
|
36
|
+
if (fs.existsSync(statusDir) && fs.statSync(statusDir).isDirectory()) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
function hasUnifiedFormat(rootDir) {
|
|
43
|
+
const patternsDir = path.join(rootDir, '.drift', 'patterns');
|
|
44
|
+
const categories = ['api', 'auth', 'security', 'errors', 'logging', 'data-access', 'config', 'testing', 'performance', 'components', 'styling', 'structural', 'types', 'accessibility', 'documentation'];
|
|
45
|
+
for (const category of categories) {
|
|
46
|
+
const filePath = path.join(patternsDir, `${category}.json`);
|
|
47
|
+
if (fs.existsSync(filePath)) {
|
|
48
|
+
try {
|
|
49
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
50
|
+
const data = JSON.parse(content);
|
|
51
|
+
if (data.version?.startsWith('2.')) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Not valid unified format
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
async function createBackup(rootDir) {
|
|
63
|
+
const patternsDir = path.join(rootDir, '.drift', 'patterns');
|
|
64
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
65
|
+
const backupDir = path.join(rootDir, '.drift', 'backups', `patterns-${timestamp}`);
|
|
66
|
+
fs.mkdirSync(backupDir, { recursive: true });
|
|
67
|
+
// Copy entire patterns directory
|
|
68
|
+
copyDirSync(patternsDir, backupDir);
|
|
69
|
+
return backupDir;
|
|
70
|
+
}
|
|
71
|
+
function copyDirSync(src, dest) {
|
|
72
|
+
if (!fs.existsSync(src))
|
|
73
|
+
return;
|
|
74
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
75
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
const srcPath = path.join(src, entry.name);
|
|
78
|
+
const destPath = path.join(dest, entry.name);
|
|
79
|
+
if (entry.isDirectory()) {
|
|
80
|
+
copyDirSync(srcPath, destPath);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
fs.copyFileSync(srcPath, destPath);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function migrateAction(options) {
|
|
88
|
+
const rootDir = process.cwd();
|
|
89
|
+
console.log();
|
|
90
|
+
console.log(chalk.bold('🔄 Pattern Storage Migration'));
|
|
91
|
+
console.log();
|
|
92
|
+
// Check if drift is initialized
|
|
93
|
+
if (!fs.existsSync(path.join(rootDir, '.drift'))) {
|
|
94
|
+
status.error('Drift is not initialized in this directory.');
|
|
95
|
+
console.log(chalk.gray('Run `drift init` first.'));
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
// Check current format
|
|
99
|
+
const hasLegacy = hasLegacyFormat(rootDir);
|
|
100
|
+
const hasUnified = hasUnifiedFormat(rootDir);
|
|
101
|
+
if (!hasLegacy && !hasUnified) {
|
|
102
|
+
status.info('No patterns found. Nothing to migrate.');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (hasUnified && !hasLegacy) {
|
|
106
|
+
status.success('Already using unified format. No migration needed.');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (hasUnified && hasLegacy) {
|
|
110
|
+
console.log(chalk.yellow('⚠️ Both legacy and unified formats detected.'));
|
|
111
|
+
console.log(chalk.gray('This may indicate a partial migration.'));
|
|
112
|
+
console.log();
|
|
113
|
+
if (!options.force) {
|
|
114
|
+
const proceed = await confirmPrompt('Continue with migration? (will merge patterns)', false);
|
|
115
|
+
if (!proceed) {
|
|
116
|
+
status.info('Migration cancelled.');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Dry run mode
|
|
122
|
+
if (options.dryRun) {
|
|
123
|
+
console.log(chalk.cyan('🔍 Dry run mode - no changes will be made'));
|
|
124
|
+
console.log();
|
|
125
|
+
// Count patterns in legacy format
|
|
126
|
+
let totalPatterns = 0;
|
|
127
|
+
const categories = new Set();
|
|
128
|
+
for (const statusDir of ['discovered', 'approved', 'ignored']) {
|
|
129
|
+
const dir = path.join(rootDir, '.drift', 'patterns', statusDir);
|
|
130
|
+
if (!fs.existsSync(dir))
|
|
131
|
+
continue;
|
|
132
|
+
const files = fs.readdirSync(dir).filter(f => f.endsWith('.json'));
|
|
133
|
+
for (const file of files) {
|
|
134
|
+
try {
|
|
135
|
+
const content = fs.readFileSync(path.join(dir, file), 'utf-8');
|
|
136
|
+
const data = JSON.parse(content);
|
|
137
|
+
totalPatterns += data.patterns?.length || 0;
|
|
138
|
+
categories.add(file.replace('.json', ''));
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Skip invalid files
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
console.log(` Patterns to migrate: ${chalk.cyan(totalPatterns)}`);
|
|
146
|
+
console.log(` Categories: ${chalk.cyan(Array.from(categories).join(', '))}`);
|
|
147
|
+
console.log();
|
|
148
|
+
console.log(chalk.gray('Run without --dry-run to perform migration.'));
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Create backup if requested
|
|
152
|
+
let backupPath;
|
|
153
|
+
if (options.backup !== false) {
|
|
154
|
+
const backupSpinner = createSpinner('Creating backup...');
|
|
155
|
+
backupSpinner.start();
|
|
156
|
+
try {
|
|
157
|
+
backupPath = await createBackup(rootDir);
|
|
158
|
+
backupSpinner.succeed(`Backup created: ${chalk.gray(path.relative(rootDir, backupPath))}`);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
backupSpinner.fail('Failed to create backup');
|
|
162
|
+
console.error(chalk.red(error.message));
|
|
163
|
+
if (!options.force) {
|
|
164
|
+
status.error('Migration aborted. Use --force to skip backup.');
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Perform migration
|
|
170
|
+
const migrateSpinner = createSpinner('Migrating patterns...');
|
|
171
|
+
migrateSpinner.start();
|
|
172
|
+
try {
|
|
173
|
+
const repository = new UnifiedFilePatternRepository({
|
|
174
|
+
rootDir,
|
|
175
|
+
autoSave: false,
|
|
176
|
+
autoMigrate: true,
|
|
177
|
+
keepLegacyFiles: options.keepLegacy ?? false,
|
|
178
|
+
});
|
|
179
|
+
await repository.initialize();
|
|
180
|
+
await repository.saveAll();
|
|
181
|
+
const stats = await repository.getStorageStats();
|
|
182
|
+
await repository.close();
|
|
183
|
+
migrateSpinner.succeed(`Migrated ${chalk.cyan(stats.totalPatterns)} patterns`);
|
|
184
|
+
// Show summary
|
|
185
|
+
console.log();
|
|
186
|
+
console.log(chalk.bold('📊 Migration Summary'));
|
|
187
|
+
console.log();
|
|
188
|
+
console.log(` Total patterns: ${chalk.cyan(stats.totalPatterns)}`);
|
|
189
|
+
console.log(` Categories: ${chalk.cyan(stats.fileCount)}`);
|
|
190
|
+
console.log();
|
|
191
|
+
console.log(' By status:');
|
|
192
|
+
console.log(` Discovered: ${chalk.yellow(stats.byStatus.discovered)}`);
|
|
193
|
+
console.log(` Approved: ${chalk.green(stats.byStatus.approved)}`);
|
|
194
|
+
console.log(` Ignored: ${chalk.gray(stats.byStatus.ignored)}`);
|
|
195
|
+
if (backupPath) {
|
|
196
|
+
console.log();
|
|
197
|
+
console.log(chalk.gray(`Backup saved to: ${path.relative(rootDir, backupPath)}`));
|
|
198
|
+
}
|
|
199
|
+
if (!options.keepLegacy) {
|
|
200
|
+
console.log();
|
|
201
|
+
console.log(chalk.green('✓ Legacy format directories removed.'));
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
console.log();
|
|
205
|
+
console.log(chalk.yellow('⚠️ Legacy format directories preserved (--keep-legacy).'));
|
|
206
|
+
console.log(chalk.gray(' You can manually remove them after verifying the migration.'));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
migrateSpinner.fail('Migration failed');
|
|
211
|
+
console.error(chalk.red(error.message));
|
|
212
|
+
if (backupPath) {
|
|
213
|
+
console.log();
|
|
214
|
+
console.log(chalk.yellow(`Restore from backup: ${path.relative(rootDir, backupPath)}`));
|
|
215
|
+
}
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
console.log();
|
|
219
|
+
status.success('Migration complete!');
|
|
220
|
+
console.log();
|
|
221
|
+
}
|
|
222
|
+
// ============================================================================
|
|
223
|
+
// Rollback Action
|
|
224
|
+
// ============================================================================
|
|
225
|
+
async function rollbackAction() {
|
|
226
|
+
const rootDir = process.cwd();
|
|
227
|
+
console.log();
|
|
228
|
+
console.log(chalk.bold('⏪ Rollback Pattern Storage'));
|
|
229
|
+
console.log();
|
|
230
|
+
// Find backups
|
|
231
|
+
const backupsDir = path.join(rootDir, '.drift', 'backups');
|
|
232
|
+
if (!fs.existsSync(backupsDir)) {
|
|
233
|
+
status.error('No backups found.');
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const backups = fs.readdirSync(backupsDir)
|
|
237
|
+
.filter(d => d.startsWith('patterns-'))
|
|
238
|
+
.sort()
|
|
239
|
+
.reverse();
|
|
240
|
+
if (backups.length === 0) {
|
|
241
|
+
status.error('No pattern backups found.');
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
console.log('Available backups:');
|
|
245
|
+
for (const backup of backups.slice(0, 5)) {
|
|
246
|
+
console.log(` ${chalk.cyan(backup)}`);
|
|
247
|
+
}
|
|
248
|
+
if (backups.length > 5) {
|
|
249
|
+
console.log(chalk.gray(` ... and ${backups.length - 5} more`));
|
|
250
|
+
}
|
|
251
|
+
console.log();
|
|
252
|
+
const latestBackup = backups[0];
|
|
253
|
+
if (!latestBackup) {
|
|
254
|
+
status.error('No pattern backups found.');
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const confirmed = await confirmPrompt(`Restore from ${latestBackup}?`, false);
|
|
258
|
+
if (!confirmed) {
|
|
259
|
+
status.info('Rollback cancelled.');
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const rollbackSpinner = createSpinner('Rolling back...');
|
|
263
|
+
rollbackSpinner.start();
|
|
264
|
+
try {
|
|
265
|
+
const patternsDir = path.join(rootDir, '.drift', 'patterns');
|
|
266
|
+
const backupPath = path.join(backupsDir, latestBackup);
|
|
267
|
+
// Remove current patterns
|
|
268
|
+
if (fs.existsSync(patternsDir)) {
|
|
269
|
+
fs.rmSync(patternsDir, { recursive: true });
|
|
270
|
+
}
|
|
271
|
+
// Restore from backup
|
|
272
|
+
copyDirSync(backupPath, patternsDir);
|
|
273
|
+
rollbackSpinner.succeed('Rollback complete');
|
|
274
|
+
console.log();
|
|
275
|
+
console.log(chalk.gray(`Restored from: ${latestBackup}`));
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
rollbackSpinner.fail('Rollback failed');
|
|
279
|
+
console.error(chalk.red(error.message));
|
|
280
|
+
process.exit(1);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// ============================================================================
|
|
284
|
+
// Status Action
|
|
285
|
+
// ============================================================================
|
|
286
|
+
async function statusAction() {
|
|
287
|
+
const rootDir = process.cwd();
|
|
288
|
+
console.log();
|
|
289
|
+
console.log(chalk.bold('📦 Pattern Storage Status'));
|
|
290
|
+
console.log();
|
|
291
|
+
if (!fs.existsSync(path.join(rootDir, '.drift'))) {
|
|
292
|
+
status.error('Drift is not initialized in this directory.');
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const hasLegacy = hasLegacyFormat(rootDir);
|
|
296
|
+
const hasUnified = hasUnifiedFormat(rootDir);
|
|
297
|
+
if (!hasLegacy && !hasUnified) {
|
|
298
|
+
console.log(' Format: ' + chalk.gray('No patterns stored'));
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
if (hasUnified && !hasLegacy) {
|
|
302
|
+
console.log(' Format: ' + chalk.green('Unified (v2.0)'));
|
|
303
|
+
console.log(' Status: ' + chalk.green('Up to date'));
|
|
304
|
+
}
|
|
305
|
+
else if (hasLegacy && !hasUnified) {
|
|
306
|
+
console.log(' Format: ' + chalk.yellow('Legacy (v1.0)'));
|
|
307
|
+
console.log(' Status: ' + chalk.yellow('Migration available'));
|
|
308
|
+
console.log();
|
|
309
|
+
console.log(chalk.gray(' Run `drift migrate-storage` to upgrade.'));
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
console.log(' Format: ' + chalk.red('Mixed (legacy + unified)'));
|
|
313
|
+
console.log(' Status: ' + chalk.red('Needs cleanup'));
|
|
314
|
+
console.log();
|
|
315
|
+
console.log(chalk.gray(' Run `drift migrate-storage --force` to complete migration.'));
|
|
316
|
+
}
|
|
317
|
+
console.log();
|
|
318
|
+
}
|
|
319
|
+
// ============================================================================
|
|
320
|
+
// Command Registration
|
|
321
|
+
// ============================================================================
|
|
322
|
+
export const migrateStorageCommand = new Command('migrate-storage')
|
|
323
|
+
.description('Migrate pattern storage to unified format')
|
|
324
|
+
.option('-f, --force', 'Force migration without confirmation')
|
|
325
|
+
.option('--no-backup', 'Skip creating backup')
|
|
326
|
+
.option('--keep-legacy', 'Keep legacy format files after migration')
|
|
327
|
+
.option('--dry-run', 'Show what would be migrated without making changes')
|
|
328
|
+
.action(migrateAction);
|
|
329
|
+
migrateStorageCommand
|
|
330
|
+
.command('rollback')
|
|
331
|
+
.description('Rollback to previous pattern storage backup')
|
|
332
|
+
.action(rollbackAction);
|
|
333
|
+
migrateStorageCommand
|
|
334
|
+
.command('status')
|
|
335
|
+
.description('Show current storage format status')
|
|
336
|
+
.action(statusAction);
|
|
337
|
+
//# sourceMappingURL=migrate-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-storage.js","sourceRoot":"","sources":["../../src/commands/migrate-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report Command - drift report
|
|
3
|
+
*
|
|
4
|
+
* Generate reports in various formats.
|
|
5
|
+
*
|
|
6
|
+
* MIGRATION: Now uses IPatternService for pattern operations.
|
|
7
|
+
*
|
|
8
|
+
* @requirements 29.7
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
export interface ReportOptions {
|
|
12
|
+
/** Output format */
|
|
13
|
+
format?: 'text' | 'json' | 'github' | 'gitlab';
|
|
14
|
+
/** Output file path */
|
|
15
|
+
output?: string;
|
|
16
|
+
/** Include only specific categories */
|
|
17
|
+
categories?: string[];
|
|
18
|
+
/** Enable verbose output */
|
|
19
|
+
verbose?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const reportCommand: Command;
|
|
22
|
+
//# sourceMappingURL=report.d.ts.map
|